forked from swc-project/swc
-
Notifications
You must be signed in to change notification settings - Fork 4
/
sourcemap.rs
69 lines (56 loc) · 1.78 KB
/
sourcemap.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/// Use memory allocator
extern crate swc_node_base;
use std::{
env,
fs::{self, File},
io::BufWriter,
path::Path,
time::Instant,
};
use swc_common::input::SourceFileInput;
use swc_ecma_ast::*;
use swc_ecma_codegen::{text_writer::JsWriter, Emitter};
use swc_ecma_parser::{lexer::Lexer, Parser, Syntax};
fn parse_and_gen(entry: &Path) {
testing::run_test2(false, |cm, _| {
let fm = cm.load_file(entry).unwrap();
let lexer = Lexer::new(
Syntax::Typescript(Default::default()),
EsVersion::latest(),
SourceFileInput::from(&*fm),
None,
);
let mut parser = Parser::new_from(lexer);
let m = parser
.parse_module()
.expect("failed to parse input as a module");
let mut code = vec![];
let mut srcmap = vec![];
{
let mut emitter = Emitter {
cfg: swc_ecma_codegen::Config {
..Default::default()
},
cm: cm.clone(),
comments: None,
wr: JsWriter::new(cm.clone(), "\n", &mut code, Some(&mut srcmap)),
};
emitter.emit_module(&m).unwrap();
}
let srcmap = cm.build_source_map(&srcmap);
fs::write("output.js", &code).unwrap();
let srcmap_file = File::create("output.js.map").unwrap();
let srcmap_wr = BufWriter::new(srcmap_file);
srcmap.to_writer(srcmap_wr).unwrap();
Ok(())
})
.expect("failed to process a module");
}
/// Usage: ./scripts/instruements path/to/input/file
fn main() {
let main_file = env::args().nth(1).unwrap();
let start = Instant::now();
parse_and_gen(Path::new(&main_file));
let dur = start.elapsed();
println!("Took {:?}", dur);
}