Skip to content

Commit

Permalink
feat(es/typescript): Improve fast TS stripper (#9152)
Browse files Browse the repository at this point in the history
**Related issue:**

- #9143 (review)
  • Loading branch information
kdy1 committed Jul 5, 2024
1 parent a26e134 commit 9fca4ab
Show file tree
Hide file tree
Showing 9 changed files with 28 additions and 24 deletions.
Original file line number Diff line number Diff line change
@@ -1,51 +1,51 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`transform in strip-only mode should remove declare enum 1`] = `""`;
exports[`transform in strip-only mode should remove declare enum 1`] = `" "`;

exports[`transform in strip-only mode should remove declare enum 2`] = `""`;
exports[`transform in strip-only mode should remove declare enum 2`] = `" "`;

exports[`transform in strip-only mode should remove declare enum 3`] = `""`;
exports[`transform in strip-only mode should remove declare enum 3`] = `" "`;

exports[`transform in strip-only mode should strip complex expressions 1`] = `
"const foo = {
foo: 1,
bar: "bar",
};
foo: 1 ,
bar: "bar" ,
} ;
const bar = "bar";"
`;

exports[`transform in strip-only mode should strip nonnull assertions 1`] = `
"const foo = 1;
"const foo = 1 ;
const bar = "bar";"
`;

exports[`transform in strip-only mode should strip satisfies 1`] = `
"const foo = 1;
"const foo = 1 ;
const bar = "bar";"
`;

exports[`transform in strip-only mode should strip type annotations 1`] = `
"const foo = 1;
const bar = "bar";"
const bar = "bar";"
`;

exports[`transform in strip-only mode should strip type assertions 1`] = `
"const foo = 1;
"const foo = 1 ;
const bar = "bar";"
`;

exports[`transform in strip-only mode should strip type declarations 1`] = `
"const foo = 1;
const bar = "bar";"
const bar = "bar";"
`;

exports[`transform in strip-only mode should throw an error when it encounters a module 1`] = `
" x TypeScript namespace declaration is not supported in strip-only mode
,----
1 | module 'foo' {}
: ^^^^^^^^^^^^^^^
1 | module foo {}
: ^^^^^^^^^^^^^
\`----
"
`;
Expand Down Expand Up @@ -79,7 +79,7 @@ exports[`transform in strip-only mode should throw an error with a descriptive m

exports[`transform should strip types 1`] = `
"
export const foo = 1;
export const foo = 1;
"
`;
2 changes: 1 addition & 1 deletion bindings/binding_typescript_wasm/__tests__/transform.js
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ describe("transform", () => {

it("should throw an error when it encounters a module", async () => {
await expect(
swc.transform("module 'foo' {}", {
swc.transform("module foo {}", {
mode: "strip-only",
})
).rejects.toMatchSnapshot();
Expand Down
6 changes: 3 additions & 3 deletions crates/swc_fast_ts_strip/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ use swc_common::{
};
use swc_ecma_ast::{
BindingIdent, Decorator, EsVersion, Ident, Param, Pat, Program, TsAsExpr, TsConstAssertion,
TsEnumDecl, TsInstantiation, TsModuleDecl, TsNamespaceDecl, TsNonNullExpr, TsParamPropParam,
TsSatisfiesExpr, TsTypeAliasDecl, TsTypeAnn,
TsEnumDecl, TsInstantiation, TsModuleDecl, TsModuleName, TsNamespaceDecl, TsNonNullExpr,
TsParamPropParam, TsSatisfiesExpr, TsTypeAliasDecl, TsTypeAnn,
};
use swc_ecma_parser::{
parse_file_as_module, parse_file_as_program, parse_file_as_script, Syntax, TsSyntax,
Expand Down Expand Up @@ -154,7 +154,7 @@ impl Visit for TsStrip {
}

fn visit_ts_module_decl(&mut self, n: &TsModuleDecl) {
if n.declare {
if n.declare || matches!(n.id, TsModuleName::Str(..)) {
self.add_replacement(n.span);
return;
}
Expand Down
4 changes: 2 additions & 2 deletions crates/swc_fast_ts_strip/tests/errors/modules.swc-stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
x TypeScript namespace declaration is not supported in strip-only mode
,----
1 | module 'foo' { }
: ^^^^^^^^^^^^^^^^
1 | module aModuleKeywordNamespace { }
: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
`----
2 changes: 1 addition & 1 deletion crates/swc_fast_ts_strip/tests/errors/modules.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
module 'foo' { }
module aModuleKeywordNamespace { }
1 change: 1 addition & 0 deletions crates/swc_fast_ts_strip/tests/fixture/modules.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

1 change: 1 addition & 0 deletions crates/swc_fast_ts_strip/tests/fixture/modules.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module 'myAmbientModuleDeclaration' { }
1 change: 1 addition & 0 deletions crates/swc_fast_ts_strip/tests/fixture/namespaces.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

1 change: 1 addition & 0 deletions crates/swc_fast_ts_strip/tests/fixture/namespaces.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
declare namespace Foo { }

1 comment on commit 9fca4ab

@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: 9fca4ab Previous: b129343 Ratio
es/full/bugs-1 270512 ns/iter (± 1726) 288325 ns/iter (± 8717) 0.94
es/full/minify/libraries/antd 1704871804 ns/iter (± 43602828) 1879280621 ns/iter (± 38123998) 0.91
es/full/minify/libraries/d3 339198229 ns/iter (± 800549) 351501508 ns/iter (± 20228169) 0.96
es/full/minify/libraries/echarts 1436247990 ns/iter (± 13776329) 1586310245 ns/iter (± 46242281) 0.91
es/full/minify/libraries/jquery 102104947 ns/iter (± 179830) 103020423 ns/iter (± 460519) 0.99
es/full/minify/libraries/lodash 113658786 ns/iter (± 185516) 114489897 ns/iter (± 854426) 0.99
es/full/minify/libraries/moment 59389159 ns/iter (± 129712) 59852238 ns/iter (± 742596) 0.99
es/full/minify/libraries/react 18373779 ns/iter (± 12081) 18379265 ns/iter (± 35385) 1.00
es/full/minify/libraries/terser 272212961 ns/iter (± 1901547) 277587688 ns/iter (± 1995837) 0.98
es/full/minify/libraries/three 462794571 ns/iter (± 2405291) 481968952 ns/iter (± 4616216) 0.96
es/full/minify/libraries/typescript 3175513403 ns/iter (± 29205992) 3307022111 ns/iter (± 16255943) 0.96
es/full/minify/libraries/victory 716828784 ns/iter (± 9823934) 870839048 ns/iter (± 18414802) 0.82
es/full/minify/libraries/vue 144620159 ns/iter (± 225995) 151321344 ns/iter (± 1505695) 0.96
es/full/codegen/es3 58577 ns/iter (± 1004) 58862 ns/iter (± 388) 1.00
es/full/codegen/es5 58754 ns/iter (± 305) 58902 ns/iter (± 361) 1.00
es/full/codegen/es2015 58555 ns/iter (± 278) 59170 ns/iter (± 211) 0.99
es/full/codegen/es2016 58595 ns/iter (± 381) 59147 ns/iter (± 204) 0.99
es/full/codegen/es2017 58751 ns/iter (± 258) 58903 ns/iter (± 125) 1.00
es/full/codegen/es2018 58583 ns/iter (± 112) 58822 ns/iter (± 160) 1.00
es/full/codegen/es2019 58569 ns/iter (± 380) 59174 ns/iter (± 1683) 0.99
es/full/codegen/es2020 58599 ns/iter (± 127) 59032 ns/iter (± 790) 0.99
es/full/all/es3 160917180 ns/iter (± 525601) 162576133 ns/iter (± 1712726) 0.99
es/full/all/es5 155364270 ns/iter (± 832849) 157447049 ns/iter (± 781906) 0.99
es/full/all/es2015 114164120 ns/iter (± 725683) 115645694 ns/iter (± 743644) 0.99
es/full/all/es2016 113346012 ns/iter (± 807842) 114266537 ns/iter (± 1056874) 0.99
es/full/all/es2017 112710119 ns/iter (± 1161781) 114182949 ns/iter (± 1403863) 0.99
es/full/all/es2018 110901153 ns/iter (± 618805) 112348635 ns/iter (± 838662) 0.99
es/full/all/es2019 109573156 ns/iter (± 502462) 111421246 ns/iter (± 683835) 0.98
es/full/all/es2020 106412552 ns/iter (± 604929) 107538250 ns/iter (± 1350301) 0.99
es/full/parser 449396 ns/iter (± 3499) 449999 ns/iter (± 2592) 1.00
es/full/base/fixer 15299 ns/iter (± 77) 15243 ns/iter (± 67) 1.00
es/full/base/resolver_and_hygiene 78693 ns/iter (± 110) 79599 ns/iter (± 296) 0.99
serialization of serde 272 ns/iter (± 0) 252 ns/iter (± 11) 1.08
css/minify/libraries/bootstrap 21980486 ns/iter (± 50313) 22047020 ns/iter (± 296785) 1.00
css/visitor/compare/clone 1382387 ns/iter (± 23334) 1367831 ns/iter (± 7178) 1.01
css/visitor/compare/visit_mut_span 1507293 ns/iter (± 9792) 1484018 ns/iter (± 15691) 1.02
css/visitor/compare/visit_mut_span_panic 1532702 ns/iter (± 33163) 1503105 ns/iter (± 34041) 1.02
css/visitor/compare/fold_span 2015960 ns/iter (± 9489) 2005873 ns/iter (± 20311) 1.01
css/visitor/compare/fold_span_panic 2149738 ns/iter (± 13447) 2127809 ns/iter (± 6065) 1.01
css/lexer/bootstrap_5_1_3 3506905 ns/iter (± 5769) 3489458 ns/iter (± 858) 1.00
css/lexer/foundation_6_7_4 2821424 ns/iter (± 13304) 2816489 ns/iter (± 1830) 1.00
css/lexer/tailwind_3_1_1 541090 ns/iter (± 10365) 540062 ns/iter (± 7442) 1.00
css/parser/bootstrap_5_1_3 16547244 ns/iter (± 103501) 16428835 ns/iter (± 102463) 1.01
css/parser/foundation_6_7_4 13262412 ns/iter (± 436700) 13232056 ns/iter (± 21907) 1.00
css/parser/tailwind_3_1_1 2600235 ns/iter (± 5444) 2612318 ns/iter (± 5335) 1.00
es/codegen/colors 731344 ns/iter (± 394579) 726083 ns/iter (± 396739) 1.01
es/codegen/large 2999917 ns/iter (± 1575023) 2985817 ns/iter (± 1604136) 1.00
es/codegen/with-parser/colors 40528 ns/iter (± 494) 40196 ns/iter (± 406) 1.01
es/codegen/with-parser/large 453900 ns/iter (± 1482) 447338 ns/iter (± 3328) 1.01
es/minify/libraries/antd 1382797393 ns/iter (± 12231161) 1340890230 ns/iter (± 13121536) 1.03
es/minify/libraries/d3 282698508 ns/iter (± 1640007) 277047461 ns/iter (± 1355343) 1.02
es/minify/libraries/echarts 1200193358 ns/iter (± 14231528) 1096213161 ns/iter (± 6320199) 1.09
es/minify/libraries/jquery 82492586 ns/iter (± 196919) 82102572 ns/iter (± 690376) 1.00
es/minify/libraries/lodash 104659284 ns/iter (± 355039) 103744601 ns/iter (± 543007) 1.01
es/minify/libraries/moment 48239722 ns/iter (± 93615) 48123474 ns/iter (± 111447) 1.00
es/minify/libraries/react 16285708 ns/iter (± 18983) 16281279 ns/iter (± 17789) 1.00
es/minify/libraries/terser 218589466 ns/iter (± 990803) 215793450 ns/iter (± 300636) 1.01
es/minify/libraries/three 370192843 ns/iter (± 4581401) 355989390 ns/iter (± 1196511) 1.04
es/minify/libraries/typescript 2755175491 ns/iter (± 7207369) 2647872511 ns/iter (± 6124707) 1.04
es/minify/libraries/victory 560753528 ns/iter (± 6363001) 541346207 ns/iter (± 7685908) 1.04
es/minify/libraries/vue 121194571 ns/iter (± 401546) 120543947 ns/iter (± 227250) 1.01
es/visitor/compare/clone 1711419 ns/iter (± 4476) 1729529 ns/iter (± 6874) 0.99
es/visitor/compare/visit_mut_span 2041443 ns/iter (± 4831) 2060368 ns/iter (± 6527) 0.99
es/visitor/compare/visit_mut_span_panic 2049048 ns/iter (± 40538) 2070067 ns/iter (± 38494) 0.99
es/visitor/compare/fold_span 2772275 ns/iter (± 2998) 2784874 ns/iter (± 7379) 1.00
es/visitor/compare/fold_span_panic 2798485 ns/iter (± 5262) 2812851 ns/iter (± 3784) 0.99
es/lexer/colors 9693 ns/iter (± 201) 9896 ns/iter (± 76) 0.98
es/lexer/angular 5074134 ns/iter (± 10312) 5163115 ns/iter (± 11704) 0.98
es/lexer/backbone 620334 ns/iter (± 6404) 635467 ns/iter (± 3688) 0.98
es/lexer/jquery 3520659 ns/iter (± 8415) 3632349 ns/iter (± 24780) 0.97
es/lexer/jquery mobile 5262000 ns/iter (± 10693) 5289392 ns/iter (± 30932) 0.99
es/lexer/mootools 2860616 ns/iter (± 17398) 2784144 ns/iter (± 3357) 1.03
es/lexer/underscore 530687 ns/iter (± 3777) 542842 ns/iter (± 2339) 0.98
es/lexer/three 16552021 ns/iter (± 129632) 15934603 ns/iter (± 42526) 1.04
es/lexer/yui 2873967 ns/iter (± 13466) 2891342 ns/iter (± 9896) 0.99
es/lexer/cal-com 12871390 ns/iter (± 42689) 13097583 ns/iter (± 56974) 0.98
es/lexer/typescript 90338249 ns/iter (± 566772) 90625123 ns/iter (± 209307) 1.00
es/parser/colors 23578 ns/iter (± 101) 23863 ns/iter (± 91) 0.99
es/parser/angular 12427169 ns/iter (± 63634) 12401752 ns/iter (± 168200) 1.00
es/parser/backbone 1809122 ns/iter (± 8960) 1808963 ns/iter (± 10086) 1.00
es/parser/jquery 10036643 ns/iter (± 121644) 10035652 ns/iter (± 92904) 1.00
es/parser/jquery mobile 15569488 ns/iter (± 147184) 15154419 ns/iter (± 130013) 1.03
es/parser/mootools 7829884 ns/iter (± 93697) 7791668 ns/iter (± 35263) 1.00
es/parser/underscore 1576901 ns/iter (± 6466) 1579661 ns/iter (± 4779) 1.00
es/parser/three 45652851 ns/iter (± 596736) 44480113 ns/iter (± 471773) 1.03
es/parser/yui 7396925 ns/iter (± 83053) 7395269 ns/iter (± 31796) 1.00
es/parser/cal-com 43389450 ns/iter (± 1101125) 39989983 ns/iter (± 1386786) 1.09
es/parser/typescript 272941071 ns/iter (± 1649650) 266724473 ns/iter (± 1871621) 1.02
es/preset-env/usage/builtin_type 136372 ns/iter (± 34831) 135868 ns/iter (± 33783) 1.00
es/preset-env/usage/property 17196 ns/iter (± 158) 16629 ns/iter (± 151) 1.03
es/resolver/typescript 103688420 ns/iter (± 2555143) 100298299 ns/iter (± 1871134) 1.03
es/fixer/typescript 87318459 ns/iter (± 2067669) 77968991 ns/iter (± 3145804) 1.12
es/hygiene/typescript 199478947 ns/iter (± 2903856) 183153003 ns/iter (± 4139211) 1.09
es/resolver_with_hygiene/typescript 324347730 ns/iter (± 5184552) 308348235 ns/iter (± 2645639) 1.05
es/visitor/base-perf/module_clone 58446 ns/iter (± 330) 57101 ns/iter (± 506) 1.02
es/visitor/base-perf/fold_empty 61581 ns/iter (± 1937) 60342 ns/iter (± 954) 1.02
es/visitor/base-perf/fold_noop_impl_all 61085 ns/iter (± 390) 60410 ns/iter (± 815) 1.01
es/visitor/base-perf/fold_noop_impl_vec 60987 ns/iter (± 208) 59936 ns/iter (± 344) 1.02
es/visitor/base-perf/boxing_boxed_clone 59 ns/iter (± 0) 59 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 48 ns/iter (± 0) 47 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_boxed 106 ns/iter (± 0) 106 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed 89 ns/iter (± 0) 81 ns/iter (± 0) 1.10
es/visitor/base-perf/visit_contains_this 2658 ns/iter (± 20) 2626 ns/iter (± 7) 1.01
es/base/parallel/resolver/typescript 2430282701 ns/iter (± 159830506) 2378749507 ns/iter (± 107216295) 1.02
es/base/parallel/hygiene/typescript 3338719870 ns/iter (± 34781870) 3273332113 ns/iter (± 50920779) 1.02
babelify-only 490318 ns/iter (± 7318) 493226 ns/iter (± 5739) 0.99
parse_and_babelify_angular 41887588 ns/iter (± 883098) 42607577 ns/iter (± 698781) 0.98
parse_and_babelify_backbone 4317306 ns/iter (± 158561) 4377726 ns/iter (± 162018) 0.99
parse_and_babelify_jquery 28062347 ns/iter (± 220638) 28814833 ns/iter (± 654763) 0.97
parse_and_babelify_jquery_mobile 51320545 ns/iter (± 767655) 50586011 ns/iter (± 943485) 1.01
parse_and_babelify_mootools 25592257 ns/iter (± 351296) 26208475 ns/iter (± 235037) 0.98
parse_and_babelify_underscore 3659473 ns/iter (± 13608) 3665153 ns/iter (± 10551) 1.00
parse_and_babelify_yui 23984242 ns/iter (± 714443) 24458997 ns/iter (± 207327) 0.98
html/minify/document/css_spec 45243261 ns/iter (± 165366) 45137595 ns/iter (± 975708) 1.00
html/minify/document/github 18105395 ns/iter (± 26121) 17935112 ns/iter (± 36260) 1.01
html/minify/document/stackoverflow 16543237 ns/iter (± 494652) 16341912 ns/iter (± 239458) 1.01
html/minify/document_fragment/css_spec 44106945 ns/iter (± 88387) 44630536 ns/iter (± 772967) 0.99
html/minify/document_fragment/github 17868957 ns/iter (± 71704) 17714318 ns/iter (± 72156) 1.01
html/minify/document_fragment/stackoverflow 16361699 ns/iter (± 31201) 16282774 ns/iter (± 53392) 1.00
html/document/visitor/compare/clone 165235 ns/iter (± 2606) 165159 ns/iter (± 2724) 1.00
html/document/visitor/compare/visit_mut_span 180930 ns/iter (± 638) 181278 ns/iter (± 3688) 1.00
html/document/visitor/compare/visit_mut_span_panic 186835 ns/iter (± 4316) 187151 ns/iter (± 6271) 1.00
html/document/visitor/compare/fold_span 230459 ns/iter (± 762) 231813 ns/iter (± 774) 0.99
html/document/visitor/compare/fold_span_panic 279069 ns/iter (± 1473) 282806 ns/iter (± 1664) 0.99
html/document_fragment/visitor/compare/clone 166802 ns/iter (± 1137) 164274 ns/iter (± 1854) 1.02
html/document_fragment/visitor/compare/visit_mut_span 181546 ns/iter (± 1087) 181872 ns/iter (± 668) 1.00
html/document_fragment/visitor/compare/visit_mut_span_panic 188583 ns/iter (± 925) 187048 ns/iter (± 2019) 1.01
html/document_fragment/visitor/compare/fold_span 231253 ns/iter (± 907) 232741 ns/iter (± 1340) 0.99
html/document_fragment/visitor/compare/fold_span_panic 277680 ns/iter (± 1014) 280846 ns/iter (± 693) 0.99
html/lexer/css_2021_spec 12729494 ns/iter (± 24898) 12957349 ns/iter (± 28923) 0.98
html/lexer/github_com_17_05_2022 4988645 ns/iter (± 12905) 4983304 ns/iter (± 40119) 1.00
html/lexer/stackoverflow_com_17_05_2022 4689077 ns/iter (± 11416) 4718789 ns/iter (± 105072) 0.99
html/parser/parser_document/css_2021_spec 25683570 ns/iter (± 59237) 26025369 ns/iter (± 330734) 0.99
html/parser/parser_document/github_com_17_05_2022 8557447 ns/iter (± 16846) 8615559 ns/iter (± 19904) 0.99
html/parser/parser_document/stackoverflow_com_17_05_2022 7493081 ns/iter (± 12389) 7563696 ns/iter (± 25997) 0.99
html/parser/parser_document_fragment/css_2021_spec 25516761 ns/iter (± 67031) 26063164 ns/iter (± 264580) 0.98
html/parser/parser_document_fragment/github_com_17_05_2022 8508019 ns/iter (± 24814) 8598135 ns/iter (± 28469) 0.99
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7457078 ns/iter (± 9075) 7503358 ns/iter (± 13927) 0.99

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

Please sign in to comment.