webpack 5.59.0 → 5.94.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 +48 -38
- package/bin/webpack.js +34 -10
- package/hot/dev-server.js +19 -5
- package/hot/lazy-compilation-node.js +13 -1
- package/hot/lazy-compilation-web.js +9 -0
- package/hot/log-apply-result.js +5 -0
- package/hot/log.js +23 -4
- package/hot/only-dev-server.js +3 -2
- package/hot/poll.js +5 -2
- package/hot/signal.js +6 -2
- package/lib/APIPlugin.js +226 -122
- package/lib/AbstractMethodError.js +10 -5
- package/lib/AsyncDependenciesBlock.js +13 -5
- package/lib/AutomaticPrefetchPlugin.js +2 -1
- package/lib/BannerPlugin.js +33 -12
- package/lib/Cache.js +16 -12
- package/lib/CacheFacade.js +13 -16
- package/lib/CaseSensitiveModulesWarning.js +8 -8
- package/lib/Chunk.js +60 -33
- package/lib/ChunkGraph.js +207 -72
- package/lib/ChunkGroup.js +40 -20
- package/lib/ChunkTemplate.js +43 -0
- package/lib/CleanPlugin.js +117 -32
- package/lib/CodeGenerationResults.js +8 -7
- package/lib/CommentCompilationWarning.js +0 -1
- package/lib/CompatibilityPlugin.js +85 -46
- package/lib/Compilation.js +712 -392
- package/lib/Compiler.js +393 -172
- package/lib/ConcatenationScope.js +10 -13
- package/lib/ConditionalInitFragment.js +22 -14
- package/lib/ConstPlugin.js +104 -64
- package/lib/ContextExclusionPlugin.js +3 -3
- package/lib/ContextModule.js +283 -108
- package/lib/ContextModuleFactory.js +151 -63
- package/lib/ContextReplacementPlugin.js +25 -10
- package/lib/CssModule.js +166 -0
- package/lib/DefinePlugin.js +254 -148
- package/lib/DelegatedModule.js +29 -6
- package/lib/DelegatedModuleFactoryPlugin.js +42 -22
- package/lib/DelegatedPlugin.js +4 -0
- package/lib/DependenciesBlock.js +17 -2
- package/lib/Dependency.js +58 -29
- package/lib/DependencyTemplate.js +24 -3
- package/lib/DependencyTemplates.js +2 -2
- package/lib/DllEntryPlugin.js +18 -1
- package/lib/DllModule.js +21 -4
- package/lib/DllModuleFactory.js +2 -1
- package/lib/DllPlugin.js +9 -7
- package/lib/DllReferencePlugin.js +50 -19
- package/lib/EntryOptionPlugin.js +6 -1
- package/lib/EntryPlugin.js +7 -4
- package/lib/Entrypoint.js +2 -2
- package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
- package/lib/EnvironmentPlugin.js +5 -2
- package/lib/ErrorHelpers.js +65 -26
- package/lib/EvalDevToolModulePlugin.js +37 -13
- package/lib/EvalSourceMapDevToolPlugin.js +50 -20
- package/lib/ExportsInfo.js +234 -133
- package/lib/ExportsInfoApiPlugin.js +31 -15
- package/lib/ExternalModule.js +391 -129
- package/lib/ExternalModuleFactoryPlugin.js +65 -17
- package/lib/FileSystemInfo.js +1038 -523
- package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
- package/lib/FlagDependencyExportsPlugin.js +352 -349
- package/lib/FlagDependencyUsagePlugin.js +10 -10
- package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
- package/lib/Generator.js +16 -8
- package/lib/GraphHelpers.js +3 -2
- package/lib/HookWebpackError.js +11 -13
- package/lib/HotModuleReplacementPlugin.js +221 -128
- package/lib/IgnoreErrorModuleFactory.js +4 -4
- package/lib/IgnorePlugin.js +5 -4
- package/lib/IgnoreWarningsPlugin.js +6 -9
- package/lib/InitFragment.js +39 -15
- package/lib/JavascriptMetaInfoPlugin.js +27 -15
- package/lib/LibManifestPlugin.js +45 -16
- package/lib/LoaderOptionsPlugin.js +13 -3
- package/lib/MainTemplate.js +74 -21
- package/lib/Module.js +155 -34
- package/lib/ModuleBuildError.js +13 -11
- package/lib/ModuleDependencyError.js +6 -4
- package/lib/ModuleDependencyWarning.js +6 -4
- package/lib/ModuleError.js +10 -5
- package/lib/ModuleFactory.js +4 -4
- package/lib/ModuleFilenameHelpers.js +164 -54
- package/lib/ModuleGraph.js +93 -53
- package/lib/ModuleGraphConnection.js +27 -13
- package/lib/ModuleHashingError.js +29 -0
- package/lib/ModuleInfoHeaderPlugin.js +92 -33
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleParseError.js +17 -9
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +3 -1
- package/lib/ModuleStoreError.js +3 -2
- package/lib/ModuleTemplate.js +33 -1
- package/lib/ModuleTypeConstants.js +168 -0
- package/lib/ModuleWarning.js +10 -5
- package/lib/MultiCompiler.js +115 -38
- package/lib/MultiStats.js +75 -33
- package/lib/MultiWatching.js +6 -2
- package/lib/NodeStuffPlugin.js +136 -37
- package/lib/NormalModule.js +437 -194
- package/lib/NormalModuleFactory.js +313 -116
- package/lib/NormalModuleReplacementPlugin.js +10 -4
- package/lib/NullFactory.js +1 -1
- package/lib/OptimizationStages.js +3 -3
- package/lib/Parser.js +1 -1
- package/lib/PlatformPlugin.js +39 -0
- package/lib/PrefetchPlugin.js +4 -0
- package/lib/ProgressPlugin.js +83 -28
- package/lib/ProvidePlugin.js +37 -19
- package/lib/RawModule.js +18 -5
- package/lib/RecordIdsPlugin.js +8 -8
- package/lib/RequireJsStuffPlugin.js +22 -15
- package/lib/ResolverFactory.js +8 -4
- package/lib/RuntimeGlobals.js +99 -65
- package/lib/RuntimeModule.js +17 -15
- package/lib/RuntimePlugin.js +116 -13
- package/lib/RuntimeTemplate.js +304 -102
- package/lib/SelfModuleFactory.js +12 -0
- package/lib/SizeFormatHelpers.js +2 -4
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +89 -42
- package/lib/Stats.js +12 -7
- package/lib/Template.js +30 -33
- package/lib/TemplatedPathPlugin.js +102 -34
- package/lib/UseStrictPlugin.js +37 -12
- package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
- package/lib/WarnDeprecatedOptionPlugin.js +6 -0
- package/lib/WatchIgnorePlugin.js +46 -13
- package/lib/Watching.js +139 -76
- package/lib/WebpackError.js +14 -5
- package/lib/WebpackIsIncludedPlugin.js +22 -13
- package/lib/WebpackOptionsApply.js +162 -56
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +351 -99
- package/lib/asset/AssetModulesPlugin.js +57 -33
- package/lib/asset/AssetParser.js +15 -6
- package/lib/asset/AssetSourceGenerator.js +30 -10
- package/lib/asset/AssetSourceParser.js +8 -2
- package/lib/asset/RawDataUrlModule.js +162 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/buildChunkGraph.js +376 -420
- package/lib/cache/AddManagedPathsPlugin.js +6 -1
- package/lib/cache/IdleFileCachePlugin.js +26 -13
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
- package/lib/cache/PackFileCacheStrategy.js +172 -94
- package/lib/cache/ResolverCachePlugin.js +115 -43
- package/lib/cache/getLazyHashedEtag.js +2 -2
- package/lib/cache/mergeEtags.js +16 -21
- package/lib/cli.js +195 -110
- package/lib/config/browserslistTargetHandler.js +106 -41
- package/lib/config/defaults.js +572 -154
- package/lib/config/normalization.js +361 -322
- package/lib/config/target.js +105 -66
- package/lib/container/ContainerEntryDependency.js +2 -1
- package/lib/container/ContainerEntryModule.js +27 -11
- package/lib/container/ContainerEntryModuleFactory.js +1 -1
- package/lib/container/ContainerExposedDependency.js +9 -0
- package/lib/container/ContainerPlugin.js +18 -12
- package/lib/container/ContainerReferencePlugin.js +1 -1
- package/lib/container/FallbackDependency.js +13 -0
- package/lib/container/FallbackItemDependency.js +3 -0
- package/lib/container/FallbackModule.js +19 -8
- package/lib/container/FallbackModuleFactory.js +1 -1
- package/lib/container/ModuleFederationPlugin.js +2 -0
- package/lib/container/RemoteModule.js +17 -4
- package/lib/container/RemoteRuntimeModule.js +31 -17
- package/lib/container/RemoteToExternalDependency.js +3 -0
- package/lib/container/options.js +18 -4
- package/lib/css/CssExportsGenerator.js +203 -0
- package/lib/css/CssGenerator.js +151 -0
- package/lib/css/CssLoadingRuntimeModule.js +592 -0
- package/lib/css/CssModulesPlugin.js +888 -0
- package/lib/css/CssParser.js +1049 -0
- package/lib/css/walkCssTokens.js +775 -0
- package/lib/debug/ProfilingPlugin.js +102 -54
- package/lib/dependencies/AMDDefineDependency.js +54 -10
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
- package/lib/dependencies/AMDPlugin.js +44 -24
- package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
- package/lib/dependencies/AMDRequireContextDependency.js +15 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
- package/lib/dependencies/AMDRequireDependency.js +21 -6
- package/lib/dependencies/AMDRequireItemDependency.js +6 -0
- package/lib/dependencies/AMDRuntimeModules.js +4 -4
- package/lib/dependencies/CachedConstDependency.js +22 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
- package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
- package/lib/dependencies/CommonJsExportsDependency.js +28 -5
- package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
- package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
- package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
- package/lib/dependencies/CommonJsPlugin.js +51 -26
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
- package/lib/dependencies/CommonJsRequireDependency.js +9 -1
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
- package/lib/dependencies/ConstDependency.js +12 -3
- package/lib/dependencies/ContextDependency.js +32 -5
- package/lib/dependencies/ContextDependencyHelpers.js +92 -62
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
- package/lib/dependencies/ContextElementDependency.js +41 -4
- package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
- package/lib/dependencies/CriticalDependencyWarning.js +4 -1
- package/lib/dependencies/CssExportDependency.js +156 -0
- package/lib/dependencies/CssImportDependency.js +125 -0
- package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
- package/lib/dependencies/CssUrlDependency.js +164 -0
- package/lib/dependencies/DelegatedSourceDependency.js +3 -0
- package/lib/dependencies/DllEntryDependency.js +14 -0
- package/lib/dependencies/DynamicExports.js +15 -11
- package/lib/dependencies/ExportsInfoDependency.js +26 -5
- package/lib/dependencies/ExternalModuleDependency.js +109 -0
- package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
- package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
- package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
- package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
- package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
- package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
- package/lib/dependencies/HarmonyExports.js +13 -7
- package/lib/dependencies/HarmonyImportDependency.js +65 -19
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
- package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportContextDependency.js +15 -2
- package/lib/dependencies/ImportDependency.js +50 -12
- package/lib/dependencies/ImportEagerDependency.js +11 -6
- package/lib/dependencies/ImportMetaContextDependency.js +42 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
- package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
- package/lib/dependencies/ImportMetaPlugin.js +128 -59
- package/lib/dependencies/ImportParserPlugin.js +153 -83
- package/lib/dependencies/ImportPlugin.js +21 -7
- package/lib/dependencies/ImportWeakDependency.js +11 -6
- package/lib/dependencies/JsonExportsDependency.js +38 -30
- package/lib/dependencies/LoaderDependency.js +14 -0
- package/lib/dependencies/LoaderImportDependency.js +14 -0
- package/lib/dependencies/LoaderPlugin.js +54 -40
- package/lib/dependencies/LocalModule.js +17 -1
- package/lib/dependencies/LocalModuleDependency.js +15 -0
- package/lib/dependencies/LocalModulesHelpers.js +22 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
- package/lib/dependencies/ModuleDependency.js +24 -7
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
- package/lib/dependencies/PrefetchDependency.js +3 -0
- package/lib/dependencies/ProvidedDependency.js +43 -8
- package/lib/dependencies/PureExpressionDependency.js +73 -39
- package/lib/dependencies/RequireContextDependency.js +6 -16
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
- package/lib/dependencies/RequireContextPlugin.js +20 -7
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
- package/lib/dependencies/RequireEnsureDependency.js +16 -2
- package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
- package/lib/dependencies/RequireEnsurePlugin.js +27 -7
- package/lib/dependencies/RequireHeaderDependency.js +14 -1
- package/lib/dependencies/RequireIncludeDependency.js +6 -1
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
- package/lib/dependencies/RequireIncludePlugin.js +25 -5
- package/lib/dependencies/RequireResolveContextDependency.js +19 -2
- package/lib/dependencies/RequireResolveDependency.js +8 -1
- package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
- package/lib/dependencies/StaticExportsDependency.js +8 -0
- package/lib/dependencies/SystemPlugin.js +49 -22
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +20 -13
- package/lib/dependencies/URLPlugin.js +115 -27
- package/lib/dependencies/UnsupportedDependency.js +13 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
- package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
- package/lib/dependencies/WorkerDependency.js +47 -3
- package/lib/dependencies/WorkerPlugin.js +143 -59
- package/lib/dependencies/getFunctionExpression.js +9 -0
- package/lib/dependencies/processExportInfo.js +3 -1
- package/lib/electron/ElectronTargetPlugin.js +1 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
- package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
- package/lib/formatLocation.js +1 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
- package/lib/hmr/LazyCompilationPlugin.js +94 -41
- package/lib/hmr/lazyCompilationBackend.js +107 -44
- package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
- package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
- package/lib/ids/HashedModuleIdsPlugin.js +24 -16
- package/lib/ids/IdHelpers.js +59 -49
- package/lib/ids/NamedChunkIdsPlugin.js +13 -1
- package/lib/ids/NamedModuleIdsPlugin.js +20 -12
- package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
- package/lib/ids/SyncModuleIdsPlugin.js +146 -0
- package/lib/index.js +44 -5
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
- package/lib/javascript/BasicEvaluatedExpression.js +133 -19
- package/lib/javascript/ChunkHelpers.js +33 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
- package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
- package/lib/javascript/JavascriptGenerator.js +37 -6
- package/lib/javascript/JavascriptModulesPlugin.js +523 -295
- package/lib/javascript/JavascriptParser.js +1591 -574
- package/lib/javascript/JavascriptParserHelpers.js +58 -37
- package/lib/javascript/StartupHelpers.js +69 -47
- package/lib/json/JsonData.js +33 -0
- package/lib/json/JsonGenerator.js +29 -21
- package/lib/json/JsonModulesPlugin.js +13 -7
- package/lib/json/JsonParser.js +30 -16
- package/lib/library/AbstractLibraryPlugin.js +6 -2
- package/lib/library/AmdLibraryPlugin.js +34 -18
- package/lib/library/AssignLibraryPlugin.js +68 -32
- package/lib/library/EnableLibraryPlugin.js +39 -14
- package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
- package/lib/library/JsonpLibraryPlugin.js +4 -3
- package/lib/library/ModernModuleLibraryPlugin.js +144 -0
- package/lib/library/ModuleLibraryPlugin.js +12 -7
- package/lib/library/SystemLibraryPlugin.js +6 -4
- package/lib/library/UmdLibraryPlugin.js +119 -100
- package/lib/logging/Logger.js +59 -6
- package/lib/logging/createConsoleLogger.js +25 -40
- package/lib/logging/runtime.js +8 -9
- package/lib/logging/truncateArgs.js +9 -8
- package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
- package/lib/node/NodeEnvironmentPlugin.js +14 -8
- package/lib/node/NodeTargetPlugin.js +7 -0
- package/lib/node/NodeTemplatePlugin.js +10 -2
- package/lib/node/NodeWatchFileSystem.js +100 -50
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
- package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
- package/lib/node/nodeConsole.js +48 -31
- package/lib/optimize/AggressiveMergingPlugin.js +10 -4
- package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
- package/lib/optimize/ConcatenatedModule.js +353 -212
- package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
- package/lib/optimize/InnerGraph.js +30 -25
- package/lib/optimize/InnerGraphPlugin.js +105 -64
- package/lib/optimize/LimitChunkCountPlugin.js +32 -9
- package/lib/optimize/MangleExportsPlugin.js +7 -2
- package/lib/optimize/MinMaxSizeWarning.js +6 -1
- package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
- package/lib/optimize/RealContentHashPlugin.js +99 -43
- package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
- package/lib/optimize/RuntimeChunkPlugin.js +15 -2
- package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
- package/lib/optimize/SplitChunksPlugin.js +129 -78
- package/lib/performance/SizeLimitsPlugin.js +22 -8
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
- package/lib/rules/BasicEffectRulePlugin.js +7 -1
- package/lib/rules/BasicMatcherRulePlugin.js +8 -1
- package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
- package/lib/rules/RuleSetCompiler.js +53 -32
- package/lib/rules/UseEffectRulePlugin.js +42 -36
- package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
- package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
- package/lib/runtime/BaseUriRuntimeModule.js +35 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
- package/lib/runtime/CompatRuntimeModule.js +7 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
- package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +24 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
- package/lib/runtime/PublicPathRuntimeModule.js +9 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
- package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/schemes/DataUriPlugin.js +16 -3
- package/lib/schemes/HttpUriPlugin.js +336 -120
- package/lib/serialization/ArraySerializer.js +22 -6
- package/lib/serialization/BinaryMiddleware.js +212 -33
- package/lib/serialization/DateObjectSerializer.js +16 -4
- package/lib/serialization/ErrorObjectSerializer.js +23 -6
- package/lib/serialization/FileMiddleware.js +187 -86
- package/lib/serialization/MapObjectSerializer.js +25 -8
- package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
- package/lib/serialization/ObjectMiddleware.js +96 -66
- package/lib/serialization/PlainObjectSerializer.js +51 -14
- package/lib/serialization/RegExpObjectSerializer.js +17 -5
- package/lib/serialization/Serializer.js +23 -5
- package/lib/serialization/SerializerMiddleware.js +8 -8
- package/lib/serialization/SetObjectSerializer.js +22 -6
- package/lib/serialization/SingleItemMiddleware.js +2 -2
- package/lib/serialization/types.js +2 -2
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedModule.js +40 -17
- package/lib/sharing/ConsumeSharedPlugin.js +139 -102
- package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
- package/lib/sharing/ProvideForSharedDependency.js +0 -1
- package/lib/sharing/ProvideSharedDependency.js +17 -0
- package/lib/sharing/ProvideSharedModule.js +19 -6
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
- package/lib/sharing/ProvideSharedPlugin.js +37 -30
- package/lib/sharing/SharePlugin.js +2 -2
- package/lib/sharing/ShareRuntimeModule.js +20 -10
- package/lib/sharing/resolveMatchedConfigs.js +6 -5
- package/lib/sharing/utils.js +338 -34
- package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
- package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
- package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
- package/lib/stats/StatsFactory.js +128 -57
- package/lib/stats/StatsPrinter.js +77 -46
- package/lib/util/ArrayHelpers.js +35 -1
- package/lib/util/ArrayQueue.js +15 -22
- package/lib/util/AsyncQueue.js +37 -16
- package/lib/util/IterableHelpers.js +3 -4
- package/lib/util/LazyBucketSortedSet.js +60 -44
- package/lib/util/LazySet.js +11 -2
- package/lib/util/MapHelpers.js +17 -5
- package/lib/util/ParallelismFactorCalculator.js +11 -1
- package/lib/util/Queue.js +9 -3
- package/lib/util/Semaphore.js +4 -7
- package/lib/util/SetHelpers.js +5 -5
- package/lib/util/SortableSet.js +19 -6
- package/lib/util/StackedCacheMap.js +33 -3
- package/lib/util/StackedMap.js +1 -3
- package/lib/util/StringXor.js +46 -0
- package/lib/util/TupleQueue.js +9 -3
- package/lib/util/TupleSet.js +15 -5
- package/lib/util/URLAbsoluteSpecifier.js +8 -8
- package/lib/util/WeakTupleMap.js +70 -28
- package/lib/util/binarySearchBounds.js +51 -9
- package/lib/util/chainedImports.js +97 -0
- package/lib/util/cleverMerge.js +51 -36
- package/lib/util/comparators.js +146 -83
- package/lib/util/compileBooleanMatcher.js +35 -7
- package/lib/util/conventions.js +126 -0
- package/lib/util/create-schema-validation.js +9 -2
- package/lib/util/createHash.js +49 -14
- package/lib/util/deprecation.js +48 -15
- package/lib/util/deterministicGrouping.js +71 -39
- package/lib/util/extractUrlAndGlobal.js +3 -0
- package/lib/util/findGraphRoots.js +7 -5
- package/lib/util/fs.js +419 -94
- package/lib/util/hash/BatchedHash.js +10 -4
- package/lib/util/hash/md4.js +20 -0
- package/lib/util/hash/wasm-hash.js +163 -0
- package/lib/util/hash/xxhash64.js +7 -141
- package/lib/util/identifier.js +140 -93
- package/lib/util/internalSerializables.js +22 -0
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +10 -10
- package/lib/util/mergeScope.js +76 -0
- package/lib/util/nonNumericOnlyHash.js +22 -0
- package/lib/util/numberHash.js +84 -34
- package/lib/util/objectToMap.js +0 -1
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/propertyAccess.js +7 -55
- package/lib/util/propertyName.js +77 -0
- package/lib/util/registerExternalSerializer.js +2 -2
- package/lib/util/runtime.js +188 -133
- package/lib/util/semver.js +64 -56
- package/lib/util/serialization.js +26 -1
- package/lib/util/smartGrouping.js +10 -10
- package/lib/util/source.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
- package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
- package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
- package/lib/wasm-sync/WebAssemblyParser.js +23 -9
- package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
- package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
- package/lib/web/FetchCompileWasmPlugin.js +59 -42
- package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
- package/lib/webpack.js +43 -12
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
- package/module.d.ts +233 -0
- package/package.json +85 -139
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +679 -47
- package/schemas/plugins/BannerPlugin.check.js +1 -1
- package/schemas/plugins/BannerPlugin.json +9 -1
- package/schemas/plugins/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +10 -1
- 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 +12 -1
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssParserOptions.json +3 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +5026 -1756
@@ -35,22 +35,43 @@ const {
|
|
35
35
|
intersectRuntime
|
36
36
|
} = require("./util/runtime");
|
37
37
|
|
38
|
+
const {
|
39
|
+
JAVASCRIPT_MODULE_TYPE_AUTO,
|
40
|
+
JAVASCRIPT_MODULE_TYPE_DYNAMIC,
|
41
|
+
JAVASCRIPT_MODULE_TYPE_ESM,
|
42
|
+
WEBPACK_MODULE_TYPE_RUNTIME
|
43
|
+
} = require("./ModuleTypeConstants");
|
44
|
+
|
45
|
+
/** @typedef {import("estree").CallExpression} CallExpression */
|
46
|
+
/** @typedef {import("estree").Expression} Expression */
|
47
|
+
/** @typedef {import("../declarations/WebpackOptions").OutputNormalized} OutputNormalized */
|
38
48
|
/** @typedef {import("./Chunk")} Chunk */
|
49
|
+
/** @typedef {import("./Chunk").ChunkId} ChunkId */
|
50
|
+
/** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
|
39
51
|
/** @typedef {import("./Compilation").AssetInfo} AssetInfo */
|
40
52
|
/** @typedef {import("./Compiler")} Compiler */
|
53
|
+
/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
|
41
54
|
/** @typedef {import("./Module")} Module */
|
55
|
+
/** @typedef {import("./Module").BuildInfo} BuildInfo */
|
42
56
|
/** @typedef {import("./RuntimeModule")} RuntimeModule */
|
57
|
+
/** @typedef {import("./javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
|
58
|
+
/** @typedef {import("./javascript/JavascriptParserHelpers").Range} Range */
|
43
59
|
/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
|
44
60
|
|
45
61
|
/**
|
46
|
-
* @typedef {
|
62
|
+
* @typedef {object} HMRJavascriptParserHooks
|
47
63
|
* @property {SyncBailHook<[TODO, string[]], void>} hotAcceptCallback
|
48
64
|
* @property {SyncBailHook<[TODO, string[]], void>} hotAcceptWithoutCallback
|
49
65
|
*/
|
50
66
|
|
67
|
+
/** @typedef {{ updatedChunkIds: Set<ChunkId>, removedChunkIds: Set<ChunkId>, removedModules: Set<Module>, filename: string, assetInfo: AssetInfo }} HotUpdateMainContentByRuntimeItem */
|
68
|
+
/** @typedef {Map<string, HotUpdateMainContentByRuntimeItem>} HotUpdateMainContentByRuntime */
|
69
|
+
|
51
70
|
/** @type {WeakMap<JavascriptParser, HMRJavascriptParserHooks>} */
|
52
71
|
const parserHooksMap = new WeakMap();
|
53
72
|
|
73
|
+
const PLUGIN_NAME = "HotModuleReplacementPlugin";
|
74
|
+
|
54
75
|
class HotModuleReplacementPlugin {
|
55
76
|
/**
|
56
77
|
* @param {JavascriptParser} parser the parser
|
@@ -73,6 +94,9 @@ class HotModuleReplacementPlugin {
|
|
73
94
|
return hooks;
|
74
95
|
}
|
75
96
|
|
97
|
+
/**
|
98
|
+
* @param {object=} options options
|
99
|
+
*/
|
76
100
|
constructor(options) {
|
77
101
|
this.options = options || {};
|
78
102
|
}
|
@@ -83,10 +107,16 @@ class HotModuleReplacementPlugin {
|
|
83
107
|
* @returns {void}
|
84
108
|
*/
|
85
109
|
apply(compiler) {
|
110
|
+
const { _backCompat: backCompat } = compiler;
|
86
111
|
if (compiler.options.output.strictModuleErrorHandling === undefined)
|
87
112
|
compiler.options.output.strictModuleErrorHandling = true;
|
88
113
|
const runtimeRequirements = [RuntimeGlobals.module];
|
89
114
|
|
115
|
+
/**
|
116
|
+
* @param {JavascriptParser} parser the parser
|
117
|
+
* @param {typeof ModuleHotAcceptDependency} ParamDependency dependency
|
118
|
+
* @returns {(expr: CallExpression) => boolean | undefined} callback
|
119
|
+
*/
|
90
120
|
const createAcceptHandler = (parser, ParamDependency) => {
|
91
121
|
const { hotAcceptCallback, hotAcceptWithoutCallback } =
|
92
122
|
HotModuleReplacementPlugin.getParserHooks(parser);
|
@@ -95,41 +125,53 @@ class HotModuleReplacementPlugin {
|
|
95
125
|
const module = parser.state.module;
|
96
126
|
const dep = new ConstDependency(
|
97
127
|
`${module.moduleArgument}.hot.accept`,
|
98
|
-
expr.callee.range,
|
128
|
+
/** @type {Range} */ (expr.callee.range),
|
99
129
|
runtimeRequirements
|
100
130
|
);
|
101
|
-
dep.loc = expr.loc;
|
131
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
102
132
|
module.addPresentationalDependency(dep);
|
103
|
-
|
133
|
+
/** @type {BuildInfo} */
|
134
|
+
(module.buildInfo).moduleConcatenationBailout =
|
135
|
+
"Hot Module Replacement";
|
104
136
|
if (expr.arguments.length >= 1) {
|
105
|
-
const arg = parser.evaluateExpression(
|
137
|
+
const arg = parser.evaluateExpression(
|
138
|
+
/** @type {Expression} */ (expr.arguments[0])
|
139
|
+
);
|
140
|
+
/** @type {BasicEvaluatedExpression[]} */
|
106
141
|
let params = [];
|
107
|
-
let requests = [];
|
108
142
|
if (arg.isString()) {
|
109
143
|
params = [arg];
|
110
144
|
} else if (arg.isArray()) {
|
111
|
-
params =
|
145
|
+
params =
|
146
|
+
/** @type {BasicEvaluatedExpression[]} */
|
147
|
+
(arg.items).filter(param => param.isString());
|
112
148
|
}
|
149
|
+
/** @type {string[]} */
|
150
|
+
const requests = [];
|
113
151
|
if (params.length > 0) {
|
114
|
-
params.
|
115
|
-
const request = param.string;
|
116
|
-
const dep = new ParamDependency(
|
152
|
+
for (const [idx, param] of params.entries()) {
|
153
|
+
const request = /** @type {string} */ (param.string);
|
154
|
+
const dep = new ParamDependency(
|
155
|
+
request,
|
156
|
+
/** @type {Range} */ (param.range)
|
157
|
+
);
|
117
158
|
dep.optional = true;
|
118
|
-
dep.loc = Object.create(
|
159
|
+
dep.loc = Object.create(
|
160
|
+
/** @type {DependencyLocation} */ (expr.loc)
|
161
|
+
);
|
119
162
|
dep.loc.index = idx;
|
120
163
|
module.addDependency(dep);
|
121
164
|
requests.push(request);
|
122
|
-
}
|
165
|
+
}
|
123
166
|
if (expr.arguments.length > 1) {
|
124
167
|
hotAcceptCallback.call(expr.arguments[1], requests);
|
125
168
|
for (let i = 1; i < expr.arguments.length; i++) {
|
126
169
|
parser.walkExpression(expr.arguments[i]);
|
127
170
|
}
|
128
171
|
return true;
|
129
|
-
} else {
|
130
|
-
hotAcceptWithoutCallback.call(expr, requests);
|
131
|
-
return true;
|
132
172
|
}
|
173
|
+
hotAcceptWithoutCallback.call(expr, requests);
|
174
|
+
return true;
|
133
175
|
}
|
134
176
|
}
|
135
177
|
parser.walkExpressions(expr.arguments);
|
@@ -137,116 +179,140 @@ class HotModuleReplacementPlugin {
|
|
137
179
|
};
|
138
180
|
};
|
139
181
|
|
182
|
+
/**
|
183
|
+
* @param {JavascriptParser} parser the parser
|
184
|
+
* @param {typeof ModuleHotDeclineDependency} ParamDependency dependency
|
185
|
+
* @returns {(expr: CallExpression) => boolean | undefined} callback
|
186
|
+
*/
|
140
187
|
const createDeclineHandler = (parser, ParamDependency) => expr => {
|
141
188
|
const module = parser.state.module;
|
142
189
|
const dep = new ConstDependency(
|
143
190
|
`${module.moduleArgument}.hot.decline`,
|
144
|
-
expr.callee.range,
|
191
|
+
/** @type {Range} */ (expr.callee.range),
|
145
192
|
runtimeRequirements
|
146
193
|
);
|
147
|
-
dep.loc = expr.loc;
|
194
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
148
195
|
module.addPresentationalDependency(dep);
|
149
|
-
|
196
|
+
/** @type {BuildInfo} */
|
197
|
+
(module.buildInfo).moduleConcatenationBailout = "Hot Module Replacement";
|
150
198
|
if (expr.arguments.length === 1) {
|
151
199
|
const arg = parser.evaluateExpression(expr.arguments[0]);
|
200
|
+
/** @type {BasicEvaluatedExpression[]} */
|
152
201
|
let params = [];
|
153
202
|
if (arg.isString()) {
|
154
203
|
params = [arg];
|
155
204
|
} else if (arg.isArray()) {
|
156
|
-
params =
|
205
|
+
params =
|
206
|
+
/** @type {BasicEvaluatedExpression[]} */
|
207
|
+
(arg.items).filter(param => param.isString());
|
157
208
|
}
|
158
|
-
params.
|
159
|
-
const dep = new ParamDependency(
|
209
|
+
for (const [idx, param] of params.entries()) {
|
210
|
+
const dep = new ParamDependency(
|
211
|
+
/** @type {string} */ (param.string),
|
212
|
+
/** @type {Range} */ (param.range)
|
213
|
+
);
|
160
214
|
dep.optional = true;
|
161
|
-
dep.loc = Object.create(expr.loc);
|
215
|
+
dep.loc = Object.create(/** @type {DependencyLocation} */ (expr.loc));
|
162
216
|
dep.loc.index = idx;
|
163
217
|
module.addDependency(dep);
|
164
|
-
}
|
218
|
+
}
|
165
219
|
}
|
166
220
|
return true;
|
167
221
|
};
|
168
222
|
|
223
|
+
/**
|
224
|
+
* @param {JavascriptParser} parser the parser
|
225
|
+
* @returns {(expr: Expression) => boolean | undefined} callback
|
226
|
+
*/
|
169
227
|
const createHMRExpressionHandler = parser => expr => {
|
170
228
|
const module = parser.state.module;
|
171
229
|
const dep = new ConstDependency(
|
172
230
|
`${module.moduleArgument}.hot`,
|
173
|
-
expr.range,
|
231
|
+
/** @type {Range} */ (expr.range),
|
174
232
|
runtimeRequirements
|
175
233
|
);
|
176
|
-
dep.loc = expr.loc;
|
234
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
177
235
|
module.addPresentationalDependency(dep);
|
178
|
-
|
236
|
+
/** @type {BuildInfo} */
|
237
|
+
(module.buildInfo).moduleConcatenationBailout = "Hot Module Replacement";
|
179
238
|
return true;
|
180
239
|
};
|
181
240
|
|
241
|
+
/**
|
242
|
+
* @param {JavascriptParser} parser the parser
|
243
|
+
* @returns {void}
|
244
|
+
*/
|
182
245
|
const applyModuleHot = parser => {
|
183
246
|
parser.hooks.evaluateIdentifier.for("module.hot").tap(
|
184
247
|
{
|
185
|
-
name:
|
248
|
+
name: PLUGIN_NAME,
|
186
249
|
before: "NodeStuffPlugin"
|
187
250
|
},
|
188
|
-
expr =>
|
189
|
-
|
251
|
+
expr =>
|
252
|
+
evaluateToIdentifier(
|
190
253
|
"module.hot",
|
191
254
|
"module",
|
192
255
|
() => ["hot"],
|
193
256
|
true
|
194
|
-
)(expr)
|
195
|
-
}
|
257
|
+
)(expr)
|
196
258
|
);
|
197
259
|
parser.hooks.call
|
198
260
|
.for("module.hot.accept")
|
199
261
|
.tap(
|
200
|
-
|
262
|
+
PLUGIN_NAME,
|
201
263
|
createAcceptHandler(parser, ModuleHotAcceptDependency)
|
202
264
|
);
|
203
265
|
parser.hooks.call
|
204
266
|
.for("module.hot.decline")
|
205
267
|
.tap(
|
206
|
-
|
268
|
+
PLUGIN_NAME,
|
207
269
|
createDeclineHandler(parser, ModuleHotDeclineDependency)
|
208
270
|
);
|
209
271
|
parser.hooks.expression
|
210
272
|
.for("module.hot")
|
211
|
-
.tap(
|
273
|
+
.tap(PLUGIN_NAME, createHMRExpressionHandler(parser));
|
212
274
|
};
|
213
275
|
|
276
|
+
/**
|
277
|
+
* @param {JavascriptParser} parser the parser
|
278
|
+
* @returns {void}
|
279
|
+
*/
|
214
280
|
const applyImportMetaHot = parser => {
|
215
281
|
parser.hooks.evaluateIdentifier
|
216
282
|
.for("import.meta.webpackHot")
|
217
|
-
.tap(
|
218
|
-
|
283
|
+
.tap(PLUGIN_NAME, expr =>
|
284
|
+
evaluateToIdentifier(
|
219
285
|
"import.meta.webpackHot",
|
220
286
|
"import.meta",
|
221
287
|
() => ["webpackHot"],
|
222
288
|
true
|
223
|
-
)(expr)
|
224
|
-
|
289
|
+
)(expr)
|
290
|
+
);
|
225
291
|
parser.hooks.call
|
226
292
|
.for("import.meta.webpackHot.accept")
|
227
293
|
.tap(
|
228
|
-
|
294
|
+
PLUGIN_NAME,
|
229
295
|
createAcceptHandler(parser, ImportMetaHotAcceptDependency)
|
230
296
|
);
|
231
297
|
parser.hooks.call
|
232
298
|
.for("import.meta.webpackHot.decline")
|
233
299
|
.tap(
|
234
|
-
|
300
|
+
PLUGIN_NAME,
|
235
301
|
createDeclineHandler(parser, ImportMetaHotDeclineDependency)
|
236
302
|
);
|
237
303
|
parser.hooks.expression
|
238
304
|
.for("import.meta.webpackHot")
|
239
|
-
.tap(
|
305
|
+
.tap(PLUGIN_NAME, createHMRExpressionHandler(parser));
|
240
306
|
};
|
241
307
|
|
242
308
|
compiler.hooks.compilation.tap(
|
243
|
-
|
309
|
+
PLUGIN_NAME,
|
244
310
|
(compilation, { normalModuleFactory }) => {
|
245
311
|
// This applies the HMR plugin only to the targeted compiler
|
246
312
|
// It should not affect child compilations
|
247
313
|
if (compilation.compiler !== compiler) return;
|
248
314
|
|
249
|
-
|
315
|
+
// #region module.hot.* API
|
250
316
|
compilation.dependencyFactories.set(
|
251
317
|
ModuleHotAcceptDependency,
|
252
318
|
normalModuleFactory
|
@@ -263,9 +329,9 @@ class HotModuleReplacementPlugin {
|
|
263
329
|
ModuleHotDeclineDependency,
|
264
330
|
new ModuleHotDeclineDependency.Template()
|
265
331
|
);
|
266
|
-
|
332
|
+
// #endregion
|
267
333
|
|
268
|
-
|
334
|
+
// #region import.meta.webpackHot.* API
|
269
335
|
compilation.dependencyFactories.set(
|
270
336
|
ImportMetaHotAcceptDependency,
|
271
337
|
normalModuleFactory
|
@@ -282,49 +348,54 @@ class HotModuleReplacementPlugin {
|
|
282
348
|
ImportMetaHotDeclineDependency,
|
283
349
|
new ImportMetaHotDeclineDependency.Template()
|
284
350
|
);
|
285
|
-
|
351
|
+
// #endregion
|
286
352
|
|
287
353
|
let hotIndex = 0;
|
354
|
+
/** @type {Record<string, string>} */
|
288
355
|
const fullHashChunkModuleHashes = {};
|
356
|
+
/** @type {Record<string, string>} */
|
289
357
|
const chunkModuleHashes = {};
|
290
358
|
|
291
|
-
compilation.hooks.record.tap(
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
359
|
+
compilation.hooks.record.tap(PLUGIN_NAME, (compilation, records) => {
|
360
|
+
if (records.hash === compilation.hash) return;
|
361
|
+
const chunkGraph = compilation.chunkGraph;
|
362
|
+
records.hash = compilation.hash;
|
363
|
+
records.hotIndex = hotIndex;
|
364
|
+
records.fullHashChunkModuleHashes = fullHashChunkModuleHashes;
|
365
|
+
records.chunkModuleHashes = chunkModuleHashes;
|
366
|
+
records.chunkHashes = {};
|
367
|
+
records.chunkRuntime = {};
|
368
|
+
for (const chunk of compilation.chunks) {
|
369
|
+
const chunkId = /** @type {ChunkId} */ (chunk.id);
|
370
|
+
records.chunkHashes[chunkId] = chunk.hash;
|
371
|
+
records.chunkRuntime[chunkId] = getRuntimeKey(chunk.runtime);
|
372
|
+
}
|
373
|
+
records.chunkModuleIds = {};
|
374
|
+
for (const chunk of compilation.chunks) {
|
375
|
+
records.chunkModuleIds[/** @type {ChunkId} */ (chunk.id)] =
|
376
|
+
Array.from(
|
309
377
|
chunkGraph.getOrderedChunkModulesIterable(
|
310
378
|
chunk,
|
311
379
|
compareModulesById(chunkGraph)
|
312
380
|
),
|
313
381
|
m => chunkGraph.getModuleId(m)
|
314
382
|
);
|
315
|
-
}
|
316
383
|
}
|
317
|
-
);
|
384
|
+
});
|
318
385
|
/** @type {TupleSet<[Module, Chunk]>} */
|
319
386
|
const updatedModules = new TupleSet();
|
320
387
|
/** @type {TupleSet<[Module, Chunk]>} */
|
321
388
|
const fullHashModules = new TupleSet();
|
322
389
|
/** @type {TupleSet<[Module, RuntimeSpec]>} */
|
323
390
|
const nonCodeGeneratedModules = new TupleSet();
|
324
|
-
compilation.hooks.fullHash.tap(
|
391
|
+
compilation.hooks.fullHash.tap(PLUGIN_NAME, hash => {
|
325
392
|
const chunkGraph = compilation.chunkGraph;
|
326
393
|
const records = compilation.records;
|
327
394
|
for (const chunk of compilation.chunks) {
|
395
|
+
/**
|
396
|
+
* @param {Module} module module
|
397
|
+
* @returns {string} module hash
|
398
|
+
*/
|
328
399
|
const getModuleHash = module => {
|
329
400
|
if (
|
330
401
|
compilation.codeGenerationResults.has(module, chunk.runtime)
|
@@ -333,10 +404,9 @@ class HotModuleReplacementPlugin {
|
|
333
404
|
module,
|
334
405
|
chunk.runtime
|
335
406
|
);
|
336
|
-
} else {
|
337
|
-
nonCodeGeneratedModules.add(module, chunk.runtime);
|
338
|
-
return chunkGraph.getModuleHash(module, chunk.runtime);
|
339
407
|
}
|
408
|
+
nonCodeGeneratedModules.add(module, chunk.runtime);
|
409
|
+
return chunkGraph.getModuleHash(module, chunk.runtime);
|
340
410
|
};
|
341
411
|
const fullHashModulesInThisChunk =
|
342
412
|
chunkGraph.getChunkFullHashModulesSet(chunk);
|
@@ -378,28 +448,26 @@ class HotModuleReplacementPlugin {
|
|
378
448
|
chunkModuleHashes[key] = hash;
|
379
449
|
}
|
380
450
|
}
|
381
|
-
} else {
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
} else {
|
393
|
-
chunkModuleHashes[key] = hash;
|
394
|
-
}
|
395
|
-
}
|
396
|
-
} else {
|
397
|
-
for (const module of modules) {
|
398
|
-
const key = `${chunk.id}|${module.identifier()}`;
|
399
|
-
const hash = getModuleHash(module);
|
451
|
+
} else if (fullHashModulesInThisChunk !== undefined) {
|
452
|
+
for (const module of modules) {
|
453
|
+
const key = `${chunk.id}|${module.identifier()}`;
|
454
|
+
const hash = getModuleHash(module);
|
455
|
+
if (
|
456
|
+
fullHashModulesInThisChunk.has(
|
457
|
+
/** @type {RuntimeModule} */ (module)
|
458
|
+
)
|
459
|
+
) {
|
460
|
+
fullHashChunkModuleHashes[key] = hash;
|
461
|
+
} else {
|
400
462
|
chunkModuleHashes[key] = hash;
|
401
463
|
}
|
402
464
|
}
|
465
|
+
} else {
|
466
|
+
for (const module of modules) {
|
467
|
+
const key = `${chunk.id}|${module.identifier()}`;
|
468
|
+
const hash = getModuleHash(module);
|
469
|
+
chunkModuleHashes[key] = hash;
|
470
|
+
}
|
403
471
|
}
|
404
472
|
}
|
405
473
|
}
|
@@ -411,7 +479,7 @@ class HotModuleReplacementPlugin {
|
|
411
479
|
});
|
412
480
|
compilation.hooks.processAssets.tap(
|
413
481
|
{
|
414
|
-
name:
|
482
|
+
name: PLUGIN_NAME,
|
415
483
|
stage: Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL
|
416
484
|
},
|
417
485
|
() => {
|
@@ -432,14 +500,14 @@ class HotModuleReplacementPlugin {
|
|
432
500
|
: compilation.codeGenerationResults.getHash(
|
433
501
|
module,
|
434
502
|
chunk.runtime
|
435
|
-
|
503
|
+
);
|
436
504
|
if (records.chunkModuleHashes[key] !== hash) {
|
437
505
|
updatedModules.add(module, chunk);
|
438
506
|
}
|
439
507
|
chunkModuleHashes[key] = hash;
|
440
508
|
}
|
441
509
|
|
442
|
-
/** @type {
|
510
|
+
/** @type {HotUpdateMainContentByRuntime} */
|
443
511
|
const hotUpdateMainContentByRuntime = new Map();
|
444
512
|
let allOldRuntime;
|
445
513
|
for (const key of Object.keys(records.chunkRuntime)) {
|
@@ -449,19 +517,23 @@ class HotModuleReplacementPlugin {
|
|
449
517
|
forEachRuntime(allOldRuntime, runtime => {
|
450
518
|
const { path: filename, info: assetInfo } =
|
451
519
|
compilation.getPathWithInfo(
|
452
|
-
|
520
|
+
/** @type {NonNullable<OutputNormalized["hotUpdateMainFilename"]>} */
|
521
|
+
(compilation.outputOptions.hotUpdateMainFilename),
|
453
522
|
{
|
454
523
|
hash: records.hash,
|
455
524
|
runtime
|
456
525
|
}
|
457
526
|
);
|
458
|
-
hotUpdateMainContentByRuntime.set(
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
527
|
+
hotUpdateMainContentByRuntime.set(
|
528
|
+
/** @type {string} */ (runtime),
|
529
|
+
{
|
530
|
+
updatedChunkIds: new Set(),
|
531
|
+
removedChunkIds: new Set(),
|
532
|
+
removedModules: new Set(),
|
533
|
+
filename,
|
534
|
+
assetInfo
|
535
|
+
}
|
536
|
+
);
|
465
537
|
});
|
466
538
|
if (hotUpdateMainContentByRuntime.size === 0) return;
|
467
539
|
|
@@ -469,7 +541,9 @@ class HotModuleReplacementPlugin {
|
|
469
541
|
/** @type {Map<number|string, Module>} */
|
470
542
|
const allModules = new Map();
|
471
543
|
for (const module of compilation.modules) {
|
472
|
-
const id =
|
544
|
+
const id =
|
545
|
+
/** @type {ModuleId} */
|
546
|
+
(chunkGraph.getModuleId(module));
|
473
547
|
allModules.set(id, module);
|
474
548
|
}
|
475
549
|
|
@@ -491,6 +565,7 @@ class HotModuleReplacementPlugin {
|
|
491
565
|
}
|
492
566
|
}
|
493
567
|
|
568
|
+
/** @type {ChunkId | null} */
|
494
569
|
let chunkId;
|
495
570
|
let newModules;
|
496
571
|
let newRuntimeModules;
|
@@ -532,16 +607,21 @@ class HotModuleReplacementPlugin {
|
|
532
607
|
removedFromRuntime = subtractRuntime(oldRuntime, newRuntime);
|
533
608
|
} else {
|
534
609
|
// chunk has completely removed
|
535
|
-
chunkId = `${
|
610
|
+
chunkId = `${Number(key)}` === key ? Number(key) : key;
|
536
611
|
removedFromRuntime = oldRuntime;
|
537
612
|
newRuntime = oldRuntime;
|
538
613
|
}
|
539
614
|
if (removedFromRuntime) {
|
540
615
|
// chunk was removed from some runtimes
|
541
616
|
forEachRuntime(removedFromRuntime, runtime => {
|
542
|
-
|
543
|
-
|
544
|
-
|
617
|
+
const item =
|
618
|
+
/** @type {HotUpdateMainContentByRuntimeItem} */
|
619
|
+
(
|
620
|
+
hotUpdateMainContentByRuntime.get(
|
621
|
+
/** @type {string} */ (runtime)
|
622
|
+
)
|
623
|
+
);
|
624
|
+
item.removedChunkIds.add(/** @type {ChunkId} */ (chunkId));
|
545
625
|
});
|
546
626
|
// dispose modules from the chunk in these runtimes
|
547
627
|
// where they are no longer in this runtime
|
@@ -556,9 +636,9 @@ class HotModuleReplacementPlugin {
|
|
556
636
|
: compilation.codeGenerationResults.getHash(
|
557
637
|
module,
|
558
638
|
newRuntime
|
559
|
-
|
639
|
+
);
|
560
640
|
if (hash !== oldHash) {
|
561
|
-
if (module.type ===
|
641
|
+
if (module.type === WEBPACK_MODULE_TYPE_RUNTIME) {
|
562
642
|
newRuntimeModules = newRuntimeModules || [];
|
563
643
|
newRuntimeModules.push(
|
564
644
|
/** @type {RuntimeModule} */ (module)
|
@@ -581,13 +661,19 @@ class HotModuleReplacementPlugin {
|
|
581
661
|
for (const moduleRuntime of runtimes) {
|
582
662
|
if (typeof moduleRuntime === "string") {
|
583
663
|
if (moduleRuntime === runtime) return;
|
584
|
-
} else if (
|
585
|
-
|
586
|
-
|
664
|
+
} else if (
|
665
|
+
moduleRuntime !== undefined &&
|
666
|
+
moduleRuntime.has(/** @type {string} */ (runtime))
|
667
|
+
)
|
668
|
+
return;
|
587
669
|
}
|
588
|
-
|
589
|
-
|
590
|
-
|
670
|
+
const item =
|
671
|
+
/** @type {HotUpdateMainContentByRuntimeItem} */ (
|
672
|
+
hotUpdateMainContentByRuntime.get(
|
673
|
+
/** @type {string} */ (runtime)
|
674
|
+
)
|
675
|
+
);
|
676
|
+
item.removedModules.add(module);
|
591
677
|
});
|
592
678
|
}
|
593
679
|
}
|
@@ -597,7 +683,8 @@ class HotModuleReplacementPlugin {
|
|
597
683
|
(newRuntimeModules && newRuntimeModules.length > 0)
|
598
684
|
) {
|
599
685
|
const hotUpdateChunk = new HotUpdateChunk();
|
600
|
-
|
686
|
+
if (backCompat)
|
687
|
+
ChunkGraph.setChunkGraphForChunk(hotUpdateChunk, chunkGraph);
|
601
688
|
hotUpdateChunk.id = chunkId;
|
602
689
|
hotUpdateChunk.runtime = newRuntime;
|
603
690
|
if (currentChunk) {
|
@@ -660,9 +747,13 @@ class HotModuleReplacementPlugin {
|
|
660
747
|
}
|
661
748
|
}
|
662
749
|
forEachRuntime(newRuntime, runtime => {
|
663
|
-
|
664
|
-
|
665
|
-
|
750
|
+
const item =
|
751
|
+
/** @type {HotUpdateMainContentByRuntimeItem} */ (
|
752
|
+
hotUpdateMainContentByRuntime.get(
|
753
|
+
/** @type {string} */ (runtime)
|
754
|
+
)
|
755
|
+
);
|
756
|
+
item.updatedChunkIds.add(/** @type {ChunkId} */ (chunkId));
|
666
757
|
});
|
667
758
|
}
|
668
759
|
}
|
@@ -716,10 +807,12 @@ To fix this, make sure to include [runtime] in the output.hotUpdateMainFilename
|
|
716
807
|
removedModules.size === 0
|
717
808
|
? completelyRemovedModulesArray
|
718
809
|
: completelyRemovedModulesArray.concat(
|
719
|
-
Array.from(
|
720
|
-
|
810
|
+
Array.from(
|
811
|
+
removedModules,
|
812
|
+
m =>
|
813
|
+
/** @type {ModuleId} */ (chunkGraph.getModuleId(m))
|
721
814
|
)
|
722
|
-
|
815
|
+
)
|
723
816
|
};
|
724
817
|
|
725
818
|
const source = new RawSource(JSON.stringify(hotUpdateMainJson));
|
@@ -732,7 +825,7 @@ To fix this, make sure to include [runtime] in the output.hotUpdateMainFilename
|
|
732
825
|
);
|
733
826
|
|
734
827
|
compilation.hooks.additionalTreeRuntimeRequirements.tap(
|
735
|
-
|
828
|
+
PLUGIN_NAME,
|
736
829
|
(chunk, runtimeRequirements) => {
|
737
830
|
runtimeRequirements.add(RuntimeGlobals.hmrDownloadManifest);
|
738
831
|
runtimeRequirements.add(RuntimeGlobals.hmrDownloadUpdateHandlers);
|
@@ -746,24 +839,24 @@ To fix this, make sure to include [runtime] in the output.hotUpdateMainFilename
|
|
746
839
|
);
|
747
840
|
|
748
841
|
normalModuleFactory.hooks.parser
|
749
|
-
.for(
|
750
|
-
.tap(
|
842
|
+
.for(JAVASCRIPT_MODULE_TYPE_AUTO)
|
843
|
+
.tap(PLUGIN_NAME, parser => {
|
751
844
|
applyModuleHot(parser);
|
752
845
|
applyImportMetaHot(parser);
|
753
846
|
});
|
754
847
|
normalModuleFactory.hooks.parser
|
755
|
-
.for(
|
756
|
-
.tap(
|
848
|
+
.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
|
849
|
+
.tap(PLUGIN_NAME, parser => {
|
757
850
|
applyModuleHot(parser);
|
758
851
|
});
|
759
852
|
normalModuleFactory.hooks.parser
|
760
|
-
.for(
|
761
|
-
.tap(
|
853
|
+
.for(JAVASCRIPT_MODULE_TYPE_ESM)
|
854
|
+
.tap(PLUGIN_NAME, parser => {
|
762
855
|
applyImportMetaHot(parser);
|
763
856
|
});
|
764
857
|
|
765
858
|
NormalModule.getCompilationHooks(compilation).loader.tap(
|
766
|
-
|
859
|
+
PLUGIN_NAME,
|
767
860
|
context => {
|
768
861
|
context.hot = true;
|
769
862
|
}
|