Skip to content

Commit ac70d3a

Browse files
nicolo-ribaudoljharb
authored andcommitted
[Fix] Evaluate import() argument synchronously
Fixes #84
1 parent 6ac60ab commit ac70d3a

File tree

20 files changed

+78
-80
lines changed

20 files changed

+78
-80
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
## Unreleased
2+
- [Fix] Evaluate `import()` argument synchronously (#85)
23
- [Dev Deps] update `eslint`, `eslint-config-airbnb-base`, `in-publish`, `rimraf`, `safe-publish-latest`, `tape`
34

45
## v2.3.0

src/utils.js

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,16 @@ export function getImportSource(t, callNode) {
1515
}
1616

1717
export function createDynamicImportTransform({ template, types: t }) {
18-
const buildImport = template('Promise.resolve().then(() => MODULE)');
18+
const buildImport = template('Promise.resolve(SOURCE).then(_ => INTEROP(require(_)))');
19+
const buildImportNoInterop = template('Promise.resolve(SOURCE).then(_ => require(_))');
1920

2021
return (context, path) => {
21-
const requireCall = t.callExpression(
22-
t.identifier('require'),
23-
[getImportSource(t, path.parent)],
24-
);
22+
const SOURCE = getImportSource(t, path.parent);
23+
24+
const newImport = context.opts.noInterop
25+
? buildImportNoInterop({ SOURCE })
26+
: buildImport({ SOURCE, INTEROP: context.addHelper('interopRequireWildcard') });
2527

26-
const { noInterop = false } = context.opts;
27-
const MODULE = noInterop === true ? requireCall : t.callExpression(context.addHelper('interopRequireWildcard'), [requireCall]);
28-
const newImport = buildImport({
29-
MODULE,
30-
});
3128
path.parentPath.replaceWith(newImport);
3229
};
3330
}

test/fixtures/basic-import/expected.es2015.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22

33
function _interopRequireWildcard(obj) {}
44

5-
var testModule = Promise.resolve().then(function () {
6-
return _interopRequireWildcard(require('test-module'));
5+
var testModule = Promise.resolve('test-module').then(function (_) {
6+
return _interopRequireWildcard(require(_));
77
});
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
function _interopRequireWildcard(obj) {}
22

3-
const testModule = Promise.resolve().then(() => _interopRequireWildcard(require('test-module')));
3+
const testModule = Promise.resolve('test-module').then(_ => _interopRequireWildcard(require(_)));
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
const testModule = Promise.resolve().then(() => require('test-module'));
1+
const testModule = Promise.resolve('test-module').then(_ => require(_));

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22

33
function _interopRequireWildcard(obj) {}
44

5-
Promise.resolve().then(function () {
6-
return _interopRequireWildcard(require('test-module'));
5+
Promise.resolve('test-module').then(function (_) {
6+
return _interopRequireWildcard(require(_));
77
}).then(function () {
8-
return Promise.resolve().then(function () {
9-
return _interopRequireWildcard(require('test-module-2'));
8+
return Promise.resolve('test-module-2').then(function (_) {
9+
return _interopRequireWildcard(require(_));
1010
});
1111
});
1212

13-
Promise.all([Promise.resolve().then(function () {
14-
return _interopRequireWildcard(require('test-1'));
15-
}), Promise.resolve().then(function () {
16-
return _interopRequireWildcard(require('test-2'));
17-
}), Promise.resolve().then(function () {
18-
return _interopRequireWildcard(require('test-3'));
13+
Promise.all([Promise.resolve('test-1').then(function (_) {
14+
return _interopRequireWildcard(require(_));
15+
}), Promise.resolve('test-2').then(function (_) {
16+
return _interopRequireWildcard(require(_));
17+
}), Promise.resolve('test-3').then(function (_) {
18+
return _interopRequireWildcard(require(_));
1919
})]).then(function () {});
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
function _interopRequireWildcard(obj) {}
22

3-
Promise.resolve().then(() => _interopRequireWildcard(require('test-module'))).then(() => Promise.resolve().then(() => _interopRequireWildcard(require('test-module-2'))));
3+
Promise.resolve('test-module').then(_ => _interopRequireWildcard(require(_))).then(() => Promise.resolve('test-module-2').then(_ => _interopRequireWildcard(require(_))));
44

5-
Promise.all([Promise.resolve().then(() => _interopRequireWildcard(require('test-1'))), Promise.resolve().then(() => _interopRequireWildcard(require('test-2'))), Promise.resolve().then(() => _interopRequireWildcard(require('test-3')))]).then(() => {});
5+
Promise.all([Promise.resolve('test-1').then(_ => _interopRequireWildcard(require(_))), Promise.resolve('test-2').then(_ => _interopRequireWildcard(require(_))), Promise.resolve('test-3').then(_ => _interopRequireWildcard(require(_)))]).then(() => {});
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
Promise.resolve().then(() => require('test-module')).then(() => Promise.resolve().then(() => require('test-module-2')));
1+
Promise.resolve('test-module').then(_ => require(_)).then(() => Promise.resolve('test-module-2').then(_ => require(_)));
22

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

test/fixtures/dynamic-argument/expected.es2015.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ function _interopRequireWildcard(obj) {}
44

55
var MODULE = Object('test-module');
66

7-
Promise.resolve().then(function () {
8-
return _interopRequireWildcard(require('' + String(MODULE)));
7+
Promise.resolve('' + String(MODULE)).then(function (_) {
8+
return _interopRequireWildcard(require(_));
99
});
10-
Promise.resolve().then(function () {
11-
return _interopRequireWildcard(require('test-' + String(MODULE)));
10+
Promise.resolve('test-' + String(MODULE)).then(function (_) {
11+
return _interopRequireWildcard(require(_));
1212
});

test/fixtures/dynamic-argument/expected.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ function _interopRequireWildcard(obj) {}
22

33
const MODULE = Object('test-module');
44

5-
Promise.resolve().then(() => _interopRequireWildcard(require(`${MODULE}`)));
6-
Promise.resolve().then(() => _interopRequireWildcard(require(`test-${MODULE}`)));
5+
Promise.resolve(`${MODULE}`).then(_ => _interopRequireWildcard(require(_)));
6+
Promise.resolve(`test-${MODULE}`).then(_ => _interopRequireWildcard(require(_)));

0 commit comments

Comments
 (0)