Skip to content

Commit

Permalink
fix(es/module): Use jsc.baseUrl while resolving absolute paths (#7775)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #7761
  • Loading branch information
kdy1 committed Aug 9, 2023
1 parent 000f817 commit 5c4bfa6
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 33 deletions.
2 changes: 1 addition & 1 deletion crates/swc/src/config/mod.rs
Expand Up @@ -1958,7 +1958,7 @@ fn build_resolver(base_url: PathBuf, paths: CompiledPaths) -> Box<SwcImportResol
);
let r = CachingResolver::new(40, r);

let r = NodeImportResolver::new(r);
let r = NodeImportResolver::with_base_dir(r, Some(base_url.clone()));
Arc::new(r)
};

Expand Down
8 changes: 6 additions & 2 deletions crates/swc/tests/fixture/deno/paths/cjs-001/input/.swcrc
@@ -1,10 +1,14 @@
{
"jsc": {
"baseUrl": ".",
"paths": {
"*": ["src/*", "src2/*"]
"*": [
"src/*",
"src2/*"
]
}
},
"module": {
"type": "commonjs"
}
}
}
1 change: 1 addition & 0 deletions crates/swc/tests/fixture/issues-3xxx/3272/1/input/.swcrc
@@ -1,5 +1,6 @@
{
"jsc": {
"baseUrl": ".",
"paths": {
"server/*": [
"./*"
Expand Down
29 changes: 24 additions & 5 deletions crates/swc_ecma_transforms_module/src/path.rs
Expand Up @@ -86,14 +86,30 @@ where
R: Resolve,
{
resolver: R,
base_dir: Option<PathBuf>,
}

impl<R> NodeImportResolver<R>
where
R: Resolve,
{
#[deprecated(note = "Use `with_base_dir`")]
pub fn new(resolver: R) -> Self {
Self { resolver }
Self::with_base_dir(resolver, None)
}

pub fn with_base_dir(resolver: R, base_dir: Option<PathBuf>) -> Self {
#[cfg(not(target_arch = "wasm32"))]
if let Some(base_dir) = &base_dir {
assert!(
base_dir.is_absolute(),
"base_dir({}) must be absolute. Please ensure that `jsc.baseUrl` is specified \
correctly.",
base_dir.display()
);
}

Self { resolver, base_dir }
}
}

Expand Down Expand Up @@ -193,8 +209,8 @@ where
};

if base.is_absolute() != target.is_absolute() {
base = Cow::Owned(absolute_path(&base)?);
target = absolute_path(&target)?;
base = Cow::Owned(absolute_path(self.base_dir.as_deref(), &base)?);
target = absolute_path(self.base_dir.as_deref(), &target)?;
}

let rel_path = diff_paths(
Expand Down Expand Up @@ -259,11 +275,14 @@ impl_ref!(P, &'_ P);
impl_ref!(P, Box<P>);
impl_ref!(P, Arc<P>);

fn absolute_path(path: &Path) -> io::Result<PathBuf> {
fn absolute_path(base_dir: Option<&Path>, path: &Path) -> io::Result<PathBuf> {
let absolute_path = if path.is_absolute() {
path.to_path_buf()
} else {
std::env::current_dir()?.join(path)
match base_dir {
Some(base_dir) => base_dir.join(path),
None => current_dir()?.join(path),
}
}
.clean();

Expand Down
4 changes: 2 additions & 2 deletions crates/swc_ecma_transforms_module/tests/common_js.rs
Expand Up @@ -24,11 +24,11 @@ fn tr(
let unresolved_mark = Mark::new();
let top_level_mark = Mark::new();

let avalible_set = FeatureFlag::all();
let available_set = FeatureFlag::all();

chain!(
resolver(unresolved_mark, top_level_mark, typescript),
common_js(unresolved_mark, config, avalible_set, Some(comments)),
common_js(unresolved_mark, config, available_set, Some(comments)),
)
}

Expand Down
40 changes: 19 additions & 21 deletions crates/swc_ecma_transforms_module/tests/path_node.rs
@@ -1,7 +1,4 @@
use std::{
env::current_dir,
path::{Path, PathBuf},
};
use std::path::{Path, PathBuf};

use indexmap::IndexMap;
use serde::Deserialize;
Expand Down Expand Up @@ -37,7 +34,9 @@ fn node_modules() {

#[test]
fn issue_4730() {
let dir = Path::new("tests/fixture-manual/issue-4730");
let dir = Path::new("tests/fixture-manual/issue-4730")
.canonicalize()
.unwrap();
let input_dir = dir.join("input");
let output_dir = dir.join("output");

Expand All @@ -47,11 +46,7 @@ fn issue_4730() {
let mut paths = IndexMap::new();
paths.insert(
"@print/a".into(),
vec![current_dir()
.unwrap()
.join("tests")
.join("fixture-manual")
.join("issue-4730")
vec![dir
.join("input")
.join("packages")
.join("a")
Expand All @@ -62,11 +57,7 @@ fn issue_4730() {
);
paths.insert(
"@print/b".into(),
vec![current_dir()
.unwrap()
.join("tests")
.join("fixture-manual")
.join("issue-4730")
vec![dir
.join("input")
.join("packages")
.join("b")
Expand Down Expand Up @@ -97,14 +88,21 @@ fn paths_resolver(
base_url: impl AsRef<Path>,
rules: Vec<(String, Vec<String>)>,
) -> JscPathsProvider {
let base_url = base_url.as_ref().to_path_buf();
let base_url = base_url
.as_ref()
.to_path_buf()
.canonicalize()
.expect("failed to canonicalize");
dbg!(&base_url);

NodeImportResolver::new(TsConfigResolver::new(
NodeModulesResolver::new(swc_ecma_loader::TargetEnv::Node, Default::default(), true),
base_url,
rules,
))
NodeImportResolver::with_base_dir(
TsConfigResolver::new(
NodeModulesResolver::new(swc_ecma_loader::TargetEnv::Node, Default::default(), true),
base_url.clone(),
rules,
),
Some(base_url),
)
}

#[derive(Deserialize)]
Expand Down
3 changes: 2 additions & 1 deletion node-swc/__tests__/transform/issue_4730_test.mjs
@@ -1,5 +1,5 @@
import swc from "../../..";
import { dirname, join } from "path";
import { dirname, join, resolve } from "path";
import { platform } from "os";
import { fileURLToPath } from "url";

Expand All @@ -21,6 +21,7 @@ it("should work", async () => {
dynamicImport: true,
},
target: "es2020",
baseUrl: resolve('.'),
paths: {
"@print/a": [join(dir, "./packages/a/src/index.ts")],
"@print/b": [join(dir, "./packages/b/src/index.ts")],
Expand Down
17 changes: 16 additions & 1 deletion node-swc/src/binding.js
@@ -1,3 +1,9 @@
/* tslint:disable */
/* eslint-disable */
/* prettier-ignore */

/* auto-generated by NAPI-RS */

const { existsSync, readFileSync } = require('fs')
const { join } = require('path')

Expand All @@ -11,7 +17,7 @@ function isMusl() {
// For Node 10
if (!process.report || typeof process.report.getReport !== 'function') {
try {
const lddPath = require('child_process').execSync('which ldd').toString().trim();
const lddPath = require('child_process').execSync('which ldd').toString().trim()
return readFileSync(lddPath, 'utf8').includes('musl')
} catch (e) {
return true
Expand Down Expand Up @@ -102,6 +108,15 @@ switch (platform) {
}
break
case 'darwin':
localFileExisted = existsSync(join(__dirname, 'swc.darwin-universal.node'))
try {
if (localFileExisted) {
nativeBinding = require('./swc.darwin-universal.node')
} else {
nativeBinding = require('@swc/core-darwin-universal')
}
break
} catch {}
switch (arch) {
case 'x64':
localFileExisted = existsSync(join(__dirname, 'swc.darwin-x64.node'))
Expand Down

1 comment on commit 5c4bfa6

@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: 5c4bfa6 Previous: f7afe7e Ratio
es/full/bugs-1 287876 ns/iter (± 8072) 281321 ns/iter (± 5968) 1.02
es/full/minify/libraries/antd 1392069168 ns/iter (± 21509729) 1329067799 ns/iter (± 48713937) 1.05
es/full/minify/libraries/d3 286221066 ns/iter (± 5170727) 302126237 ns/iter (± 17439946) 0.95
es/full/minify/libraries/echarts 1126113265 ns/iter (± 14370420) 1157971677 ns/iter (± 48533233) 0.97
es/full/minify/libraries/jquery 86728891 ns/iter (± 1040161) 86568223 ns/iter (± 2243270) 1.00
es/full/minify/libraries/lodash 100374788 ns/iter (± 976804) 98720789 ns/iter (± 4060939) 1.02
es/full/minify/libraries/moment 50652282 ns/iter (± 336059) 50117419 ns/iter (± 137048) 1.01
es/full/minify/libraries/react 18193355 ns/iter (± 92280) 18125269 ns/iter (± 180447) 1.00
es/full/minify/libraries/terser 227318308 ns/iter (± 2089697) 220061176 ns/iter (± 8045597) 1.03
es/full/minify/libraries/three 408277012 ns/iter (± 7084686) 413900000 ns/iter (± 20921342) 0.99
es/full/minify/libraries/typescript 2786302540 ns/iter (± 14661407) 2686735875 ns/iter (± 88997927) 1.04
es/full/minify/libraries/victory 602682165 ns/iter (± 9733429) 573452910 ns/iter (± 27853892) 1.05
es/full/minify/libraries/vue 124075794 ns/iter (± 1819759) 121088466 ns/iter (± 2065640) 1.02
es/full/codegen/es3 35222 ns/iter (± 141) 35231 ns/iter (± 173) 1.00
es/full/codegen/es5 35283 ns/iter (± 44) 35087 ns/iter (± 83) 1.01
es/full/codegen/es2015 35216 ns/iter (± 80) 34994 ns/iter (± 449) 1.01
es/full/codegen/es2016 35317 ns/iter (± 90) 35160 ns/iter (± 87) 1.00
es/full/codegen/es2017 35379 ns/iter (± 175) 35088 ns/iter (± 290) 1.01
es/full/codegen/es2018 35293 ns/iter (± 85) 35051 ns/iter (± 2383) 1.01
es/full/codegen/es2019 35300 ns/iter (± 131) 34979 ns/iter (± 87) 1.01
es/full/codegen/es2020 35243 ns/iter (± 77) 35086 ns/iter (± 62) 1.00
es/full/all/es3 175053517 ns/iter (± 931359) 172946234 ns/iter (± 1415808) 1.01
es/full/all/es5 167564224 ns/iter (± 726177) 166414629 ns/iter (± 2326594) 1.01
es/full/all/es2015 126000162 ns/iter (± 522150) 124863891 ns/iter (± 928348) 1.01
es/full/all/es2016 125169582 ns/iter (± 969508) 123338017 ns/iter (± 1067217) 1.01
es/full/all/es2017 124421665 ns/iter (± 787893) 121947569 ns/iter (± 847843) 1.02
es/full/all/es2018 122583385 ns/iter (± 504731) 121013051 ns/iter (± 1078862) 1.01
es/full/all/es2019 121523785 ns/iter (± 589310) 121101012 ns/iter (± 1229387) 1.00
es/full/all/es2020 116813534 ns/iter (± 510089) 115279697 ns/iter (± 932491) 1.01
es/full/parser 544813 ns/iter (± 4894) 535115 ns/iter (± 10554) 1.02
es/full/base/fixer 19796 ns/iter (± 253) 17817 ns/iter (± 60) 1.11
es/full/base/resolver_and_hygiene 80101 ns/iter (± 231) 80450 ns/iter (± 164) 1.00
serialization of serde 294 ns/iter (± 0) 294 ns/iter (± 2) 1
css/minify/libraries/bootstrap 29445167 ns/iter (± 173940) 29400853 ns/iter (± 472048) 1.00
css/visitor/compare/clone 1648675 ns/iter (± 10522) 1640511 ns/iter (± 4295) 1.00
css/visitor/compare/visit_mut_span 1774500 ns/iter (± 7587) 1773380 ns/iter (± 8606) 1.00
css/visitor/compare/visit_mut_span_panic 1857192 ns/iter (± 5493) 1841005 ns/iter (± 28174) 1.01
css/visitor/compare/fold_span 2585131 ns/iter (± 17416) 2592090 ns/iter (± 38871) 1.00
css/visitor/compare/fold_span_panic 2796233 ns/iter (± 16021) 2765629 ns/iter (± 14586) 1.01
css/lexer/bootstrap_5_1_3 4398373 ns/iter (± 11811) 4552997 ns/iter (± 2523) 0.97
css/lexer/foundation_6_7_4 3702283 ns/iter (± 4254) 3887923 ns/iter (± 3933) 0.95
css/lexer/tailwind_3_1_1 706062 ns/iter (± 890) 742633 ns/iter (± 539) 0.95
css/parser/bootstrap_5_1_3 19716344 ns/iter (± 206080) 19484292 ns/iter (± 355435) 1.01
css/parser/foundation_6_7_4 15582165 ns/iter (± 150253) 15627759 ns/iter (± 445378) 1.00
css/parser/tailwind_3_1_1 2961769 ns/iter (± 2633) 2968120 ns/iter (± 5160) 1.00
es/codegen/colors 732968 ns/iter (± 402251) 718725 ns/iter (± 394348) 1.02
es/codegen/large 2896613 ns/iter (± 1532586) 3153893 ns/iter (± 1667225) 0.92
es/codegen/with-parser/colors 44909 ns/iter (± 760) 46041 ns/iter (± 241) 0.98
es/codegen/with-parser/large 486870 ns/iter (± 1079) 490926 ns/iter (± 1189) 0.99
es/minify/libraries/antd 1229511917 ns/iter (± 13552842) 1170515988 ns/iter (± 64457151) 1.05
es/minify/libraries/d3 252332581 ns/iter (± 5173814) 266689165 ns/iter (± 12234294) 0.95
es/minify/libraries/echarts 974249925 ns/iter (± 14429441) 922400421 ns/iter (± 40596738) 1.06
es/minify/libraries/jquery 75478859 ns/iter (± 452300) 75076031 ns/iter (± 1818223) 1.01
es/minify/libraries/lodash 90124422 ns/iter (± 689763) 92306221 ns/iter (± 1843775) 0.98
es/minify/libraries/moment 44328631 ns/iter (± 182014) 45405180 ns/iter (± 815406) 0.98
es/minify/libraries/react 16233584 ns/iter (± 104264) 16791704 ns/iter (± 215234) 0.97
es/minify/libraries/terser 195818558 ns/iter (± 4065256) 190539896 ns/iter (± 7897650) 1.03
es/minify/libraries/three 343388591 ns/iter (± 8625917) 329478162 ns/iter (± 21964643) 1.04
es/minify/libraries/typescript 2374232299 ns/iter (± 14432648) 2381279060 ns/iter (± 53522311) 1.00
es/minify/libraries/victory 520614332 ns/iter (± 22911228) 511605414 ns/iter (± 47916684) 1.02
es/minify/libraries/vue 110887849 ns/iter (± 1322447) 111973554 ns/iter (± 2911293) 0.99
es/visitor/compare/clone 1947856 ns/iter (± 5436) 1935703 ns/iter (± 5644) 1.01
es/visitor/compare/visit_mut_span 2295563 ns/iter (± 6774) 2294739 ns/iter (± 28913) 1.00
es/visitor/compare/visit_mut_span_panic 2339644 ns/iter (± 7005) 2335367 ns/iter (± 10646) 1.00
es/visitor/compare/fold_span 3356863 ns/iter (± 15320) 3351407 ns/iter (± 36066) 1.00
es/visitor/compare/fold_span_panic 3523436 ns/iter (± 11810) 3515511 ns/iter (± 39633) 1.00
es/lexer/colors 13294 ns/iter (± 9) 12969 ns/iter (± 18) 1.03
es/lexer/angular 6164901 ns/iter (± 11700) 6060905 ns/iter (± 20489) 1.02
es/lexer/backbone 804536 ns/iter (± 828) 788124 ns/iter (± 1312) 1.02
es/lexer/jquery 4552808 ns/iter (± 3523) 4459235 ns/iter (± 4891) 1.02
es/lexer/jquery mobile 6950852 ns/iter (± 7447) 6811130 ns/iter (± 12381) 1.02
es/lexer/mootools 3603450 ns/iter (± 1031) 3531517 ns/iter (± 9203) 1.02
es/lexer/underscore 672262 ns/iter (± 1335) 663670 ns/iter (± 745) 1.01
es/lexer/three 21647864 ns/iter (± 33133) 21313385 ns/iter (± 23262) 1.02
es/lexer/yui 3922237 ns/iter (± 2616) 3837078 ns/iter (± 4348) 1.02
es/parser/colors 27938 ns/iter (± 113) 27558 ns/iter (± 49) 1.01
es/parser/angular 13929090 ns/iter (± 155762) 13481042 ns/iter (± 56749) 1.03
es/parser/backbone 2015011 ns/iter (± 8096) 1997658 ns/iter (± 10882) 1.01
es/parser/jquery 11248296 ns/iter (± 231018) 10923636 ns/iter (± 188193) 1.03
es/parser/jquery mobile 17097696 ns/iter (± 253751) 17073134 ns/iter (± 598236) 1.00
es/parser/mootools 8512785 ns/iter (± 52038) 8421970 ns/iter (± 34904) 1.01
es/parser/underscore 1747021 ns/iter (± 6983) 1736959 ns/iter (± 8881) 1.01
es/parser/three 49212160 ns/iter (± 775556) 47375158 ns/iter (± 1493939) 1.04
es/parser/yui 8440791 ns/iter (± 46854) 8272077 ns/iter (± 57137) 1.02
es/preset-env/usage/builtin_type 136492 ns/iter (± 33439) 136464 ns/iter (± 32428) 1.00
es/preset-env/usage/property 16579 ns/iter (± 56) 16729 ns/iter (± 81) 0.99
es/resolver/typescript 90529665 ns/iter (± 1490751) 90705316 ns/iter (± 2438652) 1.00
es/fixer/typescript 65490698 ns/iter (± 639164) 64263743 ns/iter (± 1037608) 1.02
es/hygiene/typescript 136284853 ns/iter (± 1662998) 138723453 ns/iter (± 6747467) 0.98
es/resolver_with_hygiene/typescript 254207748 ns/iter (± 3764181) 247739917 ns/iter (± 8874321) 1.03
es/visitor/base-perf/module_clone 59878 ns/iter (± 658) 60856 ns/iter (± 198) 0.98
es/visitor/base-perf/fold_empty 63831 ns/iter (± 260) 64054 ns/iter (± 915) 1.00
es/visitor/base-perf/fold_noop_impl_all 64172 ns/iter (± 481) 64393 ns/iter (± 238) 1.00
es/visitor/base-perf/fold_noop_impl_vec 65333 ns/iter (± 508) 64073 ns/iter (± 228) 1.02
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 1) 82 ns/iter (± 0) 0.68
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) 134 ns/iter (± 0) 0.82
es/visitor/base-perf/boxing_unboxed 77 ns/iter (± 0) 90 ns/iter (± 0) 0.86
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2513 ns/iter (± 12) 2479 ns/iter (± 31) 1.01
es/base/parallel/resolver/typescript 4423503120 ns/iter (± 269323455) 3911727560 ns/iter (± 302094983) 1.13
es/base/parallel/hygiene/typescript 1479405366 ns/iter (± 15141888) 1468477587 ns/iter (± 33320225) 1.01
misc/visitors/time-complexity/time 5 134 ns/iter (± 1) 119 ns/iter (± 2) 1.13
misc/visitors/time-complexity/time 10 370 ns/iter (± 1) 357 ns/iter (± 5) 1.04
misc/visitors/time-complexity/time 15 668 ns/iter (± 54) 691 ns/iter (± 8) 0.97
misc/visitors/time-complexity/time 20 878 ns/iter (± 3) 1025 ns/iter (± 17) 0.86
misc/visitors/time-complexity/time 40 3570 ns/iter (± 42) 3503 ns/iter (± 66) 1.02
misc/visitors/time-complexity/time 60 8235 ns/iter (± 2) 8070 ns/iter (± 131) 1.02
es/full-target/es2016 239293 ns/iter (± 995) 238173 ns/iter (± 2142) 1.00
es/full-target/es2017 227778 ns/iter (± 1338) 226224 ns/iter (± 4772) 1.01
es/full-target/es2018 216748 ns/iter (± 704) 212322 ns/iter (± 2384) 1.02
es2020_nullish_coalescing 71051 ns/iter (± 506) 68902 ns/iter (± 1365) 1.03
es2020_optional_chaining 80446 ns/iter (± 245) 81497 ns/iter (± 1340) 0.99
es2022_class_properties 118280 ns/iter (± 421) 118774 ns/iter (± 2240) 1.00
es2018_object_rest_spread 72755 ns/iter (± 200) 75687 ns/iter (± 528) 0.96
es2019_optional_catch_binding 63548 ns/iter (± 284) 64129 ns/iter (± 929) 0.99
es2017_async_to_generator 63262 ns/iter (± 218) 64397 ns/iter (± 348) 0.98
es2016_exponentiation 67307 ns/iter (± 197) 67771 ns/iter (± 1091) 0.99
es2015_arrow 70434 ns/iter (± 182) 71065 ns/iter (± 901) 0.99
es2015_block_scoped_fn 67461 ns/iter (± 237) 67021 ns/iter (± 791) 1.01
es2015_block_scoping 120805 ns/iter (± 426) 123704 ns/iter (± 1649) 0.98

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

Please sign in to comment.