UNPKG

15.6 kBJavaScriptView Raw
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Tobias Koppers @sokra
4*/
5
6"use strict";
7
8const util = require("util");
9const memoize = require("./util/memoize");
10
11/** @typedef {import("../declarations/WebpackOptions").Entry} Entry */
12/** @typedef {import("../declarations/WebpackOptions").EntryNormalized} EntryNormalized */
13/** @typedef {import("../declarations/WebpackOptions").EntryObject} EntryObject */
14/** @typedef {import("../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
15/** @typedef {import("../declarations/WebpackOptions").ModuleOptions} ModuleOptions */
16/** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
17/** @typedef {import("../declarations/WebpackOptions").RuleSetCondition} RuleSetCondition */
18/** @typedef {import("../declarations/WebpackOptions").RuleSetConditionAbsolute} RuleSetConditionAbsolute */
19/** @typedef {import("../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
20/** @typedef {import("../declarations/WebpackOptions").RuleSetUse} RuleSetUse */
21/** @typedef {import("../declarations/WebpackOptions").RuleSetUseItem} RuleSetUseItem */
22/** @typedef {import("../declarations/WebpackOptions").WebpackOptions} Configuration */
23/** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptionsNormalized */
24/** @typedef {import("../declarations/WebpackOptions").WebpackPluginFunction} WebpackPluginFunction */
25/** @typedef {import("../declarations/WebpackOptions").WebpackPluginInstance} WebpackPluginInstance */
26/** @typedef {import("./Compilation").Asset} Asset */
27/** @typedef {import("./Compilation").AssetInfo} AssetInfo */
28/** @typedef {import("./MultiStats")} MultiStats */
29/** @typedef {import("./Parser").ParserState} ParserState */
30/** @typedef {import("./Watching")} Watching */
31/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsAsset} StatsAsset */
32/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsChunk} StatsChunk */
33/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsChunkGroup} StatsChunkGroup */
34/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsChunkOrigin} StatsChunkOrigin */
35/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsCompilation} StatsCompilation */
36/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsError} StatsError */
37/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsLogging} StatsLogging */
38/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsLoggingEntry} StatsLoggingEntry */
39/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModule} StatsModule */
40/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModuleIssuer} StatsModuleIssuer */
41/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModuleReason} StatsModuleReason */
42/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModuleTraceDependency} StatsModuleTraceDependency */
43/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModuleTraceItem} StatsModuleTraceItem */
44/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsProfile} StatsProfile */
45
46/**
47 * @template {Function} T
48 * @param {function(): T} factory factory function
49 * @returns {T} function
50 */
51const lazyFunction = factory => {
52 const fac = memoize(factory);
53 const f = /** @type {any} */ ((...args) => {
54 return fac()(...args);
55 });
56 return /** @type {T} */ (f);
57};
58
59/**
60 * @template A
61 * @template B
62 * @param {A} obj input a
63 * @param {B} exports input b
64 * @returns {A & B} merged
65 */
66const mergeExports = (obj, exports) => {
67 const descriptors = Object.getOwnPropertyDescriptors(exports);
68 for (const name of Object.keys(descriptors)) {
69 const descriptor = descriptors[name];
70 if (descriptor.get) {
71 const fn = descriptor.get;
72 Object.defineProperty(obj, name, {
73 configurable: false,
74 enumerable: true,
75 get: memoize(fn)
76 });
77 } else if (typeof descriptor.value === "object") {
78 Object.defineProperty(obj, name, {
79 configurable: false,
80 enumerable: true,
81 writable: false,
82 value: mergeExports({}, descriptor.value)
83 });
84 } else {
85 throw new Error(
86 "Exposed values must be either a getter or an nested object"
87 );
88 }
89 }
90 return /** @type {A & B} */ (Object.freeze(obj));
91};
92
93const fn = lazyFunction(() => require("./webpack"));
94module.exports = mergeExports(fn, {
95 get webpack() {
96 return require("./webpack");
97 },
98 get validate() {
99 const validateSchema = require("./validateSchema");
100 const webpackOptionsSchema = require("../schemas/WebpackOptions.json");
101 return options => validateSchema(webpackOptionsSchema, options);
102 },
103 get validateSchema() {
104 const validateSchema = require("./validateSchema");
105 return validateSchema;
106 },
107 get version() {
108 return /** @type {string} */ (require("../package.json").version);
109 },
110
111 get cli() {
112 return require("./cli");
113 },
114 get AutomaticPrefetchPlugin() {
115 return require("./AutomaticPrefetchPlugin");
116 },
117 get AsyncDependenciesBlock() {
118 return require("./AsyncDependenciesBlock");
119 },
120 get BannerPlugin() {
121 return require("./BannerPlugin");
122 },
123 get Cache() {
124 return require("./Cache");
125 },
126 get Chunk() {
127 return require("./Chunk");
128 },
129 get ChunkGraph() {
130 return require("./ChunkGraph");
131 },
132 get CleanPlugin() {
133 return require("./CleanPlugin");
134 },
135 get Compilation() {
136 return require("./Compilation");
137 },
138 get Compiler() {
139 return require("./Compiler");
140 },
141 get ConcatenationScope() {
142 return require("./ConcatenationScope");
143 },
144 get ContextExclusionPlugin() {
145 return require("./ContextExclusionPlugin");
146 },
147 get ContextReplacementPlugin() {
148 return require("./ContextReplacementPlugin");
149 },
150 get DefinePlugin() {
151 return require("./DefinePlugin");
152 },
153 get DelegatedPlugin() {
154 return require("./DelegatedPlugin");
155 },
156 get Dependency() {
157 return require("./Dependency");
158 },
159 get DllPlugin() {
160 return require("./DllPlugin");
161 },
162 get DllReferencePlugin() {
163 return require("./DllReferencePlugin");
164 },
165 get DynamicEntryPlugin() {
166 return require("./DynamicEntryPlugin");
167 },
168 get EntryOptionPlugin() {
169 return require("./EntryOptionPlugin");
170 },
171 get EntryPlugin() {
172 return require("./EntryPlugin");
173 },
174 get EnvironmentPlugin() {
175 return require("./EnvironmentPlugin");
176 },
177 get EvalDevToolModulePlugin() {
178 return require("./EvalDevToolModulePlugin");
179 },
180 get EvalSourceMapDevToolPlugin() {
181 return require("./EvalSourceMapDevToolPlugin");
182 },
183 get ExternalModule() {
184 return require("./ExternalModule");
185 },
186 get ExternalsPlugin() {
187 return require("./ExternalsPlugin");
188 },
189 get Generator() {
190 return require("./Generator");
191 },
192 get HotUpdateChunk() {
193 return require("./HotUpdateChunk");
194 },
195 get HotModuleReplacementPlugin() {
196 return require("./HotModuleReplacementPlugin");
197 },
198 get IgnorePlugin() {
199 return require("./IgnorePlugin");
200 },
201 get JavascriptModulesPlugin() {
202 return util.deprecate(
203 () => require("./javascript/JavascriptModulesPlugin"),
204 "webpack.JavascriptModulesPlugin has moved to webpack.javascript.JavascriptModulesPlugin",
205 "DEP_WEBPACK_JAVASCRIPT_MODULES_PLUGIN"
206 )();
207 },
208 get LibManifestPlugin() {
209 return require("./LibManifestPlugin");
210 },
211 get LibraryTemplatePlugin() {
212 return util.deprecate(
213 () => require("./LibraryTemplatePlugin"),
214 "webpack.LibraryTemplatePlugin is deprecated and has been replaced by compilation.outputOptions.library or compilation.addEntry + passing a library option",
215 "DEP_WEBPACK_LIBRARY_TEMPLATE_PLUGIN"
216 )();
217 },
218 get LoaderOptionsPlugin() {
219 return require("./LoaderOptionsPlugin");
220 },
221 get LoaderTargetPlugin() {
222 return require("./LoaderTargetPlugin");
223 },
224 get Module() {
225 return require("./Module");
226 },
227 get ModuleFilenameHelpers() {
228 return require("./ModuleFilenameHelpers");
229 },
230 get ModuleGraph() {
231 return require("./ModuleGraph");
232 },
233 get ModuleGraphConnection() {
234 return require("./ModuleGraphConnection");
235 },
236 get NoEmitOnErrorsPlugin() {
237 return require("./NoEmitOnErrorsPlugin");
238 },
239 get NormalModule() {
240 return require("./NormalModule");
241 },
242 get NormalModuleReplacementPlugin() {
243 return require("./NormalModuleReplacementPlugin");
244 },
245 get MultiCompiler() {
246 return require("./MultiCompiler");
247 },
248 get Parser() {
249 return require("./Parser");
250 },
251 get PrefetchPlugin() {
252 return require("./PrefetchPlugin");
253 },
254 get ProgressPlugin() {
255 return require("./ProgressPlugin");
256 },
257 get ProvidePlugin() {
258 return require("./ProvidePlugin");
259 },
260 get RuntimeGlobals() {
261 return require("./RuntimeGlobals");
262 },
263 get RuntimeModule() {
264 return require("./RuntimeModule");
265 },
266 get SingleEntryPlugin() {
267 return util.deprecate(
268 () => require("./EntryPlugin"),
269 "SingleEntryPlugin was renamed to EntryPlugin",
270 "DEP_WEBPACK_SINGLE_ENTRY_PLUGIN"
271 )();
272 },
273 get SourceMapDevToolPlugin() {
274 return require("./SourceMapDevToolPlugin");
275 },
276 get Stats() {
277 return require("./Stats");
278 },
279 get Template() {
280 return require("./Template");
281 },
282 get UsageState() {
283 return require("./ExportsInfo").UsageState;
284 },
285 get WatchIgnorePlugin() {
286 return require("./WatchIgnorePlugin");
287 },
288 get WebpackError() {
289 return require("./WebpackError");
290 },
291 get WebpackOptionsApply() {
292 return require("./WebpackOptionsApply");
293 },
294 get WebpackOptionsDefaulter() {
295 return util.deprecate(
296 () => require("./WebpackOptionsDefaulter"),
297 "webpack.WebpackOptionsDefaulter is deprecated and has been replaced by webpack.config.getNormalizedWebpackOptions and webpack.config.applyWebpackOptionsDefaults",
298 "DEP_WEBPACK_OPTIONS_DEFAULTER"
299 )();
300 },
301 // TODO webpack 6 deprecate
302 get WebpackOptionsValidationError() {
303 return require("schema-utils").ValidationError;
304 },
305 get ValidationError() {
306 return require("schema-utils").ValidationError;
307 },
308
309 cache: {
310 get MemoryCachePlugin() {
311 return require("./cache/MemoryCachePlugin");
312 }
313 },
314
315 config: {
316 get getNormalizedWebpackOptions() {
317 return require("./config/normalization").getNormalizedWebpackOptions;
318 },
319 get applyWebpackOptionsDefaults() {
320 return require("./config/defaults").applyWebpackOptionsDefaults;
321 }
322 },
323
324 dependencies: {
325 get ModuleDependency() {
326 return require("./dependencies/ModuleDependency");
327 },
328 get ConstDependency() {
329 return require("./dependencies/ConstDependency");
330 },
331 get NullDependency() {
332 return require("./dependencies/NullDependency");
333 }
334 },
335
336 ids: {
337 get ChunkModuleIdRangePlugin() {
338 return require("./ids/ChunkModuleIdRangePlugin");
339 },
340 get NaturalModuleIdsPlugin() {
341 return require("./ids/NaturalModuleIdsPlugin");
342 },
343 get OccurrenceModuleIdsPlugin() {
344 return require("./ids/OccurrenceModuleIdsPlugin");
345 },
346 get NamedModuleIdsPlugin() {
347 return require("./ids/NamedModuleIdsPlugin");
348 },
349 get DeterministicChunkIdsPlugin() {
350 return require("./ids/DeterministicChunkIdsPlugin");
351 },
352 get DeterministicModuleIdsPlugin() {
353 return require("./ids/DeterministicModuleIdsPlugin");
354 },
355 get NamedChunkIdsPlugin() {
356 return require("./ids/NamedChunkIdsPlugin");
357 },
358 get OccurrenceChunkIdsPlugin() {
359 return require("./ids/OccurrenceChunkIdsPlugin");
360 },
361 get HashedModuleIdsPlugin() {
362 return require("./ids/HashedModuleIdsPlugin");
363 }
364 },
365
366 javascript: {
367 get EnableChunkLoadingPlugin() {
368 return require("./javascript/EnableChunkLoadingPlugin");
369 },
370 get JavascriptModulesPlugin() {
371 return require("./javascript/JavascriptModulesPlugin");
372 },
373 get JavascriptParser() {
374 return require("./javascript/JavascriptParser");
375 }
376 },
377
378 optimize: {
379 get AggressiveMergingPlugin() {
380 return require("./optimize/AggressiveMergingPlugin");
381 },
382 get AggressiveSplittingPlugin() {
383 return util.deprecate(
384 () => require("./optimize/AggressiveSplittingPlugin"),
385 "AggressiveSplittingPlugin is deprecated in favor of SplitChunksPlugin",
386 "DEP_WEBPACK_AGGRESSIVE_SPLITTING_PLUGIN"
387 )();
388 },
389 get LimitChunkCountPlugin() {
390 return require("./optimize/LimitChunkCountPlugin");
391 },
392 get MinChunkSizePlugin() {
393 return require("./optimize/MinChunkSizePlugin");
394 },
395 get ModuleConcatenationPlugin() {
396 return require("./optimize/ModuleConcatenationPlugin");
397 },
398 get RealContentHashPlugin() {
399 return require("./optimize/RealContentHashPlugin");
400 },
401 get RuntimeChunkPlugin() {
402 return require("./optimize/RuntimeChunkPlugin");
403 },
404 get SideEffectsFlagPlugin() {
405 return require("./optimize/SideEffectsFlagPlugin");
406 },
407 get SplitChunksPlugin() {
408 return require("./optimize/SplitChunksPlugin");
409 }
410 },
411
412 runtime: {
413 get GetChunkFilenameRuntimeModule() {
414 return require("./runtime/GetChunkFilenameRuntimeModule");
415 },
416 get LoadScriptRuntimeModule() {
417 return require("./runtime/LoadScriptRuntimeModule");
418 }
419 },
420
421 prefetch: {
422 get ChunkPrefetchPreloadPlugin() {
423 return require("./prefetch/ChunkPrefetchPreloadPlugin");
424 }
425 },
426
427 web: {
428 get FetchCompileAsyncWasmPlugin() {
429 return require("./web/FetchCompileAsyncWasmPlugin");
430 },
431 get FetchCompileWasmPlugin() {
432 return require("./web/FetchCompileWasmPlugin");
433 },
434 get JsonpChunkLoadingRuntimeModule() {
435 return require("./web/JsonpChunkLoadingRuntimeModule");
436 },
437 get JsonpTemplatePlugin() {
438 return require("./web/JsonpTemplatePlugin");
439 }
440 },
441
442 webworker: {
443 get WebWorkerTemplatePlugin() {
444 return require("./webworker/WebWorkerTemplatePlugin");
445 }
446 },
447
448 node: {
449 get NodeEnvironmentPlugin() {
450 return require("./node/NodeEnvironmentPlugin");
451 },
452 get NodeSourcePlugin() {
453 return require("./node/NodeSourcePlugin");
454 },
455 get NodeTargetPlugin() {
456 return require("./node/NodeTargetPlugin");
457 },
458 get NodeTemplatePlugin() {
459 return require("./node/NodeTemplatePlugin");
460 },
461 get ReadFileCompileWasmPlugin() {
462 return require("./node/ReadFileCompileWasmPlugin");
463 }
464 },
465
466 electron: {
467 get ElectronTargetPlugin() {
468 return require("./electron/ElectronTargetPlugin");
469 }
470 },
471
472 wasm: {
473 get AsyncWebAssemblyModulesPlugin() {
474 return require("./wasm-async/AsyncWebAssemblyModulesPlugin");
475 }
476 },
477
478 library: {
479 get AbstractLibraryPlugin() {
480 return require("./library/AbstractLibraryPlugin");
481 },
482 get EnableLibraryPlugin() {
483 return require("./library/EnableLibraryPlugin");
484 }
485 },
486
487 container: {
488 get ContainerPlugin() {
489 return require("./container/ContainerPlugin");
490 },
491 get ContainerReferencePlugin() {
492 return require("./container/ContainerReferencePlugin");
493 },
494 get ModuleFederationPlugin() {
495 return require("./container/ModuleFederationPlugin");
496 },
497 get scope() {
498 return require("./container/options").scope;
499 }
500 },
501
502 sharing: {
503 get ConsumeSharedPlugin() {
504 return require("./sharing/ConsumeSharedPlugin");
505 },
506 get ProvideSharedPlugin() {
507 return require("./sharing/ProvideSharedPlugin");
508 },
509 get SharePlugin() {
510 return require("./sharing/SharePlugin");
511 },
512 get scope() {
513 return require("./container/options").scope;
514 }
515 },
516
517 debug: {
518 get ProfilingPlugin() {
519 return require("./debug/ProfilingPlugin");
520 }
521 },
522
523 util: {
524 get createHash() {
525 return require("./util/createHash");
526 },
527 get comparators() {
528 return require("./util/comparators");
529 },
530 get serialization() {
531 return require("./util/serialization");
532 },
533 get cleverMerge() {
534 return require("./util/cleverMerge").cachedCleverMerge;
535 },
536 get LazySet() {
537 return require("./util/LazySet");
538 }
539 },
540
541 get sources() {
542 return require("webpack-sources");
543 },
544
545 experiments: {
546 schemes: {
547 get HttpUriPlugin() {
548 return require("./schemes/HttpUriPlugin");
549 },
550 get HttpsUriPlugin() {
551 return require("./schemes/HttpsUriPlugin");
552 }
553 }
554 }
555});