@depup/webpack 5.111.1-depup.1 → 5.112.0-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -7
- package/changes.json +3 -15
- package/lib/Chunk.js +3 -966
- package/lib/Compilation.js +224 -106
- package/lib/Compiler.js +19 -19
- 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 +8 -8
- package/lib/asset/AssetBytesParser.js +3 -3
- package/lib/asset/AssetGenerator.js +36 -22
- package/lib/asset/AssetModule.js +2 -2
- package/lib/asset/AssetModulesPlugin.js +6 -9
- package/lib/asset/AssetParser.js +3 -3
- package/lib/asset/AssetSourceGenerator.js +8 -8
- package/lib/asset/AssetSourceParser.js +3 -3
- package/lib/asset/RawDataUrlModule.js +17 -10
- package/lib/asset/WebManifestGenerator.js +7 -7
- package/lib/asset/WebManifestParser.js +5 -5
- package/lib/async-modules/AsyncModuleHelpers.js +6 -5
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +4 -3
- package/lib/async-modules/isGeneratorLowered.js +3 -3
- package/lib/bun/BunTargetPlugin.js +1 -1
- package/lib/cache/AddBuildDependenciesPlugin.js +2 -19
- package/lib/{Cache.js → cache/Cache.js} +1 -1
- package/lib/{CacheFacade.js → cache/CacheFacade.js} +5 -5
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/MemoryCachePlugin.js +2 -2
- package/lib/cache/MemoryWithGcCachePlugin.js +2 -2
- package/lib/cache/PackFileCacheStrategy.js +8 -10
- package/lib/cache/ResolverCachePlugin.js +8 -4
- package/lib/cache/mergeEtags.js +1 -1
- package/lib/{OptionsApply.js → config/OptionsApply.js} +3 -3
- package/lib/{PlatformPlugin.js → config/PlatformPlugin.js} +2 -2
- package/lib/{WebpackOptionsApply.js → config/WebpackOptionsApply.js} +217 -200
- package/lib/{WebpackOptionsDefaulter.js → config/WebpackOptionsDefaulter.js} +3 -3
- package/lib/config/browserslistTargetHandler.js +1 -1
- package/lib/{cli.js → config/cli.js} +5 -158
- package/lib/config/defaults.js +144 -48
- package/lib/config/getClaimedAssetTypes.js +21 -13
- package/lib/config/normalization.js +18 -7
- package/lib/config/target.js +10 -0
- 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 +36 -25
- package/lib/context/ContextModuleFactory.js +13 -10
- package/lib/context/ContextReplacementPlugin.js +3 -3
- package/lib/css/CssGenerator.js +38 -31
- package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
- package/lib/css/CssLoadingRuntimeModule.js +77 -44
- package/lib/css/CssModule.js +27 -29
- package/lib/css/CssModulesPlugin.js +128 -44
- package/lib/css/CssParser.js +682 -291
- package/lib/css/CssServerStylesRuntimeModule.js +3 -3
- package/lib/css/cssMinify.js +110 -37
- package/lib/css/data.js +6985 -5125
- package/lib/css/syntax-parser.js +19873 -0
- package/lib/css/syntax-printer.js +6037 -0
- package/lib/css/syntax.js +37 -18686
- package/lib/debug/ProfilingPlugin.js +52 -19
- package/lib/{DefinePlugin.js → define/DefinePlugin.js} +407 -41
- package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +9 -9
- package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +2 -2
- package/lib/deno/DenoTargetPlugin.js +1 -1
- package/lib/dependencies/ConstDependency.js +3 -120
- package/lib/dependencies/ContextElementDependency.js +5 -172
- package/lib/dependencies/NullDependency.js +3 -37
- package/lib/dependencies/{AMDDefineDependency.js → amd/AMDDefineDependency.js} +12 -11
- package/lib/dependencies/{AMDDefineDependencyParserPlugin.js → amd/AMDDefineDependencyParserPlugin.js} +10 -10
- package/lib/dependencies/{AMDPlugin.js → amd/AMDPlugin.js} +11 -11
- package/lib/dependencies/{AMDRequireArrayDependency.js → amd/AMDRequireArrayDependency.js} +15 -13
- package/lib/dependencies/{AMDRequireContextDependency.js → amd/AMDRequireContextDependency.js} +11 -10
- package/lib/dependencies/{AMDRequireDependenciesBlock.js → amd/AMDRequireDependenciesBlock.js} +7 -6
- package/lib/dependencies/{AMDRequireDependenciesBlockParserPlugin.js → amd/AMDRequireDependenciesBlockParserPlugin.js} +10 -10
- package/lib/dependencies/{AMDRequireDependency.js → amd/AMDRequireDependency.js} +13 -12
- package/lib/dependencies/{AMDRequireItemDependency.js → amd/AMDRequireItemDependency.js} +8 -7
- package/lib/dependencies/{AMDRuntimeModules.js → amd/AMDRuntimeModules.js} +3 -3
- package/lib/dependencies/{LocalModule.js → amd/LocalModule.js} +8 -4
- package/lib/dependencies/{LocalModuleDependency.js → amd/LocalModuleDependency.js} +17 -10
- package/lib/dependencies/{LocalModulesHelpers.js → amd/LocalModulesHelpers.js} +1 -1
- package/lib/dependencies/{RequireJsStuffPlugin.js → amd/RequireJsStuffPlugin.js} +9 -9
- package/lib/dependencies/{UnsupportedDependency.js → amd/UnsupportedDependency.js} +11 -10
- package/lib/dependencies/{CommonJsDependencyHelpers.js → commonjs/CommonJsDependencyHelpers.js} +8 -9
- package/lib/dependencies/{CommonJsExportRequireDependency.js → commonjs/CommonJsExportRequireDependency.js} +166 -33
- package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
- package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +138 -61
- package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
- package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +35 -30
- package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +13 -12
- package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +47 -35
- package/lib/dependencies/{CommonJsRequireContextDependency.js → commonjs/CommonJsRequireContextDependency.js} +15 -14
- package/lib/dependencies/{CommonJsRequireDependency.js → commonjs/CommonJsRequireDependency.js} +33 -25
- package/lib/dependencies/{CommonJsSelfReferenceDependency.js → commonjs/CommonJsSelfReferenceDependency.js} +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} +5 -5
- package/lib/dependencies/{RequireEnsureDependency.js → commonjs/RequireEnsureDependency.js} +13 -12
- package/lib/dependencies/{RequireEnsureItemDependency.js → commonjs/RequireEnsureItemDependency.js} +7 -6
- package/lib/dependencies/{RequireEnsurePlugin.js → commonjs/RequireEnsurePlugin.js} +8 -8
- package/lib/dependencies/{RequireHeaderDependency.js → commonjs/RequireHeaderDependency.js} +14 -13
- package/lib/dependencies/{RequireIncludeDependency.js → commonjs/RequireIncludeDependency.js} +13 -12
- package/lib/dependencies/{RequireIncludeDependencyParserPlugin.js → commonjs/RequireIncludeDependencyParserPlugin.js} +3 -27
- package/lib/dependencies/{RequireIncludePlugin.js → commonjs/RequireIncludePlugin.js} +4 -4
- package/lib/dependencies/{RequireResolveContextDependency.js → commonjs/RequireResolveContextDependency.js} +11 -10
- package/lib/dependencies/{RequireResolveDependency.js → commonjs/RequireResolveDependency.js} +12 -11
- package/lib/dependencies/{RequireResolveHeaderDependency.js → commonjs/RequireResolveHeaderDependency.js} +13 -12
- package/lib/dependencies/commonjs/TopLevelThisParserPlugin.js +59 -0
- package/lib/dependencies/{ContextDependency.js → context/ContextDependency.js} +15 -14
- package/lib/dependencies/{ContextDependencyHelpers.js → context/ContextDependencyHelpers.js} +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} +9 -9
- package/lib/dependencies/{ImportMetaContextPlugin.js → context/ImportMetaContextPlugin.js} +5 -5
- package/lib/dependencies/{ImportMetaGlobDependency.js → context/ImportMetaGlobDependency.js} +7 -6
- package/lib/dependencies/{ImportMetaGlobDependencyParserPlugin.js → context/ImportMetaGlobDependencyParserPlugin.js} +4 -4
- package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +9 -9
- package/lib/dependencies/{RequireContextDependency.js → context/RequireContextDependency.js} +7 -6
- package/lib/dependencies/{RequireContextDependencyParserPlugin.js → context/RequireContextDependencyParserPlugin.js} +2 -2
- package/lib/dependencies/{RequireContextPlugin.js → context/RequireContextPlugin.js} +5 -5
- package/lib/dependencies/{CachedConstDependency.js → core/CachedConstDependency.js} +12 -11
- package/lib/dependencies/core/ConstDependency.js +131 -0
- package/lib/dependencies/{ImportPhase.js → core/ImportPhase.js} +5 -4
- package/lib/dependencies/{ModuleDependency.js → core/ModuleDependency.js} +10 -7
- package/lib/dependencies/{ModuleDependencyTemplateAsId.js → core/ModuleDependencyTemplateAsId.js} +3 -3
- package/lib/dependencies/{ModuleDependencyTemplateAsRequireId.js → core/ModuleDependencyTemplateAsRequireId.js} +2 -2
- package/lib/dependencies/{ModuleInitFragmentDependency.js → core/ModuleInitFragmentDependency.js} +10 -9
- package/lib/dependencies/core/NullDependency.js +44 -0
- package/lib/dependencies/{RuntimeRequirementsDependency.js → core/RuntimeRequirementsDependency.js} +10 -9
- package/lib/dependencies/{StaticExportsDependency.js → core/StaticExportsDependency.js} +15 -8
- package/lib/dependencies/{CssIcssExportDependency.js → css/CssIcssExportDependency.js} +369 -92
- package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +23 -16
- 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} +23 -16
- 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} +19 -17
- 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} +133 -118
- package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +48 -30
- package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +60 -36
- package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -4
- package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
- package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +74 -71
- package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +99 -84
- package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +26 -29
- package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +83 -39
- package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +94 -59
- package/lib/dependencies/esm/ESMModulesPlugin.js +207 -0
- package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
- package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -11
- package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +2 -2
- package/lib/{util → dependencies/helpers}/chainedImports.js +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} +51 -141
- package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -12
- package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +69 -19
- package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +50 -15
- package/lib/dependencies/{HtmlSourceDependency.js → html/HtmlSourceDependency.js} +23 -16
- package/lib/dependencies/{ImportContextDependency.js → import/ImportContextDependency.js} +24 -10
- package/lib/dependencies/{ImportDependency.js → import/ImportDependency.js} +26 -18
- package/lib/dependencies/{ImportEagerDependency.js → import/ImportEagerDependency.js} +18 -10
- package/lib/dependencies/{ImportParserPlugin.js → import/ImportParserPlugin.js} +20 -20
- package/lib/dependencies/{ImportPlugin.js → import/ImportPlugin.js} +4 -4
- package/lib/dependencies/{ImportWeakDependency.js → import/ImportWeakDependency.js} +18 -10
- package/lib/dependencies/{importOptionsCheck.js → import/importOptionsCheck.js} +2 -2
- package/lib/dependencies/{BuildTimeConstDependency.js → import-meta/BuildTimeConstDependency.js} +12 -11
- package/lib/dependencies/{ImportMetaMainDependency.js → import-meta/ImportMetaMainDependency.js} +12 -11
- package/lib/dependencies/{ImportMetaPlugin.js → import-meta/ImportMetaPlugin.js} +119 -98
- 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 +16 -18
- 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} +31 -33
- 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} +154 -26
- package/lib/{util → devtool}/generateDebugId.js +1 -1
- package/lib/{IgnoreWarningsPlugin.js → diagnostics/IgnoreWarningsPlugin.js} +2 -2
- package/lib/{NoEmitOnErrorsPlugin.js → diagnostics/NoEmitOnErrorsPlugin.js} +1 -1
- package/lib/diagnostics/WarnCaseSensitiveModulesPlugin.js +64 -0
- package/lib/{WarnDeprecatedOptionPlugin.js → diagnostics/WarnDeprecatedOptionPlugin.js} +2 -22
- package/lib/diagnostics/WarnNoModeSetPlugin.js +27 -0
- package/lib/dll/DelegatedModule.js +20 -18
- package/lib/dll/DelegatedModuleFactoryPlugin.js +2 -2
- package/lib/dll/DelegatedPlugin.js +1 -1
- package/lib/{dependencies → dll}/DelegatedSourceDependency.js +5 -4
- package/lib/{dependencies → dll}/DllEntryDependency.js +6 -5
- package/lib/dll/DllEntryPlugin.js +3 -3
- package/lib/dll/DllModule.js +11 -9
- package/lib/dll/DllModuleFactory.js +3 -3
- package/lib/dll/DllPlugin.js +18 -6
- package/lib/dll/DllReferencePlugin.js +102 -26
- package/lib/dll/LibManifestPlugin.js +9 -7
- package/lib/electron/ElectronTargetPlugin.js +2 -2
- package/lib/{DynamicEntryPlugin.js → entry/DynamicEntryPlugin.js} +3 -3
- package/lib/{dependencies → entry}/EntryDependency.js +11 -2
- package/lib/{EntryOptionPlugin.js → entry/EntryOptionPlugin.js} +6 -6
- package/lib/entry/EntryPlugin.js +75 -0
- package/lib/{performance → errors}/AssetsOverSizeLimitWarning.js +2 -2
- package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/{WarnCaseSensitiveModulesPlugin.js → errors/CaseSensitiveModulesWarning.js} +4 -56
- package/lib/errors/ChunkRenderError.js +1 -1
- package/lib/errors/CodeGenerationError.js +1 -1
- package/lib/errors/CommentCompilationWarning.js +1 -1
- package/lib/errors/ConflictingEntryExportsWarning.js +38 -0
- package/lib/{dependencies → errors}/CriticalDependencyWarning.js +4 -3
- package/lib/errors/DeprecatedOptionWarning.js +30 -0
- package/lib/errors/DllManifestError.js +26 -0
- package/lib/{performance → errors}/DuplicatePackagesWarning.js +6 -6
- package/lib/{dependencies/HarmonyLinkingError.js → errors/ESMLinkingError.js} +4 -4
- package/lib/{performance → errors}/EntrypointsOverSizeLimitWarning.js +2 -2
- package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
- package/lib/{ErrorHelpers.js → errors/ErrorHelpers.js} +7 -5
- package/lib/errors/ExternalStarReexportError.js +2 -2
- package/lib/{library → errors}/FalseIIFEUmdWarning.js +1 -1
- package/lib/errors/HookWebpackError.js +4 -4
- package/lib/errors/IgnoreErrorModuleFactory.js +3 -3
- package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
- package/lib/{optimize → errors}/MinMaxSizeWarning.js +1 -1
- package/lib/errors/ModuleBuildError.js +1 -1
- package/lib/errors/ModuleDependencyError.js +2 -2
- package/lib/errors/ModuleDependencyWarning.js +2 -2
- package/lib/errors/ModuleError.js +1 -1
- package/lib/errors/ModuleHashingError.js +1 -1
- package/lib/errors/ModuleNotFoundError.js +3 -3
- package/lib/errors/ModuleParseError.js +1 -1
- package/lib/errors/ModuleRestoreError.js +1 -1
- package/lib/errors/ModuleStoreError.js +1 -1
- package/lib/errors/ModuleWarning.js +1 -1
- package/lib/{performance → errors}/NoAsyncChunksWarning.js +1 -1
- package/lib/{WarnNoModeSetPlugin.js → errors/NoModeWarning.js} +2 -19
- package/lib/errors/NodeStuffInWebError.js +7 -2
- package/lib/errors/PathVariableError.js +31 -0
- package/lib/errors/RequireIncludeDeprecationWarning.js +40 -0
- package/lib/{performance → errors}/RuntimeInLargeChunkWarning.js +1 -1
- package/lib/errors/RuntimeModuleGenerationError.js +51 -0
- package/lib/errors/SSRManifestAutoPublicPathWarning.js +24 -0
- package/lib/errors/SystemImportDeprecationWarning.js +43 -0
- package/lib/errors/UnmergeableEntryExportsError.js +34 -0
- package/lib/errors/UnsupportedFeatureWarning.js +1 -1
- package/lib/{wasm-sync → errors}/UnsupportedWebAssemblyFeatureError.js +1 -1
- package/lib/{wasm-sync → errors}/WebAssemblyInInitialChunkError.js +7 -5
- package/lib/errors/WebpackError.js +12 -3
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +19 -19
- package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
- package/lib/{ExternalModule.js → externals/ExternalModule.js} +79 -55
- package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +41 -39
- package/lib/externals/ExternalsPlugin.js +99 -0
- package/lib/fs/FileSystemInfo.js +4642 -0
- package/lib/{util → fs}/fs.js +22 -9
- package/lib/{AsyncDependenciesBlock.js → graph/AsyncDependenciesBlock.js} +27 -4
- package/lib/graph/Chunk.js +985 -0
- package/lib/{ChunkGraph.js → graph/ChunkGraph.js} +187 -80
- package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
- package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
- package/lib/graph/Dependency.js +628 -0
- package/lib/graph/Entrypoint.js +136 -0
- package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +130 -82
- package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
- package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +30 -30
- package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
- package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +152 -57
- package/lib/{util → graph}/findGraphRoots.js +14 -8
- package/lib/graph/isDependencyKind.js +23 -0
- package/lib/hmr/HotModuleReplacement.runtime.js +2 -2
- package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +47 -47
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +10 -8
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
- package/lib/hmr/LazyCompilationPlugin.js +31 -21
- package/lib/html/HtmlGenerator.js +107 -43
- package/lib/html/HtmlModule.js +6 -2
- package/lib/html/HtmlModulesPlugin.js +172 -76
- package/lib/html/HtmlParser.js +503 -153
- package/lib/html/builtinEmbeddedRenderer.js +60 -13
- package/lib/html/data.js +2 -1
- package/lib/html/htmlMinify.js +111 -41
- package/lib/html/syntax-parser.js +15796 -0
- package/lib/html/syntax-printer.js +1034 -0
- package/lib/html/syntax.js +37 -13952
- package/lib/html/xmlMinify.js +67 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
- package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
- package/lib/ids/HashedModuleIdsPlugin.js +31 -4
- package/lib/ids/IdHelpers.js +4 -4
- package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -5
- package/lib/ids/OccurrenceModuleIdsPlugin.js +6 -5
- package/lib/{RecordIdsPlugin.js → ids/RecordIdsPlugin.js} +5 -5
- package/lib/ids/SyncModuleIdsPlugin.js +3 -3
- package/lib/{util → ids}/numberHash.js +1 -1
- package/lib/index.js +303 -97
- package/lib/{APIPlugin.js → javascript/APIPlugin.js} +25 -25
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
- package/lib/javascript/BasicEvaluatedExpression.js +4 -4
- package/lib/javascript/ChunkHelpers.js +64 -4
- package/lib/javascript/CommonJsChunkFormatPlugin.js +4 -7
- package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +7 -7
- package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +74 -7
- package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
- package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
- package/lib/javascript/JavascriptGenerator.js +17 -17
- package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +7 -7
- package/lib/javascript/JavascriptModule.js +4 -3
- package/lib/javascript/JavascriptModulesPlugin.js +440 -211
- package/lib/javascript/JavascriptParser.js +220 -134
- package/lib/javascript/JavascriptParserHelpers.js +1 -1
- package/lib/javascript/MergedEntryExports.js +196 -0
- package/lib/javascript/ScopeAnalyzer.js +3840 -5
- package/lib/javascript/StartupHelpers.js +6 -6
- package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +12 -15
- package/lib/{dependencies → javascript}/WebpackIsIncludedDependency.js +10 -9
- package/lib/{WebpackIsIncludedPlugin.js → javascript/WebpackIsIncludedPlugin.js} +8 -8
- package/lib/javascript/data.js +533 -122
- package/lib/javascript/jsMinify.js +272 -0
- package/lib/javascript/regexp.js +67 -32
- package/lib/javascript/syntax-parser.js +18561 -0
- package/lib/javascript/syntax-printer-data.js +933 -0
- package/lib/javascript/syntax-printer.js +47106 -0
- package/lib/javascript/syntax.js +20 -11274
- package/lib/json/JsonData.js +1 -1
- package/lib/{dependencies → json}/JsonExportsDependency.js +8 -7
- package/lib/json/JsonGenerator.js +10 -10
- package/lib/json/JsonModule.js +2 -2
- package/lib/json/JsonModulesPlugin.js +1 -1
- package/lib/json/JsonParser.js +5 -5
- package/lib/json/jsonMinify.js +69 -0
- package/lib/library/AbstractLibraryPlugin.js +28 -15
- package/lib/library/AmdLibraryPlugin.js +4 -4
- package/lib/library/AssignLibraryPlugin.js +27 -11
- package/lib/library/EnableLibraryPlugin.js +1 -1
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
- package/lib/library/JsonpLibraryPlugin.js +1 -1
- package/lib/library/LibraryTemplatePlugin.js +53 -0
- package/lib/library/ModuleLibraryPlugin.js +160 -166
- 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 +31 -21
- package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
- package/lib/logging/Logger.js +7 -9
- package/lib/logging/ProgressPlugin.js +957 -0
- package/lib/{CodeGenerationResults.js → module/CodeGenerationResults.js} +7 -7
- package/lib/{Generator.js → module/Generator.js} +16 -14
- package/lib/{Module.js → module/Module.js} +119 -51
- package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
- package/lib/module/NormalModule.js +2348 -0
- package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +53 -54
- package/lib/module/NullFactory.js +29 -0
- package/lib/{Parser.js → module/Parser.js} +3 -3
- package/lib/module/RawModule.js +208 -0
- package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
- package/lib/{util → module}/extractSourceMap.js +2 -2
- package/lib/{util → module}/findCaseMismatch.js +2 -2
- package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
- package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
- package/lib/{dependencies → node}/ExternalModuleInitFragment.js +6 -5
- package/lib/{dependencies → node}/ExternalModuleInitFragmentDependency.js +14 -9
- package/lib/node/NodeEnvironmentPlugin.js +11 -1
- package/lib/{NodeStuffPlugin.js → node/NodeStuffPlugin.js} +17 -17
- package/lib/node/NodeTargetPlugin.js +1 -1
- package/lib/node/NodeWatchFileSystem.js +58 -6
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +7 -7
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +9 -7
- package/lib/node/ReadFileCompileWasmPlugin.js +7 -5
- package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
- package/lib/node/nodeConsole.js +2 -4
- package/lib/optimize/AggressiveMergingPlugin.js +2 -2
- package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
- package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +13 -13
- package/lib/optimize/ConcatenatedModule.js +229 -214
- 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} +17 -17
- package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +17 -17
- package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
- package/lib/optimize/FlagIncludedChunksPlugin.js +2 -2
- package/lib/optimize/InlineExports.js +11 -3
- package/lib/optimize/InnerGraph.js +5 -13
- package/lib/optimize/InnerGraphPlugin.js +10 -10
- package/lib/optimize/LazyBarrels.js +584 -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 +20 -12
- package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
- package/lib/optimize/RealContentHashPlugin.js +16 -7
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
- package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
- package/lib/optimize/SideEffectsFlagPlugin.js +18 -18
- package/lib/optimize/SplitChunksPlugin.js +713 -155
- 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} +66 -24
- package/lib/{CopyPlugin.js → output/CopyPlugin.js} +142 -67
- package/lib/{ManifestPlugin.js → output/ManifestPlugin.js} +91 -17
- package/lib/output/SSRManifestPlugin.js +349 -0
- package/lib/performance/AnalyzableBailoutsPlugin.js +1 -1
- package/lib/performance/AsyncChunkWaterfallsPlugin.js +1 -1
- package/lib/performance/BroadContextsPlugin.js +4 -4
- package/lib/performance/CacheEffectivenessPlugin.js +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 +3 -3
- package/lib/performance/HotspotsPlugin.js +11 -10
- package/lib/performance/LargeModulesPlugin.js +2 -3
- package/lib/performance/LegacyJavascriptPlugin.js +1 -2
- package/lib/performance/MissingSideEffectsPlugin.js +2 -3
- package/lib/performance/MissingSourceMapsPlugin.js +5 -6
- package/lib/performance/PureAnnotationsPlugin.js +3 -3
- package/lib/performance/RedundantDynamicImportsPlugin.js +6 -8
- package/lib/performance/ScopeHoistingBailoutsPlugin.js +2 -2
- package/lib/performance/SizeLimitsPlugin.js +11 -12
- package/lib/performance/TopLevelThisPlugin.js +8 -7
- package/lib/performance/UnsplitVendorsPlugin.js +1 -2
- package/lib/performance/UnusedAliasesPlugin.js +6 -7
- package/lib/performance/UnusedAssetsPlugin.js +5 -5
- package/lib/performance/UnusedDefinesPlugin.js +2 -2
- package/lib/performance/UnusedExternalsPlugin.js +3 -4
- package/lib/performance/UnusedFederationPlugin.js +2 -4
- package/lib/performance/UnusedModulesPlugin.js +5 -4
- package/lib/performance/getModuleSize.js +1 -1
- package/lib/performance/hasOnlyUnusedExports.js +4 -4
- package/lib/performance/isOnlyReexported.js +7 -6
- package/lib/{AutomaticPrefetchPlugin.js → prefetch/AutomaticPrefetchPlugin.js} +4 -5
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +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 +65 -44
- 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 +14 -13
- package/lib/{IgnorePlugin.js → resolve/IgnorePlugin.js} +30 -13
- package/lib/{NormalModuleReplacementPlugin.js → resolve/NormalModuleReplacementPlugin.js} +4 -4
- package/lib/{ResolverFactory.js → resolve/ResolverFactory.js} +18 -5
- package/lib/resolve/getResolveOptionsKey.js +59 -0
- package/lib/rules/RuleSetCompiler.js +27 -46
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
- package/lib/runtime/AsyncModuleRuntimeModule.js +7 -4
- 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 +6 -6
- 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} +18 -1
- package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
- package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
- package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +48 -50
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +2 -2
- package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +5 -5
- package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -3
- package/lib/runtime/SystemContextRuntimeModule.js +2 -2
- package/lib/runtime/ToBinaryRuntimeModule.js +3 -3
- package/lib/runtime/WorkerRuntimeModule.js +1 -1
- package/lib/runtime/baseUri.js +1 -1
- package/lib/schemes/DataUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +67 -11
- package/lib/schemes/VirtualUrlPlugin.js +50 -16
- package/lib/serialization/AggregateErrorSerializer.js +2 -2
- package/lib/serialization/FileMiddleware.js +3 -3
- package/lib/serialization/ObjectMiddleware.js +47 -16
- package/lib/serialization/SerializerMiddleware.js +2 -2
- package/lib/serialization/SingleItemMiddleware.js +4 -2
- package/lib/sharing/ConsumeSharedFallbackDependency.js +9 -1
- package/lib/sharing/ConsumeSharedModule.js +18 -14
- package/lib/sharing/ConsumeSharedPlugin.js +148 -42
- package/lib/sharing/ConsumeSharedRuntimeModule.js +8 -8
- package/lib/sharing/ProvideForSharedDependency.js +9 -1
- package/lib/sharing/ProvideSharedDependency.js +1 -1
- package/lib/sharing/ProvideSharedModule.js +11 -9
- package/lib/sharing/ProvideSharedModuleFactory.js +2 -2
- package/lib/sharing/ProvideSharedPlugin.js +111 -20
- package/lib/sharing/SharePlugin.js +102 -9
- package/lib/sharing/ShareRuntimeModule.js +6 -6
- package/lib/sharing/resolveMatchedConfigs.js +1 -1
- package/lib/{util → sharing}/semver.js +14 -16
- package/lib/sharing/utils.js +59 -2
- package/lib/stats/DefaultStatsFactoryPlugin.js +22 -19
- package/lib/stats/DefaultStatsPresetPlugin.js +1 -1
- package/lib/stats/DefaultStatsPrinterPlugin.js +3 -3
- package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
- package/lib/{Stats.js → stats/Stats.js} +4 -4
- package/lib/stats/StatsFactory.js +14 -13
- package/lib/{ChunkTemplate.js → template/ChunkTemplate.js} +7 -7
- package/lib/{ConditionalInitFragment.js → template/ConditionalInitFragment.js} +3 -3
- package/lib/template/DependencyTemplate.js +77 -0
- package/lib/{DependencyTemplates.js → template/DependencyTemplates.js} +9 -4
- package/lib/template/InitFragment.js +223 -0
- package/lib/{MainTemplate.js → template/MainTemplate.js} +11 -11
- package/lib/{ModuleInfoHeaderPlugin.js → template/ModuleInfoHeaderPlugin.js} +30 -8
- package/lib/{ModuleTemplate.js → template/ModuleTemplate.js} +6 -6
- package/lib/{RuntimeTemplate.js → template/RuntimeTemplate.js} +145 -63
- package/lib/{Template.js → template/Template.js} +13 -11
- 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 +349 -44
- package/lib/util/TupleSet.js +27 -27
- package/lib/util/WeakTupleMap.js +10 -12
- package/lib/util/buildDiagnostics.js +2 -2
- package/lib/util/comparators.js +10 -10
- package/lib/util/concatenate.js +28 -147
- package/lib/util/createMappings.js +111 -0
- package/lib/util/dataURL.js +94 -15
- package/lib/util/deprecation.js +1 -1
- package/lib/util/extractComments.js +118 -0
- package/lib/util/formatLocation.js +1 -1
- package/lib/util/globUtils.js +197 -16
- package/lib/util/haltVisitors.js +51 -0
- package/lib/util/handlerKeys.js +2 -2
- package/lib/util/identifier.js +117 -1
- package/lib/util/implicitTypeLoaderFallback.js +6 -4
- package/lib/util/internalSerializables.js +294 -102
- package/lib/util/magicComment.js +12 -7
- package/lib/util/makeSerializable.js +23 -4
- package/lib/util/parseJson.js +1 -1
- package/lib/util/preloadModuleType.js +5 -2
- package/lib/util/registerExternalSerializer.js +2 -2
- package/lib/util/removeBOM.js +1 -1
- package/lib/util/runtime.js +1 -1
- package/lib/util/serialization.js +4 -1
- package/lib/util/source.js +2 -2
- package/lib/util/terminalColors.js +161 -0
- package/lib/{wasm-async → wasm}/AsyncWasmCompileRuntimeModule.js +5 -5
- package/lib/{wasm-async → wasm}/AsyncWasmLoadingRuntimeModule.js +5 -5
- package/lib/{wasm-async → wasm}/AsyncWasmModule.js +9 -5
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +5 -5
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +11 -10
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +8 -8
- package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
- package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +9 -7
- package/lib/wasm/wasmModuleFilename.js +2 -2
- package/lib/wasm-sync/SyncWasmModule.js +3 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +8 -8
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +9 -8
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +14 -15
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
- package/lib/wasm-sync/WebAssemblyParser.js +6 -6
- 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 +8 -6
- package/lib/web/FetchCompileWasmPlugin.js +6 -4
- package/lib/web/JsonpChunkLoadingPlugin.js +3 -3
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +6 -6
- package/lib/web/JsonpTemplatePlugin.js +1 -1
- package/lib/webpack.js +27 -17
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -3
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -6
- package/package.json +49 -38
- package/schemas/WebpackOptions.check.js +2 -1
- package/schemas/WebpackOptions.d.json.ts +2 -0
- package/schemas/WebpackOptions.json +294 -74
- package/schemas/plugins/BannerPlugin.check.js +2 -1
- package/schemas/plugins/BannerPlugin.json +29 -2
- package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -0
- package/schemas/plugins/HtmlParserOptions.check.js +2 -1
- package/schemas/plugins/IgnorePlugin.check.js +1 -0
- package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
- package/schemas/plugins/IgnorePlugin.json +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -0
- package/schemas/plugins/ManifestPlugin.check.js +1 -0
- package/schemas/plugins/ManifestPlugin.json +3 -3
- package/schemas/plugins/ProgressPlugin.check.js +2 -1
- package/schemas/plugins/ProgressPlugin.json +2 -7
- package/schemas/plugins/SSRManifestPlugin.check.js +7 -0
- package/schemas/plugins/SSRManifestPlugin.json +20 -0
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
- package/schemas/plugins/WatchIgnorePlugin.check.js +2 -1
- package/schemas/plugins/WatchIgnorePlugin.json +12 -3
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -0
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -0
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -0
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -0
- package/schemas/plugins/container/ContainerPlugin.check.js +2 -1
- package/schemas/plugins/container/ContainerPlugin.json +8 -0
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -0
- package/schemas/plugins/css/CssParserOptions.check.js +1 -0
- package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -0
- package/schemas/plugins/dll/DllPlugin.check.js +1 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.js +2 -1
- package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -0
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -0
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -0
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +1 -0
- package/schemas/plugins/json/JsonModulesPluginParser.check.js +1 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -0
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -0
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -0
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -0
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +1 -0
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +2 -1
- package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +2 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
- package/schemas/plugins/sharing/SharePlugin.check.js +2 -1
- package/schemas/plugins/sharing/SharePlugin.json +32 -0
- package/types.d.ts +19355 -13873
- 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}/conventions.js +0 -0
- /package/lib/{util → css}/topologicalSort.js +0 -0
- /package/lib/dependencies/{getFunctionExpression.js → helpers/getFunctionExpression.js} +0 -0
- /package/lib/{util → externals}/extractUrlAndGlobal.js +0 -0
- /package/lib/{util → fs}/StackedCacheMap.js +0 -0
- /package/lib/{util → javascript}/StackedMap.js +0 -0
- /package/lib/{ModuleProfile.js → module/ModuleProfile.js} +0 -0
- /package/lib/{ModuleSourceTypeConstants.js → module/ModuleSourceTypeConstants.js} +0 -0
- /package/lib/{ModuleTypeConstants.js → module/ModuleTypeConstants.js} +0 -0
- /package/lib/{OptimizationStages.js → optimize/OptimizationStages.js} +0 -0
- /package/lib/{util → optimize}/Queue.js +0 -0
- /package/lib/{util → stats}/smartGrouping.js +0 -0
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")
|
|
@@ -59,10 +61,10 @@ const getCommentCompilationWarning = memoize(() =>
|
|
|
59
61
|
|
|
60
62
|
/** @import { HtmlParserOptions } from "../../declarations/WebpackOptions" */
|
|
61
63
|
/** @import { Range } from "../javascript/JavascriptParser" */
|
|
62
|
-
/** @import Module, { BuildInfo, BuildMeta } from "../Module" */
|
|
64
|
+
/** @import Module, { BuildInfo, BuildMeta } from "../module/Module" */
|
|
63
65
|
/** @import { FileSystemDependencies } from "../Compilation" */
|
|
64
|
-
/** @import NormalModule from "../NormalModule" */
|
|
65
|
-
/** @import { ParserState, PreparsedAst } from "../Parser" */
|
|
66
|
+
/** @import NormalModule from "../module/NormalModule" */
|
|
67
|
+
/** @import { ParserState, PreparsedAst } from "../module/Parser" */
|
|
66
68
|
/** @import { HtmlModuleBuildInfo } from "./HtmlModule" */
|
|
67
69
|
|
|
68
70
|
/**
|
|
@@ -78,7 +80,8 @@ const getCommentCompilationWarning = memoize(() =>
|
|
|
78
80
|
*/
|
|
79
81
|
/** @typedef {(source: string, context: HtmlTemplateContext) => string} HtmlTemplateFunction */
|
|
80
82
|
|
|
81
|
-
/** @import { ParsedSource } from "./syntax" */
|
|
83
|
+
/** @import { ParsedSource } from "./syntax-parser" */
|
|
84
|
+
/** @import { MagicCommentOptions } from "../util/magicComment" */
|
|
82
85
|
|
|
83
86
|
// Cheap pre-filter for a `style="..."` attribute: only route it through the
|
|
84
87
|
// CSS pipeline when it can hold a URL-bearing function (`url()` / `src()` /
|
|
@@ -105,6 +108,12 @@ const CHARSET_DECLARATION_REGEXP = /charset\s*=/i;
|
|
|
105
108
|
// CSP/fetch attributes copied verbatim onto a synthesized sibling `<link>` /
|
|
106
109
|
// `<script>` (`HtmlEntryDependency`). Fixed output order, independent of
|
|
107
110
|
// source order.
|
|
111
|
+
/**
|
|
112
|
+
* @param {import("./syntax-parser").HtmlPath} path walk path at an element
|
|
113
|
+
* @returns {boolean} whether the element is in the HTML namespace
|
|
114
|
+
*/
|
|
115
|
+
const isHtmlElement = (path) => !path.flag(Flag.svg) && !path.flag(Flag.mathml);
|
|
116
|
+
|
|
108
117
|
const COPYABLE_SIBLING_ATTRS = ["nonce", "crossorigin", "referrerpolicy"];
|
|
109
118
|
|
|
110
119
|
const CC_QUOTATION = '"'.charCodeAt(0);
|
|
@@ -115,54 +124,135 @@ const CC_SLASH = "/".charCodeAt(0);
|
|
|
115
124
|
* Byte-exact source span of an attribute including the single leading
|
|
116
125
|
* whitespace (` name`, ` name=value`, ` name="value"`), mirroring the
|
|
117
126
|
* 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)
|
|
127
|
+
* @param {import("./syntax-parser").HtmlPath} path walk path (used only for attribute-ref reads)
|
|
119
128
|
* @param {string} source HTML source
|
|
120
|
-
* @param {import("./syntax").HtmlAttributeRef} attr attribute ref
|
|
129
|
+
* @param {import("./syntax-parser").HtmlAttributeRef} attr attribute ref
|
|
121
130
|
* @returns {string} the attribute's source slice
|
|
122
131
|
*/
|
|
123
132
|
const attrSourceSpan = (path, source, attr) => {
|
|
124
|
-
const valueStart = path.
|
|
125
|
-
const valueEnd = path.
|
|
133
|
+
const valueStart = path.startOf(Part.value, attr);
|
|
134
|
+
const valueEnd = path.endOf(Part.value, attr);
|
|
126
135
|
const end =
|
|
127
136
|
valueStart === -1
|
|
128
|
-
? path.
|
|
137
|
+
? path.endOf(Part.name, attr)
|
|
129
138
|
: source.charCodeAt(valueStart - 1) === CC_QUOTATION ||
|
|
130
139
|
source.charCodeAt(valueStart - 1) === CC_APOSTROPHE
|
|
131
140
|
? valueEnd + 1
|
|
132
141
|
: valueEnd;
|
|
133
|
-
return source.slice(path.
|
|
142
|
+
return source.slice(path.startOf(Part.name, attr) - 1, end);
|
|
134
143
|
};
|
|
135
144
|
|
|
136
145
|
/**
|
|
137
146
|
* Source span of a tag's `integrity` attribute (offsets relative to
|
|
138
147
|
* `elementStart`, leading whitespace and quotes included), so the template can
|
|
139
148
|
* drop the content-specific author value without re-parsing. Null when absent.
|
|
140
|
-
* @param {import("./syntax").HtmlPath} path walk path (for attribute reads)
|
|
149
|
+
* @param {import("./syntax-parser").HtmlPath} path walk path (for attribute reads)
|
|
141
150
|
* @param {string} source HTML source
|
|
142
151
|
* @param {number} elementStart offset of the tag's opening `<`
|
|
143
152
|
* @returns {Range | null} the span, or null when there is no `integrity`
|
|
144
153
|
*/
|
|
145
154
|
const captureIntegrityRange = (path, source, elementStart) => {
|
|
146
|
-
const integrityAttr = path.
|
|
147
|
-
if (integrityAttr === 0 || path.
|
|
155
|
+
const integrityAttr = path.fieldNamed(Field.attributes, "integrity");
|
|
156
|
+
if (integrityAttr === 0 || path.startOf(Part.name, integrityAttr) < 0) {
|
|
148
157
|
return null;
|
|
149
158
|
}
|
|
150
|
-
let rs = path.
|
|
159
|
+
let rs = path.startOf(Part.name, integrityAttr);
|
|
151
160
|
while (rs > 0 && isAsciiWhitespace(source.charCodeAt(rs - 1))) {
|
|
152
161
|
rs--;
|
|
153
162
|
}
|
|
154
163
|
let re;
|
|
155
|
-
const ivs = path.
|
|
164
|
+
const ivs = path.startOf(Part.value, integrityAttr);
|
|
156
165
|
if (ivs === -1) {
|
|
157
|
-
re = path.
|
|
166
|
+
re = path.endOf(Part.name, integrityAttr);
|
|
158
167
|
} else {
|
|
159
168
|
const q = source.charCodeAt(ivs - 1);
|
|
160
|
-
const ive = path.
|
|
169
|
+
const ive = path.endOf(Part.value, integrityAttr);
|
|
161
170
|
re = q === CC_QUOTATION || q === CC_APOSTROPHE ? ive + 1 : ive;
|
|
162
171
|
}
|
|
163
172
|
return [rs - elementStart, re - elementStart];
|
|
164
173
|
};
|
|
165
174
|
|
|
175
|
+
/**
|
|
176
|
+
* Whether a span holds nothing a script body could have read — whitespace and
|
|
177
|
+
* comments only. Scanned rather than matched: the pattern for it backtracks.
|
|
178
|
+
* @param {string} source HTML source
|
|
179
|
+
* @param {number} start offset the span starts at
|
|
180
|
+
* @param {number} end offset the span ends at
|
|
181
|
+
* @returns {boolean} true when no node of the span reaches the DOM
|
|
182
|
+
*/
|
|
183
|
+
const isEmptyRunGap = (source, start, end) => {
|
|
184
|
+
let offset = start;
|
|
185
|
+
while (offset < end) {
|
|
186
|
+
if (isAsciiWhitespace(source.charCodeAt(offset))) {
|
|
187
|
+
offset++;
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
if (!source.startsWith("<!--", offset)) return false;
|
|
191
|
+
const close = source.indexOf("-->", offset + 4);
|
|
192
|
+
if (close === -1 || close + 3 > end) return false;
|
|
193
|
+
offset = close + 3;
|
|
194
|
+
}
|
|
195
|
+
return true;
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
// What an entry name keeps from a page's path. The mapping is reversible, so
|
|
199
|
+
// two pages of one compilation can never sanitize to the same name.
|
|
200
|
+
const ENTRY_NAME_KEPT_REGEXP = /[^\w.]/g;
|
|
201
|
+
const ENTRY_NAME_EXTENSION_REGEXP = /\.[^./\\]*$/;
|
|
202
|
+
const ENTRY_NAME_TRIM_REGEXP = /^[-.]+|[-.]+$/g;
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Names the entries a page's tags are extracted under, after the page itself.
|
|
206
|
+
* A `data:` document has no path to be named after, so it keeps a digest of
|
|
207
|
+
* the one thing that tells it from another such document.
|
|
208
|
+
* @param {string} pagePath the page's path, relative to the compiler context
|
|
209
|
+
* @param {import("../util/Hash").HashFunction | undefined} hashFunction `output.hashFunction`
|
|
210
|
+
* @returns {string} the prefix every entry name of this page starts with
|
|
211
|
+
*/
|
|
212
|
+
const entryNamePrefix = (pagePath, hashFunction) => {
|
|
213
|
+
if (pagePath.startsWith("data:")) {
|
|
214
|
+
const digest = createHash(hashFunction || "md4")
|
|
215
|
+
.update(pagePath)
|
|
216
|
+
.digest("hex")
|
|
217
|
+
.slice(0, 8);
|
|
218
|
+
return `data-${digest}`;
|
|
219
|
+
}
|
|
220
|
+
return pagePath
|
|
221
|
+
.replace(ENTRY_NAME_EXTENSION_REGEXP, "")
|
|
222
|
+
.replace(ENTRY_NAME_KEPT_REGEXP, (character) => {
|
|
223
|
+
if (character === "-") return "--";
|
|
224
|
+
if (character === "/" || character === "\\") return "-";
|
|
225
|
+
return `_${character.charCodeAt(0).toString(16)}_`;
|
|
226
|
+
})
|
|
227
|
+
.replace(ENTRY_NAME_TRIM_REGEXP, "");
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* @typedef {object} HtmlChunkNameData
|
|
232
|
+
* @property {string} page the page's path, escaped for use in a name
|
|
233
|
+
* @property {string} name the tag's own basename, empty for an inline body
|
|
234
|
+
* @property {number} index the tag's position in the page, across all kinds
|
|
235
|
+
* @property {"script" | "script-module" | "modulepreload" | "stylesheet" | "html" | "preload" | "prefetch"} type what the tag is extracted as
|
|
236
|
+
*/
|
|
237
|
+
|
|
238
|
+
/** @typedef {(data: HtmlChunkNameData) => string} HtmlChunkNameFn */
|
|
239
|
+
|
|
240
|
+
const CHUNK_NAME_PLACEHOLDER_REGEXP = /\[(page|name|index|type)\]/g;
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* End offset of a raw-text element, its closing tag included. `contentEnd`
|
|
244
|
+
* sits at the `</` that ended the body, and at the body's end without one.
|
|
245
|
+
* @param {string} source HTML source
|
|
246
|
+
* @param {number} contentEnd end offset of the element's raw text
|
|
247
|
+
* @returns {number} offset just past the element
|
|
248
|
+
*/
|
|
249
|
+
const rawTextElementEnd = (source, contentEnd) => {
|
|
250
|
+
const close = source.startsWith("</", contentEnd)
|
|
251
|
+
? source.indexOf(">", contentEnd)
|
|
252
|
+
: -1;
|
|
253
|
+
return close === -1 ? contentEnd : close + 1;
|
|
254
|
+
};
|
|
255
|
+
|
|
166
256
|
/**
|
|
167
257
|
* @param {Map<string, string>} attributes attributes
|
|
168
258
|
* @param {string} name name
|
|
@@ -348,8 +438,8 @@ const isLinkStylesheet = (attributes) => {
|
|
|
348
438
|
/** @typedef {SourceType | ((attrs: Map<string, string>, css: boolean) => SourceType)} SourceTypeOrResolver */
|
|
349
439
|
/** @typedef {(attributes: Map<string, string>, value: string) => boolean} SourceFilter */
|
|
350
440
|
/** @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?:
|
|
441
|
+
/** 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). */
|
|
442
|
+
/** @typedef {{ type: SourceTypeOrResolver, filter?: SourceFilter, namespace?: typeof Flag.svg | typeof Flag.mathml }} SourceItem */
|
|
353
443
|
/** A tag→attribute lookup; a `undefined` value marks a built-in source disabled via `sources` (`type: false`). */
|
|
354
444
|
/** @typedef {Record<string, SourceItem | undefined>} SourceBucket */
|
|
355
445
|
/** @typedef {Record<string, SourceBucket>} SourceTable */
|
|
@@ -364,8 +454,9 @@ const isLinkStylesheet = (attributes) => {
|
|
|
364
454
|
* `constructor`, or `toString` resolve to inherited values at lookup
|
|
365
455
|
* time — producing bogus dependencies and letting `sources: false` be
|
|
366
456
|
* bypassed.
|
|
367
|
-
* @
|
|
368
|
-
* @
|
|
457
|
+
* @template T
|
|
458
|
+
* @param {...(Record<string, T> | undefined)} bags property bags
|
|
459
|
+
* @returns {Record<string, T>} null-prototype dictionary
|
|
369
460
|
*/
|
|
370
461
|
const dict = (...bags) => Object.assign(Object.create(null), ...bags);
|
|
371
462
|
|
|
@@ -520,7 +611,7 @@ const DEFAULT_SOURCES_BY_TAG = dict({
|
|
|
520
611
|
const SVG_CSS_URL = {
|
|
521
612
|
type: "css-url",
|
|
522
613
|
filter: (attributes, value) => FUNC_IRI_URL_REGEXP.test(value),
|
|
523
|
-
namespace:
|
|
614
|
+
namespace: Flag.svg
|
|
524
615
|
};
|
|
525
616
|
|
|
526
617
|
// The global `style=""` attribute, available on every tag and even under
|
|
@@ -644,6 +735,8 @@ class HtmlParser extends Parser {
|
|
|
644
735
|
// `as` selects the parse mode: `"document"` parses a full page, any other
|
|
645
736
|
// value names the context element whose inner HTML this is, so that a
|
|
646
737
|
// partial's `<tr>`, `<td>` or `<option>` is kept rather than dropped.
|
|
738
|
+
/** @type {string | HtmlChunkNameFn | undefined} */
|
|
739
|
+
this._chunkName = options.chunkName;
|
|
647
740
|
/** @type {string | undefined} */
|
|
648
741
|
this.fragmentContext =
|
|
649
742
|
options.as === undefined || options.as === "document"
|
|
@@ -790,16 +883,14 @@ class HtmlParser extends Parser {
|
|
|
790
883
|
const css = Boolean(compilation.options.experiments.css);
|
|
791
884
|
const urlHints = this._urlHints;
|
|
792
885
|
|
|
793
|
-
//
|
|
794
|
-
//
|
|
795
|
-
// `identifier()`, whose `html|` prefix `contextify` would leave absolute.
|
|
886
|
+
// An entry name starts with the page's own path, so two pages never claim
|
|
887
|
+
// one — from `resource`, since `identifier()` is `html|<path>`.
|
|
796
888
|
/** @type {string} */
|
|
797
|
-
const resource =
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
.slice(0, 8);
|
|
889
|
+
const resource = module.resource || module.identifier();
|
|
890
|
+
const entryPrefix = entryNamePrefix(
|
|
891
|
+
context ? contextify(context, resource) : resource,
|
|
892
|
+
hashFunction
|
|
893
|
+
);
|
|
803
894
|
|
|
804
895
|
// `output.html` head injection collects facts during the walk and turns
|
|
805
896
|
// them into presentational dependencies after, so no later pass re-parses
|
|
@@ -816,6 +907,72 @@ class HtmlParser extends Parser {
|
|
|
816
907
|
!resource.startsWith("data:")
|
|
817
908
|
? htmlOutputOptions
|
|
818
909
|
: undefined;
|
|
910
|
+
const chunkNameOption = this._chunkName;
|
|
911
|
+
/** @type {Set<string>} */
|
|
912
|
+
const claimedEntryNames = new Set();
|
|
913
|
+
/** @type {Set<string>} */
|
|
914
|
+
const requestedEntryNames = new Set();
|
|
915
|
+
|
|
916
|
+
/**
|
|
917
|
+
* Claims `base`, counting up from the tag's own position while another tag
|
|
918
|
+
* of this page holds it: one name would merge entries the document parts.
|
|
919
|
+
* @param {string} base the name the tag asks for
|
|
920
|
+
* @param {number} index the tag's position in the page
|
|
921
|
+
* @returns {string} the name it claimed
|
|
922
|
+
*/
|
|
923
|
+
const claimEntryName = (base, index) => {
|
|
924
|
+
let claimed = base;
|
|
925
|
+
for (let suffix = index; claimedEntryNames.has(claimed); suffix++) {
|
|
926
|
+
claimed = `${base}-${suffix}`;
|
|
927
|
+
}
|
|
928
|
+
claimedEntryNames.add(claimed);
|
|
929
|
+
return claimed;
|
|
930
|
+
};
|
|
931
|
+
|
|
932
|
+
/**
|
|
933
|
+
* The name a tag's extracted entry claims: what its own
|
|
934
|
+
* `webpackChunkName` comment asked for, else what
|
|
935
|
+
* `module.parser.html.chunkName` makes of it, else the page and the position.
|
|
936
|
+
* @param {string | undefined} requested name from the tag's magic comment
|
|
937
|
+
* @param {string} request the tag's request
|
|
938
|
+
* @param {number} index the tag's position in the page
|
|
939
|
+
* @param {HtmlChunkNameData["type"]} type what the tag is extracted as
|
|
940
|
+
* @returns {string} an entry name no other tag of this page claims
|
|
941
|
+
*/
|
|
942
|
+
const entryNameFor = (requested, request, index, type) => {
|
|
943
|
+
let name = requested;
|
|
944
|
+
if (name === undefined && chunkNameOption !== undefined) {
|
|
945
|
+
const tagName = getRequestBaseName(request) || "";
|
|
946
|
+
name =
|
|
947
|
+
typeof chunkNameOption === "function"
|
|
948
|
+
? chunkNameOption({ page: entryPrefix, name: tagName, index, type })
|
|
949
|
+
: chunkNameOption.replace(
|
|
950
|
+
CHUNK_NAME_PLACEHOLDER_REGEXP,
|
|
951
|
+
(_, placeholder) => {
|
|
952
|
+
if (placeholder === "page") return entryPrefix;
|
|
953
|
+
if (placeholder === "name") return tagName;
|
|
954
|
+
if (placeholder === "index") return `${index}`;
|
|
955
|
+
return type;
|
|
956
|
+
}
|
|
957
|
+
);
|
|
958
|
+
}
|
|
959
|
+
if (typeof name !== "string" || name === "") {
|
|
960
|
+
return claimEntryName(`${entryPrefix}-${index}`, index);
|
|
961
|
+
}
|
|
962
|
+
const claimed = claimEntryName(name, index);
|
|
963
|
+
requestedEntryNames.add(claimed);
|
|
964
|
+
return claimed;
|
|
965
|
+
};
|
|
966
|
+
|
|
967
|
+
/**
|
|
968
|
+
* The name a tag's file is emitted under when the page asked for one, so
|
|
969
|
+
* a named chunk is not left to be called after the tag's url.
|
|
970
|
+
* @param {string} entryName the entry name the tag claimed
|
|
971
|
+
* @returns {string | undefined} the asked-for name, else undefined
|
|
972
|
+
*/
|
|
973
|
+
const requestedFileName = (entryName) =>
|
|
974
|
+
requestedEntryNames.has(entryName) ? entryName : undefined;
|
|
975
|
+
|
|
819
976
|
let doctypeEnd = -1;
|
|
820
977
|
let htmlTagEnd = -1;
|
|
821
978
|
// insertion offsets just inside the (possibly implicit) head
|
|
@@ -845,6 +1002,7 @@ class HtmlParser extends Parser {
|
|
|
845
1002
|
* @property {number} index position in the document, across all groups — the order the emitted files are named in
|
|
846
1003
|
* @property {"script" | "script-module" | "modulepreload" | "stylesheet" | "html" | "preload" | "prefetch"} type
|
|
847
1004
|
* @property {boolean=} css entry emits a CSS chunk (`<link rel="preload" as="style">`), so it needs the CSS filename template
|
|
1005
|
+
* @property {string=} chunkName name the page asked this tag's chunk to claim, which names its file too
|
|
848
1006
|
*/
|
|
849
1007
|
/** @type {HtmlEntryInfo[]} */
|
|
850
1008
|
const scriptEntries = [];
|
|
@@ -872,6 +1030,20 @@ class HtmlParser extends Parser {
|
|
|
872
1030
|
let firstBlockingScriptStart = -1;
|
|
873
1031
|
|
|
874
1032
|
let nextEntryIndex = 0;
|
|
1033
|
+
// One chunk per run of inline `<script>`: under module output every
|
|
1034
|
+
// extracted tag is deferred, so only what executes between them matters.
|
|
1035
|
+
/** @type {string | undefined} */
|
|
1036
|
+
let inlineRunEntryName;
|
|
1037
|
+
// Element offset of the run's last member — any other `<script>` ends it.
|
|
1038
|
+
let inlineRunTag = -1;
|
|
1039
|
+
// End offset of that member, for the gap a classic run may not span.
|
|
1040
|
+
let inlineRunEnd = -1;
|
|
1041
|
+
// How the run's tags are scheduled, which a member has to share.
|
|
1042
|
+
/** @type {string | undefined} */
|
|
1043
|
+
let inlineRunScheduling;
|
|
1044
|
+
// The run's first tag, which carries the chunk and so the inline request.
|
|
1045
|
+
/** @type {HtmlInlineScriptDependency | undefined} */
|
|
1046
|
+
let inlineRunLeaderDependency;
|
|
875
1047
|
|
|
876
1048
|
// WHY: `<base href>` resolves the relative URLs that follow it. A relative base
|
|
877
1049
|
// (`./assets/`) rewrites them into a subdirectory and they stay bundled; a
|
|
@@ -898,6 +1070,12 @@ class HtmlParser extends Parser {
|
|
|
898
1070
|
let pendingWebpackIgnore;
|
|
899
1071
|
/** @type {boolean | undefined} */
|
|
900
1072
|
let pendingWebpackInline;
|
|
1073
|
+
/**
|
|
1074
|
+
* The name the most recent comment asked the next tag's chunk to claim,
|
|
1075
|
+
* cleared the same way as the flags above.
|
|
1076
|
+
* @type {string | undefined}
|
|
1077
|
+
*/
|
|
1078
|
+
let pendingWebpackChunkName;
|
|
901
1079
|
/**
|
|
902
1080
|
* Tracks the resource-hint values from the most recent `<!-- webpackPrefetch: … -->`
|
|
903
1081
|
* (etc.) comment so the next asset URL attribute picks them up.
|
|
@@ -908,16 +1086,16 @@ class HtmlParser extends Parser {
|
|
|
908
1086
|
const magicCommentContext = this.magicCommentContext;
|
|
909
1087
|
|
|
910
1088
|
/**
|
|
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)
|
|
1089
|
+
* @param {import("./syntax-parser").HtmlPath} path walk path (used only for attribute-ref reads)
|
|
1090
|
+
* @param {import("./syntax-parser").HtmlAttributeRef} typeAttr type attribute ref (0 = none)
|
|
913
1091
|
* @param {number} nameEnd end offset of the tag name
|
|
914
1092
|
* @param {string} type type of the script
|
|
915
1093
|
* @param {string} input source string
|
|
916
1094
|
*/
|
|
917
1095
|
const reconcileScriptTypeAttr = (path, typeAttr, nameEnd, type, input) => {
|
|
918
1096
|
const valueStart =
|
|
919
|
-
typeAttr !== 0 ? path.
|
|
920
|
-
const valueEnd = typeAttr !== 0 ? path.
|
|
1097
|
+
typeAttr !== 0 ? path.startOf(Part.value, typeAttr) : -1;
|
|
1098
|
+
const valueEnd = typeAttr !== 0 ? path.endOf(Part.value, typeAttr) : -1;
|
|
921
1099
|
if (outputModule && type === "script") {
|
|
922
1100
|
// Chunk is an ES module; upgrade the tag.
|
|
923
1101
|
if (typeAttr !== 0 && valueStart !== -1) {
|
|
@@ -934,13 +1112,13 @@ class HtmlParser extends Parser {
|
|
|
934
1112
|
// browser doesn't load it under module semantics.
|
|
935
1113
|
let attrEnd;
|
|
936
1114
|
if (valueStart === -1) {
|
|
937
|
-
attrEnd = path.
|
|
1115
|
+
attrEnd = path.endOf(Part.name, typeAttr);
|
|
938
1116
|
} else if (input[valueEnd] === '"' || input[valueEnd] === "'") {
|
|
939
1117
|
attrEnd = valueEnd + 1;
|
|
940
1118
|
} else {
|
|
941
1119
|
attrEnd = valueEnd;
|
|
942
1120
|
}
|
|
943
|
-
let attrStart = path.
|
|
1121
|
+
let attrStart = path.startOf(Part.name, typeAttr);
|
|
944
1122
|
if (
|
|
945
1123
|
attrStart > 0 &&
|
|
946
1124
|
isAsciiWhitespace(input.charCodeAt(attrStart - 1))
|
|
@@ -976,11 +1154,11 @@ class HtmlParser extends Parser {
|
|
|
976
1154
|
* Classifies the first `<base href>` seen in the walk, setting
|
|
977
1155
|
* `documentBase`/`baseDir`/`baseIsExternal`/`baseUrlPrefix` for the URLs
|
|
978
1156
|
* 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
|
|
1157
|
+
* @param {import("./syntax-parser").HtmlPath} path walk path (for attribute reads)
|
|
1158
|
+
* @param {import("./syntax-parser").HtmlAttributeRef} hrefAttr the base's href attribute
|
|
981
1159
|
*/
|
|
982
1160
|
const resolveDocumentBase = (path, hrefAttr) => {
|
|
983
|
-
documentBase =
|
|
1161
|
+
documentBase = path.value(hrefAttr).trim();
|
|
984
1162
|
if (!documentBase) return;
|
|
985
1163
|
if (
|
|
986
1164
|
ABSOLUTE_URL_SCHEME_REGEXP.test(documentBase) ||
|
|
@@ -1019,7 +1197,7 @@ class HtmlParser extends Parser {
|
|
|
1019
1197
|
|
|
1020
1198
|
// Lazy decoded-attribute map for the current element — parse-scoped
|
|
1021
1199
|
// to avoid a closure and memo slot per element.
|
|
1022
|
-
/** @type {import("./syntax").HtmlPath | undefined} */
|
|
1200
|
+
/** @type {import("./syntax-parser").HtmlPath | undefined} */
|
|
1023
1201
|
let attrMapPath;
|
|
1024
1202
|
let attrMapCount = 0;
|
|
1025
1203
|
/** @type {Map<string, string> | undefined} */
|
|
@@ -1027,15 +1205,14 @@ class HtmlParser extends Parser {
|
|
|
1027
1205
|
const getAttributesMap = () => {
|
|
1028
1206
|
if (currentAttributesMap) return currentAttributesMap;
|
|
1029
1207
|
currentAttributesMap = new Map();
|
|
1030
|
-
const path = /** @type {import("./syntax").HtmlPath} */ (
|
|
1208
|
+
const path = /** @type {import("./syntax-parser").HtmlPath} */ (
|
|
1209
|
+
attrMapPath
|
|
1210
|
+
);
|
|
1031
1211
|
for (let i = 0; i < attrMapCount; i++) {
|
|
1032
|
-
const attr = path.
|
|
1212
|
+
const attr = path.field(i, Field.attributes);
|
|
1033
1213
|
// Decoded values — filters and type resolvers compare what
|
|
1034
1214
|
// the browser sees (e.g. `rel="icon"` means `icon`)
|
|
1035
|
-
currentAttributesMap.set(
|
|
1036
|
-
path.attributeName(attr),
|
|
1037
|
-
decodeEntities(path.attributeValue(attr), true)
|
|
1038
|
-
);
|
|
1215
|
+
currentAttributesMap.set(path.name(attr), path.value(attr));
|
|
1039
1216
|
}
|
|
1040
1217
|
return currentAttributesMap;
|
|
1041
1218
|
};
|
|
@@ -1046,8 +1223,8 @@ class HtmlParser extends Parser {
|
|
|
1046
1223
|
new SourceProcessor()
|
|
1047
1224
|
.use({
|
|
1048
1225
|
[NodeType.Comment]: (path) => {
|
|
1049
|
-
const start = path.start();
|
|
1050
|
-
const end = path.end();
|
|
1226
|
+
const start = path.start(path.node);
|
|
1227
|
+
const end = path.end(path.node);
|
|
1051
1228
|
// comments count toward the head-end insertion anchor
|
|
1052
1229
|
if (inHead && headTemplateDepth === 0 && end > headLastEnd) {
|
|
1053
1230
|
headLastEnd = end;
|
|
@@ -1065,17 +1242,19 @@ class HtmlParser extends Parser {
|
|
|
1065
1242
|
) {
|
|
1066
1243
|
pendingWebpackIgnore = undefined;
|
|
1067
1244
|
pendingWebpackInline = undefined;
|
|
1245
|
+
pendingWebpackChunkName = undefined;
|
|
1068
1246
|
pendingHints = undefined;
|
|
1069
1247
|
return;
|
|
1070
1248
|
}
|
|
1071
|
-
const value = path.
|
|
1249
|
+
const value = path.value();
|
|
1072
1250
|
if (!webpackCommentRegExp.test(value)) {
|
|
1073
1251
|
pendingWebpackIgnore = undefined;
|
|
1074
1252
|
pendingWebpackInline = undefined;
|
|
1253
|
+
pendingWebpackChunkName = undefined;
|
|
1075
1254
|
pendingHints = undefined;
|
|
1076
1255
|
return;
|
|
1077
1256
|
}
|
|
1078
|
-
/** @type {
|
|
1257
|
+
/** @type {MagicCommentOptions} */
|
|
1079
1258
|
let options;
|
|
1080
1259
|
try {
|
|
1081
1260
|
options = parseMagicComment(value, magicCommentContext);
|
|
@@ -1095,18 +1274,21 @@ class HtmlParser extends Parser {
|
|
|
1095
1274
|
);
|
|
1096
1275
|
pendingWebpackIgnore = undefined;
|
|
1097
1276
|
pendingWebpackInline = undefined;
|
|
1277
|
+
pendingWebpackChunkName = undefined;
|
|
1098
1278
|
pendingHints = undefined;
|
|
1099
1279
|
return;
|
|
1100
1280
|
}
|
|
1101
1281
|
if (
|
|
1102
1282
|
options.webpackIgnore === undefined &&
|
|
1103
1283
|
options.webpackInline === undefined &&
|
|
1284
|
+
options.webpackChunkName === undefined &&
|
|
1104
1285
|
options.webpackPrefetch === undefined &&
|
|
1105
1286
|
options.webpackPreload === undefined &&
|
|
1106
1287
|
options.webpackFetchPriority === undefined
|
|
1107
1288
|
) {
|
|
1108
1289
|
pendingWebpackIgnore = undefined;
|
|
1109
1290
|
pendingWebpackInline = undefined;
|
|
1291
|
+
pendingWebpackChunkName = undefined;
|
|
1110
1292
|
pendingHints = undefined;
|
|
1111
1293
|
return;
|
|
1112
1294
|
}
|
|
@@ -1127,6 +1309,7 @@ class HtmlParser extends Parser {
|
|
|
1127
1309
|
);
|
|
1128
1310
|
pendingWebpackIgnore = undefined;
|
|
1129
1311
|
pendingWebpackInline = undefined;
|
|
1312
|
+
pendingWebpackChunkName = undefined;
|
|
1130
1313
|
pendingHints = undefined;
|
|
1131
1314
|
return;
|
|
1132
1315
|
}
|
|
@@ -1147,11 +1330,35 @@ class HtmlParser extends Parser {
|
|
|
1147
1330
|
);
|
|
1148
1331
|
pendingWebpackIgnore = undefined;
|
|
1149
1332
|
pendingWebpackInline = undefined;
|
|
1333
|
+
pendingWebpackChunkName = undefined;
|
|
1334
|
+
pendingHints = undefined;
|
|
1335
|
+
return;
|
|
1336
|
+
}
|
|
1337
|
+
if (
|
|
1338
|
+
options.webpackChunkName !== undefined &&
|
|
1339
|
+
(typeof options.webpackChunkName !== "string" ||
|
|
1340
|
+
options.webpackChunkName === "")
|
|
1341
|
+
) {
|
|
1342
|
+
const { line: sl, column: sc } = locConverter.get(start);
|
|
1343
|
+
const { line: el, column: ec } = locConverter.get(end);
|
|
1344
|
+
module.addWarning(
|
|
1345
|
+
new (getUnsupportedFeatureWarning())(
|
|
1346
|
+
`\`webpackChunkName\` expected a non-empty string, but received: ${options.webpackChunkName}.`,
|
|
1347
|
+
{
|
|
1348
|
+
start: { line: sl, column: sc },
|
|
1349
|
+
end: { line: el, column: ec }
|
|
1350
|
+
}
|
|
1351
|
+
)
|
|
1352
|
+
);
|
|
1353
|
+
pendingWebpackIgnore = undefined;
|
|
1354
|
+
pendingWebpackInline = undefined;
|
|
1355
|
+
pendingWebpackChunkName = undefined;
|
|
1150
1356
|
pendingHints = undefined;
|
|
1151
1357
|
return;
|
|
1152
1358
|
}
|
|
1153
1359
|
pendingWebpackIgnore = options.webpackIgnore;
|
|
1154
1360
|
pendingWebpackInline = options.webpackInline;
|
|
1361
|
+
pendingWebpackChunkName = options.webpackChunkName;
|
|
1155
1362
|
if (
|
|
1156
1363
|
options.webpackPrefetch !== undefined ||
|
|
1157
1364
|
options.webpackPreload !== undefined ||
|
|
@@ -1175,9 +1382,10 @@ class HtmlParser extends Parser {
|
|
|
1175
1382
|
},
|
|
1176
1383
|
[NodeType.Doctype]: (path) => {
|
|
1177
1384
|
// only visited when head injection is active (see `skip` below)
|
|
1178
|
-
if (doctypeEnd === -1) doctypeEnd = path.end();
|
|
1385
|
+
if (doctypeEnd === -1) doctypeEnd = path.end(path.node);
|
|
1179
1386
|
pendingWebpackIgnore = undefined;
|
|
1180
1387
|
pendingWebpackInline = undefined;
|
|
1388
|
+
pendingWebpackChunkName = undefined;
|
|
1181
1389
|
pendingHints = undefined;
|
|
1182
1390
|
},
|
|
1183
1391
|
[NodeType.Element]: {
|
|
@@ -1187,23 +1395,25 @@ class HtmlParser extends Parser {
|
|
|
1187
1395
|
enter: (path) => {
|
|
1188
1396
|
const ignore = pendingWebpackIgnore === true;
|
|
1189
1397
|
const forceInline = pendingWebpackInline === true;
|
|
1398
|
+
const chunkName = pendingWebpackChunkName;
|
|
1190
1399
|
pendingWebpackIgnore = undefined;
|
|
1191
1400
|
pendingWebpackInline = undefined;
|
|
1401
|
+
pendingWebpackChunkName = undefined;
|
|
1192
1402
|
|
|
1193
1403
|
// `<head>` anchors are collected for every page, since they place
|
|
1194
1404
|
// `inject: "head"` siblings and resource hints. Structural, so this
|
|
1195
1405
|
// runs even for `webpackIgnore`d elements.
|
|
1196
1406
|
{
|
|
1197
|
-
const name = path.
|
|
1198
|
-
if (name === "template" && path
|
|
1407
|
+
const name = path.name();
|
|
1408
|
+
if (name === "template" && isHtmlElement(path)) {
|
|
1199
1409
|
templateDepth++;
|
|
1200
1410
|
}
|
|
1201
1411
|
if (headTemplateDepth > 0) {
|
|
1202
|
-
if (name === "template" && path
|
|
1412
|
+
if (name === "template" && isHtmlElement(path)) {
|
|
1203
1413
|
headTemplateDepth++;
|
|
1204
1414
|
}
|
|
1205
1415
|
} else if (inHead) {
|
|
1206
|
-
if (headOptions !== undefined && path
|
|
1416
|
+
if (headOptions !== undefined && isHtmlElement(path)) {
|
|
1207
1417
|
switch (name) {
|
|
1208
1418
|
case "title":
|
|
1209
1419
|
headHasTitle = true;
|
|
@@ -1212,50 +1422,48 @@ class HtmlParser extends Parser {
|
|
|
1212
1422
|
headHasBase = true;
|
|
1213
1423
|
break;
|
|
1214
1424
|
case "meta": {
|
|
1215
|
-
if (path.
|
|
1216
|
-
headCharsetEnd = path.
|
|
1425
|
+
if (path.fieldNamed(Field.attributes, "charset") !== 0) {
|
|
1426
|
+
headCharsetEnd = path.startOf(Part.content, path.node);
|
|
1217
1427
|
} else {
|
|
1218
|
-
const httpEquiv = path.
|
|
1428
|
+
const httpEquiv = path.fieldNamed(
|
|
1429
|
+
Field.attributes,
|
|
1430
|
+
"http-equiv"
|
|
1431
|
+
);
|
|
1219
1432
|
const contentAttr =
|
|
1220
1433
|
httpEquiv !== 0 &&
|
|
1221
|
-
|
|
1222
|
-
path.
|
|
1223
|
-
true
|
|
1224
|
-
).toLowerCase() === "content-type"
|
|
1225
|
-
? path.findAttribute("content")
|
|
1434
|
+
path.value(httpEquiv).toLowerCase() === "content-type"
|
|
1435
|
+
? path.fieldNamed(Field.attributes, "content")
|
|
1226
1436
|
: 0;
|
|
1227
1437
|
if (
|
|
1228
1438
|
contentAttr !== 0 &&
|
|
1229
1439
|
CHARSET_DECLARATION_REGEXP.test(
|
|
1230
|
-
|
|
1231
|
-
path.attributeValue(contentAttr),
|
|
1232
|
-
true
|
|
1233
|
-
)
|
|
1440
|
+
path.value(contentAttr)
|
|
1234
1441
|
)
|
|
1235
1442
|
) {
|
|
1236
|
-
headCharsetEnd = path.
|
|
1443
|
+
headCharsetEnd = path.startOf(
|
|
1444
|
+
Part.content,
|
|
1445
|
+
path.node
|
|
1446
|
+
);
|
|
1237
1447
|
}
|
|
1238
1448
|
}
|
|
1239
|
-
const nameAttr = path.
|
|
1240
|
-
|
|
1449
|
+
const nameAttr = path.fieldNamed(
|
|
1450
|
+
Field.attributes,
|
|
1451
|
+
"name"
|
|
1452
|
+
);
|
|
1453
|
+
const propertyAttr = path.fieldNamed(
|
|
1454
|
+
Field.attributes,
|
|
1455
|
+
"property"
|
|
1456
|
+
);
|
|
1241
1457
|
if (nameAttr !== 0 || propertyAttr !== 0) {
|
|
1242
1458
|
if (headMetaNames === undefined) {
|
|
1243
1459
|
headMetaNames = new Set();
|
|
1244
1460
|
}
|
|
1245
1461
|
if (nameAttr !== 0) {
|
|
1246
|
-
headMetaNames.add(
|
|
1247
|
-
decodeEntities(
|
|
1248
|
-
path.attributeValue(nameAttr),
|
|
1249
|
-
true
|
|
1250
|
-
).toLowerCase()
|
|
1251
|
-
);
|
|
1462
|
+
headMetaNames.add(path.value(nameAttr).toLowerCase());
|
|
1252
1463
|
}
|
|
1253
1464
|
if (propertyAttr !== 0) {
|
|
1254
1465
|
headMetaNames.add(
|
|
1255
|
-
|
|
1256
|
-
path.attributeValue(propertyAttr),
|
|
1257
|
-
true
|
|
1258
|
-
).toLowerCase()
|
|
1466
|
+
path.value(propertyAttr).toLowerCase()
|
|
1259
1467
|
);
|
|
1260
1468
|
}
|
|
1261
1469
|
}
|
|
@@ -1265,23 +1473,22 @@ class HtmlParser extends Parser {
|
|
|
1265
1473
|
headTemplateDepth++;
|
|
1266
1474
|
break;
|
|
1267
1475
|
}
|
|
1268
|
-
} else if (
|
|
1269
|
-
name === "template" &&
|
|
1270
|
-
path.namespace() === NS_HTML
|
|
1271
|
-
) {
|
|
1476
|
+
} else if (name === "template" && isHtmlElement(path)) {
|
|
1272
1477
|
headTemplateDepth++;
|
|
1273
1478
|
}
|
|
1274
|
-
if (path.end() > headLastEnd)
|
|
1275
|
-
|
|
1479
|
+
if (path.end(path.node) > headLastEnd) {
|
|
1480
|
+
headLastEnd = path.end(path.node);
|
|
1481
|
+
}
|
|
1482
|
+
} else if (!headSeen && isHtmlElement(path)) {
|
|
1276
1483
|
if (name === "html") {
|
|
1277
|
-
htmlTagEnd = path.
|
|
1484
|
+
htmlTagEnd = path.startOf(Part.content, path.node);
|
|
1278
1485
|
} else if (name === "head") {
|
|
1279
1486
|
headSeen = true;
|
|
1280
1487
|
inHead = true;
|
|
1281
1488
|
// explicit head has real offsets; an implicit one (head
|
|
1282
1489
|
// tags are optional in HTML5) anchors after `<html>`,
|
|
1283
1490
|
// the doctype, or the document start
|
|
1284
|
-
const tagEnd = path.
|
|
1491
|
+
const tagEnd = path.startOf(Part.content, path.node);
|
|
1285
1492
|
headStart =
|
|
1286
1493
|
tagEnd > 0
|
|
1287
1494
|
? tagEnd
|
|
@@ -1296,14 +1503,21 @@ class HtmlParser extends Parser {
|
|
|
1296
1503
|
}
|
|
1297
1504
|
|
|
1298
1505
|
if (ignore) {
|
|
1506
|
+
// It stays in the document and runs where it stands, so a run
|
|
1507
|
+
// may not span it either.
|
|
1508
|
+
if (path.name() === "script") {
|
|
1509
|
+
inlineRunEntryName = undefined;
|
|
1510
|
+
inlineRunLeaderDependency = undefined;
|
|
1511
|
+
inlineRunScheduling = undefined;
|
|
1512
|
+
}
|
|
1299
1513
|
return;
|
|
1300
1514
|
}
|
|
1301
1515
|
|
|
1302
|
-
const elementName = path.
|
|
1303
|
-
const attributeCount = path.
|
|
1304
|
-
const elementStart = path.start();
|
|
1305
|
-
const tagEnd = path.
|
|
1306
|
-
const nameEnd = path.
|
|
1516
|
+
const elementName = path.name();
|
|
1517
|
+
const attributeCount = path.fieldCount(Field.attributes);
|
|
1518
|
+
const elementStart = path.start(path.node);
|
|
1519
|
+
const tagEnd = path.startOf(Part.content, path.node);
|
|
1520
|
+
const nameEnd = path.endOf(Part.name, path.node);
|
|
1307
1521
|
|
|
1308
1522
|
// The first `<base href>` freezes the base for later URLs — but
|
|
1309
1523
|
// only one in the real document tree, not inside an inert
|
|
@@ -1312,9 +1526,9 @@ class HtmlParser extends Parser {
|
|
|
1312
1526
|
documentBase === undefined &&
|
|
1313
1527
|
templateDepth === 0 &&
|
|
1314
1528
|
elementName === "base" &&
|
|
1315
|
-
path
|
|
1529
|
+
isHtmlElement(path)
|
|
1316
1530
|
) {
|
|
1317
|
-
const hrefAttr = path.
|
|
1531
|
+
const hrefAttr = path.fieldNamed(Field.attributes, "href");
|
|
1318
1532
|
if (hrefAttr !== 0) resolveDocumentBase(path, hrefAttr);
|
|
1319
1533
|
}
|
|
1320
1534
|
|
|
@@ -1342,7 +1556,7 @@ class HtmlParser extends Parser {
|
|
|
1342
1556
|
let start;
|
|
1343
1557
|
/** @type {number} */
|
|
1344
1558
|
let end;
|
|
1345
|
-
/** @type {import("./syntax").HtmlAttributeRef} */
|
|
1559
|
+
/** @type {import("./syntax-parser").HtmlAttributeRef} */
|
|
1346
1560
|
let attr = 0;
|
|
1347
1561
|
if (content) {
|
|
1348
1562
|
if (!bodyItem) continue;
|
|
@@ -1352,7 +1566,7 @@ class HtmlParser extends Parser {
|
|
|
1352
1566
|
// `skip.text` drops the body `Text` node; the raw content
|
|
1353
1567
|
// span is [`tagEnd`, `contentEnd`] on the element.
|
|
1354
1568
|
const bodyStart = tagEnd;
|
|
1355
|
-
const bodyEnd = path.
|
|
1569
|
+
const bodyEnd = path.endOf(Part.content, path.node);
|
|
1356
1570
|
if (bodyEnd <= bodyStart) continue;
|
|
1357
1571
|
value = source.slice(bodyStart, bodyEnd);
|
|
1358
1572
|
if (value.trim() === "") continue;
|
|
@@ -1363,20 +1577,19 @@ class HtmlParser extends Parser {
|
|
|
1363
1577
|
? bodyItem.type(getAttributesMap(), css)
|
|
1364
1578
|
: bodyItem.type;
|
|
1365
1579
|
} else {
|
|
1366
|
-
attr = path.
|
|
1367
|
-
const item = sources[path.
|
|
1580
|
+
attr = path.field(i, Field.attributes);
|
|
1581
|
+
const item = sources[path.name(attr)];
|
|
1368
1582
|
if (!item) continue;
|
|
1369
1583
|
if (
|
|
1370
1584
|
item.namespace !== undefined &&
|
|
1371
|
-
path.
|
|
1585
|
+
!path.flag(item.namespace)
|
|
1372
1586
|
) {
|
|
1373
1587
|
continue;
|
|
1374
1588
|
}
|
|
1375
1589
|
// Adoption-agency clones carry no offsets; skip blank values.
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
value = path.attributeValue(attr);
|
|
1590
|
+
const valueStart = path.startOf(Part.value, attr);
|
|
1591
|
+
if (valueStart === -1) continue;
|
|
1592
|
+
value = path.source(valueStart, path.endOf(Part.value, attr));
|
|
1380
1593
|
if (!value || !/\S/.test(value)) continue;
|
|
1381
1594
|
const filter = item.filter;
|
|
1382
1595
|
if (filter) {
|
|
@@ -1387,8 +1600,8 @@ class HtmlParser extends Parser {
|
|
|
1387
1600
|
: value;
|
|
1388
1601
|
if (!filter(getAttributesMap(), decoded)) continue;
|
|
1389
1602
|
}
|
|
1390
|
-
start =
|
|
1391
|
-
end = path.
|
|
1603
|
+
start = valueStart;
|
|
1604
|
+
end = path.endOf(Part.value, attr);
|
|
1392
1605
|
type =
|
|
1393
1606
|
typeof item.type === "function"
|
|
1394
1607
|
? item.type(getAttributesMap(), css)
|
|
@@ -1397,19 +1610,35 @@ class HtmlParser extends Parser {
|
|
|
1397
1610
|
// A resolved `type` selects the parse algorithm and the dependency
|
|
1398
1611
|
// kind — the only dispatch in the parser.
|
|
1399
1612
|
switch (type) {
|
|
1400
|
-
// Inline CSS — a `<style>` body (
|
|
1613
|
+
// Inline CSS — a `<style>` body (a full stylesheet) or an
|
|
1401
1614
|
// attribute value (decoded, re-escaped on write-back; `*-attribute`
|
|
1402
1615
|
// is a declaration list). Needs `experiments.css`.
|
|
1403
1616
|
case "stylesheet-style":
|
|
1404
1617
|
case "stylesheet-style-attribute": {
|
|
1405
1618
|
if (!css) break;
|
|
1406
|
-
|
|
1619
|
+
// WHY: an HTML `<style>` body is raw text, so its source is its
|
|
1620
|
+
// text. The same element in a foreign subtree holds character
|
|
1621
|
+
// data, where `.a` is the selector `.a` — so the sheet has
|
|
1622
|
+
// to be decoded going in and escaped coming back out, which is
|
|
1623
|
+
// what `characterData` tells the write-back.
|
|
1624
|
+
const characterData = content && !isHtmlElement(path);
|
|
1625
|
+
// A page webpack emitted is one it can be pointed at again,
|
|
1626
|
+
// where a sheet arrives headed by the module the last build
|
|
1627
|
+
// read it as. That header was that build's; this writes its own.
|
|
1628
|
+
const cssText = ModuleInfoHeaderPlugin.stripHeaders(
|
|
1629
|
+
content
|
|
1630
|
+
? characterData
|
|
1631
|
+
? decodeEntities(value, false)
|
|
1632
|
+
: value
|
|
1633
|
+
: decodeEntities(value, true)
|
|
1634
|
+
);
|
|
1407
1635
|
if (cssText.trim() === "") break;
|
|
1408
1636
|
const dep = new HtmlInlineStyleDependency(
|
|
1409
1637
|
dataUri("text/css", cssText),
|
|
1410
1638
|
[start, end],
|
|
1411
1639
|
content ? false : type === "stylesheet-style-attribute",
|
|
1412
|
-
!content
|
|
1640
|
+
!content,
|
|
1641
|
+
characterData
|
|
1413
1642
|
);
|
|
1414
1643
|
setLoc(dep, start, end);
|
|
1415
1644
|
module.addDependency(dep);
|
|
@@ -1445,25 +1674,101 @@ class HtmlParser extends Parser {
|
|
|
1445
1674
|
if (content) {
|
|
1446
1675
|
const scriptType =
|
|
1447
1676
|
/** @type {"script" | "script-module"} */ (type);
|
|
1448
|
-
|
|
1677
|
+
// WHY: an HTML `<script>` body is raw text, so its source
|
|
1678
|
+
// is its text. The same element in a foreign subtree holds
|
|
1679
|
+
// character data, where a character reference stands for
|
|
1680
|
+
// what it names — `1 < 2` is `1 < 2` there, but reads
|
|
1681
|
+
// as `1 & lt < 2` when taken as written. Character data
|
|
1682
|
+
// also decodes `©=1`, which an attribute keeps whole.
|
|
1683
|
+
const scriptText = isHtmlElement(path)
|
|
1684
|
+
? value
|
|
1685
|
+
: decodeEntities(value, false);
|
|
1686
|
+
const request = dataUri("text/javascript", scriptText);
|
|
1449
1687
|
const index = nextEntryIndex++;
|
|
1450
|
-
|
|
1688
|
+
// Module output upgrades a classic tag, so every extracted
|
|
1689
|
+
// tag defers; without it the authored kind parts the run.
|
|
1690
|
+
const scheduling = outputModule ? "deferred" : scriptType;
|
|
1691
|
+
// `async` fires whenever it loads and a `<template>` body never
|
|
1692
|
+
// does, so neither joins — and only a deferred run spans markup.
|
|
1693
|
+
const joinsRun =
|
|
1694
|
+
templateDepth === 0 &&
|
|
1695
|
+
path.fieldNamed(Field.attributes, "async") === 0 &&
|
|
1696
|
+
(outputModule ||
|
|
1697
|
+
inlineRunEntryName === undefined ||
|
|
1698
|
+
isEmptyRunGap(source, inlineRunEnd, elementStart));
|
|
1699
|
+
/** @type {Range | undefined} */
|
|
1700
|
+
let removeRange;
|
|
1701
|
+
/** @type {string} */
|
|
1702
|
+
let entryName;
|
|
1703
|
+
if (joinsRun) {
|
|
1704
|
+
// A tag the page named leads a run of its own rather than
|
|
1705
|
+
// joining one, so the name covers what follows it.
|
|
1706
|
+
if (
|
|
1707
|
+
chunkName !== undefined ||
|
|
1708
|
+
inlineRunEntryName === undefined ||
|
|
1709
|
+
inlineRunScheduling !== scheduling
|
|
1710
|
+
) {
|
|
1711
|
+
entryName = entryNameFor(
|
|
1712
|
+
chunkName,
|
|
1713
|
+
request,
|
|
1714
|
+
index,
|
|
1715
|
+
scriptType
|
|
1716
|
+
);
|
|
1717
|
+
inlineRunEntryName = entryName;
|
|
1718
|
+
inlineRunScheduling = scheduling;
|
|
1719
|
+
} else {
|
|
1720
|
+
entryName = inlineRunEntryName;
|
|
1721
|
+
// The body rides in the run's chunk already, so the
|
|
1722
|
+
// element goes rather than gaining a `src`.
|
|
1723
|
+
removeRange = [
|
|
1724
|
+
elementStart,
|
|
1725
|
+
rawTextElementEnd(source, end)
|
|
1726
|
+
];
|
|
1727
|
+
}
|
|
1728
|
+
inlineRunTag = elementStart;
|
|
1729
|
+
inlineRunEnd = rawTextElementEnd(source, end);
|
|
1730
|
+
} else {
|
|
1731
|
+
entryName = entryNameFor(
|
|
1732
|
+
chunkName,
|
|
1733
|
+
request,
|
|
1734
|
+
index,
|
|
1735
|
+
scriptType
|
|
1736
|
+
);
|
|
1737
|
+
}
|
|
1451
1738
|
const dep = new HtmlInlineScriptDependency(
|
|
1452
1739
|
request,
|
|
1453
1740
|
nameEnd,
|
|
1454
1741
|
[start, end],
|
|
1455
1742
|
entryName,
|
|
1456
|
-
scriptType === "script-module" ? "esm" : "commonjs"
|
|
1743
|
+
scriptType === "script-module" ? "esm" : "commonjs",
|
|
1744
|
+
removeRange,
|
|
1745
|
+
forceInline
|
|
1457
1746
|
);
|
|
1747
|
+
if (joinsRun) {
|
|
1748
|
+
if (removeRange === undefined) {
|
|
1749
|
+
inlineRunLeaderDependency = dep;
|
|
1750
|
+
} else if (
|
|
1751
|
+
forceInline &&
|
|
1752
|
+
inlineRunLeaderDependency !== undefined
|
|
1753
|
+
) {
|
|
1754
|
+
// A run is one chunk, so a tag asking to be written
|
|
1755
|
+
// into the page asks it of the whole run.
|
|
1756
|
+
inlineRunLeaderDependency.forceInline = true;
|
|
1757
|
+
}
|
|
1758
|
+
}
|
|
1458
1759
|
setLoc(dep, start, end);
|
|
1459
1760
|
module.addPresentationalDependency(dep);
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1761
|
+
// A dropped tag is not rewritten: an edit inside the
|
|
1762
|
+
// removed range would survive it as loose text.
|
|
1763
|
+
if (removeRange === undefined) {
|
|
1764
|
+
reconcileScriptTypeAttr(
|
|
1765
|
+
path,
|
|
1766
|
+
path.fieldNamed(Field.attributes, "type"),
|
|
1767
|
+
nameEnd,
|
|
1768
|
+
scriptType,
|
|
1769
|
+
source
|
|
1770
|
+
);
|
|
1771
|
+
}
|
|
1467
1772
|
(scriptType === "script"
|
|
1468
1773
|
? scriptEntries
|
|
1469
1774
|
: scriptModuleEntries
|
|
@@ -1471,7 +1776,8 @@ class HtmlParser extends Parser {
|
|
|
1471
1776
|
request,
|
|
1472
1777
|
entryName,
|
|
1473
1778
|
index,
|
|
1474
|
-
type: scriptType
|
|
1779
|
+
type: scriptType,
|
|
1780
|
+
chunkName: requestedFileName(entryName)
|
|
1475
1781
|
});
|
|
1476
1782
|
break;
|
|
1477
1783
|
}
|
|
@@ -1514,7 +1820,7 @@ class HtmlParser extends Parser {
|
|
|
1514
1820
|
new (getModuleDependencyError())(
|
|
1515
1821
|
module,
|
|
1516
1822
|
new WebpackError(
|
|
1517
|
-
`Bad value for attribute "${path.
|
|
1823
|
+
`Bad value for attribute "${path.name(
|
|
1518
1824
|
attr
|
|
1519
1825
|
)}" on element "${elementName}": ${
|
|
1520
1826
|
/** @type {Error} */ (err).message
|
|
@@ -1551,7 +1857,12 @@ class HtmlParser extends Parser {
|
|
|
1551
1857
|
// emitting no siblings. Independent, like an entry point.
|
|
1552
1858
|
if (type === "html") {
|
|
1553
1859
|
const index = nextEntryIndex++;
|
|
1554
|
-
const entryName =
|
|
1860
|
+
const entryName = entryNameFor(
|
|
1861
|
+
chunkName,
|
|
1862
|
+
request,
|
|
1863
|
+
index,
|
|
1864
|
+
"html"
|
|
1865
|
+
);
|
|
1555
1866
|
const dep = new HtmlEntryDependency(
|
|
1556
1867
|
request,
|
|
1557
1868
|
[s, e],
|
|
@@ -1561,7 +1872,13 @@ class HtmlParser extends Parser {
|
|
|
1561
1872
|
);
|
|
1562
1873
|
setLoc(dep, s, e);
|
|
1563
1874
|
module.addPresentationalDependency(dep);
|
|
1564
|
-
htmlLinkEntries.push({
|
|
1875
|
+
htmlLinkEntries.push({
|
|
1876
|
+
request,
|
|
1877
|
+
entryName,
|
|
1878
|
+
index,
|
|
1879
|
+
type,
|
|
1880
|
+
chunkName: requestedFileName(entryName)
|
|
1881
|
+
});
|
|
1565
1882
|
continue;
|
|
1566
1883
|
}
|
|
1567
1884
|
// `rel="preload"/"prefetch"` of a bundled resource: an independent,
|
|
@@ -1573,7 +1890,12 @@ class HtmlParser extends Parser {
|
|
|
1573
1890
|
? as.trim().toLowerCase() === "style"
|
|
1574
1891
|
: false;
|
|
1575
1892
|
const index = nextEntryIndex++;
|
|
1576
|
-
const entryName =
|
|
1893
|
+
const entryName = entryNameFor(
|
|
1894
|
+
chunkName,
|
|
1895
|
+
request,
|
|
1896
|
+
index,
|
|
1897
|
+
type
|
|
1898
|
+
);
|
|
1577
1899
|
// Tag metadata letting the template mirror `crossorigin` and
|
|
1578
1900
|
// `integrity` onto a native `preload` `<link>`. `prefetch` is not
|
|
1579
1901
|
// integrity-eligible per the SRI spec, so its is left uncaptured.
|
|
@@ -1589,7 +1911,9 @@ class HtmlParser extends Parser {
|
|
|
1589
1911
|
isNativeLink,
|
|
1590
1912
|
"",
|
|
1591
1913
|
nameEnd,
|
|
1592
|
-
isNativeLink &&
|
|
1914
|
+
isNativeLink &&
|
|
1915
|
+
path.fieldNamed(Field.attributes, "crossorigin") !==
|
|
1916
|
+
0,
|
|
1593
1917
|
-1,
|
|
1594
1918
|
type === "preload" && isNativeLink
|
|
1595
1919
|
? captureIntegrityRange(path, source, elementStart)
|
|
@@ -1606,7 +1930,8 @@ class HtmlParser extends Parser {
|
|
|
1606
1930
|
entryName,
|
|
1607
1931
|
index,
|
|
1608
1932
|
type,
|
|
1609
|
-
css: asStyle
|
|
1933
|
+
css: asStyle,
|
|
1934
|
+
chunkName: requestedFileName(entryName)
|
|
1610
1935
|
});
|
|
1611
1936
|
continue;
|
|
1612
1937
|
}
|
|
@@ -1620,7 +1945,12 @@ class HtmlParser extends Parser {
|
|
|
1620
1945
|
type === "stylesheet"
|
|
1621
1946
|
) {
|
|
1622
1947
|
const index = nextEntryIndex++;
|
|
1623
|
-
const entryName =
|
|
1948
|
+
const entryName = entryNameFor(
|
|
1949
|
+
chunkName,
|
|
1950
|
+
request,
|
|
1951
|
+
index,
|
|
1952
|
+
type
|
|
1953
|
+
);
|
|
1624
1954
|
const willBeModuleScript =
|
|
1625
1955
|
type === "script-module" ||
|
|
1626
1956
|
(outputModule && type === "script");
|
|
@@ -1651,7 +1981,10 @@ class HtmlParser extends Parser {
|
|
|
1651
1981
|
let hasOwnCrossOrigin = false;
|
|
1652
1982
|
if (elementStart >= 0) {
|
|
1653
1983
|
for (const copyableName of COPYABLE_SIBLING_ATTRS) {
|
|
1654
|
-
const copyableAttr = path.
|
|
1984
|
+
const copyableAttr = path.fieldNamed(
|
|
1985
|
+
Field.attributes,
|
|
1986
|
+
copyableName
|
|
1987
|
+
);
|
|
1655
1988
|
if (copyableAttr !== 0) {
|
|
1656
1989
|
copyableAttrsText += attrSourceSpan(
|
|
1657
1990
|
path,
|
|
@@ -1672,8 +2005,8 @@ class HtmlParser extends Parser {
|
|
|
1672
2005
|
(type === "script" || type === "script-module") &&
|
|
1673
2006
|
!outputModule &&
|
|
1674
2007
|
(elementName !== nativeTag ||
|
|
1675
|
-
(path.
|
|
1676
|
-
path.
|
|
2008
|
+
(path.fieldNamed(Field.attributes, "defer") === 0 &&
|
|
2009
|
+
path.fieldNamed(Field.attributes, "async") === 0))
|
|
1677
2010
|
) {
|
|
1678
2011
|
firstBlockingScriptStart = elementStart;
|
|
1679
2012
|
}
|
|
@@ -1691,14 +2024,17 @@ class HtmlParser extends Parser {
|
|
|
1691
2024
|
elementName === nativeTag &&
|
|
1692
2025
|
elementKind === "script-module"
|
|
1693
2026
|
) {
|
|
1694
|
-
const typeAttr = path.
|
|
2027
|
+
const typeAttr = path.fieldNamed(
|
|
2028
|
+
Field.attributes,
|
|
2029
|
+
"type"
|
|
2030
|
+
);
|
|
1695
2031
|
if (
|
|
1696
2032
|
typeAttr !== 0 &&
|
|
1697
|
-
path.
|
|
2033
|
+
path.startOf(Part.value, typeAttr) >= 0
|
|
1698
2034
|
) {
|
|
1699
2035
|
typeValueRange = [
|
|
1700
|
-
path.
|
|
1701
|
-
path.
|
|
2036
|
+
path.startOf(Part.value, typeAttr) - elementStart,
|
|
2037
|
+
path.endOf(Part.value, typeAttr) - elementStart
|
|
1702
2038
|
];
|
|
1703
2039
|
}
|
|
1704
2040
|
}
|
|
@@ -1729,7 +2065,7 @@ class HtmlParser extends Parser {
|
|
|
1729
2065
|
) {
|
|
1730
2066
|
reconcileScriptTypeAttr(
|
|
1731
2067
|
path,
|
|
1732
|
-
path.
|
|
2068
|
+
path.fieldNamed(Field.attributes, "type"),
|
|
1733
2069
|
nameEnd,
|
|
1734
2070
|
type,
|
|
1735
2071
|
source
|
|
@@ -1742,7 +2078,13 @@ class HtmlParser extends Parser {
|
|
|
1742
2078
|
: type === "stylesheet"
|
|
1743
2079
|
? stylesheetEntries
|
|
1744
2080
|
: modulePreloadEntries
|
|
1745
|
-
).push({
|
|
2081
|
+
).push({
|
|
2082
|
+
request,
|
|
2083
|
+
entryName,
|
|
2084
|
+
index,
|
|
2085
|
+
type,
|
|
2086
|
+
chunkName: requestedFileName(entryName)
|
|
2087
|
+
});
|
|
1746
2088
|
} else {
|
|
1747
2089
|
const dep = new HtmlSourceDependency(request, [s, e]);
|
|
1748
2090
|
ResourceHintPlugin.applyDefaults(
|
|
@@ -1764,10 +2106,17 @@ class HtmlParser extends Parser {
|
|
|
1764
2106
|
}
|
|
1765
2107
|
}
|
|
1766
2108
|
}
|
|
2109
|
+
// A `<script>` that joined no run ends the open one: the chunk runs
|
|
2110
|
+
// where its first tag stands, so nothing may execute in between.
|
|
2111
|
+
if (elementName === "script" && inlineRunTag !== elementStart) {
|
|
2112
|
+
inlineRunEntryName = undefined;
|
|
2113
|
+
inlineRunLeaderDependency = undefined;
|
|
2114
|
+
inlineRunScheduling = undefined;
|
|
2115
|
+
}
|
|
1767
2116
|
},
|
|
1768
2117
|
exit: (path) => {
|
|
1769
|
-
if (path
|
|
1770
|
-
const name = path.
|
|
2118
|
+
if (isHtmlElement(path)) {
|
|
2119
|
+
const name = path.name();
|
|
1771
2120
|
if (name === "template") {
|
|
1772
2121
|
if (templateDepth > 0) templateDepth--;
|
|
1773
2122
|
if (headTemplateDepth > 0) headTemplateDepth--;
|
|
@@ -1777,6 +2126,7 @@ class HtmlParser extends Parser {
|
|
|
1777
2126
|
}
|
|
1778
2127
|
pendingWebpackIgnore = undefined;
|
|
1779
2128
|
pendingWebpackInline = undefined;
|
|
2129
|
+
pendingWebpackChunkName = undefined;
|
|
1780
2130
|
pendingHints = undefined;
|
|
1781
2131
|
}
|
|
1782
2132
|
}
|