enhanced-magic-string 0.1.0

Rust based magic-string implementation with sourcemap chains support
Documentation
use std::fs;

use enhanced_magic_string::{
  magic_string::{MagicString, MagicStringOptions},
  types::SourceMapOptions,
};

use crate::common::normalize_newlines;

mod common;

#[test]
fn magic_string() {
  fixture!("tests/fixtures/magic-string/basic.js", |file, _| {
    let content = fs::read_to_string(&file).unwrap();
    let dir = file.parent().unwrap();
    let filename = Some(String::from("./fixtures/magic-string/basic.js"));

    let mut s = MagicString::new(
      &content,
      Some(MagicStringOptions {
        filename: filename.clone(),
        ..Default::default()
      }),
    );

    s.prepend("/* Are you ok? */\n");
    s.append("/* this is magic string */\n");

    let map = s
      .generate_map(SourceMapOptions {
        include_content: Some(true),
        file: Some(String::from("basic.js.map")),
        source: filename.clone(),
        ..Default::default()
      })
      .unwrap();

    let code = s.to_string();

    let expect_code = fs::read_to_string(dir.join("basic.output.js")).unwrap();

    let mut str_buf = vec![];
    map.to_writer(&mut str_buf).unwrap();
    let map_str = String::from_utf8(str_buf).unwrap();
    let expect_map = fs::read_to_string(dir.join("basic.js.map")).unwrap();

    assert_eq!(normalize_newlines(&code), normalize_newlines(&expect_code));
    assert_eq!(
      normalize_newlines(&map_str),
      normalize_newlines(&expect_map.replace(";\"}", "\"}"))
    );
  });
}