Skip to content

Commit

Permalink
fix(es/module): Skip CJS and AMD transformations for Script (#7661)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #7650
  • Loading branch information
magic-akari committed Jul 17, 2023
1 parent bed73c1 commit a2d0408
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 15 deletions.
12 changes: 12 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7650/input/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"jsc": {
"target": "es2020",
"parser": {
"syntax": "typescript"
}
},
"isModule": "unknown",
"module": {
"type": "commonjs"
}
}
3 changes: 3 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7650/input/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const a = require('foo')
console.log(a)
import('other')
3 changes: 3 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7650/output/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const a = require('foo');
console.log(a);
import('other');
18 changes: 11 additions & 7 deletions crates/swc_ecma_transforms_module/src/amd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,8 @@ where
{
noop_visit_mut_type!();

fn visit_mut_module_items(&mut self, n: &mut Vec<ModuleItem>) {
if let Some(first) = n.first() {
fn visit_mut_module(&mut self, n: &mut Module) {
if let Some(first) = n.body.first() {
if self.module_id.is_none() {
self.module_id = self.get_amd_module_id_from_comments(first.span());
}
Expand All @@ -139,13 +139,13 @@ where
let import_interop = self.config.import_interop();

let mut strip = ModuleDeclStrip::new(self.const_var_kind);
n.visit_mut_with(&mut strip);
n.body.visit_mut_with(&mut strip);

let mut stmts: Vec<Stmt> = Vec::with_capacity(n.len() + 4);
let mut stmts: Vec<Stmt> = Vec::with_capacity(n.body.len() + 4);

// "use strict";
if self.config.strict_mode {
stmts.push(clone_first_use_directive(n, true).unwrap_or_else(use_strict));
stmts.push(clone_first_use_directive(&n.body, true).unwrap_or_else(use_strict));
}

let ModuleDeclStrip {
Expand All @@ -169,7 +169,7 @@ where
.map(From::from),
);

stmts.extend(n.take().into_iter().filter_map(|item| match item {
stmts.extend(n.body.take().into_iter().filter_map(|item| match item {
ModuleItem::Stmt(stmt) if !stmt.is_directive() => Some(stmt),
_ => None,
}));
Expand Down Expand Up @@ -256,14 +256,18 @@ where
.as_arg(),
);

*n = vec![
n.body = vec![
quote_ident!(DUMMY_SP.apply_mark(self.unresolved_mark), "define")
.as_call(DUMMY_SP, amd_call_args)
.into_stmt()
.into(),
];
}

fn visit_mut_script(&mut self, _: &mut Script) {
// skip script
}

fn visit_mut_expr(&mut self, n: &mut Expr) {
match n {
Expr::Call(CallExpr {
Expand Down
20 changes: 12 additions & 8 deletions crates/swc_ecma_transforms_module/src/common_js.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,15 +90,15 @@ where
{
noop_visit_mut_type!();

fn visit_mut_module_items(&mut self, n: &mut Vec<ModuleItem>) {
fn visit_mut_module(&mut self, n: &mut Module) {
let import_interop = self.config.import_interop();

let mut module_map = Default::default();

let mut has_ts_import_equals = false;

// handle `import foo = require("mod")`
n.iter_mut().for_each(|item| {
n.body.iter_mut().for_each(|item| {
if let ModuleItem::ModuleDecl(module_decl) = item {
*item = self.handle_ts_import_equals(
module_decl.take(),
Expand All @@ -109,16 +109,16 @@ where
});

let mut strip = ModuleDeclStrip::new(self.const_var_kind);
n.visit_mut_with(&mut strip);
n.body.visit_mut_with(&mut strip);

let mut stmts: Vec<ModuleItem> = Vec::with_capacity(n.len() + 6);
let mut stmts: Vec<ModuleItem> = Vec::with_capacity(n.body.len() + 6);

stmts.extend(clone_first_use_directive(n, false).map(From::from));
stmts.extend(clone_first_use_directive(&n.body, false).map(From::from));

// "use strict";
if self.config.strict_mode {
stmts.push(
clone_first_use_directive(n, true)
clone_first_use_directive(&n.body, true)
.unwrap_or_else(use_strict)
.into(),
);
Expand Down Expand Up @@ -155,7 +155,7 @@ where
.map(From::from),
);

stmts.extend(n.take().into_iter().filter(|item| match item {
stmts.extend(n.body.take().into_iter().filter(|item| match item {
ModuleItem::Stmt(stmt) => !stmt.is_directive(),
_ => false,
}));
Expand Down Expand Up @@ -184,7 +184,11 @@ where
self.config.allow_top_level_this,
));

*n = stmts;
n.body = stmts;
}

fn visit_mut_script(&mut self, _: &mut Script) {
// skip script
}

fn visit_mut_expr(&mut self, n: &mut Expr) {
Expand Down

1 comment on commit a2d0408

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: a2d0408 Previous: c0e4805 Ratio
es/full/bugs-1 289772 ns/iter (± 7279) 285110 ns/iter (± 7646) 1.02
es/full/minify/libraries/antd 1427195090 ns/iter (± 19347397) 1332912940 ns/iter (± 8992554) 1.07
es/full/minify/libraries/d3 293890814 ns/iter (± 5210902) 284825221 ns/iter (± 3012785) 1.03
es/full/minify/libraries/echarts 1127662261 ns/iter (± 16608581) 1088226300 ns/iter (± 6097842) 1.04
es/full/minify/libraries/jquery 87664418 ns/iter (± 3603741) 85115948 ns/iter (± 268873) 1.03
es/full/minify/libraries/lodash 101296454 ns/iter (± 1491577) 98959487 ns/iter (± 303520) 1.02
es/full/minify/libraries/moment 50758729 ns/iter (± 749969) 49963312 ns/iter (± 118753) 1.02
es/full/minify/libraries/react 18192445 ns/iter (± 112401) 18027897 ns/iter (± 48959) 1.01
es/full/minify/libraries/terser 227940389 ns/iter (± 2864508) 221052619 ns/iter (± 1489697) 1.03
es/full/minify/libraries/three 403711030 ns/iter (± 8863632) 392301908 ns/iter (± 2244487) 1.03
es/full/minify/libraries/typescript 2806644043 ns/iter (± 18361484) 2727188580 ns/iter (± 52255007) 1.03
es/full/minify/libraries/victory 602809339 ns/iter (± 13917965) 591423594 ns/iter (± 7048618) 1.02
es/full/minify/libraries/vue 122932567 ns/iter (± 576430) 121383026 ns/iter (± 434898) 1.01
es/full/codegen/es3 35079 ns/iter (± 119) 34849 ns/iter (± 49) 1.01
es/full/codegen/es5 34976 ns/iter (± 146) 34802 ns/iter (± 86) 1.00
es/full/codegen/es2015 35155 ns/iter (± 139) 34806 ns/iter (± 79) 1.01
es/full/codegen/es2016 35110 ns/iter (± 121) 34839 ns/iter (± 48) 1.01
es/full/codegen/es2017 35070 ns/iter (± 153) 34839 ns/iter (± 65) 1.01
es/full/codegen/es2018 35038 ns/iter (± 135) 34796 ns/iter (± 33) 1.01
es/full/codegen/es2019 34948 ns/iter (± 167) 34913 ns/iter (± 71) 1.00
es/full/codegen/es2020 35087 ns/iter (± 150) 34735 ns/iter (± 51) 1.01
es/full/all/es3 174110729 ns/iter (± 1192190) 172888505 ns/iter (± 1330203) 1.01
es/full/all/es5 164962083 ns/iter (± 1367343) 165138651 ns/iter (± 1597010) 1.00
es/full/all/es2015 124439502 ns/iter (± 1328429) 123946819 ns/iter (± 586182) 1.00
es/full/all/es2016 123751174 ns/iter (± 575023) 122612835 ns/iter (± 379147) 1.01
es/full/all/es2017 123076686 ns/iter (± 615926) 122711877 ns/iter (± 711570) 1.00
es/full/all/es2018 120741008 ns/iter (± 836438) 120834403 ns/iter (± 594181) 1.00
es/full/all/es2019 120656148 ns/iter (± 1056561) 119939070 ns/iter (± 650414) 1.01
es/full/all/es2020 115696908 ns/iter (± 615796) 114889368 ns/iter (± 492264) 1.01
es/full/parser 539150 ns/iter (± 6464) 526838 ns/iter (± 6685) 1.02
es/full/base/fixer 19686 ns/iter (± 139) 18876 ns/iter (± 261) 1.04
es/full/base/resolver_and_hygiene 80766 ns/iter (± 234) 81472 ns/iter (± 269) 0.99
serialization of serde 314 ns/iter (± 1) 312 ns/iter (± 0) 1.01
css/minify/libraries/bootstrap 30438022 ns/iter (± 183355) 29174607 ns/iter (± 52521) 1.04
css/visitor/compare/clone 1700985 ns/iter (± 11573) 1694445 ns/iter (± 5824) 1.00
css/visitor/compare/visit_mut_span 1805004 ns/iter (± 15945) 1782869 ns/iter (± 12851) 1.01
css/visitor/compare/visit_mut_span_panic 1909923 ns/iter (± 12949) 1872934 ns/iter (± 10855) 1.02
css/visitor/compare/fold_span 2572735 ns/iter (± 23471) 2531318 ns/iter (± 18390) 1.02
css/visitor/compare/fold_span_panic 2748804 ns/iter (± 14258) 2740699 ns/iter (± 15980) 1.00
css/lexer/bootstrap_5_1_3 4429748 ns/iter (± 4680) 4454677 ns/iter (± 2284) 0.99
css/lexer/foundation_6_7_4 3730857 ns/iter (± 2121) 3751781 ns/iter (± 2069) 0.99
css/lexer/tailwind_3_1_1 708760 ns/iter (± 1992) 712905 ns/iter (± 296) 0.99
css/parser/bootstrap_5_1_3 19465582 ns/iter (± 55295) 19730039 ns/iter (± 38829) 0.99
css/parser/foundation_6_7_4 15527992 ns/iter (± 27287) 15784296 ns/iter (± 20197) 0.98
css/parser/tailwind_3_1_1 3008952 ns/iter (± 11784) 3054961 ns/iter (± 4216) 0.98
es/codegen/colors 732143 ns/iter (± 400532) 733086 ns/iter (± 401028) 1.00
es/codegen/large 3136802 ns/iter (± 1661513) 3135157 ns/iter (± 1666366) 1.00
es/codegen/with-parser/colors 44008 ns/iter (± 622) 44244 ns/iter (± 422) 0.99
es/codegen/with-parser/large 483448 ns/iter (± 1112) 482591 ns/iter (± 622) 1.00
es/minify/libraries/antd 1252974482 ns/iter (± 23989848) 1175297391 ns/iter (± 27856056) 1.07
es/minify/libraries/d3 254584346 ns/iter (± 1997705) 243391432 ns/iter (± 2025776) 1.05
es/minify/libraries/echarts 998744566 ns/iter (± 17282105) 932125711 ns/iter (± 7507170) 1.07
es/minify/libraries/jquery 75426373 ns/iter (± 270202) 74124888 ns/iter (± 148857) 1.02
es/minify/libraries/lodash 89575297 ns/iter (± 387307) 88688271 ns/iter (± 405872) 1.01
es/minify/libraries/moment 44343323 ns/iter (± 296778) 43723990 ns/iter (± 57015) 1.01
es/minify/libraries/react 16312154 ns/iter (± 98139) 16062686 ns/iter (± 46029) 1.02
es/minify/libraries/terser 194964564 ns/iter (± 1907059) 188862833 ns/iter (± 458873) 1.03
es/minify/libraries/three 342472861 ns/iter (± 3757310) 328427757 ns/iter (± 1795878) 1.04
es/minify/libraries/typescript 2426047133 ns/iter (± 23814547) 2331363444 ns/iter (± 14335492) 1.04
es/minify/libraries/victory 520217848 ns/iter (± 10242782) 507165097 ns/iter (± 6714665) 1.03
es/minify/libraries/vue 109564189 ns/iter (± 538927) 110112821 ns/iter (± 1317137) 1.00
es/visitor/compare/clone 1957099 ns/iter (± 13290) 1964450 ns/iter (± 4917) 1.00
es/visitor/compare/visit_mut_span 2282137 ns/iter (± 2421) 2285460 ns/iter (± 1818) 1.00
es/visitor/compare/visit_mut_span_panic 2336601 ns/iter (± 12385) 2341639 ns/iter (± 3174) 1.00
es/visitor/compare/fold_span 3370300 ns/iter (± 30996) 3399756 ns/iter (± 6508) 0.99
es/visitor/compare/fold_span_panic 3491401 ns/iter (± 12322) 3541623 ns/iter (± 5535) 0.99
es/lexer/colors 12843 ns/iter (± 16) 12461 ns/iter (± 7) 1.03
es/lexer/angular 6051190 ns/iter (± 3121) 6024494 ns/iter (± 7201) 1.00
es/lexer/backbone 787850 ns/iter (± 1609) 790153 ns/iter (± 612) 1.00
es/lexer/jquery 4403817 ns/iter (± 2790) 4417746 ns/iter (± 4218) 1.00
es/lexer/jquery mobile 6773772 ns/iter (± 12413) 6766350 ns/iter (± 3188) 1.00
es/lexer/mootools 3500888 ns/iter (± 1988) 3507943 ns/iter (± 1627) 1.00
es/lexer/underscore 655314 ns/iter (± 394) 656862 ns/iter (± 1075) 1.00
es/lexer/three 20877798 ns/iter (± 38758) 20845880 ns/iter (± 16490) 1.00
es/lexer/yui 3816714 ns/iter (± 1815) 3782897 ns/iter (± 2003) 1.01
es/parser/colors 26740 ns/iter (± 45) 26794 ns/iter (± 67) 1.00
es/parser/angular 13724604 ns/iter (± 320615) 13568364 ns/iter (± 70768) 1.01
es/parser/backbone 2003133 ns/iter (± 9822) 2012353 ns/iter (± 9799) 1.00
es/parser/jquery 11184659 ns/iter (± 204499) 10946518 ns/iter (± 49485) 1.02
es/parser/jquery mobile 16953652 ns/iter (± 174092) 16903732 ns/iter (± 58868) 1.00
es/parser/mootools 8435915 ns/iter (± 22774) 8450651 ns/iter (± 15405) 1.00
es/parser/underscore 1727653 ns/iter (± 28759) 1732292 ns/iter (± 11748) 1.00
es/parser/three 49682504 ns/iter (± 647074) 47042610 ns/iter (± 289016) 1.06
es/parser/yui 8321583 ns/iter (± 121842) 8381403 ns/iter (± 22205) 0.99
es/preset-env/usage/builtin_type 138570 ns/iter (± 33539) 139532 ns/iter (± 32778) 0.99
es/preset-env/usage/property 16548 ns/iter (± 59) 16840 ns/iter (± 104) 0.98
es/resolver/typescript 90806722 ns/iter (± 1034459) 88373546 ns/iter (± 1075666) 1.03
es/fixer/typescript 66342065 ns/iter (± 1011265) 63665395 ns/iter (± 1650153) 1.04
es/hygiene/typescript 136892301 ns/iter (± 1655858) 131801991 ns/iter (± 1166956) 1.04
es/resolver_with_hygiene/typescript 253716136 ns/iter (± 2808018) 244025065 ns/iter (± 1979050) 1.04
es/visitor/base-perf/module_clone 59576 ns/iter (± 330) 59797 ns/iter (± 333) 1.00
es/visitor/base-perf/fold_empty 63494 ns/iter (± 320) 63888 ns/iter (± 543) 0.99
es/visitor/base-perf/fold_noop_impl_all 63882 ns/iter (± 254) 63593 ns/iter (± 507) 1.00
es/visitor/base-perf/fold_noop_impl_vec 64516 ns/iter (± 253) 63830 ns/iter (± 727) 1.01
es/visitor/base-perf/boxing_boxed_clone 57 ns/iter (± 0) 56 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 39 ns/iter (± 0) 1.03
es/visitor/base-perf/boxing_boxed 111 ns/iter (± 0) 109 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 77 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2497 ns/iter (± 26) 2515 ns/iter (± 10) 0.99
es/base/parallel/resolver/typescript 3895918900 ns/iter (± 268116074) 3886048603 ns/iter (± 285298647) 1.00
es/base/parallel/hygiene/typescript 1481648728 ns/iter (± 19895026) 1438943268 ns/iter (± 16181019) 1.03
misc/visitors/time-complexity/time 5 145 ns/iter (± 2) 137 ns/iter (± 2) 1.06
misc/visitors/time-complexity/time 10 413 ns/iter (± 4) 405 ns/iter (± 8) 1.02
misc/visitors/time-complexity/time 15 662 ns/iter (± 3) 525 ns/iter (± 63) 1.26
misc/visitors/time-complexity/time 20 1048 ns/iter (± 2) 1048 ns/iter (± 4) 1
misc/visitors/time-complexity/time 40 3483 ns/iter (± 4) 3474 ns/iter (± 8) 1.00
misc/visitors/time-complexity/time 60 7209 ns/iter (± 24) 8780 ns/iter (± 504) 0.82
es/full-target/es2016 233950 ns/iter (± 601) 236378 ns/iter (± 1142) 0.99
es/full-target/es2017 221452 ns/iter (± 557) 224876 ns/iter (± 603) 0.98
es/full-target/es2018 210042 ns/iter (± 655) 212252 ns/iter (± 1316) 0.99
es2020_nullish_coalescing 70947 ns/iter (± 310) 69455 ns/iter (± 561) 1.02
es2020_optional_chaining 81595 ns/iter (± 307) 79617 ns/iter (± 254) 1.02
es2022_class_properties 118243 ns/iter (± 370) 115920 ns/iter (± 313) 1.02
es2018_object_rest_spread 75998 ns/iter (± 407) 75080 ns/iter (± 201) 1.01
es2019_optional_catch_binding 64212 ns/iter (± 350) 63316 ns/iter (± 243) 1.01
es2017_async_to_generator 64384 ns/iter (± 216) 63060 ns/iter (± 154) 1.02
es2016_exponentiation 69246 ns/iter (± 194) 67710 ns/iter (± 215) 1.02
es2015_arrow 71883 ns/iter (± 203) 70343 ns/iter (± 181) 1.02
es2015_block_scoped_fn 69291 ns/iter (± 244) 68107 ns/iter (± 308) 1.02
es2015_block_scoping 124249 ns/iter (± 499) 120271 ns/iter (± 1686) 1.03

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.