webpack 5.111.0 → 5.112.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/Chunk.js +3 -966
- package/lib/Compilation.js +237 -138
- package/lib/Compiler.js +23 -24
- package/lib/Dependency.js +3 -551
- package/lib/DependencyTemplate.js +3 -69
- package/lib/EntryPlugin.js +3 -68
- package/lib/Entrypoint.js +3 -121
- package/lib/ExternalsPlugin.js +3 -92
- package/lib/FileSystemInfo.js +3 -4629
- package/lib/InitFragment.js +3 -204
- package/lib/LibraryTemplatePlugin.js +3 -46
- package/lib/ModuleFilenameHelpers.js +3 -400
- package/lib/ModuleNotFoundError.js +2 -2
- package/lib/MultiCompiler.js +43 -24
- package/lib/NormalModule.js +3 -2190
- package/lib/NullFactory.js +3 -22
- package/lib/ProgressPlugin.js +3 -908
- package/lib/RawModule.js +3 -197
- package/lib/RequestShortener.js +3 -37
- package/lib/SingleEntryPlugin.js +1 -1
- package/lib/WebpackError.js +2 -2
- package/lib/asset/AssetBytesGenerator.js +15 -9
- package/lib/asset/AssetBytesParser.js +3 -3
- package/lib/asset/AssetGenerator.js +61 -38
- package/lib/asset/AssetModule.js +2 -2
- package/lib/asset/AssetModulesPlugin.js +6 -9
- package/lib/asset/AssetParser.js +3 -3
- package/lib/asset/AssetSourceGenerator.js +15 -9
- package/lib/asset/AssetSourceParser.js +3 -3
- package/lib/asset/RawDataUrlModule.js +17 -10
- package/lib/asset/WebManifestGenerator.js +7 -7
- package/lib/asset/WebManifestParser.js +5 -5
- package/lib/async-modules/AsyncModuleHelpers.js +6 -5
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +4 -3
- package/lib/async-modules/isGeneratorLowered.js +3 -3
- package/lib/bun/BunTargetPlugin.js +1 -1
- package/lib/cache/AddBuildDependenciesPlugin.js +2 -19
- package/lib/{Cache.js → cache/Cache.js} +1 -1
- package/lib/{CacheFacade.js → cache/CacheFacade.js} +5 -5
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/MemoryCachePlugin.js +6 -6
- package/lib/cache/MemoryWithGcCachePlugin.js +9 -10
- package/lib/cache/PackFileCacheStrategy.js +11 -28
- package/lib/cache/ResolverCachePlugin.js +8 -4
- package/lib/cache/getLazyHashedEtag.js +3 -5
- package/lib/cache/mergeEtags.js +1 -1
- package/lib/{OptionsApply.js → config/OptionsApply.js} +3 -3
- package/lib/{PlatformPlugin.js → config/PlatformPlugin.js} +2 -2
- package/lib/{WebpackOptionsApply.js → config/WebpackOptionsApply.js} +217 -200
- package/lib/{WebpackOptionsDefaulter.js → config/WebpackOptionsDefaulter.js} +3 -3
- package/lib/config/browserslistTargetHandler.js +3 -9
- package/lib/{cli.js → config/cli.js} +5 -158
- package/lib/config/defaults.js +192 -122
- package/lib/config/getClaimedAssetTypes.js +28 -21
- package/lib/config/normalization.js +18 -7
- package/lib/config/target.js +13 -4
- package/lib/container/ContainerEntryDependency.js +1 -1
- package/lib/container/ContainerEntryModule.js +13 -11
- package/lib/container/ContainerEntryModuleFactory.js +2 -2
- package/lib/container/ContainerExposedDependency.js +1 -1
- package/lib/container/ContainerPlugin.js +178 -5
- package/lib/container/ContainerReferencePlugin.js +75 -14
- package/lib/container/FallbackDependency.js +1 -1
- package/lib/container/FallbackItemDependency.js +1 -1
- package/lib/container/FallbackModule.js +12 -10
- package/lib/container/FallbackModuleFactory.js +2 -2
- package/lib/container/HoistContainerReferencesPlugin.js +10 -11
- package/lib/container/ModuleFederationPlugin.js +306 -7
- package/lib/container/RemoteModule.js +14 -10
- package/lib/container/RemoteRuntimeModule.js +5 -5
- package/lib/container/RemoteToExternalDependency.js +1 -1
- package/lib/container/moduleFederationHooks.js +1 -1
- package/lib/{ContextExclusionPlugin.js → context/ContextExclusionPlugin.js} +1 -1
- package/lib/{ContextModule.js → context/ContextModule.js} +50 -36
- package/lib/{ContextModuleFactory.js → context/ContextModuleFactory.js} +25 -24
- package/lib/{ContextReplacementPlugin.js → context/ContextReplacementPlugin.js} +4 -4
- package/lib/css/CssGenerator.js +57 -42
- package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
- package/lib/css/CssLoadingRuntimeModule.js +77 -44
- package/lib/css/CssModule.js +27 -29
- package/lib/css/CssModulesPlugin.js +128 -44
- package/lib/css/CssParser.js +700 -311
- package/lib/css/CssServerStylesRuntimeModule.js +3 -3
- package/lib/css/cssMinify.js +130 -54
- package/lib/css/data.js +7017 -4648
- package/lib/css/syntax-parser.js +19873 -0
- package/lib/css/syntax-printer.js +6037 -0
- package/lib/css/syntax.js +37 -17370
- package/lib/debug/ProfilingPlugin.js +55 -23
- package/lib/{DefinePlugin.js → define/DefinePlugin.js} +407 -41
- package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +25 -29
- package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +2 -2
- package/lib/deno/DenoTargetPlugin.js +1 -1
- package/lib/dependencies/ConstDependency.js +3 -120
- package/lib/dependencies/ContextElementDependency.js +5 -172
- package/lib/dependencies/NullDependency.js +3 -37
- package/lib/dependencies/{AMDDefineDependency.js → amd/AMDDefineDependency.js} +12 -11
- package/lib/dependencies/{AMDDefineDependencyParserPlugin.js → amd/AMDDefineDependencyParserPlugin.js} +10 -10
- package/lib/dependencies/{AMDPlugin.js → amd/AMDPlugin.js} +11 -11
- package/lib/dependencies/{AMDRequireArrayDependency.js → amd/AMDRequireArrayDependency.js} +15 -13
- package/lib/dependencies/{AMDRequireContextDependency.js → amd/AMDRequireContextDependency.js} +11 -10
- package/lib/dependencies/{AMDRequireDependenciesBlock.js → amd/AMDRequireDependenciesBlock.js} +7 -6
- package/lib/dependencies/{AMDRequireDependenciesBlockParserPlugin.js → amd/AMDRequireDependenciesBlockParserPlugin.js} +10 -10
- package/lib/dependencies/{AMDRequireDependency.js → amd/AMDRequireDependency.js} +13 -12
- package/lib/dependencies/{AMDRequireItemDependency.js → amd/AMDRequireItemDependency.js} +8 -7
- package/lib/dependencies/{AMDRuntimeModules.js → amd/AMDRuntimeModules.js} +3 -3
- package/lib/dependencies/{LocalModule.js → amd/LocalModule.js} +8 -4
- package/lib/dependencies/{LocalModuleDependency.js → amd/LocalModuleDependency.js} +17 -10
- package/lib/dependencies/{LocalModulesHelpers.js → amd/LocalModulesHelpers.js} +1 -1
- package/lib/dependencies/{RequireJsStuffPlugin.js → amd/RequireJsStuffPlugin.js} +9 -9
- package/lib/dependencies/{UnsupportedDependency.js → amd/UnsupportedDependency.js} +11 -10
- package/lib/dependencies/{CommonJsDependencyHelpers.js → commonjs/CommonJsDependencyHelpers.js} +8 -9
- package/lib/dependencies/{CommonJsExportRequireDependency.js → commonjs/CommonJsExportRequireDependency.js} +176 -44
- package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
- package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +138 -61
- package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
- package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +39 -35
- package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +13 -12
- package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +47 -35
- package/lib/dependencies/{CommonJsRequireContextDependency.js → commonjs/CommonJsRequireContextDependency.js} +15 -14
- package/lib/dependencies/{CommonJsRequireDependency.js → commonjs/CommonJsRequireDependency.js} +33 -25
- package/lib/dependencies/{CommonJsSelfReferenceDependency.js → commonjs/CommonJsSelfReferenceDependency.js} +19 -20
- package/lib/dependencies/{ModuleDecoratorDependency.js → commonjs/ModuleDecoratorDependency.js} +16 -15
- package/lib/dependencies/{RequireEnsureDependenciesBlock.js → commonjs/RequireEnsureDependenciesBlock.js} +8 -7
- package/lib/dependencies/{RequireEnsureDependenciesBlockParserPlugin.js → commonjs/RequireEnsureDependenciesBlockParserPlugin.js} +5 -5
- package/lib/dependencies/{RequireEnsureDependency.js → commonjs/RequireEnsureDependency.js} +13 -12
- package/lib/dependencies/{RequireEnsureItemDependency.js → commonjs/RequireEnsureItemDependency.js} +7 -6
- package/lib/dependencies/{RequireEnsurePlugin.js → commonjs/RequireEnsurePlugin.js} +8 -8
- package/lib/dependencies/{RequireHeaderDependency.js → commonjs/RequireHeaderDependency.js} +14 -13
- package/lib/dependencies/{RequireIncludeDependency.js → commonjs/RequireIncludeDependency.js} +13 -12
- package/lib/dependencies/{RequireIncludeDependencyParserPlugin.js → commonjs/RequireIncludeDependencyParserPlugin.js} +3 -27
- package/lib/dependencies/{RequireIncludePlugin.js → commonjs/RequireIncludePlugin.js} +4 -4
- package/lib/dependencies/{RequireResolveContextDependency.js → commonjs/RequireResolveContextDependency.js} +11 -10
- package/lib/dependencies/{RequireResolveDependency.js → commonjs/RequireResolveDependency.js} +12 -11
- package/lib/dependencies/{RequireResolveHeaderDependency.js → commonjs/RequireResolveHeaderDependency.js} +13 -12
- package/lib/dependencies/commonjs/TopLevelThisParserPlugin.js +59 -0
- package/lib/dependencies/{ContextDependency.js → context/ContextDependency.js} +15 -14
- package/lib/dependencies/{ContextDependencyHelpers.js → context/ContextDependencyHelpers.js} +34 -18
- package/lib/dependencies/{ContextDependencyTemplateAsId.js → context/ContextDependencyTemplateAsId.js} +3 -3
- package/lib/dependencies/{ContextDependencyTemplateAsRequireCall.js → context/ContextDependencyTemplateAsRequireCall.js} +3 -3
- package/lib/dependencies/context/ContextElementDependency.js +198 -0
- package/lib/dependencies/{ImportMetaContextDependency.js → context/ImportMetaContextDependency.js} +7 -6
- package/lib/dependencies/{ImportMetaContextDependencyParserPlugin.js → context/ImportMetaContextDependencyParserPlugin.js} +9 -9
- package/lib/dependencies/{ImportMetaContextPlugin.js → context/ImportMetaContextPlugin.js} +5 -5
- package/lib/dependencies/{ImportMetaGlobDependency.js → context/ImportMetaGlobDependency.js} +7 -6
- package/lib/dependencies/{ImportMetaGlobDependencyParserPlugin.js → context/ImportMetaGlobDependencyParserPlugin.js} +4 -4
- package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +9 -9
- package/lib/dependencies/{RequireContextDependency.js → context/RequireContextDependency.js} +7 -6
- package/lib/dependencies/{RequireContextDependencyParserPlugin.js → context/RequireContextDependencyParserPlugin.js} +2 -2
- package/lib/dependencies/{RequireContextPlugin.js → context/RequireContextPlugin.js} +5 -5
- package/lib/dependencies/{CachedConstDependency.js → core/CachedConstDependency.js} +12 -11
- package/lib/dependencies/core/ConstDependency.js +131 -0
- package/lib/dependencies/{ImportPhase.js → core/ImportPhase.js} +5 -4
- package/lib/dependencies/{ModuleDependency.js → core/ModuleDependency.js} +10 -7
- package/lib/dependencies/{ModuleDependencyTemplateAsId.js → core/ModuleDependencyTemplateAsId.js} +3 -3
- package/lib/dependencies/{ModuleDependencyTemplateAsRequireId.js → core/ModuleDependencyTemplateAsRequireId.js} +2 -2
- package/lib/dependencies/{ModuleInitFragmentDependency.js → core/ModuleInitFragmentDependency.js} +10 -9
- package/lib/dependencies/core/NullDependency.js +44 -0
- package/lib/dependencies/{RuntimeRequirementsDependency.js → core/RuntimeRequirementsDependency.js} +10 -9
- package/lib/dependencies/{StaticExportsDependency.js → core/StaticExportsDependency.js} +15 -8
- package/lib/dependencies/{CssIcssExportDependency.js → css/CssIcssExportDependency.js} +375 -100
- package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +26 -22
- package/lib/dependencies/{CssIcssSymbolDependency.js → css/CssIcssSymbolDependency.js} +13 -12
- package/lib/dependencies/{CssImportDependency.js → css/CssImportDependency.js} +15 -11
- package/lib/dependencies/{CssUrlDependency.js → css/CssUrlDependency.js} +26 -21
- package/lib/dependencies/{CreateRequireParserPlugin.js → esm/CreateRequireParserPlugin.js} +9 -9
- package/lib/dependencies/{HarmonyAcceptDependency.js → esm/ESMAcceptDependency.js} +41 -38
- package/lib/dependencies/esm/ESMAcceptImportDependency.js +39 -0
- package/lib/dependencies/{HarmonyCompatibilityDependency.js → esm/ESMCompatibilityDependency.js} +40 -41
- package/lib/dependencies/{HarmonyDetectionParserPlugin.js → esm/ESMDetectionParserPlugin.js} +22 -21
- package/lib/dependencies/{HarmonyEvaluatedImportSpecifierDependency.js → esm/ESMEvaluatedImportSpecifierDependency.js} +33 -30
- package/lib/dependencies/{HarmonyExportDependencyParserPlugin.js → esm/ESMExportDependencyParserPlugin.js} +62 -93
- package/lib/dependencies/{HarmonyExportExpressionDependency.js → esm/ESMExportExpressionDependency.js} +83 -49
- package/lib/dependencies/{HarmonyExportHeaderDependency.js → esm/ESMExportHeaderDependency.js} +17 -15
- package/lib/dependencies/esm/ESMExportImportedSideEffectDependency.js +37 -0
- package/lib/dependencies/{HarmonyExportImportedSpecifierDependency.js → esm/ESMExportImportedSpecifierDependency.js} +136 -122
- package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +68 -43
- package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +68 -65
- package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -4
- package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
- package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +74 -71
- package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +199 -97
- package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +26 -29
- package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +86 -43
- package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +110 -61
- package/lib/dependencies/esm/ESMModulesPlugin.js +207 -0
- package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
- package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -11
- package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +2 -2
- package/lib/{util → dependencies/helpers}/chainedImports.js +8 -9
- package/lib/dependencies/{processExportInfo.js → helpers/processExportInfo.js} +4 -4
- package/lib/{util → dependencies/helpers}/traverseDestructuringAssignmentProperties.js +1 -1
- package/lib/dependencies/{ImportMetaHotAcceptDependency.js → hmr/ImportMetaHotAcceptDependency.js} +8 -7
- package/lib/dependencies/{ImportMetaHotDeclineDependency.js → hmr/ImportMetaHotDeclineDependency.js} +8 -7
- package/lib/dependencies/{ModuleHotAcceptDependency.js → hmr/ModuleHotAcceptDependency.js} +8 -7
- package/lib/dependencies/{ModuleHotDeclineDependency.js → hmr/ModuleHotDeclineDependency.js} +8 -7
- package/lib/dependencies/{HtmlEntryDependency.js → html/HtmlEntryDependency.js} +125 -243
- package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -12
- package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +72 -23
- package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +53 -19
- package/lib/dependencies/{HtmlSourceDependency.js → html/HtmlSourceDependency.js} +23 -16
- package/lib/dependencies/{ImportContextDependency.js → import/ImportContextDependency.js} +24 -10
- package/lib/dependencies/{ImportDependency.js → import/ImportDependency.js} +26 -18
- package/lib/dependencies/{ImportEagerDependency.js → import/ImportEagerDependency.js} +18 -10
- package/lib/dependencies/{ImportParserPlugin.js → import/ImportParserPlugin.js} +20 -20
- package/lib/dependencies/{ImportPlugin.js → import/ImportPlugin.js} +4 -4
- package/lib/dependencies/{ImportWeakDependency.js → import/ImportWeakDependency.js} +18 -10
- package/lib/dependencies/{importOptionsCheck.js → import/importOptionsCheck.js} +2 -2
- package/lib/dependencies/{BuildTimeConstDependency.js → import-meta/BuildTimeConstDependency.js} +12 -11
- package/lib/dependencies/{ImportMetaMainDependency.js → import-meta/ImportMetaMainDependency.js} +12 -11
- package/lib/dependencies/{ImportMetaPlugin.js → import-meta/ImportMetaPlugin.js} +126 -107
- package/lib/dependencies/{SystemPlugin.js → system/SystemPlugin.js} +11 -38
- package/lib/dependencies/{SystemRuntimeModule.js → system/SystemRuntimeModule.js} +3 -3
- package/lib/dependencies/{ImportMetaResolveDependency.js → url/ImportMetaResolveDependency.js} +9 -8
- package/lib/dependencies/{URLContextDependency.js → url/URLContextDependency.js} +11 -10
- package/lib/dependencies/{URLDependency.js → url/URLDependency.js} +34 -25
- package/lib/{url → dependencies/url}/URLParserPlugin.js +22 -26
- package/lib/dependencies/{URLPlugin.js → url/URLPlugin.js} +6 -7
- package/lib/dependencies/{WebAssemblyExportImportedDependency.js → wasm/WebAssemblyExportImportedDependency.js} +18 -11
- package/lib/dependencies/{WebAssemblyImportDependency.js → wasm/WebAssemblyImportDependency.js} +19 -12
- package/lib/dependencies/{CreateScriptUrlDependency.js → worker/CreateScriptUrlDependency.js} +12 -11
- package/lib/dependencies/{WorkerAndWorkletPlugin.js → worker/WorkerAndWorkletPlugin.js} +46 -54
- package/lib/dependencies/{WorkerDependency.js → worker/WorkerDependency.js} +28 -20
- package/lib/dependencies/{WorkletDependency.js → worker/WorkletDependency.js} +25 -27
- package/lib/{EvalDevToolModulePlugin.js → devtool/EvalDevToolModulePlugin.js} +20 -6
- package/lib/{EvalSourceMapDevToolPlugin.js → devtool/EvalSourceMapDevToolPlugin.js} +32 -24
- package/lib/devtool/ModuleFilenameHelpers.js +413 -0
- package/lib/{SourceMapDevToolModuleOptionsPlugin.js → devtool/SourceMapDevToolModuleOptionsPlugin.js} +10 -3
- package/lib/{SourceMapDevToolPlugin.js → devtool/SourceMapDevToolPlugin.js} +207 -129
- package/lib/{util → devtool}/generateDebugId.js +1 -1
- package/lib/{IgnoreWarningsPlugin.js → diagnostics/IgnoreWarningsPlugin.js} +2 -2
- package/lib/{NoEmitOnErrorsPlugin.js → diagnostics/NoEmitOnErrorsPlugin.js} +1 -1
- package/lib/diagnostics/WarnCaseSensitiveModulesPlugin.js +64 -0
- package/lib/{WarnDeprecatedOptionPlugin.js → diagnostics/WarnDeprecatedOptionPlugin.js} +2 -22
- package/lib/diagnostics/WarnNoModeSetPlugin.js +27 -0
- package/lib/dll/DelegatedModule.js +20 -18
- package/lib/dll/DelegatedModuleFactoryPlugin.js +2 -2
- package/lib/dll/DelegatedPlugin.js +1 -1
- package/lib/{dependencies → dll}/DelegatedSourceDependency.js +5 -4
- package/lib/{dependencies → dll}/DllEntryDependency.js +6 -5
- package/lib/dll/DllEntryPlugin.js +3 -3
- package/lib/dll/DllModule.js +11 -9
- package/lib/dll/DllModuleFactory.js +3 -3
- package/lib/dll/DllPlugin.js +18 -6
- package/lib/dll/DllReferencePlugin.js +102 -26
- package/lib/dll/LibManifestPlugin.js +9 -7
- package/lib/electron/ElectronTargetPlugin.js +2 -2
- package/lib/{DynamicEntryPlugin.js → entry/DynamicEntryPlugin.js} +3 -3
- package/lib/{dependencies → entry}/EntryDependency.js +11 -2
- package/lib/{EntryOptionPlugin.js → entry/EntryOptionPlugin.js} +6 -6
- package/lib/entry/EntryPlugin.js +75 -0
- package/lib/{performance → errors}/AssetsOverSizeLimitWarning.js +2 -2
- package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/{WarnCaseSensitiveModulesPlugin.js → errors/CaseSensitiveModulesWarning.js} +4 -56
- package/lib/errors/ChunkRenderError.js +1 -1
- package/lib/errors/CodeGenerationError.js +1 -1
- package/lib/errors/CommentCompilationWarning.js +1 -1
- package/lib/errors/ConflictingEntryExportsWarning.js +38 -0
- package/lib/{dependencies → errors}/CriticalDependencyWarning.js +4 -3
- package/lib/errors/DeprecatedOptionWarning.js +30 -0
- package/lib/errors/DllManifestError.js +26 -0
- package/lib/{performance → errors}/DuplicatePackagesWarning.js +6 -6
- package/lib/{dependencies/HarmonyLinkingError.js → errors/ESMLinkingError.js} +4 -4
- package/lib/{performance → errors}/EntrypointsOverSizeLimitWarning.js +2 -2
- package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
- package/lib/errors/ErrorHelpers.js +222 -0
- package/lib/errors/ExternalStarReexportError.js +2 -2
- package/lib/{library → errors}/FalseIIFEUmdWarning.js +1 -1
- package/lib/errors/HookWebpackError.js +6 -5
- package/lib/errors/IgnoreErrorModuleFactory.js +3 -3
- package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
- package/lib/{optimize → errors}/MinMaxSizeWarning.js +1 -1
- package/lib/errors/ModuleBuildError.js +1 -1
- package/lib/errors/ModuleDependencyError.js +2 -2
- package/lib/errors/ModuleDependencyWarning.js +2 -2
- package/lib/errors/ModuleError.js +1 -1
- package/lib/errors/ModuleHashingError.js +1 -1
- package/lib/errors/ModuleNotFoundError.js +3 -3
- package/lib/errors/ModuleParseError.js +1 -1
- package/lib/errors/ModuleRestoreError.js +1 -1
- package/lib/errors/ModuleStoreError.js +1 -1
- package/lib/errors/ModuleWarning.js +1 -1
- package/lib/{performance → errors}/NoAsyncChunksWarning.js +1 -1
- package/lib/{WarnNoModeSetPlugin.js → errors/NoModeWarning.js} +2 -19
- package/lib/errors/NodeStuffInWebError.js +7 -2
- package/lib/errors/PathVariableError.js +31 -0
- package/lib/errors/RequireIncludeDeprecationWarning.js +40 -0
- package/lib/{performance → errors}/RuntimeInLargeChunkWarning.js +1 -1
- package/lib/errors/RuntimeModuleGenerationError.js +51 -0
- package/lib/errors/SSRManifestAutoPublicPathWarning.js +24 -0
- package/lib/errors/SystemImportDeprecationWarning.js +43 -0
- package/lib/errors/UnmergeableEntryExportsError.js +34 -0
- package/lib/errors/UnsupportedFeatureWarning.js +1 -1
- package/lib/{wasm-sync → errors}/UnsupportedWebAssemblyFeatureError.js +1 -1
- package/lib/{wasm-sync → errors}/WebAssemblyInInitialChunkError.js +7 -5
- package/lib/errors/WebpackError.js +12 -3
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +19 -19
- package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
- package/lib/{ExternalModule.js → externals/ExternalModule.js} +85 -63
- package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +41 -39
- package/lib/externals/ExternalsPlugin.js +99 -0
- package/lib/fs/FileSystemInfo.js +4642 -0
- package/lib/{util → fs}/fs.js +22 -9
- package/lib/{AsyncDependenciesBlock.js → graph/AsyncDependenciesBlock.js} +27 -4
- package/lib/graph/Chunk.js +985 -0
- package/lib/{ChunkGraph.js → graph/ChunkGraph.js} +187 -80
- package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
- package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
- package/lib/graph/Dependency.js +628 -0
- package/lib/graph/Entrypoint.js +136 -0
- package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +151 -99
- package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
- package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +36 -39
- package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
- package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +163 -72
- package/lib/{util → graph}/findGraphRoots.js +20 -21
- package/lib/graph/isDependencyKind.js +23 -0
- package/lib/hmr/HotModuleReplacement.runtime.js +2 -2
- package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +49 -47
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +10 -8
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
- package/lib/hmr/LazyCompilationPlugin.js +34 -26
- package/lib/html/HtmlGenerator.js +168 -125
- package/lib/html/HtmlModule.js +6 -2
- package/lib/html/HtmlModulesPlugin.js +260 -215
- package/lib/html/HtmlParser.js +598 -292
- package/lib/html/builtinEmbeddedRenderer.js +60 -13
- package/lib/html/data.js +23 -1
- package/lib/html/htmlMinify.js +120 -51
- package/lib/html/syntax-parser.js +15796 -0
- package/lib/html/syntax-printer.js +1034 -0
- package/lib/html/syntax.js +37 -14062
- package/lib/html/xmlMinify.js +67 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
- package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
- package/lib/ids/HashedModuleIdsPlugin.js +31 -4
- package/lib/ids/IdHelpers.js +4 -4
- package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -5
- package/lib/ids/OccurrenceModuleIdsPlugin.js +6 -5
- package/lib/{RecordIdsPlugin.js → ids/RecordIdsPlugin.js} +5 -5
- package/lib/ids/SyncModuleIdsPlugin.js +3 -3
- package/lib/{util → ids}/numberHash.js +1 -1
- package/lib/index.js +348 -99
- package/lib/{APIPlugin.js → javascript/APIPlugin.js} +29 -30
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
- package/lib/javascript/BasicEvaluatedExpression.js +4 -4
- package/lib/javascript/ChunkHelpers.js +64 -4
- package/lib/javascript/CommonJsChunkFormatPlugin.js +4 -7
- package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +10 -11
- package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +90 -139
- package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
- package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
- package/lib/javascript/JavascriptGenerator.js +25 -18
- package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +7 -7
- package/lib/javascript/JavascriptModule.js +4 -3
- package/lib/javascript/JavascriptModulesPlugin.js +458 -256
- package/lib/javascript/JavascriptParser.js +916 -287
- package/lib/javascript/JavascriptParserHelpers.js +1 -1
- package/lib/javascript/MergedEntryExports.js +196 -0
- package/lib/javascript/ScopeAnalyzer.js +3840 -5
- package/lib/javascript/StartupHelpers.js +6 -6
- package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +12 -15
- package/lib/{dependencies → javascript}/WebpackIsIncludedDependency.js +10 -9
- package/lib/{WebpackIsIncludedPlugin.js → javascript/WebpackIsIncludedPlugin.js} +8 -8
- package/lib/javascript/data.js +533 -122
- package/lib/javascript/jsMinify.js +272 -0
- package/lib/javascript/regexp.js +67 -32
- package/lib/javascript/syntax-parser.js +18561 -0
- package/lib/javascript/syntax-printer-data.js +933 -0
- package/lib/javascript/syntax-printer.js +47106 -0
- package/lib/javascript/syntax.js +20 -10946
- package/lib/json/JsonData.js +1 -1
- package/lib/{dependencies → json}/JsonExportsDependency.js +8 -7
- package/lib/json/JsonGenerator.js +17 -11
- package/lib/json/JsonModule.js +2 -2
- package/lib/json/JsonModulesPlugin.js +1 -1
- package/lib/json/JsonParser.js +5 -5
- package/lib/json/jsonMinify.js +69 -0
- package/lib/library/AbstractLibraryPlugin.js +28 -15
- package/lib/library/AmdLibraryPlugin.js +4 -4
- package/lib/library/AssignLibraryPlugin.js +27 -11
- package/lib/library/EnableLibraryPlugin.js +1 -1
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
- package/lib/library/JsonpLibraryPlugin.js +1 -1
- package/lib/library/LibraryTemplatePlugin.js +53 -0
- package/lib/library/ModuleLibraryPlugin.js +207 -285
- package/lib/library/SystemLibraryPlugin.js +6 -8
- package/lib/library/UmdLibraryPlugin.js +3 -4
- package/lib/{dependencies → loaders}/LoaderDependency.js +3 -3
- package/lib/{dependencies → loaders}/LoaderImportDependency.js +9 -3
- package/lib/{LoaderOptionsPlugin.js → loaders/LoaderOptionsPlugin.js} +30 -12
- package/lib/{dependencies → loaders}/LoaderPlugin.js +27 -2
- package/lib/loaders/LoaderRunner.js +160 -22
- package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
- package/lib/logging/Logger.js +7 -9
- package/lib/logging/ProgressPlugin.js +957 -0
- package/lib/{CodeGenerationResults.js → module/CodeGenerationResults.js} +7 -7
- package/lib/{Generator.js → module/Generator.js} +38 -14
- package/lib/{Module.js → module/Module.js} +122 -54
- package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
- package/lib/module/NormalModule.js +2348 -0
- package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +53 -54
- package/lib/module/NullFactory.js +29 -0
- package/lib/{Parser.js → module/Parser.js} +3 -3
- package/lib/module/RawModule.js +208 -0
- package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
- package/lib/{util → module}/extractSourceMap.js +2 -2
- package/lib/{util → module}/findCaseMismatch.js +2 -2
- package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
- package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
- package/lib/{dependencies → node}/ExternalModuleInitFragment.js +6 -5
- package/lib/{dependencies → node}/ExternalModuleInitFragmentDependency.js +14 -9
- package/lib/node/NodeEnvironmentPlugin.js +11 -1
- package/lib/{NodeStuffPlugin.js → node/NodeStuffPlugin.js} +17 -17
- package/lib/node/NodeTargetPlugin.js +1 -1
- package/lib/node/NodeWatchFileSystem.js +61 -15
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +7 -7
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +9 -7
- package/lib/node/ReadFileCompileWasmPlugin.js +7 -5
- package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
- package/lib/node/nodeConsole.js +2 -4
- package/lib/optimize/AggressiveMergingPlugin.js +5 -7
- package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
- package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +13 -13
- package/lib/optimize/ConcatenatedModule.js +305 -309
- package/lib/{ConcatenationScope.js → optimize/ConcatenationScope.js} +39 -6
- package/lib/optimize/ConstExportsPlugin.js +7 -7
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
- package/lib/{FlagAllModulesAsUsedPlugin.js → optimize/FlagAllModulesAsUsedPlugin.js} +3 -3
- package/lib/{FlagDependencyExportsPlugin.js → optimize/FlagDependencyExportsPlugin.js} +25 -30
- package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +26 -30
- package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
- package/lib/optimize/FlagIncludedChunksPlugin.js +5 -13
- package/lib/optimize/InlineExports.js +11 -3
- package/lib/optimize/InnerGraph.js +5 -13
- package/lib/optimize/InnerGraphPlugin.js +17 -23
- package/lib/optimize/LazyBarrels.js +584 -0
- package/lib/{util → optimize}/LazyBucketSortedSet.js +2 -2
- package/lib/optimize/LimitChunkCountPlugin.js +21 -15
- package/lib/optimize/MangleExportsPlugin.js +8 -9
- package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -6
- package/lib/optimize/MinChunkSizePlugin.js +9 -6
- package/lib/optimize/ModuleConcatenationPlugin.js +23 -16
- package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
- package/lib/optimize/RealContentHashPlugin.js +16 -7
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
- package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
- package/lib/optimize/SideEffectsFlagPlugin.js +25 -37
- package/lib/optimize/SplitChunksPlugin.js +715 -159
- package/lib/{util → optimize}/TupleQueue.js +9 -9
- package/lib/optimize/chunkSetIntersections.js +437 -0
- package/lib/{util → optimize}/deterministicGrouping.js +25 -30
- package/lib/{BannerPlugin.js → output/BannerPlugin.js} +82 -14
- package/lib/{CleanPlugin.js → output/CleanPlugin.js} +66 -24
- package/lib/{CopyPlugin.js → output/CopyPlugin.js} +142 -67
- package/lib/{ManifestPlugin.js → output/ManifestPlugin.js} +91 -17
- package/lib/output/SSRManifestPlugin.js +349 -0
- package/lib/performance/AnalyzableBailoutsPlugin.js +1 -1
- package/lib/performance/AsyncChunkWaterfallsPlugin.js +1 -1
- package/lib/performance/BroadContextsPlugin.js +4 -4
- package/lib/performance/CacheEffectivenessPlugin.js +5 -7
- package/lib/performance/ConflictingResourceHintsPlugin.js +1 -1
- package/lib/performance/DuplicateModulesPlugin.js +3 -4
- package/lib/performance/DuplicatePackagesPlugin.js +3 -3
- package/lib/performance/DynamicExportsPlugin.js +2 -2
- package/lib/performance/EvalUsagePlugin.js +3 -3
- package/lib/performance/HotspotsPlugin.js +11 -10
- package/lib/performance/LargeModulesPlugin.js +2 -3
- package/lib/performance/LegacyJavascriptPlugin.js +1 -2
- package/lib/performance/MissingSideEffectsPlugin.js +2 -3
- package/lib/performance/MissingSourceMapsPlugin.js +5 -6
- package/lib/performance/PureAnnotationsPlugin.js +3 -3
- package/lib/performance/RedundantDynamicImportsPlugin.js +6 -8
- package/lib/performance/ScopeHoistingBailoutsPlugin.js +2 -2
- package/lib/performance/SizeLimitsPlugin.js +13 -16
- package/lib/performance/TopLevelThisPlugin.js +8 -7
- package/lib/performance/UnsplitVendorsPlugin.js +1 -2
- package/lib/performance/UnusedAliasesPlugin.js +6 -7
- package/lib/performance/UnusedAssetsPlugin.js +5 -5
- package/lib/performance/UnusedDefinesPlugin.js +2 -2
- package/lib/performance/UnusedExternalsPlugin.js +3 -4
- package/lib/performance/UnusedFederationPlugin.js +2 -4
- package/lib/performance/UnusedModulesPlugin.js +5 -4
- package/lib/performance/getModuleSize.js +1 -1
- package/lib/performance/hasOnlyUnusedExports.js +4 -4
- package/lib/performance/isOnlyReexported.js +7 -6
- package/lib/{AutomaticPrefetchPlugin.js → prefetch/AutomaticPrefetchPlugin.js} +4 -5
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +7 -9
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +4 -4
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -4
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -4
- package/lib/{dependencies → prefetch}/PrefetchDependency.js +1 -1
- package/lib/{PrefetchPlugin.js → prefetch/PrefetchPlugin.js} +2 -2
- package/lib/prefetch/ResourceHintPlugin.js +82 -65
- package/lib/prefetch/ResourceHintRuntimeModule.js +3 -3
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -13
- package/lib/prefetch/parseResourceHintOptions.js +4 -3
- package/lib/{ProvidePlugin.js → provide/ProvidePlugin.js} +7 -7
- package/lib/{dependencies → provide}/ProvidedDependency.js +14 -13
- package/lib/{IgnorePlugin.js → resolve/IgnorePlugin.js} +30 -13
- package/lib/{NormalModuleReplacementPlugin.js → resolve/NormalModuleReplacementPlugin.js} +4 -4
- package/lib/{ResolverFactory.js → resolve/ResolverFactory.js} +18 -5
- package/lib/resolve/getResolveOptionsKey.js +59 -0
- package/lib/rules/RuleSetCompiler.js +27 -46
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
- package/lib/runtime/AsyncModuleRuntimeModule.js +10 -9
- package/lib/runtime/AutoPublicPathRuntimeModule.js +5 -5
- package/lib/runtime/BaseUriRuntimeModule.js +3 -3
- package/lib/runtime/ChunkNameRuntimeModule.js +2 -2
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -2
- package/lib/runtime/CompatRuntimeModule.js +4 -4
- package/lib/runtime/ConcatenationWrapRuntimeModule.js +2 -2
- package/lib/runtime/ConstructRequireRuntimeModule.js +2 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/CreateScriptRuntimeModule.js +2 -2
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +2 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -6
- package/lib/runtime/EnsureChunkRuntimeModule.js +4 -4
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +9 -10
- package/lib/runtime/GetFullHashRuntimeModule.js +2 -2
- package/lib/runtime/GetMainFilenameRuntimeModule.js +4 -4
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +3 -3
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +3 -3
- package/lib/runtime/GlobalRuntimeModule.js +5 -7
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +3 -3
- package/lib/runtime/HelperRuntimeModule.js +16 -1
- package/lib/runtime/LoadScriptRuntimeModule.js +3 -3
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +135 -102
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/NonceRuntimeModule.js +2 -2
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
- package/lib/runtime/PublicPathRuntimeModule.js +2 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +2 -2
- package/lib/{RuntimeGlobals.js → runtime/RuntimeGlobals.js} +18 -1
- package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
- package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
- package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +48 -50
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +2 -2
- package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +5 -5
- package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -3
- package/lib/runtime/SystemContextRuntimeModule.js +2 -2
- package/lib/runtime/ToBinaryRuntimeModule.js +3 -3
- package/lib/runtime/WorkerRuntimeModule.js +1 -1
- package/lib/runtime/baseUri.js +1 -1
- package/lib/schemes/DataUriPlugin.js +4 -7
- package/lib/schemes/HttpUriPlugin.js +67 -11
- package/lib/schemes/VirtualUrlPlugin.js +50 -16
- package/lib/serialization/AggregateErrorSerializer.js +2 -2
- package/lib/serialization/BinaryMiddleware.js +9 -9
- package/lib/serialization/FileMiddleware.js +19 -19
- package/lib/serialization/ObjectMiddleware.js +77 -49
- package/lib/serialization/SerializerMiddleware.js +2 -2
- package/lib/serialization/SingleItemMiddleware.js +4 -2
- package/lib/sharing/ConsumeSharedFallbackDependency.js +9 -1
- package/lib/sharing/ConsumeSharedModule.js +18 -14
- package/lib/sharing/ConsumeSharedPlugin.js +148 -42
- package/lib/sharing/ConsumeSharedRuntimeModule.js +8 -8
- package/lib/sharing/ProvideForSharedDependency.js +9 -1
- package/lib/sharing/ProvideSharedDependency.js +1 -1
- package/lib/sharing/ProvideSharedModule.js +11 -9
- package/lib/sharing/ProvideSharedModuleFactory.js +2 -2
- package/lib/sharing/ProvideSharedPlugin.js +111 -20
- package/lib/sharing/SharePlugin.js +102 -9
- package/lib/sharing/ShareRuntimeModule.js +6 -6
- package/lib/sharing/resolveMatchedConfigs.js +1 -1
- package/lib/{util → sharing}/semver.js +19 -19
- package/lib/sharing/utils.js +59 -2
- package/lib/stats/DefaultStatsFactoryPlugin.js +25 -23
- package/lib/stats/DefaultStatsPresetPlugin.js +1 -1
- package/lib/stats/DefaultStatsPrinterPlugin.js +3 -3
- package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
- package/lib/{Stats.js → stats/Stats.js} +4 -4
- package/lib/stats/StatsFactory.js +14 -13
- package/lib/{ChunkTemplate.js → template/ChunkTemplate.js} +7 -7
- package/lib/{ConditionalInitFragment.js → template/ConditionalInitFragment.js} +3 -3
- package/lib/template/DependencyTemplate.js +77 -0
- package/lib/{DependencyTemplates.js → template/DependencyTemplates.js} +9 -4
- package/lib/template/InitFragment.js +223 -0
- package/lib/{MainTemplate.js → template/MainTemplate.js} +11 -11
- package/lib/{ModuleInfoHeaderPlugin.js → template/ModuleInfoHeaderPlugin.js} +30 -8
- package/lib/{ModuleTemplate.js → template/ModuleTemplate.js} +6 -6
- package/lib/{RuntimeTemplate.js → template/RuntimeTemplate.js} +178 -106
- package/lib/{Template.js → template/Template.js} +13 -11
- package/lib/{TemplatedPathPlugin.js → template/TemplatedPathPlugin.js} +35 -82
- package/lib/typescript/TypeScriptPlugin.js +5 -6
- package/lib/util/LocConverter.js +4 -7
- package/lib/util/RequestShortener.js +44 -0
- package/lib/util/SortableSet.js +87 -22
- package/lib/util/SourceProcessor.js +364 -66
- package/lib/util/TupleSet.js +27 -27
- package/lib/util/WeakTupleMap.js +10 -12
- package/lib/util/buildDiagnostics.js +2 -2
- package/lib/util/comparators.js +10 -10
- package/lib/util/concatenate.js +32 -151
- package/lib/util/createHooksRegistry.js +1 -2
- package/lib/util/createMappings.js +111 -0
- package/lib/util/dataURL.js +96 -18
- package/lib/util/deprecation.js +1 -1
- package/lib/util/extractComments.js +118 -0
- package/lib/util/formatLocation.js +1 -1
- package/lib/util/globUtils.js +197 -16
- package/lib/util/haltVisitors.js +51 -0
- package/lib/util/handlerKeys.js +2 -2
- package/lib/util/hash/wasm-hash.js +3 -4
- package/lib/util/identifier.js +117 -1
- package/lib/util/implicitTypeLoaderFallback.js +6 -4
- package/lib/util/internalSerializables.js +295 -103
- package/lib/util/magicComment.js +12 -7
- package/lib/util/makeSerializable.js +23 -4
- package/lib/util/parseJson.js +1 -1
- package/lib/util/preloadModuleType.js +5 -2
- package/lib/util/registerExternalSerializer.js +2 -2
- package/lib/util/removeBOM.js +1 -1
- package/lib/util/runtime.js +1 -1
- package/lib/util/serialization.js +4 -1
- package/lib/util/source.js +2 -2
- package/lib/util/terminalColors.js +161 -0
- package/lib/{wasm-async → wasm}/AsyncWasmCompileRuntimeModule.js +5 -5
- package/lib/{wasm-async → wasm}/AsyncWasmLoadingRuntimeModule.js +5 -5
- package/lib/{wasm-async → wasm}/AsyncWasmModule.js +9 -5
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +11 -6
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +16 -11
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +8 -8
- package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
- package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +9 -7
- package/lib/wasm/wasmModuleFilename.js +2 -2
- package/lib/wasm-sync/SyncWasmModule.js +3 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +11 -12
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +15 -9
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +19 -16
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
- package/lib/wasm-sync/WebAssemblyParser.js +6 -6
- package/lib/wasm-sync/WebAssemblyUtils.js +8 -9
- package/lib/{MultiWatching.js → watch/MultiWatching.js} +3 -3
- package/lib/{WatchIgnorePlugin.js → watch/WatchIgnorePlugin.js} +43 -9
- package/lib/{Watching.js → watch/Watching.js} +8 -8
- package/lib/web/FetchCompileAsyncWasmPlugin.js +8 -6
- package/lib/web/FetchCompileWasmPlugin.js +6 -4
- package/lib/web/JsonpChunkLoadingPlugin.js +3 -3
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +6 -6
- package/lib/web/JsonpTemplatePlugin.js +1 -1
- package/lib/webpack.js +27 -17
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -3
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -6
- package/package.json +70 -40
- package/schemas/WebpackOptions.check.js +2 -1
- package/schemas/WebpackOptions.d.json.ts +2 -0
- package/schemas/WebpackOptions.json +294 -74
- package/schemas/plugins/BannerPlugin.check.js +2 -1
- package/schemas/plugins/BannerPlugin.json +29 -2
- package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -0
- package/schemas/plugins/HtmlParserOptions.check.js +2 -1
- package/schemas/plugins/IgnorePlugin.check.js +1 -0
- package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
- package/schemas/plugins/IgnorePlugin.json +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -0
- package/schemas/plugins/ManifestPlugin.check.js +1 -0
- package/schemas/plugins/ManifestPlugin.json +3 -3
- package/schemas/plugins/ProgressPlugin.check.js +2 -1
- package/schemas/plugins/ProgressPlugin.json +2 -7
- package/schemas/plugins/SSRManifestPlugin.check.js +7 -0
- package/schemas/plugins/SSRManifestPlugin.json +20 -0
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
- package/schemas/plugins/WatchIgnorePlugin.check.js +2 -1
- package/schemas/plugins/WatchIgnorePlugin.json +12 -3
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -0
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -0
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -0
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -0
- package/schemas/plugins/container/ContainerPlugin.check.js +2 -1
- package/schemas/plugins/container/ContainerPlugin.json +8 -0
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -0
- package/schemas/plugins/css/CssParserOptions.check.js +1 -0
- package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -0
- package/schemas/plugins/dll/DllPlugin.check.js +1 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.js +2 -1
- package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -0
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -0
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -0
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +1 -0
- package/schemas/plugins/json/JsonModulesPluginParser.check.js +1 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -0
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -0
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -0
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -0
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +1 -0
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +2 -1
- package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +2 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
- package/schemas/plugins/sharing/SharePlugin.check.js +2 -1
- package/schemas/plugins/sharing/SharePlugin.json +32 -0
- package/types.d.ts +13915 -8414
- package/lib/ErrorHelpers.js +0 -107
- package/lib/LazyBarrel.js +0 -388
- package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -39
- package/lib/dependencies/HarmonyModulesPlugin.js +0 -192
- package/lib/javascript/ChunkFormatHelpers.js +0 -71
- package/lib/javascript/grammar.js +0 -5546
- package/lib/javascript/parser.js +0 -1494
- package/lib/javascript/regexpData.js +0 -51
- package/lib/performance/getSourceModules.js +0 -22
- package/lib/util/Semaphore.js +0 -65
- package/lib/util/objectToMap.js +0 -15
- package/schemas/WebpackOptions.check.d.ts +0 -7
- package/schemas/_container.json +0 -155
- package/schemas/_sharing.json +0 -118
- package/schemas/plugins/BannerPlugin.check.d.ts +0 -7
- package/schemas/plugins/HtmlGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/HtmlParserOptions.check.d.ts +0 -7
- package/schemas/plugins/IgnorePlugin.check.d.ts +0 -7
- package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +0 -7
- package/schemas/plugins/ManifestPlugin.check.d.ts +0 -7
- package/schemas/plugins/ProgressPlugin.check.d.ts +0 -7
- package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +0 -7
- package/schemas/plugins/WatchIgnorePlugin.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetParserOptions.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/container/ContainerPlugin.check.d.ts +0 -7
- package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +0 -7
- package/schemas/plugins/container/ExternalsType.check.d.ts +0 -7
- package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssParserOptions.check.d.ts +0 -7
- package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +0 -7
- package/schemas/plugins/dll/DllPlugin.check.d.ts +0 -7
- package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +0 -7
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +0 -7
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +0 -7
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +0 -7
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +0 -7
- package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +0 -7
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +0 -7
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +0 -7
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +0 -7
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +0 -7
- package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +0 -7
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +0 -7
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +0 -7
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +0 -7
- package/schemas/plugins/sharing/SharePlugin.check.d.ts +0 -7
- /package/lib/{validateSchema.js → config/validateSchema.js} +0 -0
- /package/lib/{util → css}/conventions.js +0 -0
- /package/lib/{util → css}/topologicalSort.js +0 -0
- /package/lib/dependencies/{getFunctionExpression.js → helpers/getFunctionExpression.js} +0 -0
- /package/lib/{util → externals}/extractUrlAndGlobal.js +0 -0
- /package/lib/{util → fs}/StackedCacheMap.js +0 -0
- /package/lib/{util → javascript}/StackedMap.js +0 -0
- /package/lib/{ModuleProfile.js → module/ModuleProfile.js} +0 -0
- /package/lib/{ModuleSourceTypeConstants.js → module/ModuleSourceTypeConstants.js} +0 -0
- /package/lib/{ModuleTypeConstants.js → module/ModuleTypeConstants.js} +0 -0
- /package/lib/{OptimizationStages.js → optimize/OptimizationStages.js} +0 -0
- /package/lib/{util → optimize}/Queue.js +0 -0
- /package/lib/{util → stats}/smartGrouping.js +0 -0
|
@@ -4,23 +4,20 @@
|
|
|
4
4
|
|
|
5
5
|
"use strict";
|
|
6
6
|
|
|
7
|
-
const { basename, extname } = require("path");
|
|
8
7
|
const { pathToFileURL } = require("url");
|
|
9
8
|
const { AsyncSeriesHook, AsyncSeriesWaterfallHook } = require("tapable");
|
|
10
9
|
const { RawSource } = require("webpack-sources");
|
|
11
10
|
const Compilation = require("../Compilation");
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const { HTML_MODULE_TYPE } = require("../ModuleTypeConstants");
|
|
17
|
-
const NormalModule = require("../NormalModule");
|
|
18
|
-
const { toTemplateSourceFileName } = require("../TemplatedPathPlugin");
|
|
19
|
-
const ConstDependency = require("../dependencies/ConstDependency");
|
|
20
|
-
const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
|
|
11
|
+
const ConstDependency = require("../dependencies/core/ConstDependency");
|
|
12
|
+
const StaticExportsDependency = require("../dependencies/core/StaticExportsDependency");
|
|
13
|
+
const EntryOptionPlugin = require("../entry/EntryOptionPlugin");
|
|
14
|
+
const EntryPlugin = require("../entry/EntryPlugin");
|
|
21
15
|
const WebpackError = require("../errors/WebpackError");
|
|
22
16
|
const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
|
|
23
|
-
const
|
|
17
|
+
const { HTML_TYPE } = require("../module/ModuleSourceTypeConstants");
|
|
18
|
+
const { HTML_MODULE_TYPE } = require("../module/ModuleTypeConstants");
|
|
19
|
+
const NormalModule = require("../module/NormalModule");
|
|
20
|
+
const { toTemplateSourceFileName } = require("../template/TemplatedPathPlugin");
|
|
24
21
|
const {
|
|
25
22
|
compareModulesByFullName,
|
|
26
23
|
compareModulesByIdentifier
|
|
@@ -28,9 +25,9 @@ const {
|
|
|
28
25
|
const createHash = require("../util/createHash");
|
|
29
26
|
const createHooksRegistry = require("../util/createHooksRegistry");
|
|
30
27
|
const {
|
|
28
|
+
getRequestBaseName,
|
|
31
29
|
getUndoPath,
|
|
32
|
-
makePathsRelative
|
|
33
|
-
parseResource
|
|
30
|
+
makePathsRelative
|
|
34
31
|
} = require("../util/identifier");
|
|
35
32
|
const implicitTypeLoaderFallback = require("../util/implicitTypeLoaderFallback");
|
|
36
33
|
const lazyModule = require("../util/lazyModule");
|
|
@@ -45,7 +42,7 @@ const HtmlModule = require("./HtmlModule");
|
|
|
45
42
|
|
|
46
43
|
const getMimeTypes = memoize(() => require("../util/mimeTypes"));
|
|
47
44
|
|
|
48
|
-
const getHtmlSyntax = memoize(() => require("./syntax"));
|
|
45
|
+
const getHtmlSyntax = memoize(() => require("./syntax-parser"));
|
|
49
46
|
|
|
50
47
|
// Lazy: this plugin is applied on every build (`experiments.html` defaults on),
|
|
51
48
|
// but the HTML parser and tokenizer are only reached once HTML is in the graph.
|
|
@@ -73,14 +70,14 @@ const getCssModulesPlugin = memoize(() => require("../css/CssModulesPlugin"));
|
|
|
73
70
|
/** @typedef {import("../../declarations/WebpackOptions").OutputHtmlOptions["favicon"]} FaviconOption */
|
|
74
71
|
/** @typedef {import("../../declarations/WebpackOptions").OutputHtmlOptions["manifest"]} ManifestOption */
|
|
75
72
|
/** @typedef {Exclude<HtmlFaviconIcon, string>} FaviconIcon */
|
|
76
|
-
/** @import Chunk, { ChunkFilenameTemplate } from "../Chunk" */
|
|
77
|
-
/** @import ChunkGraph from "../ChunkGraph" */
|
|
73
|
+
/** @import Chunk, { ChunkFilenameTemplate } from "../graph/Chunk" */
|
|
74
|
+
/** @import ChunkGraph from "../graph/ChunkGraph" */
|
|
78
75
|
/** @import Compiler from "../Compiler" */
|
|
79
|
-
/** @import Module from "../Module" */
|
|
76
|
+
/** @import Module from "../module/Module" */
|
|
80
77
|
/** @typedef {import("../Compilation").EntryData} EntryData */
|
|
81
78
|
/** @import { HtmlModuleBuildInfo } from "./HtmlModule" */
|
|
82
79
|
/** @import HtmlParser from "./HtmlParser" */
|
|
83
|
-
/** @typedef {{ request: string, entryName: string, index: number, type: "script" | "script-module" | "modulepreload" | "stylesheet" | "html" | "preload" | "prefetch", css?: boolean }} HtmlEntryInfo */
|
|
80
|
+
/** @typedef {{ request: string, entryName: string, index: number, type: "script" | "script-module" | "modulepreload" | "stylesheet" | "html" | "preload" | "prefetch", css?: boolean, chunkName?: string }} HtmlEntryInfo */
|
|
84
81
|
/**
|
|
85
82
|
* What one extracted entry needs to be named. Recorded in page order once
|
|
86
83
|
* every page is built, and resolved to filenames once chunks exist.
|
|
@@ -114,6 +111,7 @@ const getCssModulesPlugin = memoize(() => require("../css/CssModulesPlugin"));
|
|
|
114
111
|
* @property {boolean=} remove set true to delete the whole element
|
|
115
112
|
*/
|
|
116
113
|
/** @typedef {{ outputName: string, html: string }} HtmlTransformTagsContext */
|
|
114
|
+
/** @typedef {{ context: string, request: string, name: string, index: number, dependOn: string[] | undefined, page: boolean }} HtmlEntrySpec */
|
|
117
115
|
|
|
118
116
|
const createCompilationHooks = () => ({
|
|
119
117
|
/**
|
|
@@ -148,10 +146,9 @@ const createCompilationHooks = () => ({
|
|
|
148
146
|
|
|
149
147
|
const PLUGIN_NAME = "HtmlModulesPlugin";
|
|
150
148
|
|
|
151
|
-
// Built-in default favicon
|
|
152
|
-
//
|
|
153
|
-
//
|
|
154
|
-
// Resolved from `__filename` (a sibling of this module) — no `path` needed.
|
|
149
|
+
// Built-in default favicon, referenced as a `file:` request so the wrapper's
|
|
150
|
+
// `<link rel="icon">` flows through the normal asset pipeline: emitted hashed,
|
|
151
|
+
// with the right publicPath and no direct IO.
|
|
155
152
|
const DEFAULT_FAVICON = new URL("./favicon.svg", pathToFileURL(__filename))
|
|
156
153
|
.href;
|
|
157
154
|
|
|
@@ -290,29 +287,19 @@ const getPageOnlyEntry = (compilation, module) => {
|
|
|
290
287
|
return configured === undefined ? entry : undefined;
|
|
291
288
|
};
|
|
292
289
|
|
|
293
|
-
/**
|
|
294
|
-
* The basename a tag's url lends to the entry it becomes, so
|
|
295
|
-
* `src="./my-script.js"` emits `my-script.js`. Undefined for an inline body.
|
|
296
|
-
* @param {string} request the tag's request
|
|
297
|
-
* @returns {string | undefined} the basename, when the url carries one
|
|
298
|
-
*/
|
|
299
|
-
const getRequestBaseName = (request) => {
|
|
300
|
-
// An inline `<script>` body is a `data:` request webpack writes itself.
|
|
301
|
-
if (request.startsWith("data:")) return undefined;
|
|
302
|
-
const { path: file } = parseResource(request);
|
|
303
|
-
return basename(file, extname(file)) || undefined;
|
|
304
|
-
};
|
|
305
|
-
|
|
306
290
|
/**
|
|
307
291
|
* Claims `base`, numbering it while something else already emits under that
|
|
308
292
|
* name, so two tags sharing a basename stay distinct.
|
|
309
293
|
* @param {string} base preferred name
|
|
310
294
|
* @param {Set<string>} taken names this kind of output already emits under
|
|
295
|
+
* @param {Map<string, number>} next per base, the number every lower one is taken up to
|
|
311
296
|
* @returns {string} the claimed name
|
|
312
297
|
*/
|
|
313
|
-
const claimName = (base, taken) => {
|
|
314
|
-
let
|
|
315
|
-
|
|
298
|
+
const claimName = (base, taken, next) => {
|
|
299
|
+
let index = next.get(base) || 0;
|
|
300
|
+
let name = index === 0 ? base : `${base}${index}`;
|
|
301
|
+
while (taken.has(name)) name = `${base}${++index}`;
|
|
302
|
+
next.set(base, index + 1);
|
|
316
303
|
taken.add(name);
|
|
317
304
|
return name;
|
|
318
305
|
};
|
|
@@ -418,7 +405,7 @@ const collectHtmlEntryRequests = (name, entries) => {
|
|
|
418
405
|
|
|
419
406
|
/**
|
|
420
407
|
* @param {string} name definition name in `schemas/WebpackOptions.json`
|
|
421
|
-
* @returns {
|
|
408
|
+
* @returns {{ oneOf: [{ $ref: string }], definitions: import("../../schemas/WebpackOptions.json")["definitions"] }} a schema referencing `#/definitions/<name>`
|
|
422
409
|
*/
|
|
423
410
|
const getSchema = (name) => {
|
|
424
411
|
const { definitions } = require("../../schemas/WebpackOptions.json");
|
|
@@ -466,16 +453,16 @@ class HtmlModulesPlugin {
|
|
|
466
453
|
* Filename template for an extracted HTML page: `output.htmlFilename` for
|
|
467
454
|
* initial chunks, `output.htmlChunkFilename` otherwise — the HTML counterpart
|
|
468
455
|
* of `CssModulesPlugin.getChunkFilenameTemplate`.
|
|
469
|
-
* @param {import("../Chunk")} chunk chunk
|
|
456
|
+
* @param {import("../graph/Chunk")} chunk chunk
|
|
470
457
|
* @param {OutputOptions} outputOptions output options
|
|
471
|
-
* @returns {import("../Chunk").ChunkFilenameTemplate} used filename template
|
|
458
|
+
* @returns {import("../graph/Chunk").ChunkFilenameTemplate} used filename template
|
|
472
459
|
*/
|
|
473
460
|
static getChunkFilenameTemplate(chunk, outputOptions) {
|
|
474
461
|
return chunk.canBeInitial()
|
|
475
|
-
? /** @type {import("../Chunk").ChunkFilenameTemplate} */ (
|
|
462
|
+
? /** @type {import("../graph/Chunk").ChunkFilenameTemplate} */ (
|
|
476
463
|
outputOptions.htmlFilename
|
|
477
464
|
)
|
|
478
|
-
: /** @type {import("../Chunk").ChunkFilenameTemplate} */ (
|
|
465
|
+
: /** @type {import("../graph/Chunk").ChunkFilenameTemplate} */ (
|
|
479
466
|
outputOptions.htmlChunkFilename
|
|
480
467
|
);
|
|
481
468
|
}
|
|
@@ -506,10 +493,9 @@ class HtmlModulesPlugin {
|
|
|
506
493
|
// several entries, so those can only be applied per emitted asset.
|
|
507
494
|
/** @type {Map<string, OutputHtmlOptions>} */
|
|
508
495
|
const htmlOptionsByEntry = new Map();
|
|
509
|
-
// SRI sentinels are emitted
|
|
510
|
-
//
|
|
511
|
-
//
|
|
512
|
-
// `.html` pages never reach the entry hook, hence the global seed.
|
|
496
|
+
// SRI sentinels are emitted before the owning entry is known, so one page
|
|
497
|
+
// asking for integrity turns them on for all and the rest drop them on emit.
|
|
498
|
+
// Authored `.html` pages never reach the entry hook, hence the global seed.
|
|
513
499
|
let anyIntegrity = isIntegrityEnabled(
|
|
514
500
|
globalHtmlOptions && globalHtmlOptions.integrity
|
|
515
501
|
);
|
|
@@ -542,13 +528,9 @@ class HtmlModulesPlugin {
|
|
|
542
528
|
return options;
|
|
543
529
|
};
|
|
544
530
|
|
|
545
|
-
// `output.html`
|
|
546
|
-
//
|
|
547
|
-
//
|
|
548
|
-
// injected first so the page loads the shared/runtime chunks before
|
|
549
|
-
// the entry's own (see `collectHtmlEntryRequests`). `crossOriginLoading`
|
|
550
|
-
// and SRI are applied to the injected tags centrally in
|
|
551
|
-
// HtmlEntryDependency.
|
|
531
|
+
// `output.html` wraps a non-HTML entry in a synthetic HTML module, so the
|
|
532
|
+
// existing pipeline injects its chunks. `dependOn` ancestors go first, so the
|
|
533
|
+
// page loads shared and runtime chunks before the entry's own.
|
|
552
534
|
EntryOptionPlugin.getHooks(compiler).entry.tap(
|
|
553
535
|
PLUGIN_NAME,
|
|
554
536
|
(context, name, desc) => {
|
|
@@ -623,24 +605,20 @@ class HtmlModulesPlugin {
|
|
|
623
605
|
/** @type {Map<string, { content: string, source: import("webpack-sources").RawSource }>} */
|
|
624
606
|
const sentinelResolvedSourceCache = new Map();
|
|
625
607
|
|
|
626
|
-
//
|
|
627
|
-
//
|
|
628
|
-
// and
|
|
629
|
-
//
|
|
630
|
-
//
|
|
631
|
-
//
|
|
632
|
-
//
|
|
633
|
-
//
|
|
634
|
-
//
|
|
635
|
-
|
|
636
|
-
// `finishMake` creates their entries without scanning the whole module
|
|
637
|
-
// graph), the stylesheet entry names (read in `afterChunks`) and the html
|
|
638
|
-
// options of every emitted page, keyed by its asset name.
|
|
639
|
-
/** @type {WeakMap<import("../Compilation"), { htmlModules: Set<Module>, stylesheetEntries: Set<string>, pendingNames: Map<string, PendingName>, htmlAssetOptions: Map<string, OutputHtmlOptions> }>} */
|
|
608
|
+
// WHY: the `script` and `script-module` groups are chained through a
|
|
609
|
+
// leader-only `dependOn`, so they share a runtime: the group's first entry
|
|
610
|
+
// owns it and every later one sets `dependOn: [leader]`. A modulepreload
|
|
611
|
+
// entry is emitted independently, with no `dependOn`, so a later script can
|
|
612
|
+
// never import it as a runtime leader — which is what keeps the "preload but
|
|
613
|
+
// don't execute" contract of `<link rel="modulepreload">` intact.
|
|
614
|
+
// Per-compilation state: the HTML modules seen during make, so `finishMake`
|
|
615
|
+
// creates their entries without scanning the module graph, plus the
|
|
616
|
+
// stylesheet entry names and each emitted page's html options.
|
|
617
|
+
/** @type {WeakMap<import("../Compilation"), { htmlModules: Set<Module>, stylesheetEntries: Set<string>, pendingNames: Map<string, PendingName>, htmlAssetOptions: Map<string, OutputHtmlOptions>, pageNames: Map<string, string> }>} */
|
|
640
618
|
const compilationState = new WeakMap();
|
|
641
619
|
/**
|
|
642
620
|
* @param {import("../Compilation")} compilation compilation
|
|
643
|
-
* @returns {{ htmlModules: Set<Module>, stylesheetEntries: Set<string>, pendingNames: Map<string, PendingName>, htmlAssetOptions: Map<string, OutputHtmlOptions> }} per-compilation state
|
|
621
|
+
* @returns {{ htmlModules: Set<Module>, stylesheetEntries: Set<string>, pendingNames: Map<string, PendingName>, htmlAssetOptions: Map<string, OutputHtmlOptions>, pageNames: Map<string, string> }} per-compilation state
|
|
644
622
|
*/
|
|
645
623
|
const getState = (compilation) => {
|
|
646
624
|
let state = compilationState.get(compilation);
|
|
@@ -649,14 +627,15 @@ class HtmlModulesPlugin {
|
|
|
649
627
|
htmlModules: new Set(),
|
|
650
628
|
stylesheetEntries: new Set(),
|
|
651
629
|
pendingNames: new Map(),
|
|
652
|
-
htmlAssetOptions: new Map()
|
|
630
|
+
htmlAssetOptions: new Map(),
|
|
631
|
+
pageNames: new Map()
|
|
653
632
|
};
|
|
654
633
|
compilationState.set(compilation, state);
|
|
655
634
|
}
|
|
656
635
|
return state;
|
|
657
636
|
};
|
|
658
637
|
compiler.hooks.finishMake.tapAsync(PLUGIN_NAME, (compilation, callback) => {
|
|
659
|
-
const { htmlModules, stylesheetEntries, pendingNames } =
|
|
638
|
+
const { htmlModules, stylesheetEntries, pendingNames, pageNames } =
|
|
660
639
|
getState(compilation);
|
|
661
640
|
/** @type {Set<string>} */
|
|
662
641
|
const extractedNames = new Set();
|
|
@@ -665,27 +644,32 @@ class HtmlModulesPlugin {
|
|
|
665
644
|
/** @type {Map<string, Module>} */
|
|
666
645
|
const linkedPages = new Map();
|
|
667
646
|
|
|
668
|
-
// Collect the entries an HTML module asks for. Only the script chains
|
|
669
|
-
//
|
|
670
|
-
//
|
|
671
|
-
|
|
672
|
-
// leader, or the chunk would mix unrelated outputs).
|
|
673
|
-
/** @type {(module: Module) => { context: string, request: string, name: string, dependOn: string[] | undefined }[]} */
|
|
647
|
+
// Collect the entries an HTML module asks for. Only the script chains share
|
|
648
|
+
// a runtime, through a leader-only `dependOn`; chaining a CSS or page entry
|
|
649
|
+
// into a JS leader would mix unrelated outputs into one chunk.
|
|
650
|
+
/** @type {(module: Module) => HtmlEntrySpec[]} */
|
|
674
651
|
const collectEntrySpecs = (module) => {
|
|
675
652
|
const { htmlEntries } = /** @type {HtmlModuleBuildInfo} */ (
|
|
676
653
|
module.buildInfo
|
|
677
654
|
);
|
|
678
655
|
if (!htmlEntries) return [];
|
|
679
656
|
const context = /** @type {string} */ (module.context);
|
|
657
|
+
/** @type {HtmlEntrySpec[]} */
|
|
680
658
|
const specs = [];
|
|
659
|
+
/** @type {Set<string>} */
|
|
660
|
+
const specNames = new Set();
|
|
681
661
|
for (const [groupKind, group] of Object.entries(htmlEntries)) {
|
|
682
662
|
const isChainGroup =
|
|
683
663
|
groupKind === "script" || groupKind === "script-module";
|
|
684
664
|
/** @type {string | undefined} */
|
|
685
665
|
let leaderName;
|
|
686
666
|
for (const entry of group) {
|
|
667
|
+
// A run's tags are added under one entry name and the first of
|
|
668
|
+
// them carries its options, so a later one re-decides nothing.
|
|
687
669
|
const dependOn =
|
|
688
|
-
isChainGroup &&
|
|
670
|
+
isChainGroup &&
|
|
671
|
+
leaderName !== undefined &&
|
|
672
|
+
!specNames.has(entry.entryName)
|
|
689
673
|
? [leaderName]
|
|
690
674
|
: undefined;
|
|
691
675
|
if (isChainGroup && leaderName === undefined) {
|
|
@@ -697,14 +681,39 @@ class HtmlModulesPlugin {
|
|
|
697
681
|
stylesheetEntries.add(entry.entryName);
|
|
698
682
|
}
|
|
699
683
|
extractedNames.add(entry.entryName);
|
|
684
|
+
specNames.add(entry.entryName);
|
|
700
685
|
specs.push({
|
|
701
686
|
context,
|
|
702
687
|
request: entry.request,
|
|
703
688
|
name: entry.entryName,
|
|
704
|
-
|
|
689
|
+
index: entry.index,
|
|
690
|
+
dependOn,
|
|
691
|
+
page: groupKind === "html"
|
|
705
692
|
});
|
|
706
693
|
}
|
|
707
694
|
}
|
|
695
|
+
// A run is collected group by group, so its members are put back into
|
|
696
|
+
// the document's order — an entry's array is executed in it.
|
|
697
|
+
/** @type {Map<string, number[]>} */
|
|
698
|
+
const positionsByName = new Map();
|
|
699
|
+
for (let position = 0; position < specs.length; position++) {
|
|
700
|
+
const { name } = specs[position];
|
|
701
|
+
const positions = positionsByName.get(name);
|
|
702
|
+
if (positions === undefined) {
|
|
703
|
+
positionsByName.set(name, [position]);
|
|
704
|
+
} else {
|
|
705
|
+
positions.push(position);
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
for (const positions of positionsByName.values()) {
|
|
709
|
+
if (positions.length < 2) continue;
|
|
710
|
+
const ordered = positions
|
|
711
|
+
.map((position) => specs[position])
|
|
712
|
+
.sort((a, b) => a.index - b.index);
|
|
713
|
+
for (let i = 0; i < positions.length; i++) {
|
|
714
|
+
specs[positions[i]] = ordered[i];
|
|
715
|
+
}
|
|
716
|
+
}
|
|
708
717
|
return specs;
|
|
709
718
|
};
|
|
710
719
|
|
|
@@ -749,13 +758,29 @@ class HtmlModulesPlugin {
|
|
|
749
758
|
}
|
|
750
759
|
}
|
|
751
760
|
ordered.sort((a, b) => a.index - b.index);
|
|
761
|
+
// An inline body has no url to be named after, so its page lends the
|
|
762
|
+
// name — and a `data:` page has none either, so its holder is walked to.
|
|
763
|
+
/** @type {string | undefined} */
|
|
764
|
+
let pageBase;
|
|
765
|
+
/** @type {Module | null | undefined} */
|
|
766
|
+
let holder = module;
|
|
767
|
+
while (pageBase === undefined && holder) {
|
|
768
|
+
const holderResource = /** @type {NormalModule} */ (holder).resource;
|
|
769
|
+
if (typeof holderResource === "string") {
|
|
770
|
+
pageBase = getRequestBaseName(holderResource);
|
|
771
|
+
}
|
|
772
|
+
holder = compilation.moduleGraph.getIssuer(holder);
|
|
773
|
+
}
|
|
752
774
|
for (const entry of ordered) {
|
|
753
|
-
//
|
|
754
|
-
//
|
|
775
|
+
// A name the page or `module.parser.html.chunkName` asked for is what
|
|
776
|
+
// the file is called too; otherwise the tag's url lends its basename.
|
|
755
777
|
const base =
|
|
756
778
|
wrapsEntry && namedEntry
|
|
757
779
|
? namedEntry.name
|
|
758
|
-
:
|
|
780
|
+
: entry.chunkName ||
|
|
781
|
+
getRequestBaseName(entry.request) ||
|
|
782
|
+
pageBase ||
|
|
783
|
+
entry.entryName;
|
|
759
784
|
pendingNames.set(entry.entryName, {
|
|
760
785
|
base,
|
|
761
786
|
jsTemplate,
|
|
@@ -764,6 +789,11 @@ class HtmlModulesPlugin {
|
|
|
764
789
|
}
|
|
765
790
|
links.sort((a, b) => a.index - b.index);
|
|
766
791
|
for (const link of links) {
|
|
792
|
+
// A linked page is named after its own path; a name the page asked
|
|
793
|
+
// for replaces that, and the link to it is rewritten either way.
|
|
794
|
+
if (link.chunkName && !contestedPageNames.has(link.entryName)) {
|
|
795
|
+
pageNames.set(link.entryName, link.chunkName);
|
|
796
|
+
}
|
|
767
797
|
const page = linkedPages.get(link.entryName);
|
|
768
798
|
if (page) recordNames(page, seen);
|
|
769
799
|
}
|
|
@@ -771,7 +801,7 @@ class HtmlModulesPlugin {
|
|
|
771
801
|
|
|
772
802
|
// Push one collected reference as a compilation entry; resolves with
|
|
773
803
|
// the built entry module.
|
|
774
|
-
/** @type {(spec:
|
|
804
|
+
/** @type {(spec: HtmlEntrySpec) => Promise<Module | null>} */
|
|
775
805
|
const addEntry = (spec) =>
|
|
776
806
|
new Promise((resolve, reject) => {
|
|
777
807
|
compilation.addEntry(
|
|
@@ -789,10 +819,32 @@ class HtmlModulesPlugin {
|
|
|
789
819
|
);
|
|
790
820
|
});
|
|
791
821
|
|
|
822
|
+
// What each page name was claimed for, so a second page asking for a
|
|
823
|
+
// taken one is refused rather than appended to the entry holding it.
|
|
824
|
+
/** @type {Map<string, string>} */
|
|
825
|
+
const pageRequests = new Map();
|
|
826
|
+
// Names a second page asked for and did not get, so it keeps the one its
|
|
827
|
+
// own path lends and emits beside the page holding the name.
|
|
828
|
+
/** @type {Set<string>} */
|
|
829
|
+
const contestedPageNames = new Set();
|
|
830
|
+
/**
|
|
831
|
+
* @param {string} name the name two things ask for
|
|
832
|
+
* @param {string} taken what holds it
|
|
833
|
+
* @param {string} request what asked for it
|
|
834
|
+
*/
|
|
835
|
+
const reportNameTaken = (name, taken, request) => {
|
|
836
|
+
contestedPageNames.add(name);
|
|
837
|
+
compilation.errors.push(
|
|
838
|
+
new WebpackError(
|
|
839
|
+
`The name "${name}" is asked for by ${request} and is already taken by ${taken}. A page is emitted as its name, so give one of them another.`
|
|
840
|
+
)
|
|
841
|
+
);
|
|
842
|
+
};
|
|
843
|
+
|
|
792
844
|
// Create one HTML module's entries. A `type: "html"` link is itself an
|
|
793
845
|
// HTML entry, so after it builds we recurse into it — the same handling
|
|
794
846
|
// every HTML entry already gets. `processed` guards diamonds and cycles.
|
|
795
|
-
/** @type {WeakSet<import("../Module")>} */
|
|
847
|
+
/** @type {WeakSet<import("../module/Module")>} */
|
|
796
848
|
const processed = new WeakSet();
|
|
797
849
|
/** @type {(module: Module) => Promise<void>} */
|
|
798
850
|
const processEntry = async (module) => {
|
|
@@ -800,18 +852,42 @@ class HtmlModulesPlugin {
|
|
|
800
852
|
processed.add(module);
|
|
801
853
|
await Promise.all(
|
|
802
854
|
collectEntrySpecs(module).map(async (spec) => {
|
|
855
|
+
if (spec.page) {
|
|
856
|
+
const claimed = pageRequests.get(spec.name);
|
|
857
|
+
// The page holding the name is already an entry of its own:
|
|
858
|
+
// a second link to it adds nothing, a second page cannot have it.
|
|
859
|
+
if (claimed !== undefined) {
|
|
860
|
+
if (claimed !== spec.request) {
|
|
861
|
+
reportNameTaken(spec.name, claimed, spec.request);
|
|
862
|
+
}
|
|
863
|
+
return;
|
|
864
|
+
}
|
|
865
|
+
pageRequests.set(spec.name, spec.request);
|
|
866
|
+
}
|
|
803
867
|
const entryModule = await addEntry(spec);
|
|
804
|
-
|
|
868
|
+
// A page entry webpack made for us holds that page alone; anything
|
|
869
|
+
// else in it named the same and would be emitted over.
|
|
870
|
+
if (spec.page) {
|
|
871
|
+
const entry = compilation.entries.get(spec.name);
|
|
872
|
+
if (entry && entry.dependencies.length !== 1) {
|
|
873
|
+
reportNameTaken(
|
|
874
|
+
spec.name,
|
|
875
|
+
`entry "${spec.name}"`,
|
|
876
|
+
spec.request
|
|
877
|
+
);
|
|
878
|
+
return;
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
if (entryModule && entryModule.is("html")) {
|
|
805
882
|
linkedPages.set(spec.name, entryModule);
|
|
806
883
|
await processEntry(entryModule);
|
|
807
884
|
}
|
|
808
885
|
})
|
|
809
886
|
);
|
|
810
887
|
};
|
|
811
|
-
// Seed with the HTML modules seen during make
|
|
812
|
-
//
|
|
813
|
-
//
|
|
814
|
-
// order, which the names must not depend on.
|
|
888
|
+
// Seed with the HTML modules seen during make; linked pages are reached by
|
|
889
|
+
// the recursion above. Sorted because they are tracked in build-completion
|
|
890
|
+
// order, which the generated names must not depend on.
|
|
815
891
|
const seeds = [...htmlModules].sort(compareModulesByIdentifier);
|
|
816
892
|
Promise.all(seeds.map(processEntry)).then(() => {
|
|
817
893
|
/** @type {Set<Module>} */
|
|
@@ -822,13 +898,12 @@ class HtmlModulesPlugin {
|
|
|
822
898
|
});
|
|
823
899
|
|
|
824
900
|
// `csp` injects a `<meta http-equiv="Content-Security-Policy">` and
|
|
825
|
-
// `integrity` resolves the SRI sentinels
|
|
826
|
-
// content is final
|
|
827
|
-
|
|
828
|
-
// `"auto"` marks implicit enablement
|
|
829
|
-
//
|
|
830
|
-
//
|
|
831
|
-
// TODO webpack 6: html defaults to `true`, drop this implicit-only fallback.
|
|
901
|
+
// `integrity` resolves the SRI sentinels, both per page once its inline
|
|
902
|
+
// content is final, so an entry's `html` can override them.
|
|
903
|
+
|
|
904
|
+
// `"auto"` marks implicit enablement, the one case where loaders win over
|
|
905
|
+
// the built-in type — see `applyExperimentsDefaults`.
|
|
906
|
+
// TODO in the next major release: html defaults to `true`, drop this implicit-only fallback.
|
|
832
907
|
const implicitlyEnabled = compiler.options.experiments.html === "auto";
|
|
833
908
|
compiler.hooks.compilation.tap(
|
|
834
909
|
PLUGIN_NAME,
|
|
@@ -845,11 +920,11 @@ class HtmlModulesPlugin {
|
|
|
845
920
|
/**
|
|
846
921
|
* Records HTML modules as they are built or restored, so `finishMake`
|
|
847
922
|
* creates their entries without scanning the whole module graph.
|
|
848
|
-
* @param {import("../Module")} module built or restored module
|
|
923
|
+
* @param {import("../module/Module")} module built or restored module
|
|
849
924
|
* @returns {void}
|
|
850
925
|
*/
|
|
851
926
|
const trackHtmlModule = (module) => {
|
|
852
|
-
if (module.
|
|
927
|
+
if (!module.is("html")) return;
|
|
853
928
|
// enabled here, not on the compilation hook: an integrity build
|
|
854
929
|
// with no html module must not load the generator
|
|
855
930
|
if (anyIntegrity) {
|
|
@@ -860,13 +935,12 @@ class HtmlModulesPlugin {
|
|
|
860
935
|
compilation.hooks.succeedModule.tap(PLUGIN_NAME, trackHtmlModule);
|
|
861
936
|
compilation.hooks.stillValidModule.tap(PLUGIN_NAME, trackHtmlModule);
|
|
862
937
|
|
|
863
|
-
// Resolve integrity and inline sentinels after `RealContentHashPlugin
|
|
864
|
-
// so final bytes are in place. Only HTML pages carry
|
|
865
|
-
|
|
866
|
-
// SRI
|
|
867
|
-
//
|
|
868
|
-
//
|
|
869
|
-
// so a CDN deployment doesn't ship no-op integrity attributes.
|
|
938
|
+
// Resolve integrity and inline sentinels after `RealContentHashPlugin`,
|
|
939
|
+
// so final bytes are in place. Only HTML pages carry them.
|
|
940
|
+
|
|
941
|
+
// SRI takes effect only on a cross-origin subresource fetched with CORS,
|
|
942
|
+
// so without `output.crossOriginLoading` the browser ignores `integrity`.
|
|
943
|
+
// Warn once, rather than let a CDN deployment ship no-op attributes.
|
|
870
944
|
if (anyIntegrity && !compilation.outputOptions.crossOriginLoading) {
|
|
871
945
|
compilation.warnings.push(
|
|
872
946
|
new WebpackError(
|
|
@@ -912,12 +986,9 @@ class HtmlModulesPlugin {
|
|
|
912
986
|
inlinedFiles
|
|
913
987
|
);
|
|
914
988
|
}
|
|
915
|
-
// `injectTags
|
|
916
|
-
//
|
|
917
|
-
//
|
|
918
|
-
// render every edit — placement, attribute rewrites, moves,
|
|
919
|
-
// removals, CSP hashes/nonce/meta — in one pass. Injected inline
|
|
920
|
-
// `<script>`/`<style>` are hashed like the page's own.
|
|
989
|
+
// `injectTags`, `transformTags` and CSP all run over a single parse:
|
|
990
|
+
// collect the tags and anchors once, let the hooks act, then render
|
|
991
|
+
// every edit in one pass.
|
|
921
992
|
const injected = await hooks.injectTags.promise([], {
|
|
922
993
|
outputName: name,
|
|
923
994
|
html: resolved
|
|
@@ -991,14 +1062,9 @@ class HtmlModulesPlugin {
|
|
|
991
1062
|
}
|
|
992
1063
|
);
|
|
993
1064
|
|
|
994
|
-
//
|
|
995
|
-
//
|
|
996
|
-
//
|
|
997
|
-
// Compilation only flows `options.filename` to `chunk.filenameTemplate`,
|
|
998
|
-
// which controls JS emit — there's no entry-level `cssFilename`.
|
|
999
|
-
// Set it ourselves after chunks are created so each stylesheet
|
|
1000
|
-
// entry emits to a distinct file derived from `output.cssFilename`
|
|
1001
|
-
// (or `output.cssChunkFilename` for non-initial CSS chunks).
|
|
1065
|
+
// There is no entry-level `cssFilename`: Compilation flows
|
|
1066
|
+
// `options.filename` only to `chunk.filenameTemplate`, which drives JS
|
|
1067
|
+
// emit. So set `chunk.cssFilenameTemplate` here, once chunks exist.
|
|
1002
1068
|
compilation.hooks.afterChunks.tap(PLUGIN_NAME, () => {
|
|
1003
1069
|
const { stylesheetEntries, pendingNames } = getState(compilation);
|
|
1004
1070
|
if (pendingNames.size === 0) return;
|
|
@@ -1008,6 +1074,10 @@ class HtmlModulesPlugin {
|
|
|
1008
1074
|
// documents' order rather than their builds'.
|
|
1009
1075
|
const takenJsNames = new Set(compilation.entries.keys());
|
|
1010
1076
|
const takenCssNames = new Set(takenJsNames);
|
|
1077
|
+
/** @type {Map<string, number>} */
|
|
1078
|
+
const nextJsIndex = new Map();
|
|
1079
|
+
/** @type {Map<string, number>} */
|
|
1080
|
+
const nextCssIndex = new Map();
|
|
1011
1081
|
// An extracted entry emits nothing under its own synthetic name, so
|
|
1012
1082
|
// that name never stands in the way of the one its tag asks for.
|
|
1013
1083
|
for (const entryName of pendingNames.keys()) {
|
|
@@ -1035,7 +1105,7 @@ class HtmlModulesPlugin {
|
|
|
1035
1105
|
chunk.filenameTemplate = getEntryTemplate(
|
|
1036
1106
|
jsTemplate,
|
|
1037
1107
|
jsExtension,
|
|
1038
|
-
claimName(base, takenJsNames)
|
|
1108
|
+
claimName(base, takenJsNames, nextJsIndex)
|
|
1039
1109
|
);
|
|
1040
1110
|
}
|
|
1041
1111
|
// A `<script src>` whose chunk carries no CSS claims no CSS name, so
|
|
@@ -1049,7 +1119,7 @@ class HtmlModulesPlugin {
|
|
|
1049
1119
|
chunk.cssFilenameTemplate = getEntryTemplate(
|
|
1050
1120
|
outputOptions.cssFilename,
|
|
1051
1121
|
".css",
|
|
1052
|
-
claimName(base, takenCssNames)
|
|
1122
|
+
claimName(base, takenCssNames, nextCssIndex)
|
|
1053
1123
|
);
|
|
1054
1124
|
}
|
|
1055
1125
|
});
|
|
@@ -1057,10 +1127,9 @@ class HtmlModulesPlugin {
|
|
|
1057
1127
|
StaticExportsDependency,
|
|
1058
1128
|
new StaticExportsDependency.Template()
|
|
1059
1129
|
);
|
|
1060
|
-
// `ConstDependency`
|
|
1061
|
-
// `
|
|
1062
|
-
//
|
|
1063
|
-
// generator runs the insertion.
|
|
1130
|
+
// HtmlParser uses `ConstDependency` to insert ` type="module"` into a
|
|
1131
|
+
// rewritten `<script>` under `output.module`; its template has to be
|
|
1132
|
+
// registered for the HTML generator to run that insertion.
|
|
1064
1133
|
compilation.dependencyTemplates.set(
|
|
1065
1134
|
ConstDependency,
|
|
1066
1135
|
new ConstDependency.Template()
|
|
@@ -1070,11 +1139,11 @@ class HtmlModulesPlugin {
|
|
|
1070
1139
|
normalModuleFactory.hooks.prepareModuleType
|
|
1071
1140
|
.for(HTML_MODULE_TYPE)
|
|
1072
1141
|
.tap(PLUGIN_NAME, () => {
|
|
1073
|
-
const HtmlSourceDependency = require("../dependencies/HtmlSourceDependency");
|
|
1074
|
-
const HtmlEntryDependency = require("../dependencies/HtmlEntryDependency");
|
|
1075
|
-
const HtmlInlineScriptDependency = require("../dependencies/HtmlInlineScriptDependency");
|
|
1076
|
-
const HtmlInlineStyleDependency = require("../dependencies/HtmlInlineStyleDependency");
|
|
1077
|
-
const HtmlInlineHtmlDependency = require("../dependencies/HtmlInlineHtmlDependency");
|
|
1142
|
+
const HtmlSourceDependency = require("../dependencies/html/HtmlSourceDependency");
|
|
1143
|
+
const HtmlEntryDependency = require("../dependencies/html/HtmlEntryDependency");
|
|
1144
|
+
const HtmlInlineScriptDependency = require("../dependencies/html/HtmlInlineScriptDependency");
|
|
1145
|
+
const HtmlInlineStyleDependency = require("../dependencies/html/HtmlInlineStyleDependency");
|
|
1146
|
+
const HtmlInlineHtmlDependency = require("../dependencies/html/HtmlInlineHtmlDependency");
|
|
1078
1147
|
|
|
1079
1148
|
compilation.dependencyFactories.set(
|
|
1080
1149
|
HtmlSourceDependency,
|
|
@@ -1092,10 +1161,9 @@ class HtmlModulesPlugin {
|
|
|
1092
1161
|
HtmlEntryDependency,
|
|
1093
1162
|
new HtmlEntryDependency.Template()
|
|
1094
1163
|
);
|
|
1095
|
-
// Inline `<script>` content
|
|
1096
|
-
//
|
|
1097
|
-
//
|
|
1098
|
-
// template rewrites the original tag to `<script src=…>`.
|
|
1164
|
+
// Inline `<script>` content becomes its own entry through a
|
|
1165
|
+
// `data:text/javascript,...` request, the same pipeline as
|
|
1166
|
+
// `<script src>`; the template then rewrites the tag.
|
|
1099
1167
|
compilation.dependencyFactories.set(
|
|
1100
1168
|
HtmlInlineScriptDependency,
|
|
1101
1169
|
normalModuleFactory
|
|
@@ -1104,11 +1172,9 @@ class HtmlModulesPlugin {
|
|
|
1104
1172
|
HtmlInlineScriptDependency,
|
|
1105
1173
|
new HtmlInlineScriptDependency.Template()
|
|
1106
1174
|
);
|
|
1107
|
-
// Inline `<style>` content
|
|
1108
|
-
//
|
|
1109
|
-
//
|
|
1110
|
-
// generation data (`css-text` channel set by CssGenerator
|
|
1111
|
-
// when `exportType` is `"text"`).
|
|
1175
|
+
// Inline `<style>` content goes through the CSS pipeline as a
|
|
1176
|
+
// `data:text/css` module; the template reads the processed text
|
|
1177
|
+
// from the `css-text` code-generation channel.
|
|
1112
1178
|
compilation.dependencyFactories.set(
|
|
1113
1179
|
HtmlInlineStyleDependency,
|
|
1114
1180
|
normalModuleFactory
|
|
@@ -1176,12 +1242,11 @@ class HtmlModulesPlugin {
|
|
|
1176
1242
|
NormalModule.getCompilationHooks(compilation).processResult.tap(
|
|
1177
1243
|
PLUGIN_NAME,
|
|
1178
1244
|
(result, module) => {
|
|
1179
|
-
if (module.
|
|
1245
|
+
if (module.is("html")) {
|
|
1180
1246
|
const [source, ...rest] = removeBOMFromResult(result);
|
|
1181
|
-
//
|
|
1182
|
-
//
|
|
1183
|
-
//
|
|
1184
|
-
// and the generator's render base in sync.
|
|
1247
|
+
// Run here, where the returned source becomes the module's stored
|
|
1248
|
+
// source, so the parser's dependency offsets and the generator's
|
|
1249
|
+
// render base stay in sync.
|
|
1185
1250
|
const parser = /** @type {HtmlParser} */ (module.parser);
|
|
1186
1251
|
|
|
1187
1252
|
return [parser.applyTemplate(source, module), ...rest];
|
|
@@ -1191,35 +1256,20 @@ class HtmlModulesPlugin {
|
|
|
1191
1256
|
}
|
|
1192
1257
|
);
|
|
1193
1258
|
|
|
1194
|
-
//
|
|
1195
|
-
//
|
|
1196
|
-
// `
|
|
1197
|
-
//
|
|
1198
|
-
//
|
|
1199
|
-
//
|
|
1200
|
-
//
|
|
1201
|
-
//
|
|
1202
|
-
//
|
|
1203
|
-
//
|
|
1204
|
-
|
|
1205
|
-
// `
|
|
1206
|
-
//
|
|
1207
|
-
//
|
|
1208
|
-
// intentionally omitted so `[name]` resolves to the HTML
|
|
1209
|
-
// source's basename (e.g. `page` for `./page.html`) rather
|
|
1210
|
-
// than the importing chunk's name (e.g. `main`). A per-module
|
|
1211
|
-
// content hash is computed from the rewritten HTML so the
|
|
1212
|
-
// template's `[contenthash]` placeholder works; the
|
|
1213
|
-
// compilation hash is also forwarded so `[fullhash]` /
|
|
1214
|
-
// `[hash]` work in user-supplied templates.
|
|
1215
|
-
|
|
1216
|
-
// Sentinel-resolved content and its content hash depend only on
|
|
1217
|
-
// the HTML-type module source — not on the chunk or output
|
|
1218
|
-
// filename — yet `renderManifest` runs per `(chunk, module)`.
|
|
1219
|
-
// Memoize so a module landing in multiple chunks resolves and
|
|
1220
|
-
// hashes its sentinels once. Scoped to this compilation because
|
|
1221
|
-
// sentinel resolution embeds chunk filenames, which change
|
|
1222
|
-
// across rebuilds; weakly keyed by source so entries release.
|
|
1259
|
+
// WHY: emit extracted `.html` files for any HTML module that opted in.
|
|
1260
|
+
// `HtmlGenerator#_shouldExtract` computes that opt-in —
|
|
1261
|
+
// `module.generator.html.extract: true` always extracts, `false` never,
|
|
1262
|
+
// and unset extracts only a compilation entry — and the iteration below
|
|
1263
|
+
// picks up only modules whose generator reported the `html` source type,
|
|
1264
|
+
// so that decision is honoured implicitly. The filename comes from
|
|
1265
|
+
// `output.htmlFilename` for initial chunks and `output.htmlChunkFilename`
|
|
1266
|
+
// otherwise, mirroring the CSS pipeline, and the path data follows the
|
|
1267
|
+
// asset-module pattern with `chunk` deliberately left out, so `[name]`
|
|
1268
|
+
// resolves to the HTML source's basename rather than the chunk's.
|
|
1269
|
+
|
|
1270
|
+
// `renderManifest` runs per `(chunk, module)`, but resolved content and
|
|
1271
|
+
// its hash depend only on the module source, so memoize. Scoped to this
|
|
1272
|
+
// compilation, since resolution embeds chunk filenames.
|
|
1223
1273
|
/** @type {WeakMap<import("webpack-sources").Source, { resolvedContent: string, contentHash: string }>} */
|
|
1224
1274
|
const resolvedSentinelHashCache = new WeakMap();
|
|
1225
1275
|
|
|
@@ -1228,28 +1278,25 @@ class HtmlModulesPlugin {
|
|
|
1228
1278
|
* content hash. Links to other pages stay sentinels, so a page's filename
|
|
1229
1279
|
* never depends on the filenames of the pages it links to.
|
|
1230
1280
|
* @param {NormalModule} module the page's html module
|
|
1231
|
-
* @param {import("../Chunk")} chunk chunk the page is emitted from
|
|
1281
|
+
* @param {import("../graph/Chunk")} chunk chunk the page is emitted from
|
|
1232
1282
|
* @returns {{ resolvedContent: string, contentHash: string, filename: string, info: import("../Compilation").AssetInfo } | undefined} the page's emit, or `undefined` when it generates no html
|
|
1233
1283
|
*/
|
|
1234
1284
|
const computePageEmit = (module, chunk) => {
|
|
1235
1285
|
const { chunkGraph, outputOptions } = compilation;
|
|
1236
1286
|
const codeGenResult =
|
|
1237
|
-
/** @type {import("../CodeGenerationResults")} */ (
|
|
1287
|
+
/** @type {import("../module/CodeGenerationResults")} */ (
|
|
1238
1288
|
compilation.codeGenerationResults
|
|
1239
1289
|
).get(module, chunk.runtime);
|
|
1240
1290
|
const placeholderSource = codeGenResult.sources.get(HTML_TYPE);
|
|
1241
1291
|
if (!placeholderSource) return undefined;
|
|
1242
1292
|
let cached = resolvedSentinelHashCache.get(placeholderSource);
|
|
1243
1293
|
if (cached === undefined) {
|
|
1244
|
-
// Resolve chunk-URL sentinels
|
|
1245
|
-
// `[contenthash]`
|
|
1246
|
-
//
|
|
1247
|
-
|
|
1248
|
-
//
|
|
1249
|
-
//
|
|
1250
|
-
// Asset URL sentinels (from `HtmlEntryDependency` resource-hint
|
|
1251
|
-
// tags) resolve here too — deferred from template.apply so it
|
|
1252
|
-
// doesn't race with asset-module codegen.
|
|
1294
|
+
// Resolve chunk-URL sentinels before hashing, so the page's
|
|
1295
|
+
// `[contenthash]` tracks the referenced chunks. An inlined chunk has
|
|
1296
|
+
// no URL, so its sentinel carries the chunk content hash instead.
|
|
1297
|
+
|
|
1298
|
+
// Asset URL sentinels resolve here rather than in `template.apply`,
|
|
1299
|
+
// which would race with asset-module codegen.
|
|
1253
1300
|
const resolvedContent = getHtmlGenerator().resolveAssetUrlSentinels(
|
|
1254
1301
|
getHtmlGenerator().embedInlineChunkHashes(
|
|
1255
1302
|
getHtmlGenerator().resolveChunkUrlSentinels(
|
|
@@ -1270,10 +1317,14 @@ class HtmlModulesPlugin {
|
|
|
1270
1317
|
resolvedSentinelHashCache.set(placeholderSource, cached);
|
|
1271
1318
|
}
|
|
1272
1319
|
const resource = module.getResource() || module.resource;
|
|
1273
|
-
//
|
|
1274
|
-
//
|
|
1320
|
+
// A page is named after its own path, unless it asked for a name; a
|
|
1321
|
+
// synthetic `output.html` entry has none, so its entry names it.
|
|
1322
|
+
const requestedPageName = chunk.name
|
|
1323
|
+
? getState(compilation).pageNames.get(chunk.name)
|
|
1324
|
+
: undefined;
|
|
1275
1325
|
const sourceFilename =
|
|
1276
|
-
|
|
1326
|
+
requestedPageName ||
|
|
1327
|
+
(resource.startsWith("data:text/html") && chunk.name
|
|
1277
1328
|
? chunk.name
|
|
1278
1329
|
: toTemplateSourceFileName(
|
|
1279
1330
|
makePathsRelative(
|
|
@@ -1282,13 +1333,13 @@ class HtmlModulesPlugin {
|
|
|
1282
1333
|
compiler.root
|
|
1283
1334
|
).replace(/^\.\//, ""),
|
|
1284
1335
|
compilation
|
|
1285
|
-
);
|
|
1336
|
+
));
|
|
1286
1337
|
const filenameTemplate = HtmlModulesPlugin.getChunkFilenameTemplate(
|
|
1287
1338
|
chunk,
|
|
1288
1339
|
outputOptions
|
|
1289
1340
|
);
|
|
1290
1341
|
const { path: filename, info } = compilation.getPathWithInfo(
|
|
1291
|
-
/** @type {import("../TemplatedPathPlugin").TemplatePath} */
|
|
1342
|
+
/** @type {import("../template/TemplatedPathPlugin").TemplatePath} */
|
|
1292
1343
|
(filenameTemplate),
|
|
1293
1344
|
{
|
|
1294
1345
|
module,
|
|
@@ -1345,11 +1396,10 @@ class HtmlModulesPlugin {
|
|
|
1345
1396
|
compilation.hooks.renderManifest.tap(
|
|
1346
1397
|
PLUGIN_NAME,
|
|
1347
1398
|
(result, { chunk }) => {
|
|
1348
|
-
// HMR's `HotUpdateChunk`s
|
|
1349
|
-
//
|
|
1350
|
-
// for them would create stray hot-update HTML files.
|
|
1399
|
+
// HMR's `HotUpdateChunk`s reach this hook but are not output chunks,
|
|
1400
|
+
// so extracting `.html` for them would emit stray hot-update files.
|
|
1351
1401
|
// `CssModulesPlugin` early-returns for the same reason.
|
|
1352
|
-
if (chunk
|
|
1402
|
+
if (chunk.isHotUpdate()) return result;
|
|
1353
1403
|
const { chunkGraph } = compilation;
|
|
1354
1404
|
const modules =
|
|
1355
1405
|
chunkGraph.getOrderedChunkModulesIterableBySourceType(
|
|
@@ -1361,12 +1411,13 @@ class HtmlModulesPlugin {
|
|
|
1361
1411
|
const outputOptions = compilation.outputOptions;
|
|
1362
1412
|
for (const module of modules) {
|
|
1363
1413
|
const normalModule = /** @type {NormalModule} */ (module);
|
|
1364
|
-
// `<iframe srcdoc>`
|
|
1365
|
-
// can write the processed markup back
|
|
1366
|
-
//
|
|
1367
|
-
//
|
|
1368
|
-
//
|
|
1369
|
-
//
|
|
1414
|
+
// WHY: an `<iframe srcdoc>` module exposes `html` only so that
|
|
1415
|
+
// `HtmlInlineHtmlDependency` can write the processed markup back
|
|
1416
|
+
// into the host attribute; it is never a standalone page.
|
|
1417
|
+
// `generator.extract: "inline"` marks it so no `.html` file is
|
|
1418
|
+
// emitted — without it they would collide on the `data:text/html`
|
|
1419
|
+
// to chunk-name path, every srcdoc module in a chunk emitting
|
|
1420
|
+
// `<chunk>.html`. An O(1) flag check rather than a scan.
|
|
1370
1421
|
const generatorOptions = normalModule.generatorOptions;
|
|
1371
1422
|
if (generatorOptions && generatorOptions.extract === "inline") {
|
|
1372
1423
|
continue;
|
|
@@ -1376,11 +1427,9 @@ class HtmlModulesPlugin {
|
|
|
1376
1427
|
if (!emit) continue;
|
|
1377
1428
|
const { resolvedContent, contentHash, filename, info } = emit;
|
|
1378
1429
|
|
|
1379
|
-
// Resolve
|
|
1380
|
-
//
|
|
1381
|
-
//
|
|
1382
|
-
// a subdirectory. A relative `<base href>` prepends `../`s so the
|
|
1383
|
-
// base can't misdirect the rewritten URLs (see `HtmlParser`).
|
|
1430
|
+
// Resolve the remaining `[webpack/auto]` placeholders against the
|
|
1431
|
+
// emitted page's own location, so URLs stay relative to `output.path`
|
|
1432
|
+
// from a subdirectory. A relative `<base href>` prepends `../`s.
|
|
1384
1433
|
const basePrefix =
|
|
1385
1434
|
/** @type {HtmlModuleBuildInfo} */ (normalModule.buildInfo)
|
|
1386
1435
|
.baseUrlPrefix || "";
|
|
@@ -1402,12 +1451,9 @@ class HtmlModulesPlugin {
|
|
|
1402
1451
|
.split(autoPlaceholder)
|
|
1403
1452
|
.join(undoPath);
|
|
1404
1453
|
const finalSource = new RawSource(finalContent);
|
|
1405
|
-
//
|
|
1406
|
-
//
|
|
1407
|
-
//
|
|
1408
|
-
// the asset cache key and the post-undo-path content in the hash so the
|
|
1409
|
-
// asset cache can't reuse one variant's bytes at another variant's URL.
|
|
1410
|
-
// Unchanged content reuses the memoized hash instead of re-digesting.
|
|
1454
|
+
// One module can land in several chunks whose filename shapes give
|
|
1455
|
+
// different undo paths, so the emitted filename joins the cache key
|
|
1456
|
+
// and the post-undo content the hash — else variants alias.
|
|
1411
1457
|
const finalContentHash =
|
|
1412
1458
|
finalContent === resolvedContent
|
|
1413
1459
|
? contentHash
|
|
@@ -1541,11 +1587,10 @@ class HtmlModulesPlugin {
|
|
|
1541
1587
|
// Scope-hoisted HTML loses HTML_TYPE on the ConcatenatedModule, but its
|
|
1542
1588
|
// JS export can still carry unresolved sentinels that need this path.
|
|
1543
1589
|
for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
|
|
1544
|
-
if (module
|
|
1545
|
-
if (module
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
}
|
|
1590
|
+
if (module.is("html")) return true;
|
|
1591
|
+
if (module.getRootModule() === module) continue;
|
|
1592
|
+
for (const inner of module.getSourceModules()) {
|
|
1593
|
+
if (inner.is("html")) return true;
|
|
1549
1594
|
}
|
|
1550
1595
|
}
|
|
1551
1596
|
return false;
|