From a52c2dfc249d362e2d0badc2cadfc482811ba1de Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Mon, 8 Jul 2019 18:22:03 +0200 Subject: [PATCH] Only overwrite content when resolving import.meta properties --- src/ast/nodes/MetaProperty.ts | 7 ++++--- src/ast/nodes/VariableDeclaration.ts | 2 +- .../_expected/amd/nested/chunk2.js | 4 ++-- .../_expected/cjs/nested/chunk2.js | 4 ++-- .../_expected/es/nested/chunk2.js | 4 ++-- .../_expected/system/nested/chunk2.js | 4 ++-- .../configure-import-meta-url/_expected/es.js | 11 ----------- .../resolve-import-meta-url-export/_config.js | 13 +++++++++++++ .../_expected/amd.js | 11 +++++++++++ .../_expected/cjs.js | 9 +++++++++ .../_expected/es.js | 4 ++++ .../_expected/iife.js | 12 ++++++++++++ .../_expected/system.js | 11 +++++++++++ .../_expected/umd.js | 15 +++++++++++++++ .../resolve-import-meta-url-export/main.js | 2 ++ .../resolved.js | 0 .../unresolved.js | 0 .../_config.js | 0 .../_expected/amd.js | 6 +++--- .../_expected/cjs.js | 6 +++--- .../resolve-import-meta-url/_expected/es.js | 11 +++++++++++ .../_expected/iife.js | 6 +++--- .../_expected/system.js | 6 +++--- .../_expected/umd.js | 6 +++--- .../main.js | 0 .../samples/resolve-import-meta-url/resolved.js | 3 +++ .../samples/resolve-import-meta-url/unresolved.js | 3 +++ 27 files changed, 122 insertions(+), 38 deletions(-) delete mode 100644 test/form/samples/configure-import-meta-url/_expected/es.js create mode 100644 test/form/samples/resolve-import-meta-url-export/_config.js create mode 100644 test/form/samples/resolve-import-meta-url-export/_expected/amd.js create mode 100644 test/form/samples/resolve-import-meta-url-export/_expected/cjs.js create mode 100644 test/form/samples/resolve-import-meta-url-export/_expected/es.js create mode 100644 test/form/samples/resolve-import-meta-url-export/_expected/iife.js create mode 100644 test/form/samples/resolve-import-meta-url-export/_expected/system.js create mode 100644 test/form/samples/resolve-import-meta-url-export/_expected/umd.js create mode 100644 test/form/samples/resolve-import-meta-url-export/main.js rename test/form/samples/{configure-import-meta-url => resolve-import-meta-url-export}/resolved.js (100%) rename test/form/samples/{configure-import-meta-url => resolve-import-meta-url-export}/unresolved.js (100%) rename test/form/samples/{configure-import-meta-url => resolve-import-meta-url}/_config.js (100%) rename test/form/samples/{configure-import-meta-url => resolve-import-meta-url}/_expected/amd.js (59%) rename test/form/samples/{configure-import-meta-url => resolve-import-meta-url}/_expected/cjs.js (73%) create mode 100644 test/form/samples/resolve-import-meta-url/_expected/es.js rename test/form/samples/{configure-import-meta-url => resolve-import-meta-url}/_expected/iife.js (65%) rename test/form/samples/{configure-import-meta-url => resolve-import-meta-url}/_expected/system.js (58%) rename test/form/samples/{configure-import-meta-url => resolve-import-meta-url}/_expected/umd.js (77%) rename test/form/samples/{configure-import-meta-url => resolve-import-meta-url}/main.js (100%) create mode 100644 test/form/samples/resolve-import-meta-url/resolved.js create mode 100644 test/form/samples/resolve-import-meta-url/unresolved.js diff --git a/src/ast/nodes/MetaProperty.ts b/src/ast/nodes/MetaProperty.ts index 7b0b53bb853..10ccb958f1d 100644 --- a/src/ast/nodes/MetaProperty.ts +++ b/src/ast/nodes/MetaProperty.ts @@ -100,7 +100,8 @@ export default class MetaProperty extends NodeBase { code.overwrite( (parent as MemberExpression).start, (parent as MemberExpression).end, - replacement + replacement, + { contentOnly: true } ); return; } @@ -115,9 +116,9 @@ export default class MetaProperty extends NodeBase { ]); if (typeof replacement === 'string') { if (parent instanceof MemberExpression) { - code.overwrite(parent.start, parent.end, replacement); + code.overwrite(parent.start, parent.end, replacement, { contentOnly: true }); } else { - code.overwrite(this.start, this.end, replacement); + code.overwrite(this.start, this.end, replacement, { contentOnly: true }); } } } diff --git a/src/ast/nodes/VariableDeclaration.ts b/src/ast/nodes/VariableDeclaration.ts index dc85f0f0d58..8a84f93ef93 100644 --- a/src/ast/nodes/VariableDeclaration.ts +++ b/src/ast/nodes/VariableDeclaration.ts @@ -89,7 +89,7 @@ export default class VariableDeclaration extends NodeBase { private renderDeclarationEnd( code: MagicString, separatorString: string, - lastSeparatorPos: number, + lastSeparatorPos: number | null, actualContentEnd: number, renderedContentEnd: number, addSemicolon: boolean, diff --git a/test/chunking-form/samples/configure-file-url/_expected/amd/nested/chunk2.js b/test/chunking-form/samples/configure-file-url/_expected/amd/nested/chunk2.js index 67a303be630..bdb11983b26 100644 --- a/test/chunking-form/samples/configure-file-url/_expected/amd/nested/chunk2.js +++ b/test/chunking-form/samples/configure-file-url/_expected/amd/nested/chunk2.js @@ -1,7 +1,7 @@ define(['require', 'exports'], function (require, exports) { 'use strict'; - const asset = 'chunkId=nested/chunk2.js:moduleId=solved:fileName=assets/asset-solved-9b321da2.txt:format=amd:relativePath=../assets/asset-solved-9b321da2.txt:assetReferenceId=6296c678:chunkReferenceId=null' - const chunk = 'chunkId=nested/chunk2.js:moduleId=solved:fileName=nested/chunk.js:format=amd:relativePath=chunk.js:assetReferenceId=null:chunkReferenceId=f6c25ae7' + const asset = 'chunkId=nested/chunk2.js:moduleId=solved:fileName=assets/asset-solved-9b321da2.txt:format=amd:relativePath=../assets/asset-solved-9b321da2.txt:assetReferenceId=6296c678:chunkReferenceId=null'; + const chunk = 'chunkId=nested/chunk2.js:moduleId=solved:fileName=nested/chunk.js:format=amd:relativePath=chunk.js:assetReferenceId=null:chunkReferenceId=f6c25ae7'; exports.asset = asset; exports.chunk = chunk; diff --git a/test/chunking-form/samples/configure-file-url/_expected/cjs/nested/chunk2.js b/test/chunking-form/samples/configure-file-url/_expected/cjs/nested/chunk2.js index 9c12e75444e..1d4203c7455 100644 --- a/test/chunking-form/samples/configure-file-url/_expected/cjs/nested/chunk2.js +++ b/test/chunking-form/samples/configure-file-url/_expected/cjs/nested/chunk2.js @@ -1,7 +1,7 @@ 'use strict'; -const asset = 'chunkId=nested/chunk2.js:moduleId=solved:fileName=assets/asset-solved-9b321da2.txt:format=cjs:relativePath=../assets/asset-solved-9b321da2.txt:assetReferenceId=6296c678:chunkReferenceId=null' -const chunk = 'chunkId=nested/chunk2.js:moduleId=solved:fileName=nested/chunk.js:format=cjs:relativePath=chunk.js:assetReferenceId=null:chunkReferenceId=f6c25ae7' +const asset = 'chunkId=nested/chunk2.js:moduleId=solved:fileName=assets/asset-solved-9b321da2.txt:format=cjs:relativePath=../assets/asset-solved-9b321da2.txt:assetReferenceId=6296c678:chunkReferenceId=null'; +const chunk = 'chunkId=nested/chunk2.js:moduleId=solved:fileName=nested/chunk.js:format=cjs:relativePath=chunk.js:assetReferenceId=null:chunkReferenceId=f6c25ae7'; exports.asset = asset; exports.chunk = chunk; diff --git a/test/chunking-form/samples/configure-file-url/_expected/es/nested/chunk2.js b/test/chunking-form/samples/configure-file-url/_expected/es/nested/chunk2.js index 11a45614417..63b7c7ebdf0 100644 --- a/test/chunking-form/samples/configure-file-url/_expected/es/nested/chunk2.js +++ b/test/chunking-form/samples/configure-file-url/_expected/es/nested/chunk2.js @@ -1,4 +1,4 @@ -const asset = 'chunkId=nested/chunk2.js:moduleId=solved:fileName=assets/asset-solved-9b321da2.txt:format=es:relativePath=../assets/asset-solved-9b321da2.txt:assetReferenceId=6296c678:chunkReferenceId=null' -const chunk = 'chunkId=nested/chunk2.js:moduleId=solved:fileName=nested/chunk.js:format=es:relativePath=chunk.js:assetReferenceId=null:chunkReferenceId=f6c25ae7' +const asset = 'chunkId=nested/chunk2.js:moduleId=solved:fileName=assets/asset-solved-9b321da2.txt:format=es:relativePath=../assets/asset-solved-9b321da2.txt:assetReferenceId=6296c678:chunkReferenceId=null'; +const chunk = 'chunkId=nested/chunk2.js:moduleId=solved:fileName=nested/chunk.js:format=es:relativePath=chunk.js:assetReferenceId=null:chunkReferenceId=f6c25ae7'; export { asset, chunk }; diff --git a/test/chunking-form/samples/configure-file-url/_expected/system/nested/chunk2.js b/test/chunking-form/samples/configure-file-url/_expected/system/nested/chunk2.js index c0df71d70a9..bdec926656e 100644 --- a/test/chunking-form/samples/configure-file-url/_expected/system/nested/chunk2.js +++ b/test/chunking-form/samples/configure-file-url/_expected/system/nested/chunk2.js @@ -3,8 +3,8 @@ System.register([], function (exports, module) { return { execute: function () { - const asset = exports('asset', 'chunkId=nested/chunk2.js:moduleId=solved:fileName=assets/asset-solved-9b321da2.txt:format=system:relativePath=../assets/asset-solved-9b321da2.txt:assetReferenceId=6296c678:chunkReferenceId=null' - const chunk = exports('chunk', 'chunkId=nested/chunk2.js:moduleId=solved:fileName=nested/chunk.js:format=system:relativePath=chunk.js:assetReferenceId=null:chunkReferenceId=f6c25ae7' + const asset = exports('asset', 'chunkId=nested/chunk2.js:moduleId=solved:fileName=assets/asset-solved-9b321da2.txt:format=system:relativePath=../assets/asset-solved-9b321da2.txt:assetReferenceId=6296c678:chunkReferenceId=null'); + const chunk = exports('chunk', 'chunkId=nested/chunk2.js:moduleId=solved:fileName=nested/chunk.js:format=system:relativePath=chunk.js:assetReferenceId=null:chunkReferenceId=f6c25ae7'); } }; diff --git a/test/form/samples/configure-import-meta-url/_expected/es.js b/test/form/samples/configure-import-meta-url/_expected/es.js deleted file mode 100644 index 65363fbdc91..00000000000 --- a/test/form/samples/configure-import-meta-url/_expected/es.js +++ /dev/null @@ -1,11 +0,0 @@ -console.log('resolved'); -console.log('resolved'); -console.log('resolved'); - -console.log(import.meta.url); -console.log(import.meta.privateProp); -console.log(import.meta); - -console.log('url=es.js:configure-import-meta-url/main.js'); -console.log('privateProp=es.js:configure-import-meta-url/main.js'); -console.log('null=es.js:configure-import-meta-url/main.js'); diff --git a/test/form/samples/resolve-import-meta-url-export/_config.js b/test/form/samples/resolve-import-meta-url-export/_config.js new file mode 100644 index 00000000000..f6597fceb6b --- /dev/null +++ b/test/form/samples/resolve-import-meta-url-export/_config.js @@ -0,0 +1,13 @@ +module.exports = { + description: 'correctly exports resolved import.meta.url', + options: { + plugins: [ + { + resolveImportMeta(prop) { + return prop ? "'url'" : "'meta'"; + } + } + ], + output: { name: 'bundle' } + } +}; diff --git a/test/form/samples/resolve-import-meta-url-export/_expected/amd.js b/test/form/samples/resolve-import-meta-url-export/_expected/amd.js new file mode 100644 index 00000000000..66a5baffd26 --- /dev/null +++ b/test/form/samples/resolve-import-meta-url-export/_expected/amd.js @@ -0,0 +1,11 @@ +define(['module', 'exports'], function (module, exports) { 'use strict'; + + const url = 'url'; + const meta = 'meta'; + + exports.meta = meta; + exports.url = url; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/form/samples/resolve-import-meta-url-export/_expected/cjs.js b/test/form/samples/resolve-import-meta-url-export/_expected/cjs.js new file mode 100644 index 00000000000..13803f6f4ab --- /dev/null +++ b/test/form/samples/resolve-import-meta-url-export/_expected/cjs.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const url = 'url'; +const meta = 'meta'; + +exports.meta = meta; +exports.url = url; diff --git a/test/form/samples/resolve-import-meta-url-export/_expected/es.js b/test/form/samples/resolve-import-meta-url-export/_expected/es.js new file mode 100644 index 00000000000..a3257240043 --- /dev/null +++ b/test/form/samples/resolve-import-meta-url-export/_expected/es.js @@ -0,0 +1,4 @@ +const url = 'url'; +const meta = 'meta'; + +export { meta, url }; diff --git a/test/form/samples/resolve-import-meta-url-export/_expected/iife.js b/test/form/samples/resolve-import-meta-url-export/_expected/iife.js new file mode 100644 index 00000000000..01304cbfda8 --- /dev/null +++ b/test/form/samples/resolve-import-meta-url-export/_expected/iife.js @@ -0,0 +1,12 @@ +var bundle = (function (exports) { + 'use strict'; + + const url = 'url'; + const meta = 'meta'; + + exports.meta = meta; + exports.url = url; + + return exports; + +}({})); diff --git a/test/form/samples/resolve-import-meta-url-export/_expected/system.js b/test/form/samples/resolve-import-meta-url-export/_expected/system.js new file mode 100644 index 00000000000..b7d753da474 --- /dev/null +++ b/test/form/samples/resolve-import-meta-url-export/_expected/system.js @@ -0,0 +1,11 @@ +System.register('bundle', [], function (exports, module) { + 'use strict'; + return { + execute: function () { + + const url = exports('url', 'url'); + const meta = exports('meta', 'meta'); + + } + }; +}); diff --git a/test/form/samples/resolve-import-meta-url-export/_expected/umd.js b/test/form/samples/resolve-import-meta-url-export/_expected/umd.js new file mode 100644 index 00000000000..38f42d1889a --- /dev/null +++ b/test/form/samples/resolve-import-meta-url-export/_expected/umd.js @@ -0,0 +1,15 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.bundle = {})); +}(this, function (exports) { 'use strict'; + + const url = 'url'; + const meta = 'meta'; + + exports.meta = meta; + exports.url = url; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/test/form/samples/resolve-import-meta-url-export/main.js b/test/form/samples/resolve-import-meta-url-export/main.js new file mode 100644 index 00000000000..28ee9ced5bb --- /dev/null +++ b/test/form/samples/resolve-import-meta-url-export/main.js @@ -0,0 +1,2 @@ +export const url = import.meta.url; +export const meta = import.meta; diff --git a/test/form/samples/configure-import-meta-url/resolved.js b/test/form/samples/resolve-import-meta-url-export/resolved.js similarity index 100% rename from test/form/samples/configure-import-meta-url/resolved.js rename to test/form/samples/resolve-import-meta-url-export/resolved.js diff --git a/test/form/samples/configure-import-meta-url/unresolved.js b/test/form/samples/resolve-import-meta-url-export/unresolved.js similarity index 100% rename from test/form/samples/configure-import-meta-url/unresolved.js rename to test/form/samples/resolve-import-meta-url-export/unresolved.js diff --git a/test/form/samples/configure-import-meta-url/_config.js b/test/form/samples/resolve-import-meta-url/_config.js similarity index 100% rename from test/form/samples/configure-import-meta-url/_config.js rename to test/form/samples/resolve-import-meta-url/_config.js diff --git a/test/form/samples/configure-import-meta-url/_expected/amd.js b/test/form/samples/resolve-import-meta-url/_expected/amd.js similarity index 59% rename from test/form/samples/configure-import-meta-url/_expected/amd.js rename to test/form/samples/resolve-import-meta-url/_expected/amd.js index 38d40a1bcb1..f52e4df537e 100644 --- a/test/form/samples/configure-import-meta-url/_expected/amd.js +++ b/test/form/samples/resolve-import-meta-url/_expected/amd.js @@ -8,8 +8,8 @@ define(['module'], function (module) { 'use strict'; console.log(undefined); console.log(({ url: new URL(module.uri, document.baseURI).href })); - console.log('url=amd.js:configure-import-meta-url/main.js'); - console.log('privateProp=amd.js:configure-import-meta-url/main.js'); - console.log('null=amd.js:configure-import-meta-url/main.js'); + console.log('url=amd.js:resolve-import-meta-url/main.js'); + console.log('privateProp=amd.js:resolve-import-meta-url/main.js'); + console.log('null=amd.js:resolve-import-meta-url/main.js'); }); diff --git a/test/form/samples/configure-import-meta-url/_expected/cjs.js b/test/form/samples/resolve-import-meta-url/_expected/cjs.js similarity index 73% rename from test/form/samples/configure-import-meta-url/_expected/cjs.js rename to test/form/samples/resolve-import-meta-url/_expected/cjs.js index f6ab33ad5e5..93c70aa21f6 100644 --- a/test/form/samples/configure-import-meta-url/_expected/cjs.js +++ b/test/form/samples/resolve-import-meta-url/_expected/cjs.js @@ -8,6 +8,6 @@ console.log((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('fi console.log(undefined); console.log(({ url: (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('cjs.js', document.baseURI).href)) })); -console.log('url=cjs.js:configure-import-meta-url/main.js'); -console.log('privateProp=cjs.js:configure-import-meta-url/main.js'); -console.log('null=cjs.js:configure-import-meta-url/main.js'); +console.log('url=cjs.js:resolve-import-meta-url/main.js'); +console.log('privateProp=cjs.js:resolve-import-meta-url/main.js'); +console.log('null=cjs.js:resolve-import-meta-url/main.js'); diff --git a/test/form/samples/resolve-import-meta-url/_expected/es.js b/test/form/samples/resolve-import-meta-url/_expected/es.js new file mode 100644 index 00000000000..a4ab940b913 --- /dev/null +++ b/test/form/samples/resolve-import-meta-url/_expected/es.js @@ -0,0 +1,11 @@ +console.log('resolved'); +console.log('resolved'); +console.log('resolved'); + +console.log(import.meta.url); +console.log(import.meta.privateProp); +console.log(import.meta); + +console.log('url=es.js:resolve-import-meta-url/main.js'); +console.log('privateProp=es.js:resolve-import-meta-url/main.js'); +console.log('null=es.js:resolve-import-meta-url/main.js'); diff --git a/test/form/samples/configure-import-meta-url/_expected/iife.js b/test/form/samples/resolve-import-meta-url/_expected/iife.js similarity index 65% rename from test/form/samples/configure-import-meta-url/_expected/iife.js rename to test/form/samples/resolve-import-meta-url/_expected/iife.js index 2914b6951c8..251f18e4ab9 100644 --- a/test/form/samples/configure-import-meta-url/_expected/iife.js +++ b/test/form/samples/resolve-import-meta-url/_expected/iife.js @@ -9,8 +9,8 @@ console.log(undefined); console.log(({ url: (document.currentScript && document.currentScript.src || new URL('iife.js', document.baseURI).href) })); - console.log('url=iife.js:configure-import-meta-url/main.js'); - console.log('privateProp=iife.js:configure-import-meta-url/main.js'); - console.log('null=iife.js:configure-import-meta-url/main.js'); + console.log('url=iife.js:resolve-import-meta-url/main.js'); + console.log('privateProp=iife.js:resolve-import-meta-url/main.js'); + console.log('null=iife.js:resolve-import-meta-url/main.js'); }()); diff --git a/test/form/samples/configure-import-meta-url/_expected/system.js b/test/form/samples/resolve-import-meta-url/_expected/system.js similarity index 58% rename from test/form/samples/configure-import-meta-url/_expected/system.js rename to test/form/samples/resolve-import-meta-url/_expected/system.js index fd3c4bfbd11..cdd25b9c2cc 100644 --- a/test/form/samples/configure-import-meta-url/_expected/system.js +++ b/test/form/samples/resolve-import-meta-url/_expected/system.js @@ -11,9 +11,9 @@ System.register([], function (exports, module) { 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'); - console.log('null=system.js:configure-import-meta-url/main.js'); + console.log('url=system.js:resolve-import-meta-url/main.js'); + console.log('privateProp=system.js:resolve-import-meta-url/main.js'); + console.log('null=system.js:resolve-import-meta-url/main.js'); } }; diff --git a/test/form/samples/configure-import-meta-url/_expected/umd.js b/test/form/samples/resolve-import-meta-url/_expected/umd.js similarity index 77% rename from test/form/samples/configure-import-meta-url/_expected/umd.js rename to test/form/samples/resolve-import-meta-url/_expected/umd.js index 187f2c2e07e..8f5b6af9e25 100644 --- a/test/form/samples/configure-import-meta-url/_expected/umd.js +++ b/test/form/samples/resolve-import-meta-url/_expected/umd.js @@ -11,8 +11,8 @@ console.log(undefined); console.log(({ url: (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('umd.js', document.baseURI).href)) })); - console.log('url=umd.js:configure-import-meta-url/main.js'); - console.log('privateProp=umd.js:configure-import-meta-url/main.js'); - console.log('null=umd.js:configure-import-meta-url/main.js'); + console.log('url=umd.js:resolve-import-meta-url/main.js'); + console.log('privateProp=umd.js:resolve-import-meta-url/main.js'); + console.log('null=umd.js:resolve-import-meta-url/main.js'); })); diff --git a/test/form/samples/configure-import-meta-url/main.js b/test/form/samples/resolve-import-meta-url/main.js similarity index 100% rename from test/form/samples/configure-import-meta-url/main.js rename to test/form/samples/resolve-import-meta-url/main.js diff --git a/test/form/samples/resolve-import-meta-url/resolved.js b/test/form/samples/resolve-import-meta-url/resolved.js new file mode 100644 index 00000000000..0a555e5ad35 --- /dev/null +++ b/test/form/samples/resolve-import-meta-url/resolved.js @@ -0,0 +1,3 @@ +console.log(import.meta.url); +console.log(import.meta.privateProp); +console.log(import.meta); diff --git a/test/form/samples/resolve-import-meta-url/unresolved.js b/test/form/samples/resolve-import-meta-url/unresolved.js new file mode 100644 index 00000000000..0a555e5ad35 --- /dev/null +++ b/test/form/samples/resolve-import-meta-url/unresolved.js @@ -0,0 +1,3 @@ +console.log(import.meta.url); +console.log(import.meta.privateProp); +console.log(import.meta);