Skip to content

Commit

Permalink
Also use import for unresolvable dynamic imports
Browse files Browse the repository at this point in the history
  • Loading branch information
lukastaegert committed Oct 4, 2022
1 parent dad2150 commit b46330e
Show file tree
Hide file tree
Showing 10 changed files with 22 additions and 82 deletions.
7 changes: 5 additions & 2 deletions src/ast/nodes/ImportExpression.ts
@@ -1,6 +1,6 @@
import type MagicString from 'magic-string';
import ExternalModule from '../../ExternalModule';
import type Module from '../../Module';
import Module from '../../Module';
import type { GetInterop, NormalizedOutputOptions } from '../../rollup/types';
import type { PluginDriver } from '../../utils/PluginDriver';
import type { GenerateCodeSnippets } from '../../utils/generateCodeSnippets';
Expand Down Expand Up @@ -157,7 +157,10 @@ export default class ImportExpression extends NodeBase {
const hasDynamicTarget = !this.resolution || typeof this.resolution === 'string';
switch (format) {
case 'cjs': {
if (resolution instanceof ExternalModule && dynamicImportInCjs) {
if (
dynamicImportInCjs &&
(!resolution || typeof resolution === 'string' || resolution instanceof ExternalModule)
) {
return { helper: null, mechanism: null };
}
const helper = getInteropHelper(resolution, exportMode, interop);
Expand Down
@@ -1,22 +1,5 @@
'use strict';

function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}

var dep = 'dep';

(function (t) { return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefault(require(t)); }); })(dep);
import(dep);
Expand Up @@ -5,23 +5,6 @@ require('to-indirect-relative-external');
require('direct-absolute-external');
require('to-indirect-absolute-external');

function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}

// nested
Promise.resolve().then(function () { return existing; });
import('./direct-relative-external');
Expand All @@ -44,7 +27,7 @@ import('to-indirect-relative-external');
import('direct-absolute-external');
import('to-indirect-absolute-external');

(function (t) { return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefault(require(t)); }); })('dynamic-direct-external' + unknown);
import('dynamic-direct-external' + unknown);
import('to-dynamic-indirect-external');
Promise.resolve().then(function () { return existing; });
(function (t) { return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefault(require(t)); }); })('my' + 'replacement');
import('my' + 'replacement');
3 changes: 2 additions & 1 deletion test/form/samples/dynamic-import-this-arrow/_config.js
Expand Up @@ -6,7 +6,8 @@ module.exports = {
external: ['input', 'output'],
output: {
generatedCode: { arrowFunctions: true },
name: 'bundle'
name: 'bundle',
dynamicImportInCjs: false
}
}
};
3 changes: 2 additions & 1 deletion test/form/samples/dynamic-import-this-function/_config.js
Expand Up @@ -6,7 +6,8 @@ module.exports = {
external: ['input', 'output'],
output: {
generatedCode: { arrowFunctions: false },
name: 'bundle'
name: 'bundle',
dynamicImportInCjs: false
}
}
};
23 changes: 3 additions & 20 deletions test/form/samples/dynamic-import-unresolvable/_expected/cjs.js
@@ -1,23 +1,6 @@
'use strict';

function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}

(function (t) { return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefault(require(t)); }); })(`${globalThis.unknown}`);
(function (t) { return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefault(require(t)); }); })(`My ${globalThis.unknown}`);
(function (t) { return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefault(require(t)); }); })('./seven.js');
import(`${globalThis.unknown}`);
import(`My ${globalThis.unknown}`);
import('./seven.js');
import('./seven.js');
19 changes: 1 addition & 18 deletions test/form/samples/import-expression/_expected/cjs.js
Expand Up @@ -2,22 +2,5 @@

var external = require('external');

function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}

(function (t) { return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefault(require(t)); }); })(external.join('a', 'b'));
import(external.join('a', 'b'));
console.log(external.join);
3 changes: 2 additions & 1 deletion test/function/samples/dynamic-import-expression/_config.js
Expand Up @@ -21,7 +21,8 @@ module.exports = {
}
}
}
]
],
output: { dynamicImportInCjs: false }
},
exports(exports) {
const expectedError = "Cannot find module 'x/y'";
Expand Down
3 changes: 2 additions & 1 deletion test/function/samples/dynamic-import-this-arrow/_config.js
Expand Up @@ -20,7 +20,8 @@ module.exports = {
options: {
external: ['input', 'output'],
output: {
generatedCode: { arrowFunctions: true }
generatedCode: { arrowFunctions: true },
dynamicImportInCjs: false
}
}
};
Expand Up @@ -20,7 +20,8 @@ module.exports = {
options: {
external: ['input', 'output'],
output: {
generatedCode: { arrowFunctions: false }
generatedCode: { arrowFunctions: false },
dynamicImportInCjs: false
}
}
};

0 comments on commit b46330e

Please sign in to comment.