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