Skip to content

Commit cedd31d

Browse files
nicolo-ribaudoljharb
authored andcommitted
[Fix] Generate webpack-compatible output with static string arg
Closes #88.
1 parent 6937e76 commit cedd31d

40 files changed

+311
-83
lines changed

src/utils.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,37 @@ export function getImportSource(t, callNode) {
1515
}
1616

1717
export function createDynamicImportTransform({ template, types: t }) {
18-
const buildImport = template('Promise.resolve(SOURCE).then(s => INTEROP(require(s)))');
19-
const buildImportNoInterop = template('Promise.resolve(SOURCE).then(s => require(s))');
18+
const builders = {
19+
static: {
20+
interop: template('Promise.resolve().then(() => INTEROP(require(SOURCE)))'),
21+
noInterop: template('Promise.resolve().then(() => require(SOURCE))'),
22+
},
23+
dynamic: {
24+
interop: template('Promise.resolve(SOURCE).then(s => INTEROP(require(s)))'),
25+
noInterop: template('Promise.resolve(SOURCE).then(s => require(s))'),
26+
},
27+
};
2028

2129
const visited = typeof WeakSet === 'function' && new WeakSet();
2230

31+
const isString = (node) => t.isStringLiteral(node)
32+
|| (t.isTemplateLiteral(node) && node.expressions.length === 0);
33+
2334
return (context, path) => {
2435
if (visited) {
2536
if (visited.has(path)) {
2637
return;
2738
}
2839
visited.add(path);
2940
}
41+
3042
const SOURCE = getImportSource(t, path.parent);
3143

44+
const builder = isString(SOURCE) ? builders.static : builders.dynamic;
45+
3246
const newImport = context.opts.noInterop
33-
? buildImportNoInterop({ SOURCE })
34-
: buildImport({ SOURCE, INTEROP: context.addHelper('interopRequireWildcard') });
47+
? builder.noInterop({ SOURCE })
48+
: builder.interop({ SOURCE, INTEROP: context.addHelper('interopRequireWildcard') });
3549

3650
path.parentPath.replaceWith(newImport);
3751
};
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
var testModule = Promise.resolve('test-module').then(function (s) {
2-
return babelHelpers.interopRequireWildcard(require(s));
1+
var testModule = Promise.resolve().then(function () {
2+
return babelHelpers.interopRequireWildcard(require('test-module'));
33
});
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
const testModule = Promise.resolve('test-module').then(s => babelHelpers.interopRequireWildcard(require(s)));
1+
const testModule = Promise.resolve().then(() => babelHelpers.interopRequireWildcard(require('test-module')));
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
const testModule = Promise.resolve('test-module').then(s => require(s));
1+
const testModule = Promise.resolve().then(() => require('test-module'));
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
var testModule = Promise.resolve('test-module').then(function (s) {
2-
return babelHelpers.interopRequireWildcard(require(s));
1+
var testModule = Promise.resolve().then(function () {
2+
return babelHelpers.interopRequireWildcard(require('test-module'));
33
});
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
const testModule = Promise.resolve('test-module').then(s => babelHelpers.interopRequireWildcard(require(s)));
1+
const testModule = Promise.resolve().then(() => babelHelpers.interopRequireWildcard(require('test-module')));
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
const testModule = Promise.resolve('test-module').then(s => require(s));
1+
const testModule = Promise.resolve().then(() => require('test-module'));
Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
Promise.resolve('test-module').then(function (s) {
2-
return babelHelpers.interopRequireWildcard(require(s));
1+
Promise.resolve().then(function () {
2+
return babelHelpers.interopRequireWildcard(require('test-module'));
33
}).then(function () {
4-
return Promise.resolve('test-module-2').then(function (s) {
5-
return babelHelpers.interopRequireWildcard(require(s));
4+
return Promise.resolve().then(function () {
5+
return babelHelpers.interopRequireWildcard(require('test-module-2'));
66
});
77
});
88

9-
Promise.all([Promise.resolve('test-1').then(function (s) {
10-
return babelHelpers.interopRequireWildcard(require(s));
11-
}), Promise.resolve('test-2').then(function (s) {
12-
return babelHelpers.interopRequireWildcard(require(s));
13-
}), Promise.resolve('test-3').then(function (s) {
14-
return babelHelpers.interopRequireWildcard(require(s));
9+
Promise.all([Promise.resolve().then(function () {
10+
return babelHelpers.interopRequireWildcard(require('test-1'));
11+
}), Promise.resolve().then(function () {
12+
return babelHelpers.interopRequireWildcard(require('test-2'));
13+
}), Promise.resolve().then(function () {
14+
return babelHelpers.interopRequireWildcard(require('test-3'));
1515
})]).then(function () {});

test/fixtures/chained-import/expected.6.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
Promise.resolve('test-module').then(s => require(s)).then(() => Promise.resolve('test-module-2').then(s => require(s)));
1+
Promise.resolve().then(() => require('test-module')).then(() => Promise.resolve().then(() => require('test-module-2')));
22

3-
Promise.all([Promise.resolve('test-1').then(s => require(s)), Promise.resolve('test-2').then(s => require(s)), Promise.resolve('test-3').then(s => require(s))]).then(() => {});
3+
Promise.all([Promise.resolve().then(() => require('test-1')), Promise.resolve().then(() => require('test-2')), Promise.resolve().then(() => require('test-3'))]).then(() => {});

0 commit comments

Comments
 (0)