@depup/webpack 5.109.2-depup.0 → 5.110.1-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 +5 -5
- package/changes.json +7 -7
- package/lib/APIPlugin.js +123 -17
- package/lib/AsyncDependenciesBlock.js +10 -7
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/BannerPlugin.js +10 -6
- package/lib/CacheFacade.js +6 -6
- package/lib/Chunk.js +14 -11
- package/lib/ChunkGraph.js +26 -17
- package/lib/ChunkGroup.js +7 -7
- package/lib/ChunkTemplate.js +35 -44
- package/lib/CircularModulesPlugin.js +205 -28
- package/lib/CleanPlugin.js +4 -7
- package/lib/CodeGenerationResults.js +11 -8
- package/lib/CompatibilityPlugin.js +7 -7
- package/lib/Compilation.js +688 -409
- package/lib/Compiler.js +53 -38
- package/lib/ConcatenationScope.js +117 -8
- package/lib/ConditionalInitFragment.js +3 -3
- package/lib/ConstPlugin.js +13 -11
- package/lib/ContextExclusionPlugin.js +1 -1
- package/lib/ContextModule.js +146 -54
- package/lib/ContextModuleFactory.js +46 -14
- package/lib/ContextReplacementPlugin.js +12 -14
- package/lib/DefinePlugin.js +121 -37
- package/lib/DependenciesBlock.js +9 -6
- package/lib/Dependency.js +36 -16
- package/lib/DependencyTemplate.js +11 -12
- package/lib/DependencyTemplates.js +3 -3
- package/lib/DotenvPlugin.js +50 -13
- package/lib/DynamicEntryPlugin.js +8 -4
- package/lib/EntryOptionPlugin.js +8 -4
- package/lib/EntryPlugin.js +2 -2
- package/lib/Entrypoint.js +6 -2
- package/lib/EnvironmentPlugin.js +2 -2
- package/lib/EvalDevToolModulePlugin.js +8 -4
- package/lib/EvalSourceMapDevToolPlugin.js +15 -8
- package/lib/ExportsInfo.js +101 -14
- package/lib/ExportsInfoApiPlugin.js +2 -4
- package/lib/ExternalModule.js +232 -77
- package/lib/ExternalModuleFactoryPlugin.js +97 -38
- package/lib/ExternalsPlugin.js +10 -6
- package/lib/FileSystemInfo.js +44 -70
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
- package/lib/FlagDependencyExportsPlugin.js +76 -19
- package/lib/FlagDependencyUsagePlugin.js +32 -47
- package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
- package/lib/Generator.js +36 -15
- package/lib/HotModuleReplacementPlugin.js +16 -44
- package/lib/IgnorePlugin.js +8 -4
- package/lib/IgnoreWarningsPlugin.js +2 -2
- package/lib/InitFragment.js +8 -4
- package/lib/JavascriptMetaInfoPlugin.js +35 -4
- package/lib/LazyBarrel.js +3 -4
- package/lib/LibraryTemplatePlugin.js +10 -6
- package/lib/LoaderOptionsPlugin.js +7 -3
- package/lib/LoaderTargetPlugin.js +1 -1
- package/lib/MainTemplate.js +49 -42
- package/lib/ManifestPlugin.js +12 -11
- package/lib/Module.js +62 -33
- package/lib/ModuleFactory.js +3 -3
- package/lib/ModuleFilenameHelpers.js +9 -4
- package/lib/ModuleGraph.js +195 -21
- package/lib/ModuleGraphConnection.js +6 -13
- package/lib/ModuleInfoHeaderPlugin.js +8 -10
- package/lib/ModuleTemplate.js +62 -63
- package/lib/MultiCompiler.js +130 -64
- package/lib/MultiStats.js +40 -9
- package/lib/MultiWatching.js +3 -3
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +29 -19
- package/lib/NormalModule.js +141 -85
- package/lib/NormalModuleFactory.js +555 -110
- package/lib/NormalModuleReplacementPlugin.js +5 -8
- package/lib/NullFactory.js +6 -2
- package/lib/OptionsApply.js +7 -3
- package/lib/Parser.js +7 -3
- package/lib/PlatformPlugin.js +2 -2
- package/lib/PrefetchPlugin.js +1 -1
- package/lib/ProgressPlugin.js +16 -13
- package/lib/ProvidePlugin.js +3 -5
- package/lib/RawModule.js +25 -17
- package/lib/RecordIdsPlugin.js +3 -3
- package/lib/RequestShortener.js +1 -1
- package/lib/ResolverFactory.js +2 -2
- package/lib/RuntimeGlobals.js +22 -10
- package/lib/RuntimeModule.js +29 -19
- package/lib/RuntimePlugin.js +332 -169
- package/lib/RuntimeTemplate.js +2792 -352
- package/lib/SelfModuleFactory.js +7 -3
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
- package/lib/SourceMapDevToolPlugin.js +30 -20
- package/lib/Stats.js +3 -4
- package/lib/Template.js +32 -22
- package/lib/TemplatedPathPlugin.js +96 -14
- package/lib/UseStrictPlugin.js +4 -6
- package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
- package/lib/WarnDeprecatedOptionPlugin.js +1 -1
- package/lib/WarnNoModeSetPlugin.js +1 -1
- package/lib/WatchIgnorePlugin.js +8 -6
- package/lib/Watching.js +8 -8
- package/lib/WebpackIsIncludedPlugin.js +2 -4
- package/lib/WebpackOptionsApply.js +308 -18
- package/lib/WebpackOptionsDefaulter.js +6 -2
- package/lib/asset/AssetBytesGenerator.js +12 -10
- package/lib/asset/AssetBytesParser.js +2 -4
- package/lib/asset/AssetGenerator.js +188 -95
- package/lib/asset/AssetModule.js +7 -3
- package/lib/asset/AssetModulesPlugin.js +110 -38
- package/lib/asset/AssetParser.js +9 -7
- package/lib/asset/AssetSourceGenerator.js +60 -13
- package/lib/asset/AssetSourceParser.js +2 -4
- package/lib/asset/RawDataUrlModule.js +24 -16
- package/lib/asset/WebManifestGenerator.js +8 -10
- package/lib/asset/WebManifestParser.js +24 -10
- package/lib/async-modules/AsyncModuleHelpers.js +2 -2
- package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
- package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
- package/lib/async-modules/isGeneratorLowered.js +4 -4
- package/lib/buildChunkGraph.js +36 -27
- package/lib/bun/BunTargetPlugin.js +1 -1
- package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
- package/lib/cache/AddManagedPathsPlugin.js +1 -1
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/MemoryCachePlugin.js +18 -10
- package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
- package/lib/cache/PackFileCacheStrategy.js +30 -23
- package/lib/cache/ResolverCachePlugin.js +38 -18
- package/lib/cache/getLazyHashedEtag.js +1 -2
- package/lib/cache/mergeEtags.js +1 -1
- package/lib/cli.js +1 -3
- package/lib/config/browserslistTargetHandler.js +41 -5
- package/lib/config/defaults.js +261 -79
- package/lib/config/defineConfig.js +10 -2
- package/lib/config/getClaimedAssetTypes.js +65 -0
- package/lib/config/normalization.js +36 -16
- package/lib/config/target.js +46 -3
- package/lib/container/ContainerEntryDependency.js +1 -1
- package/lib/container/ContainerEntryModule.js +24 -15
- package/lib/container/ContainerEntryModuleFactory.js +7 -3
- package/lib/container/ContainerPlugin.js +9 -10
- package/lib/container/ContainerReferencePlugin.js +6 -2
- package/lib/container/FallbackDependency.js +1 -1
- package/lib/container/FallbackModule.js +24 -17
- package/lib/container/FallbackModuleFactory.js +7 -3
- package/lib/container/HoistContainerReferencesPlugin.js +6 -11
- package/lib/container/ModuleFederationPlugin.js +7 -24
- package/lib/container/RemoteModule.js +27 -19
- package/lib/container/RemoteRuntimeModule.js +10 -8
- package/lib/container/moduleFederationHooks.js +32 -0
- package/lib/css/CssGenerator.js +171 -43
- package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
- package/lib/css/CssLoadingRuntimeModule.js +57 -24
- package/lib/css/CssModule.js +10 -7
- package/lib/css/CssModulesPlugin.js +168 -88
- package/lib/css/CssParser.js +1113 -568
- package/lib/css/CssServerStylesRuntimeModule.js +54 -0
- package/lib/css/cssMinify.js +168 -0
- package/lib/css/data.js +5324 -0
- package/lib/css/syntax.js +9579 -232
- package/lib/debug/ProfilingPlugin.js +14 -9
- package/lib/deno/DenoTargetPlugin.js +1 -1
- package/lib/dependencies/AMDDefineDependency.js +112 -87
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
- package/lib/dependencies/AMDPlugin.js +9 -7
- package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
- package/lib/dependencies/AMDRequireContextDependency.js +2 -2
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
- package/lib/dependencies/AMDRequireDependency.js +8 -7
- package/lib/dependencies/AMDRequireItemDependency.js +1 -1
- package/lib/dependencies/AMDRuntimeModules.js +21 -1
- package/lib/dependencies/BuildTimeConstDependency.js +102 -0
- package/lib/dependencies/CachedConstDependency.js +11 -8
- package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
- package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
- package/lib/dependencies/CommonJsExportsDependency.js +53 -49
- package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
- package/lib/dependencies/CommonJsFullRequireDependency.js +119 -34
- package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -50
- package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
- package/lib/dependencies/CommonJsPlugin.js +35 -6
- package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
- package/lib/dependencies/CommonJsRequireDependency.js +156 -27
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
- package/lib/dependencies/ConstDependency.js +8 -9
- package/lib/dependencies/ContextDependency.js +12 -8
- package/lib/dependencies/ContextDependencyHelpers.js +14 -9
- package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -4
- package/lib/dependencies/ContextElementDependency.js +31 -12
- package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
- package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
- package/lib/dependencies/CssIcssExportDependency.js +56 -28
- package/lib/dependencies/CssIcssImportDependency.js +17 -13
- package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
- package/lib/dependencies/CssImportDependency.js +18 -9
- package/lib/dependencies/CssUrlDependency.js +17 -13
- package/lib/dependencies/DllEntryDependency.js +1 -1
- package/lib/dependencies/DynamicExports.js +2 -2
- package/lib/dependencies/ExportBindingInitFragment.js +36 -9
- package/lib/dependencies/ExportsInfoDependency.js +7 -8
- package/lib/dependencies/ExternalModuleDependency.js +9 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
- package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
- package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +13 -10
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
- package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
- package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +143 -63
- package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
- package/lib/dependencies/HarmonyExports.js +7 -4
- package/lib/dependencies/HarmonyImportDependency.js +27 -19
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
- package/lib/dependencies/HarmonyImportGuard.js +20 -30
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
- package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
- package/lib/dependencies/HtmlEntryDependency.js +37 -29
- package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
- package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
- package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
- package/lib/dependencies/HtmlSourceDependency.js +22 -14
- package/lib/dependencies/ImportContextDependency.js +2 -2
- package/lib/dependencies/ImportDependency.js +24 -20
- package/lib/dependencies/ImportEagerDependency.js +6 -9
- package/lib/dependencies/ImportMetaContextDependency.js +2 -2
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
- package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
- package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
- package/lib/dependencies/ImportMetaPlugin.js +154 -71
- package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
- package/lib/dependencies/ImportParserPlugin.js +49 -35
- package/lib/dependencies/ImportPhase.js +12 -5
- package/lib/dependencies/ImportPlugin.js +7 -3
- package/lib/dependencies/ImportWeakDependency.js +6 -9
- package/lib/dependencies/JsonExportsDependency.js +11 -7
- package/lib/dependencies/LoaderDependency.js +2 -2
- package/lib/dependencies/LoaderImportDependency.js +2 -2
- package/lib/dependencies/LoaderPlugin.js +11 -7
- package/lib/dependencies/LocalModuleDependency.js +5 -5
- package/lib/dependencies/LocalModulesHelpers.js +1 -1
- package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
- package/lib/dependencies/ModuleDependency.js +9 -6
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
- package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
- package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
- package/lib/dependencies/NullDependency.js +3 -3
- package/lib/dependencies/ProvidedDependency.js +14 -10
- package/lib/dependencies/PureExpressionDependency.js +9 -10
- package/lib/dependencies/RequireContextDependency.js +2 -2
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
- package/lib/dependencies/RequireContextPlugin.js +8 -4
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
- package/lib/dependencies/RequireEnsureDependency.js +8 -7
- package/lib/dependencies/RequireEnsurePlugin.js +7 -3
- package/lib/dependencies/RequireHeaderDependency.js +51 -12
- package/lib/dependencies/RequireIncludeDependency.js +6 -6
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
- package/lib/dependencies/RequireIncludePlugin.js +7 -3
- package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
- package/lib/dependencies/RequireResolveContextDependency.js +2 -2
- package/lib/dependencies/RequireResolveDependency.js +4 -4
- package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
- package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
- package/lib/dependencies/StaticExportsDependency.js +2 -2
- package/lib/dependencies/SystemPlugin.js +10 -6
- package/lib/dependencies/SystemRuntimeModule.js +10 -0
- package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
- package/lib/dependencies/URLContextDependency.js +2 -2
- package/lib/dependencies/URLDependency.js +110 -64
- package/lib/dependencies/URLPlugin.js +7 -3
- package/lib/dependencies/UnsupportedDependency.js +4 -4
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
- package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
- package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
- package/lib/dependencies/WorkerAndWorkletPlugin.js +46 -28
- package/lib/dependencies/WorkerDependency.js +28 -22
- package/lib/dependencies/WorkletDependency.js +15 -14
- package/lib/dependencies/getFunctionExpression.js +8 -4
- package/lib/dependencies/processExportInfo.js +5 -5
- package/lib/dll/DelegatedModule.js +34 -22
- package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
- package/lib/dll/DelegatedPlugin.js +2 -2
- package/lib/dll/DllEntryPlugin.js +2 -2
- package/lib/dll/DllModule.js +22 -15
- package/lib/dll/DllModuleFactory.js +7 -3
- package/lib/dll/DllPlugin.js +7 -5
- package/lib/dll/DllReferencePlugin.js +10 -7
- package/lib/dll/LibManifestPlugin.js +5 -5
- package/lib/electron/ElectronTargetPlugin.js +53 -49
- package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
- package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
- package/lib/errors/BroadContextsWarning.js +43 -0
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/errors/CacheEffectivenessWarning.js +55 -0
- package/lib/errors/ChunkRenderError.js +1 -1
- package/lib/errors/CircularDependenciesWarning.js +38 -0
- package/lib/errors/CodeGenerationError.js +1 -1
- package/lib/errors/CommentCompilationWarning.js +1 -1
- package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
- package/lib/errors/DuplicateModulesWarning.js +45 -0
- package/lib/errors/DynamicExportsWarning.js +30 -0
- package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
- package/lib/errors/EntrypointOverlapWarning.js +45 -0
- package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
- package/lib/errors/EvalUsageWarning.js +28 -0
- package/lib/errors/HookWebpackError.js +5 -5
- package/lib/errors/HotspotsWarning.js +57 -0
- package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
- package/lib/errors/InlinedAssetsWarning.js +36 -0
- package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
- package/lib/errors/LargeModulesWarning.js +45 -0
- package/lib/errors/LegacyJavascriptWarning.js +48 -0
- package/lib/errors/MissingSideEffectsWarning.js +36 -0
- package/lib/errors/MixedExportsWarning.js +41 -0
- package/lib/errors/ModuleDependencyError.js +13 -16
- package/lib/errors/ModuleDependencyWarning.js +5 -15
- package/lib/errors/ModuleHashingError.js +1 -1
- package/lib/errors/ModuleNotFoundError.js +2 -2
- package/lib/errors/ModuleParseError.js +1 -2
- package/lib/errors/ModuleRestoreError.js +1 -1
- package/lib/errors/ModuleStoreError.js +1 -1
- package/lib/errors/NodeStuffInWebError.js +1 -1
- package/lib/errors/OsDependentRuleWarning.js +31 -0
- package/lib/errors/PureAnnotationsWarning.js +36 -0
- package/lib/errors/RedundantDynamicImportWarning.js +31 -0
- package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
- package/lib/errors/SplitChunksCappedWarning.js +41 -0
- package/lib/errors/TinyChunksWarning.js +40 -0
- package/lib/errors/TopLevelThisWarning.js +34 -0
- package/lib/errors/UnsplitVendorsWarning.js +42 -0
- package/lib/errors/UnsupportedFeatureWarning.js +1 -1
- package/lib/errors/UnusedAliasesWarning.js +29 -0
- package/lib/errors/UnusedDefinesWarning.js +29 -0
- package/lib/errors/UnusedExternalsWarning.js +29 -0
- package/lib/errors/UnusedReexportsWarning.js +42 -0
- package/lib/errors/UnusedRuleWarning.js +29 -0
- package/lib/errors/WebpackError.js +9 -5
- package/lib/errors/deriveStackFromNestedError.js +90 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
- package/lib/esm/ModuleChunkLoadingPlugin.js +89 -51
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +155 -62
- package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/LazyCompilationPlugin.js +45 -24
- package/lib/hmr/lazyCompilationBackend.js +9 -6
- package/lib/hmr/parserHooks.js +56 -0
- package/lib/html/HtmlGenerator.js +277 -77
- package/lib/html/HtmlModule.js +7 -3
- package/lib/html/HtmlModulesPlugin.js +282 -162
- package/lib/html/HtmlParser.js +31 -86
- package/lib/html/data.js +1928 -0
- package/lib/html/htmlMinify.js +288 -0
- package/lib/html/syntax.js +5557 -1155
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
- package/lib/ids/HashedModuleIdsPlugin.js +6 -2
- package/lib/ids/IdHelpers.js +7 -8
- package/lib/ids/NamedChunkIdsPlugin.js +1 -1
- package/lib/ids/NamedModuleIdsPlugin.js +1 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
- package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
- package/lib/ids/SyncModuleIdsPlugin.js +4 -4
- package/lib/index.js +10 -0
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
- package/lib/javascript/BasicEvaluatedExpression.js +18 -14
- package/lib/javascript/ChunkFormatHelpers.js +6 -6
- package/lib/javascript/ChunkHelpers.js +1 -1
- package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
- package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
- package/lib/javascript/JavascriptGenerator.js +65 -165
- package/lib/javascript/JavascriptModule.js +9 -3
- package/lib/javascript/JavascriptModulesPlugin.js +98 -113
- package/lib/javascript/JavascriptParser.js +242 -99
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/ScopeAnalyzer.js +1094 -0
- package/lib/javascript/StartupHelpers.js +55 -9
- package/lib/javascript/syntax.js +2678 -232
- package/lib/json/JsonData.js +8 -4
- package/lib/json/JsonGenerator.js +38 -16
- package/lib/json/JsonModule.js +7 -3
- package/lib/json/JsonModulesPlugin.js +1 -1
- package/lib/json/JsonParser.js +5 -6
- package/lib/library/AbstractLibraryPlugin.js +20 -14
- package/lib/library/AmdLibraryPlugin.js +11 -7
- package/lib/library/AssignLibraryPlugin.js +19 -13
- package/lib/library/EnableLibraryPlugin.js +2 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
- package/lib/library/JsonpLibraryPlugin.js +11 -7
- package/lib/library/ModuleLibraryPlugin.js +256 -64
- package/lib/library/SystemLibraryPlugin.js +12 -8
- package/lib/library/UmdLibraryPlugin.js +62 -25
- package/lib/loaders/LoaderRunner.js +14 -1
- package/lib/loaders/loadLoader.js +8 -4
- package/lib/logging/createConsoleLogger.js +7 -4
- package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
- package/lib/node/NodeEnvironmentPlugin.js +17 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +4 -3
- package/lib/node/NodeTemplatePlugin.js +1 -1
- package/lib/node/NodeWatchFileSystem.js +70 -9
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +72 -19
- package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
- package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
- package/lib/node/nodeConsole.js +7 -3
- package/lib/optimize/AggressiveMergingPlugin.js +2 -2
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
- package/lib/optimize/ConcatenatedModule.js +985 -470
- package/lib/optimize/ConstExportsPlugin.js +11 -7
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
- package/lib/optimize/InlineExports.js +9 -5
- package/lib/optimize/InnerGraph.js +28 -12
- package/lib/optimize/InnerGraphPlugin.js +23 -18
- package/lib/optimize/LimitChunkCountPlugin.js +7 -3
- package/lib/optimize/MangleExportsPlugin.js +7 -8
- package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
- package/lib/optimize/MinChunkSizePlugin.js +7 -3
- package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
- package/lib/optimize/RealContentHashPlugin.js +10 -6
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
- package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
- package/lib/optimize/RuntimeChunkPlugin.js +2 -2
- package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
- package/lib/optimize/SplitChunksPlugin.js +86 -24
- package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
- package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
- package/lib/performance/BroadContextsPlugin.js +142 -0
- package/lib/performance/CacheEffectivenessPlugin.js +125 -0
- package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
- package/lib/performance/DuplicateModulesPlugin.js +93 -0
- package/lib/performance/DuplicatePackagesPlugin.js +119 -0
- package/lib/performance/DuplicatePackagesWarning.js +84 -0
- package/lib/performance/DynamicExportsPlugin.js +120 -0
- package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
- package/lib/performance/EntrypointOverlapPlugin.js +122 -0
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
- package/lib/performance/EvalUsagePlugin.js +115 -0
- package/lib/performance/HotspotsPlugin.js +296 -0
- package/lib/performance/InlinedAssetsPlugin.js +99 -0
- package/lib/performance/LargeModulesPlugin.js +126 -0
- package/lib/performance/LegacyJavascriptPlugin.js +139 -0
- package/lib/performance/MissingSideEffectsPlugin.js +138 -0
- package/lib/performance/MixedExportsPlugin.js +136 -0
- package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
- package/lib/performance/PureAnnotationsPlugin.js +219 -0
- package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
- package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
- package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
- package/lib/performance/SizeLimitsPlugin.js +139 -7
- package/lib/performance/SplitChunksCappedPlugin.js +99 -0
- package/lib/performance/TinyChunksPlugin.js +128 -0
- package/lib/performance/TopLevelThisPlugin.js +208 -0
- package/lib/performance/UnsplitVendorsPlugin.js +112 -0
- package/lib/performance/UnusedAliasesPlugin.js +253 -0
- package/lib/performance/UnusedDefinesPlugin.js +87 -0
- package/lib/performance/UnusedExternalsPlugin.js +110 -0
- package/lib/performance/UnusedReexportsPlugin.js +159 -0
- package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
- package/lib/performance/getModuleSize.js +22 -0
- package/lib/performance/getSourceModules.js +22 -0
- package/lib/performance/hasOnlyUnusedExports.js +40 -0
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ResourceHintPlugin.js +295 -78
- package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
- package/lib/prefetch/parseResourceHintOptions.js +31 -4
- package/lib/rules/BasicEffectRulePlugin.js +2 -2
- package/lib/rules/BasicMatcherRulePlugin.js +8 -4
- package/lib/rules/GlobMatcherRulePlugin.js +68 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
- package/lib/rules/RuleSetCompiler.js +146 -12
- package/lib/rules/UseEffectRulePlugin.js +18 -11
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
- package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
- package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
- package/lib/runtime/BaseUriRuntimeModule.js +33 -7
- package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
- package/lib/runtime/CompatRuntimeModule.js +5 -3
- package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
- package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
- package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
- package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
- package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
- package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
- package/lib/runtime/GlobalRuntimeModule.js +18 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +23 -6
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
- package/lib/runtime/NonceRuntimeModule.js +10 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
- package/lib/runtime/PublicPathRuntimeModule.js +12 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
- package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
- package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
- package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
- package/lib/runtime/SystemContextRuntimeModule.js +10 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
- package/lib/runtime/WorkerRuntimeModule.js +11 -1
- package/lib/runtime/baseUri.js +63 -0
- package/lib/schemes/DataUriPlugin.js +1 -1
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +24 -15
- package/lib/schemes/VirtualUrlPlugin.js +13 -7
- package/lib/serialization/AggregateErrorSerializer.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +4 -4
- package/lib/serialization/ErrorObjectSerializer.js +1 -1
- package/lib/serialization/FileMiddleware.js +7 -7
- package/lib/serialization/ObjectMiddleware.js +139 -114
- package/lib/serialization/PlainObjectSerializer.js +19 -16
- package/lib/sharing/ConsumeSharedModule.js +30 -21
- package/lib/sharing/ConsumeSharedPlugin.js +18 -10
- package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
- package/lib/sharing/ProvideSharedModule.js +25 -16
- package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
- package/lib/sharing/ProvideSharedPlugin.js +8 -4
- package/lib/sharing/SharePlugin.js +17 -5
- package/lib/sharing/ShareRuntimeModule.js +4 -4
- package/lib/sharing/resolveMatchedConfigs.js +9 -6
- package/lib/sharing/utils.js +1 -3
- package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
- package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
- package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
- package/lib/stats/StatsFactory.js +25 -26
- package/lib/stats/StatsPrinter.js +16 -12
- package/lib/typescript/TypeScriptPlugin.js +12 -14
- package/lib/url/URLParserPlugin.js +26 -13
- package/lib/util/AsyncQueue.js +4 -3
- package/lib/util/Hash.js +5 -1
- package/lib/util/LazySet.js +35 -22
- package/lib/util/LocConverter.js +36 -13
- package/lib/util/SourceProcessor.js +1050 -24
- package/lib/util/StringXor.js +1 -1
- package/lib/util/chainedImports.js +9 -5
- package/lib/util/cleverMerge.js +1 -1
- package/lib/util/comparators.js +45 -14
- package/lib/util/concatenate.js +203 -77
- package/lib/util/conventions.js +5 -1
- package/lib/util/createHash.js +2 -2
- package/lib/util/createHooksRegistry.js +8 -10
- package/lib/util/dataURL.js +225 -1
- package/lib/util/extractSourceMap.js +4 -3
- package/lib/util/findCaseMismatch.js +139 -0
- package/lib/util/formatLocation.js +1 -2
- package/lib/util/fs.js +22 -5
- package/lib/util/globUtils.js +298 -24
- package/lib/util/hash/BatchedHash.js +5 -1
- package/lib/util/hash/BulkUpdateHash.js +5 -1
- package/lib/util/hash/DebugHash.js +5 -1
- package/lib/util/hash/hash-digest.js +6 -2
- package/lib/util/identifier.js +4 -0
- package/lib/util/implicitTypeLoaderFallback.js +1 -1
- package/lib/util/internalSerializables.js +6 -0
- package/lib/util/lazyModule.js +56 -0
- package/lib/util/makeSerializable.js +7 -3
- package/lib/util/matchAlias.js +25 -0
- package/lib/util/mimeTypes.js +11 -5
- package/lib/util/nonNumericOnlyHash.js +4 -3
- package/lib/util/parseJson.js +5 -3
- package/lib/util/preloadModuleType.js +32 -0
- package/lib/util/registerExternalSerializer.js +7 -5
- package/lib/util/runtime.js +2 -2
- package/lib/util/semver.js +1 -1
- package/lib/util/serialization.js +28 -28
- package/lib/util/source.js +2 -2
- package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
- package/lib/wasm/wasmModuleFilename.js +54 -0
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +41 -21
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -21
- package/lib/wasm-async/AsyncWasmModule.js +3 -3
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
- package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +34 -8
- package/lib/wasm-sync/SyncWasmModule.js +2 -2
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
- package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
- package/lib/wasm-sync/WebAssemblyParser.js +4 -6
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
- package/lib/web/FetchCompileAsyncWasmPlugin.js +101 -19
- package/lib/web/FetchCompileWasmPlugin.js +46 -16
- package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
- package/lib/web/JsonpTemplatePlugin.js +2 -2
- package/lib/webpack.js +22 -11
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/module.d.ts +1 -0
- package/package.json +32 -25
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +670 -36
- package/schemas/plugins/HtmlParserOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +10 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/types.d.ts +3144 -454
- package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
|
@@ -14,12 +14,8 @@ const HotUpdateChunk = require("../HotUpdateChunk");
|
|
|
14
14
|
const { HTML_TYPE } = require("../ModuleSourceTypeConstants");
|
|
15
15
|
const { HTML_MODULE_TYPE } = require("../ModuleTypeConstants");
|
|
16
16
|
const NormalModule = require("../NormalModule");
|
|
17
|
+
const { toTemplateSourceFileName } = require("../TemplatedPathPlugin");
|
|
17
18
|
const ConstDependency = require("../dependencies/ConstDependency");
|
|
18
|
-
const HtmlEntryDependency = require("../dependencies/HtmlEntryDependency");
|
|
19
|
-
const HtmlInlineHtmlDependency = require("../dependencies/HtmlInlineHtmlDependency");
|
|
20
|
-
const HtmlInlineScriptDependency = require("../dependencies/HtmlInlineScriptDependency");
|
|
21
|
-
const HtmlInlineStyleDependency = require("../dependencies/HtmlInlineStyleDependency");
|
|
22
|
-
const HtmlSourceDependency = require("../dependencies/HtmlSourceDependency");
|
|
23
19
|
const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
|
|
24
20
|
const WebpackError = require("../errors/WebpackError");
|
|
25
21
|
const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
|
|
@@ -28,24 +24,40 @@ const createHash = require("../util/createHash");
|
|
|
28
24
|
const createHooksRegistry = require("../util/createHooksRegistry");
|
|
29
25
|
const { getUndoPath, makePathsRelative } = require("../util/identifier");
|
|
30
26
|
const implicitTypeLoaderFallback = require("../util/implicitTypeLoaderFallback");
|
|
27
|
+
const lazyModule = require("../util/lazyModule");
|
|
31
28
|
const memoize = require("../util/memoize");
|
|
32
29
|
const { digestNonNumericOnly } = require("../util/nonNumericOnlyHash");
|
|
30
|
+
const preloadModuleType = require("../util/preloadModuleType");
|
|
33
31
|
const {
|
|
34
32
|
PUBLIC_PATH_AUTO: autoPlaceholder
|
|
35
33
|
} = require("../util/publicPathPlaceholder");
|
|
36
34
|
const removeBOM = require("../util/removeBOM");
|
|
37
|
-
const HtmlGenerator = require("./HtmlGenerator");
|
|
38
35
|
const HtmlModule = require("./HtmlModule");
|
|
39
|
-
const HtmlParser = require("./HtmlParser");
|
|
40
|
-
const { escapeAttribute } = require("./syntax");
|
|
41
36
|
|
|
42
|
-
|
|
37
|
+
const getMimeTypes = memoize(() => require("../util/mimeTypes"));
|
|
38
|
+
|
|
39
|
+
const getHtmlSyntax = memoize(() => require("./syntax"));
|
|
40
|
+
|
|
41
|
+
// Lazy: this plugin is applied on every build (`experiments.html` defaults on),
|
|
42
|
+
// but the HTML parser and tokenizer are only reached once HTML is in the graph.
|
|
43
|
+
const getHtmlParser = lazyModule(() => require("./HtmlParser"));
|
|
44
|
+
|
|
45
|
+
// html generation only happens once a build actually has an html module
|
|
46
|
+
const getHtmlGenerator = memoize(() => require("./HtmlGenerator"));
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @import {
|
|
50
|
+
* EntryDescriptionNormalized,
|
|
51
|
+
* OutputHtmlOptions,
|
|
52
|
+
* HtmlFaviconIcon
|
|
53
|
+
* } from "../../declarations/WebpackOptions"
|
|
54
|
+
*/
|
|
43
55
|
/** @typedef {import("../../declarations/WebpackOptions").OutputHtmlOptions["favicon"]} FaviconOption */
|
|
44
56
|
/** @typedef {import("../../declarations/WebpackOptions").OutputHtmlOptions["manifest"]} ManifestOption */
|
|
45
|
-
/** @typedef {import("../../declarations/WebpackOptions").HtmlFaviconIcon} HtmlFaviconIcon */
|
|
46
57
|
/** @typedef {Exclude<HtmlFaviconIcon, string>} FaviconIcon */
|
|
47
|
-
/** @
|
|
48
|
-
/** @
|
|
58
|
+
/** @import Compiler from "../Compiler" */
|
|
59
|
+
/** @import { HtmlModuleBuildInfo } from "./HtmlModule" */
|
|
60
|
+
/** @import HtmlParser from "./HtmlParser" */
|
|
49
61
|
/** @typedef {{ request: string, entryName: string, type: "script" | "script-module" | "modulepreload" | "stylesheet" | "html" | "preload" | "prefetch", css?: boolean }} HtmlEntryInfo */
|
|
50
62
|
|
|
51
63
|
/** @typedef {{ outputName: string }} HtmlTransformHtmlContext */
|
|
@@ -114,7 +126,6 @@ const DEFAULT_FAVICON = new URL("./favicon.svg", pathToFileURL(__filename))
|
|
|
114
126
|
.href;
|
|
115
127
|
|
|
116
128
|
// mime-db is heavy — only load it when a favicon actually needs a `type`.
|
|
117
|
-
const getMimeTypes = memoize(() => require("../util/mimeTypes"));
|
|
118
129
|
|
|
119
130
|
/**
|
|
120
131
|
* Resolves `output.html.favicon` for one page to `[rel, icon]` pairs.
|
|
@@ -150,6 +161,7 @@ const resolveFaviconLinks = (favicon, name) => {
|
|
|
150
161
|
* @returns {string} a `<link rel=… [attrs…] href=…>` tag; `type` defaults to the file format
|
|
151
162
|
*/
|
|
152
163
|
const faviconLinkTag = (rel, icon) => {
|
|
164
|
+
const { escapeAttribute } = getHtmlSyntax();
|
|
153
165
|
const type = icon.type || getMimeTypes().lookup(icon.href) || "";
|
|
154
166
|
const attrs = [
|
|
155
167
|
`rel="${escapeAttribute(rel)}"`,
|
|
@@ -186,9 +198,27 @@ const manifestLinkTag = (manifest, name) => {
|
|
|
186
198
|
JSON.stringify(value),
|
|
187
199
|
"utf8"
|
|
188
200
|
).toString("base64")}`;
|
|
189
|
-
return `<link rel="manifest" href="${escapeAttribute(
|
|
201
|
+
return `<link rel="manifest" href="${getHtmlSyntax().escapeAttribute(
|
|
202
|
+
href
|
|
203
|
+
)}">`;
|
|
190
204
|
};
|
|
191
205
|
|
|
206
|
+
// Decided while the page's HTML is generated, which happens once per module —
|
|
207
|
+
// and one synthetic page module can back several entries — so an entry's `html`
|
|
208
|
+
// object can't override it.
|
|
209
|
+
/** @type {"inline"[]} */
|
|
210
|
+
const GLOBAL_ONLY_HTML_OPTIONS = ["inline"];
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* SRI is on when `integrity` names at least one algorithm.
|
|
214
|
+
* @param {OutputHtmlOptions["integrity"]} integrity integrity option
|
|
215
|
+
* @returns {boolean} true when integrity attributes must be emitted
|
|
216
|
+
*/
|
|
217
|
+
const isIntegrityEnabled = (integrity) =>
|
|
218
|
+
integrity === true ||
|
|
219
|
+
typeof integrity === "function" ||
|
|
220
|
+
(Array.isArray(integrity) && integrity.length > 0);
|
|
221
|
+
|
|
192
222
|
// `\.html`/`\.css` request matchers for the synthetic `output.html` wrapper.
|
|
193
223
|
const HTML_REQUEST_RE = /\.html(\?|$)/i;
|
|
194
224
|
const CSS_REQUEST_RE = /\.css(\?|$)/i;
|
|
@@ -299,25 +329,59 @@ class HtmlModulesPlugin {
|
|
|
299
329
|
apply(compiler) {
|
|
300
330
|
const { output } = compiler.options;
|
|
301
331
|
const htmlOption = output.html;
|
|
302
|
-
const
|
|
303
|
-
|
|
304
|
-
//
|
|
305
|
-
//
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
new WebpackError(
|
|
313
|
-
`output.html.scriptLoading: "${scriptLoading}" is ignored with output.module — ES module scripts are always deferred.`
|
|
314
|
-
)
|
|
315
|
-
);
|
|
316
|
-
});
|
|
332
|
+
const globalHtmlOptions =
|
|
333
|
+
typeof htmlOption === "object" ? htmlOption : undefined;
|
|
334
|
+
// Collected while entries are resolved (`entryOption`, before the first
|
|
335
|
+
// compilation) and reported on every compilation; a Set dedupes entries
|
|
336
|
+
// that hit the same problem.
|
|
337
|
+
/** @type {Set<string>} */
|
|
338
|
+
const optionWarnings = new Set();
|
|
339
|
+
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
|
|
340
|
+
for (const message of optionWarnings) {
|
|
341
|
+
compilation.warnings.push(new WebpackError(message));
|
|
317
342
|
}
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
// Resolved options per entry that owns a generated page, read back when the
|
|
346
|
+
// page is emitted (`csp`, `integrity`) — one synthetic page module can back
|
|
347
|
+
// several entries, so those can only be applied per emitted asset.
|
|
348
|
+
/** @type {Map<string, OutputHtmlOptions>} */
|
|
349
|
+
const htmlOptionsByEntry = new Map();
|
|
350
|
+
// SRI sentinels are emitted while the page's HTML is generated, before the
|
|
351
|
+
// owning entry is known, so any page asking for integrity turns them on for
|
|
352
|
+
// all of them; pages that don't want SRI drop them again on emit. Authored
|
|
353
|
+
// `.html` pages never reach the entry hook, hence the global seed.
|
|
354
|
+
let anyIntegrity = isIntegrityEnabled(
|
|
355
|
+
globalHtmlOptions && globalHtmlOptions.integrity
|
|
356
|
+
);
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Options for one page: an entry's `html` object overrides `output.html`
|
|
360
|
+
* option by option, `true` inherits it as-is.
|
|
361
|
+
* @param {EntryDescriptionNormalized["html"]} html the entry's `html` value
|
|
362
|
+
* @param {string} name entry name
|
|
363
|
+
* @returns {OutputHtmlOptions} resolved options
|
|
364
|
+
*/
|
|
365
|
+
const resolveHtmlOptions = (html, name) => {
|
|
366
|
+
const options =
|
|
367
|
+
typeof html !== "object"
|
|
368
|
+
? globalHtmlOptions || {}
|
|
369
|
+
: globalHtmlOptions
|
|
370
|
+
? { ...globalHtmlOptions, ...html }
|
|
371
|
+
: html;
|
|
372
|
+
if (typeof html === "object") {
|
|
373
|
+
for (const option of GLOBAL_ONLY_HTML_OPTIONS) {
|
|
374
|
+
if (html[option] !== undefined) {
|
|
375
|
+
optionWarnings.add(
|
|
376
|
+
`entry "${name}" html.${option} is ignored — ${option} is resolved once per generated page and can only be set on output.html.`
|
|
377
|
+
);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
htmlOptionsByEntry.set(name, options);
|
|
382
|
+
if (isIntegrityEnabled(options.integrity)) anyIntegrity = true;
|
|
383
|
+
return options;
|
|
384
|
+
};
|
|
321
385
|
|
|
322
386
|
// `output.html` (or an entry's `html`) wraps a non-HTML entry in a
|
|
323
387
|
// synthetic HTML module so the existing pipeline injects its JS/CSS
|
|
@@ -329,6 +393,9 @@ class HtmlModulesPlugin {
|
|
|
329
393
|
EntryOptionPlugin.getHooks(compiler).entry.tap(
|
|
330
394
|
PLUGIN_NAME,
|
|
331
395
|
(context, name, desc) => {
|
|
396
|
+
// Resolved for every entry, including the authored `.html` ones that
|
|
397
|
+
// need no wrapper below — their page reads back `csp`/`integrity` too.
|
|
398
|
+
const htmlObj = resolveHtmlOptions(desc.html, name);
|
|
332
399
|
const html = desc.html !== undefined ? desc.html : htmlOption;
|
|
333
400
|
const imports = desc.import;
|
|
334
401
|
if (
|
|
@@ -338,6 +405,26 @@ class HtmlModulesPlugin {
|
|
|
338
405
|
) {
|
|
339
406
|
return;
|
|
340
407
|
}
|
|
408
|
+
const scriptLoading = htmlObj.scriptLoading || "auto";
|
|
409
|
+
// ESM output emits `type="module"` (already deferred), so
|
|
410
|
+
// scriptLoading is ignored under output.module — warn on an
|
|
411
|
+
// explicit defer/blocking.
|
|
412
|
+
let scriptAttr = " defer";
|
|
413
|
+
if (output.module) {
|
|
414
|
+
scriptAttr = "";
|
|
415
|
+
if (scriptLoading === "defer" || scriptLoading === "blocking") {
|
|
416
|
+
const source =
|
|
417
|
+
typeof desc.html === "object" &&
|
|
418
|
+
desc.html.scriptLoading !== undefined
|
|
419
|
+
? `entry "${name}" html`
|
|
420
|
+
: "output.html";
|
|
421
|
+
optionWarnings.add(
|
|
422
|
+
`${source}.scriptLoading: "${scriptLoading}" is ignored with output.module — ES module scripts are always deferred.`
|
|
423
|
+
);
|
|
424
|
+
}
|
|
425
|
+
} else if (scriptLoading === "blocking") {
|
|
426
|
+
scriptAttr = "";
|
|
427
|
+
}
|
|
341
428
|
const entries = compiler.options.entry;
|
|
342
429
|
const requests =
|
|
343
430
|
typeof entries === "object" && entries[name]
|
|
@@ -352,27 +439,13 @@ class HtmlModulesPlugin {
|
|
|
352
439
|
scripts.push(`<script${scriptAttr} src="${r}"></script>`);
|
|
353
440
|
}
|
|
354
441
|
}
|
|
355
|
-
const
|
|
356
|
-
typeof html === "object"
|
|
357
|
-
? html
|
|
358
|
-
: typeof htmlOption === "object"
|
|
359
|
-
? htmlOption
|
|
360
|
-
: {};
|
|
361
|
-
const headTags = HtmlParser.buildHeadTags(htmlObj);
|
|
442
|
+
const headTags = getHtmlSyntax().buildHeadTags(htmlObj);
|
|
362
443
|
// Injected into webpack-generated pages only; each icon's href is a
|
|
363
444
|
// normal request the parser turns into a hashed asset.
|
|
364
|
-
const favicon
|
|
365
|
-
typeof html === "object" && html.favicon !== undefined
|
|
366
|
-
? html.favicon
|
|
367
|
-
: false;
|
|
368
|
-
const faviconTag = resolveFaviconLinks(favicon, name)
|
|
445
|
+
const faviconTag = resolveFaviconLinks(htmlObj.favicon, name)
|
|
369
446
|
.map(([rel, icon]) => faviconLinkTag(rel, icon))
|
|
370
447
|
.join("");
|
|
371
|
-
const manifest
|
|
372
|
-
typeof html === "object" && html.manifest !== undefined
|
|
373
|
-
? html.manifest
|
|
374
|
-
: false;
|
|
375
|
-
const manifestTag = manifestLinkTag(manifest, name);
|
|
448
|
+
const manifestTag = manifestLinkTag(htmlObj.manifest, name);
|
|
376
449
|
const inject = htmlObj.inject;
|
|
377
450
|
const scriptsInHead =
|
|
378
451
|
inject === "head" || (inject !== "body" && output.module);
|
|
@@ -402,12 +475,13 @@ class HtmlModulesPlugin {
|
|
|
402
475
|
// `<link rel="modulepreload">` intact.
|
|
403
476
|
// Per-compilation state: the HTML modules seen during make (so
|
|
404
477
|
// `finishMake` creates their entries without scanning the whole module
|
|
405
|
-
// graph)
|
|
406
|
-
|
|
478
|
+
// graph), the stylesheet entry names (read in `afterChunks`) and the html
|
|
479
|
+
// options of every emitted page, keyed by its asset name.
|
|
480
|
+
/** @type {WeakMap<import("../Compilation"), { htmlModules: Set<import("../Module")>, stylesheetEntries: Set<string>, htmlAssetOptions: Map<string, OutputHtmlOptions> }>} */
|
|
407
481
|
const compilationState = new WeakMap();
|
|
408
482
|
/**
|
|
409
483
|
* @param {import("../Compilation")} compilation compilation
|
|
410
|
-
* @returns {{ htmlModules: Set<import("../Module")>, stylesheetEntries: Set<string>,
|
|
484
|
+
* @returns {{ htmlModules: Set<import("../Module")>, stylesheetEntries: Set<string>, htmlAssetOptions: Map<string, OutputHtmlOptions> }} per-compilation state
|
|
411
485
|
*/
|
|
412
486
|
const getState = (compilation) => {
|
|
413
487
|
let state = compilationState.get(compilation);
|
|
@@ -415,7 +489,7 @@ class HtmlModulesPlugin {
|
|
|
415
489
|
state = {
|
|
416
490
|
htmlModules: new Set(),
|
|
417
491
|
stylesheetEntries: new Set(),
|
|
418
|
-
|
|
492
|
+
htmlAssetOptions: new Map()
|
|
419
493
|
};
|
|
420
494
|
compilationState.set(compilation, state);
|
|
421
495
|
}
|
|
@@ -515,15 +589,10 @@ class HtmlModulesPlugin {
|
|
|
515
589
|
);
|
|
516
590
|
});
|
|
517
591
|
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
typeof integrity === "function" ||
|
|
523
|
-
(Array.isArray(integrity) && integrity.length > 0);
|
|
524
|
-
// `output.html.csp` injects a `<meta http-equiv="Content-Security-Policy">`
|
|
525
|
-
// once the page's inline content is final (in `processAssets` below).
|
|
526
|
-
const csp = typeof htmlOption === "object" ? htmlOption.csp : undefined;
|
|
592
|
+
// `csp` injects a `<meta http-equiv="Content-Security-Policy">` and
|
|
593
|
+
// `integrity` resolves the SRI sentinels — both once the page's inline
|
|
594
|
+
// content is final (in `processAssets` below), per page, so an entry's
|
|
595
|
+
// `html` can override them.
|
|
527
596
|
// `"auto"` marks implicit enablement (no user rule for HTML files) — see
|
|
528
597
|
// `applyExperimentsDefaults`. Only then loaders win over the built-in type
|
|
529
598
|
// (e.g. html-webpack-plugin's template loader in its child compiler).
|
|
@@ -547,7 +616,13 @@ class HtmlModulesPlugin {
|
|
|
547
616
|
// module in the graph. Tracking only records; entries are still
|
|
548
617
|
// added (and awaited) in `finishMake`.
|
|
549
618
|
const trackHtmlModule = (/** @type {import("../Module")} */ module) => {
|
|
550
|
-
if (module.type
|
|
619
|
+
if (module.type !== HTML_MODULE_TYPE) return;
|
|
620
|
+
// enabled here, not on the compilation hook: an integrity build
|
|
621
|
+
// with no html module must not load the generator
|
|
622
|
+
if (anyIntegrity) {
|
|
623
|
+
getHtmlGenerator().enableIntegritySentinels(compilation);
|
|
624
|
+
}
|
|
625
|
+
htmlModules.add(module);
|
|
551
626
|
};
|
|
552
627
|
compilation.hooks.succeedModule.tap(PLUGIN_NAME, trackHtmlModule);
|
|
553
628
|
compilation.hooks.stillValidModule.tap(PLUGIN_NAME, trackHtmlModule);
|
|
@@ -559,7 +634,7 @@ class HtmlModulesPlugin {
|
|
|
559
634
|
// with CORS; without `output.crossOriginLoading` the browser
|
|
560
635
|
// silently ignores `integrity` on cross-origin loads. Warn once
|
|
561
636
|
// so a CDN deployment doesn't ship no-op integrity attributes.
|
|
562
|
-
if (
|
|
637
|
+
if (anyIntegrity && !compilation.outputOptions.crossOriginLoading) {
|
|
563
638
|
compilation.warnings.push(
|
|
564
639
|
new WebpackError(
|
|
565
640
|
'output.html.integrity is set but output.crossOriginLoading is not. Browsers ignore Subresource Integrity on cross-origin requests made without CORS; set output.crossOriginLoading (e.g. "anonymous") if any asset is served from a different origin.'
|
|
@@ -572,29 +647,32 @@ class HtmlModulesPlugin {
|
|
|
572
647
|
stage: Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_HASH + 1
|
|
573
648
|
},
|
|
574
649
|
async (assets) => {
|
|
575
|
-
const {
|
|
650
|
+
const { htmlAssetOptions } = getState(compilation);
|
|
576
651
|
const hooks = HtmlModulesPlugin.getCompilationHooks(compilation);
|
|
577
652
|
/** @type {Set<string>} */
|
|
578
653
|
const inlinedFiles = new Set();
|
|
579
654
|
for (const name of Object.keys(assets)) {
|
|
580
|
-
|
|
655
|
+
const pageOptions = htmlAssetOptions.get(name);
|
|
656
|
+
if (pageOptions === undefined) continue;
|
|
581
657
|
const content = assets[name].source();
|
|
582
658
|
if (typeof content !== "string") continue;
|
|
659
|
+
const { csp, integrity } = pageOptions;
|
|
583
660
|
let resolved = content;
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
661
|
+
// Sentinels are emitted whenever any page wants SRI, so a page
|
|
662
|
+
// that doesn't drops them again here.
|
|
663
|
+
if (resolved.includes("__WEBPACK_HTML_INTEGRITY__")) {
|
|
664
|
+
resolved = isIntegrityEnabled(integrity)
|
|
665
|
+
? getHtmlGenerator().resolveChunkIntegritySentinels(
|
|
666
|
+
resolved,
|
|
667
|
+
compilation,
|
|
668
|
+
/** @type {import("./HtmlGenerator").HtmlIntegrity} */ (
|
|
669
|
+
integrity
|
|
670
|
+
)
|
|
671
|
+
)
|
|
672
|
+
: getHtmlGenerator().stripChunkIntegritySentinels(resolved);
|
|
595
673
|
}
|
|
596
674
|
if (resolved.includes("__WEBPACK_HTML_INLINE__")) {
|
|
597
|
-
resolved =
|
|
675
|
+
resolved = getHtmlGenerator().resolveChunkInlineSentinels(
|
|
598
676
|
resolved,
|
|
599
677
|
compilation,
|
|
600
678
|
name,
|
|
@@ -613,15 +691,15 @@ class HtmlModulesPlugin {
|
|
|
613
691
|
});
|
|
614
692
|
const transformTags = hooks.transformTags.taps.length > 0;
|
|
615
693
|
if (injected.length > 0 || transformTags || csp) {
|
|
616
|
-
const model =
|
|
617
|
-
|
|
694
|
+
const model = getHtmlGenerator().collectHtml(resolved);
|
|
695
|
+
getHtmlGenerator().addInjectedTags(model, injected);
|
|
618
696
|
if (transformTags) {
|
|
619
697
|
await hooks.transformTags.promise(model.tags, {
|
|
620
698
|
outputName: name,
|
|
621
699
|
html: resolved
|
|
622
700
|
});
|
|
623
701
|
}
|
|
624
|
-
resolved =
|
|
702
|
+
resolved = getHtmlGenerator().renderHtml(resolved, model, csp);
|
|
625
703
|
}
|
|
626
704
|
// Final, fully-resolved HTML — let plugins transform it (minify,
|
|
627
705
|
// inject a CSP meta, rewrite tags) before it is written.
|
|
@@ -695,58 +773,6 @@ class HtmlModulesPlugin {
|
|
|
695
773
|
compilation.outputOptions.cssChunkFilename;
|
|
696
774
|
}
|
|
697
775
|
});
|
|
698
|
-
compilation.dependencyFactories.set(
|
|
699
|
-
HtmlSourceDependency,
|
|
700
|
-
normalModuleFactory
|
|
701
|
-
);
|
|
702
|
-
compilation.dependencyTemplates.set(
|
|
703
|
-
HtmlSourceDependency,
|
|
704
|
-
new HtmlSourceDependency.Template()
|
|
705
|
-
);
|
|
706
|
-
compilation.dependencyFactories.set(
|
|
707
|
-
HtmlEntryDependency,
|
|
708
|
-
normalModuleFactory
|
|
709
|
-
);
|
|
710
|
-
compilation.dependencyTemplates.set(
|
|
711
|
-
HtmlEntryDependency,
|
|
712
|
-
new HtmlEntryDependency.Template()
|
|
713
|
-
);
|
|
714
|
-
// Inline `<script>` content is bundled as its own entry — the
|
|
715
|
-
// same pipeline that handles `<script src>` — via a
|
|
716
|
-
// `data:text/javascript,...` request. The dependency
|
|
717
|
-
// template rewrites the original tag to `<script src=…>`.
|
|
718
|
-
compilation.dependencyFactories.set(
|
|
719
|
-
HtmlInlineScriptDependency,
|
|
720
|
-
normalModuleFactory
|
|
721
|
-
);
|
|
722
|
-
compilation.dependencyTemplates.set(
|
|
723
|
-
HtmlInlineScriptDependency,
|
|
724
|
-
new HtmlInlineScriptDependency.Template()
|
|
725
|
-
);
|
|
726
|
-
// Inline `<style>` content is routed through the CSS pipeline
|
|
727
|
-
// as a `data:text/css` module. The dependency template reads
|
|
728
|
-
// the processed CSS text from the CSS module's code
|
|
729
|
-
// generation data (`css-text` channel set by CssGenerator
|
|
730
|
-
// when `exportType` is `"text"`).
|
|
731
|
-
compilation.dependencyFactories.set(
|
|
732
|
-
HtmlInlineStyleDependency,
|
|
733
|
-
normalModuleFactory
|
|
734
|
-
);
|
|
735
|
-
compilation.dependencyTemplates.set(
|
|
736
|
-
HtmlInlineStyleDependency,
|
|
737
|
-
new HtmlInlineStyleDependency.Template()
|
|
738
|
-
);
|
|
739
|
-
// `<iframe srcdoc>` content is routed back through the HTML
|
|
740
|
-
// pipeline as a `data:text/html` module; the template reads the
|
|
741
|
-
// processed HTML from the nested module's `html` channel.
|
|
742
|
-
compilation.dependencyFactories.set(
|
|
743
|
-
HtmlInlineHtmlDependency,
|
|
744
|
-
normalModuleFactory
|
|
745
|
-
);
|
|
746
|
-
compilation.dependencyTemplates.set(
|
|
747
|
-
HtmlInlineHtmlDependency,
|
|
748
|
-
new HtmlInlineHtmlDependency.Template()
|
|
749
|
-
);
|
|
750
776
|
compilation.dependencyTemplates.set(
|
|
751
777
|
StaticExportsDependency,
|
|
752
778
|
new StaticExportsDependency.Template()
|
|
@@ -759,6 +785,74 @@ class HtmlModulesPlugin {
|
|
|
759
785
|
ConstDependency,
|
|
760
786
|
new ConstDependency.Template()
|
|
761
787
|
);
|
|
788
|
+
// registered when the first html module is prepared, so a build
|
|
789
|
+
// without html never loads these dependency classes
|
|
790
|
+
normalModuleFactory.hooks.prepareModuleType
|
|
791
|
+
.for(HTML_MODULE_TYPE)
|
|
792
|
+
.tap(PLUGIN_NAME, () => {
|
|
793
|
+
const HtmlSourceDependency = require("../dependencies/HtmlSourceDependency");
|
|
794
|
+
const HtmlEntryDependency = require("../dependencies/HtmlEntryDependency");
|
|
795
|
+
const HtmlInlineScriptDependency = require("../dependencies/HtmlInlineScriptDependency");
|
|
796
|
+
const HtmlInlineStyleDependency = require("../dependencies/HtmlInlineStyleDependency");
|
|
797
|
+
const HtmlInlineHtmlDependency = require("../dependencies/HtmlInlineHtmlDependency");
|
|
798
|
+
|
|
799
|
+
compilation.dependencyFactories.set(
|
|
800
|
+
HtmlSourceDependency,
|
|
801
|
+
normalModuleFactory
|
|
802
|
+
);
|
|
803
|
+
compilation.dependencyTemplates.set(
|
|
804
|
+
HtmlSourceDependency,
|
|
805
|
+
new HtmlSourceDependency.Template()
|
|
806
|
+
);
|
|
807
|
+
compilation.dependencyFactories.set(
|
|
808
|
+
HtmlEntryDependency,
|
|
809
|
+
normalModuleFactory
|
|
810
|
+
);
|
|
811
|
+
compilation.dependencyTemplates.set(
|
|
812
|
+
HtmlEntryDependency,
|
|
813
|
+
new HtmlEntryDependency.Template()
|
|
814
|
+
);
|
|
815
|
+
// Inline `<script>` content is bundled as its own entry — the
|
|
816
|
+
// same pipeline that handles `<script src>` — via a
|
|
817
|
+
// `data:text/javascript,...` request. The dependency
|
|
818
|
+
// template rewrites the original tag to `<script src=…>`.
|
|
819
|
+
compilation.dependencyFactories.set(
|
|
820
|
+
HtmlInlineScriptDependency,
|
|
821
|
+
normalModuleFactory
|
|
822
|
+
);
|
|
823
|
+
compilation.dependencyTemplates.set(
|
|
824
|
+
HtmlInlineScriptDependency,
|
|
825
|
+
new HtmlInlineScriptDependency.Template()
|
|
826
|
+
);
|
|
827
|
+
// Inline `<style>` content is routed through the CSS pipeline
|
|
828
|
+
// as a `data:text/css` module. The dependency template reads
|
|
829
|
+
// the processed CSS text from the CSS module's code
|
|
830
|
+
// generation data (`css-text` channel set by CssGenerator
|
|
831
|
+
// when `exportType` is `"text"`).
|
|
832
|
+
compilation.dependencyFactories.set(
|
|
833
|
+
HtmlInlineStyleDependency,
|
|
834
|
+
normalModuleFactory
|
|
835
|
+
);
|
|
836
|
+
compilation.dependencyTemplates.set(
|
|
837
|
+
HtmlInlineStyleDependency,
|
|
838
|
+
new HtmlInlineStyleDependency.Template()
|
|
839
|
+
);
|
|
840
|
+
// `<iframe srcdoc>` content is routed back through the HTML
|
|
841
|
+
// pipeline as a `data:text/html` module; the template reads the
|
|
842
|
+
// processed HTML from the nested module's `html` channel.
|
|
843
|
+
compilation.dependencyFactories.set(
|
|
844
|
+
HtmlInlineHtmlDependency,
|
|
845
|
+
normalModuleFactory
|
|
846
|
+
);
|
|
847
|
+
compilation.dependencyTemplates.set(
|
|
848
|
+
HtmlInlineHtmlDependency,
|
|
849
|
+
new HtmlInlineHtmlDependency.Template()
|
|
850
|
+
);
|
|
851
|
+
});
|
|
852
|
+
preloadModuleType(normalModuleFactory, PLUGIN_NAME, [
|
|
853
|
+
[HTML_MODULE_TYPE, [getHtmlParser]]
|
|
854
|
+
]);
|
|
855
|
+
|
|
762
856
|
normalModuleFactory.hooks.createModuleClass
|
|
763
857
|
.for(HTML_MODULE_TYPE)
|
|
764
858
|
.tap(
|
|
@@ -777,7 +871,7 @@ class HtmlModulesPlugin {
|
|
|
777
871
|
options
|
|
778
872
|
)
|
|
779
873
|
);
|
|
780
|
-
return new
|
|
874
|
+
return new (getHtmlParser.loaded())(parserOptions);
|
|
781
875
|
});
|
|
782
876
|
|
|
783
877
|
normalModuleFactory.hooks.createGenerator
|
|
@@ -792,7 +886,10 @@ class HtmlModulesPlugin {
|
|
|
792
886
|
options
|
|
793
887
|
)
|
|
794
888
|
);
|
|
795
|
-
return new
|
|
889
|
+
return new (getHtmlGenerator())(
|
|
890
|
+
generatorOptions,
|
|
891
|
+
compilation.moduleGraph
|
|
892
|
+
);
|
|
796
893
|
});
|
|
797
894
|
|
|
798
895
|
NormalModule.getCompilationHooks(compilation).processResult.tap(
|
|
@@ -872,9 +969,9 @@ class HtmlModulesPlugin {
|
|
|
872
969
|
// Asset URL sentinels (from `HtmlEntryDependency` resource-hint
|
|
873
970
|
// tags) resolve here too — deferred from template.apply so it
|
|
874
971
|
// doesn't race with asset-module codegen.
|
|
875
|
-
const resolvedContent =
|
|
876
|
-
|
|
877
|
-
|
|
972
|
+
const resolvedContent = getHtmlGenerator().resolveAssetUrlSentinels(
|
|
973
|
+
getHtmlGenerator().embedInlineChunkHashes(
|
|
974
|
+
getHtmlGenerator().resolveChunkUrlSentinels(
|
|
878
975
|
/** @type {string} */ (placeholderSource.source()),
|
|
879
976
|
compilation
|
|
880
977
|
),
|
|
@@ -897,11 +994,14 @@ class HtmlModulesPlugin {
|
|
|
897
994
|
const sourceFilename =
|
|
898
995
|
resource.startsWith("data:text/html") && chunk.name
|
|
899
996
|
? chunk.name
|
|
900
|
-
:
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
997
|
+
: toTemplateSourceFileName(
|
|
998
|
+
makePathsRelative(
|
|
999
|
+
compiler.context,
|
|
1000
|
+
/** @type {string} */ (resource),
|
|
1001
|
+
compiler.root
|
|
1002
|
+
).replace(/^\.\//, ""),
|
|
1003
|
+
compilation
|
|
1004
|
+
);
|
|
905
1005
|
const filenameTemplate = HtmlModulesPlugin.getChunkFilenameTemplate(
|
|
906
1006
|
chunk,
|
|
907
1007
|
outputOptions
|
|
@@ -1012,10 +1112,11 @@ class HtmlModulesPlugin {
|
|
|
1012
1112
|
// Resolve linked-page (`type: "html"`) sentinels to each page's
|
|
1013
1113
|
// emitted filename before the undo path, so the href is relative to
|
|
1014
1114
|
// this page.
|
|
1015
|
-
const finalContent =
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1115
|
+
const finalContent = getHtmlGenerator()
|
|
1116
|
+
.resolveHtmlPageUrlSentinels(
|
|
1117
|
+
resolvedContent,
|
|
1118
|
+
computePageFilenameByEntry
|
|
1119
|
+
)
|
|
1019
1120
|
.split(autoPlaceholder)
|
|
1020
1121
|
.join(undoPath);
|
|
1021
1122
|
const finalSource = new RawSource(finalContent);
|
|
@@ -1033,8 +1134,14 @@ class HtmlModulesPlugin {
|
|
|
1033
1134
|
outputOptions
|
|
1034
1135
|
);
|
|
1035
1136
|
|
|
1036
|
-
// Track HTML pages
|
|
1037
|
-
|
|
1137
|
+
// Track HTML pages (never JS chunks) with the html options of the
|
|
1138
|
+
// entry that owns them, read back by the emit passes below.
|
|
1139
|
+
getState(compilation).htmlAssetOptions.set(
|
|
1140
|
+
filename,
|
|
1141
|
+
(chunk.name && htmlOptionsByEntry.get(chunk.name)) ||
|
|
1142
|
+
globalHtmlOptions ||
|
|
1143
|
+
{}
|
|
1144
|
+
);
|
|
1038
1145
|
|
|
1039
1146
|
result.push({
|
|
1040
1147
|
render: () => finalSource,
|
|
@@ -1060,6 +1167,13 @@ class HtmlModulesPlugin {
|
|
|
1060
1167
|
if (htmlModules.size === 0) return source;
|
|
1061
1168
|
const raw = source.source();
|
|
1062
1169
|
if (typeof raw !== "string") return source;
|
|
1170
|
+
// Every sentinel shares this prefix — one scan answers the common
|
|
1171
|
+
// sentinel-free case instead of five.
|
|
1172
|
+
if (!raw.includes("__WEBPACK_HTML_")) {
|
|
1173
|
+
return source;
|
|
1174
|
+
}
|
|
1175
|
+
// Exact re-check on a prefix hit: the autoPlaceholder strip below is
|
|
1176
|
+
// not sentinel-guarded, so bare-prefix false positives must bail here.
|
|
1063
1177
|
if (
|
|
1064
1178
|
!raw.includes("__WEBPACK_HTML_CHUNK_URL__") &&
|
|
1065
1179
|
!raw.includes("__WEBPACK_HTML_PAGE_URL__") &&
|
|
@@ -1072,20 +1186,26 @@ class HtmlModulesPlugin {
|
|
|
1072
1186
|
// Strip integrity and inline sentinels (not resolve): a JS chunk
|
|
1073
1187
|
// can't hold real SRI hashes for its own not-yet-final bytes, and
|
|
1074
1188
|
// inline content belongs only in the final .html, never in JS bundles.
|
|
1075
|
-
const resolved =
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1189
|
+
const resolved = getHtmlGenerator()
|
|
1190
|
+
.stripChunkIntegritySentinels(
|
|
1191
|
+
getHtmlGenerator()
|
|
1192
|
+
.resolveAssetUrlSentinels(
|
|
1193
|
+
getHtmlGenerator().resolveHtmlPageUrlSentinels(
|
|
1194
|
+
getHtmlGenerator().resolveChunkUrlSentinels(
|
|
1195
|
+
raw,
|
|
1196
|
+
compilation
|
|
1197
|
+
),
|
|
1198
|
+
computePageFilenameByEntry
|
|
1199
|
+
),
|
|
1200
|
+
compilation
|
|
1201
|
+
)
|
|
1202
|
+
.split(autoPlaceholder)
|
|
1203
|
+
.join("")
|
|
1082
1204
|
)
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
""
|
|
1088
|
-
);
|
|
1205
|
+
.replace(
|
|
1206
|
+
/__WEBPACK_HTML_INLINE__[0-9a-f]+__[a-z]+(?:__[0-9a-f]+)?__END__/g,
|
|
1207
|
+
""
|
|
1208
|
+
);
|
|
1089
1209
|
if (resolved === raw) return source;
|
|
1090
1210
|
const chunkId = String(renderContext.chunk.id);
|
|
1091
1211
|
const prior = sentinelResolvedSourceCache.get(chunkId);
|