diff --git a/src/utils/defaultPlugin.ts b/src/utils/defaultPlugin.ts index f9cd5610bea..b8e4d8e84ba 100644 --- a/src/utils/defaultPlugin.ts +++ b/src/utils/defaultPlugin.ts @@ -18,9 +18,9 @@ export function getRollupDefaultPlugin(options: InputOptions): Plugin { return relativeUrlMechanisms[format](relativeAssetPath); }, resolveImportMeta(prop, { chunkId, format }) { - const mechanism = importMetaUrlMechanisms[format] && importMetaUrlMechanisms[format](chunkId); + const mechanism = importMetaMechanisms[format] && importMetaMechanisms[format](prop, chunkId); if (mechanism) { - return prop === null ? `({ url: ${mechanism} })` : prop === 'url' ? mechanism : 'undefined'; + return mechanism; } } }; @@ -82,20 +82,32 @@ const getResolveUrl = (path: string, URL: string = 'URL') => `new ${URL}(${path} const getUrlFromDocument = (chunkId: string) => `(document.currentScript && document.currentScript.src || new URL('${chunkId}', document.baseURI).href)`; -const importMetaUrlMechanisms: Record string> = { - amd: () => getResolveUrl(`module.uri, document.baseURI`), - cjs: chunkId => - `(typeof document === 'undefined' ? ${getResolveUrl( - `'file:' + __filename`, - `(require('u' + 'rl').URL)` - )} : ${getUrlFromDocument(chunkId)})`, - iife: chunkId => getUrlFromDocument(chunkId), - system: () => `module.meta.url`, - umd: chunkId => - `(typeof document === 'undefined' ? ${getResolveUrl( - `'file:' + __filename`, - `(require('u' + 'rl').URL)` - )} : ${getUrlFromDocument(chunkId)})` +const getGenericImportMetaMechanism = (getUrl: (chunkId: string) => string) => ( + prop: string | null, + chunkId: string +) => { + const urlMechanism = getUrl(chunkId); + return prop === null ? `({ url: ${urlMechanism} })` : prop === 'url' ? urlMechanism : 'undefined'; +}; + +const importMetaMechanisms: Record string> = { + amd: getGenericImportMetaMechanism(() => getResolveUrl(`module.uri, document.baseURI`)), + cjs: getGenericImportMetaMechanism( + chunkId => + `(typeof document === 'undefined' ? ${getResolveUrl( + `'file:' + __filename`, + `(require('u' + 'rl').URL)` + )} : ${getUrlFromDocument(chunkId)})` + ), + iife: getGenericImportMetaMechanism(chunkId => getUrlFromDocument(chunkId)), + system: prop => (prop === null ? `module.meta` : `module.meta.${prop}`), + umd: getGenericImportMetaMechanism( + chunkId => + `(typeof document === 'undefined' ? ${getResolveUrl( + `'file:' + __filename`, + `(require('u' + 'rl').URL)` + )} : ${getUrlFromDocument(chunkId)})` + ) }; const getRelativeUrlFromDocument = (relativePath: string) => diff --git a/test/form/samples/configure-import-meta-url/_expected/system.js b/test/form/samples/configure-import-meta-url/_expected/system.js index 0023ad18505..fd3c4bfbd11 100644 --- a/test/form/samples/configure-import-meta-url/_expected/system.js +++ b/test/form/samples/configure-import-meta-url/_expected/system.js @@ -8,8 +8,8 @@ System.register([], function (exports, module) { console.log('resolved'); console.log(module.meta.url); - console.log(undefined); - console.log(({ url: module.meta.url })); + console.log(module.meta.privateProp); + console.log(module.meta); console.log('url=system.js:configure-import-meta-url/main.js'); console.log('privateProp=system.js:configure-import-meta-url/main.js');