From b46330e7405fde72e3a3107f3a01c32f41a4b973 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 4 Oct 2022 09:03:39 +0200 Subject: [PATCH] Also use import for unresolvable dynamic imports --- src/ast/nodes/ImportExpression.ts | 7 ++++-- .../_expected/cjs/main.js | 19 +-------------- .../_expected/cjs/main.js | 21 ++--------------- .../dynamic-import-this-arrow/_config.js | 3 ++- .../dynamic-import-this-function/_config.js | 3 ++- .../_expected/cjs.js | 23 +++---------------- .../import-expression/_expected/cjs.js | 19 +-------------- .../dynamic-import-expression/_config.js | 3 ++- .../dynamic-import-this-arrow/_config.js | 3 ++- .../dynamic-import-this-function/_config.js | 3 ++- 10 files changed, 22 insertions(+), 82 deletions(-) diff --git a/src/ast/nodes/ImportExpression.ts b/src/ast/nodes/ImportExpression.ts index 3a405d49ed9..10346a5651a 100644 --- a/src/ast/nodes/ImportExpression.ts +++ b/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'; @@ -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); diff --git a/test/chunking-form/samples/dynamic-import-dynamic/_expected/cjs/main.js b/test/chunking-form/samples/dynamic-import-dynamic/_expected/cjs/main.js index 21521560d39..657ea9f5266 100644 --- a/test/chunking-form/samples/dynamic-import-dynamic/_expected/cjs/main.js +++ b/test/chunking-form/samples/dynamic-import-dynamic/_expected/cjs/main.js @@ -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); diff --git a/test/chunking-form/samples/resolve-dynamic-import/_expected/cjs/main.js b/test/chunking-form/samples/resolve-dynamic-import/_expected/cjs/main.js index 0b26ee9d163..75bb253218c 100644 --- a/test/chunking-form/samples/resolve-dynamic-import/_expected/cjs/main.js +++ b/test/chunking-form/samples/resolve-dynamic-import/_expected/cjs/main.js @@ -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'); @@ -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'); diff --git a/test/form/samples/dynamic-import-this-arrow/_config.js b/test/form/samples/dynamic-import-this-arrow/_config.js index 53ad52318f0..9f6306ee6cf 100644 --- a/test/form/samples/dynamic-import-this-arrow/_config.js +++ b/test/form/samples/dynamic-import-this-arrow/_config.js @@ -6,7 +6,8 @@ module.exports = { external: ['input', 'output'], output: { generatedCode: { arrowFunctions: true }, - name: 'bundle' + name: 'bundle', + dynamicImportInCjs: false } } }; diff --git a/test/form/samples/dynamic-import-this-function/_config.js b/test/form/samples/dynamic-import-this-function/_config.js index a43e98dd4e1..8877af159f8 100644 --- a/test/form/samples/dynamic-import-this-function/_config.js +++ b/test/form/samples/dynamic-import-this-function/_config.js @@ -6,7 +6,8 @@ module.exports = { external: ['input', 'output'], output: { generatedCode: { arrowFunctions: false }, - name: 'bundle' + name: 'bundle', + dynamicImportInCjs: false } } }; diff --git a/test/form/samples/dynamic-import-unresolvable/_expected/cjs.js b/test/form/samples/dynamic-import-unresolvable/_expected/cjs.js index 4bbd9e53d00..d566db97089 100644 --- a/test/form/samples/dynamic-import-unresolvable/_expected/cjs.js +++ b/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'); diff --git a/test/form/samples/import-expression/_expected/cjs.js b/test/form/samples/import-expression/_expected/cjs.js index e982928f093..bd463137fe4 100644 --- a/test/form/samples/import-expression/_expected/cjs.js +++ b/test/form/samples/import-expression/_expected/cjs.js @@ -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); diff --git a/test/function/samples/dynamic-import-expression/_config.js b/test/function/samples/dynamic-import-expression/_config.js index b06c2ee080f..35f7f4a7674 100644 --- a/test/function/samples/dynamic-import-expression/_config.js +++ b/test/function/samples/dynamic-import-expression/_config.js @@ -21,7 +21,8 @@ module.exports = { } } } - ] + ], + output: { dynamicImportInCjs: false } }, exports(exports) { const expectedError = "Cannot find module 'x/y'"; diff --git a/test/function/samples/dynamic-import-this-arrow/_config.js b/test/function/samples/dynamic-import-this-arrow/_config.js index 0135981db4e..16b307536b9 100644 --- a/test/function/samples/dynamic-import-this-arrow/_config.js +++ b/test/function/samples/dynamic-import-this-arrow/_config.js @@ -20,7 +20,8 @@ module.exports = { options: { external: ['input', 'output'], output: { - generatedCode: { arrowFunctions: true } + generatedCode: { arrowFunctions: true }, + dynamicImportInCjs: false } } }; diff --git a/test/function/samples/dynamic-import-this-function/_config.js b/test/function/samples/dynamic-import-this-function/_config.js index 200aed65846..32f9c34694a 100644 --- a/test/function/samples/dynamic-import-this-function/_config.js +++ b/test/function/samples/dynamic-import-this-function/_config.js @@ -20,7 +20,8 @@ module.exports = { options: { external: ['input', 'output'], output: { - generatedCode: { arrowFunctions: false } + generatedCode: { arrowFunctions: false }, + dynamicImportInCjs: false } } };