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.
- package/LICENSE +20 -20
- package/README.md +761 -758
- package/SECURITY.md +9 -9
- package/buildin/amd-define.js +3 -3
- package/buildin/amd-options.js +2 -2
- package/buildin/global.js +20 -20
- package/buildin/harmony-module.js +24 -24
- package/buildin/module.js +22 -22
- package/buildin/system.js +7 -7
- package/hot/dev-server.js +61 -61
- package/hot/emitter.js +2 -2
- package/hot/log-apply-result.js +44 -44
- package/hot/log.js +45 -45
- package/hot/only-dev-server.js +105 -105
- package/hot/poll.js +40 -37
- package/hot/signal.js +62 -62
- package/lib/APIPlugin.js +84 -84
- package/lib/AmdMainTemplatePlugin.js +87 -87
- package/lib/AsyncDependencyToInitialChunkError.js +31 -31
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/BannerPlugin.js +117 -117
- package/lib/BasicEvaluatedExpression.js +211 -211
- package/lib/CachePlugin.js +102 -102
- package/lib/CaseSensitiveModulesWarning.js +67 -67
- package/lib/Chunk.js +833 -811
- package/lib/ChunkGroup.js +4 -4
- package/lib/ChunkRenderError.js +32 -32
- package/lib/CommentCompilationWarning.js +2 -2
- package/lib/CompatibilityPlugin.js +70 -70
- package/lib/Compilation.js +46 -15
- package/lib/ConcurrentCompilationError.js +19 -19
- package/lib/ConstPlugin.js +258 -258
- package/lib/ContextExclusionPlugin.js +28 -17
- package/lib/ContextModule.js +844 -739
- package/lib/ContextModuleFactory.js +262 -256
- package/lib/ContextReplacementPlugin.js +133 -133
- package/lib/DefinePlugin.js +49 -0
- package/lib/DelegatedModule.js +5 -0
- package/lib/DelegatedModuleFactoryPlugin.js +95 -89
- package/lib/DelegatedPlugin.js +39 -39
- package/lib/DependenciesBlock.js +1 -1
- package/lib/Dependency.js +10 -4
- package/lib/DllModule.js +60 -54
- package/lib/DllModuleFactory.js +29 -29
- package/lib/DllPlugin.js +44 -44
- package/lib/DllReferencePlugin.js +132 -84
- package/lib/EntryModuleNotFoundError.js +21 -21
- package/lib/Entrypoint.js +54 -54
- package/lib/EnvironmentPlugin.js +72 -65
- package/lib/ErrorHelpers.js +60 -60
- package/lib/EvalDevToolModulePlugin.js +27 -27
- package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +115 -115
- package/lib/EvalSourceMapDevToolPlugin.js +41 -41
- package/lib/ExportPropertyMainTemplatePlugin.js +53 -53
- package/lib/ExternalModule.js +165 -159
- package/lib/ExternalsPlugin.js +23 -23
- package/lib/FlagDependencyExportsPlugin.js +146 -146
- package/lib/FlagInitialModulesAsUsedPlugin.js +36 -36
- package/lib/FunctionModuleTemplatePlugin.js +100 -100
- package/lib/Generator.js +60 -52
- package/lib/HarmonyLinkingError.js +17 -17
- package/lib/HashedModuleIdsPlugin.js +53 -53
- package/lib/HotModuleReplacementPlugin.js +411 -413
- package/lib/IgnorePlugin.js +90 -90
- package/lib/JavascriptGenerator.js +229 -229
- package/lib/JavascriptModulesPlugin.js +179 -179
- package/lib/JsonGenerator.js +55 -55
- package/lib/JsonModulesPlugin.js +30 -30
- package/lib/JsonParser.js +27 -27
- package/lib/LibManifestPlugin.js +86 -86
- package/lib/LibraryTemplatePlugin.js +153 -153
- package/lib/LoaderOptionsPlugin.js +53 -53
- package/lib/LoaderTargetPlugin.js +24 -24
- package/lib/MemoryOutputFileSystem.js +5 -5
- package/lib/Module.js +431 -391
- package/lib/ModuleBuildError.js +52 -52
- package/lib/ModuleDependencyError.js +35 -35
- package/lib/ModuleDependencyWarning.js +25 -25
- package/lib/ModuleError.js +36 -36
- package/lib/ModuleFilenameHelpers.js +178 -178
- package/lib/ModuleNotFoundError.js +23 -23
- package/lib/ModuleParseError.js +57 -57
- package/lib/ModuleTemplate.js +93 -93
- package/lib/ModuleWarning.js +36 -36
- package/lib/MultiCompiler.js +283 -283
- package/lib/MultiModule.js +87 -81
- package/lib/MultiModuleFactory.js +23 -23
- package/lib/MultiStats.js +92 -92
- package/lib/MultiWatching.js +38 -38
- package/lib/NamedChunksPlugin.js +29 -29
- package/lib/NamedModulesPlugin.js +57 -57
- package/lib/NoEmitOnErrorsPlugin.js +20 -20
- package/lib/NoModeWarning.js +23 -23
- package/lib/NodeStuffPlugin.js +197 -179
- package/lib/NormalModule.js +542 -536
- package/lib/NormalModuleFactory.js +526 -526
- package/lib/NormalModuleReplacementPlugin.js +51 -51
- package/lib/NullFactory.js +12 -12
- package/lib/OptionsApply.js +10 -10
- package/lib/OptionsDefaulter.js +84 -84
- package/lib/Parser.js +2202 -2193
- package/lib/ParserHelpers.js +103 -103
- package/lib/PrefetchPlugin.js +37 -37
- package/lib/ProgressPlugin.js +246 -246
- package/lib/ProvidePlugin.js +86 -86
- package/lib/RawModule.js +56 -56
- package/lib/RecordIdsPlugin.js +230 -230
- package/lib/RemovedPluginError.js +11 -11
- package/lib/RequestShortener.js +83 -83
- package/lib/RequireJsStuffPlugin.js +69 -69
- package/lib/ResolverFactory.js +64 -64
- package/lib/RuntimeTemplate.js +12 -0
- package/lib/SetVarMainTemplatePlugin.js +69 -69
- package/lib/SingleEntryPlugin.js +6 -1
- package/lib/SizeFormatHelpers.js +24 -24
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +49 -49
- package/lib/SourceMapDevToolPlugin.js +301 -301
- package/lib/Stats.js +28 -5
- package/lib/TemplatedPathPlugin.js +173 -173
- package/lib/UnsupportedFeatureWarning.js +22 -22
- package/lib/UseStrictPlugin.js +54 -54
- package/lib/WarnCaseSensitiveModulesPlugin.js +37 -37
- package/lib/WarnNoModeSetPlugin.js +17 -17
- package/lib/WatchIgnorePlugin.js +100 -100
- package/lib/Watching.js +194 -194
- package/lib/WebpackOptionsApply.js +92 -10
- package/lib/WebpackOptionsDefaulter.js +368 -354
- package/lib/debug/ProfilingPlugin.js +430 -430
- package/lib/dependencies/AMDPlugin.js +250 -250
- package/lib/dependencies/AMDRequireArrayDependency.js +49 -49
- package/lib/dependencies/AMDRequireContextDependency.js +20 -20
- package/lib/dependencies/AMDRequireDependency.js +135 -135
- package/lib/dependencies/AMDRequireItemDependency.js +22 -22
- package/lib/dependencies/CommonJsPlugin.js +161 -161
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -23
- package/lib/dependencies/CommonJsRequireDependency.js +22 -22
- package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +6 -0
- package/lib/dependencies/ConstDependency.js +33 -33
- package/lib/dependencies/ContextDependency.js +68 -68
- package/lib/dependencies/ContextDependencyHelpers.js +142 -142
- package/lib/dependencies/ContextDependencyTemplateAsId.js +42 -42
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +38 -38
- package/lib/dependencies/ContextElementDependency.js +21 -21
- package/lib/dependencies/CriticalDependencyWarning.js +20 -20
- package/lib/dependencies/DelegatedSourceDependency.js +18 -18
- package/lib/dependencies/DllEntryDependency.js +20 -20
- package/lib/dependencies/HarmonyAcceptDependency.js +45 -45
- package/lib/dependencies/HarmonyCompatibilityDependency.js +31 -31
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +92 -92
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +139 -139
- package/lib/dependencies/HarmonyExportHeaderDependency.js +30 -30
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +2 -1
- package/lib/dependencies/HarmonyImportDependency.js +109 -109
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +222 -222
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +31 -31
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +167 -167
- package/lib/dependencies/HarmonyInitDependency.js +60 -60
- package/lib/dependencies/HarmonyModulesPlugin.js +146 -146
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +26 -26
- package/lib/dependencies/ImportContextDependency.js +23 -23
- package/lib/dependencies/ImportDependenciesBlock.js +18 -18
- package/lib/dependencies/ImportDependency.js +34 -34
- package/lib/dependencies/ImportEagerDependency.js +32 -32
- package/lib/dependencies/ImportParserPlugin.js +263 -263
- package/lib/dependencies/ImportPlugin.js +82 -82
- package/lib/dependencies/ImportWeakDependency.js +34 -34
- package/lib/dependencies/LoaderPlugin.js +18 -1
- package/lib/dependencies/LocalModule.js +23 -23
- package/lib/dependencies/LocalModulesHelpers.js +52 -52
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +17 -17
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +17 -17
- package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
- package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
- package/lib/dependencies/NullDependency.js +20 -20
- package/lib/dependencies/PrefetchDependency.js +18 -18
- package/lib/dependencies/RequireContextDependency.js +22 -22
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +56 -56
- package/lib/dependencies/RequireContextPlugin.js +143 -143
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +33 -33
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +116 -116
- package/lib/dependencies/RequireEnsureDependency.js +58 -58
- package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
- package/lib/dependencies/RequireEnsurePlugin.js +74 -74
- package/lib/dependencies/RequireHeaderDependency.js +26 -26
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +23 -23
- package/lib/dependencies/RequireIncludePlugin.js +61 -61
- package/lib/dependencies/RequireResolveContextDependency.js +23 -23
- package/lib/dependencies/RequireResolveDependency.js +22 -22
- package/lib/dependencies/RequireResolveDependencyParserPlugin.js +85 -85
- package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
- package/lib/dependencies/SystemPlugin.js +125 -125
- package/lib/dependencies/UnsupportedDependency.js +27 -27
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +29 -29
- package/lib/dependencies/WebAssemblyImportDependency.js +48 -48
- package/lib/dependencies/WebpackMissingModule.js +20 -20
- package/lib/formatLocation.js +75 -61
- package/lib/node/NodeChunkTemplatePlugin.js +31 -31
- package/lib/node/NodeEnvironmentPlugin.js +28 -28
- package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +36 -36
- package/lib/node/NodeMainTemplate.runtime.js +27 -27
- package/lib/node/NodeMainTemplatePlugin.js +323 -323
- package/lib/node/NodeOutputFileSystem.js +22 -22
- package/lib/node/NodeSourcePlugin.js +144 -144
- package/lib/node/NodeTargetPlugin.js +18 -18
- package/lib/node/NodeTemplatePlugin.js +31 -31
- package/lib/node/NodeWatchFileSystem.js +99 -99
- package/lib/node/ReadFileCompileWasmTemplatePlugin.js +61 -61
- package/lib/optimize/AggressiveMergingPlugin.js +87 -87
- package/lib/optimize/AggressiveSplittingPlugin.js +287 -287
- package/lib/optimize/ConcatenatedModule.js +5 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +70 -70
- package/lib/optimize/FlagIncludedChunksPlugin.js +99 -99
- package/lib/optimize/LimitChunkCountPlugin.js +66 -66
- package/lib/optimize/MergeDuplicateChunksPlugin.js +78 -78
- package/lib/optimize/MinChunkSizePlugin.js +77 -77
- package/lib/optimize/NaturalChunkOrderPlugin.js +41 -0
- package/lib/optimize/OccurrenceChunkOrderPlugin.js +61 -0
- package/lib/optimize/OccurrenceModuleOrderPlugin.js +103 -0
- package/lib/optimize/OccurrenceOrderPlugin.js +135 -133
- package/lib/optimize/RemoveEmptyChunksPlugin.js +42 -42
- package/lib/optimize/RemoveParentModulesPlugin.js +127 -127
- package/lib/optimize/RuntimeChunkPlugin.js +41 -41
- package/lib/optimize/SideEffectsFlagPlugin.js +168 -168
- package/lib/optimize/SplitChunksPlugin.js +866 -850
- package/lib/performance/AssetsOverSizeLimitWarning.js +30 -30
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +30 -30
- package/lib/performance/NoAsyncChunksWarning.js +21 -21
- package/lib/performance/SizeLimitsPlugin.js +105 -105
- package/lib/util/SortableSet.js +1 -0
- package/lib/util/StackedSetMap.js +144 -135
- package/lib/util/TrackingSet.js +35 -35
- package/lib/util/cachedMerge.js +35 -35
- package/lib/util/deterministicGrouping.js +251 -251
- package/lib/util/identifier.js +103 -103
- package/lib/util/objectToMap.js +16 -16
- package/lib/validateSchema.js +67 -67
- package/lib/wasm/UnsupportedWebAssemblyFeatureError.js +17 -17
- package/lib/wasm/WasmFinalizeExportsPlugin.js +1 -1
- package/lib/wasm/WebAssemblyGenerator.js +16 -2
- package/lib/wasm/WebAssemblyJavascriptGenerator.js +147 -133
- package/lib/wasm/WebAssemblyParser.js +174 -174
- package/lib/wasm/WebAssemblyUtils.js +59 -59
- package/lib/web/FetchCompileWasmTemplatePlugin.js +37 -37
- package/lib/web/JsonpExportMainTemplatePlugin.js +47 -47
- package/lib/web/JsonpHotUpdateChunkTemplatePlugin.js +39 -39
- package/lib/web/JsonpMainTemplate.runtime.js +65 -65
- package/lib/web/JsonpMainTemplatePlugin.js +1 -1
- package/lib/web/JsonpTemplatePlugin.js +23 -23
- package/lib/web/WebEnvironmentPlugin.js +18 -18
- package/lib/webpack.js +5 -0
- package/lib/webworker/WebWorkerChunkTemplatePlugin.js +35 -35
- package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +40 -40
- package/lib/webworker/WebWorkerMainTemplate.runtime.js +65 -65
- package/lib/webworker/WebWorkerMainTemplatePlugin.js +196 -196
- package/lib/webworker/WebWorkerTemplatePlugin.js +25 -25
- package/package.json +22 -13
- package/schemas/WebpackOptions.json +2062 -2036
- package/schemas/ajv.absolutePath.js +55 -55
- package/schemas/plugins/BannerPlugin.json +96 -96
- package/schemas/plugins/DllPlugin.json +32 -32
- package/schemas/plugins/DllReferencePlugin.json +99 -99
- package/schemas/plugins/HashedModuleIdsPlugin.json +24 -24
- package/schemas/plugins/LoaderOptionsPlugin.json +26 -26
- package/schemas/plugins/SourceMapDevToolPlugin.json +187 -187
- package/schemas/plugins/WatchIgnorePlugin.json +16 -16
- package/schemas/plugins/debug/ProfilingPlugin.json +12 -12
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.json +22 -22
- package/schemas/plugins/optimize/LimitChunkCountPlugin.json +15 -15
- package/schemas/plugins/optimize/MinChunkSizePlugin.json +13 -13
- package/schemas/plugins/optimize/OccurrenceOrderChunkIdsPlugin.json +10 -0
- package/schemas/plugins/optimize/OccurrenceOrderModuleIdsPlugin.json +10 -0
package/lib/ContextModule.js
CHANGED
@@ -1,739 +1,844 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
const util = require("util");
|
7
|
-
const { OriginalSource, RawSource } = require("webpack-sources");
|
8
|
-
const Module = require("./Module");
|
9
|
-
const AsyncDependenciesBlock = require("./AsyncDependenciesBlock");
|
10
|
-
const Template = require("./Template");
|
11
|
-
const contextify = require("./util/identifier").contextify;
|
12
|
-
|
13
|
-
/** @typedef {
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
//
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
if (this.options.
|
87
|
-
identifier += `
|
88
|
-
}
|
89
|
-
if (this.options.
|
90
|
-
identifier += `
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
}
|
112
|
-
if (this.options.
|
113
|
-
identifier +=
|
114
|
-
}
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
if (this.options.
|
128
|
-
identifier += `
|
129
|
-
}
|
130
|
-
if (this.options.
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
}
|
136
|
-
if (this.options.
|
137
|
-
identifier +=
|
138
|
-
}
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
if (this.options.
|
157
|
-
identifier +=
|
158
|
-
}
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
if (
|
172
|
-
|
173
|
-
}
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
this.
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
this.
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
}
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
return
|
281
|
-
}
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
//
|
289
|
-
//
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
if (
|
345
|
-
return
|
346
|
-
}
|
347
|
-
return
|
348
|
-
}
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
}
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
}
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
}
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
return
|
462
|
-
|
463
|
-
|
464
|
-
function
|
465
|
-
return
|
466
|
-
}
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
}
|
480
|
-
|
481
|
-
|
482
|
-
}
|
483
|
-
|
484
|
-
webpackAsyncContext
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
}
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
}
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
}
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
}
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
}
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
const util = require("util");
|
7
|
+
const { OriginalSource, RawSource } = require("webpack-sources");
|
8
|
+
const Module = require("./Module");
|
9
|
+
const AsyncDependenciesBlock = require("./AsyncDependenciesBlock");
|
10
|
+
const Template = require("./Template");
|
11
|
+
const contextify = require("./util/identifier").contextify;
|
12
|
+
|
13
|
+
/** @typedef {"sync" | "eager" | "weak" | "async-weak" | "lazy" | "lazy-once"} ContextMode Context mode */
|
14
|
+
/** @typedef {import("./dependencies/ContextElementDependency")} ContextElementDependency */
|
15
|
+
|
16
|
+
/**
|
17
|
+
* @callback ResolveDependenciesCallback
|
18
|
+
* @param {Error=} err
|
19
|
+
* @param {ContextElementDependency[]} dependencies
|
20
|
+
*/
|
21
|
+
|
22
|
+
/**
|
23
|
+
* @callback ResolveDependencies
|
24
|
+
* @param {TODO} fs
|
25
|
+
* @param {TODO} options
|
26
|
+
* @param {ResolveDependenciesCallback} callback
|
27
|
+
*/
|
28
|
+
|
29
|
+
class ContextModule extends Module {
|
30
|
+
// type ContextMode = "sync" | "eager" | "weak" | "async-weak" | "lazy" | "lazy-once"
|
31
|
+
// type ContextOptions = { resource: string, recursive: boolean, regExp: RegExp, addon?: string, mode?: ContextMode, chunkName?: string, include?: RegExp, exclude?: RegExp, groupOptions?: Object }
|
32
|
+
// resolveDependencies: (fs: FS, options: ContextOptions, (err: Error?, dependencies: Dependency[]) => void) => void
|
33
|
+
// options: ContextOptions
|
34
|
+
/**
|
35
|
+
* @param {ResolveDependencies} resolveDependencies function to get dependencies in this context
|
36
|
+
* @param {TODO} options options object
|
37
|
+
*/
|
38
|
+
constructor(resolveDependencies, options) {
|
39
|
+
let resource;
|
40
|
+
let resourceQuery;
|
41
|
+
const queryIdx = options.resource.indexOf("?");
|
42
|
+
if (queryIdx >= 0) {
|
43
|
+
resource = options.resource.substr(0, queryIdx);
|
44
|
+
resourceQuery = options.resource.substr(queryIdx);
|
45
|
+
} else {
|
46
|
+
resource = options.resource;
|
47
|
+
resourceQuery = "";
|
48
|
+
}
|
49
|
+
|
50
|
+
super("javascript/dynamic", resource);
|
51
|
+
|
52
|
+
// Info from Factory
|
53
|
+
this.resolveDependencies = resolveDependencies;
|
54
|
+
this.options = Object.assign({}, options, {
|
55
|
+
resource: resource,
|
56
|
+
resourceQuery: resourceQuery
|
57
|
+
});
|
58
|
+
if (options.resolveOptions !== undefined) {
|
59
|
+
this.resolveOptions = options.resolveOptions;
|
60
|
+
}
|
61
|
+
|
62
|
+
// Info from Build
|
63
|
+
this._contextDependencies = new Set([this.context]);
|
64
|
+
|
65
|
+
if (typeof options.mode !== "string") {
|
66
|
+
throw new Error("options.mode is a required option");
|
67
|
+
}
|
68
|
+
|
69
|
+
this._identifier = this._createIdentifier();
|
70
|
+
}
|
71
|
+
|
72
|
+
updateCacheModule(module) {
|
73
|
+
this.resolveDependencies = module.resolveDependencies;
|
74
|
+
this.options = module.options;
|
75
|
+
this.resolveOptions = module.resolveOptions;
|
76
|
+
}
|
77
|
+
|
78
|
+
prettyRegExp(regexString) {
|
79
|
+
// remove the "/" at the front and the beginning
|
80
|
+
// "/foo/" -> "foo"
|
81
|
+
return regexString.substring(1, regexString.length - 1);
|
82
|
+
}
|
83
|
+
|
84
|
+
_createIdentifier() {
|
85
|
+
let identifier = this.context;
|
86
|
+
if (this.options.resourceQuery) {
|
87
|
+
identifier += ` ${this.options.resourceQuery}`;
|
88
|
+
}
|
89
|
+
if (this.options.mode) {
|
90
|
+
identifier += ` ${this.options.mode}`;
|
91
|
+
}
|
92
|
+
if (!this.options.recursive) {
|
93
|
+
identifier += " nonrecursive";
|
94
|
+
}
|
95
|
+
if (this.options.addon) {
|
96
|
+
identifier += ` ${this.options.addon}`;
|
97
|
+
}
|
98
|
+
if (this.options.regExp) {
|
99
|
+
identifier += ` ${this.options.regExp}`;
|
100
|
+
}
|
101
|
+
if (this.options.include) {
|
102
|
+
identifier += ` include: ${this.options.include}`;
|
103
|
+
}
|
104
|
+
if (this.options.exclude) {
|
105
|
+
identifier += ` exclude: ${this.options.exclude}`;
|
106
|
+
}
|
107
|
+
if (this.options.groupOptions) {
|
108
|
+
identifier += ` groupOptions: ${JSON.stringify(
|
109
|
+
this.options.groupOptions
|
110
|
+
)}`;
|
111
|
+
}
|
112
|
+
if (this.options.namespaceObject === "strict") {
|
113
|
+
identifier += " strict namespace object";
|
114
|
+
} else if (this.options.namespaceObject) {
|
115
|
+
identifier += " namespace object";
|
116
|
+
}
|
117
|
+
|
118
|
+
return identifier;
|
119
|
+
}
|
120
|
+
|
121
|
+
identifier() {
|
122
|
+
return this._identifier;
|
123
|
+
}
|
124
|
+
|
125
|
+
readableIdentifier(requestShortener) {
|
126
|
+
let identifier = requestShortener.shorten(this.context);
|
127
|
+
if (this.options.resourceQuery) {
|
128
|
+
identifier += ` ${this.options.resourceQuery}`;
|
129
|
+
}
|
130
|
+
if (this.options.mode) {
|
131
|
+
identifier += ` ${this.options.mode}`;
|
132
|
+
}
|
133
|
+
if (!this.options.recursive) {
|
134
|
+
identifier += " nonrecursive";
|
135
|
+
}
|
136
|
+
if (this.options.addon) {
|
137
|
+
identifier += ` ${requestShortener.shorten(this.options.addon)}`;
|
138
|
+
}
|
139
|
+
if (this.options.regExp) {
|
140
|
+
identifier += ` ${this.prettyRegExp(this.options.regExp + "")}`;
|
141
|
+
}
|
142
|
+
if (this.options.include) {
|
143
|
+
identifier += ` include: ${this.prettyRegExp(this.options.include + "")}`;
|
144
|
+
}
|
145
|
+
if (this.options.exclude) {
|
146
|
+
identifier += ` exclude: ${this.prettyRegExp(this.options.exclude + "")}`;
|
147
|
+
}
|
148
|
+
if (this.options.groupOptions) {
|
149
|
+
const groupOptions = this.options.groupOptions;
|
150
|
+
for (const key of Object.keys(groupOptions)) {
|
151
|
+
identifier += ` ${key}: ${groupOptions[key]}`;
|
152
|
+
}
|
153
|
+
}
|
154
|
+
if (this.options.namespaceObject === "strict") {
|
155
|
+
identifier += " strict namespace object";
|
156
|
+
} else if (this.options.namespaceObject) {
|
157
|
+
identifier += " namespace object";
|
158
|
+
}
|
159
|
+
|
160
|
+
return identifier;
|
161
|
+
}
|
162
|
+
|
163
|
+
libIdent(options) {
|
164
|
+
let identifier = contextify(options.context, this.context);
|
165
|
+
if (this.options.mode) {
|
166
|
+
identifier += ` ${this.options.mode}`;
|
167
|
+
}
|
168
|
+
if (this.options.recursive) {
|
169
|
+
identifier += " recursive";
|
170
|
+
}
|
171
|
+
if (this.options.addon) {
|
172
|
+
identifier += ` ${contextify(options.context, this.options.addon)}`;
|
173
|
+
}
|
174
|
+
if (this.options.regExp) {
|
175
|
+
identifier += ` ${this.prettyRegExp(this.options.regExp + "")}`;
|
176
|
+
}
|
177
|
+
if (this.options.include) {
|
178
|
+
identifier += ` include: ${this.prettyRegExp(this.options.include + "")}`;
|
179
|
+
}
|
180
|
+
if (this.options.exclude) {
|
181
|
+
identifier += ` exclude: ${this.prettyRegExp(this.options.exclude + "")}`;
|
182
|
+
}
|
183
|
+
|
184
|
+
return identifier;
|
185
|
+
}
|
186
|
+
|
187
|
+
needRebuild(fileTimestamps, contextTimestamps) {
|
188
|
+
const ts = contextTimestamps.get(this.context);
|
189
|
+
if (!ts) {
|
190
|
+
return true;
|
191
|
+
}
|
192
|
+
|
193
|
+
return ts >= this.buildInfo.builtTime;
|
194
|
+
}
|
195
|
+
|
196
|
+
build(options, compilation, resolver, fs, callback) {
|
197
|
+
this.built = true;
|
198
|
+
this.buildMeta = {};
|
199
|
+
this.buildInfo = {
|
200
|
+
builtTime: Date.now(),
|
201
|
+
contextDependencies: this._contextDependencies
|
202
|
+
};
|
203
|
+
this.resolveDependencies(fs, this.options, (err, dependencies) => {
|
204
|
+
if (err) return callback(err);
|
205
|
+
|
206
|
+
// abort if something failed
|
207
|
+
// this will create an empty context
|
208
|
+
if (!dependencies) {
|
209
|
+
callback();
|
210
|
+
return;
|
211
|
+
}
|
212
|
+
|
213
|
+
// enhance dependencies with meta info
|
214
|
+
for (const dep of dependencies) {
|
215
|
+
dep.loc = {
|
216
|
+
name: dep.userRequest
|
217
|
+
};
|
218
|
+
dep.request = this.options.addon + dep.request;
|
219
|
+
}
|
220
|
+
|
221
|
+
if (this.options.mode === "sync" || this.options.mode === "eager") {
|
222
|
+
// if we have an sync or eager context
|
223
|
+
// just add all dependencies and continue
|
224
|
+
this.dependencies = dependencies;
|
225
|
+
} else if (this.options.mode === "lazy-once") {
|
226
|
+
// for the lazy-once mode create a new async dependency block
|
227
|
+
// and add that block to this context
|
228
|
+
if (dependencies.length > 0) {
|
229
|
+
const block = new AsyncDependenciesBlock(
|
230
|
+
Object.assign({}, this.options.groupOptions, {
|
231
|
+
name: this.options.chunkName
|
232
|
+
}),
|
233
|
+
this
|
234
|
+
);
|
235
|
+
for (const dep of dependencies) {
|
236
|
+
block.addDependency(dep);
|
237
|
+
}
|
238
|
+
this.addBlock(block);
|
239
|
+
}
|
240
|
+
} else if (
|
241
|
+
this.options.mode === "weak" ||
|
242
|
+
this.options.mode === "async-weak"
|
243
|
+
) {
|
244
|
+
// we mark all dependencies as weak
|
245
|
+
for (const dep of dependencies) {
|
246
|
+
dep.weak = true;
|
247
|
+
}
|
248
|
+
this.dependencies = dependencies;
|
249
|
+
} else if (this.options.mode === "lazy") {
|
250
|
+
// if we are lazy create a new async dependency block per dependency
|
251
|
+
// and add all blocks to this context
|
252
|
+
let index = 0;
|
253
|
+
for (const dep of dependencies) {
|
254
|
+
let chunkName = this.options.chunkName;
|
255
|
+
if (chunkName) {
|
256
|
+
if (!/\[(index|request)\]/.test(chunkName)) {
|
257
|
+
chunkName += "[index]";
|
258
|
+
}
|
259
|
+
chunkName = chunkName.replace(/\[index\]/g, index++);
|
260
|
+
chunkName = chunkName.replace(
|
261
|
+
/\[request\]/g,
|
262
|
+
Template.toPath(dep.userRequest)
|
263
|
+
);
|
264
|
+
}
|
265
|
+
const block = new AsyncDependenciesBlock(
|
266
|
+
Object.assign({}, this.options.groupOptions, {
|
267
|
+
name: chunkName
|
268
|
+
}),
|
269
|
+
dep.module,
|
270
|
+
dep.loc,
|
271
|
+
dep.userRequest
|
272
|
+
);
|
273
|
+
block.addDependency(dep);
|
274
|
+
this.addBlock(block);
|
275
|
+
}
|
276
|
+
} else {
|
277
|
+
callback(
|
278
|
+
new Error(`Unsupported mode "${this.options.mode}" in context`)
|
279
|
+
);
|
280
|
+
return;
|
281
|
+
}
|
282
|
+
callback();
|
283
|
+
});
|
284
|
+
}
|
285
|
+
|
286
|
+
getUserRequestMap(dependencies) {
|
287
|
+
// if we filter first we get a new array
|
288
|
+
// therefor we dont need to create a clone of dependencies explicitly
|
289
|
+
// therefore the order of this is !important!
|
290
|
+
return dependencies
|
291
|
+
.filter(dependency => dependency.module)
|
292
|
+
.sort((a, b) => {
|
293
|
+
if (a.userRequest === b.userRequest) {
|
294
|
+
return 0;
|
295
|
+
}
|
296
|
+
return a.userRequest < b.userRequest ? -1 : 1;
|
297
|
+
})
|
298
|
+
.reduce((map, dep) => {
|
299
|
+
map[dep.userRequest] = dep.module.id;
|
300
|
+
return map;
|
301
|
+
}, Object.create(null));
|
302
|
+
}
|
303
|
+
|
304
|
+
getFakeMap(dependencies) {
|
305
|
+
if (!this.options.namespaceObject) {
|
306
|
+
return 9;
|
307
|
+
}
|
308
|
+
// if we filter first we get a new array
|
309
|
+
// therefor we dont need to create a clone of dependencies explicitly
|
310
|
+
// therefore the order of this is !important!
|
311
|
+
let hasNonHarmony = false;
|
312
|
+
let hasNamespace = false;
|
313
|
+
let hasNamed = false;
|
314
|
+
const fakeMap = dependencies
|
315
|
+
.filter(dependency => dependency.module)
|
316
|
+
.sort((a, b) => {
|
317
|
+
return b.module.id - a.module.id;
|
318
|
+
})
|
319
|
+
.reduce((map, dep) => {
|
320
|
+
const exportsType =
|
321
|
+
dep.module.buildMeta && dep.module.buildMeta.exportsType;
|
322
|
+
const id = dep.module.id;
|
323
|
+
if (!exportsType) {
|
324
|
+
map[id] = this.options.namespaceObject === "strict" ? 1 : 7;
|
325
|
+
hasNonHarmony = true;
|
326
|
+
} else if (exportsType === "namespace") {
|
327
|
+
map[id] = 9;
|
328
|
+
hasNamespace = true;
|
329
|
+
} else if (exportsType === "named") {
|
330
|
+
map[id] = 3;
|
331
|
+
hasNamed = true;
|
332
|
+
}
|
333
|
+
return map;
|
334
|
+
}, Object.create(null));
|
335
|
+
if (!hasNamespace && hasNonHarmony && !hasNamed) {
|
336
|
+
return this.options.namespaceObject === "strict" ? 1 : 7;
|
337
|
+
}
|
338
|
+
if (hasNamespace && !hasNonHarmony && !hasNamed) {
|
339
|
+
return 9;
|
340
|
+
}
|
341
|
+
if (!hasNamespace && !hasNonHarmony && hasNamed) {
|
342
|
+
return 3;
|
343
|
+
}
|
344
|
+
if (!hasNamespace && !hasNonHarmony && !hasNamed) {
|
345
|
+
return 9;
|
346
|
+
}
|
347
|
+
return fakeMap;
|
348
|
+
}
|
349
|
+
|
350
|
+
getFakeMapInitStatement(fakeMap) {
|
351
|
+
return typeof fakeMap === "object"
|
352
|
+
? `var fakeMap = ${JSON.stringify(fakeMap, null, "\t")};`
|
353
|
+
: "";
|
354
|
+
}
|
355
|
+
|
356
|
+
getReturn(type) {
|
357
|
+
if (type === 9) {
|
358
|
+
return "__webpack_require__(id)";
|
359
|
+
}
|
360
|
+
return `__webpack_require__.t(id, ${type})`;
|
361
|
+
}
|
362
|
+
|
363
|
+
getReturnModuleObjectSource(fakeMap, fakeMapDataExpression = "fakeMap[id]") {
|
364
|
+
if (typeof fakeMap === "number") {
|
365
|
+
return `return ${this.getReturn(fakeMap)};`;
|
366
|
+
}
|
367
|
+
return `return __webpack_require__.t(id, ${fakeMapDataExpression})`;
|
368
|
+
}
|
369
|
+
|
370
|
+
getSyncSource(dependencies, id) {
|
371
|
+
const map = this.getUserRequestMap(dependencies);
|
372
|
+
const fakeMap = this.getFakeMap(dependencies);
|
373
|
+
const returnModuleObject = this.getReturnModuleObjectSource(fakeMap);
|
374
|
+
|
375
|
+
return `var map = ${JSON.stringify(map, null, "\t")};
|
376
|
+
${this.getFakeMapInitStatement(fakeMap)}
|
377
|
+
|
378
|
+
function webpackContext(req) {
|
379
|
+
var id = webpackContextResolve(req);
|
380
|
+
${returnModuleObject}
|
381
|
+
}
|
382
|
+
function webpackContextResolve(req) {
|
383
|
+
var id = map[req];
|
384
|
+
if(!(id + 1)) { // check for number or string
|
385
|
+
var e = new Error("Cannot find module '" + req + "'");
|
386
|
+
e.code = 'MODULE_NOT_FOUND';
|
387
|
+
throw e;
|
388
|
+
}
|
389
|
+
return id;
|
390
|
+
}
|
391
|
+
webpackContext.keys = function webpackContextKeys() {
|
392
|
+
return Object.keys(map);
|
393
|
+
};
|
394
|
+
webpackContext.resolve = webpackContextResolve;
|
395
|
+
module.exports = webpackContext;
|
396
|
+
webpackContext.id = ${JSON.stringify(id)};`;
|
397
|
+
}
|
398
|
+
|
399
|
+
getWeakSyncSource(dependencies, id) {
|
400
|
+
const map = this.getUserRequestMap(dependencies);
|
401
|
+
const fakeMap = this.getFakeMap(dependencies);
|
402
|
+
const returnModuleObject = this.getReturnModuleObjectSource(fakeMap);
|
403
|
+
|
404
|
+
return `var map = ${JSON.stringify(map, null, "\t")};
|
405
|
+
${this.getFakeMapInitStatement(fakeMap)}
|
406
|
+
|
407
|
+
function webpackContext(req) {
|
408
|
+
var id = webpackContextResolve(req);
|
409
|
+
if(!__webpack_require__.m[id]) {
|
410
|
+
var e = new Error("Module '" + req + "' ('" + id + "') is not available (weak dependency)");
|
411
|
+
e.code = 'MODULE_NOT_FOUND';
|
412
|
+
throw e;
|
413
|
+
}
|
414
|
+
${returnModuleObject}
|
415
|
+
}
|
416
|
+
function webpackContextResolve(req) {
|
417
|
+
var id = map[req];
|
418
|
+
if(!(id + 1)) { // check for number or string
|
419
|
+
var e = new Error("Cannot find module '" + req + "'");
|
420
|
+
e.code = 'MODULE_NOT_FOUND';
|
421
|
+
throw e;
|
422
|
+
}
|
423
|
+
return id;
|
424
|
+
}
|
425
|
+
webpackContext.keys = function webpackContextKeys() {
|
426
|
+
return Object.keys(map);
|
427
|
+
};
|
428
|
+
webpackContext.resolve = webpackContextResolve;
|
429
|
+
webpackContext.id = ${JSON.stringify(id)};
|
430
|
+
module.exports = webpackContext;`;
|
431
|
+
}
|
432
|
+
|
433
|
+
getAsyncWeakSource(dependencies, id) {
|
434
|
+
const map = this.getUserRequestMap(dependencies);
|
435
|
+
const fakeMap = this.getFakeMap(dependencies);
|
436
|
+
const returnModuleObject = this.getReturnModuleObjectSource(fakeMap);
|
437
|
+
|
438
|
+
return `var map = ${JSON.stringify(map, null, "\t")};
|
439
|
+
${this.getFakeMapInitStatement(fakeMap)}
|
440
|
+
|
441
|
+
function webpackAsyncContext(req) {
|
442
|
+
return webpackAsyncContextResolve(req).then(function(id) {
|
443
|
+
if(!__webpack_require__.m[id]) {
|
444
|
+
var e = new Error("Module '" + req + "' ('" + id + "') is not available (weak dependency)");
|
445
|
+
e.code = 'MODULE_NOT_FOUND';
|
446
|
+
throw e;
|
447
|
+
}
|
448
|
+
${returnModuleObject}
|
449
|
+
});
|
450
|
+
}
|
451
|
+
function webpackAsyncContextResolve(req) {
|
452
|
+
// Here Promise.resolve().then() is used instead of new Promise() to prevent
|
453
|
+
// uncaught exception popping up in devtools
|
454
|
+
return Promise.resolve().then(function() {
|
455
|
+
var id = map[req];
|
456
|
+
if(!(id + 1)) { // check for number or string
|
457
|
+
var e = new Error("Cannot find module '" + req + "'");
|
458
|
+
e.code = 'MODULE_NOT_FOUND';
|
459
|
+
throw e;
|
460
|
+
}
|
461
|
+
return id;
|
462
|
+
});
|
463
|
+
}
|
464
|
+
webpackAsyncContext.keys = function webpackAsyncContextKeys() {
|
465
|
+
return Object.keys(map);
|
466
|
+
};
|
467
|
+
webpackAsyncContext.resolve = webpackAsyncContextResolve;
|
468
|
+
webpackAsyncContext.id = ${JSON.stringify(id)};
|
469
|
+
module.exports = webpackAsyncContext;`;
|
470
|
+
}
|
471
|
+
|
472
|
+
getEagerSource(dependencies, id) {
|
473
|
+
const map = this.getUserRequestMap(dependencies);
|
474
|
+
const fakeMap = this.getFakeMap(dependencies);
|
475
|
+
const thenFunction =
|
476
|
+
fakeMap !== 9
|
477
|
+
? `function(id) {
|
478
|
+
${this.getReturnModuleObjectSource(fakeMap)}
|
479
|
+
}`
|
480
|
+
: "__webpack_require__";
|
481
|
+
return `var map = ${JSON.stringify(map, null, "\t")};
|
482
|
+
${this.getFakeMapInitStatement(fakeMap)}
|
483
|
+
|
484
|
+
function webpackAsyncContext(req) {
|
485
|
+
return webpackAsyncContextResolve(req).then(${thenFunction});
|
486
|
+
}
|
487
|
+
function webpackAsyncContextResolve(req) {
|
488
|
+
// Here Promise.resolve().then() is used instead of new Promise() to prevent
|
489
|
+
// uncaught exception popping up in devtools
|
490
|
+
return Promise.resolve().then(function() {
|
491
|
+
var id = map[req];
|
492
|
+
if(!(id + 1)) { // check for number or string
|
493
|
+
var e = new Error("Cannot find module '" + req + "'");
|
494
|
+
e.code = 'MODULE_NOT_FOUND';
|
495
|
+
throw e;
|
496
|
+
}
|
497
|
+
return id;
|
498
|
+
});
|
499
|
+
}
|
500
|
+
webpackAsyncContext.keys = function webpackAsyncContextKeys() {
|
501
|
+
return Object.keys(map);
|
502
|
+
};
|
503
|
+
webpackAsyncContext.resolve = webpackAsyncContextResolve;
|
504
|
+
webpackAsyncContext.id = ${JSON.stringify(id)};
|
505
|
+
module.exports = webpackAsyncContext;`;
|
506
|
+
}
|
507
|
+
|
508
|
+
getLazyOnceSource(block, dependencies, id, runtimeTemplate) {
|
509
|
+
const promise = runtimeTemplate.blockPromise({
|
510
|
+
block,
|
511
|
+
message: "lazy-once context"
|
512
|
+
});
|
513
|
+
const map = this.getUserRequestMap(dependencies);
|
514
|
+
const fakeMap = this.getFakeMap(dependencies);
|
515
|
+
const thenFunction =
|
516
|
+
fakeMap !== 9
|
517
|
+
? `function(id) {
|
518
|
+
${this.getReturnModuleObjectSource(fakeMap)};
|
519
|
+
}`
|
520
|
+
: "__webpack_require__";
|
521
|
+
|
522
|
+
return `var map = ${JSON.stringify(map, null, "\t")};
|
523
|
+
${this.getFakeMapInitStatement(fakeMap)}
|
524
|
+
|
525
|
+
function webpackAsyncContext(req) {
|
526
|
+
return webpackAsyncContextResolve(req).then(${thenFunction});
|
527
|
+
}
|
528
|
+
function webpackAsyncContextResolve(req) {
|
529
|
+
return ${promise}.then(function() {
|
530
|
+
var id = map[req];
|
531
|
+
if(!(id + 1)) { // check for number or string
|
532
|
+
var e = new Error("Cannot find module '" + req + "'");
|
533
|
+
e.code = 'MODULE_NOT_FOUND';
|
534
|
+
throw e;
|
535
|
+
}
|
536
|
+
return id;
|
537
|
+
});
|
538
|
+
}
|
539
|
+
webpackAsyncContext.keys = function webpackAsyncContextKeys() {
|
540
|
+
return Object.keys(map);
|
541
|
+
};
|
542
|
+
webpackAsyncContext.resolve = webpackAsyncContextResolve;
|
543
|
+
webpackAsyncContext.id = ${JSON.stringify(id)};
|
544
|
+
module.exports = webpackAsyncContext;`;
|
545
|
+
}
|
546
|
+
|
547
|
+
getLazySource(blocks, id) {
|
548
|
+
let hasMultipleOrNoChunks = false;
|
549
|
+
const fakeMap = this.getFakeMap(blocks.map(b => b.dependencies[0]));
|
550
|
+
const map = blocks
|
551
|
+
.filter(block => block.dependencies[0].module)
|
552
|
+
.map(block => ({
|
553
|
+
dependency: block.dependencies[0],
|
554
|
+
block: block,
|
555
|
+
userRequest: block.dependencies[0].userRequest
|
556
|
+
}))
|
557
|
+
.sort((a, b) => {
|
558
|
+
if (a.userRequest === b.userRequest) return 0;
|
559
|
+
return a.userRequest < b.userRequest ? -1 : 1;
|
560
|
+
})
|
561
|
+
.reduce((map, item) => {
|
562
|
+
const chunks =
|
563
|
+
(item.block.chunkGroup && item.block.chunkGroup.chunks) || [];
|
564
|
+
if (chunks.length !== 1) {
|
565
|
+
hasMultipleOrNoChunks = true;
|
566
|
+
}
|
567
|
+
const arrayStart = [item.dependency.module.id];
|
568
|
+
if (typeof fakeMap === "object") {
|
569
|
+
arrayStart.push(fakeMap[item.dependency.module.id]);
|
570
|
+
}
|
571
|
+
map[item.userRequest] = arrayStart.concat(
|
572
|
+
chunks.map(chunk => chunk.id)
|
573
|
+
);
|
574
|
+
|
575
|
+
return map;
|
576
|
+
}, Object.create(null));
|
577
|
+
|
578
|
+
const chunksStartPosition = typeof fakeMap === "object" ? 2 : 1;
|
579
|
+
const requestPrefix = hasMultipleOrNoChunks
|
580
|
+
? `Promise.all(ids.slice(${chunksStartPosition}).map(__webpack_require__.e))`
|
581
|
+
: `__webpack_require__.e(ids[${chunksStartPosition}])`;
|
582
|
+
const returnModuleObject = this.getReturnModuleObjectSource(
|
583
|
+
fakeMap,
|
584
|
+
"ids[1]"
|
585
|
+
);
|
586
|
+
|
587
|
+
return `var map = ${JSON.stringify(map, null, "\t")};
|
588
|
+
function webpackAsyncContext(req) {
|
589
|
+
var ids = map[req];
|
590
|
+
if(!ids) {
|
591
|
+
return Promise.resolve().then(function() {
|
592
|
+
var e = new Error("Cannot find module '" + req + "'");
|
593
|
+
e.code = 'MODULE_NOT_FOUND';
|
594
|
+
throw e;
|
595
|
+
});
|
596
|
+
}
|
597
|
+
return ${requestPrefix}.then(function() {
|
598
|
+
var id = ids[0];
|
599
|
+
${returnModuleObject}
|
600
|
+
});
|
601
|
+
}
|
602
|
+
webpackAsyncContext.keys = function webpackAsyncContextKeys() {
|
603
|
+
return Object.keys(map);
|
604
|
+
};
|
605
|
+
webpackAsyncContext.id = ${JSON.stringify(id)};
|
606
|
+
module.exports = webpackAsyncContext;`;
|
607
|
+
}
|
608
|
+
|
609
|
+
getSourceForEmptyContext(id) {
|
610
|
+
return `function webpackEmptyContext(req) {
|
611
|
+
var e = new Error("Cannot find module '" + req + "'");
|
612
|
+
e.code = 'MODULE_NOT_FOUND';
|
613
|
+
throw e;
|
614
|
+
}
|
615
|
+
webpackEmptyContext.keys = function() { return []; };
|
616
|
+
webpackEmptyContext.resolve = webpackEmptyContext;
|
617
|
+
module.exports = webpackEmptyContext;
|
618
|
+
webpackEmptyContext.id = ${JSON.stringify(id)};`;
|
619
|
+
}
|
620
|
+
|
621
|
+
getSourceForEmptyAsyncContext(id) {
|
622
|
+
return `function webpackEmptyAsyncContext(req) {
|
623
|
+
// Here Promise.resolve().then() is used instead of new Promise() to prevent
|
624
|
+
// uncaught exception popping up in devtools
|
625
|
+
return Promise.resolve().then(function() {
|
626
|
+
var e = new Error("Cannot find module '" + req + "'");
|
627
|
+
e.code = 'MODULE_NOT_FOUND';
|
628
|
+
throw e;
|
629
|
+
});
|
630
|
+
}
|
631
|
+
webpackEmptyAsyncContext.keys = function() { return []; };
|
632
|
+
webpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;
|
633
|
+
module.exports = webpackEmptyAsyncContext;
|
634
|
+
webpackEmptyAsyncContext.id = ${JSON.stringify(id)};`;
|
635
|
+
}
|
636
|
+
|
637
|
+
getSourceString(asyncMode, runtimeTemplate) {
|
638
|
+
if (asyncMode === "lazy") {
|
639
|
+
if (this.blocks && this.blocks.length > 0) {
|
640
|
+
return this.getLazySource(this.blocks, this.id);
|
641
|
+
}
|
642
|
+
return this.getSourceForEmptyAsyncContext(this.id);
|
643
|
+
}
|
644
|
+
if (asyncMode === "eager") {
|
645
|
+
if (this.dependencies && this.dependencies.length > 0) {
|
646
|
+
return this.getEagerSource(this.dependencies, this.id);
|
647
|
+
}
|
648
|
+
return this.getSourceForEmptyAsyncContext(this.id);
|
649
|
+
}
|
650
|
+
if (asyncMode === "lazy-once") {
|
651
|
+
const block = this.blocks[0];
|
652
|
+
if (block) {
|
653
|
+
return this.getLazyOnceSource(
|
654
|
+
block,
|
655
|
+
block.dependencies,
|
656
|
+
this.id,
|
657
|
+
runtimeTemplate
|
658
|
+
);
|
659
|
+
}
|
660
|
+
return this.getSourceForEmptyAsyncContext(this.id);
|
661
|
+
}
|
662
|
+
if (asyncMode === "async-weak") {
|
663
|
+
if (this.dependencies && this.dependencies.length > 0) {
|
664
|
+
return this.getAsyncWeakSource(this.dependencies, this.id);
|
665
|
+
}
|
666
|
+
return this.getSourceForEmptyAsyncContext(this.id);
|
667
|
+
}
|
668
|
+
if (asyncMode === "weak") {
|
669
|
+
if (this.dependencies && this.dependencies.length > 0) {
|
670
|
+
return this.getWeakSyncSource(this.dependencies, this.id);
|
671
|
+
}
|
672
|
+
}
|
673
|
+
if (this.dependencies && this.dependencies.length > 0) {
|
674
|
+
return this.getSyncSource(this.dependencies, this.id);
|
675
|
+
}
|
676
|
+
return this.getSourceForEmptyContext(this.id);
|
677
|
+
}
|
678
|
+
|
679
|
+
getSource(sourceString) {
|
680
|
+
if (this.useSourceMap) {
|
681
|
+
return new OriginalSource(sourceString, this.identifier());
|
682
|
+
}
|
683
|
+
return new RawSource(sourceString);
|
684
|
+
}
|
685
|
+
|
686
|
+
source(dependencyTemplates, runtimeTemplate) {
|
687
|
+
return this.getSource(
|
688
|
+
this.getSourceString(this.options.mode, runtimeTemplate)
|
689
|
+
);
|
690
|
+
}
|
691
|
+
|
692
|
+
size() {
|
693
|
+
// base penalty
|
694
|
+
const initialSize = 160;
|
695
|
+
|
696
|
+
// if we dont have dependencies we stop here.
|
697
|
+
return this.dependencies.reduce((size, dependency) => {
|
698
|
+
const element = /** @type {ContextElementDependency} */ (dependency);
|
699
|
+
return size + 5 + element.userRequest.length;
|
700
|
+
}, initialSize);
|
701
|
+
}
|
702
|
+
}
|
703
|
+
|
704
|
+
// TODO remove in webpack 5
|
705
|
+
Object.defineProperty(ContextModule.prototype, "recursive", {
|
706
|
+
configurable: false,
|
707
|
+
get: util.deprecate(
|
708
|
+
/**
|
709
|
+
* @deprecated
|
710
|
+
* @this {ContextModule}
|
711
|
+
* @returns {boolean} is recursive
|
712
|
+
*/
|
713
|
+
function() {
|
714
|
+
return this.options.recursive;
|
715
|
+
},
|
716
|
+
"ContextModule.recursive has been moved to ContextModule.options.recursive"
|
717
|
+
),
|
718
|
+
set: util.deprecate(
|
719
|
+
/**
|
720
|
+
* @deprecated
|
721
|
+
* @this {ContextModule}
|
722
|
+
* @param {boolean} value is recursive
|
723
|
+
* @returns {void}
|
724
|
+
*/
|
725
|
+
function(value) {
|
726
|
+
this.options.recursive = value;
|
727
|
+
},
|
728
|
+
"ContextModule.recursive has been moved to ContextModule.options.recursive"
|
729
|
+
)
|
730
|
+
});
|
731
|
+
|
732
|
+
// TODO remove in webpack 5
|
733
|
+
Object.defineProperty(ContextModule.prototype, "regExp", {
|
734
|
+
configurable: false,
|
735
|
+
get: util.deprecate(
|
736
|
+
/**
|
737
|
+
* @deprecated
|
738
|
+
* @this {ContextModule}
|
739
|
+
* @returns {RegExp} regular expression
|
740
|
+
*/
|
741
|
+
function() {
|
742
|
+
return this.options.regExp;
|
743
|
+
},
|
744
|
+
"ContextModule.regExp has been moved to ContextModule.options.regExp"
|
745
|
+
),
|
746
|
+
set: util.deprecate(
|
747
|
+
/**
|
748
|
+
* @deprecated
|
749
|
+
* @this {ContextModule}
|
750
|
+
* @param {RegExp} value Regular expression
|
751
|
+
* @returns {void}
|
752
|
+
*/
|
753
|
+
function(value) {
|
754
|
+
this.options.regExp = value;
|
755
|
+
},
|
756
|
+
"ContextModule.regExp has been moved to ContextModule.options.regExp"
|
757
|
+
)
|
758
|
+
});
|
759
|
+
|
760
|
+
// TODO remove in webpack 5
|
761
|
+
Object.defineProperty(ContextModule.prototype, "addon", {
|
762
|
+
configurable: false,
|
763
|
+
get: util.deprecate(
|
764
|
+
/**
|
765
|
+
* @deprecated
|
766
|
+
* @this {ContextModule}
|
767
|
+
* @returns {string} addon
|
768
|
+
*/
|
769
|
+
function() {
|
770
|
+
return this.options.addon;
|
771
|
+
},
|
772
|
+
"ContextModule.addon has been moved to ContextModule.options.addon"
|
773
|
+
),
|
774
|
+
set: util.deprecate(
|
775
|
+
/**
|
776
|
+
* @deprecated
|
777
|
+
* @this {ContextModule}
|
778
|
+
* @param {string} value addon
|
779
|
+
* @returns {void}
|
780
|
+
*/
|
781
|
+
function(value) {
|
782
|
+
this.options.addon = value;
|
783
|
+
},
|
784
|
+
"ContextModule.addon has been moved to ContextModule.options.addon"
|
785
|
+
)
|
786
|
+
});
|
787
|
+
|
788
|
+
// TODO remove in webpack 5
|
789
|
+
Object.defineProperty(ContextModule.prototype, "async", {
|
790
|
+
configurable: false,
|
791
|
+
get: util.deprecate(
|
792
|
+
/**
|
793
|
+
* @deprecated
|
794
|
+
* @this {ContextModule}
|
795
|
+
* @returns {boolean} is async
|
796
|
+
*/
|
797
|
+
function() {
|
798
|
+
return this.options.mode;
|
799
|
+
},
|
800
|
+
"ContextModule.async has been moved to ContextModule.options.mode"
|
801
|
+
),
|
802
|
+
set: util.deprecate(
|
803
|
+
/**
|
804
|
+
* @deprecated
|
805
|
+
* @this {ContextModule}
|
806
|
+
* @param {ContextMode} value Context mode
|
807
|
+
* @returns {void}
|
808
|
+
*/
|
809
|
+
function(value) {
|
810
|
+
this.options.mode = value;
|
811
|
+
},
|
812
|
+
"ContextModule.async has been moved to ContextModule.options.mode"
|
813
|
+
)
|
814
|
+
});
|
815
|
+
|
816
|
+
// TODO remove in webpack 5
|
817
|
+
Object.defineProperty(ContextModule.prototype, "chunkName", {
|
818
|
+
configurable: false,
|
819
|
+
get: util.deprecate(
|
820
|
+
/**
|
821
|
+
* @deprecated
|
822
|
+
* @this {ContextModule}
|
823
|
+
* @returns {string} chunk name
|
824
|
+
*/
|
825
|
+
function() {
|
826
|
+
return this.options.chunkName;
|
827
|
+
},
|
828
|
+
"ContextModule.chunkName has been moved to ContextModule.options.chunkName"
|
829
|
+
),
|
830
|
+
set: util.deprecate(
|
831
|
+
/**
|
832
|
+
* @deprecated
|
833
|
+
* @this {ContextModule}
|
834
|
+
* @param {string} value chunk name
|
835
|
+
* @returns {void}
|
836
|
+
*/
|
837
|
+
function(value) {
|
838
|
+
this.options.chunkName = value;
|
839
|
+
},
|
840
|
+
"ContextModule.chunkName has been moved to ContextModule.options.chunkName"
|
841
|
+
)
|
842
|
+
});
|
843
|
+
|
844
|
+
module.exports = ContextModule;
|