diff --git a/src/ast/nodes/MetaProperty.ts b/src/ast/nodes/MetaProperty.ts index df55661943f..f4faa4bea6b 100644 --- a/src/ast/nodes/MetaProperty.ts +++ b/src/ast/nodes/MetaProperty.ts @@ -175,7 +175,7 @@ const getGenericImportMetaMechanism = const getFileUrlFromFullPath = (path: string) => `require('u' + 'rl').pathToFileURL(${path}).href`; const getFileUrlFromRelativePath = (path: string) => - getFileUrlFromFullPath(`__dirname + '/${path}'`); + getFileUrlFromFullPath(`__dirname + '/${escapeId(path)}'`); const getUrlFromDocument = (chunkId: string, umd = false) => `${ @@ -187,15 +187,15 @@ const getUrlFromDocument = (chunkId: string, umd = false) => const relativeUrlMechanisms: Record string> = { amd: relativePath => { if (relativePath[0] !== '.') relativePath = './' + relativePath; - return getResolveUrl(`require.toUrl('${relativePath}'), document.baseURI`); + return getResolveUrl(`require.toUrl('${escapeId(relativePath)}'), document.baseURI`); }, cjs: relativePath => `(typeof document === 'undefined' ? ${getFileUrlFromRelativePath( relativePath )} : ${getRelativeUrlFromDocument(relativePath)})`, - es: relativePath => getResolveUrl(`'${relativePath}', import.meta.url`), + es: relativePath => getResolveUrl(`'${escapeId(relativePath)}', import.meta.url`), iife: relativePath => getRelativeUrlFromDocument(relativePath), - system: relativePath => getResolveUrl(`'${relativePath}', module.meta.url`), + system: relativePath => getResolveUrl(`'${escapeId(relativePath)}', module.meta.url`), umd: relativePath => `(typeof document === 'undefined' && typeof location === 'undefined' ? ${getFileUrlFromRelativePath( relativePath diff --git a/test/form/samples/emit-asset-file/_config.js b/test/form/samples/emit-asset-file/_config.js index 145c8dceb73..80effd6d608 100644 --- a/test/form/samples/emit-asset-file/_config.js +++ b/test/form/samples/emit-asset-file/_config.js @@ -24,7 +24,7 @@ module.exports = defineTest({ }, generateBundle(options, outputBundle) { const keys = Object.keys(outputBundle); - assert.strictEqual(keys.length, 2); + assert.strictEqual(keys.length, 3); assert.strictEqual(keys[0], 'assets/logo-zDlmrXar.svg'); const asset = outputBundle[keys[0]]; assert.strictEqual(asset.fileName, 'assets/logo-zDlmrXar.svg'); @@ -37,7 +37,8 @@ module.exports = defineTest({ source.equals(readFileSync(path.resolve(__dirname, 'logo.svg'))), 'asset has correct source' ); - assert.ok(keys[1].endsWith('.js'), `${keys[1]} ends with ".js"`); + assert.ok(keys[1].endsWith('.svg'), `${keys[1]} ends with ".svg"`); + assert.ok(keys[2].endsWith('.js'), `${keys[2]} ends with ".js"`); } } ] diff --git a/test/form/samples/emit-asset-file/_expected/amd.js b/test/form/samples/emit-asset-file/_expected/amd.js index cc63d74aef6..8382fa7270d 100644 --- a/test/form/samples/emit-asset-file/_expected/amd.js +++ b/test/form/samples/emit-asset-file/_expected/amd.js @@ -2,6 +2,8 @@ define(['require'], (function (require) { 'use strict'; var logo = new URL(require.toUrl('./assets/logo-zDlmrXar.svg'), document.baseURI).href; + var logoReverse = new URL(require.toUrl('./assets/logo_reverse\'-DbGK2oiS.svg'), document.baseURI).href; + function showImage(url) { console.log(url); if (typeof document !== 'undefined') { @@ -12,5 +14,6 @@ define(['require'], (function (require) { 'use strict'; } showImage(logo); + showImage(logoReverse); })); diff --git a/test/form/samples/emit-asset-file/_expected/cjs.js b/test/form/samples/emit-asset-file/_expected/cjs.js index 1ba04e93e6e..d882007b525 100644 --- a/test/form/samples/emit-asset-file/_expected/cjs.js +++ b/test/form/samples/emit-asset-file/_expected/cjs.js @@ -2,6 +2,8 @@ var logo = (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__dirname + '/assets/logo-zDlmrXar.svg').href : new URL('assets/logo-zDlmrXar.svg', document.currentScript && document.currentScript.src || document.baseURI).href); +var logoReverse = (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__dirname + '/assets/logo_reverse\'-DbGK2oiS.svg').href : new URL('assets/logo_reverse\'-DbGK2oiS.svg', document.currentScript && document.currentScript.src || document.baseURI).href); + function showImage(url) { console.log(url); if (typeof document !== 'undefined') { @@ -12,3 +14,4 @@ function showImage(url) { } showImage(logo); +showImage(logoReverse); diff --git a/test/form/samples/emit-asset-file/_expected/es.js b/test/form/samples/emit-asset-file/_expected/es.js index a11aa3000b6..a10d0191da5 100644 --- a/test/form/samples/emit-asset-file/_expected/es.js +++ b/test/form/samples/emit-asset-file/_expected/es.js @@ -1,5 +1,7 @@ var logo = new URL('assets/logo-zDlmrXar.svg', import.meta.url).href; +var logoReverse = new URL('assets/logo_reverse\'-DbGK2oiS.svg', import.meta.url).href; + function showImage(url) { console.log(url); if (typeof document !== 'undefined') { @@ -10,3 +12,4 @@ function showImage(url) { } showImage(logo); +showImage(logoReverse); diff --git a/test/form/samples/emit-asset-file/_expected/iife.js b/test/form/samples/emit-asset-file/_expected/iife.js index 73a22830c20..1d0a9fc8525 100644 --- a/test/form/samples/emit-asset-file/_expected/iife.js +++ b/test/form/samples/emit-asset-file/_expected/iife.js @@ -3,6 +3,8 @@ var logo = new URL('assets/logo-zDlmrXar.svg', document.currentScript && document.currentScript.src || document.baseURI).href; + var logoReverse = new URL('assets/logo_reverse\'-DbGK2oiS.svg', document.currentScript && document.currentScript.src || document.baseURI).href; + function showImage(url) { console.log(url); if (typeof document !== 'undefined') { @@ -13,5 +15,6 @@ } showImage(logo); + showImage(logoReverse); })(); diff --git a/test/form/samples/emit-asset-file/_expected/system.js b/test/form/samples/emit-asset-file/_expected/system.js index 63772e0d3ce..f30b86f49e8 100644 --- a/test/form/samples/emit-asset-file/_expected/system.js +++ b/test/form/samples/emit-asset-file/_expected/system.js @@ -5,6 +5,8 @@ System.register([], (function (exports, module) { var logo = new URL('assets/logo-zDlmrXar.svg', module.meta.url).href; + var logoReverse = new URL('assets/logo_reverse\'-DbGK2oiS.svg', module.meta.url).href; + function showImage(url) { console.log(url); if (typeof document !== 'undefined') { @@ -15,6 +17,7 @@ System.register([], (function (exports, module) { } showImage(logo); + showImage(logoReverse); }) }; diff --git a/test/form/samples/emit-asset-file/_expected/umd.js b/test/form/samples/emit-asset-file/_expected/umd.js index 0c11089b0d1..86e40d08e5c 100644 --- a/test/form/samples/emit-asset-file/_expected/umd.js +++ b/test/form/samples/emit-asset-file/_expected/umd.js @@ -5,6 +5,8 @@ var logo = (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__dirname + '/assets/logo-zDlmrXar.svg').href : new URL('assets/logo-zDlmrXar.svg', typeof document === 'undefined' ? location.href : document.currentScript && document.currentScript.src || document.baseURI).href); + var logoReverse = (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__dirname + '/assets/logo_reverse\'-DbGK2oiS.svg').href : new URL('assets/logo_reverse\'-DbGK2oiS.svg', typeof document === 'undefined' ? location.href : document.currentScript && document.currentScript.src || document.baseURI).href); + function showImage(url) { console.log(url); if (typeof document !== 'undefined') { @@ -15,5 +17,6 @@ } showImage(logo); + showImage(logoReverse); })); diff --git a/test/form/samples/emit-asset-file/logo_reverse'.svg b/test/form/samples/emit-asset-file/logo_reverse'.svg new file mode 100644 index 00000000000..31bbbec2741 --- /dev/null +++ b/test/form/samples/emit-asset-file/logo_reverse'.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/form/samples/emit-asset-file/main.js b/test/form/samples/emit-asset-file/main.js index c63771af02d..b6ce90e15ca 100644 --- a/test/form/samples/emit-asset-file/main.js +++ b/test/form/samples/emit-asset-file/main.js @@ -1,4 +1,5 @@ import logo from './logo.svg'; +import logoReverse from "./logo_reverse'.svg" function showImage(url) { console.log(url); @@ -10,3 +11,4 @@ function showImage(url) { } showImage(logo); +showImage(logoReverse);