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
@@ -6,6 +6,27 @@
|
|
6
6
|
"use strict";
|
7
7
|
|
8
8
|
/**
|
9
|
+
* The StackedCacheMap is a data structure designed as an alternative to a Map
|
10
|
+
* in situations where you need to handle multiple item additions and
|
11
|
+
* frequently access the largest map.
|
12
|
+
*
|
13
|
+
* It is particularly optimized for efficiently adding multiple items
|
14
|
+
* at once, which can be achieved using the `addAll` method.
|
15
|
+
*
|
16
|
+
* It has a fallback Map that is used when the map to be added is mutable.
|
17
|
+
*
|
18
|
+
* Note: `delete` and `has` are not supported for performance reasons.
|
19
|
+
* @example
|
20
|
+
* ```js
|
21
|
+
* const map = new StackedCacheMap();
|
22
|
+
* map.addAll(new Map([["a", 1], ["b", 2]]), true);
|
23
|
+
* map.addAll(new Map([["c", 3], ["d", 4]]), true);
|
24
|
+
* map.get("a"); // 1
|
25
|
+
* map.get("d"); // 4
|
26
|
+
* for (const [key, value] of map) {
|
27
|
+
* console.log(key, value);
|
28
|
+
* }
|
29
|
+
* ```
|
9
30
|
* @template K
|
10
31
|
* @template V
|
11
32
|
*/
|
@@ -18,8 +39,11 @@ class StackedCacheMap {
|
|
18
39
|
}
|
19
40
|
|
20
41
|
/**
|
42
|
+
* If `immutable` is true, the map can be referenced by the StackedCacheMap
|
43
|
+
* and should not be changed afterwards. If the map is mutable, all items
|
44
|
+
* are copied into a fallback Map.
|
21
45
|
* @param {ReadonlyMap<K, V>} map map to add
|
22
|
-
* @param {boolean} immutable if 'map' is immutable and StackedCacheMap can keep referencing it
|
46
|
+
* @param {boolean=} immutable if 'map' is immutable and StackedCacheMap can keep referencing it
|
23
47
|
*/
|
24
48
|
addAll(map, immutable) {
|
25
49
|
if (immutable) {
|
@@ -68,7 +92,7 @@ class StackedCacheMap {
|
|
68
92
|
|
69
93
|
/**
|
70
94
|
* @param {K} item the key of the element to return
|
71
|
-
* @returns {V} the value of the element
|
95
|
+
* @returns {V | undefined} the value of the element
|
72
96
|
*/
|
73
97
|
get(item) {
|
74
98
|
for (const map of this.stack) {
|
@@ -83,6 +107,9 @@ class StackedCacheMap {
|
|
83
107
|
this.map.clear();
|
84
108
|
}
|
85
109
|
|
110
|
+
/**
|
111
|
+
* @returns {number} size of the map
|
112
|
+
*/
|
86
113
|
get size() {
|
87
114
|
let size = this.map.size;
|
88
115
|
for (const map of this.stack) {
|
@@ -91,6 +118,9 @@ class StackedCacheMap {
|
|
91
118
|
return size;
|
92
119
|
}
|
93
120
|
|
121
|
+
/**
|
122
|
+
* @returns {Iterator<[K, V]>} iterator
|
123
|
+
*/
|
94
124
|
[Symbol.iterator]() {
|
95
125
|
const iterators = this.stack.map(map => map[Symbol.iterator]());
|
96
126
|
let current = this.map[Symbol.iterator]();
|
@@ -98,7 +128,7 @@ class StackedCacheMap {
|
|
98
128
|
next() {
|
99
129
|
let result = current.next();
|
100
130
|
while (result.done && iterators.length > 0) {
|
101
|
-
current = iterators.pop();
|
131
|
+
current = /** @type {IterableIterator<[K, V]>} */ (iterators.pop());
|
102
132
|
result = current.next();
|
103
133
|
}
|
104
134
|
return result;
|
package/lib/util/StackedMap.js
CHANGED
@@ -29,9 +29,8 @@ const extractPair = pair => {
|
|
29
29
|
const val = pair[1];
|
30
30
|
if (val === UNDEFINED_MARKER || val === TOMBSTONE) {
|
31
31
|
return [key, undefined];
|
32
|
-
} else {
|
33
|
-
return /** @type {[K, Cell<V>]} */ (pair);
|
34
32
|
}
|
33
|
+
return /** @type {[K, Cell<V>]} */ (pair);
|
35
34
|
};
|
36
35
|
|
37
36
|
/**
|
@@ -116,7 +115,6 @@ class StackedMap {
|
|
116
115
|
}
|
117
116
|
this.map.set(item, TOMBSTONE);
|
118
117
|
}
|
119
|
-
return undefined;
|
120
118
|
}
|
121
119
|
|
122
120
|
_compress() {
|
package/lib/util/StringXor.js
CHANGED
@@ -5,12 +5,43 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
/** @typedef {import("../util/Hash")} Hash */
|
9
|
+
|
10
|
+
/**
|
11
|
+
* StringXor class provides methods for performing
|
12
|
+
* [XOR operations](https://en.wikipedia.org/wiki/Exclusive_or) on strings. In this context
|
13
|
+
* we operating on the character codes of two strings, which are represented as
|
14
|
+
* [Buffer](https://nodejs.org/api/buffer.html) objects.
|
15
|
+
*
|
16
|
+
* We use [StringXor in webpack](https://github.com/webpack/webpack/commit/41a8e2ea483a544c4ccd3e6217bdfb80daffca39)
|
17
|
+
* to create a hash of the current state of the compilation. By XOR'ing the Module hashes, it
|
18
|
+
* doesn't matter if the Module hashes are sorted or not. This is useful because it allows us to avoid sorting the
|
19
|
+
* Module hashes.
|
20
|
+
* @example
|
21
|
+
* ```js
|
22
|
+
* const xor = new StringXor();
|
23
|
+
* xor.add('hello');
|
24
|
+
* xor.add('world');
|
25
|
+
* console.log(xor.toString());
|
26
|
+
* ```
|
27
|
+
* @example
|
28
|
+
* ```js
|
29
|
+
* const xor = new StringXor();
|
30
|
+
* xor.add('foo');
|
31
|
+
* xor.add('bar');
|
32
|
+
* const hash = createHash('sha256');
|
33
|
+
* hash.update(xor.toString());
|
34
|
+
* console.log(hash.digest('hex'));
|
35
|
+
* ```
|
36
|
+
*/
|
8
37
|
class StringXor {
|
9
38
|
constructor() {
|
39
|
+
/** @type {Buffer|undefined} */
|
10
40
|
this._value = undefined;
|
11
41
|
}
|
12
42
|
|
13
43
|
/**
|
44
|
+
* Adds a string to the current StringXor object.
|
14
45
|
* @param {string} str string
|
15
46
|
* @returns {void}
|
16
47
|
*/
|
@@ -18,6 +49,10 @@ class StringXor {
|
|
18
49
|
const len = str.length;
|
19
50
|
const value = this._value;
|
20
51
|
if (value === undefined) {
|
52
|
+
/**
|
53
|
+
* We are choosing to use Buffer.allocUnsafe() because it is often faster than Buffer.alloc() because
|
54
|
+
* it allocates a new buffer of the specified size without initializing the memory.
|
55
|
+
*/
|
21
56
|
const newValue = (this._value = Buffer.allocUnsafe(len));
|
22
57
|
for (let i = 0; i < len; i++) {
|
23
58
|
newValue[i] = str.charCodeAt(i);
|
@@ -41,11 +76,22 @@ class StringXor {
|
|
41
76
|
}
|
42
77
|
}
|
43
78
|
|
79
|
+
/**
|
80
|
+
* Returns a string that represents the current state of the StringXor object. We chose to use "latin1" encoding
|
81
|
+
* here because "latin1" encoding is a single-byte encoding that can represent all characters in the
|
82
|
+
* [ISO-8859-1 character set](https://en.wikipedia.org/wiki/ISO/IEC_8859-1). This is useful when working
|
83
|
+
* with binary data that needs to be represented as a string.
|
84
|
+
* @returns {string} Returns a string that represents the current state of the StringXor object.
|
85
|
+
*/
|
44
86
|
toString() {
|
45
87
|
const value = this._value;
|
46
88
|
return value === undefined ? "" : value.toString("latin1");
|
47
89
|
}
|
48
90
|
|
91
|
+
/**
|
92
|
+
* Updates the hash with the current state of the StringXor object.
|
93
|
+
* @param {Hash} hash Hash instance
|
94
|
+
*/
|
49
95
|
updateHash(hash) {
|
50
96
|
const value = this._value;
|
51
97
|
if (value !== undefined) hash.update(value);
|
package/lib/util/TupleQueue.js
CHANGED
@@ -15,9 +15,15 @@ class TupleQueue {
|
|
15
15
|
* @param {Iterable<T>=} items The initial elements.
|
16
16
|
*/
|
17
17
|
constructor(items) {
|
18
|
-
/**
|
18
|
+
/**
|
19
|
+
* @private
|
20
|
+
* @type {TupleSet<T>}
|
21
|
+
*/
|
19
22
|
this._set = new TupleSet(items);
|
20
|
-
/**
|
23
|
+
/**
|
24
|
+
* @private
|
25
|
+
* @type {Iterator<T>}
|
26
|
+
*/
|
21
27
|
this._iterator = this._set[Symbol.iterator]();
|
22
28
|
}
|
23
29
|
|
@@ -51,7 +57,7 @@ class TupleQueue {
|
|
51
57
|
this._set.delete(...value);
|
52
58
|
return value;
|
53
59
|
}
|
54
|
-
return
|
60
|
+
return;
|
55
61
|
}
|
56
62
|
this._set.delete(...result.value);
|
57
63
|
return result.value;
|
package/lib/util/TupleSet.js
CHANGED
@@ -9,7 +9,11 @@
|
|
9
9
|
* @template {any[]} T
|
10
10
|
*/
|
11
11
|
class TupleSet {
|
12
|
+
/**
|
13
|
+
* @param {Iterable<T>=} init init
|
14
|
+
*/
|
12
15
|
constructor(init) {
|
16
|
+
/** @type {Map<T, TODO>} */
|
13
17
|
this._map = new Map();
|
14
18
|
this.size = 0;
|
15
19
|
if (init) {
|
@@ -62,7 +66,7 @@ class TupleSet {
|
|
62
66
|
}
|
63
67
|
|
64
68
|
const beforeLast = args[args.length - 2];
|
65
|
-
|
69
|
+
const set = map.get(beforeLast);
|
66
70
|
if (set === undefined) {
|
67
71
|
return false;
|
68
72
|
}
|
@@ -86,7 +90,7 @@ class TupleSet {
|
|
86
90
|
}
|
87
91
|
|
88
92
|
const beforeLast = args[args.length - 2];
|
89
|
-
|
93
|
+
const set = map.get(beforeLast);
|
90
94
|
if (set === undefined) {
|
91
95
|
return;
|
92
96
|
}
|
@@ -101,10 +105,17 @@ class TupleSet {
|
|
101
105
|
* @returns {Iterator<T>} iterator
|
102
106
|
*/
|
103
107
|
[Symbol.iterator]() {
|
108
|
+
/** @type {TODO[]} */
|
104
109
|
const iteratorStack = [];
|
110
|
+
/** @type {T[]} */
|
105
111
|
const tuple = [];
|
106
|
-
|
112
|
+
/** @type {Iterator<T> | undefined} */
|
113
|
+
let currentSetIterator;
|
107
114
|
|
115
|
+
/**
|
116
|
+
* @param {TODO} it iterator
|
117
|
+
* @returns {boolean} result
|
118
|
+
*/
|
108
119
|
const next = it => {
|
109
120
|
const result = it.next();
|
110
121
|
if (result.done) {
|
@@ -118,9 +129,8 @@ class TupleSet {
|
|
118
129
|
if (value instanceof Set) {
|
119
130
|
currentSetIterator = value[Symbol.iterator]();
|
120
131
|
return true;
|
121
|
-
} else {
|
122
|
-
return next(value[Symbol.iterator]());
|
123
132
|
}
|
133
|
+
return next(value[Symbol.iterator]());
|
124
134
|
};
|
125
135
|
|
126
136
|
next(this._map[Symbol.iterator]());
|
@@ -36,7 +36,7 @@ function getScheme(specifier) {
|
|
36
36
|
(start < aLowerCaseCharCode || start > zLowerCaseCharCode) &&
|
37
37
|
(start < aUpperCaseCharCode || start > zUpperCaseCharCode)
|
38
38
|
) {
|
39
|
-
return
|
39
|
+
return;
|
40
40
|
}
|
41
41
|
|
42
42
|
let i = 1;
|
@@ -49,12 +49,12 @@ function getScheme(specifier) {
|
|
49
49
|
ch === plusCharCode ||
|
50
50
|
ch === hyphenCharCode
|
51
51
|
) {
|
52
|
-
if (++i === specifier.length) return
|
52
|
+
if (++i === specifier.length) return;
|
53
53
|
ch = specifier.charCodeAt(i);
|
54
54
|
}
|
55
55
|
|
56
56
|
// Scheme must end with colon
|
57
|
-
if (ch !== colonCharCode) return
|
57
|
+
if (ch !== colonCharCode) return;
|
58
58
|
|
59
59
|
// Check for Windows absolute path
|
60
60
|
// https://url.spec.whatwg.org/#url-miscellaneous
|
@@ -67,7 +67,7 @@ function getScheme(specifier) {
|
|
67
67
|
nextChar === hashCharCode ||
|
68
68
|
nextChar === queryCharCode
|
69
69
|
) {
|
70
|
-
return
|
70
|
+
return;
|
71
71
|
}
|
72
72
|
}
|
73
73
|
|
@@ -76,12 +76,12 @@ function getScheme(specifier) {
|
|
76
76
|
|
77
77
|
/**
|
78
78
|
* @param {string} specifier specifier
|
79
|
-
* @returns {string|null} protocol if absolute URL specifier provided
|
79
|
+
* @returns {string | null | undefined} protocol if absolute URL specifier provided
|
80
80
|
*/
|
81
81
|
function getProtocol(specifier) {
|
82
82
|
const scheme = getScheme(specifier);
|
83
|
-
return scheme === undefined ? undefined : scheme
|
83
|
+
return scheme === undefined ? undefined : `${scheme}:`;
|
84
84
|
}
|
85
85
|
|
86
|
-
exports.getScheme = getScheme;
|
87
|
-
exports.getProtocol = getProtocol;
|
86
|
+
module.exports.getScheme = getScheme;
|
87
|
+
module.exports.getProtocol = getProtocol;
|
package/lib/util/WeakTupleMap.js
CHANGED
@@ -5,6 +5,21 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
/**
|
9
|
+
* @template {any[]} T
|
10
|
+
* @template V
|
11
|
+
* @typedef {Map<object, WeakTupleMap<T, V>>} M
|
12
|
+
*/
|
13
|
+
/**
|
14
|
+
* @template {any[]} T
|
15
|
+
* @template V
|
16
|
+
* @typedef {WeakMap<object, WeakTupleMap<T, V>>} W
|
17
|
+
*/
|
18
|
+
|
19
|
+
/**
|
20
|
+
* @param {any} thing thing
|
21
|
+
* @returns {boolean} true if is weak
|
22
|
+
*/
|
8
23
|
const isWeakKey = thing => typeof thing === "object" && thing !== null;
|
9
24
|
|
10
25
|
/**
|
@@ -15,11 +30,20 @@ class WeakTupleMap {
|
|
15
30
|
constructor() {
|
16
31
|
/** @private */
|
17
32
|
this.f = 0;
|
18
|
-
/**
|
33
|
+
/**
|
34
|
+
* @private
|
35
|
+
* @type {any}
|
36
|
+
*/
|
19
37
|
this.v = undefined;
|
20
|
-
/**
|
38
|
+
/**
|
39
|
+
* @private
|
40
|
+
* @type {M<T, V> | undefined}
|
41
|
+
*/
|
21
42
|
this.m = undefined;
|
22
|
-
/**
|
43
|
+
/**
|
44
|
+
* @private
|
45
|
+
* @type {W<T, V> | undefined}
|
46
|
+
*/
|
23
47
|
this.w = undefined;
|
24
48
|
}
|
25
49
|
|
@@ -41,7 +65,7 @@ class WeakTupleMap {
|
|
41
65
|
* @returns {boolean} true, if the tuple is in the Set
|
42
66
|
*/
|
43
67
|
has(...args) {
|
44
|
-
/** @type {WeakTupleMap<T, V>} */
|
68
|
+
/** @type {WeakTupleMap<T, V> | undefined} */
|
45
69
|
let node = this;
|
46
70
|
for (let i = 0; i < args.length; i++) {
|
47
71
|
node = node._peek(args[i]);
|
@@ -52,14 +76,14 @@ class WeakTupleMap {
|
|
52
76
|
|
53
77
|
/**
|
54
78
|
* @param {T} args tuple
|
55
|
-
* @returns {V} the value
|
79
|
+
* @returns {V | undefined} the value
|
56
80
|
*/
|
57
81
|
get(...args) {
|
58
|
-
/** @type {WeakTupleMap<T, V>} */
|
82
|
+
/** @type {WeakTupleMap<T, V> | undefined} */
|
59
83
|
let node = this;
|
60
84
|
for (let i = 0; i < args.length; i++) {
|
61
85
|
node = node._peek(args[i]);
|
62
|
-
if (node === undefined) return
|
86
|
+
if (node === undefined) return;
|
63
87
|
}
|
64
88
|
return node._getValue();
|
65
89
|
}
|
@@ -86,7 +110,7 @@ class WeakTupleMap {
|
|
86
110
|
* @returns {void}
|
87
111
|
*/
|
88
112
|
delete(...args) {
|
89
|
-
/** @type {WeakTupleMap<T, V>} */
|
113
|
+
/** @type {WeakTupleMap<T, V> | undefined} */
|
90
114
|
let node = this;
|
91
115
|
for (let i = 0; i < args.length; i++) {
|
92
116
|
node = node._peek(args[i]);
|
@@ -113,6 +137,10 @@ class WeakTupleMap {
|
|
113
137
|
return (this.f & 1) === 1;
|
114
138
|
}
|
115
139
|
|
140
|
+
/**
|
141
|
+
* @param {any} v value
|
142
|
+
* @private
|
143
|
+
*/
|
116
144
|
_setValue(v) {
|
117
145
|
this.f |= 1;
|
118
146
|
this.v = v;
|
@@ -123,16 +151,25 @@ class WeakTupleMap {
|
|
123
151
|
this.v = undefined;
|
124
152
|
}
|
125
153
|
|
154
|
+
/**
|
155
|
+
* @param {any} thing thing
|
156
|
+
* @returns {WeakTupleMap<T, V> | undefined} thing
|
157
|
+
* @private
|
158
|
+
*/
|
126
159
|
_peek(thing) {
|
127
160
|
if (isWeakKey(thing)) {
|
128
|
-
if ((this.f & 4) !== 4) return
|
129
|
-
return this.w.get(thing);
|
130
|
-
} else {
|
131
|
-
if ((this.f & 2) !== 2) return undefined;
|
132
|
-
return this.m.get(thing);
|
161
|
+
if ((this.f & 4) !== 4) return;
|
162
|
+
return /** @type {W<T, V>} */ (this.w).get(thing);
|
133
163
|
}
|
164
|
+
if ((this.f & 2) !== 2) return;
|
165
|
+
return /** @type {M<T, V>} */ (this.m).get(thing);
|
134
166
|
}
|
135
167
|
|
168
|
+
/**
|
169
|
+
* @private
|
170
|
+
* @param {any} thing thing
|
171
|
+
* @returns {WeakTupleMap<T, V>} value
|
172
|
+
*/
|
136
173
|
_get(thing) {
|
137
174
|
if (isWeakKey(thing)) {
|
138
175
|
if ((this.f & 4) !== 4) {
|
@@ -142,29 +179,34 @@ class WeakTupleMap {
|
|
142
179
|
(this.w = newMap).set(thing, newNode);
|
143
180
|
return newNode;
|
144
181
|
}
|
145
|
-
const entry =
|
182
|
+
const entry =
|
183
|
+
/** @type {W<T, V>} */
|
184
|
+
(this.w).get(thing);
|
146
185
|
if (entry !== undefined) {
|
147
186
|
return entry;
|
148
187
|
}
|
149
188
|
const newNode = new WeakTupleMap();
|
150
|
-
|
189
|
+
/** @type {W<T, V>} */
|
190
|
+
(this.w).set(thing, newNode);
|
151
191
|
return newNode;
|
152
|
-
}
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
const newNode = new WeakTupleMap();
|
157
|
-
(this.m = newMap).set(thing, newNode);
|
158
|
-
return newNode;
|
159
|
-
}
|
160
|
-
const entry = this.m.get(thing);
|
161
|
-
if (entry !== undefined) {
|
162
|
-
return entry;
|
163
|
-
}
|
192
|
+
}
|
193
|
+
if ((this.f & 2) !== 2) {
|
194
|
+
const newMap = new Map();
|
195
|
+
this.f |= 2;
|
164
196
|
const newNode = new WeakTupleMap();
|
165
|
-
this.m.set(thing, newNode);
|
197
|
+
(this.m = newMap).set(thing, newNode);
|
166
198
|
return newNode;
|
167
199
|
}
|
200
|
+
const entry =
|
201
|
+
/** @type {M<T, V>} */
|
202
|
+
(this.m).get(thing);
|
203
|
+
if (entry !== undefined) {
|
204
|
+
return entry;
|
205
|
+
}
|
206
|
+
const newNode = new WeakTupleMap();
|
207
|
+
/** @type {M<T, V>} */
|
208
|
+
(this.m).set(thing, newNode);
|
209
|
+
return newNode;
|
168
210
|
}
|
169
211
|
}
|
170
212
|
|
@@ -8,6 +8,27 @@
|
|
8
8
|
/* cspell:disable-next-line */
|
9
9
|
// Refactor: Peter Somogyvari @petermetz
|
10
10
|
|
11
|
+
/** @typedef {">=" | "<=" | "<" | ">" | "-" } BinarySearchPredicate */
|
12
|
+
/** @typedef {"GE" | "GT" | "LT" | "LE" | "EQ" } SearchPredicateSuffix */
|
13
|
+
|
14
|
+
/**
|
15
|
+
* Helper function for compiling binary search functions.
|
16
|
+
*
|
17
|
+
* The generated code uses a while loop to repeatedly divide the search interval
|
18
|
+
* in half until the desired element is found, or the search interval is empty.
|
19
|
+
*
|
20
|
+
* The following is an example of a generated function for calling `compileSearch("P", "c(x,y)<=0", true, ["y", "c"], false)`:
|
21
|
+
*
|
22
|
+
* ```js
|
23
|
+
* function P(a,l,h,y,c){var i=l-1;while(l<=h){var m=(l+h)>>>1,x=a[m];if(c(x,y)<=0){i=m;l=m+1}else{h=m-1}}return i};
|
24
|
+
* ```
|
25
|
+
* @param {string} funcName The name of the function to be compiled.
|
26
|
+
* @param {string} predicate The predicate / comparison operator to be used in the binary search.
|
27
|
+
* @param {boolean} reversed Whether the search should be reversed.
|
28
|
+
* @param {string[]} extraArgs Extra arguments to be passed to the function.
|
29
|
+
* @param {boolean=} earlyOut Whether the search should return as soon as a match is found.
|
30
|
+
* @returns {string} The compiled binary search function.
|
31
|
+
*/
|
11
32
|
const compileSearch = (funcName, predicate, reversed, extraArgs, earlyOut) => {
|
12
33
|
const code = [
|
13
34
|
"function ",
|
@@ -21,7 +42,7 @@ const compileSearch = (funcName, predicate, reversed, extraArgs, earlyOut) => {
|
|
21
42
|
];
|
22
43
|
|
23
44
|
if (earlyOut) {
|
24
|
-
if (predicate.
|
45
|
+
if (!predicate.includes("c")) {
|
25
46
|
code.push(";if(x===y){return m}else if(x<=y){");
|
26
47
|
} else {
|
27
48
|
code.push(";var p=c(x,y);if(p===0){return m}else if(p<=0){");
|
@@ -43,18 +64,23 @@ const compileSearch = (funcName, predicate, reversed, extraArgs, earlyOut) => {
|
|
43
64
|
return code.join("");
|
44
65
|
};
|
45
66
|
|
67
|
+
/**
|
68
|
+
* This helper functions generate code for two binary search functions:
|
69
|
+
* A(): Performs a binary search on an array using the comparison operator specified.
|
70
|
+
* P(): Performs a binary search on an array using a _custom comparison function_
|
71
|
+
* `c(x,y)` **and** comparison operator specified by `predicate`.
|
72
|
+
* @param {BinarySearchPredicate} predicate The predicate / comparison operator to be used in the binary search.
|
73
|
+
* @param {boolean} reversed Whether the search should be reversed.
|
74
|
+
* @param {SearchPredicateSuffix} suffix The suffix to be used in the function name.
|
75
|
+
* @param {boolean=} earlyOut Whether the search should return as soon as a match is found.
|
76
|
+
* @returns {Function} The compiled binary search function.
|
77
|
+
*/
|
46
78
|
const compileBoundsSearch = (predicate, reversed, suffix, earlyOut) => {
|
47
|
-
const arg1 = compileSearch(
|
48
|
-
"A",
|
49
|
-
"x" + predicate + "y",
|
50
|
-
reversed,
|
51
|
-
["y"],
|
52
|
-
earlyOut
|
53
|
-
);
|
79
|
+
const arg1 = compileSearch("A", `x${predicate}y`, reversed, ["y"], earlyOut);
|
54
80
|
|
55
81
|
const arg2 = compileSearch(
|
56
82
|
"P",
|
57
|
-
|
83
|
+
`c(x,y)${predicate}0`,
|
58
84
|
reversed,
|
59
85
|
["y", "c"],
|
60
86
|
earlyOut
|
@@ -63,6 +89,7 @@ const compileBoundsSearch = (predicate, reversed, suffix, earlyOut) => {
|
|
63
89
|
const fnHeader = "function dispatchBinarySearch";
|
64
90
|
|
65
91
|
const fnBody =
|
92
|
+
// eslint-disable-next-line no-multi-str
|
66
93
|
"(a,y,c,l,h){\
|
67
94
|
if(typeof(c)==='function'){\
|
68
95
|
return P(a,(l===void 0)?0:l|0,(h===void 0)?a.length-1:h|0,y,c)\
|
@@ -73,10 +100,25 @@ return dispatchBinarySearch";
|
|
73
100
|
|
74
101
|
const fnArgList = [arg1, arg2, fnHeader, suffix, fnBody, suffix];
|
75
102
|
const fnSource = fnArgList.join("");
|
103
|
+
// eslint-disable-next-line no-new-func
|
76
104
|
const result = new Function(fnSource);
|
77
105
|
return result();
|
78
106
|
};
|
79
107
|
|
108
|
+
/**
|
109
|
+
* These functions are used to perform binary searches on arrays.
|
110
|
+
* @example
|
111
|
+
* ```js
|
112
|
+
* const { gt, le} = require("./binarySearchBounds");
|
113
|
+
* const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
|
114
|
+
*
|
115
|
+
* // Find the index of the first element greater than 5
|
116
|
+
* const index1 = gt(arr, 5); // index1 === 3
|
117
|
+
*
|
118
|
+
* // Find the index of the first element less than or equal to 5
|
119
|
+
* const index2 = le(arr, 5); // index2 === 4
|
120
|
+
* ```
|
121
|
+
*/
|
80
122
|
module.exports = {
|
81
123
|
ge: compileBoundsSearch(">=", false, "GE"),
|
82
124
|
gt: compileBoundsSearch(">", false, "GT"),
|
@@ -0,0 +1,97 @@
|
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
/** @typedef {import("../Dependency")} Dependency */
|
9
|
+
/** @typedef {import("../Module")} Module */
|
10
|
+
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
11
|
+
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
12
|
+
|
13
|
+
/**
|
14
|
+
* @summary Get the subset of ids and their corresponding range in an id chain that should be re-rendered by webpack.
|
15
|
+
* Only those in the chain that are actually referring to namespaces or imports should be re-rendered.
|
16
|
+
* Deeper member accessors on the imported object should not be re-rendered. If deeper member accessors are re-rendered,
|
17
|
+
* there is a potential loss of meaning with rendering a quoted accessor as an unquoted accessor, or vice versa,
|
18
|
+
* because minifiers treat quoted accessors differently. e.g. import { a } from "./module"; a["b"] vs a.b
|
19
|
+
* @param {string[]} untrimmedIds chained ids
|
20
|
+
* @param {Range} untrimmedRange range encompassing allIds
|
21
|
+
* @param {Range[] | undefined} ranges cumulative range of ids for each of allIds
|
22
|
+
* @param {ModuleGraph} moduleGraph moduleGraph
|
23
|
+
* @param {Dependency} dependency dependency
|
24
|
+
* @returns {{trimmedIds: string[], trimmedRange: Range}} computed trimmed ids and cumulative range of those ids
|
25
|
+
*/
|
26
|
+
module.exports.getTrimmedIdsAndRange = (
|
27
|
+
untrimmedIds,
|
28
|
+
untrimmedRange,
|
29
|
+
ranges,
|
30
|
+
moduleGraph,
|
31
|
+
dependency
|
32
|
+
) => {
|
33
|
+
let trimmedIds = trimIdsToThoseImported(
|
34
|
+
untrimmedIds,
|
35
|
+
moduleGraph,
|
36
|
+
dependency
|
37
|
+
);
|
38
|
+
let trimmedRange = untrimmedRange;
|
39
|
+
if (trimmedIds.length !== untrimmedIds.length) {
|
40
|
+
// The array returned from dep.idRanges is right-aligned with the array returned from dep.names.
|
41
|
+
// Meaning, the two arrays may not always have the same number of elements, but the last element of
|
42
|
+
// dep.idRanges corresponds to [the expression fragment to the left of] the last element of dep.names.
|
43
|
+
// Use this to find the correct replacement range based on the number of ids that were trimmed.
|
44
|
+
const idx =
|
45
|
+
ranges === undefined
|
46
|
+
? -1 /* trigger failure case below */
|
47
|
+
: ranges.length + (trimmedIds.length - untrimmedIds.length);
|
48
|
+
if (idx < 0 || idx >= /** @type {Range[]} */ (ranges).length) {
|
49
|
+
// cspell:ignore minifiers
|
50
|
+
// Should not happen but we can't throw an error here because of backward compatibility with
|
51
|
+
// external plugins in wp5. Instead, we just disable trimming for now. This may break some minifiers.
|
52
|
+
trimmedIds = untrimmedIds;
|
53
|
+
// TODO webpack 6 remove the "trimmedIds = ids" above and uncomment the following line instead.
|
54
|
+
// throw new Error("Missing range starts data for id replacement trimming.");
|
55
|
+
} else {
|
56
|
+
trimmedRange = /** @type {Range[]} */ (ranges)[idx];
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
return { trimmedIds, trimmedRange };
|
61
|
+
};
|
62
|
+
|
63
|
+
/**
|
64
|
+
* @summary Determine which IDs in the id chain are actually referring to namespaces or imports,
|
65
|
+
* and which are deeper member accessors on the imported object.
|
66
|
+
* @param {string[]} ids untrimmed ids
|
67
|
+
* @param {ModuleGraph} moduleGraph moduleGraph
|
68
|
+
* @param {Dependency} dependency dependency
|
69
|
+
* @returns {string[]} trimmed ids
|
70
|
+
*/
|
71
|
+
function trimIdsToThoseImported(ids, moduleGraph, dependency) {
|
72
|
+
/** @type {string[]} */
|
73
|
+
let trimmedIds = [];
|
74
|
+
let currentExportsInfo = moduleGraph.getExportsInfo(
|
75
|
+
/** @type {Module} */ (moduleGraph.getModule(dependency))
|
76
|
+
);
|
77
|
+
for (let i = 0; i < ids.length; i++) {
|
78
|
+
if (i === 0 && ids[i] === "default") {
|
79
|
+
continue; // ExportInfo for the next level under default is still at the root ExportsInfo, so don't advance currentExportsInfo
|
80
|
+
}
|
81
|
+
const exportInfo = currentExportsInfo.getExportInfo(ids[i]);
|
82
|
+
if (exportInfo.provided === false) {
|
83
|
+
// json imports have nested ExportInfo for elements that things that are not actually exported, so check .provided
|
84
|
+
trimmedIds = ids.slice(0, i);
|
85
|
+
break;
|
86
|
+
}
|
87
|
+
const nestedInfo = exportInfo.getNestedExportsInfo();
|
88
|
+
if (!nestedInfo) {
|
89
|
+
// once all nested exports are traversed, the next item is the actual import so stop there
|
90
|
+
trimmedIds = ids.slice(0, i + 1);
|
91
|
+
break;
|
92
|
+
}
|
93
|
+
currentExportsInfo = nestedInfo;
|
94
|
+
}
|
95
|
+
// Never trim to nothing. This can happen for invalid imports (e.g. import { notThere } from "./module", or import { anything } from "./missingModule")
|
96
|
+
return trimmedIds.length ? trimmedIds : ids;
|
97
|
+
}
|