aboutsummaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/dependencies/HarmonyDetectionParserPlugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/webpack/lib/dependencies/HarmonyDetectionParserPlugin.js')
-rw-r--r--node_modules/webpack/lib/dependencies/HarmonyDetectionParserPlugin.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/dependencies/HarmonyDetectionParserPlugin.js b/node_modules/webpack/lib/dependencies/HarmonyDetectionParserPlugin.js
new file mode 100644
index 000000000..59eceecd8
--- /dev/null
+++ b/node_modules/webpack/lib/dependencies/HarmonyDetectionParserPlugin.js
@@ -0,0 +1,56 @@
+/*
+ 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) => {
+ var 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__";
+ }
+ });
+ var 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;
+ }
+ }
+};