Skip to content

Commit 7f47146

Browse files
authored
Fix requires of external CommonJS SWC helpers (#8693)
1 parent 426852f commit 7f47146

File tree

11 files changed

+48
-44
lines changed

11 files changed

+48
-44
lines changed

packages/core/integration-tests/test/fs.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,6 @@ describe('fs', function () {
198198
path.join(distDir, 'index.js'),
199199
'utf8',
200200
);
201-
assert(contents.includes(`require("fs")`));
202201
assert(contents.includes('readFileSync'));
203202

204203
await outputFS.writeFile(
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class X {
2+
x = new Map()
3+
}
4+
5+
output(new X());
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"main": "dist/main.js",
3+
"browserslist": "Chrome 70",
4+
"dependencies": {
5+
"@swc/helpers": "^0.4.14"
6+
}
7+
}

packages/core/integration-tests/test/integration/formats/commonjs-helpers/yarn.lock

Whitespace-only changes.

packages/core/integration-tests/test/javascript.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2694,27 +2694,27 @@ describe('javascript', function () {
26942694
let dist = await outputFS.readFile(b.getBundles()[0].filePath, 'utf8');
26952695
assert(
26962696
dist.includes(
2697-
'require("path").resolve(__dirname, "../test/integration/env-node-replacements")',
2697+
'resolve(__dirname, "../test/integration/env-node-replacements")',
26982698
),
26992699
);
27002700
assert(
27012701
dist.includes(
2702-
'require("path").resolve(__dirname, "../test/integration/env-node-replacements/other")',
2702+
'resolve(__dirname, "../test/integration/env-node-replacements/other")',
27032703
),
27042704
);
27052705
assert(
27062706
dist.includes(
2707-
'require("path").resolve(__dirname, "../test/integration/env-node-replacements", "index.js")',
2707+
'resolve(__dirname, "../test/integration/env-node-replacements", "index.js")',
27082708
),
27092709
);
27102710
assert(
27112711
dist.includes(
2712-
'require("path").resolve(__dirname, "../test/integration/env-node-replacements/sub")',
2712+
'resolve(__dirname, "../test/integration/env-node-replacements/sub")',
27132713
),
27142714
);
27152715
assert(
27162716
dist.includes(
2717-
'require("path").resolve(__dirname, "../test/integration/env-node-replacements/sub", "index.js")',
2717+
'resolve(__dirname, "../test/integration/env-node-replacements/sub", "index.js")',
27182718
),
27192719
);
27202720
let f = await run(b);

packages/core/integration-tests/test/output-formats.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,22 @@ describe('output formats', function () {
560560

561561
assert.deepEqual(out, [1, 2]);
562562
});
563+
564+
it('should work with SWC helpers', async function () {
565+
let b = await bundle(
566+
path.join(__dirname, '/integration/formats/commonjs-helpers/index.js'),
567+
);
568+
569+
let out = [];
570+
await run(b, {
571+
require,
572+
output(o) {
573+
out.push(o);
574+
},
575+
});
576+
577+
assert.deepEqual(out[0].x, new Map());
578+
});
563579
});
564580

565581
describe('esmodule', function () {

packages/core/integration-tests/test/server.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,5 @@ describe('server', function () {
639639
invariant(localCSS);
640640

641641
assert(data.includes(path.basename(localCSS.filePath)));
642-
assert(data.includes('css-loader'));
643642
});
644643
});

packages/core/integration-tests/test/sourcemaps.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ describe('sourcemaps', function () {
445445
source: inputs[0],
446446
generated: raw,
447447
str: 'const local',
448-
generatedStr: 'const t',
448+
generatedStr: 'const r',
449449
sourcePath: 'index.js',
450450
});
451451

@@ -454,7 +454,7 @@ describe('sourcemaps', function () {
454454
source: inputs[0],
455455
generated: raw,
456456
str: 'local.a',
457-
generatedStr: 't.a',
457+
generatedStr: 'r.a',
458458
sourcePath: 'index.js',
459459
});
460460

packages/packagers/js/src/DevPackager.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ export class DevPackager {
106106
} else if (resolved) {
107107
deps[getSpecifier(dep)] =
108108
this.bundleGraph.getAssetPublicId(resolved);
109+
} else {
110+
// An external module - map placeholder to original specifier.
111+
deps[getSpecifier(dep)] = dep.specifier;
109112
}
110113
}
111114

packages/transformers/js/core/src/dependency_collector.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,12 +115,12 @@ impl<'a> DependencyCollector<'a> {
115115
}
116116
}
117117

118-
// For normal imports/requires, the specifier will remain unchanged.
118+
// For ESM imports, the specifier will remain unchanged.
119119
// For other types of dependencies, the specifier will be changed to a hash
120120
// that also contains the dependency kind. This way, multiple kinds of dependencies
121121
// to the same specifier can be used within the same file.
122122
let placeholder = match kind {
123-
DependencyKind::Import | DependencyKind::Export | DependencyKind::Require => {
123+
DependencyKind::Import | DependencyKind::Export => {
124124
if is_specifier_rewritten {
125125
Some(specifier.as_ref().to_owned())
126126
} else {

0 commit comments

Comments
 (0)