Skip to content

Commit

Permalink
fix(es/typescript): Mark A as a type in export { type A } (#7196)
Browse files Browse the repository at this point in the history
  • Loading branch information
hyf0 committed Apr 4, 2023
1 parent ae2362e commit ddfbc93
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 3 deletions.
40 changes: 37 additions & 3 deletions crates/swc_ecma_transforms_typescript/src/strip.rs
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,8 @@ pub fn strip_with_config(config: Config, top_level_mark: Mark) -> impl Fold + Vi
is_type_only_export: Default::default(),
decl_names: Default::default(),
in_var_pat: Default::default(),
keys: Default::default()
keys: Default::default(),
exported_variable_to_is_type: Default::default(),
}),
inline_enum(ts_enum_lit, ts_enum_config)
)
Expand Down Expand Up @@ -236,6 +237,7 @@ where
decl_names: Default::default(),
in_var_pat: Default::default(),
keys: Default::default(),
exported_variable_to_is_type: Default::default(),
}),
inline_enum(ts_enum_lit, ts_enum_config)
)
Expand Down Expand Up @@ -292,6 +294,10 @@ where
in_var_pat: bool,

keys: Vec<VarDeclarator>,

/// Key is the `orig` in ExportNamedSpecifier
/// Value is `true` if the Key is a type
exported_variable_to_is_type: AHashMap<Id, bool>,
}

impl<C> Strip<C>
Expand Down Expand Up @@ -1675,6 +1681,24 @@ where
self.is_type_only_export = old;
}

fn visit_export_named_specifier(&mut self, n: &ExportNamedSpecifier) {
let is_type = self.is_type_only_export || n.is_type_only;
if let ModuleExportName::Ident(local_ident) = &n.orig {
// If the stored exported `Id` is a value, we just leave it here.
// If the stored exported `Id` is both a type and value, we consider it's a
// value. See https://github.com/denoland/deno/issues/8978
let is_type_to_the_existed = self
.exported_variable_to_is_type
.entry(local_ident.to_id())
.or_insert(is_type);

if *is_type_to_the_existed && !is_type {
*is_type_to_the_existed = false
}
}
n.visit_children_with(self)
}

fn visit_prop_name(&mut self, n: &PropName) {
if let PropName::Computed(e) = n {
e.visit_with(self)
Expand Down Expand Up @@ -2057,8 +2081,18 @@ where

import.specifiers.retain(|s| match *s {
ImportSpecifier::Named(ImportNamedSpecifier {
ref is_type_only, ..
}) if *is_type_only => false,
ref is_type_only,
ref local,
..
}) if *is_type_only
|| self
.exported_variable_to_is_type
.get(&local.to_id())
.copied()
.unwrap_or_default() =>
{
false
}

ImportSpecifier::Default(ImportDefaultSpecifier { ref local, .. })
| ImportSpecifier::Named(ImportNamedSpecifier { ref local, .. })
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import { A } from "./a.ts";
export { type A };
Empty file.

1 comment on commit ddfbc93

@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: ddfbc93 Previous: 7a863ad Ratio
es/full/bugs-1 300100 ns/iter (± 11950) 303035 ns/iter (± 16222) 0.99
es/full/minify/libraries/antd 1494698580 ns/iter (± 20147053) 1567924323 ns/iter (± 18480907) 0.95
es/full/minify/libraries/d3 296440622 ns/iter (± 5932489) 300761555 ns/iter (± 5664762) 0.99
es/full/minify/libraries/echarts 1161743484 ns/iter (± 16378554) 1214203663 ns/iter (± 8288802) 0.96
es/full/minify/libraries/jquery 89657410 ns/iter (± 732101) 91375299 ns/iter (± 903114) 0.98
es/full/minify/libraries/lodash 105088389 ns/iter (± 1837070) 104891205 ns/iter (± 1236759) 1.00
es/full/minify/libraries/moment 51322302 ns/iter (± 365004) 52542350 ns/iter (± 309271) 0.98
es/full/minify/libraries/react 18809635 ns/iter (± 124398) 18990395 ns/iter (± 103224) 0.99
es/full/minify/libraries/terser 236927935 ns/iter (± 1576875) 247327478 ns/iter (± 1459414) 0.96
es/full/minify/libraries/three 417583486 ns/iter (± 3706071) 449349078 ns/iter (± 6177956) 0.93
es/full/minify/libraries/typescript 2895113290 ns/iter (± 12401332) 2972459444 ns/iter (± 17876825) 0.97
es/full/minify/libraries/victory 634086842 ns/iter (± 10332283) 673926007 ns/iter (± 5307742) 0.94
es/full/minify/libraries/vue 127422859 ns/iter (± 992303) 136145251 ns/iter (± 4029376) 0.94
es/full/codegen/es3 28426 ns/iter (± 48) 28488 ns/iter (± 60) 1.00
es/full/codegen/es5 28449 ns/iter (± 66) 28487 ns/iter (± 301) 1.00
es/full/codegen/es2015 28406 ns/iter (± 81) 28530 ns/iter (± 48) 1.00
es/full/codegen/es2016 28416 ns/iter (± 49) 28484 ns/iter (± 73) 1.00
es/full/codegen/es2017 28301 ns/iter (± 81) 28453 ns/iter (± 91) 0.99
es/full/codegen/es2018 28406 ns/iter (± 53) 28503 ns/iter (± 43) 1.00
es/full/codegen/es2019 28434 ns/iter (± 63) 28532 ns/iter (± 47) 1.00
es/full/codegen/es2020 28424 ns/iter (± 74) 28525 ns/iter (± 71) 1.00
es/full/all/es3 182031173 ns/iter (± 3453089) 178088225 ns/iter (± 5693852) 1.02
es/full/all/es5 174287853 ns/iter (± 1503014) 168663407 ns/iter (± 3913697) 1.03
es/full/all/es2015 132136564 ns/iter (± 576615) 132064926 ns/iter (± 1866241) 1.00
es/full/all/es2016 131190451 ns/iter (± 1671312) 128862466 ns/iter (± 1480744) 1.02
es/full/all/es2017 128897124 ns/iter (± 1213613) 129477621 ns/iter (± 1844811) 1.00
es/full/all/es2018 125536673 ns/iter (± 1565224) 125549317 ns/iter (± 2384606) 1.00
es/full/all/es2019 124173480 ns/iter (± 1843998) 123229933 ns/iter (± 1013804) 1.01
es/full/all/es2020 117659154 ns/iter (± 965620) 117584536 ns/iter (± 948993) 1.00
es/full/parser 519860 ns/iter (± 6379) 515079 ns/iter (± 7756) 1.01
es/full/base/fixer 23266 ns/iter (± 45) 23323 ns/iter (± 79) 1.00
es/full/base/resolver_and_hygiene 84823 ns/iter (± 160) 86344 ns/iter (± 60) 0.98
serialization of serde 127 ns/iter (± 0) 127 ns/iter (± 0) 1
css/minify/libraries/bootstrap 27292134 ns/iter (± 99359) 27759182 ns/iter (± 122550) 0.98
css/visitor/compare/clone 2106683 ns/iter (± 19522) 2136935 ns/iter (± 2744) 0.99
css/visitor/compare/visit_mut_span 2318925 ns/iter (± 8396) 2334115 ns/iter (± 4042) 0.99
css/visitor/compare/visit_mut_span_panic 2367348 ns/iter (± 4039) 2382082 ns/iter (± 8538) 0.99
css/visitor/compare/fold_span 3087362 ns/iter (± 20207) 3106123 ns/iter (± 7364) 0.99
css/visitor/compare/fold_span_panic 3245606 ns/iter (± 22040) 3262699 ns/iter (± 24247) 0.99
css/lexer/bootstrap_5_1_3 5144282 ns/iter (± 17071) 5126685 ns/iter (± 24179) 1.00
css/lexer/foundation_6_7_4 4333495 ns/iter (± 5470) 4306549 ns/iter (± 2577) 1.01
css/lexer/tailwind_3_1_1 825076 ns/iter (± 1329) 822761 ns/iter (± 665) 1.00
css/parser/bootstrap_5_1_3 21068854 ns/iter (± 91922) 21324424 ns/iter (± 59035) 0.99
css/parser/foundation_6_7_4 16743383 ns/iter (± 32112) 16877907 ns/iter (± 29174) 0.99
css/parser/tailwind_3_1_1 3222649 ns/iter (± 5199) 3244101 ns/iter (± 2104) 0.99
es/codegen/colors 320896 ns/iter (± 180540) 320143 ns/iter (± 181965) 1.00
es/codegen/large 1245766 ns/iter (± 656274) 1249264 ns/iter (± 648923) 1.00
es/codegen/with-parser/colors 47001 ns/iter (± 147) 47695 ns/iter (± 302) 0.99
es/codegen/with-parser/large 504502 ns/iter (± 2632) 507081 ns/iter (± 2078) 0.99
es/minify/libraries/antd 1372191401 ns/iter (± 18105361) 1380685219 ns/iter (± 17361713) 0.99
es/minify/libraries/d3 259503216 ns/iter (± 2783175) 258216908 ns/iter (± 1964707) 1.00
es/minify/libraries/echarts 1055387987 ns/iter (± 13310000) 1050820854 ns/iter (± 7138073) 1.00
es/minify/libraries/jquery 79701445 ns/iter (± 544767) 79198247 ns/iter (± 615608) 1.01
es/minify/libraries/lodash 94632662 ns/iter (± 989025) 96856831 ns/iter (± 1528991) 0.98
es/minify/libraries/moment 46022696 ns/iter (± 611991) 46225951 ns/iter (± 496904) 1.00
es/minify/libraries/react 16979873 ns/iter (± 141124) 17342163 ns/iter (± 231817) 0.98
es/minify/libraries/terser 212569236 ns/iter (± 2718728) 215465563 ns/iter (± 3232622) 0.99
es/minify/libraries/three 364971963 ns/iter (± 5087709) 374757618 ns/iter (± 5289686) 0.97
es/minify/libraries/typescript 2473270021 ns/iter (± 30944745) 2512232859 ns/iter (± 15153073) 0.98
es/minify/libraries/victory 539462333 ns/iter (± 15934589) 570530586 ns/iter (± 11139308) 0.95
es/minify/libraries/vue 115708436 ns/iter (± 1569375) 116895082 ns/iter (± 664632) 0.99
es/visitor/compare/clone 2308311 ns/iter (± 13925) 2315724 ns/iter (± 5263) 1.00
es/visitor/compare/visit_mut_span 2679451 ns/iter (± 5899) 2725837 ns/iter (± 12154) 0.98
es/visitor/compare/visit_mut_span_panic 2737736 ns/iter (± 3905) 2761153 ns/iter (± 7545) 0.99
es/visitor/compare/fold_span 3807268 ns/iter (± 10506) 3854284 ns/iter (± 31878) 0.99
es/visitor/compare/fold_span_panic 3938524 ns/iter (± 8602) 3967008 ns/iter (± 6922) 0.99
es/lexer/colors 13062 ns/iter (± 19) 13094 ns/iter (± 86) 1.00
es/lexer/angular 6350702 ns/iter (± 8700) 6367566 ns/iter (± 5964) 1.00
es/lexer/backbone 772509 ns/iter (± 1554) 772749 ns/iter (± 843) 1.00
es/lexer/jquery 4345476 ns/iter (± 6876) 4352122 ns/iter (± 1156) 1.00
es/lexer/jquery mobile 6766589 ns/iter (± 7118) 6778044 ns/iter (± 4382) 1.00
es/lexer/mootools 3427905 ns/iter (± 5451) 3441714 ns/iter (± 2998) 1.00
es/lexer/underscore 640270 ns/iter (± 1139) 640346 ns/iter (± 537) 1.00
es/lexer/three 20661511 ns/iter (± 34375) 20744435 ns/iter (± 19176) 1.00
es/lexer/yui 3819986 ns/iter (± 4688) 3842515 ns/iter (± 2290) 0.99
es/parser/colors 29056 ns/iter (± 70) 29385 ns/iter (± 58) 0.99
es/parser/angular 14900065 ns/iter (± 187532) 15315490 ns/iter (± 164170) 0.97
es/parser/backbone 2177233 ns/iter (± 15886) 2177311 ns/iter (± 9886) 1.00
es/parser/jquery 11792182 ns/iter (± 78253) 12030289 ns/iter (± 145715) 0.98
es/parser/jquery mobile 18200407 ns/iter (± 147759) 19049884 ns/iter (± 195123) 0.96
es/parser/mootools 8973096 ns/iter (± 16543) 9021163 ns/iter (± 26099) 0.99
es/parser/underscore 1843503 ns/iter (± 11127) 1839620 ns/iter (± 9943) 1.00
es/parser/three 52111712 ns/iter (± 863729) 54591040 ns/iter (± 212354) 0.95
es/parser/yui 9042069 ns/iter (± 43057) 9111728 ns/iter (± 50702) 0.99
es/preset-env/usage/builtin_type 143322 ns/iter (± 34187) 143457 ns/iter (± 33590) 1.00
es/preset-env/usage/property 21209 ns/iter (± 101) 21199 ns/iter (± 60) 1.00
es/resolver/typescript 110009700 ns/iter (± 2360028) 115285337 ns/iter (± 3082983) 0.95
es/fixer/typescript 77931944 ns/iter (± 670763) 79749220 ns/iter (± 2978870) 0.98
es/hygiene/typescript 163464191 ns/iter (± 2429732) 171445568 ns/iter (± 1587404) 0.95
es/resolver_with_hygiene/typescript 302388653 ns/iter (± 1374522) 310335429 ns/iter (± 1742100) 0.97
es/visitor/base-perf/module_clone 80733 ns/iter (± 367) 80383 ns/iter (± 885) 1.00
es/visitor/base-perf/fold_empty 90991 ns/iter (± 305) 90100 ns/iter (± 279) 1.01
es/visitor/base-perf/fold_noop_impl_all 91230 ns/iter (± 395) 90815 ns/iter (± 386) 1.00
es/visitor/base-perf/fold_noop_impl_vec 91117 ns/iter (± 389) 90607 ns/iter (± 334) 1.01
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 57 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed_clone 41 ns/iter (± 0) 42 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_boxed 101 ns/iter (± 0) 105 ns/iter (± 0) 0.96
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 78 ns/iter (± 0) 1
es/visitor/base-perf/visit_contains_this 3496 ns/iter (± 96) 3220 ns/iter (± 70) 1.09
es/base/parallel/resolver/typescript 6014338700 ns/iter (± 450750830) 5916818145 ns/iter (± 490849344) 1.02
es/base/parallel/hygiene/typescript 2009544729 ns/iter (± 20010657) 2053668740 ns/iter (± 25678066) 0.98
misc/visitors/time-complexity/time 5 100 ns/iter (± 0) 101 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 10 335 ns/iter (± 5) 340 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 15 640 ns/iter (± 11) 685 ns/iter (± 30) 0.93
misc/visitors/time-complexity/time 20 1229 ns/iter (± 4) 1229 ns/iter (± 3) 1
misc/visitors/time-complexity/time 40 6530 ns/iter (± 13) 6457 ns/iter (± 49) 1.01
misc/visitors/time-complexity/time 60 16979 ns/iter (± 61) 14545 ns/iter (± 64) 1.17
es/full-target/es2016 252876 ns/iter (± 496) 252199 ns/iter (± 395) 1.00
es/full-target/es2017 247031 ns/iter (± 657) 246606 ns/iter (± 372) 1.00
es/full-target/es2018 235124 ns/iter (± 524) 235770 ns/iter (± 324) 1.00
es2020_nullish_coalescing 93301 ns/iter (± 677) 92538 ns/iter (± 419) 1.01
es2020_optional_chaining 124442 ns/iter (± 252) 124027 ns/iter (± 277) 1.00
es2022_class_properties 148799 ns/iter (± 440) 150290 ns/iter (± 373) 0.99
es2018_object_rest_spread 96249 ns/iter (± 180) 96011 ns/iter (± 185) 1.00
es2019_optional_catch_binding 85286 ns/iter (± 200) 85570 ns/iter (± 208) 1.00
es2017_async_to_generator 86378 ns/iter (± 191) 85937 ns/iter (± 350) 1.01
es2016_exponentiation 88622 ns/iter (± 166) 89961 ns/iter (± 226) 0.99
es2015_arrow 92605 ns/iter (± 305) 93334 ns/iter (± 665) 0.99
es2015_block_scoped_fn 90397 ns/iter (± 202) 91556 ns/iter (± 158) 0.99
es2015_block_scoping 167075 ns/iter (± 1034) 169869 ns/iter (± 233) 0.98

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

Please sign in to comment.