Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Refactor(ES6): ProvidePlugin
  • Loading branch information
sendilkumarn committed Feb 22, 2017
commit a2c5d79b8a72829e31dad25db9a2a7bb596a602f
88 changes: 46 additions & 42 deletions lib/ProvidePlugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,51 +2,55 @@
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
var ParserHelpers = require("./ParserHelpers");
var ConstDependency = require("./dependencies/ConstDependency");
"use strict";

var NullFactory = require("./NullFactory");
const ParserHelpers = require("./ParserHelpers");
const ConstDependency = require("./dependencies/ConstDependency");

function ProvidePlugin(definitions) {
this.definitions = definitions;
}
module.exports = ProvidePlugin;
ProvidePlugin.prototype.apply = function(compiler) {
var definitions = this.definitions;
compiler.plugin("compilation", function(compilation, params) {
compilation.dependencyFactories.set(ConstDependency, new NullFactory());
compilation.dependencyTemplates.set(ConstDependency, new ConstDependency.Template());
params.normalModuleFactory.plugin("parser", function(parser, parserOptions) {
Object.keys(definitions).forEach(function(name) {
var request = [].concat(definitions[name]);
var splittedName = name.split(".");
if(splittedName.length > 0) {
splittedName.slice(1).forEach(function(_, i) {
var name = splittedName.slice(0, i + 1).join(".");
parser.plugin("can-rename " + name, ParserHelpers.approve);
});
}
parser.plugin("expression " + name, function(expr) {
var nameIdentifier = name;
var scopedName = name.indexOf(".") >= 0;
var expression = "require(" + JSON.stringify(request[0]) + ")";
if(scopedName) {
nameIdentifier = "__webpack_provided_" + name.replace(/\./g, "_dot_");
}
if(request.length > 1) {
expression += request.slice(1).map(function(r) {
return "[" + JSON.stringify(r) + "]";
}).join("");
}
if(!ParserHelpers.addParsedVariableToModule(this, nameIdentifier, expression)) {
return false;
}
if(scopedName) {
ParserHelpers.toConstantDependency(nameIdentifier).bind(this)(expr);
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);
});
}
return true;
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;