@depup/webpack 5.106.1-depup.0 → 5.109.2-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 +9 -11
- package/bin/webpack.js +12 -0
- package/changes.json +16 -24
- package/hot/dev-server.js +2 -0
- package/lib/APIPlugin.js +60 -35
- package/lib/AsyncDependenciesBlock.js +3 -0
- package/lib/AutomaticPrefetchPlugin.js +6 -1
- package/lib/BannerPlugin.js +13 -5
- package/lib/Cache.js +27 -5
- package/lib/CacheFacade.js +41 -0
- package/lib/Chunk.js +71 -25
- package/lib/ChunkGraph.js +153 -19
- package/lib/ChunkGroup.js +115 -28
- package/lib/ChunkTemplate.js +9 -0
- package/lib/CircularModulesPlugin.js +190 -0
- package/lib/CleanPlugin.js +27 -28
- package/lib/CodeGenerationResults.js +19 -0
- package/lib/CompatibilityPlugin.js +85 -37
- package/lib/Compilation.js +656 -112
- package/lib/Compiler.js +109 -35
- package/lib/ConcatenationScope.js +34 -4
- package/lib/ConditionalInitFragment.js +6 -0
- package/lib/ConstPlugin.js +15 -12
- package/lib/ContextExclusionPlugin.js +3 -1
- package/lib/ContextModule.js +345 -55
- package/lib/ContextModuleFactory.js +193 -51
- package/lib/ContextReplacementPlugin.js +8 -1
- package/lib/DefinePlugin.js +537 -139
- package/lib/DependenciesBlock.js +6 -1
- package/lib/Dependency.js +159 -11
- package/lib/DependencyTemplate.js +7 -1
- package/lib/DependencyTemplates.js +4 -0
- package/lib/DotenvPlugin.js +3 -0
- package/lib/DynamicEntryPlugin.js +3 -1
- package/lib/EntryOptionPlugin.js +42 -2
- package/lib/EntryPlugin.js +4 -1
- package/lib/Entrypoint.js +5 -1
- package/lib/EnvironmentPlugin.js +3 -2
- package/lib/ErrorHelpers.js +7 -0
- package/lib/EvalDevToolModulePlugin.js +3 -1
- package/lib/EvalSourceMapDevToolPlugin.js +11 -11
- package/lib/ExportsInfo.js +421 -113
- package/lib/ExportsInfoApiPlugin.js +4 -3
- package/lib/ExternalModule.js +381 -80
- package/lib/ExternalModuleFactoryPlugin.js +75 -3
- package/lib/ExternalsPlugin.js +3 -1
- package/lib/FileSystemInfo.js +701 -175
- package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
- package/lib/FlagDependencyExportsPlugin.js +82 -9
- package/lib/FlagDependencyUsagePlugin.js +115 -8
- package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
- package/lib/Generator.js +24 -3
- package/lib/HotModuleReplacementPlugin.js +110 -44
- package/lib/IgnorePlugin.js +5 -2
- package/lib/IgnoreWarningsPlugin.js +2 -1
- package/lib/InitFragment.js +33 -30
- package/lib/JavascriptMetaInfoPlugin.js +9 -6
- package/lib/LazyBarrel.js +389 -0
- package/lib/LibraryTemplatePlugin.js +2 -1
- package/lib/LoaderOptionsPlugin.js +3 -1
- package/lib/LoaderTargetPlugin.js +3 -1
- package/lib/MainTemplate.js +15 -0
- package/lib/ManifestPlugin.js +9 -2
- package/lib/Module.js +121 -57
- package/lib/ModuleFactory.js +6 -1
- package/lib/ModuleFilenameHelpers.js +18 -4
- package/lib/ModuleGraph.js +69 -2
- package/lib/ModuleGraphConnection.js +9 -0
- package/lib/ModuleInfoHeaderPlugin.js +5 -0
- package/lib/ModuleNotFoundError.js +3 -83
- package/lib/ModuleProfile.js +27 -1
- package/lib/ModuleSourceTypeConstants.js +52 -19
- package/lib/ModuleTemplate.js +10 -0
- package/lib/ModuleTypeConstants.js +20 -4
- package/lib/MultiCompiler.js +59 -4
- package/lib/MultiStats.js +9 -0
- package/lib/MultiWatching.js +6 -0
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +78 -46
- package/lib/NormalModule.js +519 -206
- package/lib/NormalModuleFactory.js +156 -31
- package/lib/NormalModuleReplacementPlugin.js +3 -1
- package/lib/NullFactory.js +1 -0
- package/lib/OptionsApply.js +1 -0
- package/lib/Parser.js +3 -1
- package/lib/PlatformPlugin.js +2 -1
- package/lib/PrefetchPlugin.js +4 -1
- package/lib/ProgressPlugin.js +351 -161
- package/lib/ProvidePlugin.js +6 -3
- package/lib/RawModule.js +32 -16
- package/lib/RecordIdsPlugin.js +9 -0
- package/lib/RequestShortener.js +8 -0
- package/lib/ResolverFactory.js +5 -0
- package/lib/RuntimeGlobals.js +58 -5
- package/lib/RuntimeModule.js +22 -7
- package/lib/RuntimePlugin.js +123 -118
- package/lib/RuntimeTemplate.js +616 -37
- package/lib/SelfModuleFactory.js +3 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
- package/lib/SourceMapDevToolPlugin.js +341 -63
- package/lib/Stats.js +6 -0
- package/lib/Template.js +52 -6
- package/lib/TemplatedPathPlugin.js +505 -138
- package/lib/UseStrictPlugin.js +3 -2
- package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
- package/lib/WarnDeprecatedOptionPlugin.js +6 -2
- package/lib/WarnNoModeSetPlugin.js +18 -2
- package/lib/WatchIgnorePlugin.js +5 -1
- package/lib/Watching.js +25 -3
- package/lib/WebpackError.js +3 -74
- package/lib/WebpackIsIncludedPlugin.js +4 -2
- package/lib/WebpackOptionsApply.js +88 -25
- package/lib/WebpackOptionsDefaulter.js +1 -0
- package/lib/asset/AssetBytesGenerator.js +28 -10
- package/lib/asset/AssetBytesParser.js +1 -0
- package/lib/asset/AssetGenerator.js +199 -60
- package/lib/asset/AssetModule.js +47 -0
- package/lib/asset/AssetModulesPlugin.js +115 -24
- package/lib/asset/AssetParser.js +4 -2
- package/lib/asset/AssetSourceGenerator.js +26 -8
- package/lib/asset/AssetSourceParser.js +1 -0
- package/lib/asset/RawDataUrlModule.js +23 -13
- package/lib/asset/WebManifestGenerator.js +164 -0
- package/lib/asset/WebManifestParser.js +130 -0
- package/lib/async-modules/AsyncModuleHelpers.js +1 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/async-modules/isGeneratorLowered.js +26 -0
- package/lib/buildChunkGraph.js +107 -15
- package/lib/bun/BunTargetPlugin.js +42 -0
- package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
- package/lib/cache/AddManagedPathsPlugin.js +5 -1
- package/lib/cache/IdleFileCachePlugin.js +6 -1
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
- package/lib/cache/PackFileCacheStrategy.js +302 -12
- package/lib/cache/ResolverCachePlugin.js +12 -1
- package/lib/cache/getLazyHashedEtag.js +13 -2
- package/lib/cache/mergeEtags.js +4 -0
- package/lib/cli.js +142 -20
- package/lib/config/browserslistTargetHandler.js +141 -0
- package/lib/config/defaults.js +612 -43
- package/lib/config/defineConfig.js +31 -0
- package/lib/config/normalization.js +46 -1
- package/lib/config/target.js +200 -2
- package/lib/container/ContainerEntryDependency.js +2 -0
- package/lib/container/ContainerEntryModule.js +27 -14
- package/lib/container/ContainerEntryModuleFactory.js +1 -0
- package/lib/container/ContainerExposedDependency.js +6 -2
- package/lib/container/ContainerPlugin.js +2 -1
- package/lib/container/ContainerReferencePlugin.js +3 -2
- package/lib/container/FallbackDependency.js +9 -7
- package/lib/container/FallbackItemDependency.js +1 -0
- package/lib/container/FallbackModule.js +22 -9
- package/lib/container/FallbackModuleFactory.js +1 -0
- package/lib/container/HoistContainerReferencesPlugin.js +47 -55
- package/lib/container/ModuleFederationPlugin.js +21 -29
- package/lib/container/RemoteModule.js +33 -10
- package/lib/container/RemoteRuntimeModule.js +15 -12
- package/lib/container/RemoteToExternalDependency.js +1 -0
- package/lib/container/options.js +7 -0
- package/lib/css/CssGenerator.js +540 -272
- package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
- package/lib/css/CssLoadingRuntimeModule.js +173 -81
- package/lib/{CssModule.js → css/CssModule.js} +72 -37
- package/lib/css/CssModulesPlugin.js +371 -208
- package/lib/css/CssParser.js +3538 -1963
- package/lib/css/syntax.js +4155 -0
- package/lib/debug/ProfilingPlugin.js +33 -2
- package/lib/deno/DenoTargetPlugin.js +41 -0
- package/lib/dependencies/AMDDefineDependency.js +29 -17
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
- package/lib/dependencies/AMDPlugin.js +6 -3
- package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
- package/lib/dependencies/AMDRequireContextDependency.js +10 -11
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
- package/lib/dependencies/AMDRequireDependency.js +28 -20
- package/lib/dependencies/AMDRequireItemDependency.js +1 -0
- package/lib/dependencies/AMDRuntimeModules.js +3 -0
- package/lib/dependencies/CachedConstDependency.js +9 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
- package/lib/dependencies/CommonJsExportsDependency.js +74 -20
- package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
- package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
- package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
- package/lib/dependencies/CommonJsPlugin.js +7 -4
- package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
- package/lib/dependencies/CommonJsRequireDependency.js +135 -13
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
- package/lib/dependencies/ConstDependency.js +22 -12
- package/lib/dependencies/ContextDependency.js +13 -2
- package/lib/dependencies/ContextDependencyHelpers.js +7 -4
- package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
- package/lib/dependencies/ContextElementDependency.js +27 -14
- package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
- package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
- package/lib/dependencies/CriticalDependencyWarning.js +3 -1
- package/lib/dependencies/CssIcssExportDependency.js +681 -367
- package/lib/dependencies/CssIcssImportDependency.js +62 -17
- package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
- package/lib/dependencies/CssImportDependency.js +37 -1
- package/lib/dependencies/CssUrlDependency.js +87 -14
- package/lib/dependencies/DelegatedSourceDependency.js +1 -0
- package/lib/dependencies/DllEntryDependency.js +12 -13
- package/lib/dependencies/DynamicExports.js +5 -0
- package/lib/dependencies/EntryDependency.js +1 -0
- package/lib/dependencies/ExportBindingInitFragment.js +164 -0
- package/lib/dependencies/ExportsInfoDependency.js +18 -12
- package/lib/dependencies/ExternalModuleDependency.js +13 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
- package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
- package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
- package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
- package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
- package/lib/dependencies/HarmonyExports.js +6 -1
- package/lib/dependencies/HarmonyImportDependency.js +60 -4
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
- package/lib/dependencies/HarmonyImportGuard.js +427 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
- package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
- package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
- package/lib/dependencies/HtmlEntryDependency.js +1295 -0
- package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
- package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
- package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
- package/lib/dependencies/HtmlSourceDependency.js +172 -0
- package/lib/dependencies/ImportContextDependency.js +9 -9
- package/lib/dependencies/ImportDependency.js +92 -3
- package/lib/dependencies/ImportEagerDependency.js +2 -0
- package/lib/dependencies/ImportMetaContextDependency.js +1 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
- package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
- package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
- package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
- package/lib/dependencies/ImportMetaPlugin.js +595 -209
- package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
- package/lib/dependencies/ImportParserPlugin.js +114 -27
- package/lib/dependencies/ImportPhase.js +17 -11
- package/lib/dependencies/ImportPlugin.js +2 -1
- package/lib/dependencies/ImportWeakDependency.js +3 -0
- package/lib/dependencies/JsonExportsDependency.js +15 -10
- package/lib/dependencies/LoaderDependency.js +2 -0
- package/lib/dependencies/LoaderImportDependency.js +3 -0
- package/lib/dependencies/LoaderPlugin.js +9 -2
- package/lib/dependencies/LocalModule.js +15 -12
- package/lib/dependencies/LocalModuleDependency.js +15 -13
- package/lib/dependencies/LocalModulesHelpers.js +3 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
- package/lib/dependencies/ModuleDependency.js +14 -0
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
- package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/PrefetchDependency.js +1 -0
- package/lib/dependencies/ProvidedDependency.js +36 -27
- package/lib/dependencies/PureExpressionDependency.js +14 -10
- package/lib/dependencies/RequireContextDependency.js +1 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
- package/lib/dependencies/RequireContextPlugin.js +2 -1
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
- package/lib/dependencies/RequireEnsureDependency.js +16 -13
- package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
- package/lib/dependencies/RequireEnsurePlugin.js +2 -1
- package/lib/dependencies/RequireHeaderDependency.js +7 -4
- package/lib/dependencies/RequireIncludeDependency.js +2 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
- package/lib/dependencies/RequireIncludePlugin.js +2 -1
- package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
- package/lib/dependencies/RequireResolveContextDependency.js +10 -11
- package/lib/dependencies/RequireResolveDependency.js +2 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
- package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
- package/lib/dependencies/StaticExportsDependency.js +13 -10
- package/lib/dependencies/SystemPlugin.js +9 -6
- package/lib/dependencies/SystemRuntimeModule.js +1 -0
- package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
- package/lib/dependencies/URLContextDependency.js +8 -7
- package/lib/dependencies/URLDependency.js +157 -33
- package/lib/dependencies/URLPlugin.js +2 -0
- package/lib/dependencies/UnsupportedDependency.js +12 -13
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
- package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
- package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
- package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
- package/lib/dependencies/WorkerDependency.js +111 -27
- package/lib/dependencies/WorkletDependency.js +278 -0
- package/lib/dependencies/getFunctionExpression.js +1 -0
- package/lib/dependencies/processExportInfo.js +14 -11
- package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
- package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
- package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
- package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
- package/lib/{DllModule.js → dll/DllModule.js} +36 -24
- package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
- package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
- package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
- package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
- package/lib/electron/ElectronTargetPlugin.js +24 -5
- package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
- package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
- package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
- package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
- package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
- package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
- package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
- package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
- package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
- package/lib/errors/JSONParseError.js +115 -0
- package/lib/errors/LoaderLoadingError.js +20 -0
- package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
- package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
- package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
- package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
- package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
- package/lib/errors/ModuleNotFoundError.js +94 -0
- package/lib/errors/ModuleParseError.js +141 -0
- package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
- package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
- package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
- package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
- package/lib/errors/NonErrorEmittedError.js +30 -0
- package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
- package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
- package/lib/errors/WebpackError.js +84 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
- package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
- package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
- package/lib/hmr/LazyCompilationPlugin.js +154 -7
- package/lib/hmr/lazyCompilationBackend.js +53 -12
- package/lib/html/HtmlGenerator.js +1490 -0
- package/lib/html/HtmlModule.js +41 -0
- package/lib/html/HtmlModulesPlugin.js +1129 -0
- package/lib/html/HtmlParser.js +1970 -0
- package/lib/html/favicon.svg +1 -0
- package/lib/html/syntax.js +9106 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
- package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
- package/lib/ids/HashedModuleIdsPlugin.js +2 -1
- package/lib/ids/IdHelpers.js +49 -12
- package/lib/ids/NamedChunkIdsPlugin.js +3 -1
- package/lib/ids/NamedModuleIdsPlugin.js +3 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
- package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -1
- package/lib/index.js +66 -15
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
- package/lib/javascript/BasicEvaluatedExpression.js +370 -49
- package/lib/javascript/ChunkFormatHelpers.js +2 -1
- package/lib/javascript/ChunkHelpers.js +1 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
- package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
- package/lib/javascript/JavascriptGenerator.js +213 -51
- package/lib/javascript/JavascriptModule.js +54 -0
- package/lib/javascript/JavascriptModulesPlugin.js +628 -198
- package/lib/javascript/JavascriptParser.js +1334 -471
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/StartupHelpers.js +5 -0
- package/lib/javascript/syntax.js +5037 -0
- package/lib/json/JsonData.js +5 -0
- package/lib/json/JsonGenerator.js +21 -0
- package/lib/json/JsonModule.js +40 -0
- package/lib/json/JsonModulesPlugin.js +8 -1
- package/lib/json/JsonParser.js +18 -27
- package/lib/library/AbstractLibraryPlugin.js +17 -2
- package/lib/library/AmdLibraryPlugin.js +8 -0
- package/lib/library/AssignLibraryPlugin.js +21 -3
- package/lib/library/EnableLibraryPlugin.js +8 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
- package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
- package/lib/library/JsonpLibraryPlugin.js +8 -0
- package/lib/library/ModuleLibraryPlugin.js +154 -7
- package/lib/library/SystemLibraryPlugin.js +11 -3
- package/lib/library/UmdLibraryPlugin.js +16 -0
- package/lib/loaders/LoaderRunner.js +714 -0
- package/lib/loaders/loadLoader.js +100 -0
- package/lib/logging/Logger.js +17 -0
- package/lib/logging/createConsoleLogger.js +7 -0
- package/lib/logging/runtime.js +2 -0
- package/lib/logging/truncateArgs.js +2 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
- package/lib/node/NodeEnvironmentPlugin.js +7 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +4 -63
- package/lib/node/NodeTemplatePlugin.js +3 -1
- package/lib/node/NodeWatchFileSystem.js +40 -22
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
- package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
- package/lib/node/nodeBuiltins.js +80 -0
- package/lib/node/nodeConsole.js +116 -64
- package/lib/optimize/AggressiveMergingPlugin.js +22 -16
- package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
- package/lib/optimize/ConcatenatedModule.js +603 -130
- package/lib/optimize/ConstExportsPlugin.js +211 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
- package/lib/optimize/InlineExports.js +178 -0
- package/lib/optimize/InnerGraph.js +374 -262
- package/lib/optimize/InnerGraphPlugin.js +246 -117
- package/lib/optimize/LimitChunkCountPlugin.js +9 -0
- package/lib/optimize/MangleExportsPlugin.js +5 -1
- package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
- package/lib/optimize/MinChunkSizePlugin.js +2 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -4
- package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
- package/lib/optimize/RealContentHashPlugin.js +130 -52
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
- package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
- package/lib/optimize/RuntimeChunkPlugin.js +2 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
- package/lib/optimize/SplitChunksPlugin.js +200 -50
- package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
- package/lib/performance/NoAsyncChunksWarning.js +5 -3
- package/lib/performance/SizeLimitsPlugin.js +8 -2
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
- package/lib/prefetch/ResourceHintPlugin.js +687 -0
- package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
- package/lib/prefetch/parseResourceHintOptions.js +103 -0
- package/lib/rules/BasicEffectRulePlugin.js +3 -0
- package/lib/rules/BasicMatcherRulePlugin.js +3 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
- package/lib/rules/RuleSetCompiler.js +132 -0
- package/lib/rules/UseEffectRulePlugin.js +10 -3
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
- package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
- package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
- package/lib/runtime/BaseUriRuntimeModule.js +1 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
- package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
- package/lib/runtime/CompatRuntimeModule.js +2 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
- package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
- package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
- package/lib/runtime/HelperRuntimeModule.js +5 -0
- package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
- package/lib/runtime/NonceRuntimeModule.js +1 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
- package/lib/runtime/PublicPathRuntimeModule.js +1 -0
- package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
- package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
- package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
- package/lib/runtime/SystemContextRuntimeModule.js +1 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
- package/lib/runtime/WorkerRuntimeModule.js +33 -0
- package/lib/schemes/DataUriPlugin.js +14 -2
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +86 -4
- package/lib/schemes/VirtualUrlPlugin.js +8 -4
- package/lib/serialization/AggregateErrorSerializer.js +9 -6
- package/lib/serialization/ArraySerializer.js +6 -8
- package/lib/serialization/BinaryMiddleware.js +427 -1006
- package/lib/serialization/DateObjectSerializer.js +4 -2
- package/lib/serialization/ErrorObjectSerializer.js +10 -6
- package/lib/serialization/FileMiddleware.js +345 -59
- package/lib/serialization/MapObjectSerializer.js +7 -9
- package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
- package/lib/serialization/ObjectMiddleware.js +73 -13
- package/lib/serialization/PlainObjectSerializer.js +16 -8
- package/lib/serialization/RegExpObjectSerializer.js +4 -2
- package/lib/serialization/Serializer.js +6 -0
- package/lib/serialization/SerializerMiddleware.js +14 -2
- package/lib/serialization/SetObjectSerializer.js +6 -8
- package/lib/serialization/SingleItemMiddleware.js +3 -0
- package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
- package/lib/sharing/ConsumeSharedModule.js +21 -7
- package/lib/sharing/ConsumeSharedPlugin.js +11 -11
- package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
- package/lib/sharing/ProvideForSharedDependency.js +1 -0
- package/lib/sharing/ProvideSharedDependency.js +34 -15
- package/lib/sharing/ProvideSharedModule.js +42 -12
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
- package/lib/sharing/ProvideSharedPlugin.js +13 -8
- package/lib/sharing/SharePlugin.js +5 -1
- package/lib/sharing/ShareRuntimeModule.js +19 -16
- package/lib/sharing/resolveMatchedConfigs.js +6 -2
- package/lib/sharing/utils.js +9 -1
- package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
- package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
- package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
- package/lib/stats/StatsFactory.js +70 -27
- package/lib/stats/StatsPrinter.js +16 -2
- package/lib/typescript/TypeScriptPlugin.js +210 -0
- package/lib/url/URLParserPlugin.js +111 -23
- package/lib/util/ArrayHelpers.js +1 -0
- package/lib/util/ArrayQueue.js +10 -5
- package/lib/util/AsyncQueue.js +154 -74
- package/lib/util/Hash.js +2 -2
- package/lib/util/IterableHelpers.js +3 -0
- package/lib/util/LazyBucketSortedSet.js +26 -0
- package/lib/util/LazySet.js +45 -4
- package/lib/util/LocConverter.js +64 -0
- package/lib/util/ParallelismFactorCalculator.js +1 -0
- package/lib/util/Queue.js +6 -3
- package/lib/util/Semaphore.js +15 -1
- package/lib/util/SetHelpers.js +4 -1
- package/lib/util/SortableSet.js +7 -1
- package/lib/util/SourceProcessor.js +119 -0
- package/lib/util/StackedCacheMap.js +20 -3
- package/lib/util/StackedMap.js +162 -43
- package/lib/util/StringXor.js +1 -1
- package/lib/util/TupleQueue.js +7 -3
- package/lib/util/TupleSet.js +14 -0
- package/lib/util/URLAbsoluteSpecifier.js +1 -0
- package/lib/util/WeakTupleMap.js +60 -1
- package/lib/util/binarySearchBounds.js +3 -2
- package/lib/util/chainedImports.js +3 -3
- package/lib/util/cleverMerge.js +19 -2
- package/lib/util/comparators.js +35 -4
- package/lib/util/compileBooleanMatcher.js +9 -0
- package/lib/util/concatenate.js +80 -24
- package/lib/util/conventions.js +46 -1
- package/lib/util/createHash.js +0 -1
- package/lib/util/createHooksRegistry.js +43 -0
- package/lib/util/createMappings.js +118 -0
- package/lib/util/dataURL.js +3 -2
- package/lib/util/deprecation.js +19 -0
- package/lib/util/deterministicGrouping.js +46 -17
- package/lib/util/extractSourceMap.js +2 -1
- package/lib/util/extractUrlAndGlobal.js +1 -0
- package/lib/util/findGraphRoots.js +7 -0
- package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
- package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
- package/lib/util/fs.js +87 -14
- package/lib/util/generateDebugId.js +1 -0
- package/lib/util/globUtils.js +710 -0
- package/lib/util/hash/BatchedHash.js +1 -0
- package/lib/util/hash/BulkUpdateHash.js +1 -0
- package/lib/util/hash/DebugHash.js +1 -0
- package/lib/util/hash/hash-digest.js +32 -15
- package/lib/util/hash/md4.js +1 -1
- package/lib/util/hash/wasm-hash.js +5 -0
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +118 -7
- package/lib/util/implicitTypeLoaderFallback.js +62 -0
- package/lib/util/internalSerializables.js +102 -60
- package/lib/util/magicComment.js +149 -7
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +2 -0
- package/lib/util/mimeTypes.js +176 -0
- package/lib/util/nonNumericOnlyHash.js +31 -1
- package/lib/util/numberHash.js +2 -2
- package/lib/util/parseJson.js +41 -0
- package/lib/util/processAsyncTree.js +8 -0
- package/lib/util/property.js +9 -2
- package/lib/util/publicPathPlaceholder.js +64 -0
- package/lib/util/registerExternalSerializer.js +24 -4
- package/lib/util/removeBOM.js +1 -0
- package/lib/util/runtime.js +32 -0
- package/lib/util/semver.js +15 -0
- package/lib/util/serialization.js +2 -0
- package/lib/util/smartGrouping.js +8 -0
- package/lib/util/source.js +23 -0
- package/lib/util/topologicalSort.js +69 -0
- package/lib/validateSchema.js +1 -0
- package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
- package/lib/wasm-async/AsyncWasmModule.js +77 -0
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
- package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
- package/lib/wasm-sync/SyncWasmModule.js +39 -0
- package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
- package/lib/wasm-sync/WebAssemblyParser.js +9 -3
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
- package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
- package/lib/web/FetchCompileWasmPlugin.js +27 -1
- package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
- package/lib/web/JsonpTemplatePlugin.js +2 -1
- package/lib/webpack.js +78 -1
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/module.d.ts +21 -0
- package/package.json +79 -77
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +1173 -80
- package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
- package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
- package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlParserOptions.check.js +6 -0
- package/schemas/plugins/HtmlParserOptions.json +3 -0
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +38 -0
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
- package/types.d.ts +11053 -3019
- package/lib/CaseSensitiveModulesWarning.js +0 -72
- package/lib/GraphHelpers.js +0 -46
- package/lib/ModuleParseError.js +0 -125
- package/lib/NoModeWarning.js +0 -23
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
- package/lib/css/walkCssTokens.js +0 -1843
- package/lib/util/AppendOnlyStackedSet.js +0 -78
- /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
- /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
|
@@ -5,35 +5,43 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
+
const { RawSource } = require("webpack-sources");
|
|
9
|
+
const HotUpdateChunk = require("../HotUpdateChunk");
|
|
8
10
|
const {
|
|
9
11
|
ASSET_MODULE_TYPE,
|
|
10
12
|
ASSET_MODULE_TYPE_BYTES,
|
|
11
13
|
ASSET_MODULE_TYPE_INLINE,
|
|
12
14
|
ASSET_MODULE_TYPE_RESOURCE,
|
|
13
|
-
ASSET_MODULE_TYPE_SOURCE
|
|
15
|
+
ASSET_MODULE_TYPE_SOURCE,
|
|
16
|
+
ASSET_MODULE_TYPE_WEBMANIFEST
|
|
14
17
|
} = require("../ModuleTypeConstants");
|
|
15
18
|
const { compareModulesByFullName } = require("../util/comparators");
|
|
19
|
+
const createHash = require("../util/createHash");
|
|
20
|
+
const { getUndoPath } = require("../util/identifier");
|
|
16
21
|
const memoize = require("../util/memoize");
|
|
22
|
+
const { PUBLIC_PATH_AUTO } = require("../util/publicPathPlaceholder");
|
|
17
23
|
|
|
18
24
|
/** @typedef {import("webpack-sources").Source} Source */
|
|
19
25
|
/** @typedef {import("schema-utils").Schema} Schema */
|
|
20
26
|
/** @typedef {import("../../declarations/WebpackOptions").AssetGeneratorDataUrl} AssetGeneratorDataUrl */
|
|
21
27
|
/** @typedef {import("../../declarations/WebpackOptions").AssetModuleOutputPath} AssetModuleOutputPath */
|
|
22
28
|
/** @typedef {import("../../declarations/WebpackOptions").RawPublicPath} RawPublicPath */
|
|
23
|
-
/** @typedef {import("../../declarations/WebpackOptions").
|
|
29
|
+
/** @typedef {import("../../declarations/WebpackOptions").AssetModuleFilename} AssetModuleFilename */
|
|
24
30
|
/** @typedef {import("../Compilation").AssetInfo} AssetInfo */
|
|
25
31
|
/** @typedef {import("../Compiler")} Compiler */
|
|
26
|
-
/** @typedef {import("
|
|
32
|
+
/** @typedef {import("./AssetModule").AssetModuleBuildInfo} AssetModuleBuildInfo */
|
|
27
33
|
/** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
|
|
28
34
|
/** @typedef {import("../NormalModule")} NormalModule */
|
|
29
|
-
/** @typedef {import("../NormalModule").NormalModuleCreateData} NormalModuleCreateData */
|
|
30
35
|
|
|
31
36
|
/**
|
|
37
|
+
* Returns definition.
|
|
32
38
|
* @param {string} name name of definitions
|
|
33
39
|
* @returns {Schema} definition
|
|
34
40
|
*/
|
|
35
41
|
const getSchema = (name) => {
|
|
36
|
-
const { definitions } =
|
|
42
|
+
const { definitions } =
|
|
43
|
+
/** @type {EXPECTED_ANY} */
|
|
44
|
+
(require("../../schemas/WebpackOptions.json"));
|
|
37
45
|
|
|
38
46
|
return {
|
|
39
47
|
definitions,
|
|
@@ -54,26 +62,35 @@ const getAssetSourceGenerator = memoize(() =>
|
|
|
54
62
|
require("./AssetSourceGenerator")
|
|
55
63
|
);
|
|
56
64
|
const getAssetBytesGenerator = memoize(() => require("./AssetBytesGenerator"));
|
|
57
|
-
const
|
|
65
|
+
const getAssetModule = memoize(() => require("./AssetModule"));
|
|
66
|
+
const getWebManifestParser = memoize(() => require("./WebManifestParser"));
|
|
67
|
+
const getWebManifestGenerator = memoize(() =>
|
|
68
|
+
require("./WebManifestGenerator")
|
|
69
|
+
);
|
|
58
70
|
|
|
59
71
|
const type = ASSET_MODULE_TYPE;
|
|
72
|
+
// Source type produced by `WebManifestGenerator` (its emitted, rewritten JSON).
|
|
73
|
+
const WEBMANIFEST_SOURCE_TYPE = "webmanifest";
|
|
60
74
|
const PLUGIN_NAME = "AssetModulesPlugin";
|
|
61
75
|
|
|
62
76
|
/**
|
|
77
|
+
* Represents the asset modules plugin runtime component.
|
|
63
78
|
* @typedef {object} AssetModulesPluginOptions
|
|
64
79
|
* @property {boolean=} sideEffectFree
|
|
65
80
|
*/
|
|
66
81
|
|
|
67
82
|
class AssetModulesPlugin {
|
|
68
83
|
/**
|
|
84
|
+
* Creates an instance of AssetModulesPlugin.
|
|
69
85
|
* @param {AssetModulesPluginOptions} options options
|
|
70
86
|
*/
|
|
71
87
|
constructor(options) {
|
|
88
|
+
/** @type {AssetModulesPluginOptions} */
|
|
72
89
|
this.options = options;
|
|
73
90
|
}
|
|
74
91
|
|
|
75
92
|
/**
|
|
76
|
-
*
|
|
93
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
77
94
|
* @param {Compiler} compiler the compiler instance
|
|
78
95
|
* @returns {void}
|
|
79
96
|
*/
|
|
@@ -81,7 +98,7 @@ class AssetModulesPlugin {
|
|
|
81
98
|
compiler.hooks.compilation.tap(
|
|
82
99
|
PLUGIN_NAME,
|
|
83
100
|
(compilation, { normalModuleFactory }) => {
|
|
84
|
-
const
|
|
101
|
+
const AssetModule = getAssetModule();
|
|
85
102
|
for (const type of [
|
|
86
103
|
ASSET_MODULE_TYPE,
|
|
87
104
|
ASSET_MODULE_TYPE_BYTES,
|
|
@@ -91,18 +108,11 @@ class AssetModulesPlugin {
|
|
|
91
108
|
]) {
|
|
92
109
|
normalModuleFactory.hooks.createModuleClass
|
|
93
110
|
.for(type)
|
|
94
|
-
.tap(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
);
|
|
100
|
-
if (this.options.sideEffectFree) {
|
|
101
|
-
module.factoryMeta = { sideEffectFree: true };
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return module;
|
|
105
|
-
});
|
|
111
|
+
.tap(
|
|
112
|
+
PLUGIN_NAME,
|
|
113
|
+
(createData, _resolveData) =>
|
|
114
|
+
new AssetModule(createData, this.options.sideEffectFree)
|
|
115
|
+
);
|
|
106
116
|
}
|
|
107
117
|
|
|
108
118
|
normalModuleFactory.hooks.createParser
|
|
@@ -222,7 +232,7 @@ class AssetModulesPlugin {
|
|
|
222
232
|
}
|
|
223
233
|
}
|
|
224
234
|
|
|
225
|
-
/** @type {undefined |
|
|
235
|
+
/** @type {undefined | AssetModuleFilename} */
|
|
226
236
|
let filename;
|
|
227
237
|
/** @type {undefined | RawPublicPath} */
|
|
228
238
|
let publicPath;
|
|
@@ -242,7 +252,8 @@ class AssetModulesPlugin {
|
|
|
242
252
|
filename,
|
|
243
253
|
publicPath,
|
|
244
254
|
outputPath,
|
|
245
|
-
generatorOptions.emit !== false
|
|
255
|
+
generatorOptions.emit !== false,
|
|
256
|
+
compilation
|
|
246
257
|
);
|
|
247
258
|
});
|
|
248
259
|
}
|
|
@@ -278,7 +289,9 @@ class AssetModulesPlugin {
|
|
|
278
289
|
module,
|
|
279
290
|
chunk.runtime
|
|
280
291
|
);
|
|
281
|
-
const buildInfo = /** @type {
|
|
292
|
+
const buildInfo = /** @type {AssetModuleBuildInfo} */ (
|
|
293
|
+
module.buildInfo
|
|
294
|
+
);
|
|
282
295
|
const data =
|
|
283
296
|
/** @type {NonNullable<CodeGenerationResult["data"]>} */
|
|
284
297
|
(codeGenResult.data);
|
|
@@ -315,7 +328,8 @@ class AssetModulesPlugin {
|
|
|
315
328
|
runtimeTemplate,
|
|
316
329
|
chunkGraph
|
|
317
330
|
},
|
|
318
|
-
contentHash
|
|
331
|
+
contentHash,
|
|
332
|
+
fullContentHash
|
|
319
333
|
);
|
|
320
334
|
entryFilename = filename;
|
|
321
335
|
entryInfo = assetInfo;
|
|
@@ -352,6 +366,83 @@ class AssetModulesPlugin {
|
|
|
352
366
|
return result;
|
|
353
367
|
});
|
|
354
368
|
|
|
369
|
+
// A Web App Manifest (`asset/webmanifest`, gated on `experiments.html`)
|
|
370
|
+
// parses/emits like an asset, but its icon URLs are rewritten in place
|
|
371
|
+
// and the emitted file needs its own per-file public-path resolution.
|
|
372
|
+
if (compilation.options.experiments.html) {
|
|
373
|
+
normalModuleFactory.hooks.createParser
|
|
374
|
+
.for(ASSET_MODULE_TYPE_WEBMANIFEST)
|
|
375
|
+
.tap(PLUGIN_NAME, () => {
|
|
376
|
+
const WebManifestParser = getWebManifestParser();
|
|
377
|
+
|
|
378
|
+
return new WebManifestParser();
|
|
379
|
+
});
|
|
380
|
+
normalModuleFactory.hooks.createGenerator
|
|
381
|
+
.for(ASSET_MODULE_TYPE_WEBMANIFEST)
|
|
382
|
+
.tap(PLUGIN_NAME, () => {
|
|
383
|
+
const WebManifestGenerator = getWebManifestGenerator();
|
|
384
|
+
|
|
385
|
+
return new WebManifestGenerator(compilation.moduleGraph);
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
compilation.hooks.renderManifest.tap(
|
|
389
|
+
PLUGIN_NAME,
|
|
390
|
+
(result, options) => {
|
|
391
|
+
const { chunk, codeGenerationResults } = options;
|
|
392
|
+
if (chunk instanceof HotUpdateChunk) return result;
|
|
393
|
+
const { chunkGraph, outputOptions } = compilation;
|
|
394
|
+
const modules =
|
|
395
|
+
chunkGraph.getOrderedChunkModulesIterableBySourceType(
|
|
396
|
+
chunk,
|
|
397
|
+
WEBMANIFEST_SOURCE_TYPE,
|
|
398
|
+
compareModulesByFullName(compilation.compiler)
|
|
399
|
+
);
|
|
400
|
+
if (!modules) return result;
|
|
401
|
+
for (const module of modules) {
|
|
402
|
+
const codeGenResult = codeGenerationResults.get(
|
|
403
|
+
module,
|
|
404
|
+
chunk.runtime
|
|
405
|
+
);
|
|
406
|
+
const source = codeGenResult.sources.get(
|
|
407
|
+
WEBMANIFEST_SOURCE_TYPE
|
|
408
|
+
);
|
|
409
|
+
if (!source) continue;
|
|
410
|
+
const filename = /** @type {string} */ (
|
|
411
|
+
codeGenResult.data && codeGenResult.data.get("filename")
|
|
412
|
+
);
|
|
413
|
+
if (!filename) continue;
|
|
414
|
+
// Icon URLs resolve relative to the manifest's own location.
|
|
415
|
+
const undoPath = getUndoPath(
|
|
416
|
+
filename,
|
|
417
|
+
/** @type {string} */ (outputOptions.path),
|
|
418
|
+
false
|
|
419
|
+
);
|
|
420
|
+
const content = source
|
|
421
|
+
.source()
|
|
422
|
+
.toString()
|
|
423
|
+
.split(PUBLIC_PATH_AUTO)
|
|
424
|
+
.join(undoPath);
|
|
425
|
+
const hash = createHash(outputOptions.hashFunction || "md4");
|
|
426
|
+
hash.update(content);
|
|
427
|
+
const contentHash = /** @type {string} */ (
|
|
428
|
+
hash.digest(outputOptions.hashDigest || "hex")
|
|
429
|
+
).slice(0, outputOptions.hashDigestLength || 20);
|
|
430
|
+
result.push({
|
|
431
|
+
render: () => new RawSource(content),
|
|
432
|
+
filename,
|
|
433
|
+
info: { immutable: true },
|
|
434
|
+
auxiliary: true,
|
|
435
|
+
identifier: `webManifestModule${chunkGraph.getModuleId(
|
|
436
|
+
module
|
|
437
|
+
)}|${filename}`,
|
|
438
|
+
hash: contentHash
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
return result;
|
|
442
|
+
}
|
|
443
|
+
);
|
|
444
|
+
}
|
|
445
|
+
|
|
355
446
|
compilation.hooks.prepareModuleExecution.tap(
|
|
356
447
|
PLUGIN_NAME,
|
|
357
448
|
(options, context) => {
|
package/lib/asset/AssetParser.js
CHANGED
|
@@ -10,7 +10,7 @@ const Parser = require("../Parser");
|
|
|
10
10
|
/** @typedef {import("../../declarations/WebpackOptions").AssetParserDataUrlOptions} AssetParserDataUrlOptions */
|
|
11
11
|
/** @typedef {import("../../declarations/WebpackOptions").AssetParserOptions} AssetParserOptions */
|
|
12
12
|
/** @typedef {import("../Module")} Module */
|
|
13
|
-
/** @typedef {import("
|
|
13
|
+
/** @typedef {import("./AssetModule").AssetModuleBuildInfo} AssetModuleBuildInfo */
|
|
14
14
|
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
|
15
15
|
/** @typedef {import("../Parser").ParserState} ParserState */
|
|
16
16
|
/** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
|
|
@@ -19,6 +19,7 @@ const Parser = require("../Parser");
|
|
|
19
19
|
|
|
20
20
|
class AssetParser extends Parser {
|
|
21
21
|
/**
|
|
22
|
+
* Creates an instance of AssetParser.
|
|
22
23
|
* @param {AssetParserOptions["dataUrlCondition"] | boolean} dataUrlCondition condition for inlining as DataUrl
|
|
23
24
|
*/
|
|
24
25
|
constructor(dataUrlCondition) {
|
|
@@ -28,6 +29,7 @@ class AssetParser extends Parser {
|
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
/**
|
|
32
|
+
* Parses the provided source and updates the parser state.
|
|
31
33
|
* @param {string | Buffer | PreparsedAst} source the source to parse
|
|
32
34
|
* @param {ParserState} state the parser state
|
|
33
35
|
* @returns {ParserState} the parser state
|
|
@@ -38,7 +40,7 @@ class AssetParser extends Parser {
|
|
|
38
40
|
}
|
|
39
41
|
|
|
40
42
|
const buildInfo =
|
|
41
|
-
/** @type {
|
|
43
|
+
/** @type {AssetModuleBuildInfo} */
|
|
42
44
|
(state.module.buildInfo);
|
|
43
45
|
buildInfo.strict = true;
|
|
44
46
|
const buildMeta =
|
|
@@ -9,10 +9,11 @@ const { RawSource } = require("webpack-sources");
|
|
|
9
9
|
const ConcatenationScope = require("../ConcatenationScope");
|
|
10
10
|
const Generator = require("../Generator");
|
|
11
11
|
const {
|
|
12
|
+
ASSET_URL_TYPE,
|
|
13
|
+
ASSET_URL_TYPES,
|
|
12
14
|
CSS_TYPE,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
JAVASCRIPT_AND_CSS_URL_TYPES,
|
|
15
|
+
HTML_TYPE,
|
|
16
|
+
JAVASCRIPT_AND_ASSET_URL_TYPES,
|
|
16
17
|
JAVASCRIPT_TYPE,
|
|
17
18
|
JAVASCRIPT_TYPES,
|
|
18
19
|
NO_TYPES
|
|
@@ -29,15 +30,18 @@ const RuntimeGlobals = require("../RuntimeGlobals");
|
|
|
29
30
|
|
|
30
31
|
class AssetSourceGenerator extends Generator {
|
|
31
32
|
/**
|
|
33
|
+
* Creates an instance of AssetSourceGenerator.
|
|
32
34
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
33
35
|
*/
|
|
34
36
|
constructor(moduleGraph) {
|
|
35
37
|
super();
|
|
36
38
|
|
|
39
|
+
/** @type {ModuleGraph} */
|
|
37
40
|
this._moduleGraph = moduleGraph;
|
|
38
41
|
}
|
|
39
42
|
|
|
40
43
|
/**
|
|
44
|
+
* Generates generated code for this runtime module.
|
|
41
45
|
* @param {NormalModule} module module for which the code should be generated
|
|
42
46
|
* @param {GenerateContext} generateContext context for generate
|
|
43
47
|
* @returns {Source | null} generated code
|
|
@@ -76,7 +80,7 @@ class AssetSourceGenerator extends Generator {
|
|
|
76
80
|
}
|
|
77
81
|
return new RawSource(sourceContent);
|
|
78
82
|
}
|
|
79
|
-
case
|
|
83
|
+
case ASSET_URL_TYPE: {
|
|
80
84
|
if (!originalSource) {
|
|
81
85
|
return null;
|
|
82
86
|
}
|
|
@@ -96,6 +100,7 @@ class AssetSourceGenerator extends Generator {
|
|
|
96
100
|
}
|
|
97
101
|
|
|
98
102
|
/**
|
|
103
|
+
* Generates fallback output for the provided error condition.
|
|
99
104
|
* @param {Error} error the error
|
|
100
105
|
* @param {NormalModule} module module for which the code should be generated
|
|
101
106
|
* @param {GenerateContext} generateContext context for generate
|
|
@@ -114,6 +119,7 @@ class AssetSourceGenerator extends Generator {
|
|
|
114
119
|
}
|
|
115
120
|
|
|
116
121
|
/**
|
|
122
|
+
* Returns the reason this module cannot be concatenated, when one exists.
|
|
117
123
|
* @param {NormalModule} module module for which the bailout reason should be determined
|
|
118
124
|
* @param {ConcatenationBailoutReasonContext} context context
|
|
119
125
|
* @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
|
|
@@ -123,6 +129,7 @@ class AssetSourceGenerator extends Generator {
|
|
|
123
129
|
}
|
|
124
130
|
|
|
125
131
|
/**
|
|
132
|
+
* Returns the source types available for this module.
|
|
126
133
|
* @param {NormalModule} module fresh module
|
|
127
134
|
* @returns {SourceTypes} available types (do not mutate)
|
|
128
135
|
*/
|
|
@@ -140,10 +147,13 @@ class AssetSourceGenerator extends Generator {
|
|
|
140
147
|
}
|
|
141
148
|
|
|
142
149
|
if (sourceTypes.size > 0) {
|
|
143
|
-
if (
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
150
|
+
if (
|
|
151
|
+
sourceTypes.has(JAVASCRIPT_TYPE) &&
|
|
152
|
+
(sourceTypes.has(CSS_TYPE) || sourceTypes.has(HTML_TYPE))
|
|
153
|
+
) {
|
|
154
|
+
return JAVASCRIPT_AND_ASSET_URL_TYPES;
|
|
155
|
+
} else if (sourceTypes.has(CSS_TYPE) || sourceTypes.has(HTML_TYPE)) {
|
|
156
|
+
return ASSET_URL_TYPES;
|
|
147
157
|
}
|
|
148
158
|
return JAVASCRIPT_TYPES;
|
|
149
159
|
}
|
|
@@ -152,6 +162,14 @@ class AssetSourceGenerator extends Generator {
|
|
|
152
162
|
}
|
|
153
163
|
|
|
154
164
|
/**
|
|
165
|
+
* @returns {boolean} whether getTypes() depends on the module's incoming connections
|
|
166
|
+
*/
|
|
167
|
+
getTypesDependOnIncomingConnections() {
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Returns the estimated size for the requested source type.
|
|
155
173
|
* @param {NormalModule} module the module
|
|
156
174
|
* @param {SourceType=} type source type
|
|
157
175
|
* @returns {number} estimate size of the module
|
|
@@ -14,6 +14,7 @@ const Parser = require("../Parser");
|
|
|
14
14
|
|
|
15
15
|
class AssetSourceParser extends Parser {
|
|
16
16
|
/**
|
|
17
|
+
* Parses the provided source and updates the parser state.
|
|
17
18
|
* @param {string | Buffer | PreparsedAst} source the source to parse
|
|
18
19
|
* @param {ParserState} state the parser state
|
|
19
20
|
* @returns {ParserState} the parser state
|
|
@@ -29,13 +29,14 @@ const makeSerializable = require("../util/makeSerializable");
|
|
|
29
29
|
/** @typedef {import("../Module").SourceTypes} SourceTypes */
|
|
30
30
|
/** @typedef {import("../RequestShortener")} RequestShortener */
|
|
31
31
|
/** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
|
|
32
|
-
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
|
33
|
-
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
|
32
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Buffer | undefined, string, string]>} ObjectDeserializerContext */
|
|
33
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Buffer | undefined, string, string]>} ObjectSerializerContext */
|
|
34
34
|
/** @typedef {import("../util/Hash")} Hash */
|
|
35
35
|
/** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
|
|
36
36
|
|
|
37
37
|
class RawDataUrlModule extends Module {
|
|
38
38
|
/**
|
|
39
|
+
* Creates an instance of RawDataUrlModule.
|
|
39
40
|
* @param {string} url raw url
|
|
40
41
|
* @param {string} identifier unique identifier
|
|
41
42
|
* @param {string=} readableIdentifier readable identifier
|
|
@@ -53,6 +54,7 @@ class RawDataUrlModule extends Module {
|
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
/**
|
|
57
|
+
* Returns the source types this module can generate.
|
|
56
58
|
* @returns {SourceTypes} types available (do not mutate)
|
|
57
59
|
*/
|
|
58
60
|
getSourceTypes() {
|
|
@@ -60,6 +62,7 @@ class RawDataUrlModule extends Module {
|
|
|
60
62
|
}
|
|
61
63
|
|
|
62
64
|
/**
|
|
65
|
+
* Returns the unique identifier used to reference this module.
|
|
63
66
|
* @returns {string} a unique identifier of the module
|
|
64
67
|
*/
|
|
65
68
|
identifier() {
|
|
@@ -67,6 +70,7 @@ class RawDataUrlModule extends Module {
|
|
|
67
70
|
}
|
|
68
71
|
|
|
69
72
|
/**
|
|
73
|
+
* Returns the estimated size for the requested source type.
|
|
70
74
|
* @param {string=} type the source type for which the size should be estimated
|
|
71
75
|
* @returns {number} the estimated size of the module (must be non-zero)
|
|
72
76
|
*/
|
|
@@ -78,6 +82,7 @@ class RawDataUrlModule extends Module {
|
|
|
78
82
|
}
|
|
79
83
|
|
|
80
84
|
/**
|
|
85
|
+
* Returns a human-readable identifier for this module.
|
|
81
86
|
* @param {RequestShortener} requestShortener the request shortener
|
|
82
87
|
* @returns {string} a user readable identifier of the module
|
|
83
88
|
*/
|
|
@@ -88,6 +93,7 @@ class RawDataUrlModule extends Module {
|
|
|
88
93
|
}
|
|
89
94
|
|
|
90
95
|
/**
|
|
96
|
+
* Checks whether the module needs to be rebuilt for the current build state.
|
|
91
97
|
* @param {NeedBuildContext} context context info
|
|
92
98
|
* @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
|
|
93
99
|
* @returns {void}
|
|
@@ -97,6 +103,7 @@ class RawDataUrlModule extends Module {
|
|
|
97
103
|
}
|
|
98
104
|
|
|
99
105
|
/**
|
|
106
|
+
* Builds the module using the provided compilation context.
|
|
100
107
|
* @param {WebpackOptions} options webpack options
|
|
101
108
|
* @param {Compilation} compilation the compilation
|
|
102
109
|
* @param {ResolverWithOptions} resolver the resolver
|
|
@@ -113,6 +120,7 @@ class RawDataUrlModule extends Module {
|
|
|
113
120
|
}
|
|
114
121
|
|
|
115
122
|
/**
|
|
123
|
+
* Generates code and runtime requirements for this module.
|
|
116
124
|
* @param {CodeGenerationContext} context context for code generation
|
|
117
125
|
* @returns {CodeGenerationResult} result
|
|
118
126
|
*/
|
|
@@ -138,6 +146,7 @@ class RawDataUrlModule extends Module {
|
|
|
138
146
|
}
|
|
139
147
|
|
|
140
148
|
/**
|
|
149
|
+
* Updates the hash with the data contributed by this instance.
|
|
141
150
|
* @param {Hash} hash the hash used to track dependencies
|
|
142
151
|
* @param {UpdateHashContext} context context
|
|
143
152
|
* @returns {void}
|
|
@@ -148,29 +157,30 @@ class RawDataUrlModule extends Module {
|
|
|
148
157
|
}
|
|
149
158
|
|
|
150
159
|
/**
|
|
160
|
+
* Serializes this instance into the provided serializer context.
|
|
151
161
|
* @param {ObjectSerializerContext} context context
|
|
152
162
|
*/
|
|
153
163
|
serialize(context) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
write(this.readableIdentifierStr);
|
|
164
|
+
context
|
|
165
|
+
.write(this.urlBuffer)
|
|
166
|
+
.write(this.identifierStr)
|
|
167
|
+
.write(this.readableIdentifierStr);
|
|
159
168
|
|
|
160
169
|
super.serialize(context);
|
|
161
170
|
}
|
|
162
171
|
|
|
163
172
|
/**
|
|
173
|
+
* Restores this instance from the provided deserializer context.
|
|
164
174
|
* @param {ObjectDeserializerContext} context context
|
|
165
175
|
*/
|
|
166
176
|
deserialize(context) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
this.
|
|
170
|
-
|
|
171
|
-
this.readableIdentifierStr = read();
|
|
177
|
+
this.urlBuffer = context.read();
|
|
178
|
+
const c1 = context.rest;
|
|
179
|
+
this.identifierStr = c1.read();
|
|
180
|
+
const c2 = c1.rest;
|
|
181
|
+
this.readableIdentifierStr = c2.read();
|
|
172
182
|
|
|
173
|
-
super.deserialize(
|
|
183
|
+
super.deserialize(c2.rest);
|
|
174
184
|
}
|
|
175
185
|
}
|
|
176
186
|
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const { RawSource, ReplaceSource } = require("webpack-sources");
|
|
9
|
+
const { ASSET_URL_TYPE } = require("../ModuleSourceTypeConstants");
|
|
10
|
+
const createHash = require("../util/createHash");
|
|
11
|
+
const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
|
|
12
|
+
const { PUBLIC_PATH_AUTO } = require("../util/publicPathPlaceholder");
|
|
13
|
+
const AssetGenerator = require("./AssetGenerator");
|
|
14
|
+
|
|
15
|
+
/** @typedef {import("webpack-sources").Source} Source */
|
|
16
|
+
/** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
|
|
17
|
+
/** @typedef {import("../Compilation").DependencyConstructor} DependencyConstructor */
|
|
18
|
+
/** @typedef {import("../Dependency")} Dependency */
|
|
19
|
+
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
|
|
20
|
+
/** @typedef {import("../Generator").GenerateContext} GenerateContext */
|
|
21
|
+
/** @typedef {import("../Module").SourceType} SourceType */
|
|
22
|
+
/** @typedef {import("../Module").SourceTypes} SourceTypes */
|
|
23
|
+
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
|
24
|
+
/** @typedef {import("../NormalModule")} NormalModule */
|
|
25
|
+
|
|
26
|
+
const WEBMANIFEST_TYPE = "webmanifest";
|
|
27
|
+
const WEBMANIFEST_TYPES = new Set([WEBMANIFEST_TYPE]);
|
|
28
|
+
const WEBMANIFEST_AND_ASSET_URL_TYPES = new Set([
|
|
29
|
+
WEBMANIFEST_TYPE,
|
|
30
|
+
ASSET_URL_TYPE
|
|
31
|
+
]);
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* A Web App Manifest is a "typed asset": a variant of `AssetGenerator` (reusing
|
|
35
|
+
* its filename/hash and `ASSET_URL_TYPE` machinery) whose emitted content is the
|
|
36
|
+
* raw JSON with each icon `src` rewritten to its bundled asset URL. The manifest
|
|
37
|
+
* itself is emitted — with its own URL exposed to the referencing
|
|
38
|
+
* `<link rel="manifest">` — by `AssetModulesPlugin`'s `renderManifest`, which
|
|
39
|
+
* resolves the per-file public path (like the CSS/HTML plugins).
|
|
40
|
+
*/
|
|
41
|
+
class WebManifestGenerator extends AssetGenerator {
|
|
42
|
+
/**
|
|
43
|
+
* @param {ModuleGraph} moduleGraph the module graph
|
|
44
|
+
*/
|
|
45
|
+
constructor(moduleGraph) {
|
|
46
|
+
super(moduleGraph, undefined, undefined, undefined, undefined, true);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Returns the source types available for this module.
|
|
51
|
+
* @param {NormalModule} module fresh module
|
|
52
|
+
* @returns {SourceTypes} available types (do not mutate)
|
|
53
|
+
*/
|
|
54
|
+
getTypes(module) {
|
|
55
|
+
// Expose the manifest's own URL only when it is referenced (from HTML).
|
|
56
|
+
const connections = this._moduleGraph.getIncomingConnections(module);
|
|
57
|
+
const referenced = !connections[Symbol.iterator]().next().done;
|
|
58
|
+
return referenced ? WEBMANIFEST_AND_ASSET_URL_TYPES : WEBMANIFEST_TYPES;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Returns the estimated size for the requested source type.
|
|
63
|
+
* @param {NormalModule} module the module
|
|
64
|
+
* @param {SourceType=} type source type
|
|
65
|
+
* @returns {number} estimate size of the module
|
|
66
|
+
*/
|
|
67
|
+
getSize(module, type) {
|
|
68
|
+
const originalSource = module.originalSource();
|
|
69
|
+
return originalSource ? originalSource.size() : 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Rewrites each icon `src` in the raw manifest to its emitted asset URL.
|
|
74
|
+
* @param {NormalModule} module the manifest module
|
|
75
|
+
* @param {GenerateContext} generateContext context for generate
|
|
76
|
+
* @returns {string} the rewritten manifest content
|
|
77
|
+
*/
|
|
78
|
+
_rewrite(module, generateContext) {
|
|
79
|
+
const originalSource = /** @type {Source} */ (module.originalSource());
|
|
80
|
+
const source = new ReplaceSource(originalSource);
|
|
81
|
+
// `HtmlSourceDependency.Template` only reads `moduleGraph`/`runtimeTemplate`/
|
|
82
|
+
// `codeGenerationResults`; the rest is filled to satisfy the context shape.
|
|
83
|
+
/** @type {DependencyTemplateContext} */
|
|
84
|
+
const templateContext = {
|
|
85
|
+
runtimeTemplate: generateContext.runtimeTemplate,
|
|
86
|
+
dependencyTemplates: generateContext.dependencyTemplates,
|
|
87
|
+
moduleGraph: generateContext.moduleGraph,
|
|
88
|
+
chunkGraph: generateContext.chunkGraph,
|
|
89
|
+
module,
|
|
90
|
+
runtime: generateContext.runtime,
|
|
91
|
+
runtimeRequirements: generateContext.runtimeRequirements,
|
|
92
|
+
concatenationScope: generateContext.concatenationScope,
|
|
93
|
+
codeGenerationResults:
|
|
94
|
+
/** @type {CodeGenerationResults} */
|
|
95
|
+
(generateContext.codeGenerationResults),
|
|
96
|
+
initFragments: [],
|
|
97
|
+
chunkInitFragments: []
|
|
98
|
+
};
|
|
99
|
+
for (const dependency of module.dependencies) {
|
|
100
|
+
const constructor = /** @type {DependencyConstructor} */ (
|
|
101
|
+
dependency.constructor
|
|
102
|
+
);
|
|
103
|
+
const template = templateContext.dependencyTemplates.get(constructor);
|
|
104
|
+
if (!template) {
|
|
105
|
+
throw new Error(
|
|
106
|
+
`No template for dependency: ${dependency.constructor.name}`
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
template.apply(dependency, source, templateContext);
|
|
110
|
+
}
|
|
111
|
+
return /** @type {string} */ (source.source());
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Generates generated code for this runtime module.
|
|
116
|
+
* @param {NormalModule} module module for which the code should be generated
|
|
117
|
+
* @param {GenerateContext} generateContext context for generate
|
|
118
|
+
* @returns {Source | null} generated code
|
|
119
|
+
*/
|
|
120
|
+
generate(module, generateContext) {
|
|
121
|
+
if (!module.originalSource()) return new RawSource("");
|
|
122
|
+
|
|
123
|
+
const { type, getData } = generateContext;
|
|
124
|
+
const content = this._rewrite(module, generateContext);
|
|
125
|
+
|
|
126
|
+
// Hash the *rewritten* content (so the filename tracks the icons) and reuse
|
|
127
|
+
// the asset filename machinery, so a plain (icon-less) manifest emits like a
|
|
128
|
+
// plain asset (`output.assetModuleFilename`, `[name]`, `[ext]`).
|
|
129
|
+
const outputOptions = generateContext.runtimeTemplate.outputOptions;
|
|
130
|
+
const hash = createHash(outputOptions.hashFunction);
|
|
131
|
+
if (outputOptions.hashSalt) hash.update(outputOptions.hashSalt);
|
|
132
|
+
hash.update(content);
|
|
133
|
+
const fullContentHash = /** @type {string} */ (
|
|
134
|
+
hash.digest(outputOptions.hashDigest)
|
|
135
|
+
);
|
|
136
|
+
const contentHash = nonNumericOnlyHash(
|
|
137
|
+
fullContentHash,
|
|
138
|
+
/** @type {number} */ (outputOptions.hashDigestLength)
|
|
139
|
+
);
|
|
140
|
+
const { filename, assetInfo } = AssetGenerator.getFilenameWithInfo(
|
|
141
|
+
module,
|
|
142
|
+
{ filename: undefined, outputPath: undefined },
|
|
143
|
+
generateContext,
|
|
144
|
+
contentHash,
|
|
145
|
+
fullContentHash
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
const data = getData ? getData() : undefined;
|
|
149
|
+
if (data) {
|
|
150
|
+
data.set("filename", filename);
|
|
151
|
+
data.set("assetInfo", assetInfo);
|
|
152
|
+
if (type === ASSET_URL_TYPE) {
|
|
153
|
+
data.set("url", {
|
|
154
|
+
...data.get("url"),
|
|
155
|
+
[ASSET_URL_TYPE]: PUBLIC_PATH_AUTO + filename
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return type === ASSET_URL_TYPE ? null : new RawSource(content);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
module.exports = WebManifestGenerator;
|