From c93f8077887ff4ca54e407cc4458af375c8a2b36 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 13 Dec 2019 06:37:28 +0100 Subject: [PATCH] Always make "module" available for SystemJS and AMD formats if `import.meta` is accessed directly --- src/ast/nodes/MetaProperty.ts | 17 ++++++++--------- test/form/samples/import-meta/_config.js | 3 +++ test/form/samples/import-meta/_expected/amd.js | 5 +++++ test/form/samples/import-meta/_expected/cjs.js | 3 +++ test/form/samples/import-meta/_expected/es.js | 1 + test/form/samples/import-meta/_expected/iife.js | 6 ++++++ .../samples/import-meta/_expected/system.js | 10 ++++++++++ test/form/samples/import-meta/_expected/umd.js | 8 ++++++++ test/form/samples/import-meta/main.js | 1 + .../resolve-import-meta-url-export/resolved.js | 3 --- .../unresolved.js | 3 --- 11 files changed, 45 insertions(+), 15 deletions(-) create mode 100644 test/form/samples/import-meta/_config.js create mode 100644 test/form/samples/import-meta/_expected/amd.js create mode 100644 test/form/samples/import-meta/_expected/cjs.js create mode 100644 test/form/samples/import-meta/_expected/es.js create mode 100644 test/form/samples/import-meta/_expected/iife.js create mode 100644 test/form/samples/import-meta/_expected/system.js create mode 100644 test/form/samples/import-meta/_expected/umd.js create mode 100644 test/form/samples/import-meta/main.js delete mode 100644 test/form/samples/resolve-import-meta-url-export/resolved.js delete mode 100644 test/form/samples/resolve-import-meta-url-export/unresolved.js diff --git a/src/ast/nodes/MetaProperty.ts b/src/ast/nodes/MetaProperty.ts index bccedbddeb9..25bd4aebe1d 100644 --- a/src/ast/nodes/MetaProperty.ts +++ b/src/ast/nodes/MetaProperty.ts @@ -35,16 +35,15 @@ export default class MetaProperty extends NodeBase { parent instanceof MemberExpression && typeof parent.propertyKey === 'string' ? parent.propertyKey : null); - if (metaProperty) { - if ( - metaProperty.startsWith(FILE_PREFIX) || + if ( + metaProperty && + (metaProperty.startsWith(FILE_PREFIX) || metaProperty.startsWith(ASSET_PREFIX) || - metaProperty.startsWith(CHUNK_PREFIX) - ) { - this.scope.addAccessedGlobalsByFormat(accessedFileUrlGlobals); - } else { - this.scope.addAccessedGlobalsByFormat(accessedMetaUrlGlobals); - } + metaProperty.startsWith(CHUNK_PREFIX)) + ) { + this.scope.addAccessedGlobalsByFormat(accessedFileUrlGlobals); + } else { + this.scope.addAccessedGlobalsByFormat(accessedMetaUrlGlobals); } } } diff --git a/test/form/samples/import-meta/_config.js b/test/form/samples/import-meta/_config.js new file mode 100644 index 00000000000..0475fdfdf7c --- /dev/null +++ b/test/form/samples/import-meta/_config.js @@ -0,0 +1,3 @@ +module.exports = { + description: 'supports directly accessing import.meta' +}; diff --git a/test/form/samples/import-meta/_expected/amd.js b/test/form/samples/import-meta/_expected/amd.js new file mode 100644 index 00000000000..eb0d3dbf1fc --- /dev/null +++ b/test/form/samples/import-meta/_expected/amd.js @@ -0,0 +1,5 @@ +define(['module'], function (module) { 'use strict'; + + console.log(({ url: new URL(module.uri, document.baseURI).href })); + +}); diff --git a/test/form/samples/import-meta/_expected/cjs.js b/test/form/samples/import-meta/_expected/cjs.js new file mode 100644 index 00000000000..94e7ab87a9a --- /dev/null +++ b/test/form/samples/import-meta/_expected/cjs.js @@ -0,0 +1,3 @@ +'use strict'; + +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)) })); diff --git a/test/form/samples/import-meta/_expected/es.js b/test/form/samples/import-meta/_expected/es.js new file mode 100644 index 00000000000..e7313a090ff --- /dev/null +++ b/test/form/samples/import-meta/_expected/es.js @@ -0,0 +1 @@ +console.log(import.meta); diff --git a/test/form/samples/import-meta/_expected/iife.js b/test/form/samples/import-meta/_expected/iife.js new file mode 100644 index 00000000000..8e30453792d --- /dev/null +++ b/test/form/samples/import-meta/_expected/iife.js @@ -0,0 +1,6 @@ +(function () { + 'use strict'; + + console.log(({ url: (document.currentScript && document.currentScript.src || new URL('iife.js', document.baseURI).href) })); + +}()); diff --git a/test/form/samples/import-meta/_expected/system.js b/test/form/samples/import-meta/_expected/system.js new file mode 100644 index 00000000000..bf12e3c7997 --- /dev/null +++ b/test/form/samples/import-meta/_expected/system.js @@ -0,0 +1,10 @@ +System.register([], function (exports, module) { + 'use strict'; + return { + execute: function () { + + console.log(module.meta); + + } + }; +}); diff --git a/test/form/samples/import-meta/_expected/umd.js b/test/form/samples/import-meta/_expected/umd.js new file mode 100644 index 00000000000..56d3917be05 --- /dev/null +++ b/test/form/samples/import-meta/_expected/umd.js @@ -0,0 +1,8 @@ +(function (factory) { + typeof define === 'function' && define.amd ? define(factory) : + factory(); +}((function () { 'use strict'; + + 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)) })); + +}))); diff --git a/test/form/samples/import-meta/main.js b/test/form/samples/import-meta/main.js new file mode 100644 index 00000000000..e7313a090ff --- /dev/null +++ b/test/form/samples/import-meta/main.js @@ -0,0 +1 @@ +console.log(import.meta); diff --git a/test/form/samples/resolve-import-meta-url-export/resolved.js b/test/form/samples/resolve-import-meta-url-export/resolved.js deleted file mode 100644 index 0a555e5ad35..00000000000 --- a/test/form/samples/resolve-import-meta-url-export/resolved.js +++ /dev/null @@ -1,3 +0,0 @@ -console.log(import.meta.url); -console.log(import.meta.privateProp); -console.log(import.meta); diff --git a/test/form/samples/resolve-import-meta-url-export/unresolved.js b/test/form/samples/resolve-import-meta-url-export/unresolved.js deleted file mode 100644 index 0a555e5ad35..00000000000 --- a/test/form/samples/resolve-import-meta-url-export/unresolved.js +++ /dev/null @@ -1,3 +0,0 @@ -console.log(import.meta.url); -console.log(import.meta.privateProp); -console.log(import.meta);