webpack 3.8.1 → 3.11.0

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 (219) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +721 -716
  3. package/bin/webpack.js +12 -8
  4. package/buildin/.eslintrc +7 -7
  5. package/buildin/amd-define.js +3 -3
  6. package/buildin/amd-options.js +2 -2
  7. package/buildin/global.js +21 -21
  8. package/buildin/harmony-module.js +24 -24
  9. package/buildin/module.js +22 -22
  10. package/buildin/system.js +7 -7
  11. package/hot/.eslintrc +9 -9
  12. package/hot/dev-server.js +53 -53
  13. package/hot/emitter.js +2 -2
  14. package/hot/log-apply-result.js +38 -38
  15. package/hot/log.js +44 -44
  16. package/hot/only-dev-server.js +71 -71
  17. package/hot/poll.js +34 -34
  18. package/hot/signal.js +52 -51
  19. package/lib/APIPlugin.js +45 -45
  20. package/lib/AsyncDependenciesBlock.js +43 -43
  21. package/lib/AutomaticPrefetchPlugin.js +36 -36
  22. package/lib/BannerPlugin.js +4 -2
  23. package/lib/BasicEvaluatedExpression.js +203 -203
  24. package/lib/CaseSensitiveModulesWarning.js +49 -49
  25. package/lib/Chunk.js +2 -2
  26. package/lib/ChunkRenderError.js +24 -24
  27. package/lib/ChunkTemplate.js +36 -36
  28. package/lib/CompatibilityPlugin.js +57 -57
  29. package/lib/Compilation.js +81 -92
  30. package/lib/Compiler.js +519 -523
  31. package/lib/ConstPlugin.js +60 -60
  32. package/lib/ContextModule.js +431 -431
  33. package/lib/ContextReplacementPlugin.js +111 -111
  34. package/lib/DefinePlugin.js +123 -123
  35. package/lib/DelegatedModule.js +98 -98
  36. package/lib/DelegatedModuleFactoryPlugin.js +59 -59
  37. package/lib/DelegatedPlugin.js +30 -30
  38. package/lib/DependenciesBlockVariable.js +51 -51
  39. package/lib/DllEntryPlugin.js +37 -37
  40. package/lib/DllModule.js +58 -58
  41. package/lib/DllModuleFactory.js +20 -20
  42. package/lib/DllPlugin.js +38 -38
  43. package/lib/DllReferencePlugin.js +62 -62
  44. package/lib/DynamicEntryPlugin.js +59 -59
  45. package/lib/EntryModuleNotFoundError.js +22 -22
  46. package/lib/EntryOptionPlugin.js +31 -31
  47. package/lib/EnvironmentPlugin.js +60 -50
  48. package/lib/ErrorHelpers.js +31 -31
  49. package/lib/EvalDevToolModulePlugin.js +22 -22
  50. package/lib/EvalDevToolModuleTemplatePlugin.js +33 -33
  51. package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +75 -75
  52. package/lib/EvalSourceMapDevToolPlugin.js +32 -32
  53. package/lib/ExportPropertyMainTemplatePlugin.js +31 -31
  54. package/lib/ExtendedAPIPlugin.js +47 -47
  55. package/lib/ExternalModuleFactoryPlugin.js +91 -91
  56. package/lib/ExternalsPlugin.js +21 -21
  57. package/lib/FlagDependencyExportsPlugin.js +101 -101
  58. package/lib/FlagDependencyUsagePlugin.js +1 -1
  59. package/lib/FunctionModulePlugin.js +24 -24
  60. package/lib/HashedModuleIdsPlugin.js +42 -42
  61. package/lib/HotModuleReplacementPlugin.js +5 -5
  62. package/lib/HotUpdateChunkTemplate.js +31 -31
  63. package/lib/IgnorePlugin.js +69 -69
  64. package/lib/JsonpExportMainTemplatePlugin.js +37 -37
  65. package/lib/JsonpHotUpdateChunkTemplatePlugin.js +27 -27
  66. package/lib/JsonpMainTemplatePlugin.js +4 -3
  67. package/lib/JsonpTemplatePlugin.js +21 -21
  68. package/lib/LibManifestPlugin.js +63 -63
  69. package/lib/LibraryTemplatePlugin.js +92 -92
  70. package/lib/LoaderOptionsPlugin.js +36 -36
  71. package/lib/LoaderTargetPlugin.js +19 -19
  72. package/lib/MainTemplate.js +3 -1
  73. package/lib/MemoryOutputFileSystem.js +5 -5
  74. package/lib/ModuleBuildError.js +42 -42
  75. package/lib/ModuleDependencyError.js +22 -22
  76. package/lib/ModuleDependencyWarning.js +22 -22
  77. package/lib/ModuleError.js +24 -24
  78. package/lib/ModuleFilenameHelpers.js +162 -162
  79. package/lib/ModuleNotFoundError.js +26 -26
  80. package/lib/ModuleReason.js +50 -50
  81. package/lib/ModuleTemplate.js +23 -23
  82. package/lib/ModuleWarning.js +24 -24
  83. package/lib/MovedToPluginWarningPlugin.js +21 -21
  84. package/lib/MultiCompiler.js +164 -164
  85. package/lib/MultiEntryPlugin.js +39 -39
  86. package/lib/MultiModuleFactory.js +19 -19
  87. package/lib/MultiStats.js +79 -79
  88. package/lib/MultiWatching.js +32 -32
  89. package/lib/NamedChunksPlugin.js +30 -30
  90. package/lib/NamedModulesPlugin.js +27 -27
  91. package/lib/NewWatchingPlugin.js +15 -15
  92. package/lib/NoEmitOnErrorsPlugin.js +22 -22
  93. package/lib/NoErrorsPlugin.js +29 -29
  94. package/lib/NodeStuffPlugin.js +97 -97
  95. package/lib/NormalModuleFactory.js +3 -1
  96. package/lib/NormalModuleReplacementPlugin.js +45 -45
  97. package/lib/NullFactory.js +12 -12
  98. package/lib/OptionsApply.js +10 -10
  99. package/lib/OptionsDefaulter.js +2 -2
  100. package/lib/Parser.js +79 -0
  101. package/lib/ParserHelpers.js +85 -85
  102. package/lib/PrefetchPlugin.js +31 -31
  103. package/lib/ProgressPlugin.js +192 -192
  104. package/lib/ProvidePlugin.js +55 -55
  105. package/lib/RawModule.js +54 -54
  106. package/lib/RequestShortener.js +63 -63
  107. package/lib/RequireJsStuffPlugin.js +31 -31
  108. package/lib/RuleSet.js +444 -444
  109. package/lib/SetVarMainTemplatePlugin.js +41 -41
  110. package/lib/SingleEntryPlugin.js +35 -35
  111. package/lib/SizeFormatHelpers.js +18 -18
  112. package/lib/SourceMapDevToolModuleOptionsPlugin.js +37 -37
  113. package/lib/SourceMapDevToolPlugin.js +3 -3
  114. package/lib/Stats.js +4 -2
  115. package/lib/TemplatedPathPlugin.js +6 -2
  116. package/lib/UmdMainTemplatePlugin.js +1 -1
  117. package/lib/UnsupportedFeatureWarning.js +21 -21
  118. package/lib/UseStrictPlugin.js +34 -34
  119. package/lib/WarnCaseSensitiveModulesPlugin.js +31 -31
  120. package/lib/WatchIgnorePlugin.js +49 -49
  121. package/lib/WebpackError.js +11 -11
  122. package/lib/WebpackOptionsDefaulter.js +130 -129
  123. package/lib/WebpackOptionsValidationError.js +219 -196
  124. package/lib/compareLocations.js +36 -36
  125. package/lib/dependencies/AMDDefineDependency.js +142 -142
  126. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +18 -6
  127. package/lib/dependencies/AMDPlugin.js +119 -119
  128. package/lib/dependencies/AMDRequireDependenciesBlock.js +33 -33
  129. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +177 -177
  130. package/lib/dependencies/AMDRequireDependency.js +67 -67
  131. package/lib/dependencies/AMDRequireItemDependency.js +22 -22
  132. package/lib/dependencies/CommonJsRequireDependency.js +22 -22
  133. package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +89 -89
  134. package/lib/dependencies/ConstDependency.js +32 -32
  135. package/lib/dependencies/ContextDependencyHelpers.js +71 -71
  136. package/lib/dependencies/ContextElementDependency.js +21 -21
  137. package/lib/dependencies/CriticalDependencyWarning.js +20 -20
  138. package/lib/dependencies/DelegatedExportsDependency.js +33 -33
  139. package/lib/dependencies/DelegatedSourceDependency.js +18 -18
  140. package/lib/dependencies/DllEntryDependency.js +20 -20
  141. package/lib/dependencies/HarmonyCompatibilityDependency.js +30 -30
  142. package/lib/dependencies/HarmonyDetectionParserPlugin.js +2 -2
  143. package/lib/dependencies/HarmonyExportHeaderDependency.js +28 -28
  144. package/lib/dependencies/HarmonyImportDependency.js +1 -1
  145. package/lib/dependencies/ImportDependenciesBlock.js +17 -17
  146. package/lib/dependencies/ImportEagerContextDependency.js +22 -22
  147. package/lib/dependencies/ImportLazyContextDependency.js +22 -22
  148. package/lib/dependencies/ImportLazyOnceContextDependency.js +22 -22
  149. package/lib/dependencies/ImportParserPlugin.js +89 -89
  150. package/lib/dependencies/ImportPlugin.js +60 -60
  151. package/lib/dependencies/ImportWeakContextDependency.js +22 -22
  152. package/lib/dependencies/LoaderDependency.js +18 -18
  153. package/lib/dependencies/LoaderPlugin.js +60 -60
  154. package/lib/dependencies/LocalModule.js +23 -23
  155. package/lib/dependencies/LocalModuleDependency.js +24 -24
  156. package/lib/dependencies/LocalModulesHelpers.js +46 -46
  157. package/lib/dependencies/ModuleDependency.js +23 -23
  158. package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
  159. package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
  160. package/lib/dependencies/MultiEntryDependency.js +20 -20
  161. package/lib/dependencies/NullDependency.js +24 -24
  162. package/lib/dependencies/PrefetchDependency.js +18 -18
  163. package/lib/dependencies/RequireContextDependency.js +26 -26
  164. package/lib/dependencies/RequireContextDependencyParserPlugin.js +50 -50
  165. package/lib/dependencies/RequireContextPlugin.js +96 -96
  166. package/lib/dependencies/RequireEnsureDependenciesBlock.js +22 -22
  167. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +102 -102
  168. package/lib/dependencies/RequireEnsureDependency.js +38 -38
  169. package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
  170. package/lib/dependencies/RequireEnsurePlugin.js +40 -40
  171. package/lib/dependencies/RequireHeaderDependency.js +26 -26
  172. package/lib/dependencies/RequireIncludeDependency.js +8 -0
  173. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +21 -21
  174. package/lib/dependencies/RequireIncludePlugin.js +33 -33
  175. package/lib/dependencies/RequireResolveDependency.js +22 -22
  176. package/lib/dependencies/RequireResolveDependencyParserPlugin.js +71 -71
  177. package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
  178. package/lib/dependencies/SingleEntryDependency.js +18 -18
  179. package/lib/dependencies/SystemPlugin.js +44 -44
  180. package/lib/dependencies/UnsupportedDependency.js +23 -23
  181. package/lib/dependencies/WebpackMissingModule.js +18 -18
  182. package/lib/dependencies/getFunctionExpression.js +44 -44
  183. package/lib/formatLocation.js +54 -54
  184. package/lib/node/NodeChunkTemplatePlugin.js +27 -27
  185. package/lib/node/NodeEnvironmentPlugin.js +25 -25
  186. package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +27 -27
  187. package/lib/node/NodeMainTemplate.runtime.js +24 -24
  188. package/lib/node/NodeMainTemplateAsync.runtime.js +40 -40
  189. package/lib/node/NodeOutputFileSystem.js +22 -22
  190. package/lib/node/NodeSourcePlugin.js +88 -88
  191. package/lib/node/NodeTargetPlugin.js +17 -15
  192. package/lib/node/NodeTemplatePlugin.js +27 -27
  193. package/lib/node/NodeWatchFileSystem.js +72 -72
  194. package/lib/optimize/ChunkModuleIdRangePlugin.js +53 -53
  195. package/lib/optimize/ConcatenatedModule.js +17 -6
  196. package/lib/optimize/DedupePlugin.js +15 -15
  197. package/lib/optimize/FlagIncludedChunksPlugin.js +35 -35
  198. package/lib/optimize/LimitChunkCountPlugin.js +59 -59
  199. package/lib/optimize/MinChunkSizePlugin.js +65 -65
  200. package/lib/optimize/RemoveEmptyChunksPlugin.js +21 -21
  201. package/lib/optimize/UglifyJsPlugin.js +9 -9
  202. package/lib/performance/AssetsOverSizeLimitWarning.js +23 -23
  203. package/lib/performance/EntrypointsOverSizeLimitWarning.js +28 -28
  204. package/lib/performance/NoAsyncChunksWarning.js +20 -20
  205. package/lib/performance/SizeLimitsPlugin.js +102 -102
  206. package/lib/prepareOptions.js +29 -29
  207. package/lib/removeAndDo.js +15 -15
  208. package/lib/util/Semaphore.js +32 -32
  209. package/lib/util/identifier.js +38 -38
  210. package/lib/validateSchema.js +66 -66
  211. package/lib/web/WebEnvironmentPlugin.js +18 -18
  212. package/lib/webworker/WebWorkerChunkTemplatePlugin.js +29 -29
  213. package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +28 -28
  214. package/lib/webworker/WebWorkerMainTemplate.runtime.js +58 -58
  215. package/lib/webworker/WebWorkerMainTemplatePlugin.js +2 -2
  216. package/lib/webworker/WebWorkerTemplatePlugin.js +20 -20
  217. package/package.json +25 -16
  218. package/schemas/ajv.absolutePath.js +29 -29
  219. package/schemas/webpackOptionsSchema.json +405 -76
@@ -1,26 +1,26 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const ContextDependency = require("./ContextDependency");
7
- const ModuleDependencyTemplateAsRequireId = require("./ModuleDependencyTemplateAsRequireId");
8
-
9
- class RequireContextDependency extends ContextDependency {
10
- constructor(request, recursive, regExp, asyncMode, range) {
11
- super(request, recursive, regExp);
12
- this.range = range;
13
-
14
- if(asyncMode) {
15
- this.async = asyncMode;
16
- }
17
- }
18
-
19
- get type() {
20
- return "require.context";
21
- }
22
- }
23
-
24
- RequireContextDependency.Template = ModuleDependencyTemplateAsRequireId;
25
-
26
- module.exports = RequireContextDependency;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const ContextDependency = require("./ContextDependency");
7
+ const ModuleDependencyTemplateAsRequireId = require("./ModuleDependencyTemplateAsRequireId");
8
+
9
+ class RequireContextDependency extends ContextDependency {
10
+ constructor(request, recursive, regExp, asyncMode, range) {
11
+ super(request, recursive, regExp);
12
+ this.range = range;
13
+
14
+ if(asyncMode) {
15
+ this.async = asyncMode;
16
+ }
17
+ }
18
+
19
+ get type() {
20
+ return "require.context";
21
+ }
22
+ }
23
+
24
+ RequireContextDependency.Template = ModuleDependencyTemplateAsRequireId;
25
+
26
+ module.exports = RequireContextDependency;
@@ -1,50 +1,50 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const RequireContextDependency = require("./RequireContextDependency");
8
-
9
- module.exports = class RequireContextDependencyParserPlugin {
10
- apply(parser) {
11
- parser.plugin("call require.context", expr => {
12
- let regExp = /^\.\/.*$/;
13
- let recursive = true;
14
- let asyncMode;
15
- switch(expr.arguments.length) {
16
- case 4:
17
- {
18
- const asyncModeExpr = parser.evaluateExpression(expr.arguments[3]);
19
- if(!asyncModeExpr.isString()) return;
20
- asyncMode = asyncModeExpr.string;
21
- }
22
- // falls through
23
- case 3:
24
- {
25
- const regExpExpr = parser.evaluateExpression(expr.arguments[2]);
26
- if(!regExpExpr.isRegExp()) return;
27
- regExp = regExpExpr.regExp;
28
- }
29
- // falls through
30
- case 2:
31
- {
32
- const recursiveExpr = parser.evaluateExpression(expr.arguments[1]);
33
- if(!recursiveExpr.isBoolean()) return;
34
- recursive = recursiveExpr.bool;
35
- }
36
- // falls through
37
- case 1:
38
- {
39
- const requestExpr = parser.evaluateExpression(expr.arguments[0]);
40
- if(!requestExpr.isString()) return;
41
- const dep = new RequireContextDependency(requestExpr.string, recursive, regExp, asyncMode, expr.range);
42
- dep.loc = expr.loc;
43
- dep.optional = parser.scope.inTry;
44
- parser.state.current.addDependency(dep);
45
- return true;
46
- }
47
- }
48
- });
49
- }
50
- };
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const RequireContextDependency = require("./RequireContextDependency");
8
+
9
+ module.exports = class RequireContextDependencyParserPlugin {
10
+ apply(parser) {
11
+ parser.plugin("call require.context", expr => {
12
+ let regExp = /^\.\/.*$/;
13
+ let recursive = true;
14
+ let asyncMode;
15
+ switch(expr.arguments.length) {
16
+ case 4:
17
+ {
18
+ const asyncModeExpr = parser.evaluateExpression(expr.arguments[3]);
19
+ if(!asyncModeExpr.isString()) return;
20
+ asyncMode = asyncModeExpr.string;
21
+ }
22
+ // falls through
23
+ case 3:
24
+ {
25
+ const regExpExpr = parser.evaluateExpression(expr.arguments[2]);
26
+ if(!regExpExpr.isRegExp()) return;
27
+ regExp = regExpExpr.regExp;
28
+ }
29
+ // falls through
30
+ case 2:
31
+ {
32
+ const recursiveExpr = parser.evaluateExpression(expr.arguments[1]);
33
+ if(!recursiveExpr.isBoolean()) return;
34
+ recursive = recursiveExpr.bool;
35
+ }
36
+ // falls through
37
+ case 1:
38
+ {
39
+ const requestExpr = parser.evaluateExpression(expr.arguments[0]);
40
+ if(!requestExpr.isString()) return;
41
+ const dep = new RequireContextDependency(requestExpr.string, recursive, regExp, asyncMode, expr.range);
42
+ dep.loc = expr.loc;
43
+ dep.optional = parser.scope.inTry;
44
+ parser.state.current.addDependency(dep);
45
+ return true;
46
+ }
47
+ }
48
+ });
49
+ }
50
+ };
@@ -1,96 +1,96 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const RequireContextDependency = require("./RequireContextDependency");
8
- const ContextElementDependency = require("./ContextElementDependency");
9
-
10
- const RequireContextDependencyParserPlugin = require("./RequireContextDependencyParserPlugin");
11
-
12
- class RequireContextPlugin {
13
- constructor(modulesDirectories, extensions, mainFiles) {
14
- if(!Array.isArray(modulesDirectories))
15
- throw new Error("modulesDirectories must be an array");
16
- if(!Array.isArray(extensions))
17
- throw new Error("extensions must be an array");
18
- this.modulesDirectories = modulesDirectories;
19
- this.extensions = extensions;
20
- this.mainFiles = mainFiles;
21
- }
22
-
23
- apply(compiler) {
24
- compiler.plugin("compilation", (compilation, params) => {
25
- const contextModuleFactory = params.contextModuleFactory;
26
- const normalModuleFactory = params.normalModuleFactory;
27
-
28
- compilation.dependencyFactories.set(RequireContextDependency, contextModuleFactory);
29
- compilation.dependencyTemplates.set(RequireContextDependency, new RequireContextDependency.Template());
30
-
31
- compilation.dependencyFactories.set(ContextElementDependency, normalModuleFactory);
32
-
33
- params.normalModuleFactory.plugin("parser", (parser, parserOptions) => {
34
-
35
- if(typeof parserOptions.requireContext !== "undefined" && !parserOptions.requireContext)
36
- return;
37
-
38
- parser.apply(new RequireContextDependencyParserPlugin());
39
- });
40
-
41
- params.contextModuleFactory.plugin("alternatives", (items, callback) => {
42
- if(items.length === 0) return callback(null, items);
43
-
44
- callback(null, items.map((obj) => {
45
- return this.extensions.filter((ext) => {
46
- const l = obj.request.length;
47
- return l > ext.length && obj.request.substr(l - ext.length, l) === ext;
48
- }).map((ext) => {
49
- const l = obj.request.length;
50
- return {
51
- context: obj.context,
52
- request: obj.request.substr(0, l - ext.length)
53
- };
54
- }).concat(obj);
55
- }).reduce((a, b) => a.concat(b), []));
56
- });
57
-
58
- params.contextModuleFactory.plugin("alternatives", (items, callback) => {
59
- if(items.length === 0) return callback(null, items);
60
-
61
- callback(null, items.map((obj) => {
62
- return this.mainFiles.filter((mainFile) => {
63
- const l = obj.request.length;
64
- return l > mainFile.length + 1 && obj.request.substr(l - mainFile.length - 1, l) === "/" + mainFile;
65
- }).map((mainFile) => {
66
- const l = obj.request.length;
67
- return [{
68
- context: obj.context,
69
- request: obj.request.substr(0, l - mainFile.length)
70
- }, {
71
- context: obj.context,
72
- request: obj.request.substr(0, l - mainFile.length - 1)
73
- }];
74
- }).reduce((a, b) => a.concat(b), []).concat(obj);
75
- }).reduce((a, b) => a.concat(b), []));
76
- });
77
-
78
- params.contextModuleFactory.plugin("alternatives", (items, callback) => {
79
- if(items.length === 0) return callback(null, items);
80
-
81
- callback(null, items.map((obj) => {
82
- for(let i = 0; i < this.modulesDirectories.length; i++) {
83
- const dir = this.modulesDirectories[i];
84
- const idx = obj.request.indexOf("./" + dir + "/");
85
- if(idx === 0) {
86
- obj.request = obj.request.slice(dir.length + 3);
87
- break;
88
- }
89
- }
90
- return obj;
91
- }));
92
- });
93
- });
94
- }
95
- }
96
- module.exports = RequireContextPlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const RequireContextDependency = require("./RequireContextDependency");
8
+ const ContextElementDependency = require("./ContextElementDependency");
9
+
10
+ const RequireContextDependencyParserPlugin = require("./RequireContextDependencyParserPlugin");
11
+
12
+ class RequireContextPlugin {
13
+ constructor(modulesDirectories, extensions, mainFiles) {
14
+ if(!Array.isArray(modulesDirectories))
15
+ throw new Error("modulesDirectories must be an array");
16
+ if(!Array.isArray(extensions))
17
+ throw new Error("extensions must be an array");
18
+ this.modulesDirectories = modulesDirectories;
19
+ this.extensions = extensions;
20
+ this.mainFiles = mainFiles;
21
+ }
22
+
23
+ apply(compiler) {
24
+ compiler.plugin("compilation", (compilation, params) => {
25
+ const contextModuleFactory = params.contextModuleFactory;
26
+ const normalModuleFactory = params.normalModuleFactory;
27
+
28
+ compilation.dependencyFactories.set(RequireContextDependency, contextModuleFactory);
29
+ compilation.dependencyTemplates.set(RequireContextDependency, new RequireContextDependency.Template());
30
+
31
+ compilation.dependencyFactories.set(ContextElementDependency, normalModuleFactory);
32
+
33
+ params.normalModuleFactory.plugin("parser", (parser, parserOptions) => {
34
+
35
+ if(typeof parserOptions.requireContext !== "undefined" && !parserOptions.requireContext)
36
+ return;
37
+
38
+ parser.apply(new RequireContextDependencyParserPlugin());
39
+ });
40
+
41
+ params.contextModuleFactory.plugin("alternatives", (items, callback) => {
42
+ if(items.length === 0) return callback(null, items);
43
+
44
+ callback(null, items.map((obj) => {
45
+ return this.extensions.filter((ext) => {
46
+ const l = obj.request.length;
47
+ return l > ext.length && obj.request.substr(l - ext.length, l) === ext;
48
+ }).map((ext) => {
49
+ const l = obj.request.length;
50
+ return {
51
+ context: obj.context,
52
+ request: obj.request.substr(0, l - ext.length)
53
+ };
54
+ }).concat(obj);
55
+ }).reduce((a, b) => a.concat(b), []));
56
+ });
57
+
58
+ params.contextModuleFactory.plugin("alternatives", (items, callback) => {
59
+ if(items.length === 0) return callback(null, items);
60
+
61
+ callback(null, items.map((obj) => {
62
+ return this.mainFiles.filter((mainFile) => {
63
+ const l = obj.request.length;
64
+ return l > mainFile.length + 1 && obj.request.substr(l - mainFile.length - 1, l) === "/" + mainFile;
65
+ }).map((mainFile) => {
66
+ const l = obj.request.length;
67
+ return [{
68
+ context: obj.context,
69
+ request: obj.request.substr(0, l - mainFile.length)
70
+ }, {
71
+ context: obj.context,
72
+ request: obj.request.substr(0, l - mainFile.length - 1)
73
+ }];
74
+ }).reduce((a, b) => a.concat(b), []).concat(obj);
75
+ }).reduce((a, b) => a.concat(b), []));
76
+ });
77
+
78
+ params.contextModuleFactory.plugin("alternatives", (items, callback) => {
79
+ if(items.length === 0) return callback(null, items);
80
+
81
+ callback(null, items.map((obj) => {
82
+ for(let i = 0; i < this.modulesDirectories.length; i++) {
83
+ const dir = this.modulesDirectories[i];
84
+ const idx = obj.request.indexOf("./" + dir + "/");
85
+ if(idx === 0) {
86
+ obj.request = obj.request.slice(dir.length + 3);
87
+ break;
88
+ }
89
+ }
90
+ return obj;
91
+ }));
92
+ });
93
+ });
94
+ }
95
+ }
96
+ module.exports = RequireContextPlugin;
@@ -1,22 +1,22 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
7
- const RequireEnsureDependency = require("./RequireEnsureDependency");
8
-
9
- module.exports = class RequireEnsureDependenciesBlock extends AsyncDependenciesBlock {
10
- constructor(expr, successExpression, errorExpression, chunkName, chunkNameRange, module, loc) {
11
- super(chunkName, module, loc);
12
- this.expr = expr;
13
- const successBodyRange = successExpression && successExpression.body && successExpression.body.range;
14
- if(successBodyRange) {
15
- this.range = [successBodyRange[0] + 1, successBodyRange[1] - 1];
16
- }
17
- this.chunkNameRange = chunkNameRange;
18
- const dep = new RequireEnsureDependency(this);
19
- dep.loc = loc;
20
- this.addDependency(dep);
21
- }
22
- };
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
7
+ const RequireEnsureDependency = require("./RequireEnsureDependency");
8
+
9
+ module.exports = class RequireEnsureDependenciesBlock extends AsyncDependenciesBlock {
10
+ constructor(expr, successExpression, errorExpression, chunkName, chunkNameRange, module, loc) {
11
+ super(chunkName, module, loc);
12
+ this.expr = expr;
13
+ const successBodyRange = successExpression && successExpression.body && successExpression.body.range;
14
+ if(successBodyRange) {
15
+ this.range = [successBodyRange[0] + 1, successBodyRange[1] - 1];
16
+ }
17
+ this.chunkNameRange = chunkNameRange;
18
+ const dep = new RequireEnsureDependency(this);
19
+ dep.loc = loc;
20
+ this.addDependency(dep);
21
+ }
22
+ };
@@ -1,102 +1,102 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const RequireEnsureDependenciesBlock = require("./RequireEnsureDependenciesBlock");
8
- const RequireEnsureItemDependency = require("./RequireEnsureItemDependency");
9
- const getFunctionExpression = require("./getFunctionExpression");
10
-
11
- module.exports = class RequireEnsureDependenciesBlockParserPlugin {
12
- apply(parser) {
13
- parser.plugin("call require.ensure", expr => {
14
- let chunkName = null;
15
- let chunkNameRange = null;
16
- let errorExpressionArg = null;
17
- let errorExpression = null;
18
- switch(expr.arguments.length) {
19
- case 4:
20
- {
21
- const chunkNameExpr = parser.evaluateExpression(expr.arguments[3]);
22
- if(!chunkNameExpr.isString()) return;
23
- chunkNameRange = chunkNameExpr.range;
24
- chunkName = chunkNameExpr.string;
25
- }
26
- // falls through
27
- case 3:
28
- {
29
- errorExpressionArg = expr.arguments[2];
30
- errorExpression = getFunctionExpression(errorExpressionArg);
31
-
32
- if(!errorExpression && !chunkName) {
33
- const chunkNameExpr = parser.evaluateExpression(expr.arguments[2]);
34
- if(!chunkNameExpr.isString()) return;
35
- chunkNameRange = chunkNameExpr.range;
36
- chunkName = chunkNameExpr.string;
37
- }
38
- }
39
- // falls through
40
- case 2:
41
- {
42
- const dependenciesExpr = parser.evaluateExpression(expr.arguments[0]);
43
- const dependenciesItems = dependenciesExpr.isArray() ? dependenciesExpr.items : [dependenciesExpr];
44
- const successExpressionArg = expr.arguments[1];
45
- const successExpression = getFunctionExpression(successExpressionArg);
46
-
47
- if(successExpression) {
48
- parser.walkExpressions(successExpression.expressions);
49
- }
50
- if(errorExpression) {
51
- parser.walkExpressions(errorExpression.expressions);
52
- }
53
-
54
- const dep = new RequireEnsureDependenciesBlock(expr,
55
- successExpression ? successExpression.fn : successExpressionArg,
56
- errorExpression ? errorExpression.fn : errorExpressionArg,
57
- chunkName, chunkNameRange, parser.state.module, expr.loc);
58
- const old = parser.state.current;
59
- parser.state.current = dep;
60
- try {
61
- let failed = false;
62
- parser.inScope([], () => {
63
- dependenciesItems.forEach(ee => {
64
- if(ee.isString()) {
65
- const edep = new RequireEnsureItemDependency(ee.string, ee.range);
66
- edep.loc = dep.loc;
67
- dep.addDependency(edep);
68
- } else {
69
- failed = true;
70
- }
71
- });
72
- });
73
- if(failed) {
74
- return;
75
- }
76
- if(successExpression) {
77
- if(successExpression.fn.body.type === "BlockStatement")
78
- parser.walkStatement(successExpression.fn.body);
79
- else
80
- parser.walkExpression(successExpression.fn.body);
81
- }
82
- old.addBlock(dep);
83
- } finally {
84
- parser.state.current = old;
85
- }
86
- if(!successExpression) {
87
- parser.walkExpression(successExpressionArg);
88
- }
89
- if(errorExpression) {
90
- if(errorExpression.fn.body.type === "BlockStatement")
91
- parser.walkStatement(errorExpression.fn.body);
92
- else
93
- parser.walkExpression(errorExpression.fn.body);
94
- } else if(errorExpressionArg) {
95
- parser.walkExpression(errorExpressionArg);
96
- }
97
- return true;
98
- }
99
- }
100
- });
101
- }
102
- };
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const RequireEnsureDependenciesBlock = require("./RequireEnsureDependenciesBlock");
8
+ const RequireEnsureItemDependency = require("./RequireEnsureItemDependency");
9
+ const getFunctionExpression = require("./getFunctionExpression");
10
+
11
+ module.exports = class RequireEnsureDependenciesBlockParserPlugin {
12
+ apply(parser) {
13
+ parser.plugin("call require.ensure", expr => {
14
+ let chunkName = null;
15
+ let chunkNameRange = null;
16
+ let errorExpressionArg = null;
17
+ let errorExpression = null;
18
+ switch(expr.arguments.length) {
19
+ case 4:
20
+ {
21
+ const chunkNameExpr = parser.evaluateExpression(expr.arguments[3]);
22
+ if(!chunkNameExpr.isString()) return;
23
+ chunkNameRange = chunkNameExpr.range;
24
+ chunkName = chunkNameExpr.string;
25
+ }
26
+ // falls through
27
+ case 3:
28
+ {
29
+ errorExpressionArg = expr.arguments[2];
30
+ errorExpression = getFunctionExpression(errorExpressionArg);
31
+
32
+ if(!errorExpression && !chunkName) {
33
+ const chunkNameExpr = parser.evaluateExpression(expr.arguments[2]);
34
+ if(!chunkNameExpr.isString()) return;
35
+ chunkNameRange = chunkNameExpr.range;
36
+ chunkName = chunkNameExpr.string;
37
+ }
38
+ }
39
+ // falls through
40
+ case 2:
41
+ {
42
+ const dependenciesExpr = parser.evaluateExpression(expr.arguments[0]);
43
+ const dependenciesItems = dependenciesExpr.isArray() ? dependenciesExpr.items : [dependenciesExpr];
44
+ const successExpressionArg = expr.arguments[1];
45
+ const successExpression = getFunctionExpression(successExpressionArg);
46
+
47
+ if(successExpression) {
48
+ parser.walkExpressions(successExpression.expressions);
49
+ }
50
+ if(errorExpression) {
51
+ parser.walkExpressions(errorExpression.expressions);
52
+ }
53
+
54
+ const dep = new RequireEnsureDependenciesBlock(expr,
55
+ successExpression ? successExpression.fn : successExpressionArg,
56
+ errorExpression ? errorExpression.fn : errorExpressionArg,
57
+ chunkName, chunkNameRange, parser.state.module, expr.loc);
58
+ const old = parser.state.current;
59
+ parser.state.current = dep;
60
+ try {
61
+ let failed = false;
62
+ parser.inScope([], () => {
63
+ dependenciesItems.forEach(ee => {
64
+ if(ee.isString()) {
65
+ const edep = new RequireEnsureItemDependency(ee.string, ee.range);
66
+ edep.loc = dep.loc;
67
+ dep.addDependency(edep);
68
+ } else {
69
+ failed = true;
70
+ }
71
+ });
72
+ });
73
+ if(failed) {
74
+ return;
75
+ }
76
+ if(successExpression) {
77
+ if(successExpression.fn.body.type === "BlockStatement")
78
+ parser.walkStatement(successExpression.fn.body);
79
+ else
80
+ parser.walkExpression(successExpression.fn.body);
81
+ }
82
+ old.addBlock(dep);
83
+ } finally {
84
+ parser.state.current = old;
85
+ }
86
+ if(!successExpression) {
87
+ parser.walkExpression(successExpressionArg);
88
+ }
89
+ if(errorExpression) {
90
+ if(errorExpression.fn.body.type === "BlockStatement")
91
+ parser.walkStatement(errorExpression.fn.body);
92
+ else
93
+ parser.walkExpression(errorExpression.fn.body);
94
+ } else if(errorExpressionArg) {
95
+ parser.walkExpression(errorExpressionArg);
96
+ }
97
+ return true;
98
+ }
99
+ }
100
+ });
101
+ }
102
+ };