webpack 3.6.0 → 3.8.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 (229) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +716 -716
  3. package/bin/convert-argv.js +1 -1
  4. package/bin/webpack.js +6 -0
  5. package/buildin/.eslintrc +7 -7
  6. package/buildin/amd-define.js +3 -3
  7. package/buildin/amd-options.js +2 -2
  8. package/buildin/global.js +21 -21
  9. package/buildin/harmony-module.js +24 -24
  10. package/buildin/module.js +22 -22
  11. package/buildin/system.js +7 -7
  12. package/hot/.eslintrc +9 -9
  13. package/hot/dev-server.js +53 -53
  14. package/hot/emitter.js +2 -2
  15. package/hot/log-apply-result.js +38 -38
  16. package/hot/log.js +44 -44
  17. package/hot/only-dev-server.js +71 -71
  18. package/hot/poll.js +34 -34
  19. package/hot/signal.js +51 -51
  20. package/lib/APIPlugin.js +45 -45
  21. package/lib/AsyncDependenciesBlock.js +43 -43
  22. package/lib/AsyncDependencyToInitialChunkWarning.js +21 -0
  23. package/lib/AutomaticPrefetchPlugin.js +36 -36
  24. package/lib/BasicEvaluatedExpression.js +203 -203
  25. package/lib/CaseSensitiveModulesWarning.js +49 -49
  26. package/lib/Chunk.js +3 -0
  27. package/lib/ChunkRenderError.js +24 -24
  28. package/lib/ChunkTemplate.js +36 -36
  29. package/lib/CompatibilityPlugin.js +57 -57
  30. package/lib/Compilation.js +158 -51
  31. package/lib/Compiler.js +523 -523
  32. package/lib/ConstPlugin.js +60 -60
  33. package/lib/ContextExclusionPlugin.js +17 -0
  34. package/lib/ContextModule.js +431 -431
  35. package/lib/ContextModuleFactory.js +14 -5
  36. package/lib/ContextReplacementPlugin.js +111 -111
  37. package/lib/DefinePlugin.js +123 -123
  38. package/lib/DelegatedModule.js +98 -92
  39. package/lib/DelegatedModuleFactoryPlugin.js +59 -59
  40. package/lib/DelegatedPlugin.js +30 -30
  41. package/lib/DependenciesBlockVariable.js +51 -51
  42. package/lib/DllEntryPlugin.js +37 -37
  43. package/lib/DllModule.js +58 -58
  44. package/lib/DllModuleFactory.js +20 -20
  45. package/lib/DllPlugin.js +38 -38
  46. package/lib/DllReferencePlugin.js +62 -62
  47. package/lib/DynamicEntryPlugin.js +59 -59
  48. package/lib/EntryModuleNotFoundError.js +22 -22
  49. package/lib/EntryOptionPlugin.js +31 -31
  50. package/lib/EnvironmentPlugin.js +50 -50
  51. package/lib/ErrorHelpers.js +31 -31
  52. package/lib/EvalDevToolModulePlugin.js +22 -22
  53. package/lib/EvalDevToolModuleTemplatePlugin.js +33 -33
  54. package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +75 -75
  55. package/lib/EvalSourceMapDevToolPlugin.js +32 -32
  56. package/lib/ExportPropertyMainTemplatePlugin.js +31 -31
  57. package/lib/ExtendedAPIPlugin.js +47 -47
  58. package/lib/ExternalModule.js +7 -0
  59. package/lib/ExternalModuleFactoryPlugin.js +91 -91
  60. package/lib/ExternalsPlugin.js +21 -21
  61. package/lib/FlagDependencyExportsPlugin.js +101 -101
  62. package/lib/FunctionModulePlugin.js +24 -24
  63. package/lib/FunctionModuleTemplatePlugin.js +7 -3
  64. package/lib/HashedModuleIdsPlugin.js +42 -42
  65. package/lib/HotUpdateChunkTemplate.js +31 -31
  66. package/lib/IgnorePlugin.js +69 -69
  67. package/lib/JsonpExportMainTemplatePlugin.js +37 -37
  68. package/lib/JsonpHotUpdateChunkTemplatePlugin.js +27 -27
  69. package/lib/JsonpMainTemplate.runtime.js +2 -1
  70. package/lib/JsonpMainTemplatePlugin.js +2 -0
  71. package/lib/JsonpTemplatePlugin.js +21 -21
  72. package/lib/LibManifestPlugin.js +63 -63
  73. package/lib/LibraryTemplatePlugin.js +92 -92
  74. package/lib/LoaderOptionsPlugin.js +36 -36
  75. package/lib/LoaderTargetPlugin.js +19 -19
  76. package/lib/MemoryOutputFileSystem.js +5 -5
  77. package/lib/ModuleBuildError.js +42 -42
  78. package/lib/ModuleDependencyError.js +22 -22
  79. package/lib/ModuleDependencyWarning.js +22 -22
  80. package/lib/ModuleError.js +24 -24
  81. package/lib/ModuleFilenameHelpers.js +162 -162
  82. package/lib/ModuleNotFoundError.js +26 -26
  83. package/lib/ModuleParseError.js +1 -1
  84. package/lib/ModuleReason.js +50 -50
  85. package/lib/ModuleTemplate.js +23 -23
  86. package/lib/ModuleWarning.js +24 -24
  87. package/lib/MovedToPluginWarningPlugin.js +21 -21
  88. package/lib/MultiCompiler.js +164 -164
  89. package/lib/MultiEntryPlugin.js +39 -39
  90. package/lib/MultiModuleFactory.js +19 -19
  91. package/lib/MultiStats.js +79 -79
  92. package/lib/MultiWatching.js +32 -32
  93. package/lib/NamedChunksPlugin.js +30 -30
  94. package/lib/NamedModulesPlugin.js +27 -27
  95. package/lib/NewWatchingPlugin.js +15 -15
  96. package/lib/NoEmitOnErrorsPlugin.js +22 -22
  97. package/lib/NoErrorsPlugin.js +29 -29
  98. package/lib/NodeStuffPlugin.js +97 -97
  99. package/lib/NormalModuleReplacementPlugin.js +45 -45
  100. package/lib/NullFactory.js +12 -12
  101. package/lib/OptionsApply.js +10 -10
  102. package/lib/Parser.js +65 -34
  103. package/lib/ParserHelpers.js +85 -85
  104. package/lib/PrefetchPlugin.js +31 -31
  105. package/lib/ProgressPlugin.js +192 -192
  106. package/lib/ProvidePlugin.js +55 -55
  107. package/lib/RawModule.js +54 -54
  108. package/lib/RequestShortener.js +63 -63
  109. package/lib/RequireJsStuffPlugin.js +31 -31
  110. package/lib/RuleSet.js +444 -444
  111. package/lib/SetVarMainTemplatePlugin.js +41 -41
  112. package/lib/SingleEntryPlugin.js +35 -35
  113. package/lib/SizeFormatHelpers.js +18 -18
  114. package/lib/SourceMapDevToolModuleOptionsPlugin.js +37 -37
  115. package/lib/Stats.js +27 -8
  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 +129 -129
  123. package/lib/WebpackOptionsValidationError.js +196 -196
  124. package/lib/compareLocations.js +36 -36
  125. package/lib/dependencies/AMDDefineDependency.js +142 -142
  126. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +5 -1
  127. package/lib/dependencies/AMDPlugin.js +119 -119
  128. package/lib/dependencies/AMDRequireArrayDependency.js +2 -0
  129. package/lib/dependencies/AMDRequireContextDependency.js +0 -9
  130. package/lib/dependencies/AMDRequireDependenciesBlock.js +33 -33
  131. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +177 -177
  132. package/lib/dependencies/AMDRequireDependency.js +67 -67
  133. package/lib/dependencies/AMDRequireItemDependency.js +22 -22
  134. package/lib/dependencies/CommonJsRequireContextDependency.js +0 -10
  135. package/lib/dependencies/CommonJsRequireDependency.js +22 -22
  136. package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +89 -89
  137. package/lib/dependencies/ConstDependency.js +32 -32
  138. package/lib/dependencies/ContextDependency.js +20 -0
  139. package/lib/dependencies/ContextDependencyHelpers.js +71 -71
  140. package/lib/dependencies/ContextElementDependency.js +21 -21
  141. package/lib/dependencies/CriticalDependencyWarning.js +20 -20
  142. package/lib/dependencies/DelegatedExportsDependency.js +33 -33
  143. package/lib/dependencies/DelegatedSourceDependency.js +18 -18
  144. package/lib/dependencies/DllEntryDependency.js +20 -20
  145. package/lib/dependencies/HarmonyCompatibilityDependency.js +30 -30
  146. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +14 -2
  147. package/lib/dependencies/HarmonyExportExpressionDependency.js +0 -7
  148. package/lib/dependencies/HarmonyExportHeaderDependency.js +28 -28
  149. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +45 -45
  150. package/lib/dependencies/HarmonyExportSpecifierDependency.js +0 -13
  151. package/lib/dependencies/HarmonyModulesHelpers.js +0 -53
  152. package/lib/dependencies/ImportContextDependency.js +0 -10
  153. package/lib/dependencies/ImportDependenciesBlock.js +17 -17
  154. package/lib/dependencies/ImportEagerContextDependency.js +22 -22
  155. package/lib/dependencies/ImportLazyContextDependency.js +22 -22
  156. package/lib/dependencies/ImportLazyOnceContextDependency.js +22 -22
  157. package/lib/dependencies/ImportParserPlugin.js +89 -89
  158. package/lib/dependencies/ImportPlugin.js +60 -60
  159. package/lib/dependencies/ImportWeakContextDependency.js +22 -22
  160. package/lib/dependencies/LoaderDependency.js +18 -18
  161. package/lib/dependencies/LoaderPlugin.js +60 -60
  162. package/lib/dependencies/LocalModule.js +23 -23
  163. package/lib/dependencies/LocalModuleDependency.js +24 -24
  164. package/lib/dependencies/LocalModulesHelpers.js +46 -46
  165. package/lib/dependencies/ModuleDependency.js +23 -23
  166. package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
  167. package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
  168. package/lib/dependencies/MultiEntryDependency.js +20 -20
  169. package/lib/dependencies/NullDependency.js +24 -24
  170. package/lib/dependencies/PrefetchDependency.js +18 -18
  171. package/lib/dependencies/RequireContextDependency.js +26 -26
  172. package/lib/dependencies/RequireContextDependencyParserPlugin.js +50 -50
  173. package/lib/dependencies/RequireContextPlugin.js +96 -96
  174. package/lib/dependencies/RequireEnsureDependenciesBlock.js +22 -22
  175. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +102 -102
  176. package/lib/dependencies/RequireEnsureDependency.js +38 -38
  177. package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
  178. package/lib/dependencies/RequireEnsurePlugin.js +40 -40
  179. package/lib/dependencies/RequireHeaderDependency.js +26 -26
  180. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +21 -21
  181. package/lib/dependencies/RequireIncludePlugin.js +33 -33
  182. package/lib/dependencies/RequireResolveContextDependency.js +0 -10
  183. package/lib/dependencies/RequireResolveDependency.js +22 -22
  184. package/lib/dependencies/RequireResolveDependencyParserPlugin.js +71 -71
  185. package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
  186. package/lib/dependencies/SingleEntryDependency.js +18 -18
  187. package/lib/dependencies/SystemPlugin.js +44 -44
  188. package/lib/dependencies/UnsupportedDependency.js +23 -23
  189. package/lib/dependencies/WebpackMissingModule.js +18 -18
  190. package/lib/dependencies/getFunctionExpression.js +44 -44
  191. package/lib/formatLocation.js +54 -54
  192. package/lib/node/NodeChunkTemplatePlugin.js +27 -27
  193. package/lib/node/NodeEnvironmentPlugin.js +25 -25
  194. package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +27 -27
  195. package/lib/node/NodeMainTemplate.runtime.js +24 -24
  196. package/lib/node/NodeMainTemplateAsync.runtime.js +40 -40
  197. package/lib/node/NodeOutputFileSystem.js +22 -22
  198. package/lib/node/NodeSourcePlugin.js +88 -88
  199. package/lib/node/NodeTargetPlugin.js +15 -15
  200. package/lib/node/NodeTemplatePlugin.js +27 -27
  201. package/lib/node/NodeWatchFileSystem.js +72 -72
  202. package/lib/optimize/ChunkModuleIdRangePlugin.js +53 -53
  203. package/lib/optimize/CommonsChunkPlugin.js +40 -19
  204. package/lib/optimize/ConcatenatedModule.js +27 -24
  205. package/lib/optimize/DedupePlugin.js +15 -15
  206. package/lib/optimize/FlagIncludedChunksPlugin.js +35 -35
  207. package/lib/optimize/LimitChunkCountPlugin.js +59 -59
  208. package/lib/optimize/MinChunkSizePlugin.js +65 -65
  209. package/lib/optimize/RemoveEmptyChunksPlugin.js +21 -21
  210. package/lib/optimize/UglifyJsPlugin.js +9 -9
  211. package/lib/performance/AssetsOverSizeLimitWarning.js +23 -23
  212. package/lib/performance/EntrypointsOverSizeLimitWarning.js +28 -28
  213. package/lib/performance/NoAsyncChunksWarning.js +20 -20
  214. package/lib/performance/SizeLimitsPlugin.js +102 -102
  215. package/lib/prepareOptions.js +29 -29
  216. package/lib/removeAndDo.js +15 -15
  217. package/lib/util/Queue.js +42 -0
  218. package/lib/util/Semaphore.js +32 -32
  219. package/lib/util/identifier.js +38 -38
  220. package/lib/validateSchema.js +66 -66
  221. package/lib/web/WebEnvironmentPlugin.js +18 -18
  222. package/lib/webpack.js +1 -0
  223. package/lib/webworker/WebWorkerChunkTemplatePlugin.js +29 -29
  224. package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +28 -28
  225. package/lib/webworker/WebWorkerMainTemplate.runtime.js +58 -58
  226. package/lib/webworker/WebWorkerTemplatePlugin.js +20 -20
  227. package/package.json +1 -1
  228. package/schemas/ajv.absolutePath.js +29 -29
  229. package/schemas/webpackOptionsSchema.json +69 -0
@@ -18,7 +18,6 @@ module.exports = class ContextModuleFactory extends Tapable {
18
18
  }
19
19
 
20
20
  create(data, callback) {
21
- const module = this;
22
21
  const context = data.context;
23
22
  const dependencies = data.dependencies;
24
23
  const dependency = dependencies[0];
@@ -59,7 +58,7 @@ module.exports = class ContextModuleFactory extends Tapable {
59
58
  resource = request;
60
59
  }
61
60
 
62
- const resolvers = module.resolvers;
61
+ const resolvers = this.resolvers;
63
62
 
64
63
  asyncLib.parallel([
65
64
  function(callback) {
@@ -79,14 +78,14 @@ module.exports = class ContextModuleFactory extends Tapable {
79
78
  ], (err, result) => {
80
79
  if(err) return callback(err);
81
80
 
82
- module.applyPluginsAsyncWaterfall("after-resolve", {
81
+ this.applyPluginsAsyncWaterfall("after-resolve", {
83
82
  loaders: loadersPrefix + result[1].join("!") + (result[1].length > 0 ? "!" : ""),
84
83
  resource: result[0],
85
84
  recursive: recursive,
86
85
  regExp: regExp,
87
86
  async: asyncContext,
88
87
  dependencies: dependencies,
89
- resolveDependencies: module.resolveDependencies.bind(module)
88
+ resolveDependencies: this.resolveDependencies.bind(this)
90
89
  }, function(err, result) {
91
90
  if(err) return callback(err);
92
91
 
@@ -100,11 +99,13 @@ module.exports = class ContextModuleFactory extends Tapable {
100
99
  }
101
100
 
102
101
  resolveDependencies(fs, resource, recursive, regExp, callback) {
102
+ const cmf = this;
103
103
  if(!regExp || !resource)
104
104
  return callback(null, []);
105
105
  (function addDirectory(directory, callback) {
106
106
  fs.readdir(directory, (err, files) => {
107
107
  if(err) return callback(err);
108
+ files = cmf.applyPluginsWaterfall("context-module-files", files);
108
109
  if(!files || files.length === 0) return callback(null, []);
109
110
  asyncLib.map(files.filter(function(p) {
110
111
  return p.indexOf(".") !== 0;
@@ -113,7 +114,15 @@ module.exports = class ContextModuleFactory extends Tapable {
113
114
  const subResource = path.join(directory, seqment);
114
115
 
115
116
  fs.stat(subResource, (err, stat) => {
116
- if(err) return callback(err);
117
+ if(err) {
118
+ if(err.code === "ENOENT") {
119
+ // ENOENT is ok here because the file may have been deleted between
120
+ // the readdir and stat calls.
121
+ return callback();
122
+ } else {
123
+ return callback(err);
124
+ }
125
+ }
117
126
 
118
127
  if(stat.isDirectory()) {
119
128
 
@@ -1,111 +1,111 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const path = require("path");
8
- const ContextElementDependency = require("./dependencies/ContextElementDependency");
9
-
10
- class ContextReplacementPlugin {
11
- constructor(resourceRegExp, newContentResource, newContentRecursive, newContentRegExp) {
12
- this.resourceRegExp = resourceRegExp;
13
-
14
- if(typeof newContentResource === "function") {
15
- this.newContentCallback = newContentResource;
16
- } else if(typeof newContentResource === "string" && typeof newContentRecursive === "object") {
17
- this.newContentResource = newContentResource;
18
- this.newContentCreateContextMap = (fs, callback) => {
19
- callback(null, newContentRecursive);
20
- };
21
- } else if(typeof newContentResource === "string" && typeof newContentRecursive === "function") {
22
- this.newContentResource = newContentResource;
23
- this.newContentCreateContextMap = newContentRecursive;
24
- } else {
25
- if(typeof newContentResource !== "string") {
26
- newContentRegExp = newContentRecursive;
27
- newContentRecursive = newContentResource;
28
- newContentResource = undefined;
29
- }
30
- if(typeof newContentRecursive !== "boolean") {
31
- newContentRegExp = newContentRecursive;
32
- newContentRecursive = undefined;
33
- }
34
- this.newContentResource = newContentResource;
35
- this.newContentRecursive = newContentRecursive;
36
- this.newContentRegExp = newContentRegExp;
37
- }
38
- }
39
-
40
- apply(compiler) {
41
- const resourceRegExp = this.resourceRegExp;
42
- const newContentCallback = this.newContentCallback;
43
- const newContentResource = this.newContentResource;
44
- const newContentRecursive = this.newContentRecursive;
45
- const newContentRegExp = this.newContentRegExp;
46
- const newContentCreateContextMap = this.newContentCreateContextMap;
47
-
48
- compiler.plugin("context-module-factory", (cmf) => {
49
- cmf.plugin("before-resolve", (result, callback) => {
50
- if(!result) return callback();
51
- if(resourceRegExp.test(result.request)) {
52
- if(typeof newContentResource !== "undefined")
53
- result.request = newContentResource;
54
- if(typeof newContentRecursive !== "undefined")
55
- result.recursive = newContentRecursive;
56
- if(typeof newContentRegExp !== "undefined")
57
- result.regExp = newContentRegExp;
58
- if(typeof newContentCallback === "function") {
59
- newContentCallback(result);
60
- } else {
61
- result.dependencies.forEach((d) => {
62
- if(d.critical)
63
- d.critical = false;
64
- });
65
- }
66
- }
67
- return callback(null, result);
68
- });
69
- cmf.plugin("after-resolve", (result, callback) => {
70
- if(!result) return callback();
71
- if(resourceRegExp.test(result.resource)) {
72
- if(typeof newContentResource !== "undefined")
73
- result.resource = path.resolve(result.resource, newContentResource);
74
- if(typeof newContentRecursive !== "undefined")
75
- result.recursive = newContentRecursive;
76
- if(typeof newContentRegExp !== "undefined")
77
- result.regExp = newContentRegExp;
78
- if(typeof newContentCreateContextMap === "function")
79
- result.resolveDependencies = createResolveDependenciesFromContextMap(newContentCreateContextMap);
80
- if(typeof newContentCallback === "function") {
81
- const origResource = result.resource;
82
- newContentCallback(result);
83
- if(result.resource !== origResource) {
84
- result.resource = path.resolve(origResource, result.resource);
85
- }
86
- } else {
87
- result.dependencies.forEach((d) => {
88
- if(d.critical)
89
- d.critical = false;
90
- });
91
- }
92
- }
93
- return callback(null, result);
94
- });
95
- });
96
- }
97
- }
98
-
99
- const createResolveDependenciesFromContextMap = (createContextMap) => {
100
- return function resolveDependenciesFromContextMap(fs, resource, recursive, regExp, callback) {
101
- createContextMap(fs, (err, map) => {
102
- if(err) return callback(err);
103
- const dependencies = Object.keys(map).map((key) => {
104
- return new ContextElementDependency(map[key], key);
105
- });
106
- callback(null, dependencies);
107
- });
108
- };
109
- };
110
-
111
- module.exports = ContextReplacementPlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const path = require("path");
8
+ const ContextElementDependency = require("./dependencies/ContextElementDependency");
9
+
10
+ class ContextReplacementPlugin {
11
+ constructor(resourceRegExp, newContentResource, newContentRecursive, newContentRegExp) {
12
+ this.resourceRegExp = resourceRegExp;
13
+
14
+ if(typeof newContentResource === "function") {
15
+ this.newContentCallback = newContentResource;
16
+ } else if(typeof newContentResource === "string" && typeof newContentRecursive === "object") {
17
+ this.newContentResource = newContentResource;
18
+ this.newContentCreateContextMap = (fs, callback) => {
19
+ callback(null, newContentRecursive);
20
+ };
21
+ } else if(typeof newContentResource === "string" && typeof newContentRecursive === "function") {
22
+ this.newContentResource = newContentResource;
23
+ this.newContentCreateContextMap = newContentRecursive;
24
+ } else {
25
+ if(typeof newContentResource !== "string") {
26
+ newContentRegExp = newContentRecursive;
27
+ newContentRecursive = newContentResource;
28
+ newContentResource = undefined;
29
+ }
30
+ if(typeof newContentRecursive !== "boolean") {
31
+ newContentRegExp = newContentRecursive;
32
+ newContentRecursive = undefined;
33
+ }
34
+ this.newContentResource = newContentResource;
35
+ this.newContentRecursive = newContentRecursive;
36
+ this.newContentRegExp = newContentRegExp;
37
+ }
38
+ }
39
+
40
+ apply(compiler) {
41
+ const resourceRegExp = this.resourceRegExp;
42
+ const newContentCallback = this.newContentCallback;
43
+ const newContentResource = this.newContentResource;
44
+ const newContentRecursive = this.newContentRecursive;
45
+ const newContentRegExp = this.newContentRegExp;
46
+ const newContentCreateContextMap = this.newContentCreateContextMap;
47
+
48
+ compiler.plugin("context-module-factory", (cmf) => {
49
+ cmf.plugin("before-resolve", (result, callback) => {
50
+ if(!result) return callback();
51
+ if(resourceRegExp.test(result.request)) {
52
+ if(typeof newContentResource !== "undefined")
53
+ result.request = newContentResource;
54
+ if(typeof newContentRecursive !== "undefined")
55
+ result.recursive = newContentRecursive;
56
+ if(typeof newContentRegExp !== "undefined")
57
+ result.regExp = newContentRegExp;
58
+ if(typeof newContentCallback === "function") {
59
+ newContentCallback(result);
60
+ } else {
61
+ result.dependencies.forEach((d) => {
62
+ if(d.critical)
63
+ d.critical = false;
64
+ });
65
+ }
66
+ }
67
+ return callback(null, result);
68
+ });
69
+ cmf.plugin("after-resolve", (result, callback) => {
70
+ if(!result) return callback();
71
+ if(resourceRegExp.test(result.resource)) {
72
+ if(typeof newContentResource !== "undefined")
73
+ result.resource = path.resolve(result.resource, newContentResource);
74
+ if(typeof newContentRecursive !== "undefined")
75
+ result.recursive = newContentRecursive;
76
+ if(typeof newContentRegExp !== "undefined")
77
+ result.regExp = newContentRegExp;
78
+ if(typeof newContentCreateContextMap === "function")
79
+ result.resolveDependencies = createResolveDependenciesFromContextMap(newContentCreateContextMap);
80
+ if(typeof newContentCallback === "function") {
81
+ const origResource = result.resource;
82
+ newContentCallback(result);
83
+ if(result.resource !== origResource) {
84
+ result.resource = path.resolve(origResource, result.resource);
85
+ }
86
+ } else {
87
+ result.dependencies.forEach((d) => {
88
+ if(d.critical)
89
+ d.critical = false;
90
+ });
91
+ }
92
+ }
93
+ return callback(null, result);
94
+ });
95
+ });
96
+ }
97
+ }
98
+
99
+ const createResolveDependenciesFromContextMap = (createContextMap) => {
100
+ return function resolveDependenciesFromContextMap(fs, resource, recursive, regExp, callback) {
101
+ createContextMap(fs, (err, map) => {
102
+ if(err) return callback(err);
103
+ const dependencies = Object.keys(map).map((key) => {
104
+ return new ContextElementDependency(map[key], key);
105
+ });
106
+ callback(null, dependencies);
107
+ });
108
+ };
109
+ };
110
+
111
+ module.exports = ContextReplacementPlugin;
@@ -1,123 +1,123 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const ConstDependency = require("./dependencies/ConstDependency");
8
- const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
9
- const ParserHelpers = require("./ParserHelpers");
10
- const NullFactory = require("./NullFactory");
11
-
12
- class DefinePlugin {
13
- constructor(definitions) {
14
- this.definitions = definitions;
15
- }
16
-
17
- apply(compiler) {
18
- const definitions = this.definitions;
19
- compiler.plugin("compilation", (compilation, params) => {
20
- compilation.dependencyFactories.set(ConstDependency, new NullFactory());
21
- compilation.dependencyTemplates.set(ConstDependency, new ConstDependency.Template());
22
-
23
- params.normalModuleFactory.plugin("parser", (parser) => {
24
- (function walkDefinitions(definitions, prefix) {
25
- Object.keys(definitions).forEach((key) => {
26
- const code = definitions[key];
27
- if(code && typeof code === "object" && !(code instanceof RegExp)) {
28
- walkDefinitions(code, prefix + key + ".");
29
- applyObjectDefine(prefix + key, code);
30
- return;
31
- }
32
- applyDefineKey(prefix, key);
33
- applyDefine(prefix + key, code);
34
- });
35
- }(definitions, ""));
36
-
37
- function stringifyObj(obj) {
38
- return "Object({" + Object.keys(obj).map((key) => {
39
- const code = obj[key];
40
- return JSON.stringify(key) + ":" + toCode(code);
41
- }).join(",") + "})";
42
- }
43
-
44
- function toCode(code) {
45
- if(code === null) return "null";
46
- else if(code === undefined) return "undefined";
47
- else if(code instanceof RegExp && code.toString) return code.toString();
48
- else if(typeof code === "function" && code.toString) return "(" + code.toString() + ")";
49
- else if(typeof code === "object") return stringifyObj(code);
50
- else return code + "";
51
- }
52
-
53
- function applyDefineKey(prefix, key) {
54
- const splittedKey = key.split(".");
55
- splittedKey.slice(1).forEach((_, i) => {
56
- const fullKey = prefix + splittedKey.slice(0, i + 1).join(".");
57
- parser.plugin("can-rename " + fullKey, ParserHelpers.approve);
58
- });
59
- }
60
-
61
- function applyDefine(key, code) {
62
- const isTypeof = /^typeof\s+/.test(key);
63
- if(isTypeof) key = key.replace(/^typeof\s+/, "");
64
- let recurse = false;
65
- let recurseTypeof = false;
66
- code = toCode(code);
67
- if(!isTypeof) {
68
- parser.plugin("can-rename " + key, ParserHelpers.approve);
69
- parser.plugin("evaluate Identifier " + key, (expr) => {
70
- /**
71
- * this is needed in case there is a recursion in the DefinePlugin
72
- * to prevent an endless recursion
73
- * e.g.: new DefinePlugin({
74
- * "a": "b",
75
- * "b": "a"
76
- * });
77
- */
78
- if(recurse) return;
79
- recurse = true;
80
- const res = parser.evaluate(code);
81
- recurse = false;
82
- res.setRange(expr.range);
83
- return res;
84
- });
85
- parser.plugin("expression " + key, ParserHelpers.toConstantDependency(code));
86
- }
87
- const typeofCode = isTypeof ? code : "typeof (" + code + ")";
88
- parser.plugin("evaluate typeof " + key, (expr) => {
89
- /**
90
- * this is needed in case there is a recursion in the DefinePlugin
91
- * to prevent an endless recursion
92
- * e.g.: new DefinePlugin({
93
- * "typeof a": "tyepof b",
94
- * "typeof b": "typeof a"
95
- * });
96
- */
97
- if(recurseTypeof) return;
98
- recurseTypeof = true;
99
- const res = parser.evaluate(typeofCode);
100
- recurseTypeof = false;
101
- res.setRange(expr.range);
102
- return res;
103
- });
104
- parser.plugin("typeof " + key, (expr) => {
105
- const res = parser.evaluate(typeofCode);
106
- if(!res.isString()) return;
107
- return ParserHelpers.toConstantDependency(JSON.stringify(res.string)).bind(parser)(expr);
108
- });
109
- }
110
-
111
- function applyObjectDefine(key, obj) {
112
- const code = stringifyObj(obj);
113
- parser.plugin("can-rename " + key, ParserHelpers.approve);
114
- parser.plugin("evaluate Identifier " + key, (expr) => new BasicEvaluatedExpression().setTruthy().setRange(expr.range));
115
- parser.plugin("evaluate typeof " + key, ParserHelpers.evaluateToString("object"));
116
- parser.plugin("expression " + key, ParserHelpers.toConstantDependency(code));
117
- parser.plugin("typeof " + key, ParserHelpers.toConstantDependency(JSON.stringify("object")));
118
- }
119
- });
120
- });
121
- }
122
- }
123
- module.exports = DefinePlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const ConstDependency = require("./dependencies/ConstDependency");
8
+ const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
9
+ const ParserHelpers = require("./ParserHelpers");
10
+ const NullFactory = require("./NullFactory");
11
+
12
+ class DefinePlugin {
13
+ constructor(definitions) {
14
+ this.definitions = definitions;
15
+ }
16
+
17
+ apply(compiler) {
18
+ const definitions = this.definitions;
19
+ compiler.plugin("compilation", (compilation, params) => {
20
+ compilation.dependencyFactories.set(ConstDependency, new NullFactory());
21
+ compilation.dependencyTemplates.set(ConstDependency, new ConstDependency.Template());
22
+
23
+ params.normalModuleFactory.plugin("parser", (parser) => {
24
+ (function walkDefinitions(definitions, prefix) {
25
+ Object.keys(definitions).forEach((key) => {
26
+ const code = definitions[key];
27
+ if(code && typeof code === "object" && !(code instanceof RegExp)) {
28
+ walkDefinitions(code, prefix + key + ".");
29
+ applyObjectDefine(prefix + key, code);
30
+ return;
31
+ }
32
+ applyDefineKey(prefix, key);
33
+ applyDefine(prefix + key, code);
34
+ });
35
+ }(definitions, ""));
36
+
37
+ function stringifyObj(obj) {
38
+ return "Object({" + Object.keys(obj).map((key) => {
39
+ const code = obj[key];
40
+ return JSON.stringify(key) + ":" + toCode(code);
41
+ }).join(",") + "})";
42
+ }
43
+
44
+ function toCode(code) {
45
+ if(code === null) return "null";
46
+ else if(code === undefined) return "undefined";
47
+ else if(code instanceof RegExp && code.toString) return code.toString();
48
+ else if(typeof code === "function" && code.toString) return "(" + code.toString() + ")";
49
+ else if(typeof code === "object") return stringifyObj(code);
50
+ else return code + "";
51
+ }
52
+
53
+ function applyDefineKey(prefix, key) {
54
+ const splittedKey = key.split(".");
55
+ splittedKey.slice(1).forEach((_, i) => {
56
+ const fullKey = prefix + splittedKey.slice(0, i + 1).join(".");
57
+ parser.plugin("can-rename " + fullKey, ParserHelpers.approve);
58
+ });
59
+ }
60
+
61
+ function applyDefine(key, code) {
62
+ const isTypeof = /^typeof\s+/.test(key);
63
+ if(isTypeof) key = key.replace(/^typeof\s+/, "");
64
+ let recurse = false;
65
+ let recurseTypeof = false;
66
+ code = toCode(code);
67
+ if(!isTypeof) {
68
+ parser.plugin("can-rename " + key, ParserHelpers.approve);
69
+ parser.plugin("evaluate Identifier " + key, (expr) => {
70
+ /**
71
+ * this is needed in case there is a recursion in the DefinePlugin
72
+ * to prevent an endless recursion
73
+ * e.g.: new DefinePlugin({
74
+ * "a": "b",
75
+ * "b": "a"
76
+ * });
77
+ */
78
+ if(recurse) return;
79
+ recurse = true;
80
+ const res = parser.evaluate(code);
81
+ recurse = false;
82
+ res.setRange(expr.range);
83
+ return res;
84
+ });
85
+ parser.plugin("expression " + key, ParserHelpers.toConstantDependency(code));
86
+ }
87
+ const typeofCode = isTypeof ? code : "typeof (" + code + ")";
88
+ parser.plugin("evaluate typeof " + key, (expr) => {
89
+ /**
90
+ * this is needed in case there is a recursion in the DefinePlugin
91
+ * to prevent an endless recursion
92
+ * e.g.: new DefinePlugin({
93
+ * "typeof a": "tyepof b",
94
+ * "typeof b": "typeof a"
95
+ * });
96
+ */
97
+ if(recurseTypeof) return;
98
+ recurseTypeof = true;
99
+ const res = parser.evaluate(typeofCode);
100
+ recurseTypeof = false;
101
+ res.setRange(expr.range);
102
+ return res;
103
+ });
104
+ parser.plugin("typeof " + key, (expr) => {
105
+ const res = parser.evaluate(typeofCode);
106
+ if(!res.isString()) return;
107
+ return ParserHelpers.toConstantDependency(JSON.stringify(res.string)).bind(parser)(expr);
108
+ });
109
+ }
110
+
111
+ function applyObjectDefine(key, obj) {
112
+ const code = stringifyObj(obj);
113
+ parser.plugin("can-rename " + key, ParserHelpers.approve);
114
+ parser.plugin("evaluate Identifier " + key, (expr) => new BasicEvaluatedExpression().setTruthy().setRange(expr.range));
115
+ parser.plugin("evaluate typeof " + key, ParserHelpers.evaluateToString("object"));
116
+ parser.plugin("expression " + key, ParserHelpers.toConstantDependency(code));
117
+ parser.plugin("typeof " + key, ParserHelpers.toConstantDependency(JSON.stringify("object")));
118
+ }
119
+ });
120
+ });
121
+ }
122
+ }
123
+ module.exports = DefinePlugin;