UNPKG

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