diff options
Diffstat (limited to 'node_modules/webpack/lib/ProvidePlugin.js')
-rw-r--r-- | node_modules/webpack/lib/ProvidePlugin.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/ProvidePlugin.js b/node_modules/webpack/lib/ProvidePlugin.js new file mode 100644 index 000000000..fff352a4b --- /dev/null +++ b/node_modules/webpack/lib/ProvidePlugin.js @@ -0,0 +1,55 @@ +/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+"use strict";
+
+const ParserHelpers = require("./ParserHelpers");
+const ConstDependency = require("./dependencies/ConstDependency");
+
+const NullFactory = require("./NullFactory");
+
+class ProvidePlugin {
+ constructor(definitions) {
+ this.definitions = definitions;
+ }
+
+ apply(compiler) {
+ const definitions = this.definitions;
+ compiler.plugin("compilation", (compilation, params) => {
+ compilation.dependencyFactories.set(ConstDependency, new NullFactory());
+ compilation.dependencyTemplates.set(ConstDependency, new ConstDependency.Template());
+ params.normalModuleFactory.plugin("parser", (parser, parserOptions) => {
+ Object.keys(definitions).forEach(name => {
+ var request = [].concat(definitions[name]);
+ var splittedName = name.split(".");
+ if(splittedName.length > 0) {
+ splittedName.slice(1).forEach((_, i) => {
+ const name = splittedName.slice(0, i + 1).join(".");
+ parser.plugin(`can-rename ${name}`, ParserHelpers.approve);
+ });
+ }
+ parser.plugin(`expression ${name}`, function(expr) {
+ let nameIdentifier = name;
+ const scopedName = name.indexOf(".") >= 0;
+ let expression = `require(${JSON.stringify(request[0])})`;
+ if(scopedName) {
+ nameIdentifier = `__webpack_provided_${name.replace(/\./g, "_dot_")}`;
+ }
+ if(request.length > 1) {
+ expression += request.slice(1).map(r => `[${JSON.stringify(r)}]`).join("");
+ }
+ if(!ParserHelpers.addParsedVariableToModule(this, nameIdentifier, expression)) {
+ return false;
+ }
+ if(scopedName) {
+ ParserHelpers.toConstantDependency(nameIdentifier).bind(this)(expr);
+ }
+ return true;
+ });
+ });
+ });
+ });
+ }
+}
+module.exports = ProvidePlugin;
|