UNPKG

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