Skip to content

Commit fc0ba2a

Browse files
authoredSep 23, 2024··
fix(es/module): Rewrite import specifier in type declaration (#9577)
**Description:** Use `Arc<dyn ImportResolver>` to reduce cost **Related issue:** - Closes #9548
1 parent cf74382 commit fc0ba2a

File tree

25 files changed

+194
-259
lines changed

25 files changed

+194
-259
lines changed
 

‎.changeset/serious-ducks-suffer.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
swc_ecma_transforms_module: minor
3+
---
4+
5+
fix(typescript): rewrite import specifier in type declaration

‎crates/swc/src/builder.rs

+9-13
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::{path::PathBuf, sync::Arc};
1+
use std::sync::Arc;
22

33
use compat::es2015::regenerator;
44
use either::Either;
@@ -15,16 +15,16 @@ use swc_ecma_transforms::{
1515
compat,
1616
feature::{enable_available_feature_from_es_version, FeatureFlag},
1717
fixer::{fixer, paren_remover},
18-
helpers, hygiene,
19-
hygiene::hygiene_with_config,
20-
modules,
18+
helpers,
19+
hygiene::{self, hygiene_with_config},
20+
modules::{self, path::ImportResolver},
2121
optimization::const_modules,
2222
pass::Optional,
2323
resolver, Assumptions,
2424
};
2525
use swc_ecma_visit::{as_folder, noop_visit_mut_type, VisitMut, VisitMutWith};
2626

27-
use crate::config::{CompiledPaths, GlobalPassOption, JsMinifyOptions, ModuleConfig};
27+
use crate::config::{GlobalPassOption, JsMinifyOptions, ModuleConfig};
2828

2929
/// Builder is used to create a high performance `Compiler`.
3030
pub struct PassBuilder<'a, 'b, P: swc_ecma_visit::Fold> {
@@ -168,12 +168,10 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
168168
/// - fixer if enabled
169169
pub fn finalize<'cmt>(
170170
self,
171-
base_url: PathBuf,
172-
paths: CompiledPaths,
173-
base: &FileName,
174171
syntax: Syntax,
175172
module: Option<ModuleConfig>,
176173
comments: Option<&'cmt dyn Comments>,
174+
resolver: Option<(FileName, Arc<dyn ImportResolver>)>,
177175
) -> impl 'cmt + swc_ecma_visit::Fold
178176
where
179177
P: 'cmt,
@@ -347,12 +345,10 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
347345
ModuleConfig::build(
348346
self.cm.clone(),
349347
comments,
350-
base_url,
351-
paths,
352-
base,
353-
self.unresolved_mark,
354348
module,
355-
feature_flag
349+
self.unresolved_mark,
350+
feature_flag,
351+
resolver,
356352
),
357353
as_folder(MinifierPass {
358354
options: self.minify,

‎crates/swc/src/config/mod.rs

+80-96
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,13 @@ use swc_ecma_parser::{parse_file_as_expr, Syntax, TsSyntax};
4545
pub use swc_ecma_transforms::proposals::DecoratorVersion;
4646
use swc_ecma_transforms::{
4747
feature::FeatureFlag,
48-
hygiene, modules,
49-
modules::{path::NodeImportResolver, rewriter::import_rewriter, EsModuleConfig},
48+
hygiene,
49+
modules::{
50+
self,
51+
path::{ImportResolver, NodeImportResolver, Resolver},
52+
rewriter::import_rewriter,
53+
EsModuleConfig,
54+
},
5055
optimization::{const_modules, json_parse, simplifier},
5156
pass::{noop, Optional},
5257
proposals::{
@@ -540,6 +545,9 @@ impl Options {
540545
.unwrap_or_default()
541546
};
542547

548+
let paths = paths.into_iter().collect();
549+
let resolver = ModuleConfig::get_resolver(&base_url, paths, base, cfg.module.as_ref());
550+
543551
let pass = PassBuilder::new(
544552
cm,
545553
handler,
@@ -564,12 +572,10 @@ impl Options {
564572
.preset_env(cfg.env)
565573
.regenerator(regenerator)
566574
.finalize(
567-
base_url,
568-
paths.into_iter().collect(),
569-
base,
570575
syntax,
571576
cfg.module,
572577
comments.map(|v| v as _),
578+
resolver.clone(),
573579
);
574580

575581
let keep_import_attributes = experimental.keep_import_attributes.into_bool();
@@ -782,6 +788,7 @@ impl Options {
782788
.emit_assert_for_import_attributes
783789
.into_bool(),
784790
emit_isolated_dts: experimental.emit_isolated_dts.into_bool(),
791+
resolver,
785792
})
786793
}
787794
}
@@ -1090,6 +1097,7 @@ pub struct BuiltInput<P: swc_ecma_visit::Fold> {
10901097
pub emit_assert_for_import_attributes: bool,
10911098

10921099
pub emit_isolated_dts: bool,
1100+
pub resolver: Option<(FileName, Arc<dyn ImportResolver>)>,
10931101
}
10941102

10951103
impl<P> BuiltInput<P>
@@ -1120,6 +1128,7 @@ where
11201128
output: self.output,
11211129
emit_assert_for_import_attributes: self.emit_assert_for_import_attributes,
11221130
emit_isolated_dts: self.emit_isolated_dts,
1131+
resolver: self.resolver,
11231132
}
11241133
}
11251134
}
@@ -1288,116 +1297,91 @@ impl ModuleConfig {
12881297
pub fn build<'cmt>(
12891298
cm: Arc<SourceMap>,
12901299
comments: Option<&'cmt dyn Comments>,
1291-
base_url: PathBuf,
1292-
paths: CompiledPaths,
1293-
base: &FileName,
1294-
unresolved_mark: Mark,
12951300
config: Option<ModuleConfig>,
1301+
unresolved_mark: Mark,
12961302
available_features: FeatureFlag,
1303+
resolver: Option<(FileName, Arc<dyn ImportResolver>)>,
12971304
) -> Box<dyn swc_ecma_visit::Fold + 'cmt> {
1305+
let resolver = if let Some((base, resolver)) = resolver {
1306+
Resolver::Real { base, resolver }
1307+
} else {
1308+
Resolver::Default
1309+
};
1310+
1311+
match config {
1312+
None | Some(ModuleConfig::Es6(..)) | Some(ModuleConfig::NodeNext(..)) => match resolver
1313+
{
1314+
Resolver::Default => Box::new(noop()),
1315+
Resolver::Real { base, resolver } => Box::new(import_rewriter(base, resolver)),
1316+
},
1317+
Some(ModuleConfig::CommonJs(config)) => Box::new(modules::common_js::common_js(
1318+
resolver,
1319+
unresolved_mark,
1320+
config,
1321+
available_features,
1322+
)),
1323+
Some(ModuleConfig::Umd(config)) => Box::new(modules::umd::umd(
1324+
cm,
1325+
resolver,
1326+
unresolved_mark,
1327+
config,
1328+
available_features,
1329+
)),
1330+
Some(ModuleConfig::Amd(config)) => Box::new(modules::amd::amd(
1331+
resolver,
1332+
unresolved_mark,
1333+
config,
1334+
available_features,
1335+
comments,
1336+
)),
1337+
Some(ModuleConfig::SystemJs(config)) => Box::new(modules::system_js::system_js(
1338+
resolver,
1339+
unresolved_mark,
1340+
config,
1341+
)),
1342+
}
1343+
}
1344+
1345+
pub fn get_resolver(
1346+
base_url: &Path,
1347+
paths: CompiledPaths,
1348+
base: &FileName,
1349+
config: Option<&ModuleConfig>,
1350+
) -> Option<(FileName, Arc<dyn ImportResolver>)> {
12981351
let skip_resolver = base_url.as_os_str().is_empty() && paths.is_empty();
12991352

1353+
if skip_resolver {
1354+
return None;
1355+
}
1356+
13001357
let base = match base {
13011358
FileName::Real(v) if !skip_resolver => {
13021359
FileName::Real(v.canonicalize().unwrap_or_else(|_| v.to_path_buf()))
13031360
}
13041361
_ => base.clone(),
13051362
};
13061363

1307-
match config {
1308-
None => {
1309-
if skip_resolver {
1310-
Box::new(noop())
1311-
} else {
1312-
let resolver = build_resolver(base_url, paths, false);
1313-
1314-
Box::new(import_rewriter(base, resolver))
1315-
}
1316-
}
1364+
let base_url = base_url.to_path_buf();
1365+
let resolver = match config {
1366+
None => build_resolver(base_url, paths, false),
13171367
Some(ModuleConfig::Es6(config)) | Some(ModuleConfig::NodeNext(config)) => {
1318-
if skip_resolver {
1319-
Box::new(noop())
1320-
} else {
1321-
let resolver = build_resolver(base_url, paths, config.resolve_fully);
1322-
1323-
Box::new(import_rewriter(base, resolver))
1324-
}
1368+
build_resolver(base_url, paths, config.resolve_fully)
13251369
}
13261370
Some(ModuleConfig::CommonJs(config)) => {
1327-
if skip_resolver {
1328-
Box::new(modules::common_js::common_js(
1329-
unresolved_mark,
1330-
config,
1331-
available_features,
1332-
))
1333-
} else {
1334-
let resolver = build_resolver(base_url, paths, config.resolve_fully);
1335-
Box::new(modules::common_js::common_js_with_resolver(
1336-
resolver,
1337-
base,
1338-
unresolved_mark,
1339-
config,
1340-
available_features,
1341-
))
1342-
}
1371+
build_resolver(base_url, paths, config.resolve_fully)
13431372
}
13441373
Some(ModuleConfig::Umd(config)) => {
1345-
if skip_resolver {
1346-
Box::new(modules::umd::umd(
1347-
cm,
1348-
unresolved_mark,
1349-
config,
1350-
available_features,
1351-
))
1352-
} else {
1353-
let resolver = build_resolver(base_url, paths, config.config.resolve_fully);
1354-
1355-
Box::new(modules::umd::umd_with_resolver(
1356-
cm,
1357-
resolver,
1358-
base,
1359-
unresolved_mark,
1360-
config,
1361-
available_features,
1362-
))
1363-
}
1374+
build_resolver(base_url, paths, config.config.resolve_fully)
13641375
}
13651376
Some(ModuleConfig::Amd(config)) => {
1366-
if skip_resolver {
1367-
Box::new(modules::amd::amd(
1368-
unresolved_mark,
1369-
config,
1370-
available_features,
1371-
comments,
1372-
))
1373-
} else {
1374-
let resolver = build_resolver(base_url, paths, config.config.resolve_fully);
1375-
1376-
Box::new(modules::amd::amd_with_resolver(
1377-
resolver,
1378-
base,
1379-
unresolved_mark,
1380-
config,
1381-
available_features,
1382-
comments,
1383-
))
1384-
}
1377+
build_resolver(base_url, paths, config.config.resolve_fully)
13851378
}
13861379
Some(ModuleConfig::SystemJs(config)) => {
1387-
if skip_resolver {
1388-
Box::new(modules::system_js::system_js(unresolved_mark, config))
1389-
} else {
1390-
let resolver = build_resolver(base_url, paths, config.resolve_fully);
1391-
1392-
Box::new(modules::system_js::system_js_with_resolver(
1393-
resolver,
1394-
base,
1395-
unresolved_mark,
1396-
config,
1397-
))
1398-
}
1380+
build_resolver(base_url, paths, config.resolve_fully)
13991381
}
1400-
}
1382+
};
1383+
1384+
Some((base, resolver))
14011385
}
14021386
}
14031387

@@ -1712,7 +1696,7 @@ fn build_resolver(
17121696
mut base_url: PathBuf,
17131697
paths: CompiledPaths,
17141698
resolve_fully: bool,
1715-
) -> Box<SwcImportResolver> {
1699+
) -> SwcImportResolver {
17161700
static CACHE: Lazy<DashMap<(PathBuf, CompiledPaths, bool), SwcImportResolver, ARandomState>> =
17171701
Lazy::new(Default::default);
17181702

@@ -1731,7 +1715,7 @@ fn build_resolver(
17311715
}
17321716

17331717
if let Some(cached) = CACHE.get(&(base_url.clone(), paths.clone(), resolve_fully)) {
1734-
return Box::new((*cached).clone());
1718+
return cached.clone();
17351719
}
17361720

17371721
let r = {
@@ -1758,5 +1742,5 @@ fn build_resolver(
17581742

17591743
CACHE.insert((base_url, paths, resolve_fully), r.clone());
17601744

1761-
Box::new(r)
1745+
r
17621746
}

‎crates/swc/src/lib.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ use swc_ecma_transforms::{
147147
fixer,
148148
helpers::{self, Helpers},
149149
hygiene,
150-
modules::path::NodeImportResolver,
150+
modules::{path::NodeImportResolver, rewriter::import_rewriter},
151151
pass::noop,
152152
resolver,
153153
};
@@ -982,6 +982,10 @@ impl Compiler {
982982
let mut checker = FastDts::new(fm.name.clone());
983983
let mut module = program.clone().expect_module();
984984

985+
if let Some((base, resolver)) = config.resolver {
986+
module = module.fold_with(&mut import_rewriter(base, resolver));
987+
}
988+
985989
let issues = checker.transform(&mut module);
986990

987991
for issue in issues {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"jsc": {
3+
"parser": {
4+
"syntax": "typescript"
5+
},
6+
"experimental": {
7+
"emitIsolatedDts": true
8+
},
9+
"baseUrl": "./",
10+
"paths": {
11+
"@lib/*": ["src/*"]
12+
}
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "@lib/example";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
const a = 1;
2+
export { a };
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "./src/example";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "./src/example";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
declare const a: number;
2+
export { a };
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
var a = 1;
2+
export { a };

‎crates/swc_ecma_transforms/tests/decorators.rs

+3
Original file line numberDiff line numberDiff line change
@@ -3568,6 +3568,7 @@ test!(
35683568
|_| chain!(
35693569
decorators(Default::default()),
35703570
common_js(
3571+
Default::default(),
35713572
Mark::fresh(Mark::root()),
35723573
common_js::Config {
35733574
strict: false,
@@ -3596,6 +3597,7 @@ test!(
35963597
|_| chain!(
35973598
decorators(Default::default()),
35983599
common_js::common_js(
3600+
Default::default(),
35993601
Mark::fresh(Mark::root()),
36003602
common_js::Config {
36013603
strict: false,
@@ -3829,6 +3831,7 @@ test!(
38293831
classes(Default::default()),
38303832
function_name(),
38313833
common_js(
3834+
Default::default(),
38323835
Mark::fresh(Mark::root()),
38333836
Default::default(),
38343837
Default::default(),

‎crates/swc_ecma_transforms/tests/es2015_function_name.rs

+18-3
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,12 @@ test!(
223223
legacy: true,
224224
..Default::default()
225225
}),
226-
common_js(unresolved_mark, Default::default(), Default::default(),)
226+
common_js(
227+
Default::default(),
228+
unresolved_mark,
229+
Default::default(),
230+
Default::default()
231+
)
227232
)
228233
},
229234
function_name_modules_3,
@@ -275,7 +280,12 @@ test!(
275280
arrow(unresolved_mark),
276281
shorthand(),
277282
function_name(),
278-
common_js(unresolved_mark, Default::default(), Default::default(),)
283+
common_js(
284+
Default::default(),
285+
unresolved_mark,
286+
Default::default(),
287+
Default::default(),
288+
)
279289
)
280290
},
281291
function_name_export_default_arrow_renaming,
@@ -642,7 +652,12 @@ test!(
642652
}),
643653
classes(Default::default()),
644654
function_name(),
645-
common_js(unresolved_mark, Default::default(), Default::default(),)
655+
common_js(
656+
Default::default(),
657+
unresolved_mark,
658+
Default::default(),
659+
Default::default(),
660+
)
646661
)
647662
},
648663
function_name_modules_2,

‎crates/swc_ecma_transforms_module/src/amd.rs

+4-41
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use swc_common::{
66
comments::{CommentKind, Comments},
77
source_map::PURE_SP,
88
util::take::Take,
9-
FileName, Mark, Span, SyntaxContext, DUMMY_SP,
9+
Mark, Span, SyntaxContext, DUMMY_SP,
1010
};
1111
use swc_ecma_ast::*;
1212
use swc_ecma_transforms_base::{feature::FeatureFlag, helper_expr};
@@ -19,7 +19,7 @@ pub use super::util::Config as InnerConfig;
1919
use crate::{
2020
module_decl_strip::{Export, Link, LinkFlag, LinkItem, LinkSpecifierReducer, ModuleDeclStrip},
2121
module_ref_rewriter::{rewrite_import_bindings, ImportMap},
22-
path::{ImportResolver, Resolver},
22+
path::Resolver,
2323
top_level_this::top_level_this,
2424
util::{
2525
define_es_module, emit_export_stmts, local_name_for_src, use_strict, ImportInterop,
@@ -39,6 +39,7 @@ pub struct Config {
3939
}
4040

4141
pub fn amd<C>(
42+
resolver: Resolver,
4243
unresolved_mark: Mark,
4344
config: Config,
4445
available_features: FeatureFlag,
@@ -53,45 +54,7 @@ where
5354
module_id,
5455
config,
5556
unresolved_mark,
56-
resolver: Resolver::Default,
57-
comments,
58-
59-
support_arrow: caniuse!(available_features.ArrowFunctions),
60-
const_var_kind: if caniuse!(available_features.BlockScoping) {
61-
VarDeclKind::Const
62-
} else {
63-
VarDeclKind::Var
64-
},
65-
66-
dep_list: Default::default(),
67-
require: quote_ident!(
68-
SyntaxContext::empty().apply_mark(unresolved_mark),
69-
"require"
70-
),
71-
exports: None,
72-
module: None,
73-
found_import_meta: false,
74-
})
75-
}
76-
77-
pub fn amd_with_resolver<C>(
78-
resolver: Box<dyn ImportResolver>,
79-
base: FileName,
80-
unresolved_mark: Mark,
81-
config: Config,
82-
available_features: FeatureFlag,
83-
comments: Option<C>,
84-
) -> impl Fold + VisitMut
85-
where
86-
C: Comments,
87-
{
88-
let Config { module_id, config } = config;
89-
90-
as_folder(Amd {
91-
module_id,
92-
config,
93-
unresolved_mark,
94-
resolver: Resolver::Real { base, resolver },
57+
resolver,
9558
comments,
9659

9760
support_arrow: caniuse!(available_features.ArrowFunctions),

‎crates/swc_ecma_transforms_module/src/common_js.rs

+5-25
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use swc_common::{
2-
collections::AHashSet, source_map::PURE_SP, util::take::Take, FileName, Mark, Span,
3-
SyntaxContext, DUMMY_SP,
2+
collections::AHashSet, source_map::PURE_SP, util::take::Take, Mark, Span, SyntaxContext,
3+
DUMMY_SP,
44
};
55
use swc_ecma_ast::*;
66
use swc_ecma_transforms_base::{feature::FeatureFlag, helper_expr};
@@ -15,7 +15,7 @@ use crate::{
1515
Export, ExportKV, Link, LinkFlag, LinkItem, LinkSpecifierReducer, ModuleDeclStrip,
1616
},
1717
module_ref_rewriter::{rewrite_import_bindings, ImportMap},
18-
path::{ImportResolver, Resolver},
18+
path::Resolver,
1919
top_level_this::top_level_this,
2020
util::{
2121
define_es_module, emit_export_stmts, local_name_for_src, prop_name, use_strict,
@@ -24,34 +24,14 @@ use crate::{
2424
};
2525

2626
pub fn common_js(
27+
resolver: Resolver,
2728
unresolved_mark: Mark,
2829
config: Config,
2930
available_features: FeatureFlag,
3031
) -> impl Fold + VisitMut {
3132
as_folder(Cjs {
3233
config,
33-
resolver: Resolver::Default,
34-
unresolved_mark,
35-
available_features,
36-
support_arrow: caniuse!(available_features.ArrowFunctions),
37-
const_var_kind: if caniuse!(available_features.BlockScoping) {
38-
VarDeclKind::Const
39-
} else {
40-
VarDeclKind::Var
41-
},
42-
})
43-
}
44-
45-
pub fn common_js_with_resolver(
46-
resolver: Box<dyn ImportResolver>,
47-
base: FileName,
48-
unresolved_mark: Mark,
49-
config: Config,
50-
available_features: FeatureFlag,
51-
) -> impl Fold + VisitMut {
52-
as_folder(Cjs {
53-
config,
54-
resolver: Resolver::Real { base, resolver },
34+
resolver,
5535
unresolved_mark,
5636
available_features,
5737
support_arrow: caniuse!(available_features.ArrowFunctions),

‎crates/swc_ecma_transforms_module/src/path.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@ use swc_ecma_loader::resolve::{Resolution, Resolve};
1717
use swc_ecma_utils::{quote_ident, ExprFactory};
1818
use tracing::{debug, info, warn, Level};
1919

20-
pub(crate) enum Resolver {
20+
#[derive(Default)]
21+
pub enum Resolver {
2122
Real {
2223
base: FileName,
23-
resolver: Box<dyn ImportResolver>,
24+
resolver: Arc<dyn ImportResolver>,
2425
},
26+
#[default]
2527
Default,
2628
}
2729

‎crates/swc_ecma_transforms_module/src/rewriter.rs

+6-13
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::sync::Arc;
2+
13
use anyhow::Context;
24
use swc_common::FileName;
35
use swc_ecma_ast::*;
@@ -6,25 +8,16 @@ use swc_ecma_visit::{as_folder, noop_visit_mut_type, Fold, VisitMut, VisitMutWit
68
use crate::path::ImportResolver;
79

810
/// Import rewriter, which rewrites imports as es modules.
9-
pub fn import_rewriter<R>(base: FileName, resolver: R) -> impl Fold + VisitMut
10-
where
11-
R: ImportResolver,
12-
{
11+
pub fn import_rewriter(base: FileName, resolver: Arc<dyn ImportResolver>) -> impl Fold + VisitMut {
1312
as_folder(Rewriter { base, resolver })
1413
}
1514

16-
struct Rewriter<R>
17-
where
18-
R: ImportResolver,
19-
{
15+
struct Rewriter {
2016
base: FileName,
21-
resolver: R,
17+
resolver: Arc<dyn ImportResolver>,
2218
}
2319

24-
impl<R> VisitMut for Rewriter<R>
25-
where
26-
R: ImportResolver,
27-
{
20+
impl VisitMut for Rewriter {
2821
noop_visit_mut_type!(fail);
2922

3023
fn visit_mut_call_expr(&mut self, e: &mut CallExpr) {

‎crates/swc_ecma_transforms_module/src/system_js.rs

+4-29
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
use anyhow::Context;
22
use serde::{Deserialize, Serialize};
33
use swc_atoms::JsWord;
4-
use swc_common::{collections::AHashMap, FileName, Mark, Span, SyntaxContext, DUMMY_SP};
4+
use swc_common::{collections::AHashMap, Mark, Span, SyntaxContext, DUMMY_SP};
55
use swc_ecma_ast::*;
66
use swc_ecma_utils::{
77
member_expr, private_ident, quote_ident, quote_str, var::VarCollector, ExprFactory,
88
};
99
use swc_ecma_visit::{standard_only_fold, Fold, FoldWith, VisitWith};
1010

1111
use crate::{
12-
path::{ImportResolver, Resolver},
12+
path::Resolver,
1313
top_level_this::top_level_this,
1414
util::{local_name_for_src, use_strict},
1515
};
@@ -41,35 +41,10 @@ struct SystemJs {
4141
context_ident: Ident,
4242
}
4343

44-
pub fn system_js(unresolved_mark: Mark, config: Config) -> impl Fold {
44+
pub fn system_js(resolver: Resolver, unresolved_mark: Mark, config: Config) -> impl Fold {
4545
SystemJs {
4646
unresolved_mark,
47-
resolver: Resolver::Default,
48-
config,
49-
50-
declare_var_idents: Vec::new(),
51-
export_map: Default::default(),
52-
export_names: Vec::new(),
53-
export_values: Vec::new(),
54-
tla: false,
55-
enter_async_fn: 0,
56-
root_fn_decl_idents: Vec::new(),
57-
module_item_meta_list: Vec::new(),
58-
import_idents: Vec::new(),
59-
export_ident: private_ident!("_export"),
60-
context_ident: private_ident!("_context"),
61-
}
62-
}
63-
64-
pub fn system_js_with_resolver(
65-
resolver: Box<dyn ImportResolver>,
66-
base: FileName,
67-
unresolved_mark: Mark,
68-
config: Config,
69-
) -> impl Fold {
70-
SystemJs {
71-
unresolved_mark,
72-
resolver: Resolver::Real { base, resolver },
47+
resolver,
7348
config,
7449
declare_var_idents: Vec::new(),
7550
export_map: Default::default(),

‎crates/swc_ecma_transforms_module/src/umd.rs

+5-29
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use anyhow::Context;
22
use swc_atoms::JsWord;
33
use swc_common::{
4-
source_map::PURE_SP, sync::Lrc, util::take::Take, FileName, Mark, SourceMap, Span,
5-
SyntaxContext, DUMMY_SP,
4+
source_map::PURE_SP, sync::Lrc, util::take::Take, Mark, SourceMap, Span, SyntaxContext,
5+
DUMMY_SP,
66
};
77
use swc_ecma_ast::*;
88
use swc_ecma_transforms_base::{feature::FeatureFlag, helper_expr};
@@ -16,7 +16,7 @@ pub use self::config::Config;
1616
use crate::{
1717
module_decl_strip::{Export, Link, LinkFlag, LinkItem, LinkSpecifierReducer, ModuleDeclStrip},
1818
module_ref_rewriter::{rewrite_import_bindings, ImportMap},
19-
path::{ImportResolver, Resolver},
19+
path::Resolver,
2020
top_level_this::top_level_this,
2121
util::{
2222
define_es_module, emit_export_stmts, local_name_for_src, use_strict, ImportInterop,
@@ -29,6 +29,7 @@ mod config;
2929

3030
pub fn umd(
3131
cm: Lrc<SourceMap>,
32+
resolver: Resolver,
3233
unresolved_mark: Mark,
3334
config: Config,
3435
available_features: FeatureFlag,
@@ -37,7 +38,7 @@ pub fn umd(
3738
config: config.build(cm.clone()),
3839
unresolved_mark,
3940
cm,
40-
resolver: Resolver::Default,
41+
resolver,
4142

4243
const_var_kind: if caniuse!(available_features.BlockScoping) {
4344
VarDeclKind::Const
@@ -51,31 +52,6 @@ pub fn umd(
5152
})
5253
}
5354

54-
pub fn umd_with_resolver(
55-
cm: Lrc<SourceMap>,
56-
resolver: Box<dyn ImportResolver>,
57-
base: FileName,
58-
unresolved_mark: Mark,
59-
config: Config,
60-
available_features: FeatureFlag,
61-
) -> impl Fold + VisitMut {
62-
as_folder(Umd {
63-
config: config.build(cm.clone()),
64-
unresolved_mark,
65-
cm,
66-
resolver: Resolver::Real { base, resolver },
67-
68-
const_var_kind: if caniuse!(available_features.BlockScoping) {
69-
VarDeclKind::Const
70-
} else {
71-
VarDeclKind::Var
72-
},
73-
74-
dep_list: Default::default(),
75-
exports: None,
76-
})
77-
}
78-
7955
pub struct Umd {
8056
cm: Lrc<SourceMap>,
8157
unresolved_mark: Mark,

‎crates/swc_ecma_transforms_module/tests/amd.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,13 @@ fn tr(config: amd::Config, is_ts: bool, comments: Rc<SingleThreadedComments>) ->
2626
chain!(
2727
resolver(unresolved_mark, top_level_mark, is_ts),
2828
typescript::typescript(Default::default(), unresolved_mark, top_level_mark),
29-
amd(unresolved_mark, config, avalible_set, Some(comments)),
29+
amd(
30+
Default::default(),
31+
unresolved_mark,
32+
config,
33+
avalible_set,
34+
Some(comments)
35+
),
3036
)
3137
}
3238

‎crates/swc_ecma_transforms_module/tests/common_js.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ fn tr(config: common_js::Config, is_ts: bool) -> impl Fold {
2626
chain!(
2727
resolver(unresolved_mark, top_level_mark, is_ts),
2828
typescript::typescript(Default::default(), unresolved_mark, top_level_mark),
29-
common_js(unresolved_mark, config, available_set),
29+
common_js(Default::default(), unresolved_mark, config, available_set),
3030
)
3131
}
3232

‎crates/swc_ecma_transforms_module/tests/path_node.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use std::path::{Path, PathBuf};
1+
use std::{
2+
path::{Path, PathBuf},
3+
sync::Arc,
4+
};
25

36
use indexmap::IndexMap;
47
use serde::Deserialize;
@@ -73,7 +76,7 @@ fn issue_4730() {
7376

7477
import_rewriter(
7578
FileName::Real(input_dir.join("src").join("index.js")),
76-
resolver,
79+
Arc::new(resolver),
7780
)
7881
},
7982
&input_dir.join("src").join("index.js"),
@@ -140,7 +143,7 @@ fn fixture(input_dir: PathBuf) {
140143

141144
let resolver = paths_resolver(&base_dir, rules);
142145

143-
import_rewriter(FileName::Real(index_path.clone()), resolver)
146+
import_rewriter(FileName::Real(index_path.clone()), Arc::new(resolver))
144147
},
145148
&index_path,
146149
&output_dir.join("index.ts"),

‎crates/swc_ecma_transforms_module/tests/system_js.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ fn tr(_tester: &mut Tester<'_>, config: Config) -> impl Fold {
1818
let top_level_mark = Mark::new();
1919
chain!(
2020
resolver(unresolved_mark, top_level_mark, false),
21-
system_js(unresolved_mark, config)
21+
system_js(Default::default(), unresolved_mark, config)
2222
)
2323
}
2424

‎crates/swc_ecma_transforms_module/tests/umd.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,13 @@ fn tr(tester: &mut Tester<'_>, config: Config, typescript: bool) -> impl Fold {
2525
chain!(
2626
resolver(unresolved_mark, top_level_mark, typescript),
2727
typescript::typescript(Default::default(), unresolved_mark, top_level_mark),
28-
umd(tester.cm.clone(), unresolved_mark, config, avalible_set,),
28+
umd(
29+
tester.cm.clone(),
30+
Default::default(),
31+
unresolved_mark,
32+
config,
33+
avalible_set,
34+
),
2935
)
3036
}
3137

‎crates/swc_ecma_transforms_optimization/tests/simplify.rs

+1
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,7 @@ test!(
572572
import_analyzer(false.into(), false),
573573
inject_helpers(unresolved_mark),
574574
common_js(
575+
Default::default(),
575576
Mark::fresh(Mark::root()),
576577
Default::default(),
577578
Default::default(),

0 commit comments

Comments
 (0)
Please sign in to comment.