webpack 4.15.0 → 4.16.2

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 (271) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +761 -758
  3. package/SECURITY.md +9 -9
  4. package/buildin/amd-define.js +3 -3
  5. package/buildin/amd-options.js +2 -2
  6. package/buildin/global.js +20 -20
  7. package/buildin/harmony-module.js +24 -24
  8. package/buildin/module.js +22 -22
  9. package/buildin/system.js +7 -7
  10. package/hot/dev-server.js +61 -61
  11. package/hot/emitter.js +2 -2
  12. package/hot/log-apply-result.js +44 -44
  13. package/hot/log.js +45 -45
  14. package/hot/only-dev-server.js +105 -105
  15. package/hot/poll.js +40 -37
  16. package/hot/signal.js +62 -62
  17. package/lib/APIPlugin.js +84 -84
  18. package/lib/AmdMainTemplatePlugin.js +87 -87
  19. package/lib/AsyncDependencyToInitialChunkError.js +31 -31
  20. package/lib/AutomaticPrefetchPlugin.js +1 -1
  21. package/lib/BannerPlugin.js +117 -117
  22. package/lib/BasicEvaluatedExpression.js +211 -211
  23. package/lib/CachePlugin.js +102 -102
  24. package/lib/CaseSensitiveModulesWarning.js +67 -67
  25. package/lib/Chunk.js +833 -811
  26. package/lib/ChunkGroup.js +4 -4
  27. package/lib/ChunkRenderError.js +32 -32
  28. package/lib/CommentCompilationWarning.js +2 -2
  29. package/lib/CompatibilityPlugin.js +70 -70
  30. package/lib/Compilation.js +46 -15
  31. package/lib/ConcurrentCompilationError.js +19 -19
  32. package/lib/ConstPlugin.js +258 -258
  33. package/lib/ContextExclusionPlugin.js +28 -17
  34. package/lib/ContextModule.js +844 -739
  35. package/lib/ContextModuleFactory.js +262 -256
  36. package/lib/ContextReplacementPlugin.js +133 -133
  37. package/lib/DefinePlugin.js +49 -0
  38. package/lib/DelegatedModule.js +5 -0
  39. package/lib/DelegatedModuleFactoryPlugin.js +95 -89
  40. package/lib/DelegatedPlugin.js +39 -39
  41. package/lib/DependenciesBlock.js +1 -1
  42. package/lib/Dependency.js +10 -4
  43. package/lib/DllModule.js +60 -54
  44. package/lib/DllModuleFactory.js +29 -29
  45. package/lib/DllPlugin.js +44 -44
  46. package/lib/DllReferencePlugin.js +132 -84
  47. package/lib/EntryModuleNotFoundError.js +21 -21
  48. package/lib/Entrypoint.js +54 -54
  49. package/lib/EnvironmentPlugin.js +72 -65
  50. package/lib/ErrorHelpers.js +60 -60
  51. package/lib/EvalDevToolModulePlugin.js +27 -27
  52. package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +115 -115
  53. package/lib/EvalSourceMapDevToolPlugin.js +41 -41
  54. package/lib/ExportPropertyMainTemplatePlugin.js +53 -53
  55. package/lib/ExternalModule.js +165 -159
  56. package/lib/ExternalsPlugin.js +23 -23
  57. package/lib/FlagDependencyExportsPlugin.js +146 -146
  58. package/lib/FlagInitialModulesAsUsedPlugin.js +36 -36
  59. package/lib/FunctionModuleTemplatePlugin.js +100 -100
  60. package/lib/Generator.js +60 -52
  61. package/lib/HarmonyLinkingError.js +17 -17
  62. package/lib/HashedModuleIdsPlugin.js +53 -53
  63. package/lib/HotModuleReplacementPlugin.js +411 -413
  64. package/lib/IgnorePlugin.js +90 -90
  65. package/lib/JavascriptGenerator.js +229 -229
  66. package/lib/JavascriptModulesPlugin.js +179 -179
  67. package/lib/JsonGenerator.js +55 -55
  68. package/lib/JsonModulesPlugin.js +30 -30
  69. package/lib/JsonParser.js +27 -27
  70. package/lib/LibManifestPlugin.js +86 -86
  71. package/lib/LibraryTemplatePlugin.js +153 -153
  72. package/lib/LoaderOptionsPlugin.js +53 -53
  73. package/lib/LoaderTargetPlugin.js +24 -24
  74. package/lib/MemoryOutputFileSystem.js +5 -5
  75. package/lib/Module.js +431 -391
  76. package/lib/ModuleBuildError.js +52 -52
  77. package/lib/ModuleDependencyError.js +35 -35
  78. package/lib/ModuleDependencyWarning.js +25 -25
  79. package/lib/ModuleError.js +36 -36
  80. package/lib/ModuleFilenameHelpers.js +178 -178
  81. package/lib/ModuleNotFoundError.js +23 -23
  82. package/lib/ModuleParseError.js +57 -57
  83. package/lib/ModuleTemplate.js +93 -93
  84. package/lib/ModuleWarning.js +36 -36
  85. package/lib/MultiCompiler.js +283 -283
  86. package/lib/MultiModule.js +87 -81
  87. package/lib/MultiModuleFactory.js +23 -23
  88. package/lib/MultiStats.js +92 -92
  89. package/lib/MultiWatching.js +38 -38
  90. package/lib/NamedChunksPlugin.js +29 -29
  91. package/lib/NamedModulesPlugin.js +57 -57
  92. package/lib/NoEmitOnErrorsPlugin.js +20 -20
  93. package/lib/NoModeWarning.js +23 -23
  94. package/lib/NodeStuffPlugin.js +197 -179
  95. package/lib/NormalModule.js +542 -536
  96. package/lib/NormalModuleFactory.js +526 -526
  97. package/lib/NormalModuleReplacementPlugin.js +51 -51
  98. package/lib/NullFactory.js +12 -12
  99. package/lib/OptionsApply.js +10 -10
  100. package/lib/OptionsDefaulter.js +84 -84
  101. package/lib/Parser.js +2202 -2193
  102. package/lib/ParserHelpers.js +103 -103
  103. package/lib/PrefetchPlugin.js +37 -37
  104. package/lib/ProgressPlugin.js +246 -246
  105. package/lib/ProvidePlugin.js +86 -86
  106. package/lib/RawModule.js +56 -56
  107. package/lib/RecordIdsPlugin.js +230 -230
  108. package/lib/RemovedPluginError.js +11 -11
  109. package/lib/RequestShortener.js +83 -83
  110. package/lib/RequireJsStuffPlugin.js +69 -69
  111. package/lib/ResolverFactory.js +64 -64
  112. package/lib/RuntimeTemplate.js +12 -0
  113. package/lib/SetVarMainTemplatePlugin.js +69 -69
  114. package/lib/SingleEntryPlugin.js +6 -1
  115. package/lib/SizeFormatHelpers.js +24 -24
  116. package/lib/SourceMapDevToolModuleOptionsPlugin.js +49 -49
  117. package/lib/SourceMapDevToolPlugin.js +301 -301
  118. package/lib/Stats.js +28 -5
  119. package/lib/TemplatedPathPlugin.js +173 -173
  120. package/lib/UnsupportedFeatureWarning.js +22 -22
  121. package/lib/UseStrictPlugin.js +54 -54
  122. package/lib/WarnCaseSensitiveModulesPlugin.js +37 -37
  123. package/lib/WarnNoModeSetPlugin.js +17 -17
  124. package/lib/WatchIgnorePlugin.js +100 -100
  125. package/lib/Watching.js +194 -194
  126. package/lib/WebpackOptionsApply.js +92 -10
  127. package/lib/WebpackOptionsDefaulter.js +368 -354
  128. package/lib/debug/ProfilingPlugin.js +430 -430
  129. package/lib/dependencies/AMDPlugin.js +250 -250
  130. package/lib/dependencies/AMDRequireArrayDependency.js +49 -49
  131. package/lib/dependencies/AMDRequireContextDependency.js +20 -20
  132. package/lib/dependencies/AMDRequireDependency.js +135 -135
  133. package/lib/dependencies/AMDRequireItemDependency.js +22 -22
  134. package/lib/dependencies/CommonJsPlugin.js +161 -161
  135. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -23
  136. package/lib/dependencies/CommonJsRequireDependency.js +22 -22
  137. package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +6 -0
  138. package/lib/dependencies/ConstDependency.js +33 -33
  139. package/lib/dependencies/ContextDependency.js +68 -68
  140. package/lib/dependencies/ContextDependencyHelpers.js +142 -142
  141. package/lib/dependencies/ContextDependencyTemplateAsId.js +42 -42
  142. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +38 -38
  143. package/lib/dependencies/ContextElementDependency.js +21 -21
  144. package/lib/dependencies/CriticalDependencyWarning.js +20 -20
  145. package/lib/dependencies/DelegatedSourceDependency.js +18 -18
  146. package/lib/dependencies/DllEntryDependency.js +20 -20
  147. package/lib/dependencies/HarmonyAcceptDependency.js +45 -45
  148. package/lib/dependencies/HarmonyCompatibilityDependency.js +31 -31
  149. package/lib/dependencies/HarmonyDetectionParserPlugin.js +92 -92
  150. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +139 -139
  151. package/lib/dependencies/HarmonyExportHeaderDependency.js +30 -30
  152. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +2 -1
  153. package/lib/dependencies/HarmonyImportDependency.js +109 -109
  154. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +222 -222
  155. package/lib/dependencies/HarmonyImportSideEffectDependency.js +31 -31
  156. package/lib/dependencies/HarmonyImportSpecifierDependency.js +167 -167
  157. package/lib/dependencies/HarmonyInitDependency.js +60 -60
  158. package/lib/dependencies/HarmonyModulesPlugin.js +146 -146
  159. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +26 -26
  160. package/lib/dependencies/ImportContextDependency.js +23 -23
  161. package/lib/dependencies/ImportDependenciesBlock.js +18 -18
  162. package/lib/dependencies/ImportDependency.js +34 -34
  163. package/lib/dependencies/ImportEagerDependency.js +32 -32
  164. package/lib/dependencies/ImportParserPlugin.js +263 -263
  165. package/lib/dependencies/ImportPlugin.js +82 -82
  166. package/lib/dependencies/ImportWeakDependency.js +34 -34
  167. package/lib/dependencies/LoaderPlugin.js +18 -1
  168. package/lib/dependencies/LocalModule.js +23 -23
  169. package/lib/dependencies/LocalModulesHelpers.js +52 -52
  170. package/lib/dependencies/ModuleDependencyTemplateAsId.js +17 -17
  171. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +17 -17
  172. package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
  173. package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
  174. package/lib/dependencies/NullDependency.js +20 -20
  175. package/lib/dependencies/PrefetchDependency.js +18 -18
  176. package/lib/dependencies/RequireContextDependency.js +22 -22
  177. package/lib/dependencies/RequireContextDependencyParserPlugin.js +56 -56
  178. package/lib/dependencies/RequireContextPlugin.js +143 -143
  179. package/lib/dependencies/RequireEnsureDependenciesBlock.js +33 -33
  180. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +116 -116
  181. package/lib/dependencies/RequireEnsureDependency.js +58 -58
  182. package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
  183. package/lib/dependencies/RequireEnsurePlugin.js +74 -74
  184. package/lib/dependencies/RequireHeaderDependency.js +26 -26
  185. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +23 -23
  186. package/lib/dependencies/RequireIncludePlugin.js +61 -61
  187. package/lib/dependencies/RequireResolveContextDependency.js +23 -23
  188. package/lib/dependencies/RequireResolveDependency.js +22 -22
  189. package/lib/dependencies/RequireResolveDependencyParserPlugin.js +85 -85
  190. package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
  191. package/lib/dependencies/SystemPlugin.js +125 -125
  192. package/lib/dependencies/UnsupportedDependency.js +27 -27
  193. package/lib/dependencies/WebAssemblyExportImportedDependency.js +29 -29
  194. package/lib/dependencies/WebAssemblyImportDependency.js +48 -48
  195. package/lib/dependencies/WebpackMissingModule.js +20 -20
  196. package/lib/formatLocation.js +75 -61
  197. package/lib/node/NodeChunkTemplatePlugin.js +31 -31
  198. package/lib/node/NodeEnvironmentPlugin.js +28 -28
  199. package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +36 -36
  200. package/lib/node/NodeMainTemplate.runtime.js +27 -27
  201. package/lib/node/NodeMainTemplatePlugin.js +323 -323
  202. package/lib/node/NodeOutputFileSystem.js +22 -22
  203. package/lib/node/NodeSourcePlugin.js +144 -144
  204. package/lib/node/NodeTargetPlugin.js +18 -18
  205. package/lib/node/NodeTemplatePlugin.js +31 -31
  206. package/lib/node/NodeWatchFileSystem.js +99 -99
  207. package/lib/node/ReadFileCompileWasmTemplatePlugin.js +61 -61
  208. package/lib/optimize/AggressiveMergingPlugin.js +87 -87
  209. package/lib/optimize/AggressiveSplittingPlugin.js +287 -287
  210. package/lib/optimize/ConcatenatedModule.js +5 -0
  211. package/lib/optimize/EnsureChunkConditionsPlugin.js +70 -70
  212. package/lib/optimize/FlagIncludedChunksPlugin.js +99 -99
  213. package/lib/optimize/LimitChunkCountPlugin.js +66 -66
  214. package/lib/optimize/MergeDuplicateChunksPlugin.js +78 -78
  215. package/lib/optimize/MinChunkSizePlugin.js +77 -77
  216. package/lib/optimize/NaturalChunkOrderPlugin.js +41 -0
  217. package/lib/optimize/OccurrenceChunkOrderPlugin.js +61 -0
  218. package/lib/optimize/OccurrenceModuleOrderPlugin.js +103 -0
  219. package/lib/optimize/OccurrenceOrderPlugin.js +135 -133
  220. package/lib/optimize/RemoveEmptyChunksPlugin.js +42 -42
  221. package/lib/optimize/RemoveParentModulesPlugin.js +127 -127
  222. package/lib/optimize/RuntimeChunkPlugin.js +41 -41
  223. package/lib/optimize/SideEffectsFlagPlugin.js +168 -168
  224. package/lib/optimize/SplitChunksPlugin.js +866 -850
  225. package/lib/performance/AssetsOverSizeLimitWarning.js +30 -30
  226. package/lib/performance/EntrypointsOverSizeLimitWarning.js +30 -30
  227. package/lib/performance/NoAsyncChunksWarning.js +21 -21
  228. package/lib/performance/SizeLimitsPlugin.js +105 -105
  229. package/lib/util/SortableSet.js +1 -0
  230. package/lib/util/StackedSetMap.js +144 -135
  231. package/lib/util/TrackingSet.js +35 -35
  232. package/lib/util/cachedMerge.js +35 -35
  233. package/lib/util/deterministicGrouping.js +251 -251
  234. package/lib/util/identifier.js +103 -103
  235. package/lib/util/objectToMap.js +16 -16
  236. package/lib/validateSchema.js +67 -67
  237. package/lib/wasm/UnsupportedWebAssemblyFeatureError.js +17 -17
  238. package/lib/wasm/WasmFinalizeExportsPlugin.js +1 -1
  239. package/lib/wasm/WebAssemblyGenerator.js +16 -2
  240. package/lib/wasm/WebAssemblyJavascriptGenerator.js +147 -133
  241. package/lib/wasm/WebAssemblyParser.js +174 -174
  242. package/lib/wasm/WebAssemblyUtils.js +59 -59
  243. package/lib/web/FetchCompileWasmTemplatePlugin.js +37 -37
  244. package/lib/web/JsonpExportMainTemplatePlugin.js +47 -47
  245. package/lib/web/JsonpHotUpdateChunkTemplatePlugin.js +39 -39
  246. package/lib/web/JsonpMainTemplate.runtime.js +65 -65
  247. package/lib/web/JsonpMainTemplatePlugin.js +1 -1
  248. package/lib/web/JsonpTemplatePlugin.js +23 -23
  249. package/lib/web/WebEnvironmentPlugin.js +18 -18
  250. package/lib/webpack.js +5 -0
  251. package/lib/webworker/WebWorkerChunkTemplatePlugin.js +35 -35
  252. package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +40 -40
  253. package/lib/webworker/WebWorkerMainTemplate.runtime.js +65 -65
  254. package/lib/webworker/WebWorkerMainTemplatePlugin.js +196 -196
  255. package/lib/webworker/WebWorkerTemplatePlugin.js +25 -25
  256. package/package.json +22 -13
  257. package/schemas/WebpackOptions.json +2062 -2036
  258. package/schemas/ajv.absolutePath.js +55 -55
  259. package/schemas/plugins/BannerPlugin.json +96 -96
  260. package/schemas/plugins/DllPlugin.json +32 -32
  261. package/schemas/plugins/DllReferencePlugin.json +99 -99
  262. package/schemas/plugins/HashedModuleIdsPlugin.json +24 -24
  263. package/schemas/plugins/LoaderOptionsPlugin.json +26 -26
  264. package/schemas/plugins/SourceMapDevToolPlugin.json +187 -187
  265. package/schemas/plugins/WatchIgnorePlugin.json +16 -16
  266. package/schemas/plugins/debug/ProfilingPlugin.json +12 -12
  267. package/schemas/plugins/optimize/AggressiveSplittingPlugin.json +22 -22
  268. package/schemas/plugins/optimize/LimitChunkCountPlugin.json +15 -15
  269. package/schemas/plugins/optimize/MinChunkSizePlugin.json +13 -13
  270. package/schemas/plugins/optimize/OccurrenceOrderChunkIdsPlugin.json +10 -0
  271. package/schemas/plugins/optimize/OccurrenceOrderModuleIdsPlugin.json +10 -0
@@ -1,133 +1,133 @@
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(
12
- resourceRegExp,
13
- newContentResource,
14
- newContentRecursive,
15
- newContentRegExp
16
- ) {
17
- this.resourceRegExp = resourceRegExp;
18
-
19
- if (typeof newContentResource === "function") {
20
- this.newContentCallback = newContentResource;
21
- } else if (
22
- typeof newContentResource === "string" &&
23
- typeof newContentRecursive === "object"
24
- ) {
25
- this.newContentResource = newContentResource;
26
- this.newContentCreateContextMap = (fs, callback) => {
27
- callback(null, newContentRecursive);
28
- };
29
- } else if (
30
- typeof newContentResource === "string" &&
31
- typeof newContentRecursive === "function"
32
- ) {
33
- this.newContentResource = newContentResource;
34
- this.newContentCreateContextMap = newContentRecursive;
35
- } else {
36
- if (typeof newContentResource !== "string") {
37
- newContentRegExp = newContentRecursive;
38
- newContentRecursive = newContentResource;
39
- newContentResource = undefined;
40
- }
41
- if (typeof newContentRecursive !== "boolean") {
42
- newContentRegExp = newContentRecursive;
43
- newContentRecursive = undefined;
44
- }
45
- this.newContentResource = newContentResource;
46
- this.newContentRecursive = newContentRecursive;
47
- this.newContentRegExp = newContentRegExp;
48
- }
49
- }
50
-
51
- apply(compiler) {
52
- const resourceRegExp = this.resourceRegExp;
53
- const newContentCallback = this.newContentCallback;
54
- const newContentResource = this.newContentResource;
55
- const newContentRecursive = this.newContentRecursive;
56
- const newContentRegExp = this.newContentRegExp;
57
- const newContentCreateContextMap = this.newContentCreateContextMap;
58
-
59
- compiler.hooks.contextModuleFactory.tap("ContextReplacementPlugin", cmf => {
60
- cmf.hooks.beforeResolve.tap("ContextReplacementPlugin", result => {
61
- if (!result) return;
62
- if (resourceRegExp.test(result.request)) {
63
- if (typeof newContentResource !== "undefined") {
64
- result.request = newContentResource;
65
- }
66
- if (typeof newContentRecursive !== "undefined") {
67
- result.recursive = newContentRecursive;
68
- }
69
- if (typeof newContentRegExp !== "undefined") {
70
- result.regExp = newContentRegExp;
71
- }
72
- if (typeof newContentCallback === "function") {
73
- newContentCallback(result);
74
- } else {
75
- for (const d of result.dependencies) {
76
- if (d.critical) d.critical = false;
77
- }
78
- }
79
- }
80
- return result;
81
- });
82
- cmf.hooks.afterResolve.tap("ContextReplacementPlugin", result => {
83
- if (!result) return;
84
- if (resourceRegExp.test(result.resource)) {
85
- if (typeof newContentResource !== "undefined") {
86
- result.resource = path.resolve(result.resource, newContentResource);
87
- }
88
- if (typeof newContentRecursive !== "undefined") {
89
- result.recursive = newContentRecursive;
90
- }
91
- if (typeof newContentRegExp !== "undefined") {
92
- result.regExp = newContentRegExp;
93
- }
94
- if (typeof newContentCreateContextMap === "function") {
95
- result.resolveDependencies = createResolveDependenciesFromContextMap(
96
- newContentCreateContextMap
97
- );
98
- }
99
- if (typeof newContentCallback === "function") {
100
- const origResource = result.resource;
101
- newContentCallback(result);
102
- if (result.resource !== origResource) {
103
- result.resource = path.resolve(origResource, result.resource);
104
- }
105
- } else {
106
- for (const d of result.dependencies) {
107
- if (d.critical) d.critical = false;
108
- }
109
- }
110
- }
111
- return result;
112
- });
113
- });
114
- }
115
- }
116
-
117
- const createResolveDependenciesFromContextMap = createContextMap => {
118
- const resolveDependenciesFromContextMap = (fs, options, callback) => {
119
- createContextMap(fs, (err, map) => {
120
- if (err) return callback(err);
121
- const dependencies = Object.keys(map).map(key => {
122
- return new ContextElementDependency(
123
- map[key] + options.resourceQuery,
124
- key
125
- );
126
- });
127
- callback(null, dependencies);
128
- });
129
- };
130
- return resolveDependenciesFromContextMap;
131
- };
132
-
133
- 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(
12
+ resourceRegExp,
13
+ newContentResource,
14
+ newContentRecursive,
15
+ newContentRegExp
16
+ ) {
17
+ this.resourceRegExp = resourceRegExp;
18
+
19
+ if (typeof newContentResource === "function") {
20
+ this.newContentCallback = newContentResource;
21
+ } else if (
22
+ typeof newContentResource === "string" &&
23
+ typeof newContentRecursive === "object"
24
+ ) {
25
+ this.newContentResource = newContentResource;
26
+ this.newContentCreateContextMap = (fs, callback) => {
27
+ callback(null, newContentRecursive);
28
+ };
29
+ } else if (
30
+ typeof newContentResource === "string" &&
31
+ typeof newContentRecursive === "function"
32
+ ) {
33
+ this.newContentResource = newContentResource;
34
+ this.newContentCreateContextMap = newContentRecursive;
35
+ } else {
36
+ if (typeof newContentResource !== "string") {
37
+ newContentRegExp = newContentRecursive;
38
+ newContentRecursive = newContentResource;
39
+ newContentResource = undefined;
40
+ }
41
+ if (typeof newContentRecursive !== "boolean") {
42
+ newContentRegExp = newContentRecursive;
43
+ newContentRecursive = undefined;
44
+ }
45
+ this.newContentResource = newContentResource;
46
+ this.newContentRecursive = newContentRecursive;
47
+ this.newContentRegExp = newContentRegExp;
48
+ }
49
+ }
50
+
51
+ apply(compiler) {
52
+ const resourceRegExp = this.resourceRegExp;
53
+ const newContentCallback = this.newContentCallback;
54
+ const newContentResource = this.newContentResource;
55
+ const newContentRecursive = this.newContentRecursive;
56
+ const newContentRegExp = this.newContentRegExp;
57
+ const newContentCreateContextMap = this.newContentCreateContextMap;
58
+
59
+ compiler.hooks.contextModuleFactory.tap("ContextReplacementPlugin", cmf => {
60
+ cmf.hooks.beforeResolve.tap("ContextReplacementPlugin", result => {
61
+ if (!result) return;
62
+ if (resourceRegExp.test(result.request)) {
63
+ if (typeof newContentResource !== "undefined") {
64
+ result.request = newContentResource;
65
+ }
66
+ if (typeof newContentRecursive !== "undefined") {
67
+ result.recursive = newContentRecursive;
68
+ }
69
+ if (typeof newContentRegExp !== "undefined") {
70
+ result.regExp = newContentRegExp;
71
+ }
72
+ if (typeof newContentCallback === "function") {
73
+ newContentCallback(result);
74
+ } else {
75
+ for (const d of result.dependencies) {
76
+ if (d.critical) d.critical = false;
77
+ }
78
+ }
79
+ }
80
+ return result;
81
+ });
82
+ cmf.hooks.afterResolve.tap("ContextReplacementPlugin", result => {
83
+ if (!result) return;
84
+ if (resourceRegExp.test(result.resource)) {
85
+ if (typeof newContentResource !== "undefined") {
86
+ result.resource = path.resolve(result.resource, newContentResource);
87
+ }
88
+ if (typeof newContentRecursive !== "undefined") {
89
+ result.recursive = newContentRecursive;
90
+ }
91
+ if (typeof newContentRegExp !== "undefined") {
92
+ result.regExp = newContentRegExp;
93
+ }
94
+ if (typeof newContentCreateContextMap === "function") {
95
+ result.resolveDependencies = createResolveDependenciesFromContextMap(
96
+ newContentCreateContextMap
97
+ );
98
+ }
99
+ if (typeof newContentCallback === "function") {
100
+ const origResource = result.resource;
101
+ newContentCallback(result);
102
+ if (result.resource !== origResource) {
103
+ result.resource = path.resolve(origResource, result.resource);
104
+ }
105
+ } else {
106
+ for (const d of result.dependencies) {
107
+ if (d.critical) d.critical = false;
108
+ }
109
+ }
110
+ }
111
+ return result;
112
+ });
113
+ });
114
+ }
115
+ }
116
+
117
+ const createResolveDependenciesFromContextMap = createContextMap => {
118
+ const resolveDependenciesFromContextMap = (fs, options, callback) => {
119
+ createContextMap(fs, (err, map) => {
120
+ if (err) return callback(err);
121
+ const dependencies = Object.keys(map).map(key => {
122
+ return new ContextElementDependency(
123
+ map[key] + options.resourceQuery,
124
+ key
125
+ );
126
+ });
127
+ callback(null, dependencies);
128
+ });
129
+ };
130
+ return resolveDependenciesFromContextMap;
131
+ };
132
+
133
+ module.exports = ContextReplacementPlugin;
@@ -9,6 +9,11 @@ const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
9
9
  const ParserHelpers = require("./ParserHelpers");
10
10
  const NullFactory = require("./NullFactory");
11
11
 
12
+ /** @typedef {import("./Compiler")} Compiler */
13
+ /** @typedef {import("./Parser")} Parser */
14
+ /** @typedef {null|undefined|RegExp|Function|string|number} CodeValuePrimitive */
15
+ /** @typedef {CodeValuePrimitive|Record<string, CodeValuePrimitive>|RuntimeValue} CodeValue */
16
+
12
17
  class RuntimeValue {
13
18
  constructor(fn, fileDependencies) {
14
19
  this.fn = fn;
@@ -37,6 +42,12 @@ const stringifyObj = (obj, parser) => {
37
42
  );
38
43
  };
39
44
 
45
+ /**
46
+ * Convert code to a string that evaluates
47
+ * @param {CodeValue} code Code to evaluate
48
+ * @param {Parser} parser Parser
49
+ * @returns {string} code converted to string that evaluates
50
+ */
40
51
  const toCode = (code, parser) => {
41
52
  if (code === null) {
42
53
  return "null";
@@ -60,6 +71,10 @@ const toCode = (code, parser) => {
60
71
  };
61
72
 
62
73
  class DefinePlugin {
74
+ /**
75
+ * Create a new define plugin
76
+ * @param {Record<string, CodeValue>} definitions A map of global object definitions
77
+ */
63
78
  constructor(definitions) {
64
79
  this.definitions = definitions;
65
80
  }
@@ -68,6 +83,11 @@ class DefinePlugin {
68
83
  return new RuntimeValue(fn, fileDependencies);
69
84
  }
70
85
 
86
+ /**
87
+ * Apply the plugin
88
+ * @param {Compiler} compiler Webpack compiler
89
+ * @returns {void}
90
+ */
71
91
  apply(compiler) {
72
92
  const definitions = this.definitions;
73
93
  compiler.hooks.compilation.tap(
@@ -79,7 +99,18 @@ class DefinePlugin {
79
99
  new ConstDependency.Template()
80
100
  );
81
101
 
102
+ /**
103
+ * Handler
104
+ * @param {Parser} parser Parser
105
+ * @returns {void}
106
+ */
82
107
  const handler = parser => {
108
+ /**
109
+ * Walk definitions
110
+ * @param {Object} definitions Definitions map
111
+ * @param {string} prefix Prefix string
112
+ * @returns {void}
113
+ */
83
114
  const walkDefinitions = (definitions, prefix) => {
84
115
  Object.keys(definitions).forEach(key => {
85
116
  const code = definitions[key];
@@ -98,6 +129,12 @@ class DefinePlugin {
98
129
  });
99
130
  };
100
131
 
132
+ /**
133
+ * Apply define key
134
+ * @param {string} prefix Prefix
135
+ * @param {string} key Key
136
+ * @returns {void}
137
+ */
101
138
  const applyDefineKey = (prefix, key) => {
102
139
  const splittedKey = key.split(".");
103
140
  splittedKey.slice(1).forEach((_, i) => {
@@ -108,6 +145,12 @@ class DefinePlugin {
108
145
  });
109
146
  };
110
147
 
148
+ /**
149
+ * Apply Code
150
+ * @param {string} key Key
151
+ * @param {CodeValue} code Code
152
+ * @returns {void}
153
+ */
111
154
  const applyDefine = (key, code) => {
112
155
  const isTypeof = /^typeof\s+/.test(key);
113
156
  if (isTypeof) key = key.replace(/^typeof\s+/, "");
@@ -181,6 +224,12 @@ class DefinePlugin {
181
224
  });
182
225
  };
183
226
 
227
+ /**
228
+ * Apply Object
229
+ * @param {string} key Key
230
+ * @param {Object} obj Object
231
+ * @returns {void}
232
+ */
184
233
  const applyObjectDefine = (key, obj) => {
185
234
  parser.hooks.canRename
186
235
  .for(key)
@@ -12,6 +12,7 @@ const DelegatedSourceDependency = require("./dependencies/DelegatedSourceDepende
12
12
  const DelegatedExportsDependency = require("./dependencies/DelegatedExportsDependency");
13
13
 
14
14
  /** @typedef {import("./dependencies/ModuleDependency")} ModuleDependency */
15
+ /** @typedef {import("./util/createHash").Hash} Hash */
15
16
 
16
17
  class DelegatedModule extends Module {
17
18
  constructor(sourceRequest, data, type, userRequest, originalRequest) {
@@ -99,6 +100,10 @@ class DelegatedModule extends Module {
99
100
  return 42;
100
101
  }
101
102
 
103
+ /**
104
+ * @param {Hash} hash the hash used to track dependencies
105
+ * @returns {void}
106
+ */
102
107
  updateHash(hash) {
103
108
  hash.update(this.type);
104
109
  hash.update(JSON.stringify(this.request));
@@ -1,89 +1,95 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const DelegatedModule = require("./DelegatedModule");
8
-
9
- // options.source
10
- // options.type
11
- // options.context
12
- // options.scope
13
- // options.content
14
- class DelegatedModuleFactoryPlugin {
15
- constructor(options) {
16
- this.options = options;
17
- options.type = options.type || "require";
18
- options.extensions = options.extensions || ["", ".js"];
19
- }
20
-
21
- apply(normalModuleFactory) {
22
- const scope = this.options.scope;
23
- if (scope) {
24
- normalModuleFactory.hooks.factory.tap(
25
- "DelegatedModuleFactoryPlugin",
26
- factory => (data, callback) => {
27
- const dependency = data.dependencies[0];
28
- const request = dependency.request;
29
- if (request && request.indexOf(scope + "/") === 0) {
30
- const innerRequest = "." + request.substr(scope.length);
31
- let resolved;
32
- if (innerRequest in this.options.content) {
33
- resolved = this.options.content[innerRequest];
34
- return callback(
35
- null,
36
- new DelegatedModule(
37
- this.options.source,
38
- resolved,
39
- this.options.type,
40
- innerRequest,
41
- request
42
- )
43
- );
44
- }
45
- for (let i = 0; i < this.options.extensions.length; i++) {
46
- const extension = this.options.extensions[i];
47
- const requestPlusExt = innerRequest + extension;
48
- if (requestPlusExt in this.options.content) {
49
- resolved = this.options.content[requestPlusExt];
50
- return callback(
51
- null,
52
- new DelegatedModule(
53
- this.options.source,
54
- resolved,
55
- this.options.type,
56
- requestPlusExt,
57
- request + extension
58
- )
59
- );
60
- }
61
- }
62
- }
63
- return factory(data, callback);
64
- }
65
- );
66
- } else {
67
- normalModuleFactory.hooks.module.tap(
68
- "DelegatedModuleFactoryPlugin",
69
- module => {
70
- if (module.libIdent) {
71
- const request = module.libIdent(this.options);
72
- if (request && request in this.options.content) {
73
- const resolved = this.options.content[request];
74
- return new DelegatedModule(
75
- this.options.source,
76
- resolved,
77
- this.options.type,
78
- request,
79
- module
80
- );
81
- }
82
- }
83
- return module;
84
- }
85
- );
86
- }
87
- }
88
- }
89
- module.exports = DelegatedModuleFactoryPlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const DelegatedModule = require("./DelegatedModule");
8
+
9
+ // options.source
10
+ // options.type
11
+ // options.context
12
+ // options.scope
13
+ // options.content
14
+ class DelegatedModuleFactoryPlugin {
15
+ constructor(options) {
16
+ this.options = options;
17
+ options.type = options.type || "require";
18
+ options.extensions = options.extensions || [
19
+ "",
20
+ ".wasm",
21
+ ".mjs",
22
+ ".js",
23
+ ".json"
24
+ ];
25
+ }
26
+
27
+ apply(normalModuleFactory) {
28
+ const scope = this.options.scope;
29
+ if (scope) {
30
+ normalModuleFactory.hooks.factory.tap(
31
+ "DelegatedModuleFactoryPlugin",
32
+ factory => (data, callback) => {
33
+ const dependency = data.dependencies[0];
34
+ const request = dependency.request;
35
+ if (request && request.indexOf(scope + "/") === 0) {
36
+ const innerRequest = "." + request.substr(scope.length);
37
+ let resolved;
38
+ if (innerRequest in this.options.content) {
39
+ resolved = this.options.content[innerRequest];
40
+ return callback(
41
+ null,
42
+ new DelegatedModule(
43
+ this.options.source,
44
+ resolved,
45
+ this.options.type,
46
+ innerRequest,
47
+ request
48
+ )
49
+ );
50
+ }
51
+ for (let i = 0; i < this.options.extensions.length; i++) {
52
+ const extension = this.options.extensions[i];
53
+ const requestPlusExt = innerRequest + extension;
54
+ if (requestPlusExt in this.options.content) {
55
+ resolved = this.options.content[requestPlusExt];
56
+ return callback(
57
+ null,
58
+ new DelegatedModule(
59
+ this.options.source,
60
+ resolved,
61
+ this.options.type,
62
+ requestPlusExt,
63
+ request + extension
64
+ )
65
+ );
66
+ }
67
+ }
68
+ }
69
+ return factory(data, callback);
70
+ }
71
+ );
72
+ } else {
73
+ normalModuleFactory.hooks.module.tap(
74
+ "DelegatedModuleFactoryPlugin",
75
+ module => {
76
+ if (module.libIdent) {
77
+ const request = module.libIdent(this.options);
78
+ if (request && request in this.options.content) {
79
+ const resolved = this.options.content[request];
80
+ return new DelegatedModule(
81
+ this.options.source,
82
+ resolved,
83
+ this.options.type,
84
+ request,
85
+ module
86
+ );
87
+ }
88
+ }
89
+ return module;
90
+ }
91
+ );
92
+ }
93
+ }
94
+ }
95
+ module.exports = DelegatedModuleFactoryPlugin;
@@ -1,39 +1,39 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
-
6
- "use strict";
7
-
8
- const DelegatedModuleFactoryPlugin = require("./DelegatedModuleFactoryPlugin");
9
- const DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency");
10
- const DelegatedExportsDependency = require("./dependencies/DelegatedExportsDependency");
11
- const NullFactory = require("./NullFactory");
12
-
13
- class DelegatedPlugin {
14
- constructor(options) {
15
- this.options = options;
16
- }
17
-
18
- apply(compiler) {
19
- compiler.hooks.compilation.tap(
20
- "DelegatedPlugin",
21
- (compilation, { normalModuleFactory }) => {
22
- compilation.dependencyFactories.set(
23
- DelegatedSourceDependency,
24
- normalModuleFactory
25
- );
26
- compilation.dependencyFactories.set(
27
- DelegatedExportsDependency,
28
- new NullFactory()
29
- );
30
- }
31
- );
32
-
33
- compiler.hooks.compile.tap("DelegatedPlugin", ({ normalModuleFactory }) => {
34
- new DelegatedModuleFactoryPlugin(this.options).apply(normalModuleFactory);
35
- });
36
- }
37
- }
38
-
39
- module.exports = DelegatedPlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const DelegatedModuleFactoryPlugin = require("./DelegatedModuleFactoryPlugin");
9
+ const DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency");
10
+ const DelegatedExportsDependency = require("./dependencies/DelegatedExportsDependency");
11
+ const NullFactory = require("./NullFactory");
12
+
13
+ class DelegatedPlugin {
14
+ constructor(options) {
15
+ this.options = options;
16
+ }
17
+
18
+ apply(compiler) {
19
+ compiler.hooks.compilation.tap(
20
+ "DelegatedPlugin",
21
+ (compilation, { normalModuleFactory }) => {
22
+ compilation.dependencyFactories.set(
23
+ DelegatedSourceDependency,
24
+ normalModuleFactory
25
+ );
26
+ compilation.dependencyFactories.set(
27
+ DelegatedExportsDependency,
28
+ new NullFactory()
29
+ );
30
+ }
31
+ );
32
+
33
+ compiler.hooks.compile.tap("DelegatedPlugin", ({ normalModuleFactory }) => {
34
+ new DelegatedModuleFactoryPlugin(this.options).apply(normalModuleFactory);
35
+ });
36
+ }
37
+ }
38
+
39
+ module.exports = DelegatedPlugin;
@@ -73,7 +73,7 @@ class DependenciesBlock {
73
73
  }
74
74
 
75
75
  /**
76
- * @param {Hash} hash the hash used to track dependencies, from "crypto" module
76
+ * @param {Hash} hash the hash used to track dependencies
77
77
  * @returns {void}
78
78
  */
79
79
  updateHash(hash) {