@@ -7,7 +7,7 @@ pub mod oxc {
77 parser:: Parser ,
88 semantic:: SemanticBuilder ,
99 span:: SourceType ,
10- transformer:: { JsxOptions , TransformOptions , Transformer , TypeScriptOptions } ,
10+ transformer:: { TransformOptions , Transformer } ,
1111 } ;
1212
1313 pub fn transform ( path : & Path , source_text : & str ) -> ( Allocator , String ) {
@@ -16,11 +16,7 @@ pub mod oxc {
1616 let printed = {
1717 let ret = Parser :: new ( & allocator, source_text, source_type) . parse ( ) ;
1818 let mut program = ret. program ;
19- let transform_options = TransformOptions {
20- typescript : TypeScriptOptions :: default ( ) ,
21- jsx : JsxOptions :: default ( ) ,
22- ..TransformOptions :: default ( )
23- } ;
19+ let transform_options = TransformOptions :: from_target ( "es2015" ) . unwrap ( ) ;
2420 let ( symbols, scopes) = SemanticBuilder :: new ( )
2521 . build ( & program)
2622 . semantic
@@ -38,16 +34,19 @@ pub mod oxc {
3834pub mod swc {
3935 use std:: { path:: Path , sync:: Arc } ;
4036
41- use swc:: { Compiler , PrintArgs , SwcComments } ;
42- use swc_common:: { source_map:: SourceMap , sync:: Lrc , Mark , GLOBALS } ;
43- use swc_ecma_ast:: Program ;
37+ use swc:: { try_with_handler, Compiler , PrintArgs , SwcComments } ;
38+ use swc_common:: { errors:: HANDLER , source_map:: SourceMap , sync:: Lrc , Mark , GLOBALS } ;
4439 use swc_ecma_parser:: { EsSyntax , Parser , StringInput , Syntax , TsSyntax } ;
45- use swc_ecma_transforms:: resolver;
40+ use swc_ecma_transforms:: {
41+ compat:: { es2016, es2017, es2018, es2019, es2020, es2021, es2022} ,
42+ helpers:: { Helpers , HELPERS } ,
43+ resolver,
44+ } ;
4645 use swc_ecma_transforms_react:: { react, Options , Runtime } ;
4746 use swc_ecma_transforms_typescript:: strip;
4847 use swc_ecma_visit:: VisitMutWith ;
4948
50- pub fn transform ( path : & Path , source_text : & str ) -> ( Program , String ) {
49+ pub fn transform ( path : & Path , source_text : & str ) -> String {
5150 let cm = Lrc :: new ( SourceMap :: new ( swc_common:: FilePathMapping :: empty ( ) ) ) ;
5251 let compiler = Compiler :: new ( Arc :: clone ( & cm) ) ;
5352 let comments = SwcComments :: default ( ) ;
@@ -61,40 +60,55 @@ pub mod swc {
6160 } ;
6261
6362 GLOBALS . set ( & Default :: default ( ) , || {
64- let input = StringInput :: new ( source_text, Default :: default ( ) , Default :: default ( ) ) ;
65- let mut program = Parser :: new ( syntax, input, Some ( & comments) )
66- . parse_program ( )
67- . unwrap ( ) ;
63+ try_with_handler ( cm. clone ( ) , Default :: default ( ) , |handler| {
64+ HELPERS . set ( & Helpers :: new ( true ) , || {
65+ HANDLER . set ( handler, || {
66+ let input =
67+ StringInput :: new ( source_text, Default :: default ( ) , Default :: default ( ) ) ;
68+ let mut program = Parser :: new ( syntax, input, Some ( & comments) )
69+ . parse_program ( )
70+ . unwrap ( ) ;
6871
69- let top_level_mark = Mark :: new ( ) ;
70- let unresolved_mark = Mark :: new ( ) ;
72+ let top_level_mark = Mark :: new ( ) ;
73+ let unresolved_mark = Mark :: new ( ) ;
7174
72- program. visit_mut_with ( & mut resolver (
73- unresolved_mark,
74- top_level_mark,
75- syntax. typescript ( ) ,
76- ) ) ;
75+ program. visit_mut_with ( & mut resolver (
76+ unresolved_mark,
77+ top_level_mark,
78+ syntax. typescript ( ) ,
79+ ) ) ;
7780
78- let mut ast_pass = (
79- strip ( unresolved_mark, top_level_mark) ,
80- react (
81- Arc :: clone ( & cm) ,
82- Some ( comments) ,
83- Options {
84- runtime : Some ( Runtime :: Automatic ) ,
85- ..Options :: default ( )
86- } ,
87- top_level_mark,
88- unresolved_mark,
89- ) ,
90- ) ;
91- let program = program. apply ( & mut ast_pass) ;
81+ let mut ast_pass = (
82+ strip ( unresolved_mark, top_level_mark) ,
83+ react (
84+ Arc :: clone ( & cm) ,
85+ Some ( comments) ,
86+ Options {
87+ runtime : Some ( Runtime :: Automatic ) ,
88+ ..Options :: default ( )
89+ } ,
90+ top_level_mark,
91+ unresolved_mark,
92+ ) ,
93+ es2022 ( Default :: default ( ) , unresolved_mark) ,
94+ es2021 ( ) ,
95+ es2020 ( Default :: default ( ) , unresolved_mark) ,
96+ es2019 ( ) ,
97+ es2018 ( Default :: default ( ) ) ,
98+ es2017 ( Default :: default ( ) , unresolved_mark) ,
99+ es2016 ( ) ,
100+ ) ;
101+ let program = program. apply ( & mut ast_pass) ;
92102
93- let printed = compiler
94- . print ( & program, PrintArgs :: default ( ) )
95- . expect ( "print failed" ) ;
103+ let printed = compiler
104+ . print ( & program, PrintArgs :: default ( ) )
105+ . expect ( "print failed" ) ;
96106
97- ( program, printed. code )
107+ Ok ( printed. code )
108+ } )
109+ } )
110+ } )
111+ . unwrap ( )
98112 } )
99113 }
100114}
0 commit comments