Skip to main content

vue_oxc_parser/
lib.rs

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}