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
@@ -44,21 +44,30 @@ Technically any value can be used.
|
|
44
44
|
*/
|
45
45
|
|
46
46
|
/**
|
47
|
-
* @typedef {
|
47
|
+
* @typedef {object} ObjectSerializerContext
|
48
48
|
* @property {function(any): void} write
|
49
|
+
* @property {(function(any): void)=} writeLazy
|
50
|
+
* @property {(function(any, object=): (() => Promise<any> | any))=} writeSeparate
|
51
|
+
* @property {function(any): void} setCircularReference
|
49
52
|
*/
|
50
53
|
|
51
54
|
/**
|
52
|
-
* @typedef {
|
55
|
+
* @typedef {object} ObjectDeserializerContext
|
53
56
|
* @property {function(): any} read
|
57
|
+
* @property {function(any): void} setCircularReference
|
54
58
|
*/
|
55
59
|
|
56
60
|
/**
|
57
|
-
* @typedef {
|
61
|
+
* @typedef {object} ObjectSerializer
|
58
62
|
* @property {function(any, ObjectSerializerContext): void} serialize
|
59
63
|
* @property {function(ObjectDeserializerContext): any} deserialize
|
60
64
|
*/
|
61
65
|
|
66
|
+
/**
|
67
|
+
* @template T
|
68
|
+
* @param {Set<T>} set set
|
69
|
+
* @param {number} size count of items to keep
|
70
|
+
*/
|
62
71
|
const setSetSize = (set, size) => {
|
63
72
|
let i = 0;
|
64
73
|
for (const item of set) {
|
@@ -68,6 +77,11 @@ const setSetSize = (set, size) => {
|
|
68
77
|
}
|
69
78
|
};
|
70
79
|
|
80
|
+
/**
|
81
|
+
* @template K, X
|
82
|
+
* @param {Map<K, X>} map map
|
83
|
+
* @param {number} size count of items to keep
|
84
|
+
*/
|
71
85
|
const setMapSize = (map, size) => {
|
72
86
|
let i = 0;
|
73
87
|
for (const item of map.keys()) {
|
@@ -95,9 +109,12 @@ const ESCAPE_UNDEFINED = false;
|
|
95
109
|
|
96
110
|
const CURRENT_VERSION = 2;
|
97
111
|
|
112
|
+
/** @type {Map<Constructor, { request?: string, name?: string | number | null, serializer?: ObjectSerializer }>} */
|
98
113
|
const serializers = new Map();
|
114
|
+
/** @type {Map<string | number, ObjectSerializer>} */
|
99
115
|
const serializerInversed = new Map();
|
100
116
|
|
117
|
+
/** @type {Set<string>} */
|
101
118
|
const loadedRequests = new Set();
|
102
119
|
|
103
120
|
const NOT_SERIALIZABLE = {};
|
@@ -120,7 +137,9 @@ jsTypes.set(TypeError, new ErrorObjectSerializer(TypeError));
|
|
120
137
|
// If in a sandboxed environment (e. g. jest), this escapes the sandbox and registers
|
121
138
|
// real Object and Array types to. These types may occur in the wild too, e. g. when
|
122
139
|
// using Structured Clone in postMessage.
|
140
|
+
// eslint-disable-next-line n/exports-style
|
123
141
|
if (exports.constructor !== Object) {
|
142
|
+
// eslint-disable-next-line jsdoc/check-types, n/exports-style
|
124
143
|
const Obj = /** @type {typeof Object} */ (exports.constructor);
|
125
144
|
const Fn = /** @type {typeof Function} */ (Obj.constructor);
|
126
145
|
for (const [type, config] of Array.from(jsTypes)) {
|
@@ -143,7 +162,10 @@ if (exports.constructor !== Object) {
|
|
143
162
|
}
|
144
163
|
|
145
164
|
for (const { request, name, serializer } of serializers.values()) {
|
146
|
-
serializerInversed.set(
|
165
|
+
serializerInversed.set(
|
166
|
+
`${request}/${name}`,
|
167
|
+
/** @type {ObjectSerializer} */ (serializer)
|
168
|
+
);
|
147
169
|
}
|
148
170
|
|
149
171
|
/** @type {Map<RegExp, (request: string) => boolean>} */
|
@@ -164,6 +186,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
164
186
|
this.extendContext = extendContext;
|
165
187
|
this._hashFunction = hashFunction;
|
166
188
|
}
|
189
|
+
|
167
190
|
/**
|
168
191
|
* @param {RegExp} regExp RegExp for which the request is tested
|
169
192
|
* @param {function(string): boolean} loader loader to load the request, returns true when successful
|
@@ -176,12 +199,12 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
176
199
|
/**
|
177
200
|
* @param {Constructor} Constructor the constructor
|
178
201
|
* @param {string} request the request which will be required when deserializing
|
179
|
-
* @param {string} name the name to make multiple serializer unique when sharing a request
|
202
|
+
* @param {string | null} name the name to make multiple serializer unique when sharing a request
|
180
203
|
* @param {ObjectSerializer} serializer the serializer
|
181
204
|
* @returns {void}
|
182
205
|
*/
|
183
206
|
static register(Constructor, request, name, serializer) {
|
184
|
-
const key = request
|
207
|
+
const key = `${request}/${name}`;
|
185
208
|
|
186
209
|
if (serializers.has(Constructor)) {
|
187
210
|
throw new Error(
|
@@ -240,8 +263,13 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
240
263
|
return config;
|
241
264
|
}
|
242
265
|
|
266
|
+
/**
|
267
|
+
* @param {string} request request
|
268
|
+
* @param {TODO} name name
|
269
|
+
* @returns {ObjectSerializer} serializer
|
270
|
+
*/
|
243
271
|
static getDeserializerFor(request, name) {
|
244
|
-
const key = request
|
272
|
+
const key = `${request}/${name}`;
|
245
273
|
const serializer = serializerInversed.get(key);
|
246
274
|
|
247
275
|
if (serializer === undefined) {
|
@@ -251,15 +279,20 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
251
279
|
return serializer;
|
252
280
|
}
|
253
281
|
|
282
|
+
/**
|
283
|
+
* @param {string} request request
|
284
|
+
* @param {TODO} name name
|
285
|
+
* @returns {ObjectSerializer} serializer
|
286
|
+
*/
|
254
287
|
static _getDeserializerForWithoutError(request, name) {
|
255
|
-
const key = request
|
288
|
+
const key = `${request}/${name}`;
|
256
289
|
const serializer = serializerInversed.get(key);
|
257
290
|
return serializer;
|
258
291
|
}
|
259
292
|
|
260
293
|
/**
|
261
294
|
* @param {DeserializedType} data data
|
262
|
-
* @param {
|
295
|
+
* @param {object} context context object
|
263
296
|
* @returns {SerializedType|Promise<SerializedType>} serialized data
|
264
297
|
*/
|
265
298
|
serialize(data, context) {
|
@@ -285,17 +318,16 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
285
318
|
}
|
286
319
|
bufferDedupeMap.set(len, [entry, buf]);
|
287
320
|
return buf;
|
288
|
-
} else {
|
289
|
-
const hash = toHash(entry, this._hashFunction);
|
290
|
-
const newMap = new Map();
|
291
|
-
newMap.set(hash, entry);
|
292
|
-
bufferDedupeMap.set(len, newMap);
|
293
|
-
const hashBuf = toHash(buf, this._hashFunction);
|
294
|
-
if (hash === hashBuf) {
|
295
|
-
return entry;
|
296
|
-
}
|
297
|
-
return buf;
|
298
321
|
}
|
322
|
+
const hash = toHash(entry, this._hashFunction);
|
323
|
+
const newMap = new Map();
|
324
|
+
newMap.set(hash, entry);
|
325
|
+
bufferDedupeMap.set(len, newMap);
|
326
|
+
const hashBuf = toHash(buf, this._hashFunction);
|
327
|
+
if (hash === hashBuf) {
|
328
|
+
return entry;
|
329
|
+
}
|
330
|
+
return buf;
|
299
331
|
} else if (Array.isArray(entry)) {
|
300
332
|
if (entry.length < 16) {
|
301
333
|
for (const item of entry) {
|
@@ -305,32 +337,29 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
305
337
|
}
|
306
338
|
entry.push(buf);
|
307
339
|
return buf;
|
308
|
-
} else {
|
309
|
-
const newMap = new Map();
|
310
|
-
const hash = toHash(buf, this._hashFunction);
|
311
|
-
let found;
|
312
|
-
for (const item of entry) {
|
313
|
-
const itemHash = toHash(item, this._hashFunction);
|
314
|
-
newMap.set(itemHash, item);
|
315
|
-
if (found === undefined && itemHash === hash) found = item;
|
316
|
-
}
|
317
|
-
bufferDedupeMap.set(len, newMap);
|
318
|
-
if (found === undefined) {
|
319
|
-
newMap.set(hash, buf);
|
320
|
-
return buf;
|
321
|
-
} else {
|
322
|
-
return found;
|
323
|
-
}
|
324
340
|
}
|
325
|
-
|
341
|
+
const newMap = new Map();
|
326
342
|
const hash = toHash(buf, this._hashFunction);
|
327
|
-
|
328
|
-
|
329
|
-
|
343
|
+
let found;
|
344
|
+
for (const item of entry) {
|
345
|
+
const itemHash = toHash(item, this._hashFunction);
|
346
|
+
newMap.set(itemHash, item);
|
347
|
+
if (found === undefined && itemHash === hash) found = item;
|
330
348
|
}
|
331
|
-
|
332
|
-
|
349
|
+
bufferDedupeMap.set(len, newMap);
|
350
|
+
if (found === undefined) {
|
351
|
+
newMap.set(hash, buf);
|
352
|
+
return buf;
|
353
|
+
}
|
354
|
+
return found;
|
333
355
|
}
|
356
|
+
const hash = toHash(buf, this._hashFunction);
|
357
|
+
const item = entry.get(hash);
|
358
|
+
if (item !== undefined) {
|
359
|
+
return item;
|
360
|
+
}
|
361
|
+
entry.set(hash, buf);
|
362
|
+
return buf;
|
334
363
|
};
|
335
364
|
let currentPosTypeLookup = 0;
|
336
365
|
let objectTypeLookup = new Map();
|
@@ -354,7 +383,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
354
383
|
if (request) {
|
355
384
|
return `${request}${name ? `.${name}` : ""}`;
|
356
385
|
}
|
357
|
-
} catch (
|
386
|
+
} catch (_err) {
|
358
387
|
// ignore -> fallback
|
359
388
|
}
|
360
389
|
if (typeof item === "object" && item !== null) {
|
@@ -372,10 +401,13 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
372
401
|
", "
|
373
402
|
)} }`;
|
374
403
|
}
|
404
|
+
if (typeof item === "bigint") {
|
405
|
+
return `BigInt ${item}n`;
|
406
|
+
}
|
375
407
|
try {
|
376
408
|
return `${item}`;
|
377
|
-
} catch (
|
378
|
-
return `(${
|
409
|
+
} catch (err) {
|
410
|
+
return `(${err.message})`;
|
379
411
|
}
|
380
412
|
})
|
381
413
|
.join(" -> ");
|
@@ -385,16 +417,16 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
385
417
|
write(value, key) {
|
386
418
|
try {
|
387
419
|
process(value);
|
388
|
-
} catch (
|
389
|
-
if (
|
420
|
+
} catch (err) {
|
421
|
+
if (err !== NOT_SERIALIZABLE) {
|
390
422
|
if (hasDebugInfoAttached === undefined)
|
391
423
|
hasDebugInfoAttached = new WeakSet();
|
392
|
-
if (!hasDebugInfoAttached.has(
|
393
|
-
|
394
|
-
hasDebugInfoAttached.add(
|
424
|
+
if (!hasDebugInfoAttached.has(err)) {
|
425
|
+
err.message += `\nwhile serializing ${stackToString(value)}`;
|
426
|
+
hasDebugInfoAttached.add(err);
|
395
427
|
}
|
396
428
|
}
|
397
|
-
throw
|
429
|
+
throw err;
|
398
430
|
}
|
399
431
|
},
|
400
432
|
setCircularReference(ref) {
|
@@ -457,7 +489,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
457
489
|
|
458
490
|
if (cycleStack.has(item)) {
|
459
491
|
throw new Error(
|
460
|
-
|
492
|
+
"This is a circular references. To serialize circular references use 'setCircularReference' somewhere in the circle during serialize and deserialize."
|
461
493
|
);
|
462
494
|
}
|
463
495
|
|
@@ -508,7 +540,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
508
540
|
result.push(item);
|
509
541
|
} else if (typeof item === "function") {
|
510
542
|
if (!SerializerMiddleware.isLazy(item))
|
511
|
-
throw new Error(
|
543
|
+
throw new Error(`Unexpected function ${item}`);
|
512
544
|
/** @type {SerializedType} */
|
513
545
|
const serializedData =
|
514
546
|
SerializerMiddleware.getLazySerializedValue(item);
|
@@ -539,10 +571,10 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
539
571
|
process(item);
|
540
572
|
}
|
541
573
|
return result;
|
542
|
-
} catch (
|
543
|
-
if (
|
574
|
+
} catch (err) {
|
575
|
+
if (err === NOT_SERIALIZABLE) return null;
|
544
576
|
|
545
|
-
throw
|
577
|
+
throw err;
|
546
578
|
} finally {
|
547
579
|
// Get rid of these references to avoid leaking memory
|
548
580
|
// This happens because the optimized code v8 generates
|
@@ -560,7 +592,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
560
592
|
|
561
593
|
/**
|
562
594
|
* @param {SerializedType} data data
|
563
|
-
* @param {
|
595
|
+
* @param {object} context context object
|
564
596
|
* @returns {DeserializedType|Promise<DeserializedType>} deserialized data
|
565
597
|
*/
|
566
598
|
deserialize(data, context) {
|
@@ -603,7 +635,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
603
635
|
if (nextItem === ESCAPE_ESCAPE_VALUE) {
|
604
636
|
return ESCAPE;
|
605
637
|
} else if (nextItem === ESCAPE_UNDEFINED) {
|
606
|
-
|
638
|
+
// Nothing
|
607
639
|
} else if (nextItem === ESCAPE_END_OBJECT) {
|
608
640
|
throw new Error(
|
609
641
|
`Unexpected end of object at position ${currentDataPos - 1}`
|
@@ -636,11 +668,9 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
636
668
|
if (request && !loadedRequests.has(request)) {
|
637
669
|
let loaded = false;
|
638
670
|
for (const [regExp, loader] of loaders) {
|
639
|
-
if (regExp.test(request)) {
|
640
|
-
|
641
|
-
|
642
|
-
break;
|
643
|
-
}
|
671
|
+
if (regExp.test(request) && loader(request)) {
|
672
|
+
loaded = true;
|
673
|
+
break;
|
644
674
|
}
|
645
675
|
}
|
646
676
|
if (!loaded) {
|
@@ -687,10 +717,10 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
687
717
|
const name = !serializerEntry
|
688
718
|
? "unknown"
|
689
719
|
: !serializerEntry[1].request
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
720
|
+
? serializerEntry[0].name
|
721
|
+
: serializerEntry[1].name
|
722
|
+
? `${serializerEntry[1].request} ${serializerEntry[1].name}`
|
723
|
+
: serializerEntry[1].request;
|
694
724
|
err.message += `\n(during deserialization of ${name})`;
|
695
725
|
throw err;
|
696
726
|
}
|
@@ -4,19 +4,39 @@
|
|
4
4
|
|
5
5
|
"use strict";
|
6
6
|
|
7
|
+
/** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
8
|
+
/** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
9
|
+
|
10
|
+
/** @typedef {(arg0?: any) => void} CacheAssoc */
|
11
|
+
|
12
|
+
/**
|
13
|
+
* @template T
|
14
|
+
* @typedef {WeakMap<CacheAssoc, ObjectStructure<T>>}
|
15
|
+
*/
|
7
16
|
const cache = new WeakMap();
|
8
17
|
|
18
|
+
/**
|
19
|
+
* @template T
|
20
|
+
*/
|
9
21
|
class ObjectStructure {
|
10
22
|
constructor() {
|
11
23
|
this.keys = undefined;
|
12
24
|
this.children = undefined;
|
13
25
|
}
|
14
26
|
|
27
|
+
/**
|
28
|
+
* @param {keyof T[]} keys keys
|
29
|
+
* @returns {keyof T[]} keys
|
30
|
+
*/
|
15
31
|
getKeys(keys) {
|
16
32
|
if (this.keys === undefined) this.keys = keys;
|
17
33
|
return this.keys;
|
18
34
|
}
|
19
35
|
|
36
|
+
/**
|
37
|
+
* @param {keyof T} key key
|
38
|
+
* @returns {ObjectStructure<T>} object structure
|
39
|
+
*/
|
20
40
|
key(key) {
|
21
41
|
if (this.children === undefined) this.children = new Map();
|
22
42
|
const child = this.children.get(key);
|
@@ -27,6 +47,12 @@ class ObjectStructure {
|
|
27
47
|
}
|
28
48
|
}
|
29
49
|
|
50
|
+
/**
|
51
|
+
* @template T
|
52
|
+
* @param {(keyof T)[]} keys keys
|
53
|
+
* @param {CacheAssoc} cacheAssoc cache assoc fn
|
54
|
+
* @returns {(keyof T)[]} keys
|
55
|
+
*/
|
30
56
|
const getCachedKeys = (keys, cacheAssoc) => {
|
31
57
|
let root = cache.get(cacheAssoc);
|
32
58
|
if (root === undefined) {
|
@@ -41,37 +67,48 @@ const getCachedKeys = (keys, cacheAssoc) => {
|
|
41
67
|
};
|
42
68
|
|
43
69
|
class PlainObjectSerializer {
|
44
|
-
|
45
|
-
|
70
|
+
/**
|
71
|
+
* @template {object} T
|
72
|
+
* @param {T} obj plain object
|
73
|
+
* @param {ObjectSerializerContext} context context
|
74
|
+
*/
|
75
|
+
serialize(obj, context) {
|
76
|
+
const keys = /** @type {(keyof T)[]} */ (Object.keys(obj));
|
46
77
|
if (keys.length > 128) {
|
47
78
|
// Objects with so many keys are unlikely to share structure
|
48
79
|
// with other objects
|
49
|
-
write(keys);
|
80
|
+
context.write(keys);
|
50
81
|
for (const key of keys) {
|
51
|
-
write(obj[key]);
|
82
|
+
context.write(obj[key]);
|
52
83
|
}
|
53
84
|
} else if (keys.length > 1) {
|
54
|
-
write(getCachedKeys(keys, write));
|
85
|
+
context.write(getCachedKeys(keys, context.write));
|
55
86
|
for (const key of keys) {
|
56
|
-
write(obj[key]);
|
87
|
+
context.write(obj[key]);
|
57
88
|
}
|
58
89
|
} else if (keys.length === 1) {
|
59
90
|
const key = keys[0];
|
60
|
-
write(key);
|
61
|
-
write(obj[key]);
|
91
|
+
context.write(key);
|
92
|
+
context.write(obj[key]);
|
62
93
|
} else {
|
63
|
-
write(null);
|
94
|
+
context.write(null);
|
64
95
|
}
|
65
96
|
}
|
66
|
-
|
67
|
-
|
68
|
-
|
97
|
+
|
98
|
+
/**
|
99
|
+
* @template {object} T
|
100
|
+
* @param {ObjectDeserializerContext} context context
|
101
|
+
* @returns {T} plain object
|
102
|
+
*/
|
103
|
+
deserialize(context) {
|
104
|
+
const keys = context.read();
|
105
|
+
const obj = /** @type {T} */ ({});
|
69
106
|
if (Array.isArray(keys)) {
|
70
107
|
for (const key of keys) {
|
71
|
-
obj[key] = read();
|
108
|
+
obj[/** @type {keyof T} */ (key)] = context.read();
|
72
109
|
}
|
73
110
|
} else if (keys !== null) {
|
74
|
-
obj[keys] = read();
|
111
|
+
obj[/** @type {keyof T} */ (keys)] = context.read();
|
75
112
|
}
|
76
113
|
return obj;
|
77
114
|
}
|
@@ -4,13 +4,25 @@
|
|
4
4
|
|
5
5
|
"use strict";
|
6
6
|
|
7
|
+
/** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
8
|
+
/** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
9
|
+
|
7
10
|
class RegExpObjectSerializer {
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
+
/**
|
12
|
+
* @param {RegExp} obj regexp
|
13
|
+
* @param {ObjectSerializerContext} context context
|
14
|
+
*/
|
15
|
+
serialize(obj, context) {
|
16
|
+
context.write(obj.source);
|
17
|
+
context.write(obj.flags);
|
11
18
|
}
|
12
|
-
|
13
|
-
|
19
|
+
|
20
|
+
/**
|
21
|
+
* @param {ObjectDeserializerContext} context context
|
22
|
+
* @returns {RegExp} regexp
|
23
|
+
*/
|
24
|
+
deserialize(context) {
|
25
|
+
return new RegExp(context.read(), context.read());
|
14
26
|
}
|
15
27
|
}
|
16
28
|
|
@@ -4,13 +4,27 @@
|
|
4
4
|
|
5
5
|
"use strict";
|
6
6
|
|
7
|
+
/**
|
8
|
+
* @template T, K
|
9
|
+
* @typedef {import("./SerializerMiddleware")<T, K>} SerializerMiddleware
|
10
|
+
*/
|
11
|
+
|
7
12
|
class Serializer {
|
13
|
+
/**
|
14
|
+
* @param {SerializerMiddleware<any, any>[]} middlewares serializer middlewares
|
15
|
+
* @param {TODO=} context context
|
16
|
+
*/
|
8
17
|
constructor(middlewares, context) {
|
9
18
|
this.serializeMiddlewares = middlewares.slice();
|
10
19
|
this.deserializeMiddlewares = middlewares.slice().reverse();
|
11
20
|
this.context = context;
|
12
21
|
}
|
13
22
|
|
23
|
+
/**
|
24
|
+
* @param {any} obj object
|
25
|
+
* @param {TODO} context content
|
26
|
+
* @returns {Promise<any>} result
|
27
|
+
*/
|
14
28
|
serialize(obj, context) {
|
15
29
|
const ctx = { ...context, ...this.context };
|
16
30
|
let current = obj;
|
@@ -28,16 +42,20 @@ class Serializer {
|
|
28
42
|
return current;
|
29
43
|
}
|
30
44
|
|
45
|
+
/**
|
46
|
+
* @param {any} value value
|
47
|
+
* @param {TODO} context context
|
48
|
+
* @returns {Promise<any>} result
|
49
|
+
*/
|
31
50
|
deserialize(value, context) {
|
32
51
|
const ctx = { ...context, ...this.context };
|
33
52
|
/** @type {any} */
|
34
53
|
let current = value;
|
35
54
|
for (const middleware of this.deserializeMiddlewares) {
|
36
|
-
|
37
|
-
current
|
38
|
-
|
39
|
-
|
40
|
-
}
|
55
|
+
current =
|
56
|
+
current && typeof current.then === "function"
|
57
|
+
? current.then(data => middleware.deserialize(data, ctx))
|
58
|
+
: middleware.deserialize(current, ctx);
|
41
59
|
}
|
42
60
|
return current;
|
43
61
|
}
|
@@ -18,7 +18,7 @@ class SerializerMiddleware {
|
|
18
18
|
/**
|
19
19
|
* @abstract
|
20
20
|
* @param {DeserializedType} data data
|
21
|
-
* @param {
|
21
|
+
* @param {object} context context object
|
22
22
|
* @returns {SerializedType|Promise<SerializedType>} serialized data
|
23
23
|
*/
|
24
24
|
serialize(data, context) {
|
@@ -30,7 +30,7 @@ class SerializerMiddleware {
|
|
30
30
|
/**
|
31
31
|
* @abstract
|
32
32
|
* @param {SerializedType} data data
|
33
|
-
* @param {
|
33
|
+
* @param {object} context context object
|
34
34
|
* @returns {DeserializedType|Promise<DeserializedType>} deserialized data
|
35
35
|
*/
|
36
36
|
deserialize(data, context) {
|
@@ -45,7 +45,7 @@ class SerializerMiddleware {
|
|
45
45
|
* @param {any=} serializedValue serialized value
|
46
46
|
* @returns {function(): Promise<any> | any} lazy function
|
47
47
|
*/
|
48
|
-
static createLazy(value, target, options = {}, serializedValue) {
|
48
|
+
static createLazy(value, target, options = {}, serializedValue = undefined) {
|
49
49
|
if (SerializerMiddleware.isLazy(value, target)) return value;
|
50
50
|
const fn = typeof value === "function" ? value : () => value;
|
51
51
|
fn[LAZY_TARGET] = target;
|
@@ -62,24 +62,24 @@ class SerializerMiddleware {
|
|
62
62
|
static isLazy(fn, target) {
|
63
63
|
if (typeof fn !== "function") return false;
|
64
64
|
const t = fn[LAZY_TARGET];
|
65
|
-
return target ? t === target :
|
65
|
+
return target ? t === target : Boolean(t);
|
66
66
|
}
|
67
67
|
|
68
68
|
/**
|
69
69
|
* @param {function(): Promise<any> | any} fn lazy function
|
70
|
-
* @returns {object} options
|
70
|
+
* @returns {object | undefined} options
|
71
71
|
*/
|
72
72
|
static getLazyOptions(fn) {
|
73
|
-
if (typeof fn !== "function") return
|
73
|
+
if (typeof fn !== "function") return;
|
74
74
|
return /** @type {any} */ (fn).options;
|
75
75
|
}
|
76
76
|
|
77
77
|
/**
|
78
78
|
* @param {function(): Promise<any> | any} fn lazy function
|
79
|
-
* @returns {any} serialized value
|
79
|
+
* @returns {any | undefined} serialized value
|
80
80
|
*/
|
81
81
|
static getLazySerializedValue(fn) {
|
82
|
-
if (typeof fn !== "function") return
|
82
|
+
if (typeof fn !== "function") return;
|
83
83
|
return fn[LAZY_SERIALIZED_VALUE];
|
84
84
|
}
|
85
85
|
|
@@ -4,18 +4,34 @@
|
|
4
4
|
|
5
5
|
"use strict";
|
6
6
|
|
7
|
+
/** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
8
|
+
/** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
9
|
+
|
7
10
|
class SetObjectSerializer {
|
8
|
-
|
9
|
-
|
11
|
+
/**
|
12
|
+
* @template T
|
13
|
+
* @param {Set<T>} obj set
|
14
|
+
* @param {ObjectSerializerContext} context context
|
15
|
+
*/
|
16
|
+
serialize(obj, context) {
|
17
|
+
context.write(obj.size);
|
10
18
|
for (const value of obj) {
|
11
|
-
write(value);
|
19
|
+
context.write(value);
|
12
20
|
}
|
13
21
|
}
|
14
|
-
|
15
|
-
|
22
|
+
|
23
|
+
/**
|
24
|
+
* @template T
|
25
|
+
* @param {ObjectDeserializerContext} context context
|
26
|
+
* @returns {Set<T>} date
|
27
|
+
*/
|
28
|
+
deserialize(context) {
|
29
|
+
/** @type {number} */
|
30
|
+
const size = context.read();
|
31
|
+
/** @type {Set<T>} */
|
16
32
|
const set = new Set();
|
17
33
|
for (let i = 0; i < size; i++) {
|
18
|
-
set.add(read());
|
34
|
+
set.add(context.read());
|
19
35
|
}
|
20
36
|
return set;
|
21
37
|
}
|
@@ -14,7 +14,7 @@ const SerializerMiddleware = require("./SerializerMiddleware");
|
|
14
14
|
class SingleItemMiddleware extends SerializerMiddleware {
|
15
15
|
/**
|
16
16
|
* @param {DeserializedType} data data
|
17
|
-
* @param {
|
17
|
+
* @param {object} context context object
|
18
18
|
* @returns {SerializedType|Promise<SerializedType>} serialized data
|
19
19
|
*/
|
20
20
|
serialize(data, context) {
|
@@ -23,7 +23,7 @@ class SingleItemMiddleware extends SerializerMiddleware {
|
|
23
23
|
|
24
24
|
/**
|
25
25
|
* @param {SerializedType} data data
|
26
|
-
* @param {
|
26
|
+
* @param {object} context context object
|
27
27
|
* @returns {DeserializedType|Promise<DeserializedType>} deserialized data
|
28
28
|
*/
|
29
29
|
deserialize(data, context) {
|
@@ -4,9 +4,9 @@
|
|
4
4
|
|
5
5
|
"use strict";
|
6
6
|
|
7
|
-
/** @typedef {undefined|null|number|string|boolean|Buffer|
|
7
|
+
/** @typedef {undefined | null | number | string | boolean | Buffer | object | (() => ComplexSerializableType[] | Promise<ComplexSerializableType[]>)} ComplexSerializableType */
|
8
8
|
|
9
|
-
/** @typedef {undefined|null|number|string|boolean|Buffer|(() => PrimitiveSerializableType[] | Promise<PrimitiveSerializableType[]>)} PrimitiveSerializableType */
|
9
|
+
/** @typedef {undefined|null|number|bigint|string|boolean|Buffer|(() => PrimitiveSerializableType[] | Promise<PrimitiveSerializableType[]>)} PrimitiveSerializableType */
|
10
10
|
|
11
11
|
/** @typedef {Buffer|(() => BufferSerializableType[] | Promise<BufferSerializableType[]>)} BufferSerializableType */
|
12
12
|
|
@@ -9,6 +9,9 @@ const ModuleDependency = require("../dependencies/ModuleDependency");
|
|
9
9
|
const makeSerializable = require("../util/makeSerializable");
|
10
10
|
|
11
11
|
class ConsumeSharedFallbackDependency extends ModuleDependency {
|
12
|
+
/**
|
13
|
+
* @param {string} request the request
|
14
|
+
*/
|
12
15
|
constructor(request) {
|
13
16
|
super(request);
|
14
17
|
}
|