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
@@ -10,6 +10,9 @@ const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
|
|
10
10
|
const Dependency = require("../Dependency");
|
11
11
|
const Module = require("../Module");
|
12
12
|
const ModuleFactory = require("../ModuleFactory");
|
13
|
+
const {
|
14
|
+
WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY
|
15
|
+
} = require("../ModuleTypeConstants");
|
13
16
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
14
17
|
const Template = require("../Template");
|
15
18
|
const CommonJsRequireDependency = require("../dependencies/CommonJsRequireDependency");
|
@@ -24,15 +27,25 @@ const { registerNotSerializable } = require("../util/serialization");
|
|
24
27
|
/** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
|
25
28
|
/** @typedef {import("../Module").LibIdentOptions} LibIdentOptions */
|
26
29
|
/** @typedef {import("../Module").NeedBuildContext} NeedBuildContext */
|
30
|
+
/** @typedef {import("../Module").SourceTypes} SourceTypes */
|
27
31
|
/** @typedef {import("../ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
|
28
32
|
/** @typedef {import("../ModuleFactory").ModuleFactoryResult} ModuleFactoryResult */
|
29
33
|
/** @typedef {import("../RequestShortener")} RequestShortener */
|
30
34
|
/** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
|
31
35
|
/** @typedef {import("../WebpackError")} WebpackError */
|
36
|
+
/** @typedef {import("../dependencies/HarmonyImportDependency")} HarmonyImportDependency */
|
32
37
|
/** @typedef {import("../util/Hash")} Hash */
|
33
38
|
/** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
|
34
39
|
|
35
|
-
|
40
|
+
/** @typedef {{ client: string, data: string, active: boolean }} ModuleResult */
|
41
|
+
|
42
|
+
/**
|
43
|
+
* @typedef {object} BackendApi
|
44
|
+
* @property {function(function((Error | null)=) : void): void} dispose
|
45
|
+
* @property {function(Module): ModuleResult} module
|
46
|
+
*/
|
47
|
+
|
48
|
+
const HMR_DEPENDENCY_TYPES = new Set([
|
36
49
|
"import.meta.webpackHot.accept",
|
37
50
|
"import.meta.webpackHot.decline",
|
38
51
|
"module.hot.accept",
|
@@ -42,7 +55,7 @@ const IGNORED_DEPENDENCY_TYPES = new Set([
|
|
42
55
|
/**
|
43
56
|
* @param {undefined|string|RegExp|Function} test test option
|
44
57
|
* @param {Module} module the module
|
45
|
-
* @returns {boolean} true, if the module should be selected
|
58
|
+
* @returns {boolean | null | string} true, if the module should be selected
|
46
59
|
*/
|
47
60
|
const checkTest = (test, module) => {
|
48
61
|
if (test === undefined) return true;
|
@@ -63,6 +76,9 @@ const checkTest = (test, module) => {
|
|
63
76
|
const TYPES = new Set(["javascript"]);
|
64
77
|
|
65
78
|
class LazyCompilationDependency extends Dependency {
|
79
|
+
/**
|
80
|
+
* @param {LazyCompilationProxyModule} proxyModule proxy module
|
81
|
+
*/
|
66
82
|
constructor(proxyModule) {
|
67
83
|
super();
|
68
84
|
this.proxyModule = proxyModule;
|
@@ -87,8 +103,20 @@ class LazyCompilationDependency extends Dependency {
|
|
87
103
|
registerNotSerializable(LazyCompilationDependency);
|
88
104
|
|
89
105
|
class LazyCompilationProxyModule extends Module {
|
106
|
+
/**
|
107
|
+
* @param {string} context context
|
108
|
+
* @param {Module} originalModule an original module
|
109
|
+
* @param {string} request request
|
110
|
+
* @param {ModuleResult["client"]} client client
|
111
|
+
* @param {ModuleResult["data"]} data data
|
112
|
+
* @param {ModuleResult["active"]} active true when active, otherwise false
|
113
|
+
*/
|
90
114
|
constructor(context, originalModule, request, client, data, active) {
|
91
|
-
super(
|
115
|
+
super(
|
116
|
+
WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY,
|
117
|
+
context,
|
118
|
+
originalModule.layer
|
119
|
+
);
|
92
120
|
this.originalModule = originalModule;
|
93
121
|
this.request = request;
|
94
122
|
this.client = client;
|
@@ -100,7 +128,7 @@ class LazyCompilationProxyModule extends Module {
|
|
100
128
|
* @returns {string} a unique identifier of the module
|
101
129
|
*/
|
102
130
|
identifier() {
|
103
|
-
return
|
131
|
+
return `${WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY}|${this.originalModule.identifier()}`;
|
104
132
|
}
|
105
133
|
|
106
134
|
/**
|
@@ -108,7 +136,7 @@ class LazyCompilationProxyModule extends Module {
|
|
108
136
|
* @returns {string} a user readable identifier of the module
|
109
137
|
*/
|
110
138
|
readableIdentifier(requestShortener) {
|
111
|
-
return
|
139
|
+
return `${WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY} ${this.originalModule.readableIdentifier(
|
112
140
|
requestShortener
|
113
141
|
)}`;
|
114
142
|
}
|
@@ -135,12 +163,14 @@ class LazyCompilationProxyModule extends Module {
|
|
135
163
|
* @returns {string | null} an identifier for library inclusion
|
136
164
|
*/
|
137
165
|
libIdent(options) {
|
138
|
-
return `${this.originalModule.libIdent(
|
166
|
+
return `${this.originalModule.libIdent(
|
167
|
+
options
|
168
|
+
)}!${WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY}`;
|
139
169
|
}
|
140
170
|
|
141
171
|
/**
|
142
172
|
* @param {NeedBuildContext} context context info
|
143
|
-
* @param {function(WebpackError=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
|
173
|
+
* @param {function((WebpackError | null)=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
|
144
174
|
* @returns {void}
|
145
175
|
*/
|
146
176
|
needBuild(context, callback) {
|
@@ -174,7 +204,7 @@ class LazyCompilationProxyModule extends Module {
|
|
174
204
|
}
|
175
205
|
|
176
206
|
/**
|
177
|
-
* @returns {
|
207
|
+
* @returns {SourceTypes} types available (do not mutate)
|
178
208
|
*/
|
179
209
|
getSourceTypes() {
|
180
210
|
return TYPES;
|
@@ -212,13 +242,13 @@ class LazyCompilationProxyModule extends Module {
|
|
212
242
|
]);
|
213
243
|
const keepActive = Template.asString([
|
214
244
|
`var dispose = client.keepAlive({ data: data, active: ${JSON.stringify(
|
215
|
-
|
245
|
+
Boolean(block)
|
216
246
|
)}, module: module, onError: onError });`
|
217
247
|
]);
|
218
248
|
let source;
|
219
249
|
if (block) {
|
220
250
|
const dep = block.dependencies[0];
|
221
|
-
const module = moduleGraph.getModule(dep);
|
251
|
+
const module = /** @type {Module} */ (moduleGraph.getModule(dep));
|
222
252
|
source = Template.asString([
|
223
253
|
client,
|
224
254
|
`module.exports = ${runtimeTemplate.moduleNamespacePromise({
|
@@ -247,7 +277,7 @@ class LazyCompilationProxyModule extends Module {
|
|
247
277
|
source = Template.asString([
|
248
278
|
client,
|
249
279
|
"var resolveSelf, onError;",
|
250
|
-
|
280
|
+
"module.exports = new Promise(function(resolve, reject) { resolveSelf = resolve; onError = reject; });",
|
251
281
|
"if (module.hot) {",
|
252
282
|
Template.indent([
|
253
283
|
"module.hot.accept();",
|
@@ -280,14 +310,13 @@ class LazyCompilationProxyModule extends Module {
|
|
280
310
|
registerNotSerializable(LazyCompilationProxyModule);
|
281
311
|
|
282
312
|
class LazyCompilationDependencyFactory extends ModuleFactory {
|
283
|
-
constructor(
|
313
|
+
constructor() {
|
284
314
|
super();
|
285
|
-
this._factory = factory;
|
286
315
|
}
|
287
316
|
|
288
317
|
/**
|
289
318
|
* @param {ModuleFactoryCreateData} data data object
|
290
|
-
* @param {function(Error=, ModuleFactoryResult=): void} callback callback
|
319
|
+
* @param {function((Error | null)=, ModuleFactoryResult=): void} callback callback
|
291
320
|
* @returns {void}
|
292
321
|
*/
|
293
322
|
create(data, callback) {
|
@@ -302,34 +331,34 @@ class LazyCompilationDependencyFactory extends ModuleFactory {
|
|
302
331
|
|
303
332
|
class LazyCompilationPlugin {
|
304
333
|
/**
|
305
|
-
* @param {
|
306
|
-
* @param {(function(Compiler,
|
307
|
-
* @param {string} options.client the client reference
|
334
|
+
* @param {object} options options
|
335
|
+
* @param {(function(Compiler, function(Error=, BackendApi?): void): void) | function(Compiler): Promise<BackendApi>} options.backend the backend
|
308
336
|
* @param {boolean} options.entries true, when entries are lazy compiled
|
309
337
|
* @param {boolean} options.imports true, when import() modules are lazy compiled
|
310
|
-
* @param {RegExp | string | (function(Module): boolean)} options.test additional filter for lazy compiled entrypoint modules
|
338
|
+
* @param {RegExp | string | (function(Module): boolean) | undefined} options.test additional filter for lazy compiled entrypoint modules
|
311
339
|
*/
|
312
|
-
constructor({ backend,
|
340
|
+
constructor({ backend, entries, imports, test }) {
|
313
341
|
this.backend = backend;
|
314
|
-
this.client = client;
|
315
342
|
this.entries = entries;
|
316
343
|
this.imports = imports;
|
317
344
|
this.test = test;
|
318
345
|
}
|
346
|
+
|
319
347
|
/**
|
320
348
|
* Apply the plugin
|
321
349
|
* @param {Compiler} compiler the compiler instance
|
322
350
|
* @returns {void}
|
323
351
|
*/
|
324
352
|
apply(compiler) {
|
353
|
+
/** @type {BackendApi} */
|
325
354
|
let backend;
|
326
355
|
compiler.hooks.beforeCompile.tapAsync(
|
327
356
|
"LazyCompilationPlugin",
|
328
357
|
(params, callback) => {
|
329
358
|
if (backend !== undefined) return callback();
|
330
|
-
const promise = this.backend(compiler,
|
359
|
+
const promise = this.backend(compiler, (err, result) => {
|
331
360
|
if (err) return callback(err);
|
332
|
-
backend = result;
|
361
|
+
backend = /** @type {BackendApi} */ (result);
|
333
362
|
callback();
|
334
363
|
});
|
335
364
|
if (promise && promise.then) {
|
@@ -347,32 +376,56 @@ class LazyCompilationPlugin {
|
|
347
376
|
"LazyCompilationPlugin",
|
348
377
|
(originalModule, createData, resolveData) => {
|
349
378
|
if (
|
350
|
-
resolveData.dependencies.every(
|
379
|
+
resolveData.dependencies.every(dep =>
|
380
|
+
HMR_DEPENDENCY_TYPES.has(dep.type)
|
381
|
+
)
|
382
|
+
) {
|
383
|
+
// for HMR only resolving, try to determine if the HMR accept/decline refers to
|
384
|
+
// an import() or not
|
385
|
+
const hmrDep = resolveData.dependencies[0];
|
386
|
+
const originModule =
|
387
|
+
/** @type {Module} */
|
388
|
+
(compilation.moduleGraph.getParentModule(hmrDep));
|
389
|
+
const isReferringToDynamicImport = originModule.blocks.some(
|
390
|
+
block =>
|
391
|
+
block.dependencies.some(
|
392
|
+
dep =>
|
393
|
+
dep.type === "import()" &&
|
394
|
+
/** @type {HarmonyImportDependency} */ (dep).request ===
|
395
|
+
hmrDep.request
|
396
|
+
)
|
397
|
+
);
|
398
|
+
if (!isReferringToDynamicImport) return;
|
399
|
+
} else if (
|
400
|
+
!resolveData.dependencies.every(
|
351
401
|
dep =>
|
352
|
-
|
402
|
+
HMR_DEPENDENCY_TYPES.has(dep.type) ||
|
353
403
|
(this.imports &&
|
354
404
|
(dep.type === "import()" ||
|
355
405
|
dep.type === "import() context element")) ||
|
356
406
|
(this.entries && dep.type === "entry")
|
357
|
-
)
|
358
|
-
|
407
|
+
)
|
408
|
+
)
|
409
|
+
return;
|
410
|
+
if (
|
411
|
+
/webpack[/\\]hot[/\\]|webpack-dev-server[/\\]client|webpack-hot-middleware[/\\]client/.test(
|
359
412
|
resolveData.request
|
360
|
-
)
|
361
|
-
checkTest(this.test, originalModule)
|
362
|
-
)
|
363
|
-
|
364
|
-
|
365
|
-
|
413
|
+
) ||
|
414
|
+
!checkTest(this.test, originalModule)
|
415
|
+
)
|
416
|
+
return;
|
417
|
+
const moduleInfo = backend.module(originalModule);
|
418
|
+
if (!moduleInfo) return;
|
419
|
+
const { client, data, active } = moduleInfo;
|
366
420
|
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
}
|
421
|
+
return new LazyCompilationProxyModule(
|
422
|
+
compiler.context,
|
423
|
+
originalModule,
|
424
|
+
resolveData.request,
|
425
|
+
client,
|
426
|
+
data,
|
427
|
+
active
|
428
|
+
);
|
376
429
|
}
|
377
430
|
);
|
378
431
|
compilation.dependencyFactories.set(
|
@@ -5,22 +5,66 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
/** @typedef {import("http").IncomingMessage} IncomingMessage */
|
9
|
+
/** @typedef {import("http").RequestListener} RequestListener */
|
10
|
+
/** @typedef {import("http").ServerOptions} HttpServerOptions */
|
11
|
+
/** @typedef {import("http").ServerResponse} ServerResponse */
|
12
|
+
/** @typedef {import("https").ServerOptions} HttpsServerOptions */
|
13
|
+
/** @typedef {import("net").AddressInfo} AddressInfo */
|
14
|
+
/** @typedef {import("net").Server} Server */
|
15
|
+
/** @typedef {import("../../declarations/WebpackOptions").LazyCompilationDefaultBackendOptions} LazyCompilationDefaultBackendOptions */
|
10
16
|
/** @typedef {import("../Compiler")} Compiler */
|
17
|
+
/** @typedef {import("../Module")} Module */
|
18
|
+
/** @typedef {import("./LazyCompilationPlugin").BackendApi} BackendApi */
|
11
19
|
|
12
20
|
/**
|
21
|
+
* @callback BackendHandler
|
13
22
|
* @param {Compiler} compiler compiler
|
14
|
-
* @param {
|
15
|
-
* @param {function(Error?, any?): void} callback callback
|
23
|
+
* @param {function(Error | null, BackendApi=): void} callback callback
|
16
24
|
* @returns {void}
|
17
25
|
*/
|
18
|
-
|
26
|
+
|
27
|
+
/**
|
28
|
+
* @param {Omit<LazyCompilationDefaultBackendOptions, "client"> & { client: NonNullable<LazyCompilationDefaultBackendOptions["client"]>}} options additional options for the backend
|
29
|
+
* @returns {BackendHandler} backend
|
30
|
+
*/
|
31
|
+
module.exports = options => (compiler, callback) => {
|
19
32
|
const logger = compiler.getInfrastructureLogger("LazyCompilationBackend");
|
20
33
|
const activeModules = new Map();
|
21
34
|
const prefix = "/lazy-compilation-using-";
|
22
35
|
|
36
|
+
const isHttps =
|
37
|
+
options.protocol === "https" ||
|
38
|
+
(typeof options.server === "object" &&
|
39
|
+
("key" in options.server || "pfx" in options.server));
|
40
|
+
|
41
|
+
const createServer =
|
42
|
+
typeof options.server === "function"
|
43
|
+
? options.server
|
44
|
+
: (() => {
|
45
|
+
const http = isHttps ? require("https") : require("http");
|
46
|
+
return http.createServer.bind(
|
47
|
+
http,
|
48
|
+
/** @type {HttpServerOptions | HttpsServerOptions} */
|
49
|
+
(options.server)
|
50
|
+
);
|
51
|
+
})();
|
52
|
+
/** @type {function(Server): void} */
|
53
|
+
const listen =
|
54
|
+
typeof options.listen === "function"
|
55
|
+
? options.listen
|
56
|
+
: server => {
|
57
|
+
let listen = options.listen;
|
58
|
+
if (typeof listen === "object" && !("port" in listen))
|
59
|
+
listen = { ...listen, port: undefined };
|
60
|
+
server.listen(listen);
|
61
|
+
};
|
62
|
+
|
63
|
+
const protocol = options.protocol || (isHttps ? "https" : "http");
|
64
|
+
|
65
|
+
/** @type {RequestListener} */
|
23
66
|
const requestListener = (req, res) => {
|
67
|
+
if (req.url === undefined) return;
|
24
68
|
const keys = req.url.slice(prefix.length).split("@");
|
25
69
|
req.socket.on("close", () => {
|
26
70
|
setTimeout(() => {
|
@@ -38,7 +82,9 @@ module.exports = (compiler, client, callback) => {
|
|
38
82
|
req.socket.setNoDelay(true);
|
39
83
|
res.writeHead(200, {
|
40
84
|
"content-type": "text/event-stream",
|
41
|
-
"Access-Control-Allow-Origin": "*"
|
85
|
+
"Access-Control-Allow-Origin": "*",
|
86
|
+
"Access-Control-Allow-Methods": "*",
|
87
|
+
"Access-Control-Allow-Headers": "*"
|
42
88
|
});
|
43
89
|
res.write("\n");
|
44
90
|
let moduleActivated = false;
|
@@ -52,7 +98,10 @@ module.exports = (compiler, client, callback) => {
|
|
52
98
|
}
|
53
99
|
if (moduleActivated && compiler.watching) compiler.watching.invalidate();
|
54
100
|
};
|
55
|
-
|
101
|
+
|
102
|
+
const server = /** @type {Server} */ (createServer());
|
103
|
+
server.on("request", requestListener);
|
104
|
+
|
56
105
|
let isClosing = false;
|
57
106
|
/** @type {Set<import("net").Socket>} */
|
58
107
|
const sockets = new Set();
|
@@ -63,42 +112,56 @@ module.exports = (compiler, client, callback) => {
|
|
63
112
|
});
|
64
113
|
if (isClosing) socket.destroy();
|
65
114
|
});
|
66
|
-
server.
|
67
|
-
if (
|
68
|
-
const addr = server.address();
|
69
|
-
if (typeof addr === "string") throw new Error("addr must not be a string");
|
70
|
-
const urlBase =
|
71
|
-
addr.address === "::" || addr.address === "0.0.0.0"
|
72
|
-
? `http://localhost:${addr.port}`
|
73
|
-
: addr.family === "IPv6"
|
74
|
-
? `http://[${addr.address}]:${addr.port}`
|
75
|
-
: `http://${addr.address}:${addr.port}`;
|
76
|
-
logger.log(
|
77
|
-
`Server-Sent-Events server for lazy compilation open at ${urlBase}.`
|
78
|
-
);
|
79
|
-
callback(null, {
|
80
|
-
dispose(callback) {
|
81
|
-
isClosing = true;
|
82
|
-
// Removing the listener is a workaround for a memory leak in node.js
|
83
|
-
server.off("request", requestListener);
|
84
|
-
server.close(err => {
|
85
|
-
callback(err);
|
86
|
-
});
|
87
|
-
for (const socket of sockets) {
|
88
|
-
socket.destroy(new Error("Server is disposing"));
|
89
|
-
}
|
90
|
-
},
|
91
|
-
module(originalModule) {
|
92
|
-
const key = `${encodeURIComponent(
|
93
|
-
originalModule.identifier().replace(/\\/g, "/").replace(/@/g, "_")
|
94
|
-
).replace(/%(2F|3A|24|26|2B|2C|3B|3D|3A)/g, decodeURIComponent)}`;
|
95
|
-
const active = activeModules.get(key) > 0;
|
96
|
-
return {
|
97
|
-
client: `${client}?${encodeURIComponent(urlBase + prefix)}`,
|
98
|
-
data: key,
|
99
|
-
active
|
100
|
-
};
|
101
|
-
}
|
102
|
-
});
|
115
|
+
server.on("clientError", e => {
|
116
|
+
if (e.message !== "Server is disposing") logger.warn(e);
|
103
117
|
});
|
118
|
+
|
119
|
+
server.on(
|
120
|
+
"listening",
|
121
|
+
/**
|
122
|
+
* @param {Error} err error
|
123
|
+
* @returns {void}
|
124
|
+
*/
|
125
|
+
err => {
|
126
|
+
if (err) return callback(err);
|
127
|
+
const _addr = server.address();
|
128
|
+
if (typeof _addr === "string")
|
129
|
+
throw new Error("addr must not be a string");
|
130
|
+
const addr = /** @type {AddressInfo} */ (_addr);
|
131
|
+
const urlBase =
|
132
|
+
addr.address === "::" || addr.address === "0.0.0.0"
|
133
|
+
? `${protocol}://localhost:${addr.port}`
|
134
|
+
: addr.family === "IPv6"
|
135
|
+
? `${protocol}://[${addr.address}]:${addr.port}`
|
136
|
+
: `${protocol}://${addr.address}:${addr.port}`;
|
137
|
+
logger.log(
|
138
|
+
`Server-Sent-Events server for lazy compilation open at ${urlBase}.`
|
139
|
+
);
|
140
|
+
callback(null, {
|
141
|
+
dispose(callback) {
|
142
|
+
isClosing = true;
|
143
|
+
// Removing the listener is a workaround for a memory leak in node.js
|
144
|
+
server.off("request", requestListener);
|
145
|
+
server.close(err => {
|
146
|
+
callback(err);
|
147
|
+
});
|
148
|
+
for (const socket of sockets) {
|
149
|
+
socket.destroy(new Error("Server is disposing"));
|
150
|
+
}
|
151
|
+
},
|
152
|
+
module(originalModule) {
|
153
|
+
const key = `${encodeURIComponent(
|
154
|
+
originalModule.identifier().replace(/\\/g, "/").replace(/@/g, "_")
|
155
|
+
).replace(/%(2F|3A|24|26|2B|2C|3B|3D)/g, decodeURIComponent)}`;
|
156
|
+
const active = activeModules.get(key) > 0;
|
157
|
+
return {
|
158
|
+
client: `${options.client}?${encodeURIComponent(urlBase + prefix)}`,
|
159
|
+
data: key,
|
160
|
+
active
|
161
|
+
};
|
162
|
+
}
|
163
|
+
});
|
164
|
+
}
|
165
|
+
);
|
166
|
+
listen(server);
|
104
167
|
};
|
@@ -13,7 +13,18 @@ const {
|
|
13
13
|
|
14
14
|
/** @typedef {import("../Compiler")} Compiler */
|
15
15
|
|
16
|
+
/**
|
17
|
+
* @typedef {object} ChunkModuleIdRangePluginOptions
|
18
|
+
* @property {string} name the chunk name
|
19
|
+
* @property {("index" | "index2" | "preOrderIndex" | "postOrderIndex")=} order order
|
20
|
+
* @property {number=} start start id
|
21
|
+
* @property {number=} end end id
|
22
|
+
*/
|
23
|
+
|
16
24
|
class ChunkModuleIdRangePlugin {
|
25
|
+
/**
|
26
|
+
* @param {ChunkModuleIdRangePluginOptions} options options object
|
27
|
+
*/
|
17
28
|
constructor(options) {
|
18
29
|
this.options = options;
|
19
30
|
}
|
@@ -59,9 +70,7 @@ class ChunkModuleIdRangePlugin {
|
|
59
70
|
chunkModules = chunkGraph.getOrderedChunkModules(chunk, cmpFn);
|
60
71
|
} else {
|
61
72
|
chunkModules = Array.from(modules)
|
62
|
-
.filter(m =>
|
63
|
-
return chunkGraph.isModuleInChunk(m, chunk);
|
64
|
-
})
|
73
|
+
.filter(m => chunkGraph.isModuleInChunk(m, chunk))
|
65
74
|
.sort(compareModulesByPreOrderIndexOrIdentifier(moduleGraph));
|
66
75
|
}
|
67
76
|
|
@@ -15,9 +15,18 @@ const {
|
|
15
15
|
/** @typedef {import("../Compiler")} Compiler */
|
16
16
|
/** @typedef {import("../Module")} Module */
|
17
17
|
|
18
|
+
/**
|
19
|
+
* @typedef {object} DeterministicChunkIdsPluginOptions
|
20
|
+
* @property {string=} context context for ids
|
21
|
+
* @property {number=} maxLength maximum length of ids
|
22
|
+
*/
|
23
|
+
|
18
24
|
class DeterministicChunkIdsPlugin {
|
19
|
-
|
20
|
-
|
25
|
+
/**
|
26
|
+
* @param {DeterministicChunkIdsPluginOptions} [options] options
|
27
|
+
*/
|
28
|
+
constructor(options = {}) {
|
29
|
+
this.options = options;
|
21
30
|
}
|
22
31
|
|
23
32
|
/**
|
@@ -42,9 +51,7 @@ class DeterministicChunkIdsPlugin {
|
|
42
51
|
|
43
52
|
const usedIds = getUsedChunkIds(compilation);
|
44
53
|
assignDeterministicIds(
|
45
|
-
Array.from(chunks).filter(chunk =>
|
46
|
-
return chunk.id === null;
|
47
|
-
}),
|
54
|
+
Array.from(chunks).filter(chunk => chunk.id === null),
|
48
55
|
chunk =>
|
49
56
|
getFullChunkName(chunk, chunkGraph, context, compiler.root),
|
50
57
|
compareNatural,
|
@@ -56,7 +63,7 @@ class DeterministicChunkIdsPlugin {
|
|
56
63
|
chunk.ids = [id];
|
57
64
|
return true;
|
58
65
|
},
|
59
|
-
[
|
66
|
+
[10 ** maxLength],
|
60
67
|
10,
|
61
68
|
usedIds.size
|
62
69
|
);
|
@@ -9,7 +9,7 @@ const {
|
|
9
9
|
compareModulesByPreOrderIndexOrIdentifier
|
10
10
|
} = require("../util/comparators");
|
11
11
|
const {
|
12
|
-
|
12
|
+
getUsedModuleIdsAndModules,
|
13
13
|
getFullModuleName,
|
14
14
|
assignDeterministicIds
|
15
15
|
} = require("./IdHelpers");
|
@@ -17,9 +17,22 @@ const {
|
|
17
17
|
/** @typedef {import("../Compiler")} Compiler */
|
18
18
|
/** @typedef {import("../Module")} Module */
|
19
19
|
|
20
|
+
/**
|
21
|
+
* @typedef {object} DeterministicModuleIdsPluginOptions
|
22
|
+
* @property {string=} context context relative to which module identifiers are computed
|
23
|
+
* @property {function(Module): boolean=} test selector function for modules
|
24
|
+
* @property {number=} maxLength maximum id length in digits (used as starting point)
|
25
|
+
* @property {number=} salt hash salt for ids
|
26
|
+
* @property {boolean=} fixedLength do not increase the maxLength to find an optimal id space size
|
27
|
+
* @property {boolean=} failOnConflict throw an error when id conflicts occur (instead of rehashing)
|
28
|
+
*/
|
29
|
+
|
20
30
|
class DeterministicModuleIdsPlugin {
|
21
|
-
|
22
|
-
|
31
|
+
/**
|
32
|
+
* @param {DeterministicModuleIdsPluginOptions} [options] options
|
33
|
+
*/
|
34
|
+
constructor(options = {}) {
|
35
|
+
this.options = options;
|
23
36
|
}
|
24
37
|
|
25
38
|
/**
|
@@ -31,40 +44,51 @@ class DeterministicModuleIdsPlugin {
|
|
31
44
|
compiler.hooks.compilation.tap(
|
32
45
|
"DeterministicModuleIdsPlugin",
|
33
46
|
compilation => {
|
34
|
-
compilation.hooks.moduleIds.tap(
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
47
|
+
compilation.hooks.moduleIds.tap("DeterministicModuleIdsPlugin", () => {
|
48
|
+
const chunkGraph = compilation.chunkGraph;
|
49
|
+
const context = this.options.context
|
50
|
+
? this.options.context
|
51
|
+
: compiler.context;
|
52
|
+
const maxLength = this.options.maxLength || 3;
|
53
|
+
const failOnConflict = this.options.failOnConflict || false;
|
54
|
+
const fixedLength = this.options.fixedLength || false;
|
55
|
+
const salt = this.options.salt || 0;
|
56
|
+
let conflicts = 0;
|
42
57
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
compareModulesByPreOrderIndexOrIdentifier(
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
return
|
61
|
-
}
|
62
|
-
|
63
|
-
|
64
|
-
|
58
|
+
const [usedIds, modules] = getUsedModuleIdsAndModules(
|
59
|
+
compilation,
|
60
|
+
this.options.test
|
61
|
+
);
|
62
|
+
assignDeterministicIds(
|
63
|
+
modules,
|
64
|
+
module => getFullModuleName(module, context, compiler.root),
|
65
|
+
failOnConflict
|
66
|
+
? () => 0
|
67
|
+
: compareModulesByPreOrderIndexOrIdentifier(
|
68
|
+
compilation.moduleGraph
|
69
|
+
),
|
70
|
+
(module, id) => {
|
71
|
+
const size = usedIds.size;
|
72
|
+
usedIds.add(`${id}`);
|
73
|
+
if (size === usedIds.size) {
|
74
|
+
conflicts++;
|
75
|
+
return false;
|
76
|
+
}
|
77
|
+
chunkGraph.setModuleId(module, id);
|
78
|
+
return true;
|
79
|
+
},
|
80
|
+
[10 ** maxLength],
|
81
|
+
fixedLength ? 0 : 10,
|
82
|
+
usedIds.size,
|
83
|
+
salt
|
84
|
+
);
|
85
|
+
if (failOnConflict && conflicts)
|
86
|
+
throw new Error(
|
87
|
+
`Assigning deterministic module ids has lead to ${conflicts} conflict${
|
88
|
+
conflicts > 1 ? "s" : ""
|
89
|
+
}.\nIncrease the 'maxLength' to increase the id space and make conflicts less likely (recommended when there are many conflicts or application is expected to grow), or add an 'salt' number to try another hash starting value in the same id space (recommended when there is only a single conflict).`
|
65
90
|
);
|
66
|
-
|
67
|
-
);
|
91
|
+
});
|
68
92
|
}
|
69
93
|
);
|
70
94
|
}
|