1use std::path::PathBuf;
2
3use oxc_allocator::Allocator;
4use oxc_codegen::CodegenOptions;
5use wasm_bindgen::prelude::wasm_bindgen;
6pub mod utils;
7
8use crate::parser::VueOxcParser;
9
10pub mod parser;
11pub mod semantic;
12
13#[wasm_bindgen]
14pub struct ParseResult {
15 #[wasm_bindgen(getter_with_clone)]
16 pub code: String,
17 #[wasm_bindgen(getter_with_clone)]
18 pub map: String,
19 #[wasm_bindgen(getter_with_clone)]
20 pub ast: String,
21}
22
23#[wasm_bindgen]
24pub fn parse(source_text: String, filename: String) -> ParseResult {
25 let allocator = Allocator::new();
26 let program = VueOxcParser::new(&allocator, &source_text).parse().program;
27 let result = oxc_codegen::Codegen::new()
28 .with_options(CodegenOptions {
29 source_map_path: Some(PathBuf::from(&filename)),
30 ..Default::default()
31 })
32 .build(&program);
33
34 ParseResult {
35 code: result.code,
36 map: result.map.unwrap().to_json_string(),
37 ast: program.to_pretty_estree_ts_json(false),
38 }
39}
40
41#[wasm_bindgen]
42pub fn parse_for_semantic(source_text: String, filename: String) -> ParseResult {
43 let allocator = Allocator::new();
44 let program = VueOxcParser::new(&allocator, &source_text)
45 .parse_for_semantic()
46 .program;
47 let result = oxc_codegen::Codegen::new()
48 .with_options(CodegenOptions {
49 source_map_path: Some(PathBuf::from(&filename)),
50 ..Default::default()
51 })
52 .build(&program);
53
54 ParseResult {
55 code: result.code,
56 map: result.map.unwrap().to_json_string(),
57 ast: program.to_pretty_estree_ts_json(false),
58 }
59}