From 7b41291b42cb85fe88f4965260ab8e2d8c5774cf Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sat, 29 Aug 2020 07:39:34 +0200 Subject: [PATCH] Also pass resolved ids to external if they use the object form --- src/ModuleLoader.ts | 2 +- .../samples/external-resolved/_config.js | 51 +++++++++++++++++++ .../samples/external-resolved/main.js | 4 ++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 test/function/samples/external-resolved/_config.js create mode 100644 test/function/samples/external-resolved/main.js diff --git a/src/ModuleLoader.ts b/src/ModuleLoader.ts index bf85ae3e479..465805b0efb 100644 --- a/src/ModuleLoader.ts +++ b/src/ModuleLoader.ts @@ -423,7 +423,7 @@ export class ModuleLoader { if (resolveIdResult) { if (typeof resolveIdResult === 'object') { id = resolveIdResult.id; - if (resolveIdResult.external) { + if (resolveIdResult.external || this.options.external(resolveIdResult.id, importer, true)) { external = true; } if (resolveIdResult.moduleSideEffects != null) { diff --git a/test/function/samples/external-resolved/_config.js b/test/function/samples/external-resolved/_config.js new file mode 100644 index 00000000000..a1d7bc5c266 --- /dev/null +++ b/test/function/samples/external-resolved/_config.js @@ -0,0 +1,51 @@ +const assert = require('assert'); + +const testedIds = []; + +module.exports = { + description: 'passes both unresolved and resolved ids to the external option', + context: { + require() { + return true; + } + }, + exports(exports) { + assert.deepStrictEqual(exports, { + resolvedExternal: true, + resolvedObject: true, + resolvedObjectExternal: true, + resolvedString: true + }); + assert.deepStrictEqual(testedIds, [ + 'resolve-string', + 'resolve-external', + 'resolve-object', + 'resolve-object-external', + 'resolved-string', + 'resolved-object' + ]); + }, + options: { + external(id) { + testedIds.push(id); + return id.startsWith('resolved'); + }, + plugins: { + name: 'test-plugin', + resolveId(source) { + switch (source) { + case 'resolve-string': + return 'resolved-string'; + case 'resolve-external': + return false; + case 'resolve-object': + return { id: 'resolved-object', external: false }; + case 'resolve-object-external': + return { id: 'resolved-object-external', external: true }; + default: + return null; + } + } + } + } +}; diff --git a/test/function/samples/external-resolved/main.js b/test/function/samples/external-resolved/main.js new file mode 100644 index 00000000000..b31a68c76dd --- /dev/null +++ b/test/function/samples/external-resolved/main.js @@ -0,0 +1,4 @@ +export {default as resolvedString} from 'resolve-string'; +export {default as resolvedExternal} from 'resolve-external'; +export {default as resolvedObject} from 'resolve-object'; +export {default as resolvedObjectExternal} from 'resolve-object-external';