webpack 5.76.1 → 5.88.2
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.
Potentially problematic release.
This version of webpack might be problematic. Click here for more details.
- package/README.md +10 -4
- package/bin/webpack.js +26 -2
- package/hot/dev-server.js +2 -1
- package/hot/lazy-compilation-node.js +10 -0
- package/hot/lazy-compilation-web.js +9 -0
- package/hot/log-apply-result.js +5 -0
- package/hot/log.js +22 -0
- package/hot/only-dev-server.js +2 -1
- package/hot/poll.js +3 -0
- package/hot/signal.js +4 -0
- package/lib/APIPlugin.js +174 -116
- package/lib/AsyncDependenciesBlock.js +13 -5
- package/lib/AutomaticPrefetchPlugin.js +1 -0
- package/lib/BannerPlugin.js +6 -1
- package/lib/CacheFacade.js +4 -0
- package/lib/CaseSensitiveModulesWarning.js +3 -1
- package/lib/Chunk.js +36 -18
- package/lib/ChunkGraph.js +4 -4
- package/lib/ChunkGroup.js +25 -10
- package/lib/CleanPlugin.js +30 -7
- package/lib/CodeGenerationResults.js +2 -2
- package/lib/CompatibilityPlugin.js +85 -46
- package/lib/Compilation.js +17 -8
- package/lib/Compiler.js +18 -14
- package/lib/ConcatenationScope.js +2 -2
- package/lib/ConditionalInitFragment.js +11 -1
- package/lib/ConstPlugin.js +95 -47
- package/lib/ContextModule.js +20 -6
- package/lib/ContextModuleFactory.js +2 -1
- package/lib/ContextReplacementPlugin.js +13 -0
- package/lib/CssModule.js +169 -0
- package/lib/DefinePlugin.js +152 -86
- package/lib/DelegatedModule.js +22 -4
- package/lib/DelegatedModuleFactoryPlugin.js +6 -0
- package/lib/DependenciesBlock.js +17 -1
- package/lib/Dependency.js +19 -5
- package/lib/DependencyTemplates.js +1 -1
- package/lib/DllEntryPlugin.js +16 -1
- package/lib/DllModule.js +17 -2
- package/lib/DllModuleFactory.js +1 -1
- package/lib/DllReferencePlugin.js +13 -1
- package/lib/Entrypoint.js +1 -1
- package/lib/ErrorHelpers.js +62 -22
- package/lib/EvalSourceMapDevToolPlugin.js +9 -2
- package/lib/ExportsInfo.js +25 -4
- package/lib/ExportsInfoApiPlugin.js +30 -14
- package/lib/ExternalModule.js +30 -9
- package/lib/FileSystemInfo.js +61 -25
- package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
- package/lib/FlagDependencyExportsPlugin.js +336 -348
- package/lib/FlagDependencyUsagePlugin.js +9 -9
- package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
- package/lib/Generator.js +7 -0
- package/lib/HookWebpackError.js +1 -1
- package/lib/HotModuleReplacementPlugin.js +60 -46
- package/lib/IgnoreErrorModuleFactory.js +1 -1
- package/lib/InitFragment.js +28 -5
- package/lib/JavascriptMetaInfoPlugin.js +27 -15
- package/lib/LibManifestPlugin.js +22 -5
- package/lib/LoaderOptionsPlugin.js +12 -2
- package/lib/MainTemplate.js +2 -2
- package/lib/Module.js +44 -12
- package/lib/ModuleBuildError.js +9 -0
- package/lib/ModuleDependencyError.js +4 -2
- package/lib/ModuleDependencyWarning.js +4 -2
- package/lib/ModuleError.js +9 -0
- package/lib/ModuleFactory.js +1 -1
- package/lib/ModuleFilenameHelpers.js +114 -4
- package/lib/ModuleGraph.js +33 -23
- package/lib/ModuleGraphConnection.js +19 -6
- package/lib/ModuleInfoHeaderPlugin.js +9 -2
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleParseError.js +9 -0
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +2 -0
- package/lib/ModuleStoreError.js +2 -1
- package/lib/ModuleTypeConstants.js +169 -0
- package/lib/ModuleWarning.js +9 -0
- package/lib/MultiWatching.js +4 -0
- package/lib/NodeStuffPlugin.js +65 -35
- package/lib/NormalModule.js +12 -2
- package/lib/NormalModuleFactory.js +56 -8
- package/lib/NormalModuleReplacementPlugin.js +5 -3
- package/lib/NullFactory.js +1 -1
- package/lib/PrefetchPlugin.js +4 -0
- package/lib/ProgressPlugin.js +71 -15
- package/lib/ProvidePlugin.js +30 -14
- package/lib/RawModule.js +13 -2
- package/lib/RecordIdsPlugin.js +4 -4
- package/lib/RequireJsStuffPlugin.js +22 -15
- package/lib/RuntimeGlobals.js +5 -0
- package/lib/RuntimeModule.js +12 -11
- package/lib/RuntimePlugin.js +10 -3
- package/lib/RuntimeTemplate.js +29 -11
- package/lib/SelfModuleFactory.js +12 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +47 -11
- package/lib/Template.js +5 -3
- package/lib/UseStrictPlugin.js +29 -11
- package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
- package/lib/WarnDeprecatedOptionPlugin.js +7 -0
- package/lib/WatchIgnorePlugin.js +4 -0
- package/lib/Watching.js +62 -25
- package/lib/WebpackError.js +14 -5
- package/lib/WebpackIsIncludedPlugin.js +22 -13
- package/lib/WebpackOptionsApply.js +41 -44
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +24 -9
- package/lib/asset/AssetModulesPlugin.js +28 -12
- package/lib/asset/AssetParser.js +15 -7
- package/lib/asset/AssetSourceParser.js +8 -3
- package/lib/asset/RawDataUrlModule.js +15 -4
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/buildChunkGraph.js +37 -21
- package/lib/cache/IdleFileCachePlugin.js +2 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
- package/lib/cache/PackFileCacheStrategy.js +59 -22
- package/lib/cache/ResolverCachePlugin.js +3 -0
- package/lib/config/browserslistTargetHandler.js +10 -10
- package/lib/config/defaults.js +306 -105
- package/lib/config/normalization.js +110 -71
- package/lib/config/target.js +37 -10
- package/lib/container/ContainerEntryModule.js +11 -1
- package/lib/container/ContainerEntryModuleFactory.js +1 -1
- package/lib/container/ContainerExposedDependency.js +9 -0
- package/lib/container/ContainerPlugin.js +3 -1
- package/lib/container/FallbackDependency.js +13 -0
- package/lib/container/FallbackItemDependency.js +3 -0
- package/lib/container/FallbackModule.js +12 -2
- package/lib/container/FallbackModuleFactory.js +1 -1
- package/lib/container/RemoteModule.js +11 -1
- package/lib/container/RemoteRuntimeModule.js +3 -2
- package/lib/container/RemoteToExternalDependency.js +3 -0
- package/lib/css/CssExportsGenerator.js +9 -0
- package/lib/css/CssGenerator.js +5 -1
- package/lib/css/CssLoadingRuntimeModule.js +53 -22
- package/lib/css/CssModulesPlugin.js +253 -74
- package/lib/css/CssParser.js +697 -282
- package/lib/css/walkCssTokens.js +269 -138
- package/lib/debug/ProfilingPlugin.js +33 -12
- package/lib/dependencies/AMDDefineDependency.js +54 -10
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
- package/lib/dependencies/AMDPlugin.js +33 -20
- package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
- package/lib/dependencies/AMDRequireContextDependency.js +15 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
- package/lib/dependencies/AMDRequireDependency.js +16 -1
- package/lib/dependencies/AMDRequireItemDependency.js +6 -0
- package/lib/dependencies/AMDRuntimeModules.js +2 -2
- package/lib/dependencies/CachedConstDependency.js +14 -0
- package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
- package/lib/dependencies/CommonJsExportsDependency.js +16 -0
- package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
- package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
- package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
- package/lib/dependencies/CommonJsPlugin.js +51 -26
- package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
- package/lib/dependencies/CommonJsRequireDependency.js +7 -0
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
- package/lib/dependencies/ConstDependency.js +11 -2
- package/lib/dependencies/ContextDependency.js +15 -2
- package/lib/dependencies/ContextDependencyHelpers.js +3 -3
- package/lib/dependencies/ContextElementDependency.js +8 -0
- package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
- package/lib/dependencies/CriticalDependencyWarning.js +3 -0
- package/lib/dependencies/CssExportDependency.js +8 -0
- package/lib/dependencies/CssImportDependency.js +55 -3
- package/lib/dependencies/CssLocalIdentifierDependency.js +18 -1
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
- package/lib/dependencies/CssUrlDependency.js +46 -16
- package/lib/dependencies/DelegatedSourceDependency.js +3 -0
- package/lib/dependencies/DllEntryDependency.js +14 -0
- package/lib/dependencies/DynamicExports.js +10 -6
- package/lib/dependencies/ExportsInfoDependency.js +25 -4
- package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
- package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
- package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
- package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
- package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
- package/lib/dependencies/HarmonyExports.js +11 -5
- package/lib/dependencies/HarmonyImportDependency.js +10 -1
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
- package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportContextDependency.js +15 -0
- package/lib/dependencies/ImportDependency.js +15 -4
- package/lib/dependencies/ImportEagerDependency.js +7 -4
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
- package/lib/dependencies/ImportMetaPlugin.js +103 -51
- package/lib/dependencies/ImportParserPlugin.js +83 -25
- package/lib/dependencies/ImportPlugin.js +21 -7
- package/lib/dependencies/ImportWeakDependency.js +7 -4
- package/lib/dependencies/JsonExportsDependency.js +9 -1
- package/lib/dependencies/LocalModule.js +16 -0
- package/lib/dependencies/LocalModuleDependency.js +15 -0
- package/lib/dependencies/LocalModulesHelpers.js +18 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
- package/lib/dependencies/ModuleDependency.js +9 -1
- 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 +14 -2
- package/lib/dependencies/PureExpressionDependency.js +10 -1
- package/lib/dependencies/RequireContextDependency.js +6 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
- package/lib/dependencies/RequireContextPlugin.js +19 -6
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
- 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 +5 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
- package/lib/dependencies/RequireIncludePlugin.js +25 -5
- package/lib/dependencies/RequireResolveContextDependency.js +17 -0
- package/lib/dependencies/RequireResolveDependency.js +6 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
- package/lib/dependencies/StaticExportsDependency.js +8 -0
- package/lib/dependencies/SystemPlugin.js +48 -21
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +13 -4
- package/lib/dependencies/URLPlugin.js +31 -18
- 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 +5 -0
- package/lib/dependencies/WorkerDependency.js +47 -3
- package/lib/dependencies/WorkerPlugin.js +105 -32
- package/lib/dependencies/getFunctionExpression.js +7 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
- package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/LazyCompilationPlugin.js +14 -5
- package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
- package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
- package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
- package/lib/ids/HashedModuleIdsPlugin.js +9 -2
- package/lib/ids/IdHelpers.js +6 -0
- package/lib/ids/NamedChunkIdsPlugin.js +13 -1
- package/lib/ids/NamedModuleIdsPlugin.js +14 -3
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -2
- package/lib/index.js +8 -0
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
- package/lib/javascript/BasicEvaluatedExpression.js +137 -11
- package/lib/javascript/ChunkHelpers.js +2 -2
- package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
- package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
- package/lib/javascript/JavascriptModulesPlugin.js +217 -198
- package/lib/javascript/JavascriptParser.js +941 -256
- package/lib/javascript/JavascriptParserHelpers.js +37 -15
- package/lib/javascript/StartupHelpers.js +2 -2
- package/lib/json/JsonData.js +26 -1
- package/lib/json/JsonGenerator.js +21 -7
- package/lib/json/JsonModulesPlugin.js +14 -5
- package/lib/json/JsonParser.js +27 -13
- package/lib/library/AbstractLibraryPlugin.js +4 -0
- package/lib/library/AmdLibraryPlugin.js +22 -6
- package/lib/library/AssignLibraryPlugin.js +19 -5
- package/lib/library/EnableLibraryPlugin.js +4 -0
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
- package/lib/library/ModuleLibraryPlugin.js +8 -4
- package/lib/library/SystemLibraryPlugin.js +2 -1
- package/lib/library/UmdLibraryPlugin.js +24 -2
- package/lib/logging/runtime.js +1 -1
- package/lib/logging/truncateArgs.js +4 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
- package/lib/node/NodeTargetPlugin.js +3 -0
- package/lib/node/NodeTemplatePlugin.js +10 -2
- package/lib/node/NodeWatchFileSystem.js +1 -1
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
- package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
- package/lib/node/nodeConsole.js +2 -4
- package/lib/optimize/AggressiveMergingPlugin.js +8 -0
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
- package/lib/optimize/ConcatenatedModule.js +8 -6
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
- package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
- package/lib/optimize/InnerGraph.js +5 -5
- package/lib/optimize/InnerGraphPlugin.js +57 -48
- package/lib/optimize/LimitChunkCountPlugin.js +29 -4
- package/lib/optimize/MangleExportsPlugin.js +1 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -0
- package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
- package/lib/optimize/RealContentHashPlugin.js +86 -30
- package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
- package/lib/optimize/RuntimeChunkPlugin.js +9 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
- package/lib/optimize/SplitChunksPlugin.js +71 -31
- package/lib/performance/SizeLimitsPlugin.js +7 -4
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
- package/lib/rules/BasicEffectRulePlugin.js +4 -0
- package/lib/rules/BasicMatcherRulePlugin.js +5 -0
- package/lib/rules/RuleSetCompiler.js +3 -3
- package/lib/rules/UseEffectRulePlugin.js +6 -4
- package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
- package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
- package/lib/runtime/BaseUriRuntimeModule.js +8 -4
- 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 +5 -2
- package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
- package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +1 -1
- 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 +13 -4
- package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/schemes/DataUriPlugin.js +16 -3
- package/lib/schemes/HttpUriPlugin.js +38 -0
- package/lib/serialization/ArraySerializer.js +22 -6
- package/lib/serialization/BinaryMiddleware.js +164 -1
- package/lib/serialization/DateObjectSerializer.js +15 -4
- package/lib/serialization/ErrorObjectSerializer.js +23 -8
- package/lib/serialization/FileMiddleware.js +17 -0
- package/lib/serialization/MapObjectSerializer.js +24 -8
- package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
- package/lib/serialization/ObjectMiddleware.js +33 -2
- package/lib/serialization/PlainObjectSerializer.js +23 -12
- package/lib/serialization/RegExpObjectSerializer.js +16 -5
- package/lib/serialization/SetObjectSerializer.js +21 -6
- package/lib/serialization/types.js +1 -1
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedModule.js +13 -2
- package/lib/sharing/ConsumeSharedPlugin.js +4 -0
- package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
- package/lib/sharing/ProvideSharedDependency.js +17 -0
- package/lib/sharing/ProvideSharedModule.js +11 -1
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
- package/lib/sharing/ProvideSharedPlugin.js +22 -21
- package/lib/sharing/ShareRuntimeModule.js +19 -9
- package/lib/sharing/resolveMatchedConfigs.js +1 -1
- package/lib/sharing/utils.js +320 -7
- package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
- package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
- package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
- package/lib/util/AsyncQueue.js +4 -2
- package/lib/util/LazySet.js +10 -2
- package/lib/util/MapHelpers.js +19 -5
- package/lib/util/ParallelismFactorCalculator.js +10 -0
- package/lib/util/Semaphore.js +1 -1
- package/lib/util/StackedCacheMap.js +7 -1
- package/lib/util/StringXor.js +51 -0
- package/lib/util/URLAbsoluteSpecifier.js +1 -1
- package/lib/util/binarySearchBounds.js +49 -0
- package/lib/util/compileBooleanMatcher.js +31 -0
- package/lib/util/createHash.js +35 -13
- package/lib/util/deprecation.js +18 -3
- package/lib/util/deterministicGrouping.js +50 -11
- package/lib/util/findGraphRoots.js +4 -2
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +4 -0
- package/lib/util/internalSerializables.js +1 -0
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +3 -3
- package/lib/util/numberHash.js +75 -21
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/propertyAccess.js +9 -54
- package/lib/util/propertyName.js +79 -0
- package/lib/util/registerExternalSerializer.js +1 -1
- package/lib/util/runtime.js +84 -21
- package/lib/util/semver.js +2 -1
- package/lib/util/serialization.js +10 -0
- package/lib/util/smartGrouping.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
- package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
- package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
- package/lib/wasm-sync/WebAssemblyParser.js +15 -4
- package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
- 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 +26 -9
- package/lib/webpack.js +12 -3
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
- package/module.d.ts +55 -37
- package/package.json +59 -56
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +133 -6
- 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/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +8 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
- package/schemas/plugins/css/CssParserOptions.json +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +1629 -683
@@ -47,6 +47,8 @@ const NAMED_PRESETS = {
|
|
47
47
|
orphanModules: true,
|
48
48
|
runtimeModules: true,
|
49
49
|
exclude: false,
|
50
|
+
errorsSpace: Infinity,
|
51
|
+
warningsSpace: Infinity,
|
50
52
|
modulesSpace: Infinity,
|
51
53
|
chunkModulesSpace: Infinity,
|
52
54
|
assetsSpace: Infinity,
|
@@ -73,6 +75,8 @@ const NAMED_PRESETS = {
|
|
73
75
|
logging: true,
|
74
76
|
runtimeModules: true,
|
75
77
|
exclude: false,
|
78
|
+
errorsSpace: 1000,
|
79
|
+
warningsSpace: 1000,
|
76
80
|
modulesSpace: 1000,
|
77
81
|
assetsSpace: 1000,
|
78
82
|
reasonsSpace: 1000
|
@@ -82,6 +86,8 @@ const NAMED_PRESETS = {
|
|
82
86
|
version: true,
|
83
87
|
timings: true,
|
84
88
|
modules: true,
|
89
|
+
errorsSpace: 0,
|
90
|
+
warningsSpace: 0,
|
85
91
|
modulesSpace: 0,
|
86
92
|
assets: true,
|
87
93
|
assetsSpace: 0,
|
@@ -95,6 +101,7 @@ const NAMED_PRESETS = {
|
|
95
101
|
all: false,
|
96
102
|
errors: true,
|
97
103
|
errorsCount: true,
|
104
|
+
errorsSpace: Infinity,
|
98
105
|
moduleTrace: true,
|
99
106
|
logging: "error"
|
100
107
|
},
|
@@ -102,8 +109,10 @@ const NAMED_PRESETS = {
|
|
102
109
|
all: false,
|
103
110
|
errors: true,
|
104
111
|
errorsCount: true,
|
112
|
+
errorsSpace: Infinity,
|
105
113
|
warnings: true,
|
106
114
|
warningsCount: true,
|
115
|
+
warningsSpace: Infinity,
|
107
116
|
logging: "warn"
|
108
117
|
},
|
109
118
|
summary: {
|
@@ -10,7 +10,14 @@
|
|
10
10
|
/** @typedef {import("./StatsPrinter").StatsPrinterContext} StatsPrinterContext */
|
11
11
|
|
12
12
|
const DATA_URI_CONTENT_LENGTH = 16;
|
13
|
+
const MAX_MODULE_IDENTIFIER_LENGTH = 80;
|
13
14
|
|
15
|
+
/**
|
16
|
+
* @param {number} n a number
|
17
|
+
* @param {string} singular singular
|
18
|
+
* @param {string} plural plural
|
19
|
+
* @returns {string} if n is 1, singular, else plural
|
20
|
+
*/
|
14
21
|
const plural = (n, singular, plural) => (n === 1 ? singular : plural);
|
15
22
|
|
16
23
|
/**
|
@@ -28,6 +35,10 @@ const printSizes = (sizes, { formatSize = n => `${n}` }) => {
|
|
28
35
|
}
|
29
36
|
};
|
30
37
|
|
38
|
+
/**
|
39
|
+
* @param {string} resource resource
|
40
|
+
* @returns {string} resource name for display
|
41
|
+
*/
|
31
42
|
const getResourceName = resource => {
|
32
43
|
const dataUrl = /^data:[^,]+,/.exec(resource);
|
33
44
|
if (!dataUrl) return resource;
|
@@ -40,11 +51,33 @@ const getResourceName = resource => {
|
|
40
51
|
)}..`;
|
41
52
|
};
|
42
53
|
|
54
|
+
/**
|
55
|
+
* @param {string} name module name
|
56
|
+
* @returns {[string,string]} prefix and module name
|
57
|
+
*/
|
43
58
|
const getModuleName = name => {
|
44
59
|
const [, prefix, resource] = /^(.*!)?([^!]*)$/.exec(name);
|
60
|
+
|
61
|
+
if (resource.length > MAX_MODULE_IDENTIFIER_LENGTH) {
|
62
|
+
const truncatedResource = `${resource.slice(
|
63
|
+
0,
|
64
|
+
Math.min(
|
65
|
+
resource.length - /* '...(truncated)'.length */ 14,
|
66
|
+
MAX_MODULE_IDENTIFIER_LENGTH
|
67
|
+
)
|
68
|
+
)}...(truncated)`;
|
69
|
+
|
70
|
+
return [prefix, getResourceName(truncatedResource)];
|
71
|
+
}
|
72
|
+
|
45
73
|
return [prefix, getResourceName(resource)];
|
46
74
|
};
|
47
75
|
|
76
|
+
/**
|
77
|
+
* @param {string} str string
|
78
|
+
* @param {function(string): string} fn function to apply to each line
|
79
|
+
* @returns {string} joined string
|
80
|
+
*/
|
48
81
|
const mapLines = (str, fn) => str.split("\n").map(fn).join("\n");
|
49
82
|
|
50
83
|
/**
|
@@ -57,6 +90,12 @@ const isValidId = id => {
|
|
57
90
|
return typeof id === "number" || id;
|
58
91
|
};
|
59
92
|
|
93
|
+
/**
|
94
|
+
* @template T
|
95
|
+
* @param {Array<T>} list of items
|
96
|
+
* @param {number} count number of items to show
|
97
|
+
* @returns {string} string representation of list
|
98
|
+
*/
|
60
99
|
const moreCount = (list, count) => {
|
61
100
|
return list && list.length > 0 ? `+ ${count}` : `${count}`;
|
62
101
|
};
|
@@ -589,6 +628,8 @@ const SIMPLE_PRINTERS = {
|
|
589
628
|
"error.message": (message, { bold, formatError }) =>
|
590
629
|
message.includes("\u001b[") ? message : bold(formatError(message)),
|
591
630
|
"error.details": (details, { formatError }) => formatError(details),
|
631
|
+
"error.filteredDetails": filteredDetails =>
|
632
|
+
filteredDetails ? `+ ${filteredDetails} hidden lines` : undefined,
|
592
633
|
"error.stack": stack => stack,
|
593
634
|
"error.moduleTrace": moduleTrace => undefined,
|
594
635
|
"error.separator!": () => "\n",
|
@@ -689,6 +730,8 @@ const ERROR_PREFERRED_ORDER = [
|
|
689
730
|
"separator!",
|
690
731
|
"details",
|
691
732
|
"separator!",
|
733
|
+
"filteredDetails",
|
734
|
+
"separator!",
|
692
735
|
"stack",
|
693
736
|
"separator!",
|
694
737
|
"missing",
|
package/lib/util/AsyncQueue.js
CHANGED
@@ -70,7 +70,7 @@ class AsyncQueue {
|
|
70
70
|
this._entries = new Map();
|
71
71
|
/** @type {ArrayQueue<AsyncQueueEntry<T, K, R>>} */
|
72
72
|
this._queued = new ArrayQueue();
|
73
|
-
/** @type {AsyncQueue<any, any, any>[]} */
|
73
|
+
/** @type {AsyncQueue<any, any, any>[] | undefined} */
|
74
74
|
this._children = undefined;
|
75
75
|
this._activeTasks = 0;
|
76
76
|
this._willEnsureProcessing = false;
|
@@ -159,7 +159,9 @@ class AsyncQueue {
|
|
159
159
|
*/
|
160
160
|
invalidate(item) {
|
161
161
|
const key = this._getKey(item);
|
162
|
-
const entry =
|
162
|
+
const entry =
|
163
|
+
/** @type {AsyncQueueEntry<T, K, R>} */
|
164
|
+
(this._entries.get(key));
|
163
165
|
this._entries.delete(key);
|
164
166
|
if (entry.state === QUEUED_STATE) {
|
165
167
|
this._queued.delete(entry);
|
package/lib/util/LazySet.js
CHANGED
@@ -87,7 +87,7 @@ class LazySet {
|
|
87
87
|
|
88
88
|
/**
|
89
89
|
* @param {T} item an item
|
90
|
-
* @returns {
|
90
|
+
* @returns {LazySet<T>} itself
|
91
91
|
*/
|
92
92
|
add(item) {
|
93
93
|
this._set.add(item);
|
@@ -96,7 +96,7 @@ class LazySet {
|
|
96
96
|
|
97
97
|
/**
|
98
98
|
* @param {Iterable<T> | LazySet<T>} iterable a immutable iterable or another immutable LazySet which will eventually be merged into the Set
|
99
|
-
* @returns {
|
99
|
+
* @returns {LazySet<T>} itself
|
100
100
|
*/
|
101
101
|
addAll(iterable) {
|
102
102
|
if (this._deopt) {
|
@@ -187,12 +187,20 @@ class LazySet {
|
|
187
187
|
return "LazySet";
|
188
188
|
}
|
189
189
|
|
190
|
+
/**
|
191
|
+
* @param {import("../serialization/ObjectMiddleware").ObjectSerializerContext} context context
|
192
|
+
*/
|
190
193
|
serialize({ write }) {
|
191
194
|
if (this._needMerge) this._merge();
|
192
195
|
write(this._set.size);
|
193
196
|
for (const item of this._set) write(item);
|
194
197
|
}
|
195
198
|
|
199
|
+
/**
|
200
|
+
* @template T
|
201
|
+
* @param {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} context context
|
202
|
+
* @returns {LazySet<T>} lazy set
|
203
|
+
*/
|
196
204
|
static deserialize({ read }) {
|
197
205
|
const count = read();
|
198
206
|
const items = [];
|
package/lib/util/MapHelpers.js
CHANGED
@@ -6,16 +6,30 @@
|
|
6
6
|
"use strict";
|
7
7
|
|
8
8
|
/**
|
9
|
+
* getOrInsert is a helper function for maps that allows you to get a value
|
10
|
+
* from a map if it exists, or insert a new value if it doesn't. If it value doesn't
|
11
|
+
* exist, it will be computed by the provided function.
|
12
|
+
*
|
9
13
|
* @template K
|
10
14
|
* @template V
|
11
|
-
* @param {Map<K, V>} map
|
12
|
-
* @param {K} key
|
13
|
-
* @param {function(): V} computer compute value
|
14
|
-
* @returns {V} value
|
15
|
+
* @param {Map<K, V>} map The map object to check
|
16
|
+
* @param {K} key The key to check
|
17
|
+
* @param {function(): V} computer function which will compute the value if it doesn't exist
|
18
|
+
* @returns {V} The value from the map, or the computed value
|
19
|
+
*
|
20
|
+
* @example
|
21
|
+
* ```js
|
22
|
+
* const map = new Map();
|
23
|
+
* const value = getOrInsert(map, "key", () => "value");
|
24
|
+
* console.log(value); // "value"
|
25
|
+
* ```
|
15
26
|
*/
|
16
|
-
exports.
|
27
|
+
exports.getOrInsert = (map, key, computer) => {
|
28
|
+
// Grab key from map
|
17
29
|
const value = map.get(key);
|
30
|
+
// If the value already exists, return it
|
18
31
|
if (value !== undefined) return value;
|
32
|
+
// Otherwise compute the value, set it in the map, and return it
|
19
33
|
const newValue = computer();
|
20
34
|
map.set(key, newValue);
|
21
35
|
return newValue;
|
@@ -7,12 +7,22 @@
|
|
7
7
|
|
8
8
|
const binarySearchBounds = require("../util/binarySearchBounds");
|
9
9
|
|
10
|
+
/** @typedef {function(number): void} Callback */
|
11
|
+
|
10
12
|
class ParallelismFactorCalculator {
|
11
13
|
constructor() {
|
14
|
+
/** @type {number[]} */
|
12
15
|
this._rangePoints = [];
|
16
|
+
/** @type {Callback[]} */
|
13
17
|
this._rangeCallbacks = [];
|
14
18
|
}
|
15
19
|
|
20
|
+
/**
|
21
|
+
* @param {number} start range start
|
22
|
+
* @param {number} end range end
|
23
|
+
* @param {Callback} callback callback
|
24
|
+
* @returns {void}
|
25
|
+
*/
|
16
26
|
range(start, end, callback) {
|
17
27
|
if (start === end) return callback(1);
|
18
28
|
this._rangePoints.push(start);
|
package/lib/util/Semaphore.js
CHANGED
@@ -19,7 +19,7 @@ class StackedCacheMap {
|
|
19
19
|
|
20
20
|
/**
|
21
21
|
* @param {ReadonlyMap<K, V>} map map to add
|
22
|
-
* @param {boolean} immutable if 'map' is immutable and StackedCacheMap can keep referencing it
|
22
|
+
* @param {boolean=} immutable if 'map' is immutable and StackedCacheMap can keep referencing it
|
23
23
|
*/
|
24
24
|
addAll(map, immutable) {
|
25
25
|
if (immutable) {
|
@@ -83,6 +83,9 @@ class StackedCacheMap {
|
|
83
83
|
this.map.clear();
|
84
84
|
}
|
85
85
|
|
86
|
+
/**
|
87
|
+
* @returns {number} size of the map
|
88
|
+
*/
|
86
89
|
get size() {
|
87
90
|
let size = this.map.size;
|
88
91
|
for (const map of this.stack) {
|
@@ -91,6 +94,9 @@ class StackedCacheMap {
|
|
91
94
|
return size;
|
92
95
|
}
|
93
96
|
|
97
|
+
/**
|
98
|
+
* @returns {Iterator<[K, V]>} iterator
|
99
|
+
*/
|
94
100
|
[Symbol.iterator]() {
|
95
101
|
const iterators = this.stack.map(map => map[Symbol.iterator]());
|
96
102
|
let current = this.map[Symbol.iterator]();
|
package/lib/util/StringXor.js
CHANGED
@@ -5,12 +5,46 @@
|
|
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
|
+
*
|
21
|
+
* @example
|
22
|
+
* ```js
|
23
|
+
* const xor = new StringXor();
|
24
|
+
* xor.add('hello');
|
25
|
+
* xor.add('world');
|
26
|
+
* console.log(xor.toString());
|
27
|
+
* ```
|
28
|
+
*
|
29
|
+
* @example
|
30
|
+
* ```js
|
31
|
+
* const xor = new StringXor();
|
32
|
+
* xor.add('foo');
|
33
|
+
* xor.add('bar');
|
34
|
+
* const hash = createHash('sha256');
|
35
|
+
* hash.update(xor.toString());
|
36
|
+
* console.log(hash.digest('hex'));
|
37
|
+
* ```
|
38
|
+
*/
|
8
39
|
class StringXor {
|
9
40
|
constructor() {
|
41
|
+
/** @type {Buffer|undefined} */
|
10
42
|
this._value = undefined;
|
11
43
|
}
|
12
44
|
|
13
45
|
/**
|
46
|
+
* Adds a string to the current StringXor object.
|
47
|
+
*
|
14
48
|
* @param {string} str string
|
15
49
|
* @returns {void}
|
16
50
|
*/
|
@@ -18,6 +52,10 @@ class StringXor {
|
|
18
52
|
const len = str.length;
|
19
53
|
const value = this._value;
|
20
54
|
if (value === undefined) {
|
55
|
+
/**
|
56
|
+
* We are choosing to use Buffer.allocUnsafe() because it is often faster than Buffer.alloc() because
|
57
|
+
* it allocates a new buffer of the specified size without initializing the memory.
|
58
|
+
*/
|
21
59
|
const newValue = (this._value = Buffer.allocUnsafe(len));
|
22
60
|
for (let i = 0; i < len; i++) {
|
23
61
|
newValue[i] = str.charCodeAt(i);
|
@@ -41,11 +79,24 @@ class StringXor {
|
|
41
79
|
}
|
42
80
|
}
|
43
81
|
|
82
|
+
/**
|
83
|
+
* Returns a string that represents the current state of the StringXor object. We chose to use "latin1" encoding
|
84
|
+
* here because "latin1" encoding is a single-byte encoding that can represent all characters in the
|
85
|
+
* [ISO-8859-1 character set](https://en.wikipedia.org/wiki/ISO/IEC_8859-1). This is useful when working
|
86
|
+
* with binary data that needs to be represented as a string.
|
87
|
+
*
|
88
|
+
* @returns {string} Returns a string that represents the current state of the StringXor object.
|
89
|
+
*/
|
44
90
|
toString() {
|
45
91
|
const value = this._value;
|
46
92
|
return value === undefined ? "" : value.toString("latin1");
|
47
93
|
}
|
48
94
|
|
95
|
+
/**
|
96
|
+
* Updates the hash with the current state of the StringXor object.
|
97
|
+
*
|
98
|
+
* @param {Hash} hash Hash instance
|
99
|
+
*/
|
49
100
|
updateHash(hash) {
|
50
101
|
const value = this._value;
|
51
102
|
if (value !== undefined) hash.update(value);
|
@@ -76,7 +76,7 @@ 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);
|
@@ -8,6 +8,28 @@
|
|
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
|
+
*
|
26
|
+
* @param {string} funcName The name of the function to be compiled.
|
27
|
+
* @param {string} predicate The predicate / comparison operator to be used in the binary search.
|
28
|
+
* @param {boolean} reversed Whether the search should be reversed.
|
29
|
+
* @param {string[]} extraArgs Extra arguments to be passed to the function.
|
30
|
+
* @param {boolean=} earlyOut Whether the search should return as soon as a match is found.
|
31
|
+
* @returns {string} The compiled binary search function.
|
32
|
+
*/
|
11
33
|
const compileSearch = (funcName, predicate, reversed, extraArgs, earlyOut) => {
|
12
34
|
const code = [
|
13
35
|
"function ",
|
@@ -43,6 +65,18 @@ const compileSearch = (funcName, predicate, reversed, extraArgs, earlyOut) => {
|
|
43
65
|
return code.join("");
|
44
66
|
};
|
45
67
|
|
68
|
+
/**
|
69
|
+
* This helper functions generate code for two binary search functions:
|
70
|
+
* A(): Performs a binary search on an array using the comparison operator specified.
|
71
|
+
* P(): Performs a binary search on an array using a _custom comparison function_
|
72
|
+
* `c(x,y)` **and** comparison operator specified by `predicate`.
|
73
|
+
*
|
74
|
+
* @param {BinarySearchPredicate} predicate The predicate / comparison operator to be used in the binary search.
|
75
|
+
* @param {boolean} reversed Whether the search should be reversed.
|
76
|
+
* @param {SearchPredicateSuffix} suffix The suffix to be used in the function name.
|
77
|
+
* @param {boolean=} earlyOut Whether the search should return as soon as a match is found.
|
78
|
+
* @returns {function} The compiled binary search function.
|
79
|
+
*/
|
46
80
|
const compileBoundsSearch = (predicate, reversed, suffix, earlyOut) => {
|
47
81
|
const arg1 = compileSearch(
|
48
82
|
"A",
|
@@ -77,6 +111,21 @@ return dispatchBinarySearch";
|
|
77
111
|
return result();
|
78
112
|
};
|
79
113
|
|
114
|
+
/**
|
115
|
+
* These functions are used to perform binary searches on arrays.
|
116
|
+
*
|
117
|
+
* @example
|
118
|
+
* ```js
|
119
|
+
* const { gt, le} = require("./binarySearchBounds");
|
120
|
+
* const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
|
121
|
+
*
|
122
|
+
* // Find the index of the first element greater than 5
|
123
|
+
* const index1 = gt(arr, 5); // index1 === 3
|
124
|
+
*
|
125
|
+
* // Find the index of the first element less than or equal to 5
|
126
|
+
* const index2 = le(arr, 5); // index2 === 4
|
127
|
+
* ```
|
128
|
+
*/
|
80
129
|
module.exports = {
|
81
130
|
ge: compileBoundsSearch(">=", false, "GE"),
|
82
131
|
gt: compileBoundsSearch(">", false, "GT"),
|
@@ -5,10 +5,18 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
/**
|
9
|
+
* @param {string} str string
|
10
|
+
* @returns {string} quoted meta
|
11
|
+
*/
|
8
12
|
const quoteMeta = str => {
|
9
13
|
return str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&");
|
10
14
|
};
|
11
15
|
|
16
|
+
/**
|
17
|
+
* @param {string} str string
|
18
|
+
* @returns {string} string
|
19
|
+
*/
|
12
20
|
const toSimpleString = str => {
|
13
21
|
if (`${+str}` === str) {
|
14
22
|
return str;
|
@@ -49,19 +57,28 @@ const compileBooleanMatcherFromLists = (positiveItems, negativeItems) => {
|
|
49
57
|
}
|
50
58
|
};
|
51
59
|
|
60
|
+
/**
|
61
|
+
* @param {Set<string>} itemsSet items set
|
62
|
+
* @param {(str: string) => string | false} getKey get key function
|
63
|
+
* @param {(str: Array<string>) => boolean} condition condition
|
64
|
+
* @returns {Array<Array<string>>} list of common items
|
65
|
+
*/
|
52
66
|
const popCommonItems = (itemsSet, getKey, condition) => {
|
67
|
+
/** @type {Map<string, Array<string>>} */
|
53
68
|
const map = new Map();
|
54
69
|
for (const item of itemsSet) {
|
55
70
|
const key = getKey(item);
|
56
71
|
if (key) {
|
57
72
|
let list = map.get(key);
|
58
73
|
if (list === undefined) {
|
74
|
+
/** @type {Array<string>} */
|
59
75
|
list = [];
|
60
76
|
map.set(key, list);
|
61
77
|
}
|
62
78
|
list.push(item);
|
63
79
|
}
|
64
80
|
}
|
81
|
+
/** @type {Array<Array<string>>} */
|
65
82
|
const result = [];
|
66
83
|
for (const list of map.values()) {
|
67
84
|
if (condition(list)) {
|
@@ -74,6 +91,10 @@ const popCommonItems = (itemsSet, getKey, condition) => {
|
|
74
91
|
return result;
|
75
92
|
};
|
76
93
|
|
94
|
+
/**
|
95
|
+
* @param {Array<string>} items items
|
96
|
+
* @returns {string} common prefix
|
97
|
+
*/
|
77
98
|
const getCommonPrefix = items => {
|
78
99
|
let prefix = items[0];
|
79
100
|
for (let i = 1; i < items.length; i++) {
|
@@ -88,6 +109,10 @@ const getCommonPrefix = items => {
|
|
88
109
|
return prefix;
|
89
110
|
};
|
90
111
|
|
112
|
+
/**
|
113
|
+
* @param {Array<string>} items items
|
114
|
+
* @returns {string} common suffix
|
115
|
+
*/
|
91
116
|
const getCommonSuffix = items => {
|
92
117
|
let suffix = items[0];
|
93
118
|
for (let i = 1; i < items.length; i++) {
|
@@ -102,10 +127,15 @@ const getCommonSuffix = items => {
|
|
102
127
|
return suffix;
|
103
128
|
};
|
104
129
|
|
130
|
+
/**
|
131
|
+
* @param {Array<string>} itemsArr array of items
|
132
|
+
* @returns {string} regexp
|
133
|
+
*/
|
105
134
|
const itemsToRegexp = itemsArr => {
|
106
135
|
if (itemsArr.length === 1) {
|
107
136
|
return quoteMeta(itemsArr[0]);
|
108
137
|
}
|
138
|
+
/** @type {Array<string>} */
|
109
139
|
const finishedItems = [];
|
110
140
|
|
111
141
|
// merge single char items: (a|b|c|d|ef) => ([abcd]|ef)
|
@@ -146,6 +176,7 @@ const itemsToRegexp = itemsArr => {
|
|
146
176
|
|
147
177
|
// special case for 2 items with common suffix
|
148
178
|
if (finishedItems.length === 0 && items.size === 2) {
|
179
|
+
/** @type {Iterator<string>} */
|
149
180
|
const it = items[Symbol.iterator]();
|
150
181
|
const a = it.next().value;
|
151
182
|
const b = it.next().value;
|
package/lib/util/createHash.js
CHANGED
@@ -11,11 +11,14 @@ const BULK_SIZE = 2000;
|
|
11
11
|
|
12
12
|
// We are using an object instead of a Map as this will stay static during the runtime
|
13
13
|
// so access to it can be optimized by v8
|
14
|
+
/** @type {Object<string, Map<string, string>>} */
|
14
15
|
const digestCaches = {};
|
15
16
|
|
17
|
+
/** @typedef {function(): Hash} HashFactory */
|
18
|
+
|
16
19
|
class BulkUpdateDecorator extends Hash {
|
17
20
|
/**
|
18
|
-
* @param {Hash |
|
21
|
+
* @param {Hash | HashFactory} hashOrFactory function to create a hash
|
19
22
|
* @param {string=} hashKey key for caching
|
20
23
|
*/
|
21
24
|
constructor(hashOrFactory, hashKey) {
|
@@ -43,7 +46,8 @@ class BulkUpdateDecorator extends Hash {
|
|
43
46
|
typeof data !== "string" ||
|
44
47
|
data.length > BULK_SIZE
|
45
48
|
) {
|
46
|
-
if (this.hash === undefined)
|
49
|
+
if (this.hash === undefined)
|
50
|
+
this.hash = /** @type {HashFactory} */ (this.hashFactory)();
|
47
51
|
if (this.buffer.length > 0) {
|
48
52
|
this.hash.update(this.buffer);
|
49
53
|
this.buffer = "";
|
@@ -52,7 +56,8 @@ class BulkUpdateDecorator extends Hash {
|
|
52
56
|
} else {
|
53
57
|
this.buffer += data;
|
54
58
|
if (this.buffer.length > BULK_SIZE) {
|
55
|
-
if (this.hash === undefined)
|
59
|
+
if (this.hash === undefined)
|
60
|
+
this.hash = /** @type {HashFactory} */ (this.hashFactory)();
|
56
61
|
this.hash.update(this.buffer);
|
57
62
|
this.buffer = "";
|
58
63
|
}
|
@@ -77,7 +82,7 @@ class BulkUpdateDecorator extends Hash {
|
|
77
82
|
}
|
78
83
|
const cacheEntry = digestCache.get(buffer);
|
79
84
|
if (cacheEntry !== undefined) return cacheEntry;
|
80
|
-
this.hash = this.hashFactory();
|
85
|
+
this.hash = /** @type {HashFactory} */ (this.hashFactory)();
|
81
86
|
}
|
82
87
|
if (buffer.length > 0) {
|
83
88
|
this.hash.update(buffer);
|
@@ -107,10 +112,13 @@ class DebugHash extends Hash {
|
|
107
112
|
*/
|
108
113
|
update(data, inputEncoding) {
|
109
114
|
if (typeof data !== "string") data = data.toString("utf-8");
|
110
|
-
|
111
|
-
|
115
|
+
const prefix = Buffer.from("@webpack-debug-digest@").toString("hex");
|
116
|
+
if (data.startsWith(prefix)) {
|
117
|
+
data = Buffer.from(data.slice(prefix.length), "hex").toString();
|
112
118
|
}
|
113
|
-
this.string += `[${data}](${
|
119
|
+
this.string += `[${data}](${
|
120
|
+
/** @type {string} */ (new Error().stack).split("\n", 3)[2]
|
121
|
+
})\n`;
|
114
122
|
return this;
|
115
123
|
}
|
116
124
|
|
@@ -120,18 +128,22 @@ class DebugHash extends Hash {
|
|
120
128
|
* @returns {string|Buffer} digest
|
121
129
|
*/
|
122
130
|
digest(encoding) {
|
123
|
-
return "debug-digest
|
131
|
+
return Buffer.from("@webpack-debug-digest@" + this.string).toString("hex");
|
124
132
|
}
|
125
133
|
}
|
126
134
|
|
135
|
+
/** @type {typeof import("crypto") | undefined} */
|
127
136
|
let crypto = undefined;
|
137
|
+
/** @type {typeof import("./hash/xxhash64") | undefined} */
|
128
138
|
let createXXHash64 = undefined;
|
139
|
+
/** @type {typeof import("./hash/md4") | undefined} */
|
129
140
|
let createMd4 = undefined;
|
141
|
+
/** @type {typeof import("./hash/BatchedHash") | undefined} */
|
130
142
|
let BatchedHash = undefined;
|
131
143
|
|
132
144
|
/**
|
133
145
|
* Creates a hash by name or function
|
134
|
-
* @param {string | typeof Hash} algorithm the algorithm name or a constructor creating a hash
|
146
|
+
* @param {string | typeof Hash | undefined} algorithm the algorithm name or a constructor creating a hash
|
135
147
|
* @returns {Hash} the hash
|
136
148
|
*/
|
137
149
|
module.exports = algorithm => {
|
@@ -149,7 +161,9 @@ module.exports = algorithm => {
|
|
149
161
|
BatchedHash = require("./hash/BatchedHash");
|
150
162
|
}
|
151
163
|
}
|
152
|
-
return new BatchedHash(
|
164
|
+
return new /** @type {typeof import("./hash/BatchedHash")} */ (
|
165
|
+
BatchedHash
|
166
|
+
)(createXXHash64());
|
153
167
|
case "md4":
|
154
168
|
if (createMd4 === undefined) {
|
155
169
|
createMd4 = require("./hash/md4");
|
@@ -157,14 +171,22 @@ module.exports = algorithm => {
|
|
157
171
|
BatchedHash = require("./hash/BatchedHash");
|
158
172
|
}
|
159
173
|
}
|
160
|
-
return new BatchedHash(
|
174
|
+
return new /** @type {typeof import("./hash/BatchedHash")} */ (
|
175
|
+
BatchedHash
|
176
|
+
)(createMd4());
|
161
177
|
case "native-md4":
|
162
178
|
if (crypto === undefined) crypto = require("crypto");
|
163
|
-
return new BulkUpdateDecorator(
|
179
|
+
return new BulkUpdateDecorator(
|
180
|
+
() => /** @type {typeof import("crypto")} */ (crypto).createHash("md4"),
|
181
|
+
"md4"
|
182
|
+
);
|
164
183
|
default:
|
165
184
|
if (crypto === undefined) crypto = require("crypto");
|
166
185
|
return new BulkUpdateDecorator(
|
167
|
-
() =>
|
186
|
+
() =>
|
187
|
+
/** @type {typeof import("crypto")} */ (crypto).createHash(
|
188
|
+
/** @type {string} */ (algorithm)
|
189
|
+
),
|
168
190
|
algorithm
|
169
191
|
);
|
170
192
|
}
|