UNPKG

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