/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const util = require("util"); const memoize = require("./util/memoize"); /** @typedef {import("../declarations/WebpackOptions").Entry} Entry */ /** @typedef {import("../declarations/WebpackOptions").EntryNormalized} EntryNormalized */ /** @typedef {import("../declarations/WebpackOptions").EntryObject} EntryObject */ /** @typedef {import("../declarations/WebpackOptions").LibraryOptions} LibraryOptions */ /** @typedef {import("../declarations/WebpackOptions").ModuleOptions} ModuleOptions */ /** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */ /** @typedef {import("../declarations/WebpackOptions").RuleSetCondition} RuleSetCondition */ /** @typedef {import("../declarations/WebpackOptions").RuleSetConditionAbsolute} RuleSetConditionAbsolute */ /** @typedef {import("../declarations/WebpackOptions").RuleSetRule} RuleSetRule */ /** @typedef {import("../declarations/WebpackOptions").RuleSetUse} RuleSetUse */ /** @typedef {import("../declarations/WebpackOptions").RuleSetUseItem} RuleSetUseItem */ /** @typedef {import("../declarations/WebpackOptions").WebpackOptions} Configuration */ /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptionsNormalized */ /** @typedef {import("../declarations/WebpackOptions").WebpackPluginFunction} WebpackPluginFunction */ /** @typedef {import("../declarations/WebpackOptions").WebpackPluginInstance} WebpackPluginInstance */ /** @typedef {import("./Compilation").Asset} Asset */ /** @typedef {import("./Compilation").AssetInfo} AssetInfo */ /** @typedef {import("./MultiStats")} MultiStats */ /** @typedef {import("./Parser").ParserState} ParserState */ /** @typedef {import("./Watching")} Watching */ /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsAsset} StatsAsset */ /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsChunk} StatsChunk */ /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsChunkGroup} StatsChunkGroup */ /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsChunkOrigin} StatsChunkOrigin */ /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsCompilation} StatsCompilation */ /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsError} StatsError */ /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsLogging} StatsLogging */ /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsLoggingEntry} StatsLoggingEntry */ /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModule} StatsModule */ /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModuleIssuer} StatsModuleIssuer */ /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModuleReason} StatsModuleReason */ /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModuleTraceDependency} StatsModuleTraceDependency */ /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModuleTraceItem} StatsModuleTraceItem */ /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsProfile} StatsProfile */ /** * @template {Function} T * @param {function(): T} factory factory function * @returns {T} function */ const lazyFunction = factory => { const fac = memoize(factory); const f = /** @type {any} */ ( (...args) => { return fac()(...args); } ); return /** @type {T} */ (f); }; /** * @template A * @template B * @param {A} obj input a * @param {B} exports input b * @returns {A & B} merged */ const mergeExports = (obj, exports) => { const descriptors = Object.getOwnPropertyDescriptors(exports); for (const name of Object.keys(descriptors)) { const descriptor = descriptors[name]; if (descriptor.get) { const fn = descriptor.get; Object.defineProperty(obj, name, { configurable: false, enumerable: true, get: memoize(fn) }); } else if (typeof descriptor.value === "object") { Object.defineProperty(obj, name, { configurable: false, enumerable: true, writable: false, value: mergeExports({}, descriptor.value) }); } else { throw new Error( "Exposed values must be either a getter or an nested object" ); } } return /** @type {A & B} */ (Object.freeze(obj)); }; const fn = lazyFunction(() => require("./webpack")); module.exports = mergeExports(fn, { get webpack() { return require("./webpack"); }, get validate() { const webpackOptionsSchemaCheck = require("../schemas/WebpackOptions.check.js"); const getRealValidate = memoize(() => { const validateSchema = require("./validateSchema"); const webpackOptionsSchema = require("../schemas/WebpackOptions.json"); return options => validateSchema(webpackOptionsSchema, options); }); return options => { if (!webpackOptionsSchemaCheck(options)) getRealValidate()(options); }; }, get validateSchema() { const validateSchema = require("./validateSchema"); return validateSchema; }, get version() { return /** @type {string} */ (require("../package.json").version); }, get cli() { return require("./cli"); }, get AutomaticPrefetchPlugin() { return require("./AutomaticPrefetchPlugin"); }, get AsyncDependenciesBlock() { return require("./AsyncDependenciesBlock"); }, get BannerPlugin() { return require("./BannerPlugin"); }, get Cache() { return require("./Cache"); }, get Chunk() { return require("./Chunk"); }, get ChunkGraph() { return require("./ChunkGraph"); }, get CleanPlugin() { return require("./CleanPlugin"); }, get Compilation() { return require("./Compilation"); }, get Compiler() { return require("./Compiler"); }, get ConcatenationScope() { return require("./ConcatenationScope"); }, get ContextExclusionPlugin() { return require("./ContextExclusionPlugin"); }, get ContextReplacementPlugin() { return require("./ContextReplacementPlugin"); }, get DefinePlugin() { return require("./DefinePlugin"); }, get DelegatedPlugin() { return require("./DelegatedPlugin"); }, get Dependency() { return require("./Dependency"); }, get DllPlugin() { return require("./DllPlugin"); }, get DllReferencePlugin() { return require("./DllReferencePlugin"); }, get DynamicEntryPlugin() { return require("./DynamicEntryPlugin"); }, get EntryOptionPlugin() { return require("./EntryOptionPlugin"); }, get EntryPlugin() { return require("./EntryPlugin"); }, get EnvironmentPlugin() { return require("./EnvironmentPlugin"); }, get EvalDevToolModulePlugin() { return require("./EvalDevToolModulePlugin"); }, get EvalSourceMapDevToolPlugin() { return require("./EvalSourceMapDevToolPlugin"); }, get ExternalModule() { return require("./ExternalModule"); }, get ExternalsPlugin() { return require("./ExternalsPlugin"); }, get Generator() { return require("./Generator"); }, get HotUpdateChunk() { return require("./HotUpdateChunk"); }, get HotModuleReplacementPlugin() { return require("./HotModuleReplacementPlugin"); }, get IgnorePlugin() { return require("./IgnorePlugin"); }, get JavascriptModulesPlugin() { return util.deprecate( () => require("./javascript/JavascriptModulesPlugin"), "webpack.JavascriptModulesPlugin has moved to webpack.javascript.JavascriptModulesPlugin", "DEP_WEBPACK_JAVASCRIPT_MODULES_PLUGIN" )(); }, get LibManifestPlugin() { return require("./LibManifestPlugin"); }, get LibraryTemplatePlugin() { return util.deprecate( () => require("./LibraryTemplatePlugin"), "webpack.LibraryTemplatePlugin is deprecated and has been replaced by compilation.outputOptions.library or compilation.addEntry + passing a library option", "DEP_WEBPACK_LIBRARY_TEMPLATE_PLUGIN" )(); }, get LoaderOptionsPlugin() { return require("./LoaderOptionsPlugin"); }, get LoaderTargetPlugin() { return require("./LoaderTargetPlugin"); }, get Module() { return require("./Module"); }, get ModuleFilenameHelpers() { return require("./ModuleFilenameHelpers"); }, get ModuleGraph() { return require("./ModuleGraph"); }, get ModuleGraphConnection() { return require("./ModuleGraphConnection"); }, get NoEmitOnErrorsPlugin() { return require("./NoEmitOnErrorsPlugin"); }, get NormalModule() { return require("./NormalModule"); }, get NormalModuleReplacementPlugin() { return require("./NormalModuleReplacementPlugin"); }, get MultiCompiler() { return require("./MultiCompiler"); }, get Parser() { return require("./Parser"); }, get PrefetchPlugin() { return require("./PrefetchPlugin"); }, get ProgressPlugin() { return require("./ProgressPlugin"); }, get ProvidePlugin() { return require("./ProvidePlugin"); }, get RuntimeGlobals() { return require("./RuntimeGlobals"); }, get RuntimeModule() { return require("./RuntimeModule"); }, get SingleEntryPlugin() { return util.deprecate( () => require("./EntryPlugin"), "SingleEntryPlugin was renamed to EntryPlugin", "DEP_WEBPACK_SINGLE_ENTRY_PLUGIN" )(); }, get SourceMapDevToolPlugin() { return require("./SourceMapDevToolPlugin"); }, get Stats() { return require("./Stats"); }, get Template() { return require("./Template"); }, get UsageState() { return require("./ExportsInfo").UsageState; }, get WatchIgnorePlugin() { return require("./WatchIgnorePlugin"); }, get WebpackError() { return require("./WebpackError"); }, get WebpackOptionsApply() { return require("./WebpackOptionsApply"); }, get WebpackOptionsDefaulter() { return util.deprecate( () => require("./WebpackOptionsDefaulter"), "webpack.WebpackOptionsDefaulter is deprecated and has been replaced by webpack.config.getNormalizedWebpackOptions and webpack.config.applyWebpackOptionsDefaults", "DEP_WEBPACK_OPTIONS_DEFAULTER" )(); }, // TODO webpack 6 deprecate get WebpackOptionsValidationError() { return require("schema-utils").ValidationError; }, get ValidationError() { return require("schema-utils").ValidationError; }, cache: { get MemoryCachePlugin() { return require("./cache/MemoryCachePlugin"); } }, config: { get getNormalizedWebpackOptions() { return require("./config/normalization").getNormalizedWebpackOptions; }, get applyWebpackOptionsDefaults() { return require("./config/defaults").applyWebpackOptionsDefaults; } }, dependencies: { get ModuleDependency() { return require("./dependencies/ModuleDependency"); }, get ConstDependency() { return require("./dependencies/ConstDependency"); }, get NullDependency() { return require("./dependencies/NullDependency"); } }, ids: { get ChunkModuleIdRangePlugin() { return require("./ids/ChunkModuleIdRangePlugin"); }, get NaturalModuleIdsPlugin() { return require("./ids/NaturalModuleIdsPlugin"); }, get OccurrenceModuleIdsPlugin() { return require("./ids/OccurrenceModuleIdsPlugin"); }, get NamedModuleIdsPlugin() { return require("./ids/NamedModuleIdsPlugin"); }, get DeterministicChunkIdsPlugin() { return require("./ids/DeterministicChunkIdsPlugin"); }, get DeterministicModuleIdsPlugin() { return require("./ids/DeterministicModuleIdsPlugin"); }, get NamedChunkIdsPlugin() { return require("./ids/NamedChunkIdsPlugin"); }, get OccurrenceChunkIdsPlugin() { return require("./ids/OccurrenceChunkIdsPlugin"); }, get HashedModuleIdsPlugin() { return require("./ids/HashedModuleIdsPlugin"); } }, javascript: { get EnableChunkLoadingPlugin() { return require("./javascript/EnableChunkLoadingPlugin"); }, get JavascriptModulesPlugin() { return require("./javascript/JavascriptModulesPlugin"); }, get JavascriptParser() { return require("./javascript/JavascriptParser"); } }, optimize: { get AggressiveMergingPlugin() { return require("./optimize/AggressiveMergingPlugin"); }, get AggressiveSplittingPlugin() { return util.deprecate( () => require("./optimize/AggressiveSplittingPlugin"), "AggressiveSplittingPlugin is deprecated in favor of SplitChunksPlugin", "DEP_WEBPACK_AGGRESSIVE_SPLITTING_PLUGIN" )(); }, get LimitChunkCountPlugin() { return require("./optimize/LimitChunkCountPlugin"); }, get MinChunkSizePlugin() { return require("./optimize/MinChunkSizePlugin"); }, get ModuleConcatenationPlugin() { return require("./optimize/ModuleConcatenationPlugin"); }, get RealContentHashPlugin() { return require("./optimize/RealContentHashPlugin"); }, get RuntimeChunkPlugin() { return require("./optimize/RuntimeChunkPlugin"); }, get SideEffectsFlagPlugin() { return require("./optimize/SideEffectsFlagPlugin"); }, get SplitChunksPlugin() { return require("./optimize/SplitChunksPlugin"); } }, runtime: { get GetChunkFilenameRuntimeModule() { return require("./runtime/GetChunkFilenameRuntimeModule"); }, get LoadScriptRuntimeModule() { return require("./runtime/LoadScriptRuntimeModule"); } }, prefetch: { get ChunkPrefetchPreloadPlugin() { return require("./prefetch/ChunkPrefetchPreloadPlugin"); } }, web: { get FetchCompileAsyncWasmPlugin() { return require("./web/FetchCompileAsyncWasmPlugin"); }, get FetchCompileWasmPlugin() { return require("./web/FetchCompileWasmPlugin"); }, get JsonpChunkLoadingRuntimeModule() { return require("./web/JsonpChunkLoadingRuntimeModule"); }, get JsonpTemplatePlugin() { return require("./web/JsonpTemplatePlugin"); } }, webworker: { get WebWorkerTemplatePlugin() { return require("./webworker/WebWorkerTemplatePlugin"); } }, node: { get NodeEnvironmentPlugin() { return require("./node/NodeEnvironmentPlugin"); }, get NodeSourcePlugin() { return require("./node/NodeSourcePlugin"); }, get NodeTargetPlugin() { return require("./node/NodeTargetPlugin"); }, get NodeTemplatePlugin() { return require("./node/NodeTemplatePlugin"); }, get ReadFileCompileWasmPlugin() { return require("./node/ReadFileCompileWasmPlugin"); } }, electron: { get ElectronTargetPlugin() { return require("./electron/ElectronTargetPlugin"); } }, wasm: { get AsyncWebAssemblyModulesPlugin() { return require("./wasm-async/AsyncWebAssemblyModulesPlugin"); } }, library: { get AbstractLibraryPlugin() { return require("./library/AbstractLibraryPlugin"); }, get EnableLibraryPlugin() { return require("./library/EnableLibraryPlugin"); } }, container: { get ContainerPlugin() { return require("./container/ContainerPlugin"); }, get ContainerReferencePlugin() { return require("./container/ContainerReferencePlugin"); }, get ModuleFederationPlugin() { return require("./container/ModuleFederationPlugin"); }, get scope() { return require("./container/options").scope; } }, sharing: { get ConsumeSharedPlugin() { return require("./sharing/ConsumeSharedPlugin"); }, get ProvideSharedPlugin() { return require("./sharing/ProvideSharedPlugin"); }, get SharePlugin() { return require("./sharing/SharePlugin"); }, get scope() { return require("./container/options").scope; } }, debug: { get ProfilingPlugin() { return require("./debug/ProfilingPlugin"); } }, util: { get createHash() { return require("./util/createHash"); }, get comparators() { return require("./util/comparators"); }, get serialization() { return require("./util/serialization"); }, get cleverMerge() { return require("./util/cleverMerge").cachedCleverMerge; }, get LazySet() { return require("./util/LazySet"); } }, get sources() { return require("webpack-sources"); }, experiments: { schemes: { get HttpUriPlugin() { return require("./schemes/HttpUriPlugin"); }, get HttpsUriPlugin() { return require("./schemes/HttpsUriPlugin"); } } } });