Skip to content

Commit

Permalink
feat(es/ast): Support import attributes proposal (#7868)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #7179
  • Loading branch information
kdy1 committed Aug 28, 2023
1 parent 5d25307 commit 4d3fcb8
Show file tree
Hide file tree
Showing 515 changed files with 12,048 additions and 844 deletions.
2 changes: 1 addition & 1 deletion crates/swc/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1110,7 +1110,7 @@ impl Compiler {
jsx: true,
decorators: true,
decorators_before_export: true,
import_assertions: true,
import_attributes: true,
..Default::default()
}),
IsModule::Bool(true),
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_bundler/src/bundler/chunk/computed_key.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ where
specifiers: vec![specifier],
src: None,
type_only: false,
asserts: None,
with: None,
})),
));
}
Expand Down
10 changes: 5 additions & 5 deletions crates/swc_bundler/src/bundler/chunk/merge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -768,7 +768,7 @@ where
specifiers: vec![specifier],
src: None,
type_only: false,
asserts: None,
with: None,
},
)));
}
Expand Down Expand Up @@ -816,7 +816,7 @@ where
specifiers: vec![specifier],
src: None,
type_only: false,
asserts: None,
with: None,
},
)));
}
Expand Down Expand Up @@ -883,7 +883,7 @@ where
.collect(),
src: None,
type_only: false,
asserts: None,
with: None,
}));
extra.push(export);
continue;
Expand Down Expand Up @@ -925,7 +925,7 @@ where
specifiers: vec![specifier],
src: None,
type_only: false,
asserts: None,
with: None,
},
)));
}
Expand Down Expand Up @@ -1140,7 +1140,7 @@ where
span: ns.span,
specifiers: vec![specifier],
src: None,
asserts: None,
with: None,
type_only: false,
}),
));
Expand Down
4 changes: 2 additions & 2 deletions crates/swc_bundler/src/bundler/import/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ where
specifiers: vec![],
src: Box::new(src.clone()),
type_only: false,
asserts: None,
with: None,
};

if self.top_level {
Expand Down Expand Up @@ -657,7 +657,7 @@ where
.collect(),
src: Box::new(src),
type_only: false,
asserts: None,
with: None,
};

// if self.top_level {
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_bundler/src/bundler/load.rs
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ where
specifiers: vec![],
src: Box::new(src),
type_only: false,
asserts: None,
with: None,
},
true,
false,
Expand Down
12 changes: 6 additions & 6 deletions crates/swc_ecma_ast/src/module_decl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ pub struct ImportDecl {
pub type_only: bool,

#[cfg_attr(feature = "serde-impl", serde(default))]
pub asserts: Option<Box<ObjectLit>>,
pub with: Option<Box<ObjectLit>>,
}

impl Take for ImportDecl {
Expand All @@ -94,7 +94,7 @@ impl Take for ImportDecl {
specifiers: Take::dummy(),
src: Take::dummy(),
type_only: Default::default(),
asserts: Take::dummy(),
with: Take::dummy(),
}
}
}
Expand All @@ -113,7 +113,7 @@ pub struct ExportAll {
pub type_only: bool,

#[cfg_attr(feature = "serde-impl", serde(default))]
pub asserts: Option<Box<ObjectLit>>,
pub with: Option<Box<ObjectLit>>,
}

impl Take for ExportAll {
Expand All @@ -122,7 +122,7 @@ impl Take for ExportAll {
span: DUMMY_SP,
src: Take::dummy(),
type_only: Default::default(),
asserts: Take::dummy(),
with: Take::dummy(),
}
}
}
Expand All @@ -144,7 +144,7 @@ pub struct NamedExport {
pub type_only: bool,

#[cfg_attr(feature = "serde-impl", serde(default))]
pub asserts: Option<Box<ObjectLit>>,
pub with: Option<Box<ObjectLit>>,
}

impl Take for NamedExport {
Expand All @@ -154,7 +154,7 @@ impl Take for NamedExport {
specifiers: Take::dummy(),
src: Take::dummy(),
type_only: Default::default(),
asserts: Take::dummy(),
with: Take::dummy(),
}
}
}
Expand Down
18 changes: 9 additions & 9 deletions crates/swc_ecma_codegen/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -308,11 +308,11 @@ where

emit!(n.src);

if let Some(asserts) = &n.asserts {
if let Some(with) = &n.with {
formatting_space!();
keyword!("assert");
keyword!("with");
formatting_space!();
emit!(asserts);
emit!(with);
}

semi!();
Expand Down Expand Up @@ -451,11 +451,11 @@ where
formatting_space!();
emit!(src);

if let Some(asserts) = &node.asserts {
if let Some(with) = &node.with {
formatting_space!();
keyword!("assert");
keyword!("with");
formatting_space!();
emit!(asserts);
emit!(with);
}
}
semi!();
Expand All @@ -477,11 +477,11 @@ where
formatting_space!();
emit!(node.src);

if let Some(asserts) = &node.asserts {
if let Some(with) = &node.with {
formatting_space!();
keyword!("assert");
keyword!("with");
formatting_space!();
emit!(asserts);
emit!(with);
}

semi!();
Expand Down
8 changes: 4 additions & 4 deletions crates/swc_ecma_codegen/tests/fixture/issues/3110/output.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import data from "./data.json" assert {
import data from "./data.json" with {
type: "json"
};
import "./data2.json" assert {
import "./data2.json" with {
type: "json"
};
export { default as data3 } from "./data3.json" assert {
export { default as data3 } from "./data3.json" with {
type: "json"
};
export * as data4 from "./data4.json" assert {
export * as data4 from "./data4.json" with {
type: "json"
};
console.log(data);
Original file line number Diff line number Diff line change
@@ -1 +1 @@
import data from"./data.json"assert{type:"json"};import"./data2.json"assert{type:"json"};export{default as data3}from"./data3.json"assert{type:"json"};export*as data4 from"./data4.json"assert{type:"json"};console.log(data);
import data from"./data.json"with{type:"json"};import"./data2.json"with{type:"json"};export{default as data3}from"./data3.json"with{type:"json"};export*as data4 from"./data4.json"with{type:"json"};console.log(data);

1 comment on commit 4d3fcb8

@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: 4d3fcb8 Previous: 122d14c Ratio
es/full/bugs-1 292512 ns/iter (± 11808) 282549 ns/iter (± 2097) 1.04
es/full/minify/libraries/antd 1349244145 ns/iter (± 22474190) 1309068988 ns/iter (± 13323685) 1.03
es/full/minify/libraries/d3 278863440 ns/iter (± 2878976) 277098494 ns/iter (± 3304887) 1.01
es/full/minify/libraries/echarts 1083161876 ns/iter (± 27530753) 1054251405 ns/iter (± 9237734) 1.03
es/full/minify/libraries/jquery 84464061 ns/iter (± 395943) 83211500 ns/iter (± 231621) 1.02
es/full/minify/libraries/lodash 97588666 ns/iter (± 245524) 96130556 ns/iter (± 276589) 1.02
es/full/minify/libraries/moment 49858696 ns/iter (± 258179) 49411606 ns/iter (± 150303) 1.01
es/full/minify/libraries/react 17974332 ns/iter (± 49771) 17769782 ns/iter (± 30584) 1.01
es/full/minify/libraries/terser 222376392 ns/iter (± 2407259) 215516111 ns/iter (± 2900997) 1.03
es/full/minify/libraries/three 395611116 ns/iter (± 6753921) 383080800 ns/iter (± 6351872) 1.03
es/full/minify/libraries/typescript 2690207991 ns/iter (± 28388727) 2610911931 ns/iter (± 13546677) 1.03
es/full/minify/libraries/victory 605523621 ns/iter (± 17611502) 555601537 ns/iter (± 6824572) 1.09
es/full/minify/libraries/vue 120011836 ns/iter (± 507090) 118588767 ns/iter (± 706779) 1.01
es/full/codegen/es3 34205 ns/iter (± 117) 35718 ns/iter (± 150) 0.96
es/full/codegen/es5 34243 ns/iter (± 502) 35665 ns/iter (± 125) 0.96
es/full/codegen/es2015 34216 ns/iter (± 99) 35695 ns/iter (± 90) 0.96
es/full/codegen/es2016 34138 ns/iter (± 72) 35812 ns/iter (± 268) 0.95
es/full/codegen/es2017 34235 ns/iter (± 81) 35836 ns/iter (± 78) 0.96
es/full/codegen/es2018 34354 ns/iter (± 61) 35688 ns/iter (± 108) 0.96
es/full/codegen/es2019 34114 ns/iter (± 110) 35849 ns/iter (± 150) 0.95
es/full/codegen/es2020 34153 ns/iter (± 73) 35724 ns/iter (± 89) 0.96
es/full/all/es3 167584083 ns/iter (± 1156345) 169061895 ns/iter (± 2273529) 0.99
es/full/all/es5 160330216 ns/iter (± 1373638) 161942356 ns/iter (± 1999496) 0.99
es/full/all/es2015 119061485 ns/iter (± 685719) 120529735 ns/iter (± 784725) 0.99
es/full/all/es2016 118270376 ns/iter (± 755843) 120046738 ns/iter (± 385948) 0.99
es/full/all/es2017 117429719 ns/iter (± 697613) 119784614 ns/iter (± 445334) 0.98
es/full/all/es2018 115222854 ns/iter (± 867447) 117522839 ns/iter (± 1121820) 0.98
es/full/all/es2019 114939322 ns/iter (± 272135) 116661824 ns/iter (± 817609) 0.99
es/full/all/es2020 110117331 ns/iter (± 623628) 112066018 ns/iter (± 326063) 0.98
es/full/parser 490093 ns/iter (± 5844) 495085 ns/iter (± 4584) 0.99
es/full/base/fixer 21320 ns/iter (± 109) 17727 ns/iter (± 42) 1.20
es/full/base/resolver_and_hygiene 85262 ns/iter (± 345) 80948 ns/iter (± 222) 1.05
serialization of serde 293 ns/iter (± 0) 300 ns/iter (± 0) 0.98
css/minify/libraries/bootstrap 28668030 ns/iter (± 113965) 28412307 ns/iter (± 46326) 1.01
css/visitor/compare/clone 1656690 ns/iter (± 5051) 1638751 ns/iter (± 3239) 1.01
css/visitor/compare/visit_mut_span 1758463 ns/iter (± 15791) 1760863 ns/iter (± 5204) 1.00
css/visitor/compare/visit_mut_span_panic 1856865 ns/iter (± 7197) 1841640 ns/iter (± 9752) 1.01
css/visitor/compare/fold_span 2582686 ns/iter (± 11376) 2579936 ns/iter (± 8898) 1.00
css/visitor/compare/fold_span_panic 2777644 ns/iter (± 20242) 2762375 ns/iter (± 10253) 1.01
css/lexer/bootstrap_5_1_3 4531867 ns/iter (± 2687) 4556861 ns/iter (± 5831) 0.99
css/lexer/foundation_6_7_4 3824097 ns/iter (± 4099) 3838170 ns/iter (± 3779) 1.00
css/lexer/tailwind_3_1_1 730153 ns/iter (± 429) 731191 ns/iter (± 906) 1.00
css/parser/bootstrap_5_1_3 20542121 ns/iter (± 46113) 19025804 ns/iter (± 55517) 1.08
css/parser/foundation_6_7_4 16054014 ns/iter (± 51712) 15307436 ns/iter (± 28143) 1.05
css/parser/tailwind_3_1_1 3076771 ns/iter (± 7121) 2953023 ns/iter (± 7584) 1.04
es/codegen/colors 743715 ns/iter (± 403882) 734450 ns/iter (± 399912) 1.01
es/codegen/large 2889605 ns/iter (± 1530434) 3132427 ns/iter (± 1658604) 0.92
es/codegen/with-parser/colors 45677 ns/iter (± 201) 46528 ns/iter (± 211) 0.98
es/codegen/with-parser/large 493203 ns/iter (± 901) 497380 ns/iter (± 1914) 0.99
es/minify/libraries/antd 1162745936 ns/iter (± 25269225) 1125265741 ns/iter (± 17818056) 1.03
es/minify/libraries/d3 241504411 ns/iter (± 2434197) 239441725 ns/iter (± 2255735) 1.01
es/minify/libraries/echarts 946747263 ns/iter (± 19516855) 898881952 ns/iter (± 11459203) 1.05
es/minify/libraries/jquery 73416698 ns/iter (± 205315) 72463554 ns/iter (± 199328) 1.01
es/minify/libraries/lodash 87388073 ns/iter (± 392742) 86618032 ns/iter (± 181620) 1.01
es/minify/libraries/moment 43395050 ns/iter (± 105655) 43108660 ns/iter (± 81033) 1.01
es/minify/libraries/react 16065074 ns/iter (± 60587) 15916830 ns/iter (± 48101) 1.01
es/minify/libraries/terser 188135171 ns/iter (± 1609791) 184037684 ns/iter (± 359135) 1.02
es/minify/libraries/three 326970923 ns/iter (± 3232825) 319919276 ns/iter (± 5573081) 1.02
es/minify/libraries/typescript 2281099622 ns/iter (± 22162489) 2236691584 ns/iter (± 20321931) 1.02
es/minify/libraries/victory 489682662 ns/iter (± 8586979) 476707992 ns/iter (± 7032639) 1.03
es/minify/libraries/vue 105707417 ns/iter (± 283483) 105150401 ns/iter (± 179258) 1.01
es/visitor/compare/clone 1954404 ns/iter (± 5078) 1927717 ns/iter (± 9092) 1.01
es/visitor/compare/visit_mut_span 2266564 ns/iter (± 5235) 2246417 ns/iter (± 4407) 1.01
es/visitor/compare/visit_mut_span_panic 2328502 ns/iter (± 6506) 2322927 ns/iter (± 3290) 1.00
es/visitor/compare/fold_span 3359364 ns/iter (± 7873) 3349594 ns/iter (± 8805) 1.00
es/visitor/compare/fold_span_panic 3485624 ns/iter (± 7091) 3475143 ns/iter (± 7675) 1.00
es/lexer/colors 13030 ns/iter (± 119) 13209 ns/iter (± 4) 0.99
es/lexer/angular 6117158 ns/iter (± 4740) 6146892 ns/iter (± 1447) 1.00
es/lexer/backbone 786245 ns/iter (± 1091) 796058 ns/iter (± 1017) 0.99
es/lexer/jquery 4469408 ns/iter (± 12425) 4527795 ns/iter (± 3383) 0.99
es/lexer/jquery mobile 6837207 ns/iter (± 4672) 6889167 ns/iter (± 14923) 0.99
es/lexer/mootools 3551194 ns/iter (± 1391) 3596619 ns/iter (± 4858) 0.99
es/lexer/underscore 659627 ns/iter (± 593) 672436 ns/iter (± 487) 0.98
es/lexer/three 21396879 ns/iter (± 32222) 21765468 ns/iter (± 34870) 0.98
es/lexer/yui 3826615 ns/iter (± 1729) 3866533 ns/iter (± 3062) 0.99
es/parser/colors 27300 ns/iter (± 38) 28034 ns/iter (± 39) 0.97
es/parser/angular 13536420 ns/iter (± 63657) 13601590 ns/iter (± 68046) 1.00
es/parser/backbone 1988934 ns/iter (± 6407) 2014319 ns/iter (± 7376) 0.99
es/parser/jquery 10810993 ns/iter (± 61366) 11046054 ns/iter (± 58279) 0.98
es/parser/jquery mobile 16702344 ns/iter (± 140430) 16830068 ns/iter (± 62821) 0.99
es/parser/mootools 8345680 ns/iter (± 33553) 8482447 ns/iter (± 19837) 0.98
es/parser/underscore 1709716 ns/iter (± 10601) 1747926 ns/iter (± 9562) 0.98
es/parser/three 47953574 ns/iter (± 722708) 48041127 ns/iter (± 646178) 1.00
es/parser/yui 8264393 ns/iter (± 28604) 8301422 ns/iter (± 42986) 1.00
es/preset-env/usage/builtin_type 138302 ns/iter (± 32797) 141062 ns/iter (± 32383) 0.98
es/preset-env/usage/property 16714 ns/iter (± 88) 17493 ns/iter (± 64) 0.96
es/resolver/typescript 88679684 ns/iter (± 1356999) 87462909 ns/iter (± 1278947) 1.01
es/fixer/typescript 65160796 ns/iter (± 1028860) 64193876 ns/iter (± 972549) 1.02
es/hygiene/typescript 131823844 ns/iter (± 595504) 131737453 ns/iter (± 1337038) 1.00
es/resolver_with_hygiene/typescript 243942936 ns/iter (± 2343830) 241899902 ns/iter (± 914013) 1.01
es/visitor/base-perf/module_clone 58907 ns/iter (± 702) 61237 ns/iter (± 737) 0.96
es/visitor/base-perf/fold_empty 63060 ns/iter (± 175) 64134 ns/iter (± 180) 0.98
es/visitor/base-perf/fold_noop_impl_all 63089 ns/iter (± 398) 64604 ns/iter (± 161) 0.98
es/visitor/base-perf/fold_noop_impl_vec 63404 ns/iter (± 372) 65445 ns/iter (± 288) 0.97
es/visitor/base-perf/boxing_boxed_clone 57 ns/iter (± 0) 58 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed_clone 41 ns/iter (± 0) 40 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_boxed 109 ns/iter (± 0) 108 ns/iter (± 0) 1.01
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 2639 ns/iter (± 20) 2657 ns/iter (± 13) 0.99
es/base/parallel/resolver/typescript 3836698347 ns/iter (± 246254918) 3858910646 ns/iter (± 313809348) 0.99
es/base/parallel/hygiene/typescript 1448139920 ns/iter (± 23905988) 1473745519 ns/iter (± 29331426) 0.98
misc/visitors/time-complexity/time 5 141 ns/iter (± 0) 151 ns/iter (± 0) 0.93
misc/visitors/time-complexity/time 10 383 ns/iter (± 7) 432 ns/iter (± 4) 0.89
misc/visitors/time-complexity/time 15 701 ns/iter (± 47) 895 ns/iter (± 8) 0.78
misc/visitors/time-complexity/time 20 1138 ns/iter (± 13) 1453 ns/iter (± 0) 0.78
misc/visitors/time-complexity/time 40 3648 ns/iter (± 19) 4362 ns/iter (± 8) 0.84
misc/visitors/time-complexity/time 60 7409 ns/iter (± 37) 10613 ns/iter (± 807) 0.70
es/full-target/es2016 228309 ns/iter (± 1048) 229476 ns/iter (± 696) 0.99
es/full-target/es2017 217489 ns/iter (± 2299) 220992 ns/iter (± 388) 0.98
es/full-target/es2018 205696 ns/iter (± 443) 207327 ns/iter (± 719) 0.99
es2020_nullish_coalescing 70381 ns/iter (± 601) 71554 ns/iter (± 221) 0.98
es2020_optional_chaining 81540 ns/iter (± 279) 79458 ns/iter (± 354) 1.03
es2022_class_properties 115406 ns/iter (± 237) 114709 ns/iter (± 216) 1.01
es2018_object_rest_spread 75928 ns/iter (± 235) 75937 ns/iter (± 565) 1.00
es2019_optional_catch_binding 64287 ns/iter (± 170) 65066 ns/iter (± 387) 0.99
es2017_async_to_generator 65060 ns/iter (± 230) 65317 ns/iter (± 367) 1.00
es2016_exponentiation 66647 ns/iter (± 274) 65956 ns/iter (± 228) 1.01
es2015_arrow 71612 ns/iter (± 168) 71672 ns/iter (± 224) 1.00
es2015_block_scoped_fn 67967 ns/iter (± 218) 69516 ns/iter (± 210) 0.98
es2015_block_scoping 120179 ns/iter (± 351) 120305 ns/iter (± 646) 1.00

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

Please sign in to comment.