webpack 3.8.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.
- package/LICENSE +20 -20
- package/README.md +716 -716
- package/buildin/.eslintrc +7 -7
- package/buildin/amd-define.js +3 -3
- package/buildin/amd-options.js +2 -2
- package/buildin/global.js +21 -21
- package/buildin/harmony-module.js +24 -24
- package/buildin/module.js +22 -22
- package/buildin/system.js +7 -7
- package/hot/.eslintrc +9 -9
- package/hot/dev-server.js +53 -53
- package/hot/emitter.js +2 -2
- package/hot/log-apply-result.js +38 -38
- package/hot/log.js +44 -44
- package/hot/only-dev-server.js +71 -71
- package/hot/poll.js +34 -34
- package/hot/signal.js +51 -51
- package/lib/APIPlugin.js +45 -45
- package/lib/AsyncDependenciesBlock.js +43 -43
- package/lib/AutomaticPrefetchPlugin.js +36 -36
- package/lib/BasicEvaluatedExpression.js +203 -203
- package/lib/CaseSensitiveModulesWarning.js +49 -49
- package/lib/ChunkRenderError.js +24 -24
- package/lib/ChunkTemplate.js +36 -36
- package/lib/CompatibilityPlugin.js +57 -57
- package/lib/Compiler.js +523 -523
- package/lib/ConstPlugin.js +60 -60
- package/lib/ContextModule.js +431 -431
- package/lib/ContextReplacementPlugin.js +111 -111
- package/lib/DefinePlugin.js +123 -123
- package/lib/DelegatedModule.js +98 -98
- package/lib/DelegatedModuleFactoryPlugin.js +59 -59
- package/lib/DelegatedPlugin.js +30 -30
- package/lib/DependenciesBlockVariable.js +51 -51
- package/lib/DllEntryPlugin.js +37 -37
- package/lib/DllModule.js +58 -58
- package/lib/DllModuleFactory.js +20 -20
- package/lib/DllPlugin.js +38 -38
- package/lib/DllReferencePlugin.js +62 -62
- package/lib/DynamicEntryPlugin.js +59 -59
- package/lib/EntryModuleNotFoundError.js +22 -22
- package/lib/EntryOptionPlugin.js +31 -31
- package/lib/EnvironmentPlugin.js +50 -50
- package/lib/ErrorHelpers.js +31 -31
- package/lib/EvalDevToolModulePlugin.js +22 -22
- package/lib/EvalDevToolModuleTemplatePlugin.js +33 -33
- package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +75 -75
- package/lib/EvalSourceMapDevToolPlugin.js +32 -32
- package/lib/ExportPropertyMainTemplatePlugin.js +31 -31
- package/lib/ExtendedAPIPlugin.js +47 -47
- package/lib/ExternalModuleFactoryPlugin.js +91 -91
- package/lib/ExternalsPlugin.js +21 -21
- package/lib/FlagDependencyExportsPlugin.js +101 -101
- package/lib/FunctionModulePlugin.js +24 -24
- package/lib/HashedModuleIdsPlugin.js +42 -42
- package/lib/HotUpdateChunkTemplate.js +31 -31
- package/lib/IgnorePlugin.js +69 -69
- package/lib/JsonpExportMainTemplatePlugin.js +37 -37
- package/lib/JsonpHotUpdateChunkTemplatePlugin.js +27 -27
- package/lib/JsonpTemplatePlugin.js +21 -21
- package/lib/LibManifestPlugin.js +63 -63
- package/lib/LibraryTemplatePlugin.js +92 -92
- package/lib/LoaderOptionsPlugin.js +36 -36
- package/lib/LoaderTargetPlugin.js +19 -19
- package/lib/MemoryOutputFileSystem.js +5 -5
- package/lib/ModuleBuildError.js +42 -42
- package/lib/ModuleDependencyError.js +22 -22
- package/lib/ModuleDependencyWarning.js +22 -22
- package/lib/ModuleError.js +24 -24
- package/lib/ModuleFilenameHelpers.js +162 -162
- package/lib/ModuleNotFoundError.js +26 -26
- package/lib/ModuleReason.js +50 -50
- package/lib/ModuleTemplate.js +23 -23
- package/lib/ModuleWarning.js +24 -24
- package/lib/MovedToPluginWarningPlugin.js +21 -21
- package/lib/MultiCompiler.js +164 -164
- package/lib/MultiEntryPlugin.js +39 -39
- package/lib/MultiModuleFactory.js +19 -19
- package/lib/MultiStats.js +79 -79
- package/lib/MultiWatching.js +32 -32
- package/lib/NamedChunksPlugin.js +30 -30
- package/lib/NamedModulesPlugin.js +27 -27
- package/lib/NewWatchingPlugin.js +15 -15
- package/lib/NoEmitOnErrorsPlugin.js +22 -22
- package/lib/NoErrorsPlugin.js +29 -29
- package/lib/NodeStuffPlugin.js +97 -97
- package/lib/NormalModuleReplacementPlugin.js +45 -45
- package/lib/NullFactory.js +12 -12
- package/lib/OptionsApply.js +10 -10
- package/lib/ParserHelpers.js +85 -85
- package/lib/PrefetchPlugin.js +31 -31
- package/lib/ProgressPlugin.js +192 -192
- package/lib/ProvidePlugin.js +55 -55
- package/lib/RawModule.js +54 -54
- package/lib/RequestShortener.js +63 -63
- package/lib/RequireJsStuffPlugin.js +31 -31
- package/lib/RuleSet.js +444 -444
- package/lib/SetVarMainTemplatePlugin.js +41 -41
- package/lib/SingleEntryPlugin.js +35 -35
- package/lib/SizeFormatHelpers.js +18 -18
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +37 -37
- package/lib/UnsupportedFeatureWarning.js +21 -21
- package/lib/UseStrictPlugin.js +34 -34
- package/lib/WarnCaseSensitiveModulesPlugin.js +31 -31
- package/lib/WatchIgnorePlugin.js +49 -49
- package/lib/WebpackError.js +11 -11
- package/lib/WebpackOptionsDefaulter.js +129 -129
- package/lib/WebpackOptionsValidationError.js +196 -196
- package/lib/compareLocations.js +36 -36
- package/lib/dependencies/AMDDefineDependency.js +142 -142
- package/lib/dependencies/AMDPlugin.js +119 -119
- package/lib/dependencies/AMDRequireDependenciesBlock.js +33 -33
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +177 -177
- package/lib/dependencies/AMDRequireDependency.js +67 -67
- package/lib/dependencies/AMDRequireItemDependency.js +22 -22
- package/lib/dependencies/CommonJsRequireDependency.js +22 -22
- package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +89 -89
- package/lib/dependencies/ConstDependency.js +32 -32
- package/lib/dependencies/ContextDependencyHelpers.js +71 -71
- package/lib/dependencies/ContextElementDependency.js +21 -21
- package/lib/dependencies/CriticalDependencyWarning.js +20 -20
- package/lib/dependencies/DelegatedExportsDependency.js +33 -33
- package/lib/dependencies/DelegatedSourceDependency.js +18 -18
- package/lib/dependencies/DllEntryDependency.js +20 -20
- package/lib/dependencies/HarmonyCompatibilityDependency.js +30 -30
- package/lib/dependencies/HarmonyExportHeaderDependency.js +28 -28
- package/lib/dependencies/ImportDependenciesBlock.js +17 -17
- package/lib/dependencies/ImportEagerContextDependency.js +22 -22
- package/lib/dependencies/ImportLazyContextDependency.js +22 -22
- package/lib/dependencies/ImportLazyOnceContextDependency.js +22 -22
- package/lib/dependencies/ImportParserPlugin.js +89 -89
- package/lib/dependencies/ImportPlugin.js +60 -60
- package/lib/dependencies/ImportWeakContextDependency.js +22 -22
- package/lib/dependencies/LoaderDependency.js +18 -18
- package/lib/dependencies/LoaderPlugin.js +60 -60
- package/lib/dependencies/LocalModule.js +23 -23
- package/lib/dependencies/LocalModuleDependency.js +24 -24
- package/lib/dependencies/LocalModulesHelpers.js +46 -46
- package/lib/dependencies/ModuleDependency.js +23 -23
- package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
- package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
- package/lib/dependencies/MultiEntryDependency.js +20 -20
- package/lib/dependencies/NullDependency.js +24 -24
- package/lib/dependencies/PrefetchDependency.js +18 -18
- package/lib/dependencies/RequireContextDependency.js +26 -26
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +50 -50
- package/lib/dependencies/RequireContextPlugin.js +96 -96
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +22 -22
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +102 -102
- package/lib/dependencies/RequireEnsureDependency.js +38 -38
- package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
- package/lib/dependencies/RequireEnsurePlugin.js +40 -40
- package/lib/dependencies/RequireHeaderDependency.js +26 -26
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +21 -21
- package/lib/dependencies/RequireIncludePlugin.js +33 -33
- package/lib/dependencies/RequireResolveDependency.js +22 -22
- package/lib/dependencies/RequireResolveDependencyParserPlugin.js +71 -71
- package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
- package/lib/dependencies/SingleEntryDependency.js +18 -18
- package/lib/dependencies/SystemPlugin.js +44 -44
- package/lib/dependencies/UnsupportedDependency.js +23 -23
- package/lib/dependencies/WebpackMissingModule.js +18 -18
- package/lib/dependencies/getFunctionExpression.js +44 -44
- package/lib/formatLocation.js +54 -54
- package/lib/node/NodeChunkTemplatePlugin.js +27 -27
- package/lib/node/NodeEnvironmentPlugin.js +25 -25
- package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +27 -27
- package/lib/node/NodeMainTemplate.runtime.js +24 -24
- package/lib/node/NodeMainTemplateAsync.runtime.js +40 -40
- package/lib/node/NodeOutputFileSystem.js +22 -22
- package/lib/node/NodeSourcePlugin.js +88 -88
- package/lib/node/NodeTargetPlugin.js +15 -15
- package/lib/node/NodeTemplatePlugin.js +27 -27
- package/lib/node/NodeWatchFileSystem.js +72 -72
- package/lib/optimize/ChunkModuleIdRangePlugin.js +53 -53
- package/lib/optimize/DedupePlugin.js +15 -15
- package/lib/optimize/FlagIncludedChunksPlugin.js +35 -35
- package/lib/optimize/LimitChunkCountPlugin.js +59 -59
- package/lib/optimize/MinChunkSizePlugin.js +65 -65
- package/lib/optimize/RemoveEmptyChunksPlugin.js +21 -21
- package/lib/optimize/UglifyJsPlugin.js +9 -9
- package/lib/performance/AssetsOverSizeLimitWarning.js +23 -23
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +28 -28
- package/lib/performance/NoAsyncChunksWarning.js +20 -20
- package/lib/performance/SizeLimitsPlugin.js +102 -102
- package/lib/prepareOptions.js +29 -29
- package/lib/removeAndDo.js +15 -15
- package/lib/util/Semaphore.js +32 -32
- package/lib/util/identifier.js +38 -38
- package/lib/validateSchema.js +66 -66
- package/lib/web/WebEnvironmentPlugin.js +18 -18
- package/lib/webworker/WebWorkerChunkTemplatePlugin.js +29 -29
- package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +28 -28
- package/lib/webworker/WebWorkerMainTemplate.runtime.js +58 -58
- package/lib/webworker/WebWorkerTemplatePlugin.js +20 -20
- package/package.json +1 -1
- package/schemas/ajv.absolutePath.js +29 -29
- package/schemas/webpackOptionsSchema.json +16 -0
package/lib/ContextModule.js
CHANGED
@@ -1,431 +1,431 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
const path = require("path");
|
7
|
-
const Module = require("./Module");
|
8
|
-
const OriginalSource = require("webpack-sources").OriginalSource;
|
9
|
-
const RawSource = require("webpack-sources").RawSource;
|
10
|
-
const AsyncDependenciesBlock = require("./AsyncDependenciesBlock");
|
11
|
-
const DepBlockHelpers = require("./dependencies/DepBlockHelpers");
|
12
|
-
const Template = require("./Template");
|
13
|
-
|
14
|
-
class ContextModule extends Module {
|
15
|
-
constructor(resolveDependencies, context, recursive, regExp, addon, asyncMode, chunkName) {
|
16
|
-
super();
|
17
|
-
this.resolveDependencies = resolveDependencies;
|
18
|
-
this.context = context;
|
19
|
-
this.recursive = recursive;
|
20
|
-
this.regExp = regExp;
|
21
|
-
this.addon = addon;
|
22
|
-
this.async = asyncMode;
|
23
|
-
this.cacheable = true;
|
24
|
-
this.contextDependencies = [context];
|
25
|
-
this.built = false;
|
26
|
-
this.chunkName = chunkName;
|
27
|
-
}
|
28
|
-
|
29
|
-
prettyRegExp(regexString) {
|
30
|
-
// remove the "/" at the front and the beginning
|
31
|
-
// "/foo/" -> "foo"
|
32
|
-
return regexString.substring(1, regexString.length - 1);
|
33
|
-
}
|
34
|
-
|
35
|
-
contextify(context, request) {
|
36
|
-
return request.split("!").map(subrequest => {
|
37
|
-
let rp = path.relative(context, subrequest);
|
38
|
-
if(path.sep === "\\")
|
39
|
-
rp = rp.replace(/\\/g, "/");
|
40
|
-
if(rp.indexOf("../") !== 0)
|
41
|
-
rp = "./" + rp;
|
42
|
-
return rp;
|
43
|
-
}).join("!");
|
44
|
-
}
|
45
|
-
|
46
|
-
identifier() {
|
47
|
-
let identifier = this.context;
|
48
|
-
if(this.async)
|
49
|
-
identifier += ` ${this.async}`;
|
50
|
-
if(!this.recursive)
|
51
|
-
identifier += " nonrecursive";
|
52
|
-
if(this.addon)
|
53
|
-
identifier += ` ${this.addon}`;
|
54
|
-
if(this.regExp)
|
55
|
-
identifier += ` ${this.regExp}`;
|
56
|
-
|
57
|
-
return identifier;
|
58
|
-
}
|
59
|
-
|
60
|
-
readableIdentifier(requestShortener) {
|
61
|
-
let identifier = requestShortener.shorten(this.context);
|
62
|
-
if(this.async)
|
63
|
-
identifier += ` ${this.async}`;
|
64
|
-
if(!this.recursive)
|
65
|
-
identifier += " nonrecursive";
|
66
|
-
if(this.addon)
|
67
|
-
identifier += ` ${requestShortener.shorten(this.addon)}`;
|
68
|
-
if(this.regExp)
|
69
|
-
identifier += ` ${this.prettyRegExp(this.regExp + "")}`;
|
70
|
-
|
71
|
-
return identifier;
|
72
|
-
}
|
73
|
-
|
74
|
-
libIdent(options) {
|
75
|
-
let identifier = this.contextify(options.context, this.context);
|
76
|
-
if(this.async)
|
77
|
-
identifier += ` ${this.async}`;
|
78
|
-
if(this.recursive)
|
79
|
-
identifier += " recursive";
|
80
|
-
if(this.addon)
|
81
|
-
identifier += ` ${this.contextify(options.context, this.addon)}`;
|
82
|
-
if(this.regExp)
|
83
|
-
identifier += ` ${this.prettyRegExp(this.regExp + "")}`;
|
84
|
-
|
85
|
-
return identifier;
|
86
|
-
}
|
87
|
-
|
88
|
-
needRebuild(fileTimestamps, contextTimestamps) {
|
89
|
-
const ts = contextTimestamps[this.context];
|
90
|
-
if(!ts) {
|
91
|
-
return true;
|
92
|
-
}
|
93
|
-
|
94
|
-
return ts >= this.builtTime;
|
95
|
-
}
|
96
|
-
|
97
|
-
unbuild() {
|
98
|
-
this.built = false;
|
99
|
-
super.unbuild();
|
100
|
-
}
|
101
|
-
|
102
|
-
build(options, compilation, resolver, fs, callback) {
|
103
|
-
this.built = true;
|
104
|
-
this.builtTime = Date.now();
|
105
|
-
this.resolveDependencies(fs, this.context, this.recursive, this.regExp, (err, dependencies) => {
|
106
|
-
if(err) return callback(err);
|
107
|
-
|
108
|
-
// Reset children
|
109
|
-
this.dependencies = [];
|
110
|
-
this.blocks = [];
|
111
|
-
|
112
|
-
// abort if something failed
|
113
|
-
// this will create an empty context
|
114
|
-
if(!dependencies) {
|
115
|
-
callback();
|
116
|
-
return;
|
117
|
-
}
|
118
|
-
|
119
|
-
// enhance dependencies with meta info
|
120
|
-
dependencies.forEach(dep => {
|
121
|
-
dep.loc = dep.userRequest;
|
122
|
-
dep.request = this.addon + dep.request;
|
123
|
-
});
|
124
|
-
|
125
|
-
if(!this.async || this.async === "eager") {
|
126
|
-
|
127
|
-
// if we have an sync or eager context
|
128
|
-
// just add all dependencies and continue
|
129
|
-
this.dependencies = dependencies;
|
130
|
-
|
131
|
-
} else if(this.async === "lazy-once") {
|
132
|
-
|
133
|
-
// for the lazy-once mode create a new async dependency block
|
134
|
-
// and add that block to this context
|
135
|
-
if(dependencies.length > 0) {
|
136
|
-
const block = new AsyncDependenciesBlock(this.chunkName, this);
|
137
|
-
dependencies.forEach(dep => {
|
138
|
-
block.addDependency(dep);
|
139
|
-
});
|
140
|
-
this.addBlock(block);
|
141
|
-
}
|
142
|
-
|
143
|
-
} else if(this.async === "weak" || this.async === "async-weak") {
|
144
|
-
|
145
|
-
// we mark all dependencies as weak
|
146
|
-
dependencies.forEach(dep => dep.weak = true);
|
147
|
-
this.dependencies = dependencies;
|
148
|
-
|
149
|
-
} else {
|
150
|
-
// if we are lazy create a new async dependency block per dependency
|
151
|
-
// and add all blocks to this context
|
152
|
-
dependencies.forEach((dep, idx) => {
|
153
|
-
let chunkName = this.chunkName;
|
154
|
-
if(chunkName) {
|
155
|
-
if(!/\[(index|request)\]/.test(chunkName))
|
156
|
-
chunkName += "[index]";
|
157
|
-
chunkName = chunkName.replace(/\[index\]/g, idx);
|
158
|
-
chunkName = chunkName.replace(/\[request\]/g, Template.toPath(dep.userRequest));
|
159
|
-
}
|
160
|
-
const block = new AsyncDependenciesBlock(chunkName, dep.module, dep.loc);
|
161
|
-
block.addDependency(dep);
|
162
|
-
this.addBlock(block);
|
163
|
-
});
|
164
|
-
}
|
165
|
-
callback();
|
166
|
-
});
|
167
|
-
}
|
168
|
-
|
169
|
-
getUserRequestMap(dependencies) {
|
170
|
-
// if we filter first we get a new array
|
171
|
-
// therefor we dont need to create a clone of dependencies explicitly
|
172
|
-
// therefore the order of this is !important!
|
173
|
-
return dependencies
|
174
|
-
.filter(dependency => dependency.module)
|
175
|
-
.sort((a, b) => {
|
176
|
-
if(a.userRequest === b.userRequest) {
|
177
|
-
return 0;
|
178
|
-
}
|
179
|
-
return a.userRequest < b.userRequest ? -1 : 1;
|
180
|
-
}).reduce(function(map, dep) {
|
181
|
-
map[dep.userRequest] = dep.module.id;
|
182
|
-
return map;
|
183
|
-
}, Object.create(null));
|
184
|
-
}
|
185
|
-
|
186
|
-
getSyncSource(dependencies, id) {
|
187
|
-
const map = this.getUserRequestMap(dependencies);
|
188
|
-
return `var map = ${JSON.stringify(map, null, "\t")};
|
189
|
-
function webpackContext(req) {
|
190
|
-
return __webpack_require__(webpackContextResolve(req));
|
191
|
-
};
|
192
|
-
function webpackContextResolve(req) {
|
193
|
-
var id = map[req];
|
194
|
-
if(!(id + 1)) // check for number or string
|
195
|
-
throw new Error("Cannot find module '" + req + "'.");
|
196
|
-
return id;
|
197
|
-
};
|
198
|
-
webpackContext.keys = function webpackContextKeys() {
|
199
|
-
return Object.keys(map);
|
200
|
-
};
|
201
|
-
webpackContext.resolve = webpackContextResolve;
|
202
|
-
module.exports = webpackContext;
|
203
|
-
webpackContext.id = ${JSON.stringify(id)};`;
|
204
|
-
}
|
205
|
-
|
206
|
-
getWeakSyncSource(dependencies, id) {
|
207
|
-
const map = this.getUserRequestMap(dependencies);
|
208
|
-
return `var map = ${JSON.stringify(map, null, "\t")};
|
209
|
-
function webpackContext(req) {
|
210
|
-
var id = webpackContextResolve(req);
|
211
|
-
if(!__webpack_require__.m[id])
|
212
|
-
throw new Error("Module '" + req + "' ('" + id + "') is not available (weak dependency)");
|
213
|
-
return __webpack_require__(id);
|
214
|
-
};
|
215
|
-
function webpackContextResolve(req) {
|
216
|
-
var id = map[req];
|
217
|
-
if(!(id + 1)) // check for number or string
|
218
|
-
throw new Error("Cannot find module '" + req + "'.");
|
219
|
-
return id;
|
220
|
-
};
|
221
|
-
webpackContext.keys = function webpackContextKeys() {
|
222
|
-
return Object.keys(map);
|
223
|
-
};
|
224
|
-
webpackContext.resolve = webpackContextResolve;
|
225
|
-
webpackContext.id = ${JSON.stringify(id)};
|
226
|
-
module.exports = webpackContext;`;
|
227
|
-
}
|
228
|
-
|
229
|
-
getAsyncWeakSource(dependencies, id) {
|
230
|
-
const map = this.getUserRequestMap(dependencies);
|
231
|
-
|
232
|
-
return `var map = ${JSON.stringify(map, null, "\t")};
|
233
|
-
function webpackAsyncContext(req) {
|
234
|
-
return webpackAsyncContextResolve(req).then(function(id) {
|
235
|
-
if(!__webpack_require__.m[id])
|
236
|
-
throw new Error("Module '" + req + "' ('" + id + "') is not available (weak dependency)");
|
237
|
-
return __webpack_require__(id);
|
238
|
-
});
|
239
|
-
};
|
240
|
-
function webpackAsyncContextResolve(req) {
|
241
|
-
// Here Promise.resolve().then() is used instead of new Promise() to prevent
|
242
|
-
// uncatched exception popping up in devtools
|
243
|
-
return Promise.resolve().then(function() {
|
244
|
-
var id = map[req];
|
245
|
-
if(!(id + 1)) // check for number or string
|
246
|
-
throw new Error("Cannot find module '" + req + "'.");
|
247
|
-
return id;
|
248
|
-
});
|
249
|
-
};
|
250
|
-
webpackAsyncContext.keys = function webpackAsyncContextKeys() {
|
251
|
-
return Object.keys(map);
|
252
|
-
};
|
253
|
-
webpackAsyncContext.resolve = webpackAsyncContextResolve;
|
254
|
-
webpackAsyncContext.id = ${JSON.stringify(id)};
|
255
|
-
module.exports = webpackAsyncContext;`;
|
256
|
-
}
|
257
|
-
|
258
|
-
getEagerSource(dependencies, id) {
|
259
|
-
const map = this.getUserRequestMap(dependencies);
|
260
|
-
return `var map = ${JSON.stringify(map, null, "\t")};
|
261
|
-
function webpackAsyncContext(req) {
|
262
|
-
return webpackAsyncContextResolve(req).then(__webpack_require__);
|
263
|
-
};
|
264
|
-
function webpackAsyncContextResolve(req) {
|
265
|
-
// Here Promise.resolve().then() is used instead of new Promise() to prevent
|
266
|
-
// uncatched exception popping up in devtools
|
267
|
-
return Promise.resolve().then(function() {
|
268
|
-
var id = map[req];
|
269
|
-
if(!(id + 1)) // check for number or string
|
270
|
-
throw new Error("Cannot find module '" + req + "'.");
|
271
|
-
return id;
|
272
|
-
});
|
273
|
-
};
|
274
|
-
webpackAsyncContext.keys = function webpackAsyncContextKeys() {
|
275
|
-
return Object.keys(map);
|
276
|
-
};
|
277
|
-
webpackAsyncContext.resolve = webpackAsyncContextResolve;
|
278
|
-
webpackAsyncContext.id = ${JSON.stringify(id)};
|
279
|
-
module.exports = webpackAsyncContext;`;
|
280
|
-
}
|
281
|
-
|
282
|
-
getLazyOnceSource(block, dependencies, id, outputOptions, requestShortener) {
|
283
|
-
const promise = DepBlockHelpers.getDepBlockPromise(block, outputOptions, requestShortener, "lazy-once context");
|
284
|
-
const map = this.getUserRequestMap(dependencies);
|
285
|
-
return `var map = ${JSON.stringify(map, null, "\t")};
|
286
|
-
function webpackAsyncContext(req) {
|
287
|
-
return webpackAsyncContextResolve(req).then(__webpack_require__);
|
288
|
-
};
|
289
|
-
function webpackAsyncContextResolve(req) {
|
290
|
-
return ${promise}.then(function() {
|
291
|
-
var id = map[req];
|
292
|
-
if(!(id + 1)) // check for number or string
|
293
|
-
throw new Error("Cannot find module '" + req + "'.");
|
294
|
-
return id;
|
295
|
-
});
|
296
|
-
};
|
297
|
-
webpackAsyncContext.keys = function webpackAsyncContextKeys() {
|
298
|
-
return Object.keys(map);
|
299
|
-
};
|
300
|
-
webpackAsyncContext.resolve = webpackAsyncContextResolve;
|
301
|
-
webpackAsyncContext.id = ${JSON.stringify(id)};
|
302
|
-
module.exports = webpackAsyncContext;`;
|
303
|
-
}
|
304
|
-
|
305
|
-
getLazySource(blocks, id) {
|
306
|
-
let hasMultipleOrNoChunks = false;
|
307
|
-
const map = blocks
|
308
|
-
.filter(block => block.dependencies[0].module)
|
309
|
-
.map((block) => ({
|
310
|
-
dependency: block.dependencies[0],
|
311
|
-
block: block,
|
312
|
-
userRequest: block.dependencies[0].userRequest
|
313
|
-
})).sort((a, b) => {
|
314
|
-
if(a.userRequest === b.userRequest) return 0;
|
315
|
-
return a.userRequest < b.userRequest ? -1 : 1;
|
316
|
-
}).reduce((map, item) => {
|
317
|
-
const chunks = item.block.chunks || [];
|
318
|
-
if(chunks.length !== 1) {
|
319
|
-
hasMultipleOrNoChunks = true;
|
320
|
-
}
|
321
|
-
map[item.userRequest] = [item.dependency.module.id]
|
322
|
-
.concat(chunks.map(chunk => chunk.id));
|
323
|
-
|
324
|
-
return map;
|
325
|
-
}, Object.create(null));
|
326
|
-
|
327
|
-
const requestPrefix = hasMultipleOrNoChunks ?
|
328
|
-
"Promise.all(ids.slice(1).map(__webpack_require__.e))" :
|
329
|
-
"__webpack_require__.e(ids[1])";
|
330
|
-
|
331
|
-
return `var map = ${JSON.stringify(map, null, "\t")};
|
332
|
-
function webpackAsyncContext(req) {
|
333
|
-
var ids = map[req];
|
334
|
-
if(!ids)
|
335
|
-
return Promise.reject(new Error("Cannot find module '" + req + "'."));
|
336
|
-
return ${requestPrefix}.then(function() {
|
337
|
-
return __webpack_require__(ids[0]);
|
338
|
-
});
|
339
|
-
};
|
340
|
-
webpackAsyncContext.keys = function webpackAsyncContextKeys() {
|
341
|
-
return Object.keys(map);
|
342
|
-
};
|
343
|
-
webpackAsyncContext.id = ${JSON.stringify(id)};
|
344
|
-
module.exports = webpackAsyncContext;`;
|
345
|
-
}
|
346
|
-
|
347
|
-
getSourceForEmptyContext(id) {
|
348
|
-
return `function webpackEmptyContext(req) {
|
349
|
-
throw new Error("Cannot find module '" + req + "'.");
|
350
|
-
}
|
351
|
-
webpackEmptyContext.keys = function() { return []; };
|
352
|
-
webpackEmptyContext.resolve = webpackEmptyContext;
|
353
|
-
module.exports = webpackEmptyContext;
|
354
|
-
webpackEmptyContext.id = ${JSON.stringify(id)};`;
|
355
|
-
}
|
356
|
-
|
357
|
-
getSourceForEmptyAsyncContext(id) {
|
358
|
-
return `function webpackEmptyAsyncContext(req) {
|
359
|
-
// Here Promise.resolve().then() is used instead of new Promise() to prevent
|
360
|
-
// uncatched exception popping up in devtools
|
361
|
-
return Promise.resolve().then(function() {
|
362
|
-
throw new Error("Cannot find module '" + req + "'.");
|
363
|
-
});
|
364
|
-
}
|
365
|
-
webpackEmptyAsyncContext.keys = function() { return []; };
|
366
|
-
webpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;
|
367
|
-
module.exports = webpackEmptyAsyncContext;
|
368
|
-
webpackEmptyAsyncContext.id = ${JSON.stringify(id)};`;
|
369
|
-
}
|
370
|
-
|
371
|
-
getSourceString(asyncMode, outputOptions, requestShortener) {
|
372
|
-
if(asyncMode === "lazy") {
|
373
|
-
if(this.blocks && this.blocks.length > 0) {
|
374
|
-
return this.getLazySource(this.blocks, this.id);
|
375
|
-
}
|
376
|
-
return this.getSourceForEmptyAsyncContext(this.id);
|
377
|
-
}
|
378
|
-
if(asyncMode === "eager") {
|
379
|
-
if(this.dependencies && this.dependencies.length > 0) {
|
380
|
-
return this.getEagerSource(this.dependencies, this.id);
|
381
|
-
}
|
382
|
-
return this.getSourceForEmptyAsyncContext(this.id);
|
383
|
-
}
|
384
|
-
if(asyncMode === "lazy-once") {
|
385
|
-
const block = this.blocks[0];
|
386
|
-
if(block) {
|
387
|
-
return this.getLazyOnceSource(block, block.dependencies, this.id, outputOptions, requestShortener);
|
388
|
-
}
|
389
|
-
return this.getSourceForEmptyAsyncContext(this.id);
|
390
|
-
}
|
391
|
-
if(asyncMode === "async-weak") {
|
392
|
-
if(this.dependencies && this.dependencies.length > 0) {
|
393
|
-
return this.getAsyncWeakSource(this.dependencies, this.id);
|
394
|
-
}
|
395
|
-
return this.getSourceForEmptyAsyncContext(this.id);
|
396
|
-
}
|
397
|
-
if(asyncMode === "weak") {
|
398
|
-
if(this.dependencies && this.dependencies.length > 0) {
|
399
|
-
return this.getWeakSyncSource(this.dependencies, this.id);
|
400
|
-
}
|
401
|
-
}
|
402
|
-
if(this.dependencies && this.dependencies.length > 0) {
|
403
|
-
return this.getSyncSource(this.dependencies, this.id);
|
404
|
-
}
|
405
|
-
return this.getSourceForEmptyContext(this.id);
|
406
|
-
}
|
407
|
-
|
408
|
-
getSource(sourceString) {
|
409
|
-
if(this.useSourceMap) {
|
410
|
-
return new OriginalSource(sourceString, this.identifier());
|
411
|
-
}
|
412
|
-
return new RawSource(sourceString);
|
413
|
-
}
|
414
|
-
|
415
|
-
source(dependencyTemplates, outputOptions, requestShortener) {
|
416
|
-
return this.getSource(
|
417
|
-
this.getSourceString(this.async, outputOptions, requestShortener)
|
418
|
-
);
|
419
|
-
}
|
420
|
-
|
421
|
-
size() {
|
422
|
-
// base penalty
|
423
|
-
const initialSize = 160;
|
424
|
-
|
425
|
-
// if we dont have dependencies we stop here.
|
426
|
-
return this.dependencies
|
427
|
-
.reduce((size, dependency) => size + 5 + dependency.userRequest.length, initialSize);
|
428
|
-
}
|
429
|
-
}
|
430
|
-
|
431
|
-
module.exports = ContextModule;
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
const path = require("path");
|
7
|
+
const Module = require("./Module");
|
8
|
+
const OriginalSource = require("webpack-sources").OriginalSource;
|
9
|
+
const RawSource = require("webpack-sources").RawSource;
|
10
|
+
const AsyncDependenciesBlock = require("./AsyncDependenciesBlock");
|
11
|
+
const DepBlockHelpers = require("./dependencies/DepBlockHelpers");
|
12
|
+
const Template = require("./Template");
|
13
|
+
|
14
|
+
class ContextModule extends Module {
|
15
|
+
constructor(resolveDependencies, context, recursive, regExp, addon, asyncMode, chunkName) {
|
16
|
+
super();
|
17
|
+
this.resolveDependencies = resolveDependencies;
|
18
|
+
this.context = context;
|
19
|
+
this.recursive = recursive;
|
20
|
+
this.regExp = regExp;
|
21
|
+
this.addon = addon;
|
22
|
+
this.async = asyncMode;
|
23
|
+
this.cacheable = true;
|
24
|
+
this.contextDependencies = [context];
|
25
|
+
this.built = false;
|
26
|
+
this.chunkName = chunkName;
|
27
|
+
}
|
28
|
+
|
29
|
+
prettyRegExp(regexString) {
|
30
|
+
// remove the "/" at the front and the beginning
|
31
|
+
// "/foo/" -> "foo"
|
32
|
+
return regexString.substring(1, regexString.length - 1);
|
33
|
+
}
|
34
|
+
|
35
|
+
contextify(context, request) {
|
36
|
+
return request.split("!").map(subrequest => {
|
37
|
+
let rp = path.relative(context, subrequest);
|
38
|
+
if(path.sep === "\\")
|
39
|
+
rp = rp.replace(/\\/g, "/");
|
40
|
+
if(rp.indexOf("../") !== 0)
|
41
|
+
rp = "./" + rp;
|
42
|
+
return rp;
|
43
|
+
}).join("!");
|
44
|
+
}
|
45
|
+
|
46
|
+
identifier() {
|
47
|
+
let identifier = this.context;
|
48
|
+
if(this.async)
|
49
|
+
identifier += ` ${this.async}`;
|
50
|
+
if(!this.recursive)
|
51
|
+
identifier += " nonrecursive";
|
52
|
+
if(this.addon)
|
53
|
+
identifier += ` ${this.addon}`;
|
54
|
+
if(this.regExp)
|
55
|
+
identifier += ` ${this.regExp}`;
|
56
|
+
|
57
|
+
return identifier;
|
58
|
+
}
|
59
|
+
|
60
|
+
readableIdentifier(requestShortener) {
|
61
|
+
let identifier = requestShortener.shorten(this.context);
|
62
|
+
if(this.async)
|
63
|
+
identifier += ` ${this.async}`;
|
64
|
+
if(!this.recursive)
|
65
|
+
identifier += " nonrecursive";
|
66
|
+
if(this.addon)
|
67
|
+
identifier += ` ${requestShortener.shorten(this.addon)}`;
|
68
|
+
if(this.regExp)
|
69
|
+
identifier += ` ${this.prettyRegExp(this.regExp + "")}`;
|
70
|
+
|
71
|
+
return identifier;
|
72
|
+
}
|
73
|
+
|
74
|
+
libIdent(options) {
|
75
|
+
let identifier = this.contextify(options.context, this.context);
|
76
|
+
if(this.async)
|
77
|
+
identifier += ` ${this.async}`;
|
78
|
+
if(this.recursive)
|
79
|
+
identifier += " recursive";
|
80
|
+
if(this.addon)
|
81
|
+
identifier += ` ${this.contextify(options.context, this.addon)}`;
|
82
|
+
if(this.regExp)
|
83
|
+
identifier += ` ${this.prettyRegExp(this.regExp + "")}`;
|
84
|
+
|
85
|
+
return identifier;
|
86
|
+
}
|
87
|
+
|
88
|
+
needRebuild(fileTimestamps, contextTimestamps) {
|
89
|
+
const ts = contextTimestamps[this.context];
|
90
|
+
if(!ts) {
|
91
|
+
return true;
|
92
|
+
}
|
93
|
+
|
94
|
+
return ts >= this.builtTime;
|
95
|
+
}
|
96
|
+
|
97
|
+
unbuild() {
|
98
|
+
this.built = false;
|
99
|
+
super.unbuild();
|
100
|
+
}
|
101
|
+
|
102
|
+
build(options, compilation, resolver, fs, callback) {
|
103
|
+
this.built = true;
|
104
|
+
this.builtTime = Date.now();
|
105
|
+
this.resolveDependencies(fs, this.context, this.recursive, this.regExp, (err, dependencies) => {
|
106
|
+
if(err) return callback(err);
|
107
|
+
|
108
|
+
// Reset children
|
109
|
+
this.dependencies = [];
|
110
|
+
this.blocks = [];
|
111
|
+
|
112
|
+
// abort if something failed
|
113
|
+
// this will create an empty context
|
114
|
+
if(!dependencies) {
|
115
|
+
callback();
|
116
|
+
return;
|
117
|
+
}
|
118
|
+
|
119
|
+
// enhance dependencies with meta info
|
120
|
+
dependencies.forEach(dep => {
|
121
|
+
dep.loc = dep.userRequest;
|
122
|
+
dep.request = this.addon + dep.request;
|
123
|
+
});
|
124
|
+
|
125
|
+
if(!this.async || this.async === "eager") {
|
126
|
+
|
127
|
+
// if we have an sync or eager context
|
128
|
+
// just add all dependencies and continue
|
129
|
+
this.dependencies = dependencies;
|
130
|
+
|
131
|
+
} else if(this.async === "lazy-once") {
|
132
|
+
|
133
|
+
// for the lazy-once mode create a new async dependency block
|
134
|
+
// and add that block to this context
|
135
|
+
if(dependencies.length > 0) {
|
136
|
+
const block = new AsyncDependenciesBlock(this.chunkName, this);
|
137
|
+
dependencies.forEach(dep => {
|
138
|
+
block.addDependency(dep);
|
139
|
+
});
|
140
|
+
this.addBlock(block);
|
141
|
+
}
|
142
|
+
|
143
|
+
} else if(this.async === "weak" || this.async === "async-weak") {
|
144
|
+
|
145
|
+
// we mark all dependencies as weak
|
146
|
+
dependencies.forEach(dep => dep.weak = true);
|
147
|
+
this.dependencies = dependencies;
|
148
|
+
|
149
|
+
} else {
|
150
|
+
// if we are lazy create a new async dependency block per dependency
|
151
|
+
// and add all blocks to this context
|
152
|
+
dependencies.forEach((dep, idx) => {
|
153
|
+
let chunkName = this.chunkName;
|
154
|
+
if(chunkName) {
|
155
|
+
if(!/\[(index|request)\]/.test(chunkName))
|
156
|
+
chunkName += "[index]";
|
157
|
+
chunkName = chunkName.replace(/\[index\]/g, idx);
|
158
|
+
chunkName = chunkName.replace(/\[request\]/g, Template.toPath(dep.userRequest));
|
159
|
+
}
|
160
|
+
const block = new AsyncDependenciesBlock(chunkName, dep.module, dep.loc);
|
161
|
+
block.addDependency(dep);
|
162
|
+
this.addBlock(block);
|
163
|
+
});
|
164
|
+
}
|
165
|
+
callback();
|
166
|
+
});
|
167
|
+
}
|
168
|
+
|
169
|
+
getUserRequestMap(dependencies) {
|
170
|
+
// if we filter first we get a new array
|
171
|
+
// therefor we dont need to create a clone of dependencies explicitly
|
172
|
+
// therefore the order of this is !important!
|
173
|
+
return dependencies
|
174
|
+
.filter(dependency => dependency.module)
|
175
|
+
.sort((a, b) => {
|
176
|
+
if(a.userRequest === b.userRequest) {
|
177
|
+
return 0;
|
178
|
+
}
|
179
|
+
return a.userRequest < b.userRequest ? -1 : 1;
|
180
|
+
}).reduce(function(map, dep) {
|
181
|
+
map[dep.userRequest] = dep.module.id;
|
182
|
+
return map;
|
183
|
+
}, Object.create(null));
|
184
|
+
}
|
185
|
+
|
186
|
+
getSyncSource(dependencies, id) {
|
187
|
+
const map = this.getUserRequestMap(dependencies);
|
188
|
+
return `var map = ${JSON.stringify(map, null, "\t")};
|
189
|
+
function webpackContext(req) {
|
190
|
+
return __webpack_require__(webpackContextResolve(req));
|
191
|
+
};
|
192
|
+
function webpackContextResolve(req) {
|
193
|
+
var id = map[req];
|
194
|
+
if(!(id + 1)) // check for number or string
|
195
|
+
throw new Error("Cannot find module '" + req + "'.");
|
196
|
+
return id;
|
197
|
+
};
|
198
|
+
webpackContext.keys = function webpackContextKeys() {
|
199
|
+
return Object.keys(map);
|
200
|
+
};
|
201
|
+
webpackContext.resolve = webpackContextResolve;
|
202
|
+
module.exports = webpackContext;
|
203
|
+
webpackContext.id = ${JSON.stringify(id)};`;
|
204
|
+
}
|
205
|
+
|
206
|
+
getWeakSyncSource(dependencies, id) {
|
207
|
+
const map = this.getUserRequestMap(dependencies);
|
208
|
+
return `var map = ${JSON.stringify(map, null, "\t")};
|
209
|
+
function webpackContext(req) {
|
210
|
+
var id = webpackContextResolve(req);
|
211
|
+
if(!__webpack_require__.m[id])
|
212
|
+
throw new Error("Module '" + req + "' ('" + id + "') is not available (weak dependency)");
|
213
|
+
return __webpack_require__(id);
|
214
|
+
};
|
215
|
+
function webpackContextResolve(req) {
|
216
|
+
var id = map[req];
|
217
|
+
if(!(id + 1)) // check for number or string
|
218
|
+
throw new Error("Cannot find module '" + req + "'.");
|
219
|
+
return id;
|
220
|
+
};
|
221
|
+
webpackContext.keys = function webpackContextKeys() {
|
222
|
+
return Object.keys(map);
|
223
|
+
};
|
224
|
+
webpackContext.resolve = webpackContextResolve;
|
225
|
+
webpackContext.id = ${JSON.stringify(id)};
|
226
|
+
module.exports = webpackContext;`;
|
227
|
+
}
|
228
|
+
|
229
|
+
getAsyncWeakSource(dependencies, id) {
|
230
|
+
const map = this.getUserRequestMap(dependencies);
|
231
|
+
|
232
|
+
return `var map = ${JSON.stringify(map, null, "\t")};
|
233
|
+
function webpackAsyncContext(req) {
|
234
|
+
return webpackAsyncContextResolve(req).then(function(id) {
|
235
|
+
if(!__webpack_require__.m[id])
|
236
|
+
throw new Error("Module '" + req + "' ('" + id + "') is not available (weak dependency)");
|
237
|
+
return __webpack_require__(id);
|
238
|
+
});
|
239
|
+
};
|
240
|
+
function webpackAsyncContextResolve(req) {
|
241
|
+
// Here Promise.resolve().then() is used instead of new Promise() to prevent
|
242
|
+
// uncatched exception popping up in devtools
|
243
|
+
return Promise.resolve().then(function() {
|
244
|
+
var id = map[req];
|
245
|
+
if(!(id + 1)) // check for number or string
|
246
|
+
throw new Error("Cannot find module '" + req + "'.");
|
247
|
+
return id;
|
248
|
+
});
|
249
|
+
};
|
250
|
+
webpackAsyncContext.keys = function webpackAsyncContextKeys() {
|
251
|
+
return Object.keys(map);
|
252
|
+
};
|
253
|
+
webpackAsyncContext.resolve = webpackAsyncContextResolve;
|
254
|
+
webpackAsyncContext.id = ${JSON.stringify(id)};
|
255
|
+
module.exports = webpackAsyncContext;`;
|
256
|
+
}
|
257
|
+
|
258
|
+
getEagerSource(dependencies, id) {
|
259
|
+
const map = this.getUserRequestMap(dependencies);
|
260
|
+
return `var map = ${JSON.stringify(map, null, "\t")};
|
261
|
+
function webpackAsyncContext(req) {
|
262
|
+
return webpackAsyncContextResolve(req).then(__webpack_require__);
|
263
|
+
};
|
264
|
+
function webpackAsyncContextResolve(req) {
|
265
|
+
// Here Promise.resolve().then() is used instead of new Promise() to prevent
|
266
|
+
// uncatched exception popping up in devtools
|
267
|
+
return Promise.resolve().then(function() {
|
268
|
+
var id = map[req];
|
269
|
+
if(!(id + 1)) // check for number or string
|
270
|
+
throw new Error("Cannot find module '" + req + "'.");
|
271
|
+
return id;
|
272
|
+
});
|
273
|
+
};
|
274
|
+
webpackAsyncContext.keys = function webpackAsyncContextKeys() {
|
275
|
+
return Object.keys(map);
|
276
|
+
};
|
277
|
+
webpackAsyncContext.resolve = webpackAsyncContextResolve;
|
278
|
+
webpackAsyncContext.id = ${JSON.stringify(id)};
|
279
|
+
module.exports = webpackAsyncContext;`;
|
280
|
+
}
|
281
|
+
|
282
|
+
getLazyOnceSource(block, dependencies, id, outputOptions, requestShortener) {
|
283
|
+
const promise = DepBlockHelpers.getDepBlockPromise(block, outputOptions, requestShortener, "lazy-once context");
|
284
|
+
const map = this.getUserRequestMap(dependencies);
|
285
|
+
return `var map = ${JSON.stringify(map, null, "\t")};
|
286
|
+
function webpackAsyncContext(req) {
|
287
|
+
return webpackAsyncContextResolve(req).then(__webpack_require__);
|
288
|
+
};
|
289
|
+
function webpackAsyncContextResolve(req) {
|
290
|
+
return ${promise}.then(function() {
|
291
|
+
var id = map[req];
|
292
|
+
if(!(id + 1)) // check for number or string
|
293
|
+
throw new Error("Cannot find module '" + req + "'.");
|
294
|
+
return id;
|
295
|
+
});
|
296
|
+
};
|
297
|
+
webpackAsyncContext.keys = function webpackAsyncContextKeys() {
|
298
|
+
return Object.keys(map);
|
299
|
+
};
|
300
|
+
webpackAsyncContext.resolve = webpackAsyncContextResolve;
|
301
|
+
webpackAsyncContext.id = ${JSON.stringify(id)};
|
302
|
+
module.exports = webpackAsyncContext;`;
|
303
|
+
}
|
304
|
+
|
305
|
+
getLazySource(blocks, id) {
|
306
|
+
let hasMultipleOrNoChunks = false;
|
307
|
+
const map = blocks
|
308
|
+
.filter(block => block.dependencies[0].module)
|
309
|
+
.map((block) => ({
|
310
|
+
dependency: block.dependencies[0],
|
311
|
+
block: block,
|
312
|
+
userRequest: block.dependencies[0].userRequest
|
313
|
+
})).sort((a, b) => {
|
314
|
+
if(a.userRequest === b.userRequest) return 0;
|
315
|
+
return a.userRequest < b.userRequest ? -1 : 1;
|
316
|
+
}).reduce((map, item) => {
|
317
|
+
const chunks = item.block.chunks || [];
|
318
|
+
if(chunks.length !== 1) {
|
319
|
+
hasMultipleOrNoChunks = true;
|
320
|
+
}
|
321
|
+
map[item.userRequest] = [item.dependency.module.id]
|
322
|
+
.concat(chunks.map(chunk => chunk.id));
|
323
|
+
|
324
|
+
return map;
|
325
|
+
}, Object.create(null));
|
326
|
+
|
327
|
+
const requestPrefix = hasMultipleOrNoChunks ?
|
328
|
+
"Promise.all(ids.slice(1).map(__webpack_require__.e))" :
|
329
|
+
"__webpack_require__.e(ids[1])";
|
330
|
+
|
331
|
+
return `var map = ${JSON.stringify(map, null, "\t")};
|
332
|
+
function webpackAsyncContext(req) {
|
333
|
+
var ids = map[req];
|
334
|
+
if(!ids)
|
335
|
+
return Promise.reject(new Error("Cannot find module '" + req + "'."));
|
336
|
+
return ${requestPrefix}.then(function() {
|
337
|
+
return __webpack_require__(ids[0]);
|
338
|
+
});
|
339
|
+
};
|
340
|
+
webpackAsyncContext.keys = function webpackAsyncContextKeys() {
|
341
|
+
return Object.keys(map);
|
342
|
+
};
|
343
|
+
webpackAsyncContext.id = ${JSON.stringify(id)};
|
344
|
+
module.exports = webpackAsyncContext;`;
|
345
|
+
}
|
346
|
+
|
347
|
+
getSourceForEmptyContext(id) {
|
348
|
+
return `function webpackEmptyContext(req) {
|
349
|
+
throw new Error("Cannot find module '" + req + "'.");
|
350
|
+
}
|
351
|
+
webpackEmptyContext.keys = function() { return []; };
|
352
|
+
webpackEmptyContext.resolve = webpackEmptyContext;
|
353
|
+
module.exports = webpackEmptyContext;
|
354
|
+
webpackEmptyContext.id = ${JSON.stringify(id)};`;
|
355
|
+
}
|
356
|
+
|
357
|
+
getSourceForEmptyAsyncContext(id) {
|
358
|
+
return `function webpackEmptyAsyncContext(req) {
|
359
|
+
// Here Promise.resolve().then() is used instead of new Promise() to prevent
|
360
|
+
// uncatched exception popping up in devtools
|
361
|
+
return Promise.resolve().then(function() {
|
362
|
+
throw new Error("Cannot find module '" + req + "'.");
|
363
|
+
});
|
364
|
+
}
|
365
|
+
webpackEmptyAsyncContext.keys = function() { return []; };
|
366
|
+
webpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;
|
367
|
+
module.exports = webpackEmptyAsyncContext;
|
368
|
+
webpackEmptyAsyncContext.id = ${JSON.stringify(id)};`;
|
369
|
+
}
|
370
|
+
|
371
|
+
getSourceString(asyncMode, outputOptions, requestShortener) {
|
372
|
+
if(asyncMode === "lazy") {
|
373
|
+
if(this.blocks && this.blocks.length > 0) {
|
374
|
+
return this.getLazySource(this.blocks, this.id);
|
375
|
+
}
|
376
|
+
return this.getSourceForEmptyAsyncContext(this.id);
|
377
|
+
}
|
378
|
+
if(asyncMode === "eager") {
|
379
|
+
if(this.dependencies && this.dependencies.length > 0) {
|
380
|
+
return this.getEagerSource(this.dependencies, this.id);
|
381
|
+
}
|
382
|
+
return this.getSourceForEmptyAsyncContext(this.id);
|
383
|
+
}
|
384
|
+
if(asyncMode === "lazy-once") {
|
385
|
+
const block = this.blocks[0];
|
386
|
+
if(block) {
|
387
|
+
return this.getLazyOnceSource(block, block.dependencies, this.id, outputOptions, requestShortener);
|
388
|
+
}
|
389
|
+
return this.getSourceForEmptyAsyncContext(this.id);
|
390
|
+
}
|
391
|
+
if(asyncMode === "async-weak") {
|
392
|
+
if(this.dependencies && this.dependencies.length > 0) {
|
393
|
+
return this.getAsyncWeakSource(this.dependencies, this.id);
|
394
|
+
}
|
395
|
+
return this.getSourceForEmptyAsyncContext(this.id);
|
396
|
+
}
|
397
|
+
if(asyncMode === "weak") {
|
398
|
+
if(this.dependencies && this.dependencies.length > 0) {
|
399
|
+
return this.getWeakSyncSource(this.dependencies, this.id);
|
400
|
+
}
|
401
|
+
}
|
402
|
+
if(this.dependencies && this.dependencies.length > 0) {
|
403
|
+
return this.getSyncSource(this.dependencies, this.id);
|
404
|
+
}
|
405
|
+
return this.getSourceForEmptyContext(this.id);
|
406
|
+
}
|
407
|
+
|
408
|
+
getSource(sourceString) {
|
409
|
+
if(this.useSourceMap) {
|
410
|
+
return new OriginalSource(sourceString, this.identifier());
|
411
|
+
}
|
412
|
+
return new RawSource(sourceString);
|
413
|
+
}
|
414
|
+
|
415
|
+
source(dependencyTemplates, outputOptions, requestShortener) {
|
416
|
+
return this.getSource(
|
417
|
+
this.getSourceString(this.async, outputOptions, requestShortener)
|
418
|
+
);
|
419
|
+
}
|
420
|
+
|
421
|
+
size() {
|
422
|
+
// base penalty
|
423
|
+
const initialSize = 160;
|
424
|
+
|
425
|
+
// if we dont have dependencies we stop here.
|
426
|
+
return this.dependencies
|
427
|
+
.reduce((size, dependency) => size + 5 + dependency.userRequest.length, initialSize);
|
428
|
+
}
|
429
|
+
}
|
430
|
+
|
431
|
+
module.exports = ContextModule;
|