webpack 5.111.1 → 5.112.1
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/bin/webpack.js +13 -7
- package/lib/Chunk.js +3 -966
- package/lib/Compilation.js +373 -163
- package/lib/Compiler.js +31 -44
- package/lib/Dependency.js +3 -551
- package/lib/DependencyTemplate.js +3 -70
- 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 +37 -8
- package/lib/NormalModule.js +3 -2242
- 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 +21 -13
- package/lib/asset/AssetBytesParser.js +12 -10
- package/lib/asset/AssetGenerator.js +71 -69
- package/lib/asset/AssetModule.js +13 -2
- package/lib/asset/AssetModulesPlugin.js +10 -12
- package/lib/asset/AssetParser.js +10 -10
- package/lib/asset/AssetSourceGenerator.js +23 -15
- package/lib/asset/AssetSourceParser.js +12 -10
- package/lib/asset/RawDataUrlModule.js +17 -10
- package/lib/asset/WebManifestGenerator.js +17 -12
- package/lib/asset/WebManifestParser.js +8 -8
- package/lib/async-modules/AsyncModuleHelpers.js +12 -5
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +9 -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} +6 -6
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/MemoryCachePlugin.js +2 -2
- package/lib/cache/MemoryWithGcCachePlugin.js +2 -2
- package/lib/cache/PackFileCacheStrategy.js +13 -19
- package/lib/cache/ResolverCachePlugin.js +65 -11
- 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} +209 -212
- package/lib/{WebpackOptionsDefaulter.js → config/WebpackOptionsDefaulter.js} +3 -3
- package/lib/config/browserslistTargetHandler.js +1 -1
- package/lib/{cli.js → config/cli.js} +14 -164
- package/lib/config/defaults.js +166 -59
- package/lib/config/getClaimedAssetTypes.js +22 -14
- package/lib/config/normalization.js +18 -7
- package/lib/config/target.js +11 -1
- 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/context/ContextModule.js +37 -26
- package/lib/context/ContextModuleFactory.js +14 -11
- package/lib/context/ContextReplacementPlugin.js +6 -12
- package/lib/css/CssGenerator.js +78 -68
- package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
- package/lib/css/CssLoadingRuntimeModule.js +77 -44
- package/lib/css/CssModule.js +37 -29
- package/lib/css/CssModulesPlugin.js +129 -45
- package/lib/css/CssParser.js +714 -322
- package/lib/css/CssServerStylesRuntimeModule.js +3 -3
- package/lib/{util → css}/conventions.js +1 -1
- package/lib/css/cssMinify.js +110 -37
- package/lib/css/data.js +6990 -5125
- package/lib/css/syntax-parser.js +20734 -0
- package/lib/css/syntax-printer.js +6092 -0
- package/lib/css/syntax.js +37 -18686
- package/lib/debug/ProfilingPlugin.js +106 -51
- package/lib/{DefinePlugin.js → define/DefinePlugin.js} +416 -55
- package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +19 -15
- package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +6 -4
- 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 -11
- 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} +14 -11
- 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} +166 -36
- package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
- package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +154 -92
- package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
- package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +36 -33
- package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +17 -16
- package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +48 -39
- 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} +17 -16
- 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} +9 -6
- 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} +31 -9
- 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} +10 -11
- 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} +7 -10
- package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +17 -19
- 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} +21 -17
- 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 -99
- package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +24 -19
- 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} +25 -22
- 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} +29 -21
- package/lib/dependencies/{HarmonyDetectionParserPlugin.js → esm/ESMDetectionParserPlugin.js} +20 -20
- package/lib/dependencies/{HarmonyEvaluatedImportSpecifierDependency.js → esm/ESMEvaluatedImportSpecifierDependency.js} +33 -30
- package/lib/dependencies/{HarmonyExportDependencyParserPlugin.js → esm/ESMExportDependencyParserPlugin.js} +60 -89
- package/lib/dependencies/{HarmonyExportExpressionDependency.js → esm/ESMExportExpressionDependency.js} +80 -45
- 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} +146 -133
- package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +48 -30
- package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +78 -37
- package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -12
- package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
- package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +86 -68
- package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +104 -100
- package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +36 -51
- package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +83 -39
- package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +98 -60
- package/lib/dependencies/esm/ESMLiveExportDependency.js +311 -0
- package/lib/dependencies/esm/ESMLiveExportParserPlugin.js +862 -0
- package/lib/dependencies/esm/ESMModulesPlugin.js +205 -0
- package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
- package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -18
- package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +5 -7
- package/lib/{util → dependencies/helpers}/chainedImports.js +5 -5
- 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} +52 -151
- package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -15
- package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +69 -23
- package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +50 -18
- 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} +22 -25
- 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} +122 -103
- 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} +28 -20
- package/lib/{url → dependencies/url}/URLParserPlugin.js +17 -19
- 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} +82 -53
- package/lib/dependencies/{WorkerDependency.js → worker/WorkerDependency.js} +22 -15
- package/lib/dependencies/{WorkletDependency.js → worker/WorkletDependency.js} +19 -18
- 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} +155 -27
- 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 +23 -21
- 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 +14 -10
- package/lib/dll/DllModuleFactory.js +3 -3
- package/lib/dll/DllPlugin.js +18 -6
- package/lib/dll/DllReferencePlugin.js +103 -30
- 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/errors/AbstractMethodError.js +1 -1
- 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/{ErrorHelpers.js → errors/ErrorHelpers.js} +9 -6
- 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/errors/JSONParseError.js +4 -4
- 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 +13 -3
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +55 -20
- package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
- package/lib/{ExternalModule.js → externals/ExternalModule.js} +90 -63
- package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +42 -41
- 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} +192 -80
- package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
- package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
- package/lib/graph/Dependency.js +634 -0
- package/lib/graph/Entrypoint.js +136 -0
- package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +131 -83
- package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
- package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +44 -33
- package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
- package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +169 -76
- package/lib/{util → graph}/findGraphRoots.js +15 -9
- package/lib/graph/isDependencyKind.js +23 -0
- package/lib/hmr/HotModuleReplacement.runtime.js +12 -11
- package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +51 -57
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +25 -26
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
- package/lib/hmr/LazyCompilationPlugin.js +32 -28
- package/lib/html/HtmlGenerator.js +132 -60
- package/lib/html/HtmlModule.js +16 -2
- package/lib/html/HtmlModulesPlugin.js +184 -87
- package/lib/html/HtmlParser.js +511 -160
- package/lib/html/builtinEmbeddedRenderer.js +70 -25
- package/lib/html/data.js +44 -22
- package/lib/html/htmlMinify.js +114 -41
- package/lib/html/syntax-parser.js +15795 -0
- package/lib/html/syntax-printer.js +1033 -0
- package/lib/html/syntax.js +37 -13952
- package/lib/html/xmlMinify.js +70 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
- package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
- package/lib/ids/HashedModuleIdsPlugin.js +32 -5
- 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 +312 -105
- package/lib/{APIPlugin.js → javascript/APIPlugin.js} +31 -37
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
- package/lib/javascript/BasicEvaluatedExpression.js +9 -9
- package/lib/javascript/ChunkHelpers.js +64 -4
- package/lib/javascript/CommonJsChunkFormatPlugin.js +5 -13
- package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +7 -7
- package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +75 -8
- package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
- package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
- package/lib/javascript/JavascriptGenerator.js +32 -27
- package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +8 -20
- package/lib/javascript/JavascriptModule.js +14 -3
- package/lib/javascript/JavascriptModulesPlugin.js +441 -214
- package/lib/javascript/JavascriptParser.js +318 -144
- package/lib/javascript/JavascriptParserHelpers.js +1 -1
- package/lib/javascript/MergedEntryExports.js +196 -0
- package/lib/javascript/ScopeAnalyzer.js +3924 -13
- package/lib/javascript/StartupHelpers.js +6 -6
- package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +13 -19
- 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 +19169 -0
- package/lib/javascript/syntax-printer-data.js +1099 -0
- package/lib/javascript/syntax-printer.js +53878 -0
- package/lib/javascript/syntax.js +20 -11274
- package/lib/json/JsonData.js +1 -1
- package/lib/{dependencies → json}/JsonExportsDependency.js +8 -7
- package/lib/json/JsonGenerator.js +24 -16
- package/lib/json/JsonModule.js +13 -2
- package/lib/json/JsonModulesPlugin.js +1 -1
- package/lib/json/JsonParser.js +11 -10
- 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 +28 -12
- package/lib/library/EnableLibraryPlugin.js +1 -1
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
- package/lib/library/JsonpLibraryPlugin.js +2 -2
- package/lib/library/LibraryTemplatePlugin.js +53 -0
- package/lib/library/ModuleLibraryPlugin.js +557 -187
- 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 +2 -2
- package/lib/loaders/LoaderRunner.js +94 -46
- package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
- package/lib/loaders/loadLoader.js +16 -10
- 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} +33 -23
- package/lib/{Module.js → module/Module.js} +121 -53
- package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
- package/lib/module/NormalModule.js +2350 -0
- package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +64 -71
- package/lib/module/NullFactory.js +29 -0
- package/lib/{Parser.js → module/Parser.js} +12 -5
- package/lib/module/RawModule.js +208 -0
- package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
- package/lib/{util → module}/extractSourceMap.js +71 -20
- package/lib/{util → module}/findCaseMismatch.js +4 -4
- package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
- package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
- package/lib/{dependencies → node}/ExternalModuleInitFragment.js +7 -6
- 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 +58 -6
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +7 -7
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -19
- package/lib/node/ReadFileCompileWasmPlugin.js +9 -11
- package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
- package/lib/node/nodeConsole.js +6 -7
- package/lib/optimize/AggressiveMergingPlugin.js +2 -2
- package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
- package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +14 -14
- package/lib/optimize/ConcatenatedModule.js +231 -220
- 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} +23 -28
- package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +44 -19
- package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
- package/lib/optimize/FlagIncludedChunksPlugin.js +2 -2
- package/lib/optimize/InlineExports.js +12 -7
- package/lib/optimize/InnerGraph.js +5 -13
- package/lib/optimize/InnerGraphPlugin.js +10 -10
- package/lib/optimize/LazyBarrels.js +620 -0
- package/lib/{util → optimize}/LazyBucketSortedSet.js +2 -2
- package/lib/optimize/LimitChunkCountPlugin.js +16 -7
- package/lib/optimize/MangleExportsPlugin.js +5 -5
- package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -6
- package/lib/optimize/MinChunkSizePlugin.js +9 -6
- package/lib/optimize/ModuleConcatenationPlugin.js +28 -22
- package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
- package/lib/optimize/RealContentHashPlugin.js +18 -13
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
- package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
- package/lib/optimize/SideEffectsFlagPlugin.js +24 -38
- package/lib/optimize/SplitChunksPlugin.js +719 -174
- package/lib/{util → optimize}/TupleQueue.js +9 -9
- package/lib/optimize/chunkSetIntersections.js +437 -0
- package/lib/{util → optimize}/deterministicGrouping.js +17 -17
- package/lib/{BannerPlugin.js → output/BannerPlugin.js} +82 -14
- package/lib/{CleanPlugin.js → output/CleanPlugin.js} +69 -25
- package/lib/{CopyPlugin.js → output/CopyPlugin.js} +144 -70
- 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 +2 -3
- 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 +4 -6
- package/lib/performance/HotspotsPlugin.js +39 -14
- 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 +19 -13
- package/lib/performance/RedundantDynamicImportsPlugin.js +6 -8
- package/lib/performance/ScopeHoistingBailoutsPlugin.js +2 -2
- package/lib/performance/SizeLimitsPlugin.js +11 -12
- package/lib/performance/TopLevelThisPlugin.js +22 -13
- 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 +1 -1
- 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 +66 -45
- package/lib/prefetch/ResourceHintRuntimeModule.js +3 -3
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +3 -3
- package/lib/prefetch/parseResourceHintOptions.js +4 -3
- package/lib/{ProvidePlugin.js → provide/ProvidePlugin.js} +7 -7
- package/lib/{dependencies → provide}/ProvidedDependency.js +50 -17
- 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/BasicEffectRulePlugin.js +1 -1
- package/lib/rules/RuleSetCompiler.js +42 -51
- package/lib/rules/UseEffectRulePlugin.js +1 -3
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
- package/lib/runtime/AsyncModuleRuntimeModule.js +14 -5
- 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 +7 -11
- 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 +3 -3
- 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 +80 -17
- 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} +24 -1
- package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
- package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
- package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +50 -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 +1 -1
- package/lib/schemes/HttpUriPlugin.js +68 -13
- package/lib/schemes/VirtualUrlPlugin.js +52 -16
- package/lib/serialization/AggregateErrorSerializer.js +4 -4
- package/lib/serialization/BinaryMiddleware.js +4 -1
- package/lib/serialization/ErrorObjectSerializer.js +2 -5
- package/lib/serialization/FileMiddleware.js +3 -3
- package/lib/serialization/ObjectMiddleware.js +62 -29
- package/lib/serialization/PlainObjectSerializer.js +3 -7
- package/lib/serialization/Serializer.js +21 -11
- package/lib/serialization/SerializerMiddleware.js +10 -8
- 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 +14 -16
- package/lib/sharing/utils.js +59 -2
- package/lib/stats/DefaultStatsFactoryPlugin.js +57 -54
- package/lib/stats/DefaultStatsPresetPlugin.js +3 -7
- package/lib/stats/DefaultStatsPrinterPlugin.js +15 -14
- package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
- package/lib/{Stats.js → stats/Stats.js} +4 -4
- package/lib/stats/StatsFactory.js +208 -37
- package/lib/stats/StatsPrinter.js +126 -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} +158 -95
- package/lib/{Template.js → template/Template.js} +14 -12
- package/lib/{TemplatedPathPlugin.js → template/TemplatedPathPlugin.js} +19 -23
- package/lib/typescript/TypeScriptPlugin.js +3 -3
- package/lib/util/RequestShortener.js +44 -0
- package/lib/util/SortableSet.js +87 -22
- package/lib/util/SourceProcessor.js +439 -51
- package/lib/util/TupleSet.js +27 -27
- package/lib/util/WeakTupleMap.js +20 -16
- package/lib/util/buildDiagnostics.js +2 -2
- package/lib/util/cleverMerge.js +61 -33
- package/lib/util/comparators.js +19 -15
- package/lib/util/concatenate.js +28 -147
- package/lib/util/createMappings.js +111 -0
- package/lib/util/dataURL.js +96 -15
- package/lib/util/deprecation.js +5 -4
- package/lib/util/extractComments.js +118 -0
- package/lib/util/formatLocation.js +1 -1
- package/lib/util/globUtils.js +198 -20
- package/lib/util/haltVisitors.js +51 -0
- package/lib/util/handlerKeys.js +2 -2
- package/lib/util/identifier.js +117 -1
- package/lib/util/implicitTypeLoaderFallback.js +6 -4
- package/lib/util/internalSerializables.js +296 -102
- package/lib/util/magicComment.js +12 -7
- package/lib/util/makeSerializable.js +28 -7
- package/lib/util/memoize.js +1 -1
- package/lib/util/parseJson.js +2 -2
- 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 +35 -28
- 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 +19 -5
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +17 -9
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +24 -15
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +14 -12
- package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
- package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +11 -13
- package/lib/wasm/wasmModuleFilename.js +2 -2
- package/lib/wasm-sync/SyncWasmModule.js +18 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +8 -8
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +22 -16
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +28 -21
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
- package/lib/wasm-sync/WebAssemblyParser.js +15 -17
- package/lib/wasm-sync/WebAssemblyUtils.js +6 -5
- 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 +12 -18
- package/lib/web/FetchCompileWasmPlugin.js +8 -10
- 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 +57 -36
- package/schemas/WebpackOptions.check.js +4 -3
- package/schemas/WebpackOptions.d.json.ts +2 -0
- package/schemas/WebpackOptions.json +295 -75
- package/schemas/plugins/BannerPlugin.check.js +4 -3
- package/schemas/plugins/BannerPlugin.json +29 -2
- package/schemas/plugins/HtmlGeneratorOptions.check.js +4 -3
- package/schemas/plugins/HtmlParserOptions.check.js +4 -3
- package/schemas/plugins/IgnorePlugin.check.js +4 -3
- package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
- package/schemas/plugins/IgnorePlugin.json +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.js +4 -3
- package/schemas/plugins/ManifestPlugin.check.js +4 -3
- package/schemas/plugins/ManifestPlugin.json +3 -3
- package/schemas/plugins/ProgressPlugin.check.js +4 -3
- 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 +4 -3
- package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
- package/schemas/plugins/WatchIgnorePlugin.check.js +4 -3
- package/schemas/plugins/WatchIgnorePlugin.json +12 -3
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +4 -3
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +4 -3
- package/schemas/plugins/asset/AssetParserOptions.check.js +4 -3
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +4 -3
- package/schemas/plugins/container/ContainerPlugin.check.js +4 -3
- package/schemas/plugins/container/ContainerPlugin.json +8 -0
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +4 -3
- package/schemas/plugins/container/ExternalsType.check.js +4 -3
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +4 -3
- package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +4 -3
- package/schemas/plugins/css/CssGeneratorOptions.check.js +4 -3
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +4 -3
- package/schemas/plugins/css/CssModuleParserOptions.check.js +4 -3
- package/schemas/plugins/css/CssParserOptions.check.js +4 -3
- package/schemas/plugins/debug/ProfilingPlugin.check.js +4 -3
- package/schemas/plugins/define/DotenvPluginOptions.check.js +7 -0
- package/schemas/plugins/define/DotenvPluginOptions.json +3 -0
- package/schemas/plugins/dll/DllPlugin.check.js +4 -3
- package/schemas/plugins/dll/DllReferencePlugin.check.js +4 -3
- package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +4 -3
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +4 -3
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +4 -3
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +4 -3
- package/schemas/plugins/json/JsonModulesPluginParser.check.js +4 -3
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +4 -3
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +4 -3
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +4 -3
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +4 -3
- package/schemas/plugins/output/CleanOptions.check.js +7 -0
- package/schemas/plugins/output/CleanOptions.json +3 -0
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +4 -3
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +4 -3
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +4 -3
- package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +4 -3
- package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
- package/schemas/plugins/sharing/SharePlugin.check.js +4 -3
- package/schemas/plugins/sharing/SharePlugin.json +32 -0
- package/types.d.ts +20780 -14174
- 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 -72
- package/lib/javascript/grammar.js +0 -5546
- package/lib/javascript/parser.js +0 -1500
- 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}/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
package/lib/html/HtmlParser.js
CHANGED
|
@@ -4,21 +4,22 @@
|
|
|
4
4
|
|
|
5
5
|
"use strict";
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const HtmlEntryDependency = require("../dependencies/HtmlEntryDependency");
|
|
10
|
-
const HtmlInlineHtmlDependency = require("../dependencies/HtmlInlineHtmlDependency");
|
|
11
|
-
const HtmlInlineScriptDependency = require("../dependencies/HtmlInlineScriptDependency");
|
|
12
|
-
const HtmlInlineStyleDependency = require("../dependencies/HtmlInlineStyleDependency");
|
|
13
|
-
const HtmlSourceDependency = require("../dependencies/HtmlSourceDependency");
|
|
14
|
-
const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
|
|
7
|
+
const ConstDependency = require("../dependencies/core/ConstDependency");
|
|
8
|
+
const StaticExportsDependency = require("../dependencies/core/StaticExportsDependency");
|
|
9
|
+
const HtmlEntryDependency = require("../dependencies/html/HtmlEntryDependency");
|
|
10
|
+
const HtmlInlineHtmlDependency = require("../dependencies/html/HtmlInlineHtmlDependency");
|
|
11
|
+
const HtmlInlineScriptDependency = require("../dependencies/html/HtmlInlineScriptDependency");
|
|
12
|
+
const HtmlInlineStyleDependency = require("../dependencies/html/HtmlInlineStyleDependency");
|
|
13
|
+
const HtmlSourceDependency = require("../dependencies/html/HtmlSourceDependency");
|
|
15
14
|
const WebpackError = require("../errors/WebpackError");
|
|
15
|
+
const Parser = require("../module/Parser");
|
|
16
16
|
const ResourceHintPlugin = require("../prefetch/ResourceHintPlugin");
|
|
17
17
|
const parseResourceHintOptions = require("../prefetch/parseResourceHintOptions");
|
|
18
|
+
const ModuleInfoHeaderPlugin = require("../template/ModuleInfoHeaderPlugin");
|
|
18
19
|
const LazySet = require("../util/LazySet");
|
|
19
20
|
const LocConverter = require("../util/LocConverter");
|
|
20
21
|
const createHash = require("../util/createHash");
|
|
21
|
-
const { contextify } = require("../util/identifier");
|
|
22
|
+
const { contextify, getRequestBaseName } = require("../util/identifier");
|
|
22
23
|
const {
|
|
23
24
|
createMagicCommentContext,
|
|
24
25
|
parseMagicComment,
|
|
@@ -26,12 +27,13 @@ const {
|
|
|
26
27
|
} = require("../util/magicComment");
|
|
27
28
|
const memoize = require("../util/memoize");
|
|
28
29
|
const { JAVASCRIPT_SCRIPT_TYPES } = require("./data");
|
|
30
|
+
const { SVG_TAG_ADJUST } = require("./data");
|
|
31
|
+
const { SourceProcessor } = require("./syntax");
|
|
29
32
|
const {
|
|
30
|
-
|
|
31
|
-
|
|
33
|
+
Field,
|
|
34
|
+
Flag,
|
|
32
35
|
NodeType,
|
|
33
|
-
|
|
34
|
-
SourceProcessor,
|
|
36
|
+
Part,
|
|
35
37
|
baseTag,
|
|
36
38
|
buildHeadTags,
|
|
37
39
|
decodeEntities,
|
|
@@ -43,7 +45,7 @@ const {
|
|
|
43
45
|
parseMsapplicationTask,
|
|
44
46
|
parseSrc,
|
|
45
47
|
parseSrcset
|
|
46
|
-
} = require("./syntax");
|
|
48
|
+
} = require("./syntax-parser");
|
|
47
49
|
|
|
48
50
|
const getUnsupportedFeatureWarning = memoize(() =>
|
|
49
51
|
require("../errors/UnsupportedFeatureWarning")
|
|
@@ -57,13 +59,12 @@ const getCommentCompilationWarning = memoize(() =>
|
|
|
57
59
|
require("../errors/CommentCompilationWarning")
|
|
58
60
|
);
|
|
59
61
|
|
|
62
|
+
/** @import { BuiltHtmlModule, HtmlNormalModule } from "./HtmlModule" */
|
|
60
63
|
/** @import { HtmlParserOptions } from "../../declarations/WebpackOptions" */
|
|
61
64
|
/** @import { Range } from "../javascript/JavascriptParser" */
|
|
62
|
-
/** @import Module
|
|
65
|
+
/** @import Module from "../module/Module" */
|
|
63
66
|
/** @import { FileSystemDependencies } from "../Compilation" */
|
|
64
|
-
/** @import
|
|
65
|
-
/** @import { ParserState, PreparsedAst } from "../Parser" */
|
|
66
|
-
/** @import { HtmlModuleBuildInfo } from "./HtmlModule" */
|
|
67
|
+
/** @import { ParserState, PreparsedAst } from "../module/Parser" */
|
|
67
68
|
|
|
68
69
|
/**
|
|
69
70
|
* @typedef {object} HtmlTemplateContext
|
|
@@ -78,7 +79,8 @@ const getCommentCompilationWarning = memoize(() =>
|
|
|
78
79
|
*/
|
|
79
80
|
/** @typedef {(source: string, context: HtmlTemplateContext) => string} HtmlTemplateFunction */
|
|
80
81
|
|
|
81
|
-
/** @import { ParsedSource } from "./syntax" */
|
|
82
|
+
/** @import { ParsedSource } from "./syntax-parser" */
|
|
83
|
+
/** @import { MagicCommentOptions } from "../util/magicComment" */
|
|
82
84
|
|
|
83
85
|
// Cheap pre-filter for a `style="..."` attribute: only route it through the
|
|
84
86
|
// CSS pipeline when it can hold a URL-bearing function (`url()` / `src()` /
|
|
@@ -105,6 +107,12 @@ const CHARSET_DECLARATION_REGEXP = /charset\s*=/i;
|
|
|
105
107
|
// CSP/fetch attributes copied verbatim onto a synthesized sibling `<link>` /
|
|
106
108
|
// `<script>` (`HtmlEntryDependency`). Fixed output order, independent of
|
|
107
109
|
// source order.
|
|
110
|
+
/**
|
|
111
|
+
* @param {import("./syntax-parser").HtmlPath} path walk path at an element
|
|
112
|
+
* @returns {boolean} whether the element is in the HTML namespace
|
|
113
|
+
*/
|
|
114
|
+
const isHtmlElement = (path) => !path.flag(Flag.svg) && !path.flag(Flag.mathml);
|
|
115
|
+
|
|
108
116
|
const COPYABLE_SIBLING_ATTRS = ["nonce", "crossorigin", "referrerpolicy"];
|
|
109
117
|
|
|
110
118
|
const CC_QUOTATION = '"'.charCodeAt(0);
|
|
@@ -115,54 +123,135 @@ const CC_SLASH = "/".charCodeAt(0);
|
|
|
115
123
|
* Byte-exact source span of an attribute including the single leading
|
|
116
124
|
* whitespace (` name`, ` name=value`, ` name="value"`), mirroring the
|
|
117
125
|
* tokenizer's end-of-attribute rule (`valueEnd + 1` past the closing quote).
|
|
118
|
-
* @param {import("./syntax").HtmlPath} path walk path (used only for attribute-ref reads)
|
|
126
|
+
* @param {import("./syntax-parser").HtmlPath} path walk path (used only for attribute-ref reads)
|
|
119
127
|
* @param {string} source HTML source
|
|
120
|
-
* @param {import("./syntax").HtmlAttributeRef} attr attribute ref
|
|
128
|
+
* @param {import("./syntax-parser").HtmlAttributeRef} attr attribute ref
|
|
121
129
|
* @returns {string} the attribute's source slice
|
|
122
130
|
*/
|
|
123
131
|
const attrSourceSpan = (path, source, attr) => {
|
|
124
|
-
const valueStart = path.
|
|
125
|
-
const valueEnd = path.
|
|
132
|
+
const valueStart = path.startOf(Part.value, attr);
|
|
133
|
+
const valueEnd = path.endOf(Part.value, attr);
|
|
126
134
|
const end =
|
|
127
135
|
valueStart === -1
|
|
128
|
-
? path.
|
|
136
|
+
? path.endOf(Part.name, attr)
|
|
129
137
|
: source.charCodeAt(valueStart - 1) === CC_QUOTATION ||
|
|
130
138
|
source.charCodeAt(valueStart - 1) === CC_APOSTROPHE
|
|
131
139
|
? valueEnd + 1
|
|
132
140
|
: valueEnd;
|
|
133
|
-
return source.slice(path.
|
|
141
|
+
return source.slice(path.startOf(Part.name, attr) - 1, end);
|
|
134
142
|
};
|
|
135
143
|
|
|
136
144
|
/**
|
|
137
145
|
* Source span of a tag's `integrity` attribute (offsets relative to
|
|
138
146
|
* `elementStart`, leading whitespace and quotes included), so the template can
|
|
139
147
|
* drop the content-specific author value without re-parsing. Null when absent.
|
|
140
|
-
* @param {import("./syntax").HtmlPath} path walk path (for attribute reads)
|
|
148
|
+
* @param {import("./syntax-parser").HtmlPath} path walk path (for attribute reads)
|
|
141
149
|
* @param {string} source HTML source
|
|
142
150
|
* @param {number} elementStart offset of the tag's opening `<`
|
|
143
151
|
* @returns {Range | null} the span, or null when there is no `integrity`
|
|
144
152
|
*/
|
|
145
153
|
const captureIntegrityRange = (path, source, elementStart) => {
|
|
146
|
-
const integrityAttr = path.
|
|
147
|
-
if (integrityAttr === 0 || path.
|
|
154
|
+
const integrityAttr = path.fieldNamed(Field.attributes, "integrity");
|
|
155
|
+
if (integrityAttr === 0 || path.startOf(Part.name, integrityAttr) < 0) {
|
|
148
156
|
return null;
|
|
149
157
|
}
|
|
150
|
-
let rs = path.
|
|
158
|
+
let rs = path.startOf(Part.name, integrityAttr);
|
|
151
159
|
while (rs > 0 && isAsciiWhitespace(source.charCodeAt(rs - 1))) {
|
|
152
160
|
rs--;
|
|
153
161
|
}
|
|
154
162
|
let re;
|
|
155
|
-
const ivs = path.
|
|
163
|
+
const ivs = path.startOf(Part.value, integrityAttr);
|
|
156
164
|
if (ivs === -1) {
|
|
157
|
-
re = path.
|
|
165
|
+
re = path.endOf(Part.name, integrityAttr);
|
|
158
166
|
} else {
|
|
159
167
|
const q = source.charCodeAt(ivs - 1);
|
|
160
|
-
const ive = path.
|
|
168
|
+
const ive = path.endOf(Part.value, integrityAttr);
|
|
161
169
|
re = q === CC_QUOTATION || q === CC_APOSTROPHE ? ive + 1 : ive;
|
|
162
170
|
}
|
|
163
171
|
return [rs - elementStart, re - elementStart];
|
|
164
172
|
};
|
|
165
173
|
|
|
174
|
+
/**
|
|
175
|
+
* Whether a span holds nothing a script body could have read — whitespace and
|
|
176
|
+
* comments only. Scanned rather than matched: the pattern for it backtracks.
|
|
177
|
+
* @param {string} source HTML source
|
|
178
|
+
* @param {number} start offset the span starts at
|
|
179
|
+
* @param {number} end offset the span ends at
|
|
180
|
+
* @returns {boolean} true when no node of the span reaches the DOM
|
|
181
|
+
*/
|
|
182
|
+
const isEmptyRunGap = (source, start, end) => {
|
|
183
|
+
let offset = start;
|
|
184
|
+
while (offset < end) {
|
|
185
|
+
if (isAsciiWhitespace(source.charCodeAt(offset))) {
|
|
186
|
+
offset++;
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (!source.startsWith("<!--", offset)) return false;
|
|
190
|
+
const close = source.indexOf("-->", offset + 4);
|
|
191
|
+
if (close === -1 || close + 3 > end) return false;
|
|
192
|
+
offset = close + 3;
|
|
193
|
+
}
|
|
194
|
+
return true;
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
// What an entry name keeps from a page's path. The mapping is reversible, so
|
|
198
|
+
// two pages of one compilation can never sanitize to the same name.
|
|
199
|
+
const ENTRY_NAME_KEPT_REGEXP = /[^\w.]/g;
|
|
200
|
+
const ENTRY_NAME_EXTENSION_REGEXP = /\.[^./\\]*$/;
|
|
201
|
+
const ENTRY_NAME_TRIM_REGEXP = /^[-.]+|[-.]+$/g;
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Names the entries a page's tags are extracted under, after the page itself.
|
|
205
|
+
* A `data:` document has no path to be named after, so it keeps a digest of
|
|
206
|
+
* the one thing that tells it from another such document.
|
|
207
|
+
* @param {string} pagePath the page's path, relative to the compiler context
|
|
208
|
+
* @param {import("../util/Hash").HashFunction | undefined} hashFunction `output.hashFunction`
|
|
209
|
+
* @returns {string} the prefix every entry name of this page starts with
|
|
210
|
+
*/
|
|
211
|
+
const entryNamePrefix = (pagePath, hashFunction) => {
|
|
212
|
+
if (pagePath.startsWith("data:")) {
|
|
213
|
+
const digest = createHash(hashFunction || "md4")
|
|
214
|
+
.update(pagePath)
|
|
215
|
+
.digest("hex")
|
|
216
|
+
.slice(0, 8);
|
|
217
|
+
return `data-${digest}`;
|
|
218
|
+
}
|
|
219
|
+
return pagePath
|
|
220
|
+
.replace(ENTRY_NAME_EXTENSION_REGEXP, "")
|
|
221
|
+
.replace(ENTRY_NAME_KEPT_REGEXP, (character) => {
|
|
222
|
+
if (character === "-") return "--";
|
|
223
|
+
if (character === "/" || character === "\\") return "-";
|
|
224
|
+
return `_${character.charCodeAt(0).toString(16)}_`;
|
|
225
|
+
})
|
|
226
|
+
.replace(ENTRY_NAME_TRIM_REGEXP, "");
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* @typedef {object} HtmlChunkNameData
|
|
231
|
+
* @property {string} page the page's path, escaped for use in a name
|
|
232
|
+
* @property {string} name the tag's own basename, empty for an inline body
|
|
233
|
+
* @property {number} index the tag's position in the page, across all kinds
|
|
234
|
+
* @property {"script" | "script-module" | "modulepreload" | "stylesheet" | "html" | "preload" | "prefetch"} type what the tag is extracted as
|
|
235
|
+
*/
|
|
236
|
+
|
|
237
|
+
/** @typedef {(data: HtmlChunkNameData) => string} HtmlChunkNameFn */
|
|
238
|
+
|
|
239
|
+
const CHUNK_NAME_PLACEHOLDER_REGEXP = /\[(page|name|index|type)\]/g;
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* End offset of a raw-text element, its closing tag included. `contentEnd`
|
|
243
|
+
* sits at the `</` that ended the body, and at the body's end without one.
|
|
244
|
+
* @param {string} source HTML source
|
|
245
|
+
* @param {number} contentEnd end offset of the element's raw text
|
|
246
|
+
* @returns {number} offset just past the element
|
|
247
|
+
*/
|
|
248
|
+
const rawTextElementEnd = (source, contentEnd) => {
|
|
249
|
+
const close = source.startsWith("</", contentEnd)
|
|
250
|
+
? source.indexOf(">", contentEnd)
|
|
251
|
+
: -1;
|
|
252
|
+
return close === -1 ? contentEnd : close + 1;
|
|
253
|
+
};
|
|
254
|
+
|
|
166
255
|
/**
|
|
167
256
|
* @param {Map<string, string>} attributes attributes
|
|
168
257
|
* @param {string} name name
|
|
@@ -348,8 +437,8 @@ const isLinkStylesheet = (attributes) => {
|
|
|
348
437
|
/** @typedef {SourceType | ((attrs: Map<string, string>, css: boolean) => SourceType)} SourceTypeOrResolver */
|
|
349
438
|
/** @typedef {(attributes: Map<string, string>, value: string) => boolean} SourceFilter */
|
|
350
439
|
/** @typedef {{ tag?: string, attribute: string, type: SourceType, filter?: SourceFilter }} SourceEntry */
|
|
351
|
-
/** A `type` plus optional gates: `filter` (the decoded attribute map + the decoded value; return false to skip — covers both cross-attribute checks and cheap value checks) and `namespace` (restrict to an element namespace, e.g. SVG). */
|
|
352
|
-
/** @typedef {{ type: SourceTypeOrResolver, filter?: SourceFilter, namespace?:
|
|
440
|
+
/** A `type` plus optional gates: `filter` (the decoded attribute map + the decoded value; return false to skip — covers both cross-attribute checks and cheap value checks) and `namespace` (restrict to an element namespace, by its `Flag`, e.g. SVG). */
|
|
441
|
+
/** @typedef {{ type: SourceTypeOrResolver, filter?: SourceFilter, namespace?: typeof Flag.svg | typeof Flag.mathml }} SourceItem */
|
|
353
442
|
/** A tag→attribute lookup; a `undefined` value marks a built-in source disabled via `sources` (`type: false`). */
|
|
354
443
|
/** @typedef {Record<string, SourceItem | undefined>} SourceBucket */
|
|
355
444
|
/** @typedef {Record<string, SourceBucket>} SourceTable */
|
|
@@ -364,8 +453,9 @@ const isLinkStylesheet = (attributes) => {
|
|
|
364
453
|
* `constructor`, or `toString` resolve to inherited values at lookup
|
|
365
454
|
* time — producing bogus dependencies and letting `sources: false` be
|
|
366
455
|
* bypassed.
|
|
367
|
-
* @
|
|
368
|
-
* @
|
|
456
|
+
* @template T
|
|
457
|
+
* @param {...(Record<string, T> | undefined)} bags property bags
|
|
458
|
+
* @returns {Record<string, T>} null-prototype dictionary
|
|
369
459
|
*/
|
|
370
460
|
const dict = (...bags) => Object.assign(Object.create(null), ...bags);
|
|
371
461
|
|
|
@@ -520,7 +610,7 @@ const DEFAULT_SOURCES_BY_TAG = dict({
|
|
|
520
610
|
const SVG_CSS_URL = {
|
|
521
611
|
type: "css-url",
|
|
522
612
|
filter: (attributes, value) => FUNC_IRI_URL_REGEXP.test(value),
|
|
523
|
-
namespace:
|
|
613
|
+
namespace: Flag.svg
|
|
524
614
|
};
|
|
525
615
|
|
|
526
616
|
// The global `style=""` attribute, available on every tag and even under
|
|
@@ -627,6 +717,9 @@ const CONTENT_SOURCES = dict({
|
|
|
627
717
|
style: { type: "stylesheet-style", filter: styleContentFilter }
|
|
628
718
|
});
|
|
629
719
|
|
|
720
|
+
/**
|
|
721
|
+
* @extends {Parser<BuiltHtmlModule>}
|
|
722
|
+
*/
|
|
630
723
|
class HtmlParser extends Parser {
|
|
631
724
|
/**
|
|
632
725
|
* Creates an instance of HtmlParser.
|
|
@@ -644,6 +737,8 @@ class HtmlParser extends Parser {
|
|
|
644
737
|
// `as` selects the parse mode: `"document"` parses a full page, any other
|
|
645
738
|
// value names the context element whose inner HTML this is, so that a
|
|
646
739
|
// partial's `<tr>`, `<td>` or `<option>` is kept rather than dropped.
|
|
740
|
+
/** @type {string | HtmlChunkNameFn | undefined} */
|
|
741
|
+
this._chunkName = options.chunkName;
|
|
647
742
|
/** @type {string | undefined} */
|
|
648
743
|
this.fragmentContext =
|
|
649
744
|
options.as === undefined || options.as === "document"
|
|
@@ -710,14 +805,14 @@ class HtmlParser extends Parser {
|
|
|
710
805
|
* dependency offsets against it) and the generator (which renders from
|
|
711
806
|
* `module.originalSource()`) stay in agreement.
|
|
712
807
|
* @param {string | Buffer} source the original source
|
|
713
|
-
* @param {
|
|
808
|
+
* @param {HtmlNormalModule} module the html module
|
|
714
809
|
* @returns {string | Buffer} the transformed source
|
|
715
810
|
*/
|
|
716
811
|
applyTemplate(source, module) {
|
|
717
812
|
if (!this.template) return source;
|
|
718
813
|
// `processResult` runs after `_doBuild` has initialized these
|
|
719
814
|
// dependency sets, so they are always present here.
|
|
720
|
-
const buildInfo = /** @type {
|
|
815
|
+
const { buildInfo } = /** @type {BuiltHtmlModule} */ (module);
|
|
721
816
|
const fileDependencies = /** @type {FileSystemDependencies} */ (
|
|
722
817
|
buildInfo.fileDependencies
|
|
723
818
|
);
|
|
@@ -783,23 +878,21 @@ class HtmlParser extends Parser {
|
|
|
783
878
|
|
|
784
879
|
const locConverter = new LocConverter(source);
|
|
785
880
|
|
|
786
|
-
const module = state.module;
|
|
881
|
+
const module = /** @type {BuiltHtmlModule} */ (state.module);
|
|
787
882
|
const compilation = state.compilation;
|
|
788
883
|
const { hashFunction, module: outputModule } = compilation.outputOptions;
|
|
789
884
|
const context = compilation.compiler.context;
|
|
790
885
|
const css = Boolean(compilation.options.experiments.css);
|
|
791
886
|
const urlHints = this._urlHints;
|
|
792
887
|
|
|
793
|
-
//
|
|
794
|
-
//
|
|
795
|
-
// `identifier()`, whose `html|` prefix `contextify` would leave absolute.
|
|
888
|
+
// An entry name starts with the page's own path, so two pages never claim
|
|
889
|
+
// one — from `resource`, since `identifier()` is `html|<path>`.
|
|
796
890
|
/** @type {string} */
|
|
797
|
-
const resource =
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
.slice(0, 8);
|
|
891
|
+
const resource = module.resource || module.identifier();
|
|
892
|
+
const entryPrefix = entryNamePrefix(
|
|
893
|
+
context ? contextify(context, resource) : resource,
|
|
894
|
+
hashFunction
|
|
895
|
+
);
|
|
803
896
|
|
|
804
897
|
// `output.html` head injection collects facts during the walk and turns
|
|
805
898
|
// them into presentational dependencies after, so no later pass re-parses
|
|
@@ -816,6 +909,72 @@ class HtmlParser extends Parser {
|
|
|
816
909
|
!resource.startsWith("data:")
|
|
817
910
|
? htmlOutputOptions
|
|
818
911
|
: undefined;
|
|
912
|
+
const chunkNameOption = this._chunkName;
|
|
913
|
+
/** @type {Set<string>} */
|
|
914
|
+
const claimedEntryNames = new Set();
|
|
915
|
+
/** @type {Set<string>} */
|
|
916
|
+
const requestedEntryNames = new Set();
|
|
917
|
+
|
|
918
|
+
/**
|
|
919
|
+
* Claims `base`, counting up from the tag's own position while another tag
|
|
920
|
+
* of this page holds it: one name would merge entries the document parts.
|
|
921
|
+
* @param {string} base the name the tag asks for
|
|
922
|
+
* @param {number} index the tag's position in the page
|
|
923
|
+
* @returns {string} the name it claimed
|
|
924
|
+
*/
|
|
925
|
+
const claimEntryName = (base, index) => {
|
|
926
|
+
let claimed = base;
|
|
927
|
+
for (let suffix = index; claimedEntryNames.has(claimed); suffix++) {
|
|
928
|
+
claimed = `${base}-${suffix}`;
|
|
929
|
+
}
|
|
930
|
+
claimedEntryNames.add(claimed);
|
|
931
|
+
return claimed;
|
|
932
|
+
};
|
|
933
|
+
|
|
934
|
+
/**
|
|
935
|
+
* The name a tag's extracted entry claims: what its own
|
|
936
|
+
* `webpackChunkName` comment asked for, else what
|
|
937
|
+
* `module.parser.html.chunkName` makes of it, else the page and the position.
|
|
938
|
+
* @param {string | undefined} requested name from the tag's magic comment
|
|
939
|
+
* @param {string} request the tag's request
|
|
940
|
+
* @param {number} index the tag's position in the page
|
|
941
|
+
* @param {HtmlChunkNameData["type"]} type what the tag is extracted as
|
|
942
|
+
* @returns {string} an entry name no other tag of this page claims
|
|
943
|
+
*/
|
|
944
|
+
const entryNameFor = (requested, request, index, type) => {
|
|
945
|
+
let name = requested;
|
|
946
|
+
if (name === undefined && chunkNameOption !== undefined) {
|
|
947
|
+
const tagName = getRequestBaseName(request) || "";
|
|
948
|
+
name =
|
|
949
|
+
typeof chunkNameOption === "function"
|
|
950
|
+
? chunkNameOption({ page: entryPrefix, name: tagName, index, type })
|
|
951
|
+
: chunkNameOption.replace(
|
|
952
|
+
CHUNK_NAME_PLACEHOLDER_REGEXP,
|
|
953
|
+
(_, placeholder) => {
|
|
954
|
+
if (placeholder === "page") return entryPrefix;
|
|
955
|
+
if (placeholder === "name") return tagName;
|
|
956
|
+
if (placeholder === "index") return `${index}`;
|
|
957
|
+
return type;
|
|
958
|
+
}
|
|
959
|
+
);
|
|
960
|
+
}
|
|
961
|
+
if (typeof name !== "string" || name === "") {
|
|
962
|
+
return claimEntryName(`${entryPrefix}-${index}`, index);
|
|
963
|
+
}
|
|
964
|
+
const claimed = claimEntryName(name, index);
|
|
965
|
+
requestedEntryNames.add(claimed);
|
|
966
|
+
return claimed;
|
|
967
|
+
};
|
|
968
|
+
|
|
969
|
+
/**
|
|
970
|
+
* The name a tag's file is emitted under when the page asked for one, so
|
|
971
|
+
* a named chunk is not left to be called after the tag's url.
|
|
972
|
+
* @param {string} entryName the entry name the tag claimed
|
|
973
|
+
* @returns {string | undefined} the asked-for name, else undefined
|
|
974
|
+
*/
|
|
975
|
+
const requestedFileName = (entryName) =>
|
|
976
|
+
requestedEntryNames.has(entryName) ? entryName : undefined;
|
|
977
|
+
|
|
819
978
|
let doctypeEnd = -1;
|
|
820
979
|
let htmlTagEnd = -1;
|
|
821
980
|
// insertion offsets just inside the (possibly implicit) head
|
|
@@ -845,6 +1004,7 @@ class HtmlParser extends Parser {
|
|
|
845
1004
|
* @property {number} index position in the document, across all groups — the order the emitted files are named in
|
|
846
1005
|
* @property {"script" | "script-module" | "modulepreload" | "stylesheet" | "html" | "preload" | "prefetch"} type
|
|
847
1006
|
* @property {boolean=} css entry emits a CSS chunk (`<link rel="preload" as="style">`), so it needs the CSS filename template
|
|
1007
|
+
* @property {string=} chunkName name the page asked this tag's chunk to claim, which names its file too
|
|
848
1008
|
*/
|
|
849
1009
|
/** @type {HtmlEntryInfo[]} */
|
|
850
1010
|
const scriptEntries = [];
|
|
@@ -872,6 +1032,20 @@ class HtmlParser extends Parser {
|
|
|
872
1032
|
let firstBlockingScriptStart = -1;
|
|
873
1033
|
|
|
874
1034
|
let nextEntryIndex = 0;
|
|
1035
|
+
// One chunk per run of inline `<script>`: under module output every
|
|
1036
|
+
// extracted tag is deferred, so only what executes between them matters.
|
|
1037
|
+
/** @type {string | undefined} */
|
|
1038
|
+
let inlineRunEntryName;
|
|
1039
|
+
// Element offset of the run's last member — any other `<script>` ends it.
|
|
1040
|
+
let inlineRunTag = -1;
|
|
1041
|
+
// End offset of that member, for the gap a classic run may not span.
|
|
1042
|
+
let inlineRunEnd = -1;
|
|
1043
|
+
// How the run's tags are scheduled, which a member has to share.
|
|
1044
|
+
/** @type {string | undefined} */
|
|
1045
|
+
let inlineRunScheduling;
|
|
1046
|
+
// The run's first tag, which carries the chunk and so the inline request.
|
|
1047
|
+
/** @type {HtmlInlineScriptDependency | undefined} */
|
|
1048
|
+
let inlineRunLeaderDependency;
|
|
875
1049
|
|
|
876
1050
|
// WHY: `<base href>` resolves the relative URLs that follow it. A relative base
|
|
877
1051
|
// (`./assets/`) rewrites them into a subdirectory and they stay bundled; a
|
|
@@ -898,6 +1072,12 @@ class HtmlParser extends Parser {
|
|
|
898
1072
|
let pendingWebpackIgnore;
|
|
899
1073
|
/** @type {boolean | undefined} */
|
|
900
1074
|
let pendingWebpackInline;
|
|
1075
|
+
/**
|
|
1076
|
+
* The name the most recent comment asked the next tag's chunk to claim,
|
|
1077
|
+
* cleared the same way as the flags above.
|
|
1078
|
+
* @type {string | undefined}
|
|
1079
|
+
*/
|
|
1080
|
+
let pendingWebpackChunkName;
|
|
901
1081
|
/**
|
|
902
1082
|
* Tracks the resource-hint values from the most recent `<!-- webpackPrefetch: … -->`
|
|
903
1083
|
* (etc.) comment so the next asset URL attribute picks them up.
|
|
@@ -908,16 +1088,16 @@ class HtmlParser extends Parser {
|
|
|
908
1088
|
const magicCommentContext = this.magicCommentContext;
|
|
909
1089
|
|
|
910
1090
|
/**
|
|
911
|
-
* @param {import("./syntax").HtmlPath} path walk path (used only for attribute-ref reads)
|
|
912
|
-
* @param {import("./syntax").HtmlAttributeRef} typeAttr type attribute ref (0 = none)
|
|
1091
|
+
* @param {import("./syntax-parser").HtmlPath} path walk path (used only for attribute-ref reads)
|
|
1092
|
+
* @param {import("./syntax-parser").HtmlAttributeRef} typeAttr type attribute ref (0 = none)
|
|
913
1093
|
* @param {number} nameEnd end offset of the tag name
|
|
914
1094
|
* @param {string} type type of the script
|
|
915
1095
|
* @param {string} input source string
|
|
916
1096
|
*/
|
|
917
1097
|
const reconcileScriptTypeAttr = (path, typeAttr, nameEnd, type, input) => {
|
|
918
1098
|
const valueStart =
|
|
919
|
-
typeAttr !== 0 ? path.
|
|
920
|
-
const valueEnd = typeAttr !== 0 ? path.
|
|
1099
|
+
typeAttr !== 0 ? path.startOf(Part.value, typeAttr) : -1;
|
|
1100
|
+
const valueEnd = typeAttr !== 0 ? path.endOf(Part.value, typeAttr) : -1;
|
|
921
1101
|
if (outputModule && type === "script") {
|
|
922
1102
|
// Chunk is an ES module; upgrade the tag.
|
|
923
1103
|
if (typeAttr !== 0 && valueStart !== -1) {
|
|
@@ -934,13 +1114,13 @@ class HtmlParser extends Parser {
|
|
|
934
1114
|
// browser doesn't load it under module semantics.
|
|
935
1115
|
let attrEnd;
|
|
936
1116
|
if (valueStart === -1) {
|
|
937
|
-
attrEnd = path.
|
|
1117
|
+
attrEnd = path.endOf(Part.name, typeAttr);
|
|
938
1118
|
} else if (input[valueEnd] === '"' || input[valueEnd] === "'") {
|
|
939
1119
|
attrEnd = valueEnd + 1;
|
|
940
1120
|
} else {
|
|
941
1121
|
attrEnd = valueEnd;
|
|
942
1122
|
}
|
|
943
|
-
let attrStart = path.
|
|
1123
|
+
let attrStart = path.startOf(Part.name, typeAttr);
|
|
944
1124
|
if (
|
|
945
1125
|
attrStart > 0 &&
|
|
946
1126
|
isAsciiWhitespace(input.charCodeAt(attrStart - 1))
|
|
@@ -976,11 +1156,11 @@ class HtmlParser extends Parser {
|
|
|
976
1156
|
* Classifies the first `<base href>` seen in the walk, setting
|
|
977
1157
|
* `documentBase`/`baseDir`/`baseIsExternal`/`baseUrlPrefix` for the URLs
|
|
978
1158
|
* that follow it.
|
|
979
|
-
* @param {import("./syntax").HtmlPath} path walk path (for attribute reads)
|
|
980
|
-
* @param {import("./syntax").HtmlAttributeRef} hrefAttr the base's href attribute
|
|
1159
|
+
* @param {import("./syntax-parser").HtmlPath} path walk path (for attribute reads)
|
|
1160
|
+
* @param {import("./syntax-parser").HtmlAttributeRef} hrefAttr the base's href attribute
|
|
981
1161
|
*/
|
|
982
1162
|
const resolveDocumentBase = (path, hrefAttr) => {
|
|
983
|
-
documentBase =
|
|
1163
|
+
documentBase = path.value(hrefAttr).trim();
|
|
984
1164
|
if (!documentBase) return;
|
|
985
1165
|
if (
|
|
986
1166
|
ABSOLUTE_URL_SCHEME_REGEXP.test(documentBase) ||
|
|
@@ -1019,7 +1199,7 @@ class HtmlParser extends Parser {
|
|
|
1019
1199
|
|
|
1020
1200
|
// Lazy decoded-attribute map for the current element — parse-scoped
|
|
1021
1201
|
// to avoid a closure and memo slot per element.
|
|
1022
|
-
/** @type {import("./syntax").HtmlPath | undefined} */
|
|
1202
|
+
/** @type {import("./syntax-parser").HtmlPath | undefined} */
|
|
1023
1203
|
let attrMapPath;
|
|
1024
1204
|
let attrMapCount = 0;
|
|
1025
1205
|
/** @type {Map<string, string> | undefined} */
|
|
@@ -1027,15 +1207,14 @@ class HtmlParser extends Parser {
|
|
|
1027
1207
|
const getAttributesMap = () => {
|
|
1028
1208
|
if (currentAttributesMap) return currentAttributesMap;
|
|
1029
1209
|
currentAttributesMap = new Map();
|
|
1030
|
-
const path = /** @type {import("./syntax").HtmlPath} */ (
|
|
1210
|
+
const path = /** @type {import("./syntax-parser").HtmlPath} */ (
|
|
1211
|
+
attrMapPath
|
|
1212
|
+
);
|
|
1031
1213
|
for (let i = 0; i < attrMapCount; i++) {
|
|
1032
|
-
const attr = path.
|
|
1214
|
+
const attr = path.field(i, Field.attributes);
|
|
1033
1215
|
// Decoded values — filters and type resolvers compare what
|
|
1034
1216
|
// the browser sees (e.g. `rel="icon"` means `icon`)
|
|
1035
|
-
currentAttributesMap.set(
|
|
1036
|
-
path.attributeName(attr),
|
|
1037
|
-
decodeEntities(path.attributeValue(attr), true)
|
|
1038
|
-
);
|
|
1217
|
+
currentAttributesMap.set(path.name(attr), path.value(attr));
|
|
1039
1218
|
}
|
|
1040
1219
|
return currentAttributesMap;
|
|
1041
1220
|
};
|
|
@@ -1046,8 +1225,8 @@ class HtmlParser extends Parser {
|
|
|
1046
1225
|
new SourceProcessor()
|
|
1047
1226
|
.use({
|
|
1048
1227
|
[NodeType.Comment]: (path) => {
|
|
1049
|
-
const start = path.start();
|
|
1050
|
-
const end = path.end();
|
|
1228
|
+
const start = path.start(path.node);
|
|
1229
|
+
const end = path.end(path.node);
|
|
1051
1230
|
// comments count toward the head-end insertion anchor
|
|
1052
1231
|
if (inHead && headTemplateDepth === 0 && end > headLastEnd) {
|
|
1053
1232
|
headLastEnd = end;
|
|
@@ -1065,17 +1244,19 @@ class HtmlParser extends Parser {
|
|
|
1065
1244
|
) {
|
|
1066
1245
|
pendingWebpackIgnore = undefined;
|
|
1067
1246
|
pendingWebpackInline = undefined;
|
|
1247
|
+
pendingWebpackChunkName = undefined;
|
|
1068
1248
|
pendingHints = undefined;
|
|
1069
1249
|
return;
|
|
1070
1250
|
}
|
|
1071
|
-
const value = path.
|
|
1251
|
+
const value = path.value();
|
|
1072
1252
|
if (!webpackCommentRegExp.test(value)) {
|
|
1073
1253
|
pendingWebpackIgnore = undefined;
|
|
1074
1254
|
pendingWebpackInline = undefined;
|
|
1255
|
+
pendingWebpackChunkName = undefined;
|
|
1075
1256
|
pendingHints = undefined;
|
|
1076
1257
|
return;
|
|
1077
1258
|
}
|
|
1078
|
-
/** @type {
|
|
1259
|
+
/** @type {MagicCommentOptions} */
|
|
1079
1260
|
let options;
|
|
1080
1261
|
try {
|
|
1081
1262
|
options = parseMagicComment(value, magicCommentContext);
|
|
@@ -1095,18 +1276,21 @@ class HtmlParser extends Parser {
|
|
|
1095
1276
|
);
|
|
1096
1277
|
pendingWebpackIgnore = undefined;
|
|
1097
1278
|
pendingWebpackInline = undefined;
|
|
1279
|
+
pendingWebpackChunkName = undefined;
|
|
1098
1280
|
pendingHints = undefined;
|
|
1099
1281
|
return;
|
|
1100
1282
|
}
|
|
1101
1283
|
if (
|
|
1102
1284
|
options.webpackIgnore === undefined &&
|
|
1103
1285
|
options.webpackInline === undefined &&
|
|
1286
|
+
options.webpackChunkName === undefined &&
|
|
1104
1287
|
options.webpackPrefetch === undefined &&
|
|
1105
1288
|
options.webpackPreload === undefined &&
|
|
1106
1289
|
options.webpackFetchPriority === undefined
|
|
1107
1290
|
) {
|
|
1108
1291
|
pendingWebpackIgnore = undefined;
|
|
1109
1292
|
pendingWebpackInline = undefined;
|
|
1293
|
+
pendingWebpackChunkName = undefined;
|
|
1110
1294
|
pendingHints = undefined;
|
|
1111
1295
|
return;
|
|
1112
1296
|
}
|
|
@@ -1127,6 +1311,7 @@ class HtmlParser extends Parser {
|
|
|
1127
1311
|
);
|
|
1128
1312
|
pendingWebpackIgnore = undefined;
|
|
1129
1313
|
pendingWebpackInline = undefined;
|
|
1314
|
+
pendingWebpackChunkName = undefined;
|
|
1130
1315
|
pendingHints = undefined;
|
|
1131
1316
|
return;
|
|
1132
1317
|
}
|
|
@@ -1147,11 +1332,35 @@ class HtmlParser extends Parser {
|
|
|
1147
1332
|
);
|
|
1148
1333
|
pendingWebpackIgnore = undefined;
|
|
1149
1334
|
pendingWebpackInline = undefined;
|
|
1335
|
+
pendingWebpackChunkName = undefined;
|
|
1336
|
+
pendingHints = undefined;
|
|
1337
|
+
return;
|
|
1338
|
+
}
|
|
1339
|
+
if (
|
|
1340
|
+
options.webpackChunkName !== undefined &&
|
|
1341
|
+
(typeof options.webpackChunkName !== "string" ||
|
|
1342
|
+
options.webpackChunkName === "")
|
|
1343
|
+
) {
|
|
1344
|
+
const { line: sl, column: sc } = locConverter.get(start);
|
|
1345
|
+
const { line: el, column: ec } = locConverter.get(end);
|
|
1346
|
+
module.addWarning(
|
|
1347
|
+
new (getUnsupportedFeatureWarning())(
|
|
1348
|
+
`\`webpackChunkName\` expected a non-empty string, but received: ${options.webpackChunkName}.`,
|
|
1349
|
+
{
|
|
1350
|
+
start: { line: sl, column: sc },
|
|
1351
|
+
end: { line: el, column: ec }
|
|
1352
|
+
}
|
|
1353
|
+
)
|
|
1354
|
+
);
|
|
1355
|
+
pendingWebpackIgnore = undefined;
|
|
1356
|
+
pendingWebpackInline = undefined;
|
|
1357
|
+
pendingWebpackChunkName = undefined;
|
|
1150
1358
|
pendingHints = undefined;
|
|
1151
1359
|
return;
|
|
1152
1360
|
}
|
|
1153
1361
|
pendingWebpackIgnore = options.webpackIgnore;
|
|
1154
1362
|
pendingWebpackInline = options.webpackInline;
|
|
1363
|
+
pendingWebpackChunkName = options.webpackChunkName;
|
|
1155
1364
|
if (
|
|
1156
1365
|
options.webpackPrefetch !== undefined ||
|
|
1157
1366
|
options.webpackPreload !== undefined ||
|
|
@@ -1175,9 +1384,10 @@ class HtmlParser extends Parser {
|
|
|
1175
1384
|
},
|
|
1176
1385
|
[NodeType.Doctype]: (path) => {
|
|
1177
1386
|
// only visited when head injection is active (see `skip` below)
|
|
1178
|
-
if (doctypeEnd === -1) doctypeEnd = path.end();
|
|
1387
|
+
if (doctypeEnd === -1) doctypeEnd = path.end(path.node);
|
|
1179
1388
|
pendingWebpackIgnore = undefined;
|
|
1180
1389
|
pendingWebpackInline = undefined;
|
|
1390
|
+
pendingWebpackChunkName = undefined;
|
|
1181
1391
|
pendingHints = undefined;
|
|
1182
1392
|
},
|
|
1183
1393
|
[NodeType.Element]: {
|
|
@@ -1187,23 +1397,25 @@ class HtmlParser extends Parser {
|
|
|
1187
1397
|
enter: (path) => {
|
|
1188
1398
|
const ignore = pendingWebpackIgnore === true;
|
|
1189
1399
|
const forceInline = pendingWebpackInline === true;
|
|
1400
|
+
const chunkName = pendingWebpackChunkName;
|
|
1190
1401
|
pendingWebpackIgnore = undefined;
|
|
1191
1402
|
pendingWebpackInline = undefined;
|
|
1403
|
+
pendingWebpackChunkName = undefined;
|
|
1192
1404
|
|
|
1193
1405
|
// `<head>` anchors are collected for every page, since they place
|
|
1194
1406
|
// `inject: "head"` siblings and resource hints. Structural, so this
|
|
1195
1407
|
// runs even for `webpackIgnore`d elements.
|
|
1196
1408
|
{
|
|
1197
|
-
const name = path.
|
|
1198
|
-
if (name === "template" && path
|
|
1409
|
+
const name = path.name();
|
|
1410
|
+
if (name === "template" && isHtmlElement(path)) {
|
|
1199
1411
|
templateDepth++;
|
|
1200
1412
|
}
|
|
1201
1413
|
if (headTemplateDepth > 0) {
|
|
1202
|
-
if (name === "template" && path
|
|
1414
|
+
if (name === "template" && isHtmlElement(path)) {
|
|
1203
1415
|
headTemplateDepth++;
|
|
1204
1416
|
}
|
|
1205
1417
|
} else if (inHead) {
|
|
1206
|
-
if (headOptions !== undefined && path
|
|
1418
|
+
if (headOptions !== undefined && isHtmlElement(path)) {
|
|
1207
1419
|
switch (name) {
|
|
1208
1420
|
case "title":
|
|
1209
1421
|
headHasTitle = true;
|
|
@@ -1212,50 +1424,48 @@ class HtmlParser extends Parser {
|
|
|
1212
1424
|
headHasBase = true;
|
|
1213
1425
|
break;
|
|
1214
1426
|
case "meta": {
|
|
1215
|
-
if (path.
|
|
1216
|
-
headCharsetEnd = path.
|
|
1427
|
+
if (path.fieldNamed(Field.attributes, "charset") !== 0) {
|
|
1428
|
+
headCharsetEnd = path.startOf(Part.content, path.node);
|
|
1217
1429
|
} else {
|
|
1218
|
-
const httpEquiv = path.
|
|
1430
|
+
const httpEquiv = path.fieldNamed(
|
|
1431
|
+
Field.attributes,
|
|
1432
|
+
"http-equiv"
|
|
1433
|
+
);
|
|
1219
1434
|
const contentAttr =
|
|
1220
1435
|
httpEquiv !== 0 &&
|
|
1221
|
-
|
|
1222
|
-
path.
|
|
1223
|
-
true
|
|
1224
|
-
).toLowerCase() === "content-type"
|
|
1225
|
-
? path.findAttribute("content")
|
|
1436
|
+
path.value(httpEquiv).toLowerCase() === "content-type"
|
|
1437
|
+
? path.fieldNamed(Field.attributes, "content")
|
|
1226
1438
|
: 0;
|
|
1227
1439
|
if (
|
|
1228
1440
|
contentAttr !== 0 &&
|
|
1229
1441
|
CHARSET_DECLARATION_REGEXP.test(
|
|
1230
|
-
|
|
1231
|
-
path.attributeValue(contentAttr),
|
|
1232
|
-
true
|
|
1233
|
-
)
|
|
1442
|
+
path.value(contentAttr)
|
|
1234
1443
|
)
|
|
1235
1444
|
) {
|
|
1236
|
-
headCharsetEnd = path.
|
|
1445
|
+
headCharsetEnd = path.startOf(
|
|
1446
|
+
Part.content,
|
|
1447
|
+
path.node
|
|
1448
|
+
);
|
|
1237
1449
|
}
|
|
1238
1450
|
}
|
|
1239
|
-
const nameAttr = path.
|
|
1240
|
-
|
|
1451
|
+
const nameAttr = path.fieldNamed(
|
|
1452
|
+
Field.attributes,
|
|
1453
|
+
"name"
|
|
1454
|
+
);
|
|
1455
|
+
const propertyAttr = path.fieldNamed(
|
|
1456
|
+
Field.attributes,
|
|
1457
|
+
"property"
|
|
1458
|
+
);
|
|
1241
1459
|
if (nameAttr !== 0 || propertyAttr !== 0) {
|
|
1242
1460
|
if (headMetaNames === undefined) {
|
|
1243
1461
|
headMetaNames = new Set();
|
|
1244
1462
|
}
|
|
1245
1463
|
if (nameAttr !== 0) {
|
|
1246
|
-
headMetaNames.add(
|
|
1247
|
-
decodeEntities(
|
|
1248
|
-
path.attributeValue(nameAttr),
|
|
1249
|
-
true
|
|
1250
|
-
).toLowerCase()
|
|
1251
|
-
);
|
|
1464
|
+
headMetaNames.add(path.value(nameAttr).toLowerCase());
|
|
1252
1465
|
}
|
|
1253
1466
|
if (propertyAttr !== 0) {
|
|
1254
1467
|
headMetaNames.add(
|
|
1255
|
-
|
|
1256
|
-
path.attributeValue(propertyAttr),
|
|
1257
|
-
true
|
|
1258
|
-
).toLowerCase()
|
|
1468
|
+
path.value(propertyAttr).toLowerCase()
|
|
1259
1469
|
);
|
|
1260
1470
|
}
|
|
1261
1471
|
}
|
|
@@ -1265,23 +1475,22 @@ class HtmlParser extends Parser {
|
|
|
1265
1475
|
headTemplateDepth++;
|
|
1266
1476
|
break;
|
|
1267
1477
|
}
|
|
1268
|
-
} else if (
|
|
1269
|
-
name === "template" &&
|
|
1270
|
-
path.namespace() === NS_HTML
|
|
1271
|
-
) {
|
|
1478
|
+
} else if (name === "template" && isHtmlElement(path)) {
|
|
1272
1479
|
headTemplateDepth++;
|
|
1273
1480
|
}
|
|
1274
|
-
if (path.end() > headLastEnd)
|
|
1275
|
-
|
|
1481
|
+
if (path.end(path.node) > headLastEnd) {
|
|
1482
|
+
headLastEnd = path.end(path.node);
|
|
1483
|
+
}
|
|
1484
|
+
} else if (!headSeen && isHtmlElement(path)) {
|
|
1276
1485
|
if (name === "html") {
|
|
1277
|
-
htmlTagEnd = path.
|
|
1486
|
+
htmlTagEnd = path.startOf(Part.content, path.node);
|
|
1278
1487
|
} else if (name === "head") {
|
|
1279
1488
|
headSeen = true;
|
|
1280
1489
|
inHead = true;
|
|
1281
1490
|
// explicit head has real offsets; an implicit one (head
|
|
1282
1491
|
// tags are optional in HTML5) anchors after `<html>`,
|
|
1283
1492
|
// the doctype, or the document start
|
|
1284
|
-
const tagEnd = path.
|
|
1493
|
+
const tagEnd = path.startOf(Part.content, path.node);
|
|
1285
1494
|
headStart =
|
|
1286
1495
|
tagEnd > 0
|
|
1287
1496
|
? tagEnd
|
|
@@ -1296,14 +1505,21 @@ class HtmlParser extends Parser {
|
|
|
1296
1505
|
}
|
|
1297
1506
|
|
|
1298
1507
|
if (ignore) {
|
|
1508
|
+
// It stays in the document and runs where it stands, so a run
|
|
1509
|
+
// may not span it either.
|
|
1510
|
+
if (path.name() === "script") {
|
|
1511
|
+
inlineRunEntryName = undefined;
|
|
1512
|
+
inlineRunLeaderDependency = undefined;
|
|
1513
|
+
inlineRunScheduling = undefined;
|
|
1514
|
+
}
|
|
1299
1515
|
return;
|
|
1300
1516
|
}
|
|
1301
1517
|
|
|
1302
|
-
const elementName = path.
|
|
1303
|
-
const attributeCount = path.
|
|
1304
|
-
const elementStart = path.start();
|
|
1305
|
-
const tagEnd = path.
|
|
1306
|
-
const nameEnd = path.
|
|
1518
|
+
const elementName = path.name();
|
|
1519
|
+
const attributeCount = path.fieldCount(Field.attributes);
|
|
1520
|
+
const elementStart = path.start(path.node);
|
|
1521
|
+
const tagEnd = path.startOf(Part.content, path.node);
|
|
1522
|
+
const nameEnd = path.endOf(Part.name, path.node);
|
|
1307
1523
|
|
|
1308
1524
|
// The first `<base href>` freezes the base for later URLs — but
|
|
1309
1525
|
// only one in the real document tree, not inside an inert
|
|
@@ -1312,9 +1528,9 @@ class HtmlParser extends Parser {
|
|
|
1312
1528
|
documentBase === undefined &&
|
|
1313
1529
|
templateDepth === 0 &&
|
|
1314
1530
|
elementName === "base" &&
|
|
1315
|
-
path
|
|
1531
|
+
isHtmlElement(path)
|
|
1316
1532
|
) {
|
|
1317
|
-
const hrefAttr = path.
|
|
1533
|
+
const hrefAttr = path.fieldNamed(Field.attributes, "href");
|
|
1318
1534
|
if (hrefAttr !== 0) resolveDocumentBase(path, hrefAttr);
|
|
1319
1535
|
}
|
|
1320
1536
|
|
|
@@ -1342,7 +1558,7 @@ class HtmlParser extends Parser {
|
|
|
1342
1558
|
let start;
|
|
1343
1559
|
/** @type {number} */
|
|
1344
1560
|
let end;
|
|
1345
|
-
/** @type {import("./syntax").HtmlAttributeRef} */
|
|
1561
|
+
/** @type {import("./syntax-parser").HtmlAttributeRef} */
|
|
1346
1562
|
let attr = 0;
|
|
1347
1563
|
if (content) {
|
|
1348
1564
|
if (!bodyItem) continue;
|
|
@@ -1352,7 +1568,7 @@ class HtmlParser extends Parser {
|
|
|
1352
1568
|
// `skip.text` drops the body `Text` node; the raw content
|
|
1353
1569
|
// span is [`tagEnd`, `contentEnd`] on the element.
|
|
1354
1570
|
const bodyStart = tagEnd;
|
|
1355
|
-
const bodyEnd = path.
|
|
1571
|
+
const bodyEnd = path.endOf(Part.content, path.node);
|
|
1356
1572
|
if (bodyEnd <= bodyStart) continue;
|
|
1357
1573
|
value = source.slice(bodyStart, bodyEnd);
|
|
1358
1574
|
if (value.trim() === "") continue;
|
|
@@ -1363,20 +1579,19 @@ class HtmlParser extends Parser {
|
|
|
1363
1579
|
? bodyItem.type(getAttributesMap(), css)
|
|
1364
1580
|
: bodyItem.type;
|
|
1365
1581
|
} else {
|
|
1366
|
-
attr = path.
|
|
1367
|
-
const item = sources[path.
|
|
1582
|
+
attr = path.field(i, Field.attributes);
|
|
1583
|
+
const item = sources[path.name(attr)];
|
|
1368
1584
|
if (!item) continue;
|
|
1369
1585
|
if (
|
|
1370
1586
|
item.namespace !== undefined &&
|
|
1371
|
-
path.
|
|
1587
|
+
!path.flag(item.namespace)
|
|
1372
1588
|
) {
|
|
1373
1589
|
continue;
|
|
1374
1590
|
}
|
|
1375
1591
|
// Adoption-agency clones carry no offsets; skip blank values.
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
value = path.attributeValue(attr);
|
|
1592
|
+
const valueStart = path.startOf(Part.value, attr);
|
|
1593
|
+
if (valueStart === -1) continue;
|
|
1594
|
+
value = path.source(valueStart, path.endOf(Part.value, attr));
|
|
1380
1595
|
if (!value || !/\S/.test(value)) continue;
|
|
1381
1596
|
const filter = item.filter;
|
|
1382
1597
|
if (filter) {
|
|
@@ -1387,8 +1602,8 @@ class HtmlParser extends Parser {
|
|
|
1387
1602
|
: value;
|
|
1388
1603
|
if (!filter(getAttributesMap(), decoded)) continue;
|
|
1389
1604
|
}
|
|
1390
|
-
start =
|
|
1391
|
-
end = path.
|
|
1605
|
+
start = valueStart;
|
|
1606
|
+
end = path.endOf(Part.value, attr);
|
|
1392
1607
|
type =
|
|
1393
1608
|
typeof item.type === "function"
|
|
1394
1609
|
? item.type(getAttributesMap(), css)
|
|
@@ -1397,19 +1612,35 @@ class HtmlParser extends Parser {
|
|
|
1397
1612
|
// A resolved `type` selects the parse algorithm and the dependency
|
|
1398
1613
|
// kind — the only dispatch in the parser.
|
|
1399
1614
|
switch (type) {
|
|
1400
|
-
// Inline CSS — a `<style>` body (
|
|
1615
|
+
// Inline CSS — a `<style>` body (a full stylesheet) or an
|
|
1401
1616
|
// attribute value (decoded, re-escaped on write-back; `*-attribute`
|
|
1402
1617
|
// is a declaration list). Needs `experiments.css`.
|
|
1403
1618
|
case "stylesheet-style":
|
|
1404
1619
|
case "stylesheet-style-attribute": {
|
|
1405
1620
|
if (!css) break;
|
|
1406
|
-
|
|
1621
|
+
// WHY: an HTML `<style>` body is raw text, so its source is its
|
|
1622
|
+
// text. The same element in a foreign subtree holds character
|
|
1623
|
+
// data, where `.a` is the selector `.a` — so the sheet has
|
|
1624
|
+
// to be decoded going in and escaped coming back out, which is
|
|
1625
|
+
// what `characterData` tells the write-back.
|
|
1626
|
+
const characterData = content && !isHtmlElement(path);
|
|
1627
|
+
// A page webpack emitted is one it can be pointed at again,
|
|
1628
|
+
// where a sheet arrives headed by the module the last build
|
|
1629
|
+
// read it as. That header was that build's; this writes its own.
|
|
1630
|
+
const cssText = ModuleInfoHeaderPlugin.stripHeaders(
|
|
1631
|
+
content
|
|
1632
|
+
? characterData
|
|
1633
|
+
? decodeEntities(value, false)
|
|
1634
|
+
: value
|
|
1635
|
+
: decodeEntities(value, true)
|
|
1636
|
+
);
|
|
1407
1637
|
if (cssText.trim() === "") break;
|
|
1408
1638
|
const dep = new HtmlInlineStyleDependency(
|
|
1409
1639
|
dataUri("text/css", cssText),
|
|
1410
1640
|
[start, end],
|
|
1411
1641
|
content ? false : type === "stylesheet-style-attribute",
|
|
1412
|
-
!content
|
|
1642
|
+
!content,
|
|
1643
|
+
characterData
|
|
1413
1644
|
);
|
|
1414
1645
|
setLoc(dep, start, end);
|
|
1415
1646
|
module.addDependency(dep);
|
|
@@ -1445,25 +1676,101 @@ class HtmlParser extends Parser {
|
|
|
1445
1676
|
if (content) {
|
|
1446
1677
|
const scriptType =
|
|
1447
1678
|
/** @type {"script" | "script-module"} */ (type);
|
|
1448
|
-
|
|
1679
|
+
// WHY: an HTML `<script>` body is raw text, so its source
|
|
1680
|
+
// is its text. The same element in a foreign subtree holds
|
|
1681
|
+
// character data, where a character reference stands for
|
|
1682
|
+
// what it names — `1 < 2` is `1 < 2` there, but reads
|
|
1683
|
+
// as `1 & lt < 2` when taken as written. Character data
|
|
1684
|
+
// also decodes `©=1`, which an attribute keeps whole.
|
|
1685
|
+
const scriptText = isHtmlElement(path)
|
|
1686
|
+
? value
|
|
1687
|
+
: decodeEntities(value, false);
|
|
1688
|
+
const request = dataUri("text/javascript", scriptText);
|
|
1449
1689
|
const index = nextEntryIndex++;
|
|
1450
|
-
|
|
1690
|
+
// Module output upgrades a classic tag, so every extracted
|
|
1691
|
+
// tag defers; without it the authored kind parts the run.
|
|
1692
|
+
const scheduling = outputModule ? "deferred" : scriptType;
|
|
1693
|
+
// `async` fires whenever it loads and a `<template>` body never
|
|
1694
|
+
// does, so neither joins — and only a deferred run spans markup.
|
|
1695
|
+
const joinsRun =
|
|
1696
|
+
templateDepth === 0 &&
|
|
1697
|
+
path.fieldNamed(Field.attributes, "async") === 0 &&
|
|
1698
|
+
(outputModule ||
|
|
1699
|
+
inlineRunEntryName === undefined ||
|
|
1700
|
+
isEmptyRunGap(source, inlineRunEnd, elementStart));
|
|
1701
|
+
/** @type {Range | undefined} */
|
|
1702
|
+
let removeRange;
|
|
1703
|
+
/** @type {string} */
|
|
1704
|
+
let entryName;
|
|
1705
|
+
if (joinsRun) {
|
|
1706
|
+
// A tag the page named leads a run of its own rather than
|
|
1707
|
+
// joining one, so the name covers what follows it.
|
|
1708
|
+
if (
|
|
1709
|
+
chunkName !== undefined ||
|
|
1710
|
+
inlineRunEntryName === undefined ||
|
|
1711
|
+
inlineRunScheduling !== scheduling
|
|
1712
|
+
) {
|
|
1713
|
+
entryName = entryNameFor(
|
|
1714
|
+
chunkName,
|
|
1715
|
+
request,
|
|
1716
|
+
index,
|
|
1717
|
+
scriptType
|
|
1718
|
+
);
|
|
1719
|
+
inlineRunEntryName = entryName;
|
|
1720
|
+
inlineRunScheduling = scheduling;
|
|
1721
|
+
} else {
|
|
1722
|
+
entryName = inlineRunEntryName;
|
|
1723
|
+
// The body rides in the run's chunk already, so the
|
|
1724
|
+
// element goes rather than gaining a `src`.
|
|
1725
|
+
removeRange = [
|
|
1726
|
+
elementStart,
|
|
1727
|
+
rawTextElementEnd(source, end)
|
|
1728
|
+
];
|
|
1729
|
+
}
|
|
1730
|
+
inlineRunTag = elementStart;
|
|
1731
|
+
inlineRunEnd = rawTextElementEnd(source, end);
|
|
1732
|
+
} else {
|
|
1733
|
+
entryName = entryNameFor(
|
|
1734
|
+
chunkName,
|
|
1735
|
+
request,
|
|
1736
|
+
index,
|
|
1737
|
+
scriptType
|
|
1738
|
+
);
|
|
1739
|
+
}
|
|
1451
1740
|
const dep = new HtmlInlineScriptDependency(
|
|
1452
1741
|
request,
|
|
1453
1742
|
nameEnd,
|
|
1454
1743
|
[start, end],
|
|
1455
1744
|
entryName,
|
|
1456
|
-
scriptType === "script-module" ? "esm" : "commonjs"
|
|
1745
|
+
scriptType === "script-module" ? "esm" : "commonjs",
|
|
1746
|
+
removeRange,
|
|
1747
|
+
forceInline
|
|
1457
1748
|
);
|
|
1749
|
+
if (joinsRun) {
|
|
1750
|
+
if (removeRange === undefined) {
|
|
1751
|
+
inlineRunLeaderDependency = dep;
|
|
1752
|
+
} else if (
|
|
1753
|
+
forceInline &&
|
|
1754
|
+
inlineRunLeaderDependency !== undefined
|
|
1755
|
+
) {
|
|
1756
|
+
// A run is one chunk, so a tag asking to be written
|
|
1757
|
+
// into the page asks it of the whole run.
|
|
1758
|
+
inlineRunLeaderDependency.forceInline = true;
|
|
1759
|
+
}
|
|
1760
|
+
}
|
|
1458
1761
|
setLoc(dep, start, end);
|
|
1459
1762
|
module.addPresentationalDependency(dep);
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1763
|
+
// A dropped tag is not rewritten: an edit inside the
|
|
1764
|
+
// removed range would survive it as loose text.
|
|
1765
|
+
if (removeRange === undefined) {
|
|
1766
|
+
reconcileScriptTypeAttr(
|
|
1767
|
+
path,
|
|
1768
|
+
path.fieldNamed(Field.attributes, "type"),
|
|
1769
|
+
nameEnd,
|
|
1770
|
+
scriptType,
|
|
1771
|
+
source
|
|
1772
|
+
);
|
|
1773
|
+
}
|
|
1467
1774
|
(scriptType === "script"
|
|
1468
1775
|
? scriptEntries
|
|
1469
1776
|
: scriptModuleEntries
|
|
@@ -1471,7 +1778,8 @@ class HtmlParser extends Parser {
|
|
|
1471
1778
|
request,
|
|
1472
1779
|
entryName,
|
|
1473
1780
|
index,
|
|
1474
|
-
type: scriptType
|
|
1781
|
+
type: scriptType,
|
|
1782
|
+
chunkName: requestedFileName(entryName)
|
|
1475
1783
|
});
|
|
1476
1784
|
break;
|
|
1477
1785
|
}
|
|
@@ -1514,7 +1822,7 @@ class HtmlParser extends Parser {
|
|
|
1514
1822
|
new (getModuleDependencyError())(
|
|
1515
1823
|
module,
|
|
1516
1824
|
new WebpackError(
|
|
1517
|
-
`Bad value for attribute "${path.
|
|
1825
|
+
`Bad value for attribute "${path.name(
|
|
1518
1826
|
attr
|
|
1519
1827
|
)}" on element "${elementName}": ${
|
|
1520
1828
|
/** @type {Error} */ (err).message
|
|
@@ -1551,7 +1859,12 @@ class HtmlParser extends Parser {
|
|
|
1551
1859
|
// emitting no siblings. Independent, like an entry point.
|
|
1552
1860
|
if (type === "html") {
|
|
1553
1861
|
const index = nextEntryIndex++;
|
|
1554
|
-
const entryName =
|
|
1862
|
+
const entryName = entryNameFor(
|
|
1863
|
+
chunkName,
|
|
1864
|
+
request,
|
|
1865
|
+
index,
|
|
1866
|
+
"html"
|
|
1867
|
+
);
|
|
1555
1868
|
const dep = new HtmlEntryDependency(
|
|
1556
1869
|
request,
|
|
1557
1870
|
[s, e],
|
|
@@ -1561,7 +1874,13 @@ class HtmlParser extends Parser {
|
|
|
1561
1874
|
);
|
|
1562
1875
|
setLoc(dep, s, e);
|
|
1563
1876
|
module.addPresentationalDependency(dep);
|
|
1564
|
-
htmlLinkEntries.push({
|
|
1877
|
+
htmlLinkEntries.push({
|
|
1878
|
+
request,
|
|
1879
|
+
entryName,
|
|
1880
|
+
index,
|
|
1881
|
+
type,
|
|
1882
|
+
chunkName: requestedFileName(entryName)
|
|
1883
|
+
});
|
|
1565
1884
|
continue;
|
|
1566
1885
|
}
|
|
1567
1886
|
// `rel="preload"/"prefetch"` of a bundled resource: an independent,
|
|
@@ -1573,7 +1892,12 @@ class HtmlParser extends Parser {
|
|
|
1573
1892
|
? as.trim().toLowerCase() === "style"
|
|
1574
1893
|
: false;
|
|
1575
1894
|
const index = nextEntryIndex++;
|
|
1576
|
-
const entryName =
|
|
1895
|
+
const entryName = entryNameFor(
|
|
1896
|
+
chunkName,
|
|
1897
|
+
request,
|
|
1898
|
+
index,
|
|
1899
|
+
type
|
|
1900
|
+
);
|
|
1577
1901
|
// Tag metadata letting the template mirror `crossorigin` and
|
|
1578
1902
|
// `integrity` onto a native `preload` `<link>`. `prefetch` is not
|
|
1579
1903
|
// integrity-eligible per the SRI spec, so its is left uncaptured.
|
|
@@ -1589,7 +1913,9 @@ class HtmlParser extends Parser {
|
|
|
1589
1913
|
isNativeLink,
|
|
1590
1914
|
"",
|
|
1591
1915
|
nameEnd,
|
|
1592
|
-
isNativeLink &&
|
|
1916
|
+
isNativeLink &&
|
|
1917
|
+
path.fieldNamed(Field.attributes, "crossorigin") !==
|
|
1918
|
+
0,
|
|
1593
1919
|
-1,
|
|
1594
1920
|
type === "preload" && isNativeLink
|
|
1595
1921
|
? captureIntegrityRange(path, source, elementStart)
|
|
@@ -1606,7 +1932,8 @@ class HtmlParser extends Parser {
|
|
|
1606
1932
|
entryName,
|
|
1607
1933
|
index,
|
|
1608
1934
|
type,
|
|
1609
|
-
css: asStyle
|
|
1935
|
+
css: asStyle,
|
|
1936
|
+
chunkName: requestedFileName(entryName)
|
|
1610
1937
|
});
|
|
1611
1938
|
continue;
|
|
1612
1939
|
}
|
|
@@ -1620,7 +1947,12 @@ class HtmlParser extends Parser {
|
|
|
1620
1947
|
type === "stylesheet"
|
|
1621
1948
|
) {
|
|
1622
1949
|
const index = nextEntryIndex++;
|
|
1623
|
-
const entryName =
|
|
1950
|
+
const entryName = entryNameFor(
|
|
1951
|
+
chunkName,
|
|
1952
|
+
request,
|
|
1953
|
+
index,
|
|
1954
|
+
type
|
|
1955
|
+
);
|
|
1624
1956
|
const willBeModuleScript =
|
|
1625
1957
|
type === "script-module" ||
|
|
1626
1958
|
(outputModule && type === "script");
|
|
@@ -1651,7 +1983,10 @@ class HtmlParser extends Parser {
|
|
|
1651
1983
|
let hasOwnCrossOrigin = false;
|
|
1652
1984
|
if (elementStart >= 0) {
|
|
1653
1985
|
for (const copyableName of COPYABLE_SIBLING_ATTRS) {
|
|
1654
|
-
const copyableAttr = path.
|
|
1986
|
+
const copyableAttr = path.fieldNamed(
|
|
1987
|
+
Field.attributes,
|
|
1988
|
+
copyableName
|
|
1989
|
+
);
|
|
1655
1990
|
if (copyableAttr !== 0) {
|
|
1656
1991
|
copyableAttrsText += attrSourceSpan(
|
|
1657
1992
|
path,
|
|
@@ -1672,8 +2007,8 @@ class HtmlParser extends Parser {
|
|
|
1672
2007
|
(type === "script" || type === "script-module") &&
|
|
1673
2008
|
!outputModule &&
|
|
1674
2009
|
(elementName !== nativeTag ||
|
|
1675
|
-
(path.
|
|
1676
|
-
path.
|
|
2010
|
+
(path.fieldNamed(Field.attributes, "defer") === 0 &&
|
|
2011
|
+
path.fieldNamed(Field.attributes, "async") === 0))
|
|
1677
2012
|
) {
|
|
1678
2013
|
firstBlockingScriptStart = elementStart;
|
|
1679
2014
|
}
|
|
@@ -1691,14 +2026,17 @@ class HtmlParser extends Parser {
|
|
|
1691
2026
|
elementName === nativeTag &&
|
|
1692
2027
|
elementKind === "script-module"
|
|
1693
2028
|
) {
|
|
1694
|
-
const typeAttr = path.
|
|
2029
|
+
const typeAttr = path.fieldNamed(
|
|
2030
|
+
Field.attributes,
|
|
2031
|
+
"type"
|
|
2032
|
+
);
|
|
1695
2033
|
if (
|
|
1696
2034
|
typeAttr !== 0 &&
|
|
1697
|
-
path.
|
|
2035
|
+
path.startOf(Part.value, typeAttr) >= 0
|
|
1698
2036
|
) {
|
|
1699
2037
|
typeValueRange = [
|
|
1700
|
-
path.
|
|
1701
|
-
path.
|
|
2038
|
+
path.startOf(Part.value, typeAttr) - elementStart,
|
|
2039
|
+
path.endOf(Part.value, typeAttr) - elementStart
|
|
1702
2040
|
];
|
|
1703
2041
|
}
|
|
1704
2042
|
}
|
|
@@ -1729,7 +2067,7 @@ class HtmlParser extends Parser {
|
|
|
1729
2067
|
) {
|
|
1730
2068
|
reconcileScriptTypeAttr(
|
|
1731
2069
|
path,
|
|
1732
|
-
path.
|
|
2070
|
+
path.fieldNamed(Field.attributes, "type"),
|
|
1733
2071
|
nameEnd,
|
|
1734
2072
|
type,
|
|
1735
2073
|
source
|
|
@@ -1742,7 +2080,13 @@ class HtmlParser extends Parser {
|
|
|
1742
2080
|
: type === "stylesheet"
|
|
1743
2081
|
? stylesheetEntries
|
|
1744
2082
|
: modulePreloadEntries
|
|
1745
|
-
).push({
|
|
2083
|
+
).push({
|
|
2084
|
+
request,
|
|
2085
|
+
entryName,
|
|
2086
|
+
index,
|
|
2087
|
+
type,
|
|
2088
|
+
chunkName: requestedFileName(entryName)
|
|
2089
|
+
});
|
|
1746
2090
|
} else {
|
|
1747
2091
|
const dep = new HtmlSourceDependency(request, [s, e]);
|
|
1748
2092
|
ResourceHintPlugin.applyDefaults(
|
|
@@ -1764,10 +2108,17 @@ class HtmlParser extends Parser {
|
|
|
1764
2108
|
}
|
|
1765
2109
|
}
|
|
1766
2110
|
}
|
|
2111
|
+
// A `<script>` that joined no run ends the open one: the chunk runs
|
|
2112
|
+
// where its first tag stands, so nothing may execute in between.
|
|
2113
|
+
if (elementName === "script" && inlineRunTag !== elementStart) {
|
|
2114
|
+
inlineRunEntryName = undefined;
|
|
2115
|
+
inlineRunLeaderDependency = undefined;
|
|
2116
|
+
inlineRunScheduling = undefined;
|
|
2117
|
+
}
|
|
1767
2118
|
},
|
|
1768
2119
|
exit: (path) => {
|
|
1769
|
-
if (path
|
|
1770
|
-
const name = path.
|
|
2120
|
+
if (isHtmlElement(path)) {
|
|
2121
|
+
const name = path.name();
|
|
1771
2122
|
if (name === "template") {
|
|
1772
2123
|
if (templateDepth > 0) templateDepth--;
|
|
1773
2124
|
if (headTemplateDepth > 0) headTemplateDepth--;
|
|
@@ -1777,6 +2128,7 @@ class HtmlParser extends Parser {
|
|
|
1777
2128
|
}
|
|
1778
2129
|
pendingWebpackIgnore = undefined;
|
|
1779
2130
|
pendingWebpackInline = undefined;
|
|
2131
|
+
pendingWebpackChunkName = undefined;
|
|
1780
2132
|
pendingHints = undefined;
|
|
1781
2133
|
}
|
|
1782
2134
|
}
|
|
@@ -1835,7 +2187,7 @@ class HtmlParser extends Parser {
|
|
|
1835
2187
|
}
|
|
1836
2188
|
}
|
|
1837
2189
|
|
|
1838
|
-
const buildInfo =
|
|
2190
|
+
const buildInfo = module.buildInfo;
|
|
1839
2191
|
buildInfo.strict = true;
|
|
1840
2192
|
if (baseUrlPrefix !== undefined) buildInfo.baseUrlPrefix = baseUrlPrefix;
|
|
1841
2193
|
// WHY: hand the collected entries to HtmlModulesPlugin, which creates the
|
|
@@ -1864,8 +2216,7 @@ class HtmlParser extends Parser {
|
|
|
1864
2216
|
};
|
|
1865
2217
|
}
|
|
1866
2218
|
|
|
1867
|
-
|
|
1868
|
-
buildMeta.exportsType = "default";
|
|
2219
|
+
module.buildMeta.exportsType = "default";
|
|
1869
2220
|
|
|
1870
2221
|
state.module.addDependency(new StaticExportsDependency(["default"], true));
|
|
1871
2222
|
|