@depup/webpack 5.109.0-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 +7 -7
- package/bin/webpack.js +12 -0
- package/changes.json +10 -10
- 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 +43 -32
- package/lib/ChunkGroup.js +7 -7
- package/lib/ChunkTemplate.js +35 -44
- package/lib/CircularModulesPlugin.js +205 -28
- package/lib/CleanPlugin.js +15 -16
- package/lib/CodeGenerationResults.js +11 -8
- package/lib/CompatibilityPlugin.js +38 -7
- package/lib/Compilation.js +709 -414
- package/lib/Compiler.js +69 -42
- 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 +168 -57
- 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 +123 -19
- package/lib/ExportsInfoApiPlugin.js +2 -4
- package/lib/ExternalModule.js +242 -84
- package/lib/ExternalModuleFactoryPlugin.js +97 -38
- package/lib/ExternalsPlugin.js +10 -6
- package/lib/FileSystemInfo.js +116 -42
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
- package/lib/FlagDependencyExportsPlugin.js +76 -19
- package/lib/FlagDependencyUsagePlugin.js +63 -57
- 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 +28 -36
- 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 +22 -6
- 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 +221 -156
- package/lib/NormalModuleFactory.js +563 -112
- 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 +346 -256
- 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 +55 -25
- 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 +289 -28
- 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 +282 -81
- 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 +53 -66
- package/lib/container/ModuleFederationPlugin.js +7 -18
- 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 +178 -44
- package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
- package/lib/css/CssLoadingRuntimeModule.js +82 -36
- package/lib/css/CssModule.js +10 -7
- package/lib/css/CssModulesPlugin.js +197 -106
- package/lib/css/CssParser.js +1248 -618
- 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 +10396 -952
- 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 +140 -45
- package/lib/dependencies/CommonJsExportsDependency.js +53 -49
- package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
- package/lib/dependencies/CommonJsFullRequireDependency.js +140 -26
- package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -48
- 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 +15 -11
- 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 +159 -71
- 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 +28 -20
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
- package/lib/dependencies/HarmonyImportGuard.js +21 -30
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +106 -55
- 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 +170 -71
- 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 +28 -10
- package/lib/hmr/parserHooks.js +56 -0
- package/lib/html/HtmlGenerator.js +299 -79
- package/lib/html/HtmlModule.js +7 -3
- package/lib/html/HtmlModulesPlugin.js +312 -174
- 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 +7819 -3331
- 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 +31 -18
- 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 +181 -162
- package/lib/javascript/JavascriptParser.js +291 -112
- 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 +3403 -300
- 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 +81 -20
- package/lib/node/ReadFileCompileWasmPlugin.js +37 -17
- package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
- package/lib/node/nodeConsole.js +7 -3
- package/lib/optimize/AggressiveMergingPlugin.js +21 -17
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
- package/lib/optimize/ConcatenatedModule.js +996 -477
- 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 +124 -59
- package/lib/optimize/RealContentHashPlugin.js +20 -13
- 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 +232 -68
- 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 +377 -136
- 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 +274 -942
- package/lib/serialization/ErrorObjectSerializer.js +1 -1
- package/lib/serialization/FileMiddleware.js +305 -66
- 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 +253 -226
- package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
- package/lib/stats/DefaultStatsPrinterPlugin.js +60 -192
- package/lib/stats/StatsFactory.js +56 -35
- 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 +25 -1
- 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 +37 -30
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +780 -91
- 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 +4013 -738
- package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
|
@@ -6,23 +6,60 @@
|
|
|
6
6
|
|
|
7
7
|
const { RawSource } = require("webpack-sources");
|
|
8
8
|
const ModuleFilenameHelpers = require("../ModuleFilenameHelpers");
|
|
9
|
+
const {
|
|
10
|
+
ASSET_URL_TYPE,
|
|
11
|
+
JAVASCRIPT_TYPE
|
|
12
|
+
} = require("../ModuleSourceTypeConstants");
|
|
9
13
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
10
14
|
const CssUrlDependency = require("../dependencies/CssUrlDependency");
|
|
11
15
|
const HtmlSourceDependency = require("../dependencies/HtmlSourceDependency");
|
|
12
16
|
const URLDependency = require("../dependencies/URLDependency");
|
|
13
|
-
const
|
|
14
|
-
const
|
|
17
|
+
const WorkerDependency = require("../dependencies/WorkerDependency");
|
|
18
|
+
const lazyModule = require("../util/lazyModule");
|
|
19
|
+
const memoize = require("../util/memoize");
|
|
20
|
+
const {
|
|
21
|
+
PUBLIC_PATH_AUTO,
|
|
22
|
+
PUBLIC_PATH_FULL_HASH
|
|
23
|
+
} = require("../util/publicPathPlaceholder");
|
|
24
|
+
const { guessAsAttribute } = require("./parseResourceHintOptions");
|
|
15
25
|
const parseResourceHintOptions = require("./parseResourceHintOptions");
|
|
16
26
|
|
|
17
|
-
/** @
|
|
18
|
-
/** @
|
|
19
|
-
/** @
|
|
20
|
-
/** @
|
|
21
|
-
/** @
|
|
22
|
-
/** @
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
|
|
27
|
+
/** @import Chunk from "../Chunk" */
|
|
28
|
+
/** @import ChunkGraph from "../ChunkGraph" */
|
|
29
|
+
/** @import CodeGenerationResults from "../CodeGenerationResults" */
|
|
30
|
+
/** @import Compilation from "../Compilation" */
|
|
31
|
+
/** @import Compiler from "../Compiler" */
|
|
32
|
+
/** @import Module, { RuntimeRequirements } from "../Module" */
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The attributes a `<link>` carries besides its href and `as`.
|
|
36
|
+
* @typedef {object} StartupHintAttributes
|
|
37
|
+
* @property {("low" | "high" | "auto" | undefined)=} fetchPriority
|
|
38
|
+
* @property {string=} type
|
|
39
|
+
* @property {string=} media
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* One asset a chunk hints at startup, merged across every reference to it.
|
|
44
|
+
* @typedef {object} AssetHintEntry
|
|
45
|
+
* @property {Module} assetModule the asset the `<link>` points at
|
|
46
|
+
* @property {Module} originModule the chunk module the reference was written in, which is what a baked href is relative to
|
|
47
|
+
* @property {string} request the original request, for guessing the `as` attribute
|
|
48
|
+
* @property {boolean} preload preload rather than prefetch
|
|
49
|
+
* @property {("low" | "high" | "auto" | undefined)} fetchPriority
|
|
50
|
+
* @property {(string | undefined)} as
|
|
51
|
+
* @property {(string | undefined)} type
|
|
52
|
+
* @property {(string | undefined)} media
|
|
53
|
+
*/
|
|
54
|
+
/**
|
|
55
|
+
* @import {
|
|
56
|
+
* ResourceHintsInitial as ResourceHintsConfig,
|
|
57
|
+
* ResourceHintsOptions,
|
|
58
|
+
* UrlHintRule
|
|
59
|
+
* } from "../../declarations/WebpackOptions"
|
|
60
|
+
*/
|
|
61
|
+
/** @import { HtmlResourceHint } from "../dependencies/HtmlEntryDependency" */
|
|
62
|
+
/** @import { ResourceHintOptions } from "./parseResourceHintOptions" */
|
|
26
63
|
|
|
27
64
|
/**
|
|
28
65
|
* @typedef {object} ResolvedResourceHints
|
|
@@ -90,6 +127,19 @@ const getPublicPathOrigin = (compilation) => {
|
|
|
90
127
|
* @property {(entryName: string) => EntrypointHint[]} getEntrypointHints resolved `<link>`-shaped descriptors for the given entry — auto initial-graph hints plus URL asset hints, then filtered / rewritten through the user function (when `output.resourceHints` is a function). Reads via `stats.entrypoints[name].resourceHints`.
|
|
91
128
|
*/
|
|
92
129
|
|
|
130
|
+
// only a build that actually emits a resource hint needs these
|
|
131
|
+
const getResourceHintRuntimeModule = lazyModule(() =>
|
|
132
|
+
require("./ResourceHintRuntimeModule")
|
|
133
|
+
);
|
|
134
|
+
const getStartupAssetHintRuntimeModule = lazyModule(() =>
|
|
135
|
+
require("./StartupAssetHintRuntimeModule")
|
|
136
|
+
);
|
|
137
|
+
// only reached once a build has an html module, so a js-only build never
|
|
138
|
+
// pays for the html generator this drags in
|
|
139
|
+
const getHtmlEntryDependency = memoize(() =>
|
|
140
|
+
require("../dependencies/HtmlEntryDependency")
|
|
141
|
+
);
|
|
142
|
+
|
|
93
143
|
const PLUGIN_NAME = "ResourceHintPlugin";
|
|
94
144
|
|
|
95
145
|
/** @type {WeakMap<Compilation, CompilationResolver>} */
|
|
@@ -100,6 +150,57 @@ const compilationResolvers = new WeakMap();
|
|
|
100
150
|
// magic comments still work — they route through `applyParsedHints`.
|
|
101
151
|
const DEFAULT_ASSETS_EXCLUDE_REGEXP = /\.(?:webmanifest|pdf|txt)(?:\?.*)?$/i;
|
|
102
152
|
|
|
153
|
+
// Initial-graph auto hints target JS chunk output files only.
|
|
154
|
+
const JS_CHUNK_FILE_REGEXP = /\.m?jsx?$/i;
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* True for the URL-referenced-asset deps that can carry resource-hint flags.
|
|
158
|
+
* Type guard so callers keep the narrowed union without re-listing the classes.
|
|
159
|
+
* @param {import("../Dependency")} dep dependency
|
|
160
|
+
* @returns {dep is URLDependency | CssUrlDependency | HtmlSourceDependency} whether it is a URL asset dep
|
|
161
|
+
*/
|
|
162
|
+
const isUrlAssetDep = (dep) =>
|
|
163
|
+
dep instanceof URLDependency ||
|
|
164
|
+
dep instanceof CssUrlDependency ||
|
|
165
|
+
dep instanceof HtmlSourceDependency;
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Entry chunk name for a hint's `hostChunks` (Vite's `hostId`); the id is a
|
|
169
|
+
* stable fallback for unnamed chunks.
|
|
170
|
+
* @param {import("../Chunk")} chunk chunk
|
|
171
|
+
* @returns {string} name or stringified id
|
|
172
|
+
*/
|
|
173
|
+
const chunkHostName = (chunk) => chunk.name || String(chunk.id);
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Walk `chunks` × their modules × dependencies and yield each distinct
|
|
177
|
+
* URL-asset module carrying a prefetch/preload flag, deduping targets within a
|
|
178
|
+
* single call. One shared walk for the entrypoint-hint and HTML-hint passes,
|
|
179
|
+
* which would otherwise each re-implement the same 4-level nesting.
|
|
180
|
+
* @param {Compilation} compilation compilation
|
|
181
|
+
* @param {Iterable<import("../Chunk")>} chunks chunks to scan
|
|
182
|
+
* @returns {IterableIterator<{ dep: URLDependency | CssUrlDependency | HtmlSourceDependency, target: Module, chunk: import("../Chunk") }>} hinted assets
|
|
183
|
+
*/
|
|
184
|
+
function* iterateHintedUrlAssets(compilation, chunks) {
|
|
185
|
+
const { chunkGraph, moduleGraph } = compilation;
|
|
186
|
+
/** @type {WeakSet<Module>} */
|
|
187
|
+
const seen = new WeakSet();
|
|
188
|
+
for (const chunk of chunks) {
|
|
189
|
+
for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
|
|
190
|
+
const deps = module.dependencies;
|
|
191
|
+
if (!deps) continue;
|
|
192
|
+
for (const dep of deps) {
|
|
193
|
+
if (!isUrlAssetDep(dep)) continue;
|
|
194
|
+
if (!dep.prefetch && !dep.preload) continue;
|
|
195
|
+
const target = moduleGraph.getModule(dep);
|
|
196
|
+
if (!target || seen.has(target)) continue;
|
|
197
|
+
seen.add(target);
|
|
198
|
+
yield { dep, target, chunk };
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
103
204
|
/**
|
|
104
205
|
* Merge the matching `UrlHintRule`s for a request. Rules match by
|
|
105
206
|
* `test`/`include`/`exclude` (omit all three → matches everything); later
|
|
@@ -238,13 +339,13 @@ const collectEntrypointHints = (compilation, entryName, hints) => {
|
|
|
238
339
|
for (const chunk of entrypoint.chunks) {
|
|
239
340
|
if (chunk === entryChunk) continue;
|
|
240
341
|
for (const file of chunk.files) {
|
|
241
|
-
if (
|
|
342
|
+
if (!JS_CHUNK_FILE_REGEXP.test(file)) continue;
|
|
242
343
|
const href = publicPath + file;
|
|
243
344
|
/** @type {EntrypointHint} */
|
|
244
345
|
const h = {
|
|
245
346
|
rel,
|
|
246
347
|
href,
|
|
247
|
-
hostChunks: [
|
|
348
|
+
hostChunks: [chunkHostName(chunk)]
|
|
248
349
|
};
|
|
249
350
|
if (rel === "preload") h.as = "script";
|
|
250
351
|
push(h);
|
|
@@ -256,45 +357,28 @@ const collectEntrypointHints = (compilation, entryName, hints) => {
|
|
|
256
357
|
// runtime via `dynamicImportPrefetch/Preload` parser options).
|
|
257
358
|
/** @type {Set<import("../Chunk")>} */
|
|
258
359
|
const chunkSet = new Set(entrypoint.chunks);
|
|
259
|
-
const
|
|
260
|
-
if (
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
if (!buildInfo || !buildInfo.filename) continue;
|
|
282
|
-
const asAttr =
|
|
283
|
-
d.asAttribute ||
|
|
284
|
-
ResourceHintRuntimeModule.guessAsAttribute(d.request);
|
|
285
|
-
/** @type {EntrypointHint} */
|
|
286
|
-
const h = {
|
|
287
|
-
rel: d.preload ? "preload" : "prefetch",
|
|
288
|
-
href: publicPath + buildInfo.filename,
|
|
289
|
-
hostChunks: [chunk.name || String(chunk.id)]
|
|
290
|
-
};
|
|
291
|
-
if (asAttr) h.as = asAttr;
|
|
292
|
-
if (d.typeAttribute) h.type = d.typeAttribute;
|
|
293
|
-
if (d.mediaAttribute) h.media = d.mediaAttribute;
|
|
294
|
-
if (d.fetchPriority) h.fetchPriority = d.fetchPriority;
|
|
295
|
-
push(h);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
360
|
+
const runtimeChunk = entrypoint.getRuntimeChunk();
|
|
361
|
+
if (runtimeChunk) chunkSet.add(runtimeChunk);
|
|
362
|
+
for (const { dep, target, chunk } of iterateHintedUrlAssets(
|
|
363
|
+
compilation,
|
|
364
|
+
chunkSet
|
|
365
|
+
)) {
|
|
366
|
+
const buildInfo =
|
|
367
|
+
/** @type {{ filename?: string }} */
|
|
368
|
+
(target.buildInfo);
|
|
369
|
+
if (!buildInfo || !buildInfo.filename) continue;
|
|
370
|
+
const asAttribute = dep.asAttribute || guessAsAttribute(dep.request);
|
|
371
|
+
/** @type {EntrypointHint} */
|
|
372
|
+
const h = {
|
|
373
|
+
rel: dep.preload ? "preload" : "prefetch",
|
|
374
|
+
href: publicPath + buildInfo.filename,
|
|
375
|
+
hostChunks: [chunkHostName(chunk)]
|
|
376
|
+
};
|
|
377
|
+
if (asAttribute) h.as = asAttribute;
|
|
378
|
+
if (dep.typeAttribute) h.type = dep.typeAttribute;
|
|
379
|
+
if (dep.mediaAttribute) h.media = dep.mediaAttribute;
|
|
380
|
+
if (dep.fetchPriority) h.fetchPriority = dep.fetchPriority;
|
|
381
|
+
push(h);
|
|
298
382
|
}
|
|
299
383
|
// `hostType`: `"html"` iff the entrypoint has an extracted HTML page
|
|
300
384
|
// (any `HtmlEntryDependency` with elementKind `script`/`script-module` on
|
|
@@ -302,14 +386,13 @@ const collectEntrypointHints = (compilation, entryName, hints) => {
|
|
|
302
386
|
// `stats.entrypoints[name].resourceHints` see `"js"`.
|
|
303
387
|
let hostType = /** @type {"html" | "js"} */ ("js");
|
|
304
388
|
|
|
305
|
-
const HtmlEntryDependency = require("../dependencies/HtmlEntryDependency");
|
|
306
|
-
|
|
307
389
|
outer: for (const module of compilation.modules) {
|
|
308
390
|
if (!module.getSourceTypes || !module.getSourceTypes().has("html")) {
|
|
309
391
|
continue;
|
|
310
392
|
}
|
|
311
393
|
const presDeps = module.presentationalDependencies;
|
|
312
394
|
if (!presDeps) continue;
|
|
395
|
+
const HtmlEntryDependency = getHtmlEntryDependency();
|
|
313
396
|
for (const dep of presDeps) {
|
|
314
397
|
if (
|
|
315
398
|
dep instanceof HtmlEntryDependency &&
|
|
@@ -331,6 +414,214 @@ const collectEntrypointHints = (compilation, entryName, hints) => {
|
|
|
331
414
|
);
|
|
332
415
|
};
|
|
333
416
|
|
|
417
|
+
/**
|
|
418
|
+
* Renders the `<link>` calls a chunk fires at startup, for every asset and worker
|
|
419
|
+
* chunk it references with a resource hint. Run while runtime requirements are still
|
|
420
|
+
* open, so what an href reads is added to `set` rather than assumed: an href spelled
|
|
421
|
+
* as a literal leaves `.p` and `.u` out of the chunk entirely.
|
|
422
|
+
* @param {Chunk} chunk the chunk the calls are emitted into
|
|
423
|
+
* @param {Compilation} compilation the compilation
|
|
424
|
+
* @param {ChunkGraph} chunkGraph the chunk graph
|
|
425
|
+
* @param {CodeGenerationResults} codeGenerationResults the code generation results
|
|
426
|
+
* @param {RuntimeRequirements} set the chunk's runtime requirements
|
|
427
|
+
* @returns {string[]} one call per hinted asset, in emission order
|
|
428
|
+
*/
|
|
429
|
+
const collectStartupAssetHintLines = (
|
|
430
|
+
chunk,
|
|
431
|
+
compilation,
|
|
432
|
+
chunkGraph,
|
|
433
|
+
codeGenerationResults,
|
|
434
|
+
set
|
|
435
|
+
) => {
|
|
436
|
+
const { moduleGraph, runtimeTemplate } = compilation;
|
|
437
|
+
const resolver =
|
|
438
|
+
/** @type {CompilationResolver} */
|
|
439
|
+
(compilationResolvers.get(compilation));
|
|
440
|
+
/** @type {string[]} */
|
|
441
|
+
const lines = [];
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* @param {string} fn the `<link>` helper
|
|
445
|
+
* @param {string} href the href expression
|
|
446
|
+
* @param {string} as the `as` attribute
|
|
447
|
+
* @param {StartupHintAttributes} attributes the remaining attributes
|
|
448
|
+
* @returns {void}
|
|
449
|
+
*/
|
|
450
|
+
const push = (fn, href, as, attributes) => {
|
|
451
|
+
set.add(fn);
|
|
452
|
+
lines.push(
|
|
453
|
+
`${fn}(${href}, ${JSON.stringify(as)}, ${
|
|
454
|
+
attributes.type ? JSON.stringify(attributes.type) : "undefined"
|
|
455
|
+
}, ${attributes.media ? JSON.stringify(attributes.media) : "undefined"}, ${
|
|
456
|
+
attributes.fetchPriority
|
|
457
|
+
? JSON.stringify(attributes.fetchPriority)
|
|
458
|
+
: "undefined"
|
|
459
|
+
});`
|
|
460
|
+
);
|
|
461
|
+
};
|
|
462
|
+
|
|
463
|
+
// The analyzable worker form can't wrap its own href without losing the literal
|
|
464
|
+
// specifier, so its `<link>` fires here — keyed by chunk, hence a separate pass.
|
|
465
|
+
/** @type {Set<string | number>} */
|
|
466
|
+
const seenWorkerChunks = new Set();
|
|
467
|
+
for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
|
|
468
|
+
for (const block of module.blocks) {
|
|
469
|
+
for (const dep of block.dependencies) {
|
|
470
|
+
if (!(dep instanceof WorkerDependency)) continue;
|
|
471
|
+
const hint = dep.options.resourceHint;
|
|
472
|
+
if (!hint || (!hint.preload && !hint.prefetch)) continue;
|
|
473
|
+
const group = chunkGraph.getBlockChunkGroup(block);
|
|
474
|
+
if (!group) continue;
|
|
475
|
+
const workerChunk =
|
|
476
|
+
/** @type {import("../Entrypoint")} */
|
|
477
|
+
(group).getEntrypointChunk();
|
|
478
|
+
if (workerChunk.id === null || seenWorkerChunks.has(workerChunk.id)) {
|
|
479
|
+
continue;
|
|
480
|
+
}
|
|
481
|
+
seenWorkerChunks.add(workerChunk.id);
|
|
482
|
+
// The same specifier the `new Worker(...)` call site bakes, asked of the
|
|
483
|
+
// same module, so the two agree on whether a literal is spellable.
|
|
484
|
+
const specifier = runtimeTemplate.supportsAnalyzable(
|
|
485
|
+
"url",
|
|
486
|
+
chunkGraph,
|
|
487
|
+
module
|
|
488
|
+
)
|
|
489
|
+
? runtimeTemplate._getAnalyzableChunkSpecifier(
|
|
490
|
+
dep.options.publicPath,
|
|
491
|
+
workerChunk,
|
|
492
|
+
module,
|
|
493
|
+
chunkGraph,
|
|
494
|
+
set
|
|
495
|
+
)
|
|
496
|
+
: null;
|
|
497
|
+
// Without one the call site keeps the runtime form, where it wraps its own
|
|
498
|
+
// href — firing the `<link>` here too would emit the call twice.
|
|
499
|
+
if (specifier === null) continue;
|
|
500
|
+
push(
|
|
501
|
+
hint.preload
|
|
502
|
+
? RuntimeGlobals.preloadAsset
|
|
503
|
+
: RuntimeGlobals.prefetchAsset,
|
|
504
|
+
`${runtimeTemplate.importMetaUrl(specifier)}.href`,
|
|
505
|
+
hint.as || "script",
|
|
506
|
+
hint
|
|
507
|
+
);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
// Dedupe per asset module so two references can't emit two `<link>`s: `preload`
|
|
513
|
+
// wins over `prefetch`, and the last explicit attribute override sticks.
|
|
514
|
+
/** @type {Map<string, AssetHintEntry>} */
|
|
515
|
+
const perAsset = new Map();
|
|
516
|
+
for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
|
|
517
|
+
const deps =
|
|
518
|
+
/** @type {{ dependencies?: import("../Dependency")[] }} */
|
|
519
|
+
(module).dependencies;
|
|
520
|
+
if (!deps) continue;
|
|
521
|
+
for (const dep of deps) {
|
|
522
|
+
if (!isUrlAssetDep(dep)) continue;
|
|
523
|
+
if (!dep.prefetch && !dep.preload) continue;
|
|
524
|
+
const assetModule = moduleGraph.getModule(dep);
|
|
525
|
+
if (!assetModule) continue;
|
|
526
|
+
// Already a `<link>` in the html `<head>` emitted by `HtmlEntryDependency`,
|
|
527
|
+
// so the runtime hint would leave the DOM with two tags for one url.
|
|
528
|
+
if (resolver.isHtmlHinted(assetModule)) continue;
|
|
529
|
+
const key = assetModule.identifier();
|
|
530
|
+
const urlDep =
|
|
531
|
+
/** @type {URLDependency & Partial<CssUrlDependency> & Partial<HtmlSourceDependency>} */
|
|
532
|
+
(dep);
|
|
533
|
+
const existing = perAsset.get(key);
|
|
534
|
+
if (existing) {
|
|
535
|
+
if (dep.preload) existing.preload = true;
|
|
536
|
+
if (dep.fetchPriority) existing.fetchPriority = dep.fetchPriority;
|
|
537
|
+
if (urlDep.asAttribute) existing.as = urlDep.asAttribute;
|
|
538
|
+
if (urlDep.typeAttribute) existing.type = urlDep.typeAttribute;
|
|
539
|
+
if (urlDep.mediaAttribute) existing.media = urlDep.mediaAttribute;
|
|
540
|
+
} else {
|
|
541
|
+
perAsset.set(key, {
|
|
542
|
+
assetModule: /** @type {Module} */ (assetModule),
|
|
543
|
+
originModule: module,
|
|
544
|
+
request: dep.request,
|
|
545
|
+
preload: Boolean(dep.preload),
|
|
546
|
+
fetchPriority: dep.fetchPriority,
|
|
547
|
+
as: urlDep.asAttribute,
|
|
548
|
+
type: urlDep.typeAttribute,
|
|
549
|
+
media: urlDep.mediaAttribute
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
for (const entry of perAsset.values()) {
|
|
556
|
+
const { assetModule } = entry;
|
|
557
|
+
let href;
|
|
558
|
+
// An asset with a javascript wrapper exposes its url through it; one without has
|
|
559
|
+
// no `__webpack_modules__` entry to require.
|
|
560
|
+
if (assetModule.getSourceTypes().has(JAVASCRIPT_TYPE)) {
|
|
561
|
+
href = runtimeTemplate.moduleRaw({
|
|
562
|
+
chunkGraph,
|
|
563
|
+
module: assetModule,
|
|
564
|
+
request: entry.request,
|
|
565
|
+
runtimeRequirements: set,
|
|
566
|
+
weak: false
|
|
567
|
+
});
|
|
568
|
+
} else {
|
|
569
|
+
const has = codeGenerationResults.has(assetModule, chunk.runtime);
|
|
570
|
+
const urlData = has
|
|
571
|
+
? codeGenerationResults.getData(assetModule, chunk.runtime, "url")
|
|
572
|
+
: undefined;
|
|
573
|
+
const resolved = urlData && urlData[ASSET_URL_TYPE];
|
|
574
|
+
// A generator `publicPath` overrides `output.publicPath`, so prefer it; only the
|
|
575
|
+
// two placeholders below are still unresolved when this runs.
|
|
576
|
+
const templated =
|
|
577
|
+
typeof resolved === "string" &&
|
|
578
|
+
(resolved.includes(PUBLIC_PATH_AUTO) ||
|
|
579
|
+
resolved.includes(PUBLIC_PATH_FULL_HASH));
|
|
580
|
+
if (typeof resolved === "string" && !templated) {
|
|
581
|
+
href = JSON.stringify(resolved);
|
|
582
|
+
} else {
|
|
583
|
+
const filename = has
|
|
584
|
+
? codeGenerationResults.getData(
|
|
585
|
+
assetModule,
|
|
586
|
+
chunk.runtime,
|
|
587
|
+
"filename"
|
|
588
|
+
)
|
|
589
|
+
: undefined;
|
|
590
|
+
if (typeof filename !== "string") continue;
|
|
591
|
+
// The literal the `new URL()` call site bakes, asked of the same module —
|
|
592
|
+
// but written into a runtime module, which no `eval` devtool wraps.
|
|
593
|
+
const specifier = runtimeTemplate.supportsAnalyzable(
|
|
594
|
+
"url-runtime",
|
|
595
|
+
chunkGraph,
|
|
596
|
+
entry.originModule
|
|
597
|
+
)
|
|
598
|
+
? runtimeTemplate.getAnalyzableAssetUrl(
|
|
599
|
+
entry.originModule,
|
|
600
|
+
chunkGraph,
|
|
601
|
+
filename,
|
|
602
|
+
chunk.runtime
|
|
603
|
+
)
|
|
604
|
+
: null;
|
|
605
|
+
if (specifier !== null) {
|
|
606
|
+
href = `${runtimeTemplate.importMetaUrl(specifier)}.href`;
|
|
607
|
+
} else {
|
|
608
|
+
set.add(RuntimeGlobals.publicPath);
|
|
609
|
+
href = `${RuntimeGlobals.publicPath} + ${JSON.stringify(filename)}`;
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
push(
|
|
614
|
+
entry.preload
|
|
615
|
+
? RuntimeGlobals.preloadAsset
|
|
616
|
+
: RuntimeGlobals.prefetchAsset,
|
|
617
|
+
href,
|
|
618
|
+
entry.as || guessAsAttribute(entry.request),
|
|
619
|
+
entry
|
|
620
|
+
);
|
|
621
|
+
}
|
|
622
|
+
return lines;
|
|
623
|
+
};
|
|
624
|
+
|
|
334
625
|
/**
|
|
335
626
|
* Adds runtime support for `__webpack_require__.PA` / `__webpack_require__.LA`,
|
|
336
627
|
* the helpers that inject `<link rel="prefetch">` / `<link rel="preload">`
|
|
@@ -447,8 +738,6 @@ class ResourceHintPlugin {
|
|
|
447
738
|
apply(compiler) {
|
|
448
739
|
const hints = this._hints;
|
|
449
740
|
|
|
450
|
-
const HtmlEntryDependency = require("../dependencies/HtmlEntryDependency");
|
|
451
|
-
|
|
452
741
|
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
453
742
|
// Lazy-computed on first access — walk every HTML module's
|
|
454
743
|
// `HtmlEntryDependency`s, resolve each named entry, and collect
|
|
@@ -475,6 +764,7 @@ class ResourceHintPlugin {
|
|
|
475
764
|
// they don't affect module resolution, only rendering.
|
|
476
765
|
const presDeps = module.presentationalDependencies;
|
|
477
766
|
if (!presDeps) continue;
|
|
767
|
+
const HtmlEntryDependency = getHtmlEntryDependency();
|
|
478
768
|
for (const dep of presDeps) {
|
|
479
769
|
if (
|
|
480
770
|
!(dep instanceof HtmlEntryDependency) ||
|
|
@@ -493,33 +783,16 @@ class ResourceHintPlugin {
|
|
|
493
783
|
const chunks = new Set(entrypoint.chunks);
|
|
494
784
|
const entry = entrypoint.getEntrypointChunk();
|
|
495
785
|
if (entry) chunks.add(entry);
|
|
496
|
-
const
|
|
497
|
-
if (
|
|
786
|
+
const runtimeChunk = entrypoint.getRuntimeChunk();
|
|
787
|
+
if (runtimeChunk) chunks.add(runtimeChunk);
|
|
498
788
|
/** @type {HtmlHintedAsset[]} */
|
|
499
789
|
const hinted = [];
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
)
|
|
506
|
-
if (!m.dependencies) continue;
|
|
507
|
-
for (const d of m.dependencies) {
|
|
508
|
-
if (
|
|
509
|
-
!(d instanceof URLDependency) &&
|
|
510
|
-
!(d instanceof CssUrlDependency) &&
|
|
511
|
-
!(d instanceof HtmlSourceDependency)
|
|
512
|
-
) {
|
|
513
|
-
continue;
|
|
514
|
-
}
|
|
515
|
-
if (!d.prefetch && !d.preload) continue;
|
|
516
|
-
const t = compilation.moduleGraph.getModule(d);
|
|
517
|
-
if (!t || seen.has(t)) continue;
|
|
518
|
-
seen.add(t);
|
|
519
|
-
anyHtmlHinted.add(t);
|
|
520
|
-
hinted.push({ module: t, dep: d });
|
|
521
|
-
}
|
|
522
|
-
}
|
|
790
|
+
for (const { dep: assetDep, target } of iterateHintedUrlAssets(
|
|
791
|
+
compilation,
|
|
792
|
+
chunks
|
|
793
|
+
)) {
|
|
794
|
+
anyHtmlHinted.add(target);
|
|
795
|
+
hinted.push({ module: target, dep: assetDep });
|
|
523
796
|
}
|
|
524
797
|
// Multiple HtmlEntryDeps may share an entryName (e.g. a
|
|
525
798
|
// `<script>` and a `<link rel="modulepreload">` for the
|
|
@@ -554,61 +827,28 @@ class ResourceHintPlugin {
|
|
|
554
827
|
getEntrypointHints: (entryName) =>
|
|
555
828
|
collectEntrypointHints(compilation, entryName, hints)
|
|
556
829
|
});
|
|
557
|
-
//
|
|
558
|
-
//
|
|
559
|
-
// output, so we need to lift those flags into the JS chunk's
|
|
560
|
-
// runtime requirements ourselves. Iterate only css/html modules
|
|
561
|
-
// (pure-JS chunks skip the walk entirely).
|
|
830
|
+
// Rendered here, not in the runtime module: requirements are still open, so a
|
|
831
|
+
// literal href costs no `.p`/`.u`, and async chunks are reached as well.
|
|
562
832
|
compilation.hooks.additionalChunkRuntimeRequirements.tap(
|
|
563
833
|
PLUGIN_NAME,
|
|
564
|
-
(chunk, set, { chunkGraph }) => {
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
if (hasPrefetch && hasPreload) break;
|
|
583
|
-
}
|
|
584
|
-
if (hasPrefetch && hasPreload) break;
|
|
585
|
-
}
|
|
586
|
-
// Attach the startup-hint runtime module to *this* chunk
|
|
587
|
-
// (covering async chunks too) — `runtimeRequirementInTree`
|
|
588
|
-
// alone would only attach it to the runtime chunk, so a
|
|
589
|
-
// hinted `new URL(...)` in an async chunk would never
|
|
590
|
-
// fire its `<link>` injection. We add it whenever this
|
|
591
|
-
// chunk already pulls in `startupAssetHints` (via JS
|
|
592
|
-
// `URLDependency` template) or whenever CSS / HTML lifts
|
|
593
|
-
// it in here.
|
|
594
|
-
if (
|
|
595
|
-
hasPrefetch ||
|
|
596
|
-
hasPreload ||
|
|
597
|
-
set.has(RuntimeGlobals.startupAssetHints)
|
|
598
|
-
) {
|
|
599
|
-
set.add(RuntimeGlobals.startupAssetHints);
|
|
600
|
-
// CSS-only asset modules aren't in JS `__webpack_modules__`,
|
|
601
|
-
// so the startup-hint runtime falls back to
|
|
602
|
-
// `__webpack_require__.p + "filename"`. Make sure
|
|
603
|
-
// `publicPath` is in this chunk's runtime.
|
|
604
|
-
set.add(RuntimeGlobals.publicPath);
|
|
605
|
-
if (hasPrefetch) set.add(RuntimeGlobals.prefetchAsset);
|
|
606
|
-
if (hasPreload) set.add(RuntimeGlobals.preloadAsset);
|
|
607
|
-
compilation.addRuntimeModule(
|
|
608
|
-
chunk,
|
|
609
|
-
new StartupAssetHintRuntimeModule()
|
|
610
|
-
);
|
|
611
|
-
}
|
|
834
|
+
(chunk, set, { chunkGraph, codeGenerationResults }) => {
|
|
835
|
+
// Browser markup, and no DOM to put it in — the call sites skip their
|
|
836
|
+
// hints under build-time execution too (`URLDependency`).
|
|
837
|
+
if (hints === "none" || chunkGraph.buildTimeExecution) return;
|
|
838
|
+
const lines = collectStartupAssetHintLines(
|
|
839
|
+
chunk,
|
|
840
|
+
compilation,
|
|
841
|
+
chunkGraph,
|
|
842
|
+
codeGenerationResults,
|
|
843
|
+
set
|
|
844
|
+
);
|
|
845
|
+
if (lines.length === 0) return;
|
|
846
|
+
set.add(RuntimeGlobals.startupAssetHints);
|
|
847
|
+
compilation.addLazyRuntimeModule(
|
|
848
|
+
chunk,
|
|
849
|
+
getStartupAssetHintRuntimeModule,
|
|
850
|
+
(Ctor) => new Ctor(lines)
|
|
851
|
+
);
|
|
612
852
|
}
|
|
613
853
|
);
|
|
614
854
|
for (const [rel, runtimeGlobal] of /** @type {const} */ ([
|
|
@@ -618,9 +858,10 @@ class ResourceHintPlugin {
|
|
|
618
858
|
compilation.hooks.runtimeRequirementInTree
|
|
619
859
|
.for(runtimeGlobal)
|
|
620
860
|
.tap(PLUGIN_NAME, (chunk) => {
|
|
621
|
-
compilation.
|
|
861
|
+
compilation.addLazyRuntimeModule(
|
|
622
862
|
chunk,
|
|
623
|
-
|
|
863
|
+
getResourceHintRuntimeModule,
|
|
864
|
+
(Ctor) => new Ctor(rel)
|
|
624
865
|
);
|
|
625
866
|
});
|
|
626
867
|
}
|
|
@@ -9,6 +9,7 @@ const Compilation = require("../Compilation");
|
|
|
9
9
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
10
10
|
const RuntimeModule = require("../RuntimeModule");
|
|
11
11
|
const Template = require("../Template");
|
|
12
|
+
const { guessAsAttribute } = require("./parseResourceHintOptions");
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* @typedef {object} ResourceHintRuntimeModulePluginHooks
|
|
@@ -19,27 +20,6 @@ const Template = require("../Template");
|
|
|
19
20
|
/** @type {WeakMap<Compilation, ResourceHintRuntimeModulePluginHooks>} */
|
|
20
21
|
const compilationHooksMap = new WeakMap();
|
|
21
22
|
|
|
22
|
-
/**
|
|
23
|
-
* Maps a request/filename to the value of the `<link>` `as` attribute. Best
|
|
24
|
-
* effort — falls back to `"fetch"` when the type cannot be guessed. Pattern
|
|
25
|
-
* matches against the path part, ignoring any query string suffix.
|
|
26
|
-
* @param {string} request request/filename
|
|
27
|
-
* @returns {string} value for the `as` attribute
|
|
28
|
-
*/
|
|
29
|
-
const guessAsAttribute = (request) => {
|
|
30
|
-
if (/\.(png|jpe?g|gif|svg|webp|avif|bmp|ico|tiff?)(\?.*)?$/i.test(request)) {
|
|
31
|
-
return "image";
|
|
32
|
-
}
|
|
33
|
-
if (/\.(woff2?|ttf|otf|eot)(\?.*)?$/i.test(request)) return "font";
|
|
34
|
-
if (/\.css(\?.*)?$/i.test(request)) return "style";
|
|
35
|
-
if (/\.[cm]?jsx?(\?.*)?$/i.test(request)) return "script";
|
|
36
|
-
if (/\.[cm]?tsx?(\?.*)?$/i.test(request)) return "script";
|
|
37
|
-
if (/\.(mp3|wav|flac|aac|m4a|ogg|oga)(\?.*)?$/i.test(request)) return "audio";
|
|
38
|
-
if (/\.(mp4|webm|mkv|mov|m4v|ogv|avi)(\?.*)?$/i.test(request)) return "video";
|
|
39
|
-
if (/\.vtt(\?.*)?$/i.test(request)) return "track";
|
|
40
|
-
return "fetch";
|
|
41
|
-
};
|
|
42
|
-
|
|
43
23
|
class ResourceHintRuntimeModule extends RuntimeModule {
|
|
44
24
|
/**
|
|
45
25
|
* @param {Compilation} compilation the compilation
|