Skip to content

Commit ac02b84

Browse files
authoredJun 30, 2023
feat(es/optimization): Support default imports for const modules (#7604)
1 parent efc1afd commit ac02b84

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed
 

‎crates/swc_ecma_transforms_optimization/src/const_modules.rs

+13-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::{
66
use dashmap::DashMap;
77
use once_cell::sync::Lazy;
88
use rustc_hash::FxHashMap;
9-
use swc_atoms::JsWord;
9+
use swc_atoms::{js_word, JsWord};
1010
use swc_common::{
1111
errors::HANDLER,
1212
sync::Lrc,
@@ -120,8 +120,18 @@ impl VisitMut for ConstModules {
120120
ImportSpecifier::Namespace(ref s) => {
121121
self.scope.namespace.insert(s.local.to_id());
122122
}
123-
ImportSpecifier::Default(..) => {
124-
panic!("const_module does not support default import")
123+
ImportSpecifier::Default(ref s) => {
124+
let imported = &s.local.sym;
125+
let default_import_key = js_word!("default");
126+
let value =
127+
entry.get(&default_import_key).cloned().unwrap_or_else(|| {
128+
panic!(
129+
"The requested const_module `{}` does not provide \
130+
default export",
131+
import.src.value
132+
)
133+
});
134+
self.scope.imported.insert(imported.clone(), value);
125135
}
126136
};
127137
}

‎crates/swc_ecma_transforms_optimization/tests/const_modules.rs

+13
Original file line numberDiff line numberDiff line change
@@ -147,3 +147,16 @@ console.log({ bar });
147147
console.log({ bar: true });
148148
"#
149149
);
150+
151+
test!(
152+
::swc_ecma_parser::Syntax::default(),
153+
|tester| tr(tester, &[("my-mod", &[("default", "true")])]),
154+
default_import_issue_7601,
155+
r#"
156+
import something from 'my-mod';
157+
console.log(something);
158+
"#,
159+
r#"
160+
console.log(true);
161+
"#
162+
);

1 commit comments

Comments
 (1)

github-actions[bot] commented on Jun 30, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: ac02b84 Previous: bcd5a1d Ratio
es/full/bugs-1 314733 ns/iter (± 7794) 309420 ns/iter (± 12949) 1.02
es/full/minify/libraries/antd 1527937474 ns/iter (± 18348948) 1540561812 ns/iter (± 31530689) 0.99
es/full/minify/libraries/d3 330980667 ns/iter (± 2860634) 325691644 ns/iter (± 10761577) 1.02
es/full/minify/libraries/echarts 1257687524 ns/iter (± 4105448) 1252229531 ns/iter (± 33973722) 1.00
es/full/minify/libraries/jquery 97069995 ns/iter (± 207179) 97254690 ns/iter (± 220415) 1.00
es/full/minify/libraries/lodash 115016780 ns/iter (± 675323) 115269003 ns/iter (± 512710) 1.00
es/full/minify/libraries/moment 56711753 ns/iter (± 100796) 57007536 ns/iter (± 58317) 0.99
es/full/minify/libraries/react 20376897 ns/iter (± 34866) 20349923 ns/iter (± 61259) 1.00
es/full/minify/libraries/terser 256637044 ns/iter (± 880926) 253972846 ns/iter (± 1380278) 1.01
es/full/minify/libraries/three 460335438 ns/iter (± 2359066) 454960295 ns/iter (± 1220182) 1.01
es/full/minify/libraries/typescript 3086688754 ns/iter (± 11759619) 3064827452 ns/iter (± 16563665) 1.01
es/full/minify/libraries/victory 680700784 ns/iter (± 2804293) 667042289 ns/iter (± 3249450) 1.02
es/full/minify/libraries/vue 141738090 ns/iter (± 784085) 141453290 ns/iter (± 376632) 1.00
es/full/codegen/es3 36974 ns/iter (± 89) 36360 ns/iter (± 85) 1.02
es/full/codegen/es5 36801 ns/iter (± 77) 36409 ns/iter (± 148) 1.01
es/full/codegen/es2015 36855 ns/iter (± 132) 36424 ns/iter (± 73) 1.01
es/full/codegen/es2016 36925 ns/iter (± 86) 36473 ns/iter (± 154) 1.01
es/full/codegen/es2017 36910 ns/iter (± 90) 36418 ns/iter (± 80) 1.01
es/full/codegen/es2018 36845 ns/iter (± 107) 36484 ns/iter (± 80) 1.01
es/full/codegen/es2019 36853 ns/iter (± 83) 36470 ns/iter (± 133) 1.01
es/full/codegen/es2020 36833 ns/iter (± 40) 36437 ns/iter (± 81) 1.01
es/full/all/es3 178606717 ns/iter (± 649226) 178942597 ns/iter (± 442441) 1.00
es/full/all/es5 170248582 ns/iter (± 757907) 171198838 ns/iter (± 824517) 0.99
es/full/all/es2015 127623936 ns/iter (± 419158) 126699720 ns/iter (± 622536) 1.01
es/full/all/es2016 125911889 ns/iter (± 475048) 125586183 ns/iter (± 646635) 1.00
es/full/all/es2017 125296535 ns/iter (± 421483) 124815295 ns/iter (± 482872) 1.00
es/full/all/es2018 123091465 ns/iter (± 585484) 123475431 ns/iter (± 775564) 1.00
es/full/all/es2019 122815173 ns/iter (± 481241) 121995971 ns/iter (± 769494) 1.01
es/full/all/es2020 118027032 ns/iter (± 867219) 117856991 ns/iter (± 900450) 1.00
es/full/parser 514241 ns/iter (± 6521) 513113 ns/iter (± 8660) 1.00
es/full/base/fixer 19183 ns/iter (± 75) 19080 ns/iter (± 151) 1.01
es/full/base/resolver_and_hygiene 92905 ns/iter (± 215) 94670 ns/iter (± 665) 0.98
serialization of serde 297 ns/iter (± 0) 297 ns/iter (± 0) 1
css/minify/libraries/bootstrap 31520864 ns/iter (± 90224) 30995751 ns/iter (± 48746) 1.02
css/visitor/compare/clone 2036560 ns/iter (± 9932) 2113933 ns/iter (± 23336) 0.96
css/visitor/compare/visit_mut_span 2166914 ns/iter (± 15171) 2223079 ns/iter (± 13066) 0.97
css/visitor/compare/visit_mut_span_panic 2236043 ns/iter (± 13582) 2328771 ns/iter (± 13431) 0.96
css/visitor/compare/fold_span 2952696 ns/iter (± 12705) 2980783 ns/iter (± 8824) 0.99
css/visitor/compare/fold_span_panic 3134874 ns/iter (± 20633) 3144618 ns/iter (± 33952) 1.00
css/lexer/bootstrap_5_1_3 4813940 ns/iter (± 4339) 4868604 ns/iter (± 2868) 0.99
css/lexer/foundation_6_7_4 4051802 ns/iter (± 5018) 4121688 ns/iter (± 3947) 0.98
css/lexer/tailwind_3_1_1 773368 ns/iter (± 426) 783621 ns/iter (± 873) 0.99
css/parser/bootstrap_5_1_3 20678899 ns/iter (± 36107) 20582366 ns/iter (± 27282) 1.00
css/parser/foundation_6_7_4 16622744 ns/iter (± 22722) 16520011 ns/iter (± 16570) 1.01
css/parser/tailwind_3_1_1 3221720 ns/iter (± 4472) 3186674 ns/iter (± 3693) 1.01
es/codegen/colors 739696 ns/iter (± 401320) 746279 ns/iter (± 405973) 0.99
es/codegen/large 2990179 ns/iter (± 1568313) 2985161 ns/iter (± 1566453) 1.00
es/codegen/with-parser/colors 49445 ns/iter (± 141) 48633 ns/iter (± 662) 1.02
es/codegen/with-parser/large 516363 ns/iter (± 1466) 523550 ns/iter (± 1182) 0.99
es/minify/libraries/antd 1380063002 ns/iter (± 13431994) 1335756730 ns/iter (± 9046972) 1.03
es/minify/libraries/d3 292482581 ns/iter (± 709704) 285626398 ns/iter (± 919921) 1.02
es/minify/libraries/echarts 1111598017 ns/iter (± 4492568) 1083599379 ns/iter (± 6162811) 1.03
es/minify/libraries/jquery 85277185 ns/iter (± 121788) 84433866 ns/iter (± 157079) 1.01
es/minify/libraries/lodash 104328213 ns/iter (± 243289) 102903734 ns/iter (± 168903) 1.01
es/minify/libraries/moment 50381467 ns/iter (± 254742) 49602326 ns/iter (± 71293) 1.02
es/minify/libraries/react 18284356 ns/iter (± 39906) 18001856 ns/iter (± 50999) 1.02
es/minify/libraries/terser 223666322 ns/iter (± 1790898) 217346506 ns/iter (± 427431) 1.03
es/minify/libraries/three 393906864 ns/iter (± 1203504) 380775183 ns/iter (± 1232109) 1.03
es/minify/libraries/typescript 2692990488 ns/iter (± 10591475) 2629504579 ns/iter (± 5348312) 1.02
es/minify/libraries/victory 595248535 ns/iter (± 9086228) 577058068 ns/iter (± 3645573) 1.03
es/minify/libraries/vue 127571308 ns/iter (± 613366) 124829470 ns/iter (± 232618) 1.02
es/visitor/compare/clone 2100669 ns/iter (± 21450) 2054417 ns/iter (± 3186) 1.02
es/visitor/compare/visit_mut_span 2439239 ns/iter (± 9252) 2378441 ns/iter (± 5584) 1.03
es/visitor/compare/visit_mut_span_panic 2473324 ns/iter (± 12247) 2436138 ns/iter (± 2942) 1.02
es/visitor/compare/fold_span 3512093 ns/iter (± 11797) 3473151 ns/iter (± 11417) 1.01
es/visitor/compare/fold_span_panic 3665074 ns/iter (± 7996) 3594835 ns/iter (± 83714) 1.02
es/lexer/colors 13511 ns/iter (± 33) 13303 ns/iter (± 38) 1.02
es/lexer/angular 6295684 ns/iter (± 24524) 6324256 ns/iter (± 8835) 1.00
es/lexer/backbone 820975 ns/iter (± 2632) 827605 ns/iter (± 1712) 0.99
es/lexer/jquery 4693221 ns/iter (± 4181) 4705893 ns/iter (± 4211) 1.00
es/lexer/jquery mobile 7203933 ns/iter (± 9196) 7218002 ns/iter (± 4636) 1.00
es/lexer/mootools 3687107 ns/iter (± 3136) 3687153 ns/iter (± 16432) 1.00
es/lexer/underscore 695360 ns/iter (± 2015) 692597 ns/iter (± 668) 1.00
es/lexer/three 21917937 ns/iter (± 31666) 22259049 ns/iter (± 67891) 0.98
es/lexer/yui 4131733 ns/iter (± 13300) 4194993 ns/iter (± 6517) 0.98
es/parser/colors 29048 ns/iter (± 91) 28631 ns/iter (± 114) 1.01
es/parser/angular 14310620 ns/iter (± 85507) 14083204 ns/iter (± 64467) 1.02
es/parser/backbone 2116117 ns/iter (± 9637) 2100215 ns/iter (± 8558) 1.01
es/parser/jquery 11602821 ns/iter (± 59643) 11441182 ns/iter (± 34542) 1.01
es/parser/jquery mobile 17930180 ns/iter (± 113183) 17601883 ns/iter (± 36452) 1.02
es/parser/mootools 8810692 ns/iter (± 19764) 8741516 ns/iter (± 18893) 1.01
es/parser/underscore 1818597 ns/iter (± 8279) 1806283 ns/iter (± 8901) 1.01
es/parser/three 51597535 ns/iter (± 89974) 49737820 ns/iter (± 207719) 1.04
es/parser/yui 8841046 ns/iter (± 39760) 8803794 ns/iter (± 43227) 1.00
es/preset-env/usage/builtin_type 143690 ns/iter (± 32972) 142012 ns/iter (± 33188) 1.01
es/preset-env/usage/property 18790 ns/iter (± 74) 18317 ns/iter (± 134) 1.03
es/resolver/typescript 99834240 ns/iter (± 661581) 96061335 ns/iter (± 967223) 1.04
es/fixer/typescript 70104963 ns/iter (± 725560) 67082745 ns/iter (± 792553) 1.05
es/hygiene/typescript 150185195 ns/iter (± 633615) 145689892 ns/iter (± 1136404) 1.03
es/resolver_with_hygiene/typescript 316328523 ns/iter (± 1305889) 306120246 ns/iter (± 1955160) 1.03
es/visitor/base-perf/module_clone 61242 ns/iter (± 235) 61112 ns/iter (± 227) 1.00
es/visitor/base-perf/fold_empty 65080 ns/iter (± 382) 65037 ns/iter (± 352) 1.00
es/visitor/base-perf/fold_noop_impl_all 65818 ns/iter (± 272) 65268 ns/iter (± 537) 1.01
es/visitor/base-perf/fold_noop_impl_vec 65814 ns/iter (± 318) 65517 ns/iter (± 198) 1.00
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 56 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 40 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 110 ns/iter (± 0) 114 ns/iter (± 0) 0.96
es/visitor/base-perf/boxing_unboxed 77 ns/iter (± 0) 81 ns/iter (± 0) 0.95
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2616 ns/iter (± 83) 2660 ns/iter (± 16) 0.98
es/base/parallel/resolver/typescript 4820444865 ns/iter (± 315224953) 4348023536 ns/iter (± 225157874) 1.11
es/base/parallel/hygiene/typescript 1577007734 ns/iter (± 13190946) 1577627809 ns/iter (± 16111838) 1.00
misc/visitors/time-complexity/time 5 108 ns/iter (± 0) 106 ns/iter (± 0) 1.02
misc/visitors/time-complexity/time 10 267 ns/iter (± 1) 313 ns/iter (± 0) 0.85
misc/visitors/time-complexity/time 15 512 ns/iter (± 9) 618 ns/iter (± 7) 0.83
misc/visitors/time-complexity/time 20 916 ns/iter (± 11) 1036 ns/iter (± 2) 0.88
misc/visitors/time-complexity/time 40 3570 ns/iter (± 7) 3820 ns/iter (± 243) 0.93
misc/visitors/time-complexity/time 60 7669 ns/iter (± 150) 9277 ns/iter (± 599) 0.83
es/full-target/es2016 239356 ns/iter (± 329) 240196 ns/iter (± 844) 1.00
es/full-target/es2017 225846 ns/iter (± 691) 230304 ns/iter (± 591) 0.98
es/full-target/es2018 213347 ns/iter (± 663) 218771 ns/iter (± 1045) 0.98
es2020_nullish_coalescing 72645 ns/iter (± 371) 73328 ns/iter (± 489) 0.99
es2020_optional_chaining 83950 ns/iter (± 233) 85013 ns/iter (± 303) 0.99
es2022_class_properties 120702 ns/iter (± 312) 123358 ns/iter (± 391) 0.98
es2018_object_rest_spread 71039 ns/iter (± 218) 74947 ns/iter (± 198) 0.95
es2019_optional_catch_binding 65014 ns/iter (± 175) 66368 ns/iter (± 172) 0.98
es2017_async_to_generator 65225 ns/iter (± 198) 66153 ns/iter (± 127) 0.99
es2016_exponentiation 70155 ns/iter (± 317) 71493 ns/iter (± 335) 0.98
es2015_arrow 72553 ns/iter (± 245) 73705 ns/iter (± 283) 0.98
es2015_block_scoped_fn 70161 ns/iter (± 327) 71336 ns/iter (± 211) 0.98
es2015_block_scoping 130338 ns/iter (± 465) 134220 ns/iter (± 419) 0.97

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

Please sign in to comment.