webpack 2.2.0-rc.6 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +39 -63
  2. package/bin/webpack.js +3 -3
  3. package/buildin/harmony-module.js +0 -6
  4. package/buildin/module.js +0 -2
  5. package/lib/APIPlugin.js +2 -8
  6. package/lib/AsyncDependenciesBlock.js +46 -55
  7. package/lib/ChunkTemplate.js +25 -26
  8. package/lib/CompatibilityPlugin.js +49 -46
  9. package/lib/Compilation.js +279 -138
  10. package/lib/Compiler.js +5 -2
  11. package/lib/ConstPlugin.js +2 -6
  12. package/lib/DefinePlugin.js +9 -27
  13. package/lib/EnvironmentPlugin.js +25 -9
  14. package/lib/EvalDevToolModulePlugin.js +15 -10
  15. package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +1 -1
  16. package/lib/EvalSourceMapDevToolPlugin.js +24 -18
  17. package/lib/ExtendedAPIPlugin.js +1 -6
  18. package/lib/FlagDependencyExportsPlugin.js +72 -79
  19. package/lib/FlagInitialModulesAsUsedPlugin.js +17 -13
  20. package/lib/FunctionModulePlugin.js +17 -11
  21. package/lib/HotModuleReplacementPlugin.js +3 -13
  22. package/lib/HotUpdateChunkTemplate.js +21 -22
  23. package/lib/JsonpTemplatePlugin.js +15 -11
  24. package/lib/LibManifestPlugin.js +1 -1
  25. package/lib/LoaderTargetPlugin.js +14 -10
  26. package/lib/MainTemplate.js +193 -191
  27. package/lib/MultiWatching.js +16 -14
  28. package/lib/NoEmitOnErrorsPlugin.js +14 -11
  29. package/lib/NodeStuffPlugin.js +6 -30
  30. package/lib/NormalModuleFactory.js +2 -2
  31. package/lib/NormalModuleReplacementPlugin.js +36 -31
  32. package/lib/Parser.js +11 -8
  33. package/lib/ParserHelpers.js +19 -5
  34. package/lib/ProvidePlugin.js +2 -6
  35. package/lib/RequestShortener.js +49 -47
  36. package/lib/RequireJsStuffPlugin.js +5 -20
  37. package/lib/RuleSet.js +28 -20
  38. package/lib/SourceMapDevToolPlugin.js +1 -1
  39. package/lib/Template.js +133 -132
  40. package/lib/compareLocations.js +9 -8
  41. package/lib/dependencies/AMDPlugin.js +111 -115
  42. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +157 -154
  43. package/lib/dependencies/CommonJsPlugin.js +81 -85
  44. package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +73 -75
  45. package/lib/dependencies/ContextDependencyTemplateAsId.js +21 -18
  46. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +23 -29
  47. package/lib/dependencies/CriticalDependencyWarning.js +13 -8
  48. package/lib/dependencies/{HarmonyCompatiblilityDependency.js → HarmonyCompatibilityDependency.js} +3 -3
  49. package/lib/dependencies/HarmonyDetectionParserPlugin.js +2 -2
  50. package/lib/dependencies/HarmonyModulesPlugin.js +51 -49
  51. package/lib/dependencies/ImportParserPlugin.js +31 -28
  52. package/lib/dependencies/ImportPlugin.js +28 -24
  53. package/lib/dependencies/LocalModule.js +17 -13
  54. package/lib/dependencies/ModuleDependencyTemplateAsId.js +15 -17
  55. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +15 -17
  56. package/lib/dependencies/RequireContextPlugin.js +59 -57
  57. package/lib/dependencies/RequireEnsurePlugin.js +22 -26
  58. package/lib/dependencies/RequireIncludePlugin.js +18 -23
  59. package/lib/dependencies/RequireResolveDependencyParserPlugin.js +59 -56
  60. package/lib/dependencies/SystemPlugin.js +34 -36
  61. package/lib/dependencies/WebpackMissingModule.js +10 -18
  62. package/lib/node/NodeTargetPlugin.js +8 -5
  63. package/lib/node/NodeWatchFileSystem.js +54 -53
  64. package/lib/optimize/CommonsChunkPlugin.js +163 -166
  65. package/lib/optimize/RemoveParentModulesPlugin.js +36 -27
  66. package/lib/validateSchema.js +18 -18
  67. package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +22 -20
  68. package/package.json +13 -7
@@ -2,39 +2,44 @@
2
2
  MIT License http://www.opensource.org/licenses/mit-license.php
3
3
  Author Tobias Koppers @sokra
4
4
  */
5
+ "use strict";
5
6
 
6
- var path = require("path");
7
+ const path = require("path");
7
8
 
8
- function NormalModuleReplacementPlugin(resourceRegExp, newResource) {
9
- this.resourceRegExp = resourceRegExp;
10
- this.newResource = newResource;
11
- }
12
- module.exports = NormalModuleReplacementPlugin;
13
- NormalModuleReplacementPlugin.prototype.apply = function(compiler) {
14
- var resourceRegExp = this.resourceRegExp;
15
- var newResource = this.newResource;
16
- compiler.plugin("normal-module-factory", function(nmf) {
17
- nmf.plugin("before-resolve", function(result, callback) {
18
- if(!result) return callback();
19
- if(resourceRegExp.test(result.request)) {
20
- if(typeof newResource === "function") {
21
- newResource(result);
22
- } else {
23
- result.request = newResource;
9
+ class NormalModuleReplacementPlugin {
10
+ constructor(resourceRegExp, newResource) {
11
+ this.resourceRegExp = resourceRegExp;
12
+ this.newResource = newResource;
13
+ }
14
+
15
+ apply(compiler) {
16
+ let resourceRegExp = this.resourceRegExp;
17
+ let newResource = this.newResource;
18
+ compiler.plugin("normal-module-factory", (nmf) => {
19
+ nmf.plugin("before-resolve", (result, callback) => {
20
+ if(!result) return callback();
21
+ if(resourceRegExp.test(result.request)) {
22
+ if(typeof newResource === "function") {
23
+ newResource(result);
24
+ } else {
25
+ result.request = newResource;
26
+ }
24
27
  }
25
- }
26
- return callback(null, result);
27
- });
28
- nmf.plugin("after-resolve", function(result, callback) {
29
- if(!result) return callback();
30
- if(resourceRegExp.test(result.resource)) {
31
- if(typeof newResource === "function") {
32
- newResource(result);
33
- } else {
34
- result.resource = path.resolve(path.dirname(result.resource), newResource);
28
+ return callback(null, result);
29
+ });
30
+ nmf.plugin("after-resolve", (result, callback) => {
31
+ if(!result) return callback();
32
+ if(resourceRegExp.test(result.resource)) {
33
+ if(typeof newResource === "function") {
34
+ newResource(result);
35
+ } else {
36
+ result.resource = path.resolve(path.dirname(result.resource), newResource);
37
+ }
35
38
  }
36
- }
37
- return callback(null, result);
39
+ return callback(null, result);
40
+ });
38
41
  });
39
- });
40
- };
42
+ }
43
+ }
44
+
45
+ module.exports = NormalModuleReplacementPlugin;
package/lib/Parser.js CHANGED
@@ -421,6 +421,8 @@ Parser.prototype.walkStatements = function walkStatements(statements) {
421
421
  Parser.prototype.isHoistedStatement = function isHoistedStatement(statement) {
422
422
  switch(statement.type) {
423
423
  case "ImportDeclaration":
424
+ case "ExportAllDeclaration":
425
+ case "ExportNamedDeclaration":
424
426
  return true;
425
427
  }
426
428
  return false;
@@ -621,7 +623,7 @@ Parser.prototype.walkExportDefaultDeclaration = function walkExportDefaultDeclar
621
623
  Parser.prototype.walkExportAllDeclaration = function walkExportAllDeclaration(statement) {
622
624
  var source = statement.source.value;
623
625
  this.applyPluginsBailResult("export import", statement, source);
624
- this.applyPluginsBailResult("export import specifier", statement, source, null, null);
626
+ this.applyPluginsBailResult("export import specifier", statement, source, null, null, 0);
625
627
  };
626
628
 
627
629
  Parser.prototype.walkVariableDeclaration = function walkVariableDeclaration(statement) {
@@ -842,9 +844,9 @@ Parser.prototype.walkClassExpression = function walkClassExpression(expression)
842
844
  Parser.prototype.walkCallExpression = function walkCallExpression(expression) {
843
845
  var result;
844
846
 
845
- function walkIIFE(functionExpression, args) {
847
+ function walkIIFE(functionExpression, options) {
846
848
  var params = functionExpression.params;
847
- args = args.map(function(arg) {
849
+ var args = options.map(function(arg) {
848
850
  var renameIdentifier = this.getRenameIdentifier(arg);
849
851
  if(renameIdentifier && this.applyPluginsBailResult1("can-rename " + renameIdentifier, arg)) {
850
852
  if(!this.applyPluginsBailResult1("rename " + renameIdentifier, arg))
@@ -855,11 +857,12 @@ Parser.prototype.walkCallExpression = function walkCallExpression(expression) {
855
857
  this.inScope(params.filter(function(identifier, idx) {
856
858
  return !args[idx];
857
859
  }), function() {
858
- args.forEach(function(arg, idx) {
859
- if(!arg) return;
860
- if(!params[idx] || params[idx].type !== "Identifier") return;
861
- this.scope.renames["$" + params[idx].name] = arg;
862
- }, this);
860
+ for(var i = 0; i < args.length; i++) {
861
+ var param = args[i];
862
+ if(!param) continue;
863
+ if(!params[i] || params[i].type !== "Identifier") continue;
864
+ this.scope.renames["$" + params[i].name] = param;
865
+ }
863
866
  if(functionExpression.body.type === "BlockStatement")
864
867
  this.walkStatement(functionExpression.body);
865
868
  else
@@ -25,22 +25,28 @@ ParserHelpers.addParsedVariableToModule = function(parser, name, expression) {
25
25
  return true;
26
26
  };
27
27
 
28
- ParserHelpers.toConstantDependency = function toConstantDependency(value) {
29
- return function constantDependency(expr) {
30
- var dep = new ConstDependency(JSON.stringify(value), expr.range);
28
+ ParserHelpers.toConstantDependency = function(value) {
29
+ return function constDependency(expr) {
30
+ var dep = new ConstDependency(value, expr.range);
31
31
  dep.loc = expr.loc;
32
32
  this.state.current.addDependency(dep);
33
33
  return true;
34
34
  };
35
35
  };
36
36
 
37
- ParserHelpers.evaluateToString = function evaluateToString(value) {
37
+ ParserHelpers.evaluateToString = function(value) {
38
38
  return function stringExpression(expr) {
39
39
  return new BasicEvaluatedExpression().setString(value).setRange(expr.range);
40
40
  };
41
41
  };
42
42
 
43
- ParserHelpers.expressionIsUnsupported = function expressionIsUnsupported(message) {
43
+ ParserHelpers.evaluateToBoolean = function(value) {
44
+ return function booleanExpression(expr) {
45
+ return new BasicEvaluatedExpression().setBoolean(value).setRange(expr.range);
46
+ };
47
+ };
48
+
49
+ ParserHelpers.expressionIsUnsupported = function(message) {
44
50
  return function unsupportedExpression(expr) {
45
51
  var dep = new ConstDependency("(void 0)", expr.range);
46
52
  dep.loc = expr.loc;
@@ -50,3 +56,11 @@ ParserHelpers.expressionIsUnsupported = function expressionIsUnsupported(message
50
56
  return true;
51
57
  };
52
58
  };
59
+
60
+ ParserHelpers.skipTraversal = function skipTraversal() {
61
+ return true;
62
+ };
63
+
64
+ ParserHelpers.approve = function approve() {
65
+ return true;
66
+ };
@@ -23,9 +23,7 @@ ProvidePlugin.prototype.apply = function(compiler) {
23
23
  if(splittedName.length > 0) {
24
24
  splittedName.slice(1).forEach(function(_, i) {
25
25
  var name = splittedName.slice(0, i + 1).join(".");
26
- parser.plugin("can-rename " + name, function() {
27
- return true;
28
- });
26
+ parser.plugin("can-rename " + name, ParserHelpers.approve);
29
27
  });
30
28
  }
31
29
  parser.plugin("expression " + name, function(expr) {
@@ -44,9 +42,7 @@ ProvidePlugin.prototype.apply = function(compiler) {
44
42
  return false;
45
43
  }
46
44
  if(scopedName) {
47
- var dep = new ConstDependency(nameIdentifier, expr.range);
48
- dep.loc = expr.loc;
49
- this.state.current.addDependency(dep);
45
+ ParserHelpers.toConstantDependency(nameIdentifier).bind(this)(expr);
50
46
  }
51
47
  return true;
52
48
  });
@@ -2,55 +2,57 @@
2
2
  MIT License http://www.opensource.org/licenses/mit-license.php
3
3
  Author Tobias Koppers @sokra
4
4
  */
5
- var path = require("path");
6
-
7
- function RequestShortener(directory) {
8
- directory = directory.replace(/\\/g, "/");
9
- var parentDirectory = path.dirname(directory);
10
- if(/[\/\\]$/.test(directory)) directory = directory.substr(0, directory.length - 1);
11
- if(directory) {
12
- var currentDirectoryRegExp = directory.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
13
- currentDirectoryRegExp = new RegExp("^" + currentDirectoryRegExp + "|(!)" + currentDirectoryRegExp, "g");
14
-
15
- this.currentDirectoryRegExp = currentDirectoryRegExp;
5
+ "use strict";
6
+
7
+ const path = require("path");
8
+
9
+ class RequestShortener {
10
+ constructor(directory) {
11
+ directory = directory.replace(/\\/g, "/");
12
+ let parentDirectory = path.dirname(directory);
13
+ if(/[\/\\]$/.test(directory)) directory = directory.substr(0, directory.length - 1);
14
+
15
+ if(directory) {
16
+ let currentDirectoryRegExp = directory.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
17
+ currentDirectoryRegExp = new RegExp("^" + currentDirectoryRegExp + "|(!)" + currentDirectoryRegExp, "g");
18
+ this.currentDirectoryRegExp = currentDirectoryRegExp;
19
+ }
20
+
21
+ if(/[\/\\]$/.test(parentDirectory)) parentDirectory = parentDirectory.substr(0, parentDirectory.length - 1);
22
+ if(parentDirectory && parentDirectory !== directory) {
23
+ let parentDirectoryRegExp = parentDirectory.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
24
+ parentDirectoryRegExp = new RegExp("^" + parentDirectoryRegExp + "|(!)" + parentDirectoryRegExp, "g");
25
+ this.parentDirectoryRegExp = parentDirectoryRegExp;
26
+ }
27
+
28
+ if(__dirname.length >= 2) {
29
+ let buildins = path.join(__dirname, "..").replace(/\\/g, "/");
30
+ let buildinsAsModule = this.currentDirectoryRegExp && this.currentDirectoryRegExp.test(buildins);
31
+ let buildinsRegExp = buildins.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
32
+ buildinsRegExp = new RegExp("^" + buildinsRegExp + "|(!)" + buildinsRegExp, "g");
33
+ this.buildinsAsModule = buildinsAsModule;
34
+ this.buildinsRegExp = buildinsRegExp;
35
+ }
36
+
37
+ this.nodeModulesRegExp = /\/node_modules\//g;
38
+ this.indexJsRegExp = /\/index.js(!|\?|\(query\))/g;
16
39
  }
17
40
 
18
- if(/[\/\\]$/.test(parentDirectory)) parentDirectory = parentDirectory.substr(0, parentDirectory.length - 1);
19
- if(parentDirectory && parentDirectory !== directory) {
20
- var parentDirectoryRegExp = parentDirectory.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
21
- parentDirectoryRegExp = new RegExp("^" + parentDirectoryRegExp + "|(!)" + parentDirectoryRegExp, "g");
22
-
23
- this.parentDirectoryRegExp = parentDirectoryRegExp;
41
+ shorten(request) {
42
+ if(!request) return request;
43
+ request = request.replace(/\\/g, "/");
44
+ if(this.buildinsAsModule && this.buildinsRegExp)
45
+ request = request.replace(this.buildinsRegExp, "!(webpack)");
46
+ if(this.currentDirectoryRegExp)
47
+ request = request.replace(this.currentDirectoryRegExp, "!.");
48
+ if(this.parentDirectoryRegExp)
49
+ request = request.replace(this.parentDirectoryRegExp, "!..");
50
+ if(!this.buildinsAsModule && this.buildinsRegExp)
51
+ request = request.replace(this.buildinsRegExp, "!(webpack)");
52
+ request = request.replace(this.nodeModulesRegExp, "/~/");
53
+ request = request.replace(this.indexJsRegExp, "$1");
54
+ return request.replace(/^!|!$/, "");
24
55
  }
25
-
26
- if(__dirname.length >= 2) {
27
- var buildins = path.join(__dirname, "..").replace(/\\/g, "/");
28
- var buildinsAsModule = currentDirectoryRegExp && currentDirectoryRegExp.test(buildins);
29
- var buildinsRegExp = buildins.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
30
- buildinsRegExp = new RegExp("^" + buildinsRegExp + "|(!)" + buildinsRegExp, "g");
31
-
32
- this.buildinsAsModule = buildinsAsModule;
33
- this.buildinsRegExp = buildinsRegExp;
34
- }
35
-
36
- this.nodeModulesRegExp = /\/node_modules\//g;
37
- this.indexJsRegExp = /\/index.js(!|\?|\(query\))/g;
38
56
  }
39
- module.exports = RequestShortener;
40
57
 
41
- RequestShortener.prototype.shorten = function(request) {
42
- if(!request)
43
- return request;
44
- request = request.replace(/\\/g, "/");
45
- if(this.buildinsAsModule && this.buildinsRegExp)
46
- request = request.replace(this.buildinsRegExp, "!(webpack)");
47
- if(this.currentDirectoryRegExp)
48
- request = request.replace(this.currentDirectoryRegExp, "!.");
49
- if(this.parentDirectoryRegExp)
50
- request = request.replace(this.parentDirectoryRegExp, "!..");
51
- if(!this.buildinsAsModule && this.buildinsRegExp)
52
- request = request.replace(this.buildinsRegExp, "!(webpack)");
53
- request = request.replace(this.nodeModulesRegExp, "/~/");
54
- request = request.replace(this.indexJsRegExp, "$1");
55
- return request.replace(/^!|!$/, "");
56
- };
58
+ module.exports = RequestShortener;
@@ -4,6 +4,7 @@
4
4
  */
5
5
  "use strict";
6
6
 
7
+ const ParserHelpers = require("./ParserHelpers");
7
8
  const ConstDependency = require("./dependencies/ConstDependency");
8
9
  const NullFactory = require("./NullFactory");
9
10
 
@@ -18,27 +19,11 @@ module.exports = class RequireJsStuffPlugin {
18
19
  if(typeof parserOptions.requireJs !== "undefined" && !parserOptions.requireJs)
19
20
  return;
20
21
 
21
- function remove(expr) {
22
- var dep = new ConstDependency(";", expr.range);
23
- dep.loc = expr.loc;
24
- this.state.current.addDependency(dep);
25
- return true;
26
- }
27
- parser.plugin("call require.config", remove);
28
- parser.plugin("call requirejs.config", remove);
22
+ parser.plugin("call require.config", ParserHelpers.toConstantDependency("undefined"));
23
+ parser.plugin("call requirejs.config", ParserHelpers.toConstantDependency("undefined"));
29
24
 
30
- parser.plugin("expression require.version", function(expr) {
31
- var dep = new ConstDependency(JSON.stringify("0.0.0"), expr.range);
32
- dep.loc = expr.loc;
33
- this.state.current.addDependency(dep);
34
- return true;
35
- });
36
- parser.plugin("expression requirejs.onError", function(expr) {
37
- var dep = new ConstDependency(JSON.stringify("__webpack_require__.oe"), expr.range);
38
- dep.loc = expr.loc;
39
- this.state.current.addDependency(dep);
40
- return true;
41
- });
25
+ parser.plugin("expression require.version", ParserHelpers.toConstantDependency(JSON.stringify("0.0.0")));
26
+ parser.plugin("expression requirejs.onError", ParserHelpers.toConstantDependency(JSON.stringify("__webpack_require__.oe")));
42
27
  });
43
28
  });
44
29
  }
package/lib/RuleSet.js CHANGED
@@ -69,27 +69,28 @@ normalized:
69
69
  }
70
70
 
71
71
  */
72
+ "use strict";
72
73
 
73
74
  function RuleSet(rules) {
74
- this.references = {};
75
- this.rules = RuleSet.normalizeRules(rules, this.references);
75
+ this.references = Object.create(null);
76
+ this.rules = RuleSet.normalizeRules(rules, this.references, "ref-");
76
77
  }
77
78
 
78
79
  module.exports = RuleSet;
79
80
 
80
- RuleSet.normalizeRules = function(rules, refs) {
81
+ RuleSet.normalizeRules = function(rules, refs, ident) {
81
82
  if(Array.isArray(rules)) {
82
- return rules.map(function(rule) {
83
- return RuleSet.normalizeRule(rule, refs);
83
+ return rules.map(function(rule, idx) {
84
+ return RuleSet.normalizeRule(rule, refs, `${ident}-${idx}`);
84
85
  });
85
86
  } else if(rules) {
86
- return [RuleSet.normalizeRule(rules, refs)];
87
+ return [RuleSet.normalizeRule(rules, refs, ident)];
87
88
  } else {
88
89
  return [];
89
90
  }
90
91
  };
91
92
 
92
- RuleSet.normalizeRule = function(rule, refs) {
93
+ RuleSet.normalizeRule = function(rule, refs, ident) {
93
94
  if(typeof rule === "string")
94
95
  return {
95
96
  use: [{
@@ -151,33 +152,33 @@ RuleSet.normalizeRule = function(rule, refs) {
151
152
  var loader = rule.loaders || rule.loader;
152
153
  if(typeof loader === "string" && !rule.options && !rule.query) {
153
154
  checkUseSource("loader");
154
- newRule.use = RuleSet.normalizeUse(loader.split("!"));
155
+ newRule.use = RuleSet.normalizeUse(loader.split("!"), ident);
155
156
  } else if(typeof loader === "string" && (rule.options || rule.query)) {
156
157
  checkUseSource("loader + options/query");
157
158
  newRule.use = RuleSet.normalizeUse({
158
159
  loader: loader,
159
160
  options: rule.options,
160
161
  query: rule.query
161
- });
162
+ }, ident);
162
163
  } else if(loader && (rule.options || rule.query)) {
163
164
  throw new Error(RuleSet.buildErrorMessage(rule, new Error("options/query cannot be used with loaders (use options for each array item)")));
164
165
  } else if(loader) {
165
166
  checkUseSource("loaders");
166
- newRule.use = RuleSet.normalizeUse(loader);
167
+ newRule.use = RuleSet.normalizeUse(loader, ident);
167
168
  } else if(rule.options || rule.query) {
168
169
  throw new Error(RuleSet.buildErrorMessage(rule, new Error("options/query provided without loader (use loader + options)")));
169
170
  }
170
171
 
171
172
  if(rule.use) {
172
173
  checkUseSource("use");
173
- newRule.use = RuleSet.normalizeUse(rule.use);
174
+ newRule.use = RuleSet.normalizeUse(rule.use, ident);
174
175
  }
175
176
 
176
177
  if(rule.rules)
177
- newRule.rules = RuleSet.normalizeRules(rule.rules, refs);
178
+ newRule.rules = RuleSet.normalizeRules(rule.rules, refs, `${ident}-rules`);
178
179
 
179
180
  if(rule.oneOf)
180
- newRule.oneOf = RuleSet.normalizeRules(rule.oneOf, refs);
181
+ newRule.oneOf = RuleSet.normalizeRules(rule.oneOf, refs, `${ident}-oneOf`);
181
182
 
182
183
  var keys = Object.keys(rule).filter(function(key) {
183
184
  return ["resource", "resourceQuery", "test", "include", "exclude", "issuer", "loader", "options", "query", "loaders", "use", "rules", "oneOf"].indexOf(key) < 0;
@@ -200,8 +201,8 @@ RuleSet.normalizeRule = function(rule, refs) {
200
201
 
201
202
  if(Array.isArray(newRule.use)) {
202
203
  newRule.use.forEach(function(item) {
203
- if(typeof item.options === "object" && item.options && item.options.ident) {
204
- refs["$" + item.options.ident] = item.options;
204
+ if(item.ident) {
205
+ refs[item.ident] = item.options;
205
206
  }
206
207
  });
207
208
  }
@@ -217,13 +218,13 @@ RuleSet.buildErrorMessage = function buildErrorMessage(condition, error) {
217
218
  return message;
218
219
  };
219
220
 
220
- RuleSet.normalizeUse = function normalizeUse(use) {
221
+ RuleSet.normalizeUse = function normalizeUse(use, ident) {
221
222
  if(Array.isArray(use)) {
222
- return use.map(RuleSet.normalizeUse).reduce(function(arr, items) {
223
+ return use.map((item, idx) => RuleSet.normalizeUse(item, `${ident}-${idx}`)).reduce(function(arr, items) {
223
224
  return arr.concat(items);
224
225
  }, []);
225
226
  }
226
- return [RuleSet.normalizeUseItem(use)];
227
+ return [RuleSet.normalizeUseItem(use, ident)];
227
228
  };
228
229
 
229
230
  RuleSet.normalizeUseItemFunction = function normalizeUseItemFunction(use, data) {
@@ -247,7 +248,7 @@ RuleSet.normalizeUseItemString = function normalizeUseItemString(useItemString)
247
248
  };
248
249
  };
249
250
 
250
- RuleSet.normalizeUseItem = function normalizeUseItem(item) {
251
+ RuleSet.normalizeUseItem = function normalizeUseItem(item, ident) {
251
252
  if(typeof item === "function")
252
253
  return item;
253
254
 
@@ -265,6 +266,13 @@ RuleSet.normalizeUseItem = function normalizeUseItem(item) {
265
266
 
266
267
  newItem.options = item.options || item.query;
267
268
 
269
+ if(typeof newItem.options === "object" && newItem.options) {
270
+ if(newItem.options.ident)
271
+ newItem.ident = newItem.options.ident;
272
+ else
273
+ newItem.ident = ident;
274
+ }
275
+
268
276
  var keys = Object.keys(item).filter(function(key) {
269
277
  return ["options", "query"].indexOf(key) < 0;
270
278
  });
@@ -423,7 +431,7 @@ RuleSet.prototype._run = function _run(data, rule, result) {
423
431
  };
424
432
 
425
433
  RuleSet.prototype.findOptionsByIdent = function findOptionsByIdent(ident) {
426
- var options = this.references["$" + ident];
434
+ var options = this.references[ident];
427
435
  if(!options) throw new Error("Can't find options with ident '" + ident + "'");
428
436
  return options;
429
437
  };
@@ -155,7 +155,7 @@ SourceMapDevToolPlugin.prototype.apply = function(compiler) {
155
155
  })
156
156
  .replace(/\[url\]/g, function() {
157
157
  return "data:application/json;charset=utf-8;base64," +
158
- Buffer.from(JSON.stringify(sourceMap)).toString("base64");
158
+ new Buffer(JSON.stringify(sourceMap), "utf8").toString("base64"); //eslint-disable-line
159
159
  })
160
160
  );
161
161
  }