@@ -7,7 +7,7 @@ pub mod oxc {
7
7
parser:: Parser ,
8
8
semantic:: SemanticBuilder ,
9
9
span:: SourceType ,
10
- transformer:: { JsxOptions , TransformOptions , Transformer , TypeScriptOptions } ,
10
+ transformer:: { TransformOptions , Transformer } ,
11
11
} ;
12
12
13
13
pub fn transform ( path : & Path , source_text : & str ) -> ( Allocator , String ) {
@@ -16,11 +16,7 @@ pub mod oxc {
16
16
let printed = {
17
17
let ret = Parser :: new ( & allocator, source_text, source_type) . parse ( ) ;
18
18
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 ( ) ;
24
20
let ( symbols, scopes) = SemanticBuilder :: new ( )
25
21
. build ( & program)
26
22
. semantic
@@ -38,16 +34,19 @@ pub mod oxc {
38
34
pub mod swc {
39
35
use std:: { path:: Path , sync:: Arc } ;
40
36
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 } ;
44
39
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
+ } ;
46
45
use swc_ecma_transforms_react:: { react, Options , Runtime } ;
47
46
use swc_ecma_transforms_typescript:: strip;
48
47
use swc_ecma_visit:: VisitMutWith ;
49
48
50
- pub fn transform ( path : & Path , source_text : & str ) -> ( Program , String ) {
49
+ pub fn transform ( path : & Path , source_text : & str ) -> String {
51
50
let cm = Lrc :: new ( SourceMap :: new ( swc_common:: FilePathMapping :: empty ( ) ) ) ;
52
51
let compiler = Compiler :: new ( Arc :: clone ( & cm) ) ;
53
52
let comments = SwcComments :: default ( ) ;
@@ -61,40 +60,55 @@ pub mod swc {
61
60
} ;
62
61
63
62
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 ( ) ;
68
71
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 ( ) ;
71
74
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
+ ) ) ;
77
80
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) ;
92
102
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" ) ;
96
106
97
- ( program, printed. code )
107
+ Ok ( printed. code )
108
+ } )
109
+ } )
110
+ } )
111
+ . unwrap ( )
98
112
} )
99
113
}
100
114
}
0 commit comments