From bbff7403fbf46f9ad92240ac213df8d30ef31b64 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 20 Sep 2018 02:56:13 +0200 Subject: update packages --- .../dependencies/HarmonyDetectionParserPlugin.js | 148 +++++++++++++-------- 1 file changed, 92 insertions(+), 56 deletions(-) (limited to 'node_modules/webpack/lib/dependencies/HarmonyDetectionParserPlugin.js') diff --git a/node_modules/webpack/lib/dependencies/HarmonyDetectionParserPlugin.js b/node_modules/webpack/lib/dependencies/HarmonyDetectionParserPlugin.js index 4de7afb58..062ec21a6 100644 --- a/node_modules/webpack/lib/dependencies/HarmonyDetectionParserPlugin.js +++ b/node_modules/webpack/lib/dependencies/HarmonyDetectionParserPlugin.js @@ -1,56 +1,92 @@ -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -"use strict"; - -const HarmonyCompatibilityDependency = require("./HarmonyCompatibilityDependency"); - -module.exports = class HarmonyDetectionParserPlugin { - apply(parser) { - parser.plugin("program", (ast) => { - const isHarmony = ast.body.some(statement => { - return /^(Import|Export).*Declaration$/.test(statement.type); - }); - if(isHarmony) { - const module = parser.state.module; - const dep = new HarmonyCompatibilityDependency(module); - dep.loc = { - start: { - line: -1, - column: 0 - }, - end: { - line: -1, - column: 0 - }, - index: -2 - }; - module.addDependency(dep); - module.meta.harmonyModule = true; - module.strict = true; - module.exportsArgument = "__webpack_exports__"; - } - }); - const nonHarmonyIdentifiers = ["define", "exports"]; - nonHarmonyIdentifiers.forEach(identifer => { - parser.plugin(`evaluate typeof ${identifer}`, nullInHarmony); - parser.plugin(`typeof ${identifer}`, skipInHarmony); - parser.plugin(`evaluate ${identifer}`, nullInHarmony); - parser.plugin(`expression ${identifer}`, skipInHarmony); - parser.plugin(`call ${identifer}`, skipInHarmony); - }); - - function skipInHarmony() { - const module = this.state.module; - if(module && module.meta && module.meta.harmonyModule) - return true; - } - - function nullInHarmony() { - const module = this.state.module; - if(module && module.meta && module.meta.harmonyModule) - return null; - } - } -}; +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +const HarmonyCompatibilityDependency = require("./HarmonyCompatibilityDependency"); +const HarmonyInitDependency = require("./HarmonyInitDependency"); + +module.exports = class HarmonyDetectionParserPlugin { + apply(parser) { + parser.hooks.program.tap("HarmonyDetectionParserPlugin", ast => { + const isStrictHarmony = parser.state.module.type === "javascript/esm"; + const isHarmony = + isStrictHarmony || + ast.body.some(statement => { + return /^(Import|Export).*Declaration$/.test(statement.type); + }); + if (isHarmony) { + const module = parser.state.module; + const compatDep = new HarmonyCompatibilityDependency(module); + compatDep.loc = { + start: { + line: -1, + column: 0 + }, + end: { + line: -1, + column: 0 + }, + index: -3 + }; + module.addDependency(compatDep); + const initDep = new HarmonyInitDependency(module); + initDep.loc = { + start: { + line: -1, + column: 0 + }, + end: { + line: -1, + column: 0 + }, + index: -2 + }; + module.addDependency(initDep); + parser.state.harmonyParserScope = parser.state.harmonyParserScope || {}; + parser.scope.isStrict = true; + module.buildMeta.exportsType = "namespace"; + module.buildInfo.strict = true; + module.buildInfo.exportsArgument = "__webpack_exports__"; + if (isStrictHarmony) { + module.buildMeta.strictHarmonyModule = true; + module.buildInfo.moduleArgument = "__webpack_module__"; + } + } + }); + + const skipInHarmony = () => { + const module = parser.state.module; + if (module && module.buildMeta && module.buildMeta.exportsType) { + return true; + } + }; + + const nullInHarmony = () => { + const module = parser.state.module; + if (module && module.buildMeta && module.buildMeta.exportsType) { + return null; + } + }; + + const nonHarmonyIdentifiers = ["define", "exports"]; + for (const identifer of nonHarmonyIdentifiers) { + parser.hooks.evaluateTypeof + .for(identifer) + .tap("HarmonyDetectionParserPlugin", nullInHarmony); + parser.hooks.typeof + .for(identifer) + .tap("HarmonyDetectionParserPlugin", skipInHarmony); + parser.hooks.evaluate + .for(identifer) + .tap("HarmonyDetectionParserPlugin", nullInHarmony); + parser.hooks.expression + .for(identifer) + .tap("HarmonyDetectionParserPlugin", skipInHarmony); + parser.hooks.call + .for(identifer) + .tap("HarmonyDetectionParserPlugin", skipInHarmony); + } + } +}; -- cgit v1.2.3