@depup/webpack 5.106.0-depup.0 → 5.109.0-depup.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 +9 -11
- package/changes.json +16 -24
- package/hot/dev-server.js +2 -0
- package/lib/APIPlugin.js +60 -35
- package/lib/AsyncDependenciesBlock.js +3 -0
- package/lib/AutomaticPrefetchPlugin.js +6 -1
- package/lib/BannerPlugin.js +13 -5
- package/lib/Cache.js +27 -5
- package/lib/CacheFacade.js +41 -0
- package/lib/Chunk.js +71 -25
- package/lib/ChunkGraph.js +141 -9
- package/lib/ChunkGroup.js +115 -28
- package/lib/ChunkTemplate.js +9 -0
- package/lib/CircularModulesPlugin.js +190 -0
- package/lib/CleanPlugin.js +23 -26
- package/lib/CodeGenerationResults.js +19 -0
- package/lib/CompatibilityPlugin.js +54 -37
- package/lib/Compilation.js +635 -107
- package/lib/Compiler.js +93 -31
- package/lib/ConcatenationScope.js +34 -4
- package/lib/ConditionalInitFragment.js +6 -0
- package/lib/ConstPlugin.js +15 -12
- package/lib/ContextExclusionPlugin.js +3 -1
- package/lib/ContextModule.js +345 -55
- package/lib/ContextModuleFactory.js +193 -51
- package/lib/ContextReplacementPlugin.js +8 -1
- package/lib/DefinePlugin.js +498 -127
- package/lib/DependenciesBlock.js +6 -1
- package/lib/Dependency.js +159 -11
- package/lib/DependencyTemplate.js +7 -1
- package/lib/DependencyTemplates.js +4 -0
- package/lib/DotenvPlugin.js +3 -0
- package/lib/DynamicEntryPlugin.js +3 -1
- package/lib/EntryOptionPlugin.js +42 -2
- package/lib/EntryPlugin.js +4 -1
- package/lib/Entrypoint.js +5 -1
- package/lib/EnvironmentPlugin.js +3 -2
- package/lib/ErrorHelpers.js +7 -0
- package/lib/EvalDevToolModulePlugin.js +3 -1
- package/lib/EvalSourceMapDevToolPlugin.js +11 -11
- package/lib/ExportsInfo.js +399 -108
- package/lib/ExportsInfoApiPlugin.js +4 -3
- package/lib/ExternalModule.js +376 -78
- package/lib/ExternalModuleFactoryPlugin.js +75 -3
- package/lib/ExternalsPlugin.js +3 -1
- package/lib/FileSystemInfo.js +575 -149
- package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
- package/lib/FlagDependencyExportsPlugin.js +82 -9
- package/lib/FlagDependencyUsagePlugin.js +92 -6
- package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
- package/lib/Generator.js +24 -3
- package/lib/HotModuleReplacementPlugin.js +110 -44
- package/lib/IgnorePlugin.js +5 -2
- package/lib/IgnoreWarningsPlugin.js +2 -1
- package/lib/InitFragment.js +15 -0
- package/lib/JavascriptMetaInfoPlugin.js +9 -6
- package/lib/LazyBarrel.js +389 -0
- package/lib/LibraryTemplatePlugin.js +2 -1
- package/lib/LoaderOptionsPlugin.js +3 -1
- package/lib/LoaderTargetPlugin.js +3 -1
- package/lib/MainTemplate.js +15 -0
- package/lib/ManifestPlugin.js +9 -2
- package/lib/Module.js +121 -60
- package/lib/ModuleFactory.js +6 -1
- package/lib/ModuleFilenameHelpers.js +5 -2
- package/lib/ModuleGraph.js +69 -2
- package/lib/ModuleGraphConnection.js +9 -0
- package/lib/ModuleInfoHeaderPlugin.js +5 -0
- package/lib/ModuleNotFoundError.js +3 -83
- package/lib/ModuleProfile.js +27 -1
- package/lib/ModuleSourceTypeConstants.js +52 -19
- package/lib/ModuleTemplate.js +10 -0
- package/lib/ModuleTypeConstants.js +20 -4
- package/lib/MultiCompiler.js +59 -4
- package/lib/MultiStats.js +9 -0
- package/lib/MultiWatching.js +6 -0
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +78 -46
- package/lib/NormalModule.js +485 -181
- package/lib/NormalModuleFactory.js +148 -29
- package/lib/NormalModuleReplacementPlugin.js +3 -1
- package/lib/NullFactory.js +1 -0
- package/lib/OptionsApply.js +1 -0
- package/lib/Parser.js +3 -1
- package/lib/PlatformPlugin.js +2 -1
- package/lib/PrefetchPlugin.js +4 -1
- package/lib/ProgressPlugin.js +351 -161
- package/lib/ProvidePlugin.js +6 -3
- package/lib/RawModule.js +32 -16
- package/lib/RecordIdsPlugin.js +9 -0
- package/lib/RequestShortener.js +8 -0
- package/lib/ResolverFactory.js +5 -0
- package/lib/RuntimeGlobals.js +58 -5
- package/lib/RuntimeModule.js +22 -7
- package/lib/RuntimePlugin.js +104 -26
- package/lib/RuntimeTemplate.js +616 -37
- package/lib/SelfModuleFactory.js +3 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
- package/lib/SourceMapDevToolPlugin.js +341 -63
- package/lib/Stats.js +6 -0
- package/lib/Template.js +29 -3
- package/lib/TemplatedPathPlugin.js +505 -138
- package/lib/UseStrictPlugin.js +3 -2
- package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
- package/lib/WarnDeprecatedOptionPlugin.js +6 -2
- package/lib/WarnNoModeSetPlugin.js +18 -2
- package/lib/WatchIgnorePlugin.js +5 -1
- package/lib/Watching.js +25 -3
- package/lib/WebpackError.js +3 -74
- package/lib/WebpackIsIncludedPlugin.js +4 -2
- package/lib/WebpackOptionsApply.js +88 -25
- package/lib/WebpackOptionsDefaulter.js +1 -0
- package/lib/asset/AssetBytesGenerator.js +28 -10
- package/lib/asset/AssetBytesParser.js +1 -0
- package/lib/asset/AssetGenerator.js +199 -60
- package/lib/asset/AssetModule.js +47 -0
- package/lib/asset/AssetModulesPlugin.js +115 -24
- package/lib/asset/AssetParser.js +4 -2
- package/lib/asset/AssetSourceGenerator.js +26 -8
- package/lib/asset/AssetSourceParser.js +1 -0
- package/lib/asset/RawDataUrlModule.js +23 -13
- package/lib/asset/WebManifestGenerator.js +164 -0
- package/lib/asset/WebManifestParser.js +130 -0
- package/lib/async-modules/AsyncModuleHelpers.js +1 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/async-modules/isGeneratorLowered.js +26 -0
- package/lib/buildChunkGraph.js +107 -15
- package/lib/bun/BunTargetPlugin.js +42 -0
- package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
- package/lib/cache/AddManagedPathsPlugin.js +5 -1
- package/lib/cache/IdleFileCachePlugin.js +6 -1
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
- package/lib/cache/PackFileCacheStrategy.js +43 -7
- package/lib/cache/ResolverCachePlugin.js +12 -1
- package/lib/cache/getLazyHashedEtag.js +13 -2
- package/lib/cache/mergeEtags.js +4 -0
- package/lib/cli.js +142 -20
- package/lib/config/browserslistTargetHandler.js +141 -0
- package/lib/config/defaults.js +591 -41
- package/lib/config/defineConfig.js +31 -0
- package/lib/config/normalization.js +46 -1
- package/lib/config/target.js +200 -2
- package/lib/container/ContainerEntryDependency.js +2 -0
- package/lib/container/ContainerEntryModule.js +27 -14
- package/lib/container/ContainerEntryModuleFactory.js +1 -0
- package/lib/container/ContainerExposedDependency.js +6 -2
- package/lib/container/ContainerPlugin.js +2 -1
- package/lib/container/ContainerReferencePlugin.js +3 -2
- package/lib/container/FallbackDependency.js +9 -7
- package/lib/container/FallbackItemDependency.js +1 -0
- package/lib/container/FallbackModule.js +22 -9
- package/lib/container/FallbackModuleFactory.js +1 -0
- package/lib/container/ModuleFederationPlugin.js +12 -26
- package/lib/container/RemoteModule.js +33 -10
- package/lib/container/RemoteRuntimeModule.js +15 -12
- package/lib/container/RemoteToExternalDependency.js +1 -0
- package/lib/container/options.js +7 -0
- package/lib/css/CssGenerator.js +534 -272
- package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
- package/lib/css/CssLoadingRuntimeModule.js +156 -77
- package/lib/{CssModule.js → css/CssModule.js} +72 -37
- package/lib/css/CssModulesPlugin.js +356 -204
- package/lib/css/CssParser.js +3452 -1950
- package/lib/css/syntax.js +4058 -0
- package/lib/debug/ProfilingPlugin.js +33 -2
- package/lib/deno/DenoTargetPlugin.js +41 -0
- package/lib/dependencies/AMDDefineDependency.js +29 -17
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
- package/lib/dependencies/AMDPlugin.js +6 -3
- package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
- package/lib/dependencies/AMDRequireContextDependency.js +10 -11
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
- package/lib/dependencies/AMDRequireDependency.js +28 -20
- package/lib/dependencies/AMDRequireItemDependency.js +1 -0
- package/lib/dependencies/AMDRuntimeModules.js +3 -0
- package/lib/dependencies/CachedConstDependency.js +9 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +138 -38
- package/lib/dependencies/CommonJsExportsDependency.js +74 -20
- package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
- package/lib/dependencies/CommonJsFullRequireDependency.js +62 -27
- package/lib/dependencies/CommonJsImportsParserPlugin.js +187 -24
- package/lib/dependencies/CommonJsPlugin.js +7 -4
- package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
- package/lib/dependencies/CommonJsRequireDependency.js +135 -13
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
- package/lib/dependencies/ConstDependency.js +22 -12
- package/lib/dependencies/ContextDependency.js +13 -2
- package/lib/dependencies/ContextDependencyHelpers.js +7 -4
- package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
- package/lib/dependencies/ContextElementDependency.js +27 -14
- package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
- package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
- package/lib/dependencies/CriticalDependencyWarning.js +3 -1
- package/lib/dependencies/CssIcssExportDependency.js +682 -368
- package/lib/dependencies/CssIcssImportDependency.js +62 -17
- package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
- package/lib/dependencies/CssImportDependency.js +37 -1
- package/lib/dependencies/CssUrlDependency.js +87 -14
- package/lib/dependencies/DelegatedSourceDependency.js +1 -0
- package/lib/dependencies/DllEntryDependency.js +12 -13
- package/lib/dependencies/DynamicExports.js +5 -0
- package/lib/dependencies/EntryDependency.js +1 -0
- package/lib/dependencies/ExportBindingInitFragment.js +164 -0
- package/lib/dependencies/ExportsInfoDependency.js +18 -12
- package/lib/dependencies/ExternalModuleDependency.js +13 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
- package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -2
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
- package/lib/dependencies/HarmonyExportExpressionDependency.js +140 -46
- package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +253 -37
- package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
- package/lib/dependencies/HarmonyExports.js +6 -1
- package/lib/dependencies/HarmonyImportDependency.js +59 -3
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
- package/lib/dependencies/HarmonyImportGuard.js +426 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +136 -17
- package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
- package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
- package/lib/dependencies/HtmlEntryDependency.js +1295 -0
- package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
- package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
- package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
- package/lib/dependencies/HtmlSourceDependency.js +172 -0
- package/lib/dependencies/ImportContextDependency.js +9 -9
- package/lib/dependencies/ImportDependency.js +92 -3
- package/lib/dependencies/ImportEagerDependency.js +2 -0
- package/lib/dependencies/ImportMetaContextDependency.js +1 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
- package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
- package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
- package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
- package/lib/dependencies/ImportMetaPlugin.js +595 -209
- package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
- package/lib/dependencies/ImportParserPlugin.js +114 -27
- package/lib/dependencies/ImportPhase.js +17 -11
- package/lib/dependencies/ImportPlugin.js +2 -1
- package/lib/dependencies/ImportWeakDependency.js +3 -0
- package/lib/dependencies/JsonExportsDependency.js +15 -10
- package/lib/dependencies/LoaderDependency.js +2 -0
- package/lib/dependencies/LoaderImportDependency.js +3 -0
- package/lib/dependencies/LoaderPlugin.js +9 -2
- package/lib/dependencies/LocalModule.js +15 -12
- package/lib/dependencies/LocalModuleDependency.js +15 -13
- package/lib/dependencies/LocalModulesHelpers.js +3 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
- package/lib/dependencies/ModuleDependency.js +14 -0
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
- package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/PrefetchDependency.js +1 -0
- package/lib/dependencies/ProvidedDependency.js +36 -27
- package/lib/dependencies/PureExpressionDependency.js +14 -10
- package/lib/dependencies/RequireContextDependency.js +1 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
- package/lib/dependencies/RequireContextPlugin.js +2 -1
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
- package/lib/dependencies/RequireEnsureDependency.js +16 -13
- package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
- package/lib/dependencies/RequireEnsurePlugin.js +2 -1
- package/lib/dependencies/RequireHeaderDependency.js +7 -4
- package/lib/dependencies/RequireIncludeDependency.js +2 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
- package/lib/dependencies/RequireIncludePlugin.js +2 -1
- package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
- package/lib/dependencies/RequireResolveContextDependency.js +10 -11
- package/lib/dependencies/RequireResolveDependency.js +2 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
- package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
- package/lib/dependencies/StaticExportsDependency.js +13 -10
- package/lib/dependencies/SystemPlugin.js +9 -6
- package/lib/dependencies/SystemRuntimeModule.js +1 -0
- package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
- package/lib/dependencies/URLContextDependency.js +8 -7
- package/lib/dependencies/URLDependency.js +157 -33
- package/lib/dependencies/URLPlugin.js +2 -0
- package/lib/dependencies/UnsupportedDependency.js +12 -13
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
- package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
- package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
- package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
- package/lib/dependencies/WorkerDependency.js +111 -27
- package/lib/dependencies/WorkletDependency.js +278 -0
- package/lib/dependencies/getFunctionExpression.js +1 -0
- package/lib/dependencies/processExportInfo.js +14 -11
- package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
- package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
- package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
- package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
- package/lib/{DllModule.js → dll/DllModule.js} +36 -24
- package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
- package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
- package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
- package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
- package/lib/electron/ElectronTargetPlugin.js +24 -5
- package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
- package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
- package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
- package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
- package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
- package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
- package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
- package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
- package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
- package/lib/errors/JSONParseError.js +115 -0
- package/lib/errors/LoaderLoadingError.js +20 -0
- package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
- package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
- package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
- package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
- package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
- package/lib/errors/ModuleNotFoundError.js +94 -0
- package/lib/errors/ModuleParseError.js +141 -0
- package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
- package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
- package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
- package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
- package/lib/errors/NonErrorEmittedError.js +30 -0
- package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
- package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
- package/lib/errors/WebpackError.js +84 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
- package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +71 -49
- package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
- package/lib/hmr/LazyCompilationPlugin.js +154 -7
- package/lib/hmr/lazyCompilationBackend.js +34 -8
- package/lib/html/HtmlGenerator.js +1470 -0
- package/lib/html/HtmlModule.js +41 -0
- package/lib/html/HtmlModulesPlugin.js +1111 -0
- package/lib/html/HtmlParser.js +1970 -0
- package/lib/html/favicon.svg +1 -0
- package/lib/html/syntax.js +9020 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
- package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
- package/lib/ids/HashedModuleIdsPlugin.js +2 -1
- package/lib/ids/IdHelpers.js +25 -2
- package/lib/ids/NamedChunkIdsPlugin.js +3 -1
- package/lib/ids/NamedModuleIdsPlugin.js +3 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
- package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -1
- package/lib/index.js +66 -15
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
- package/lib/javascript/BasicEvaluatedExpression.js +370 -49
- package/lib/javascript/ChunkFormatHelpers.js +2 -1
- package/lib/javascript/ChunkHelpers.js +1 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
- package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
- package/lib/javascript/JavascriptGenerator.js +213 -51
- package/lib/javascript/JavascriptModule.js +54 -0
- package/lib/javascript/JavascriptModulesPlugin.js +579 -183
- package/lib/javascript/JavascriptParser.js +1289 -462
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/StartupHelpers.js +5 -0
- package/lib/javascript/syntax.js +4380 -0
- package/lib/json/JsonData.js +5 -0
- package/lib/json/JsonGenerator.js +21 -0
- package/lib/json/JsonModule.js +40 -0
- package/lib/json/JsonModulesPlugin.js +8 -1
- package/lib/json/JsonParser.js +18 -27
- package/lib/library/AbstractLibraryPlugin.js +17 -2
- package/lib/library/AmdLibraryPlugin.js +8 -0
- package/lib/library/AssignLibraryPlugin.js +21 -3
- package/lib/library/EnableLibraryPlugin.js +8 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
- package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
- package/lib/library/JsonpLibraryPlugin.js +8 -0
- package/lib/library/ModuleLibraryPlugin.js +154 -7
- package/lib/library/SystemLibraryPlugin.js +11 -3
- package/lib/library/UmdLibraryPlugin.js +16 -0
- package/lib/loaders/LoaderRunner.js +714 -0
- package/lib/loaders/loadLoader.js +100 -0
- package/lib/logging/Logger.js +17 -0
- package/lib/logging/createConsoleLogger.js +7 -0
- package/lib/logging/runtime.js +2 -0
- package/lib/logging/truncateArgs.js +2 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
- package/lib/node/NodeEnvironmentPlugin.js +7 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +4 -63
- package/lib/node/NodeTemplatePlugin.js +3 -1
- package/lib/node/NodeWatchFileSystem.js +40 -22
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +23 -1
- package/lib/node/ReadFileCompileWasmPlugin.js +18 -1
- package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
- package/lib/node/nodeBuiltins.js +80 -0
- package/lib/node/nodeConsole.js +116 -64
- package/lib/optimize/AggressiveMergingPlugin.js +3 -1
- package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
- package/lib/optimize/ConcatenatedModule.js +585 -116
- package/lib/optimize/ConstExportsPlugin.js +211 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
- package/lib/optimize/InlineExports.js +178 -0
- package/lib/optimize/InnerGraph.js +374 -262
- package/lib/optimize/InnerGraphPlugin.js +246 -117
- package/lib/optimize/LimitChunkCountPlugin.js +9 -0
- package/lib/optimize/MangleExportsPlugin.js +5 -1
- package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
- package/lib/optimize/MinChunkSizePlugin.js +2 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -4
- package/lib/optimize/ModuleConcatenationPlugin.js +159 -34
- package/lib/optimize/RealContentHashPlugin.js +125 -50
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
- package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
- package/lib/optimize/RuntimeChunkPlugin.js +2 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
- package/lib/optimize/SplitChunksPlugin.js +54 -6
- package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
- package/lib/performance/NoAsyncChunksWarning.js +5 -3
- package/lib/performance/SizeLimitsPlugin.js +8 -2
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
- package/lib/prefetch/ResourceHintPlugin.js +663 -0
- package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
- package/lib/prefetch/parseResourceHintOptions.js +103 -0
- package/lib/rules/BasicEffectRulePlugin.js +3 -0
- package/lib/rules/BasicMatcherRulePlugin.js +3 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
- package/lib/rules/RuleSetCompiler.js +132 -0
- package/lib/rules/UseEffectRulePlugin.js +10 -3
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
- package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
- package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
- package/lib/runtime/BaseUriRuntimeModule.js +1 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
- package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
- package/lib/runtime/CompatRuntimeModule.js +2 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
- package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
- package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
- package/lib/runtime/HelperRuntimeModule.js +5 -0
- package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
- package/lib/runtime/NonceRuntimeModule.js +1 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
- package/lib/runtime/PublicPathRuntimeModule.js +1 -0
- package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
- package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
- package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
- package/lib/runtime/SystemContextRuntimeModule.js +1 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
- package/lib/runtime/WorkerRuntimeModule.js +33 -0
- package/lib/schemes/DataUriPlugin.js +14 -2
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +86 -4
- package/lib/schemes/VirtualUrlPlugin.js +8 -4
- package/lib/serialization/AggregateErrorSerializer.js +9 -6
- package/lib/serialization/ArraySerializer.js +6 -8
- package/lib/serialization/BinaryMiddleware.js +552 -463
- package/lib/serialization/DateObjectSerializer.js +4 -2
- package/lib/serialization/ErrorObjectSerializer.js +10 -6
- package/lib/serialization/FileMiddleware.js +50 -3
- package/lib/serialization/MapObjectSerializer.js +7 -9
- package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
- package/lib/serialization/ObjectMiddleware.js +73 -13
- package/lib/serialization/PlainObjectSerializer.js +16 -8
- package/lib/serialization/RegExpObjectSerializer.js +4 -2
- package/lib/serialization/Serializer.js +6 -0
- package/lib/serialization/SerializerMiddleware.js +14 -2
- package/lib/serialization/SetObjectSerializer.js +6 -8
- package/lib/serialization/SingleItemMiddleware.js +3 -0
- package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
- package/lib/sharing/ConsumeSharedModule.js +21 -7
- package/lib/sharing/ConsumeSharedPlugin.js +11 -11
- package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
- package/lib/sharing/ProvideForSharedDependency.js +1 -0
- package/lib/sharing/ProvideSharedDependency.js +34 -15
- package/lib/sharing/ProvideSharedModule.js +42 -12
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
- package/lib/sharing/ProvideSharedPlugin.js +13 -8
- package/lib/sharing/SharePlugin.js +5 -1
- package/lib/sharing/ShareRuntimeModule.js +19 -16
- package/lib/sharing/resolveMatchedConfigs.js +6 -2
- package/lib/sharing/utils.js +9 -1
- package/lib/stats/DefaultStatsFactoryPlugin.js +94 -12
- package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
- package/lib/stats/DefaultStatsPrinterPlugin.js +64 -18
- package/lib/stats/StatsFactory.js +39 -18
- package/lib/stats/StatsPrinter.js +16 -2
- package/lib/typescript/TypeScriptPlugin.js +210 -0
- package/lib/url/URLParserPlugin.js +111 -23
- package/lib/util/ArrayHelpers.js +1 -0
- package/lib/util/ArrayQueue.js +10 -5
- package/lib/util/AsyncQueue.js +154 -74
- package/lib/util/Hash.js +2 -2
- package/lib/util/IterableHelpers.js +3 -0
- package/lib/util/LazyBucketSortedSet.js +26 -0
- package/lib/util/LazySet.js +45 -4
- package/lib/util/LocConverter.js +64 -0
- package/lib/util/ParallelismFactorCalculator.js +1 -0
- package/lib/util/Queue.js +6 -3
- package/lib/util/Semaphore.js +15 -1
- package/lib/util/SetHelpers.js +4 -1
- package/lib/util/SortableSet.js +7 -1
- package/lib/util/SourceProcessor.js +119 -0
- package/lib/util/StackedCacheMap.js +20 -3
- package/lib/util/StackedMap.js +162 -43
- package/lib/util/StringXor.js +1 -1
- package/lib/util/TupleQueue.js +7 -3
- package/lib/util/TupleSet.js +14 -0
- package/lib/util/URLAbsoluteSpecifier.js +1 -0
- package/lib/util/WeakTupleMap.js +60 -1
- package/lib/util/binarySearchBounds.js +3 -2
- package/lib/util/chainedImports.js +3 -3
- package/lib/util/cleverMerge.js +19 -2
- package/lib/util/comparators.js +35 -4
- package/lib/util/compileBooleanMatcher.js +9 -0
- package/lib/util/concatenate.js +80 -24
- package/lib/util/conventions.js +46 -1
- package/lib/util/createHash.js +0 -1
- package/lib/util/createHooksRegistry.js +43 -0
- package/lib/util/createMappings.js +118 -0
- package/lib/util/dataURL.js +3 -2
- package/lib/util/deprecation.js +19 -0
- package/lib/util/deterministicGrouping.js +46 -17
- package/lib/util/extractSourceMap.js +2 -1
- package/lib/util/extractUrlAndGlobal.js +1 -0
- package/lib/util/findGraphRoots.js +7 -0
- package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
- package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
- package/lib/util/fs.js +87 -14
- package/lib/util/generateDebugId.js +1 -0
- package/lib/util/globUtils.js +710 -0
- package/lib/util/hash/BatchedHash.js +1 -0
- package/lib/util/hash/BulkUpdateHash.js +1 -0
- package/lib/util/hash/DebugHash.js +1 -0
- package/lib/util/hash/hash-digest.js +32 -15
- package/lib/util/hash/md4.js +1 -1
- package/lib/util/hash/wasm-hash.js +5 -0
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +97 -6
- package/lib/util/implicitTypeLoaderFallback.js +62 -0
- package/lib/util/internalSerializables.js +102 -60
- package/lib/util/magicComment.js +149 -7
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +2 -0
- package/lib/util/mimeTypes.js +176 -0
- package/lib/util/nonNumericOnlyHash.js +31 -1
- package/lib/util/numberHash.js +2 -2
- package/lib/util/parseJson.js +41 -0
- package/lib/util/processAsyncTree.js +8 -0
- package/lib/util/property.js +9 -2
- package/lib/util/publicPathPlaceholder.js +64 -0
- package/lib/util/registerExternalSerializer.js +24 -4
- package/lib/util/removeBOM.js +1 -0
- package/lib/util/runtime.js +32 -0
- package/lib/util/semver.js +15 -0
- package/lib/util/serialization.js +2 -0
- package/lib/util/smartGrouping.js +8 -0
- package/lib/util/source.js +23 -0
- package/lib/util/topologicalSort.js +69 -0
- package/lib/validateSchema.js +1 -0
- package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
- package/lib/wasm-async/AsyncWasmModule.js +77 -0
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
- package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
- package/lib/wasm-sync/SyncWasmModule.js +39 -0
- package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
- package/lib/wasm-sync/WebAssemblyParser.js +9 -3
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
- package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
- package/lib/web/FetchCompileWasmPlugin.js +27 -1
- package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
- package/lib/web/JsonpTemplatePlugin.js +2 -1
- package/lib/webpack.js +78 -1
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/module.d.ts +21 -0
- package/package.json +79 -77
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +1117 -79
- package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
- package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
- package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlParserOptions.check.js +6 -0
- package/schemas/plugins/HtmlParserOptions.json +3 -0
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +38 -0
- 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 +2 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
- package/types.d.ts +8608 -1159
- package/lib/CaseSensitiveModulesWarning.js +0 -72
- package/lib/GraphHelpers.js +0 -46
- package/lib/ModuleParseError.js +0 -125
- package/lib/NoModeWarning.js +0 -23
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
- package/lib/css/walkCssTokens.js +0 -1843
- package/lib/util/AppendOnlyStackedSet.js +0 -78
- /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
- /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
"use strict";
|
|
6
6
|
|
|
7
|
-
/** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
|
8
|
-
/** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
|
7
|
+
/** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext<[number]>} ObjectDeserializerContext */
|
|
8
|
+
/** @typedef {import("./ObjectMiddleware").ObjectSerializerContext<[number]>} ObjectSerializerContext */
|
|
9
9
|
|
|
10
10
|
class DateObjectSerializer {
|
|
11
11
|
/**
|
|
12
|
+
* Serializes this instance into the provided serializer context.
|
|
12
13
|
* @param {Date} obj date
|
|
13
14
|
* @param {ObjectSerializerContext} context context
|
|
14
15
|
*/
|
|
@@ -17,6 +18,7 @@ class DateObjectSerializer {
|
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
/**
|
|
21
|
+
* Restores this instance from the provided deserializer context.
|
|
20
22
|
* @param {ObjectDeserializerContext} context context
|
|
21
23
|
* @returns {Date} date
|
|
22
24
|
*/
|
|
@@ -4,13 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
"use strict";
|
|
6
6
|
|
|
7
|
-
/** @typedef {import("./
|
|
8
|
-
/** @typedef {import("./ObjectMiddleware").
|
|
7
|
+
/** @typedef {import("./types").ComplexSerializableType} ComplexSerializableType */
|
|
8
|
+
/** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext<ComplexSerializableType[]>} ObjectDeserializerContext */
|
|
9
|
+
/** @typedef {import("./ObjectMiddleware").ObjectSerializerContext<ComplexSerializableType[]>} ObjectSerializerContext */
|
|
9
10
|
|
|
10
11
|
/** @typedef {Error & { cause?: unknown }} ErrorWithCause */
|
|
11
12
|
|
|
12
13
|
class ErrorObjectSerializer {
|
|
13
14
|
/**
|
|
15
|
+
* Creates an instance of ErrorObjectSerializer.
|
|
14
16
|
* @param {ErrorConstructor | EvalErrorConstructor | RangeErrorConstructor | ReferenceErrorConstructor | SyntaxErrorConstructor | TypeErrorConstructor} Type error type
|
|
15
17
|
*/
|
|
16
18
|
constructor(Type) {
|
|
@@ -18,6 +20,7 @@ class ErrorObjectSerializer {
|
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
/**
|
|
23
|
+
* Serializes this instance into the provided serializer context.
|
|
21
24
|
* @param {Error | EvalError | RangeError | ReferenceError | SyntaxError | TypeError} obj error
|
|
22
25
|
* @param {ObjectSerializerContext} context context
|
|
23
26
|
*/
|
|
@@ -25,20 +28,21 @@ class ErrorObjectSerializer {
|
|
|
25
28
|
context.write(obj.message);
|
|
26
29
|
context.write(obj.stack);
|
|
27
30
|
context.write(
|
|
28
|
-
/** @type {
|
|
29
|
-
(obj).cause
|
|
31
|
+
/** @type {ComplexSerializableType} */
|
|
32
|
+
(/** @type {ErrorWithCause} */ (obj).cause)
|
|
30
33
|
);
|
|
31
34
|
}
|
|
32
35
|
|
|
33
36
|
/**
|
|
37
|
+
* Restores this instance from the provided deserializer context.
|
|
34
38
|
* @param {ObjectDeserializerContext} context context
|
|
35
39
|
* @returns {Error | EvalError | RangeError | ReferenceError | SyntaxError | TypeError} error
|
|
36
40
|
*/
|
|
37
41
|
deserialize(context) {
|
|
38
42
|
const err = new this.Type();
|
|
39
43
|
|
|
40
|
-
err.message = context.read();
|
|
41
|
-
err.stack = context.read();
|
|
44
|
+
err.message = /** @type {string} */ (context.read());
|
|
45
|
+
err.stack = /** @type {string | undefined} */ (context.read());
|
|
42
46
|
/** @type {ErrorWithCause} */
|
|
43
47
|
(err).cause = context.read();
|
|
44
48
|
|
|
@@ -13,7 +13,12 @@ const {
|
|
|
13
13
|
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
14
14
|
createBrotliDecompress,
|
|
15
15
|
createGunzip,
|
|
16
|
-
createGzip
|
|
16
|
+
createGzip,
|
|
17
|
+
// zstd is only available on Node.js >= 22.15; guarded at use sites
|
|
18
|
+
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
19
|
+
createZstdCompress,
|
|
20
|
+
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
21
|
+
createZstdDecompress
|
|
17
22
|
} = require("zlib");
|
|
18
23
|
const { DEFAULTS } = require("../config/defaults");
|
|
19
24
|
const createHash = require("../util/createHash");
|
|
@@ -48,6 +53,7 @@ const WRITE_LIMIT_TOTAL = 0x7fff0000;
|
|
|
48
53
|
const WRITE_LIMIT_CHUNK = 511 * 1024 * 1024;
|
|
49
54
|
|
|
50
55
|
/**
|
|
56
|
+
* Returns hash.
|
|
51
57
|
* @param {Buffer[]} buffers buffers
|
|
52
58
|
* @param {HashFunction} hashFunction hash function to use
|
|
53
59
|
* @returns {string} hash
|
|
@@ -85,6 +91,7 @@ const readUInt64LE = Buffer.prototype.readBigUInt64LE
|
|
|
85
91
|
/** @typedef {Promise<void | void[]>} BackgroundJob */
|
|
86
92
|
|
|
87
93
|
/**
|
|
94
|
+
* Defines the serialize result type used by this module.
|
|
88
95
|
* @typedef {object} SerializeResult
|
|
89
96
|
* @property {string | false} name
|
|
90
97
|
* @property {number} size
|
|
@@ -93,10 +100,12 @@ const readUInt64LE = Buffer.prototype.readBigUInt64LE
|
|
|
93
100
|
|
|
94
101
|
/** @typedef {{ name: string, size: number }} LazyOptions */
|
|
95
102
|
/**
|
|
103
|
+
* Defines the lazy function type used by this module.
|
|
96
104
|
* @typedef {import("./SerializerMiddleware").LazyFunction<BufferSerializableType[], Buffer, FileMiddleware, LazyOptions>} LazyFunction
|
|
97
105
|
*/
|
|
98
106
|
|
|
99
107
|
/**
|
|
108
|
+
* Serializes this instance into the provided serializer context.
|
|
100
109
|
* @param {FileMiddleware} middleware this
|
|
101
110
|
* @param {(BufferSerializableType | LazyFunction)[]} data data to be serialized
|
|
102
111
|
* @param {string | boolean} name file base name
|
|
@@ -243,6 +252,7 @@ const serialize = async (
|
|
|
243
252
|
};
|
|
244
253
|
|
|
245
254
|
/**
|
|
255
|
+
* Restores this instance from the provided deserializer context.
|
|
246
256
|
* @param {FileMiddleware} middleware this
|
|
247
257
|
* @param {string | false} name filename
|
|
248
258
|
* @param {(name: string | false) => Promise<Buffer[]>} readFile read content of a file
|
|
@@ -263,6 +273,7 @@ const deserialize = async (middleware, name, readFile) => {
|
|
|
263
273
|
contentPosition = 0;
|
|
264
274
|
};
|
|
265
275
|
/**
|
|
276
|
+
* Processes the provided n.
|
|
266
277
|
* @param {number} n number of bytes to ensure
|
|
267
278
|
*/
|
|
268
279
|
const ensureData = (n) => {
|
|
@@ -294,6 +305,7 @@ const deserialize = async (middleware, name, readFile) => {
|
|
|
294
305
|
}
|
|
295
306
|
};
|
|
296
307
|
/**
|
|
308
|
+
* Returns value value.
|
|
297
309
|
* @returns {number} value value
|
|
298
310
|
*/
|
|
299
311
|
const readUInt32LE = () => {
|
|
@@ -303,6 +315,7 @@ const deserialize = async (middleware, name, readFile) => {
|
|
|
303
315
|
return value;
|
|
304
316
|
};
|
|
305
317
|
/**
|
|
318
|
+
* Returns value value.
|
|
306
319
|
* @returns {number} value value
|
|
307
320
|
*/
|
|
308
321
|
const readInt32LE = () => {
|
|
@@ -312,6 +325,7 @@ const deserialize = async (middleware, name, readFile) => {
|
|
|
312
325
|
return value;
|
|
313
326
|
};
|
|
314
327
|
/**
|
|
328
|
+
* Returns buffer.
|
|
315
329
|
* @param {number} l length
|
|
316
330
|
* @returns {Buffer} buffer
|
|
317
331
|
*/
|
|
@@ -369,9 +383,13 @@ const deserialize = async (middleware, name, readFile) => {
|
|
|
369
383
|
);
|
|
370
384
|
result.push(lazy);
|
|
371
385
|
} else {
|
|
386
|
+
// A section may start exactly at a content-buffer boundary; advance
|
|
387
|
+
// first, then read from the fresh buffer (don't fall through to the
|
|
388
|
+
// `while` below, which would skip it).
|
|
372
389
|
if (contentPosition === contentItemLength) {
|
|
373
390
|
nextContent();
|
|
374
|
-
}
|
|
391
|
+
}
|
|
392
|
+
if (contentPosition !== 0) {
|
|
375
393
|
if (length <= contentItemLength - contentPosition) {
|
|
376
394
|
result.push(
|
|
377
395
|
Buffer.from(
|
|
@@ -429,10 +447,12 @@ const deserialize = async (middleware, name, readFile) => {
|
|
|
429
447
|
/** @typedef {{ filename: string, extension?: string }} Context */
|
|
430
448
|
|
|
431
449
|
/**
|
|
450
|
+
* Represents FileMiddleware.
|
|
432
451
|
* @extends {SerializerMiddleware<DeserializedType, SerializedType, Context>}
|
|
433
452
|
*/
|
|
434
453
|
class FileMiddleware extends SerializerMiddleware {
|
|
435
454
|
/**
|
|
455
|
+
* Creates an instance of FileMiddleware.
|
|
436
456
|
* @param {IntermediateFileSystem} fs filesystem
|
|
437
457
|
* @param {HashFunction} hashFunction hash function to use
|
|
438
458
|
*/
|
|
@@ -445,6 +465,7 @@ class FileMiddleware extends SerializerMiddleware {
|
|
|
445
465
|
}
|
|
446
466
|
|
|
447
467
|
/**
|
|
468
|
+
* Serializes this instance into the provided serializer context.
|
|
448
469
|
* @param {DeserializedType} data data
|
|
449
470
|
* @param {Context} context context object
|
|
450
471
|
* @returns {SerializedType | Promise<SerializedType> | null} serialized data
|
|
@@ -460,6 +481,7 @@ class FileMiddleware extends SerializerMiddleware {
|
|
|
460
481
|
/** @type {Set<string>} */
|
|
461
482
|
const allWrittenFiles = new Set();
|
|
462
483
|
/**
|
|
484
|
+
* Processes the provided name.
|
|
463
485
|
* @param {string | false} name name
|
|
464
486
|
* @param {Buffer[]} content content
|
|
465
487
|
* @param {number} size size
|
|
@@ -471,12 +493,13 @@ class FileMiddleware extends SerializerMiddleware {
|
|
|
471
493
|
: filename;
|
|
472
494
|
await new Promise(
|
|
473
495
|
/**
|
|
496
|
+
* Handles the callback logic for this hook.
|
|
474
497
|
* @param {(value?: undefined) => void} resolve resolve
|
|
475
498
|
* @param {(reason?: Error | null) => void} reject reject
|
|
476
499
|
*/
|
|
477
500
|
(resolve, reject) => {
|
|
478
501
|
let stream = this.fs.createWriteStream(`${file}_`);
|
|
479
|
-
/** @type {undefined | import("zlib").Gzip | import("zlib").BrotliCompress} */
|
|
502
|
+
/** @type {undefined | import("zlib").Gzip | import("zlib").BrotliCompress | import("zlib").ZstdCompress} */
|
|
480
503
|
let compression;
|
|
481
504
|
if (file.endsWith(".gz")) {
|
|
482
505
|
compression = createGzip({
|
|
@@ -493,6 +516,17 @@ class FileMiddleware extends SerializerMiddleware {
|
|
|
493
516
|
[zConstants.BROTLI_PARAM_SIZE_HINT]: size
|
|
494
517
|
}
|
|
495
518
|
});
|
|
519
|
+
} else if (file.endsWith(".zst")) {
|
|
520
|
+
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
521
|
+
const levelParam = zConstants.ZSTD_c_compressionLevel;
|
|
522
|
+
// default level 3; some runtimes (e.g. Deno) don't expose ZSTD_CLEVEL_DEFAULT
|
|
523
|
+
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
524
|
+
const defaultLevel = zConstants.ZSTD_CLEVEL_DEFAULT;
|
|
525
|
+
const level = defaultLevel === undefined ? 3 : defaultLevel;
|
|
526
|
+
compression = createZstdCompress({
|
|
527
|
+
chunkSize: COMPRESSION_CHUNK_SIZE,
|
|
528
|
+
params: { [levelParam]: level }
|
|
529
|
+
});
|
|
496
530
|
}
|
|
497
531
|
if (compression) {
|
|
498
532
|
pipeline(compression, stream, reject);
|
|
@@ -518,6 +552,7 @@ class FileMiddleware extends SerializerMiddleware {
|
|
|
518
552
|
const len = chunks.length;
|
|
519
553
|
let i = 0;
|
|
520
554
|
/**
|
|
555
|
+
* Processes the provided err.
|
|
521
556
|
* @param {(Error | null)=} err err
|
|
522
557
|
*/
|
|
523
558
|
const batchWrite = (err) => {
|
|
@@ -557,6 +592,7 @@ class FileMiddleware extends SerializerMiddleware {
|
|
|
557
592
|
// Rename the index file to disallow access during inconsistent file state
|
|
558
593
|
await new Promise(
|
|
559
594
|
/**
|
|
595
|
+
* Handles the callback logic for this hook.
|
|
560
596
|
* @param {(value?: undefined) => void} resolve resolve
|
|
561
597
|
*/
|
|
562
598
|
(resolve) => {
|
|
@@ -573,6 +609,7 @@ class FileMiddleware extends SerializerMiddleware {
|
|
|
573
609
|
(file) =>
|
|
574
610
|
new Promise(
|
|
575
611
|
/**
|
|
612
|
+
* Handles the callback logic for this hook.
|
|
576
613
|
* @param {(value?: undefined) => void} resolve resolve
|
|
577
614
|
* @param {(reason?: Error | null) => void} reject reject
|
|
578
615
|
* @returns {void}
|
|
@@ -590,6 +627,7 @@ class FileMiddleware extends SerializerMiddleware {
|
|
|
590
627
|
// As final step automatically update the index file to have a consistent pack again
|
|
591
628
|
await new Promise(
|
|
592
629
|
/**
|
|
630
|
+
* Handles the callback logic for this hook.
|
|
593
631
|
* @param {(value?: undefined) => void} resolve resolve
|
|
594
632
|
* @returns {void}
|
|
595
633
|
*/
|
|
@@ -609,6 +647,7 @@ class FileMiddleware extends SerializerMiddleware {
|
|
|
609
647
|
}
|
|
610
648
|
|
|
611
649
|
/**
|
|
650
|
+
* Restores this instance from the provided deserializer context.
|
|
612
651
|
* @param {SerializedType} data data
|
|
613
652
|
* @param {Context} context context object
|
|
614
653
|
* @returns {DeserializedType | Promise<DeserializedType>} deserialized data
|
|
@@ -616,6 +655,7 @@ class FileMiddleware extends SerializerMiddleware {
|
|
|
616
655
|
deserialize(data, context) {
|
|
617
656
|
const { filename, extension = "" } = context;
|
|
618
657
|
/**
|
|
658
|
+
* Returns result.
|
|
619
659
|
* @param {string | boolean} name name
|
|
620
660
|
* @returns {Promise<Buffer[]>} result
|
|
621
661
|
*/
|
|
@@ -646,6 +686,10 @@ class FileMiddleware extends SerializerMiddleware {
|
|
|
646
686
|
decompression = createBrotliDecompress({
|
|
647
687
|
chunkSize: DECOMPRESSION_CHUNK_SIZE
|
|
648
688
|
});
|
|
689
|
+
} else if (file.endsWith(".zst")) {
|
|
690
|
+
decompression = createZstdDecompress({
|
|
691
|
+
chunkSize: DECOMPRESSION_CHUNK_SIZE
|
|
692
|
+
});
|
|
649
693
|
}
|
|
650
694
|
if (decompression) {
|
|
651
695
|
/** @typedef {(value: Buffer[] | PromiseLike<Buffer[]>) => void} NewResolve */
|
|
@@ -663,6 +707,7 @@ class FileMiddleware extends SerializerMiddleware {
|
|
|
663
707
|
}),
|
|
664
708
|
new Promise(
|
|
665
709
|
/**
|
|
710
|
+
* Handles the chunk size callback for this hook.
|
|
666
711
|
* @param {(value?: undefined) => void} resolve resolve
|
|
667
712
|
* @param {(reason?: Error) => void} reject reject
|
|
668
713
|
*/
|
|
@@ -764,3 +809,5 @@ class FileMiddleware extends SerializerMiddleware {
|
|
|
764
809
|
}
|
|
765
810
|
|
|
766
811
|
module.exports = FileMiddleware;
|
|
812
|
+
// Exposed for testing the content-buffer boundary handling in `deserialize`.
|
|
813
|
+
module.exports._deserialize = deserialize;
|
|
@@ -4,14 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
"use strict";
|
|
6
6
|
|
|
7
|
-
/** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
|
8
|
-
/** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
|
9
|
-
|
|
10
7
|
class MapObjectSerializer {
|
|
11
8
|
/**
|
|
9
|
+
* Serializes this instance into the provided serializer context.
|
|
12
10
|
* @template K, V
|
|
13
11
|
* @param {Map<K, V>} obj map
|
|
14
|
-
* @param {ObjectSerializerContext} context context
|
|
12
|
+
* @param {import("./ObjectMiddleware").ObjectSerializerContext<(number | K | V)[]>} context context
|
|
15
13
|
*/
|
|
16
14
|
serialize(obj, context) {
|
|
17
15
|
context.write(obj.size);
|
|
@@ -24,22 +22,22 @@ class MapObjectSerializer {
|
|
|
24
22
|
}
|
|
25
23
|
|
|
26
24
|
/**
|
|
25
|
+
* Restores this instance from the provided deserializer context.
|
|
27
26
|
* @template K, V
|
|
28
|
-
* @param {ObjectDeserializerContext} context context
|
|
27
|
+
* @param {import("./ObjectMiddleware").ObjectDeserializerContext<(number | K | V)[]>} context context
|
|
29
28
|
* @returns {Map<K, V>} map
|
|
30
29
|
*/
|
|
31
30
|
deserialize(context) {
|
|
32
|
-
/** @type {number} */
|
|
33
|
-
const size = context.read();
|
|
31
|
+
const size = /** @type {number} */ (context.read());
|
|
34
32
|
/** @type {Map<K, V>} */
|
|
35
33
|
const map = new Map();
|
|
36
34
|
/** @type {K[]} */
|
|
37
35
|
const keys = [];
|
|
38
36
|
for (let i = 0; i < size; i++) {
|
|
39
|
-
keys.push(context.read());
|
|
37
|
+
keys.push(/** @type {K} */ (context.read()));
|
|
40
38
|
}
|
|
41
39
|
for (let i = 0; i < size; i++) {
|
|
42
|
-
map.set(keys[i], context.read());
|
|
40
|
+
map.set(keys[i], /** @type {V} */ (context.read()));
|
|
43
41
|
}
|
|
44
42
|
return map;
|
|
45
43
|
}
|
|
@@ -4,16 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
"use strict";
|
|
6
6
|
|
|
7
|
-
/** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
|
8
|
-
/** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
|
9
|
-
|
|
10
7
|
/** @typedef {string[]} Keys */
|
|
11
8
|
|
|
12
9
|
class NullPrototypeObjectSerializer {
|
|
13
10
|
/**
|
|
11
|
+
* Serializes this instance into the provided serializer context.
|
|
14
12
|
* @template {object} T
|
|
15
13
|
* @param {T} obj null object
|
|
16
|
-
* @param {ObjectSerializerContext} context context
|
|
14
|
+
* @param {import("./ObjectMiddleware").ObjectSerializerContext<(string | null | T[keyof T])[]>} context context
|
|
17
15
|
*/
|
|
18
16
|
serialize(obj, context) {
|
|
19
17
|
/** @type {Keys} */
|
|
@@ -28,8 +26,9 @@ class NullPrototypeObjectSerializer {
|
|
|
28
26
|
}
|
|
29
27
|
|
|
30
28
|
/**
|
|
29
|
+
* Restores this instance from the provided deserializer context.
|
|
31
30
|
* @template {object} T
|
|
32
|
-
* @param {ObjectDeserializerContext} context context
|
|
31
|
+
* @param {import("./ObjectMiddleware").ObjectDeserializerContext<(string | null | T[keyof T])[]>} context context
|
|
33
32
|
* @returns {T} null object
|
|
34
33
|
*/
|
|
35
34
|
deserialize(context) {
|
|
@@ -37,14 +36,15 @@ class NullPrototypeObjectSerializer {
|
|
|
37
36
|
const obj = Object.create(null);
|
|
38
37
|
/** @type {Keys} */
|
|
39
38
|
const keys = [];
|
|
40
|
-
/** @type {
|
|
41
|
-
let key = context.read();
|
|
39
|
+
let key = /** @type {string | null} */ (context.read());
|
|
42
40
|
while (key !== null) {
|
|
43
41
|
keys.push(key);
|
|
44
|
-
key = context.read();
|
|
42
|
+
key = /** @type {string | null} */ (context.read());
|
|
45
43
|
}
|
|
46
44
|
for (const key of keys) {
|
|
47
|
-
obj[/** @type {keyof T} */ (key)] =
|
|
45
|
+
obj[/** @type {keyof T} */ (key)] = /** @type {T[keyof T]} */ (
|
|
46
|
+
context.read()
|
|
47
|
+
);
|
|
48
48
|
}
|
|
49
49
|
return obj;
|
|
50
50
|
}
|
|
@@ -48,6 +48,7 @@ Technically any value can be used.
|
|
|
48
48
|
*/
|
|
49
49
|
|
|
50
50
|
/**
|
|
51
|
+
* Defines the object serializer snapshot type used by this module.
|
|
51
52
|
* @typedef {object} ObjectSerializerSnapshot
|
|
52
53
|
* @property {number} length
|
|
53
54
|
* @property {number} cycleStackSize
|
|
@@ -60,8 +61,23 @@ Technically any value can be used.
|
|
|
60
61
|
/** @typedef {EXPECTED_OBJECT | string} ReferenceableItem */
|
|
61
62
|
|
|
62
63
|
/**
|
|
64
|
+
* First tuple element; element type for an open array; `EXPECTED_ANY` once exhausted.
|
|
65
|
+
* @template {readonly EXPECTED_ANY[]} T
|
|
66
|
+
* @typedef {T extends readonly [infer H, ...EXPECTED_ANY[]] ? H : T extends readonly [] ? EXPECTED_ANY : T extends readonly (infer E)[] ? E : never} Head
|
|
67
|
+
*/
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Tuple without its first element; unchanged when `T` is an open array.
|
|
71
|
+
* @template {readonly EXPECTED_ANY[]} T
|
|
72
|
+
* @typedef {T extends readonly [EXPECTED_ANY, ...infer R] ? R : T} Tail
|
|
73
|
+
*/
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Defines the object serializer context type used by this module.
|
|
77
|
+
* `T` is the tuple of values written in order; each `write` consumes the head.
|
|
78
|
+
* @template {readonly EXPECTED_ANY[]} [T=readonly EXPECTED_ANY[]]
|
|
63
79
|
* @typedef {object} ObjectSerializerContext
|
|
64
|
-
* @property {(value:
|
|
80
|
+
* @property {(value: Head<T>) => ObjectSerializerContext<Tail<T>>} write
|
|
65
81
|
* @property {(value: ReferenceableItem) => void} setCircularReference
|
|
66
82
|
* @property {() => ObjectSerializerSnapshot} snapshot
|
|
67
83
|
* @property {(snapshot: ObjectSerializerSnapshot) => void} rollback
|
|
@@ -70,18 +86,25 @@ Technically any value can be used.
|
|
|
70
86
|
*/
|
|
71
87
|
|
|
72
88
|
/**
|
|
89
|
+
* Defines the object deserializer context type used by this module.
|
|
90
|
+
* `T` is the tuple of values read in order: `read` returns the head, and `rest`
|
|
91
|
+
* re-types the same context to `Tail<T>` so successive reads stay positional.
|
|
92
|
+
* @template {readonly EXPECTED_ANY[]} [T=readonly EXPECTED_ANY[]]
|
|
73
93
|
* @typedef {object} ObjectDeserializerContext
|
|
74
|
-
* @property {() =>
|
|
94
|
+
* @property {() => Head<T>} read
|
|
95
|
+
* @property {ObjectDeserializerContext<Tail<T>>} rest
|
|
75
96
|
* @property {(value: ReferenceableItem) => void} setCircularReference
|
|
76
97
|
*/
|
|
77
98
|
|
|
78
99
|
/**
|
|
100
|
+
* Defines the object serializer type used by this module.
|
|
79
101
|
* @typedef {object} ObjectSerializer
|
|
80
|
-
* @property {(value: EXPECTED_ANY, context: ObjectSerializerContext) => void} serialize
|
|
81
|
-
* @property {(context: ObjectDeserializerContext) => EXPECTED_ANY} deserialize
|
|
102
|
+
* @property {(value: EXPECTED_ANY, context: ObjectSerializerContext<EXPECTED_ANY>) => void} serialize
|
|
103
|
+
* @property {(context: ObjectDeserializerContext<EXPECTED_ANY>) => EXPECTED_ANY} deserialize
|
|
82
104
|
*/
|
|
83
105
|
|
|
84
106
|
/**
|
|
107
|
+
* Updates set size using the provided set.
|
|
85
108
|
* @template T
|
|
86
109
|
* @param {Set<T>} set set
|
|
87
110
|
* @param {number} size count of items to keep
|
|
@@ -96,6 +119,7 @@ const setSetSize = (set, size) => {
|
|
|
96
119
|
};
|
|
97
120
|
|
|
98
121
|
/**
|
|
122
|
+
* Updates map size using the provided map.
|
|
99
123
|
* @template K, X
|
|
100
124
|
* @param {Map<K, X>} map map
|
|
101
125
|
* @param {number} size count of items to keep
|
|
@@ -110,6 +134,7 @@ const setMapSize = (map, size) => {
|
|
|
110
134
|
};
|
|
111
135
|
|
|
112
136
|
/**
|
|
137
|
+
* Returns hash.
|
|
113
138
|
* @param {Buffer} buffer buffer
|
|
114
139
|
* @param {HashFunction} hashFunction hash function to use
|
|
115
140
|
* @returns {string} hash
|
|
@@ -207,13 +232,15 @@ const loaders = new Map();
|
|
|
207
232
|
/** @typedef {PrimitiveSerializableType[]} SerializedType */
|
|
208
233
|
/** @typedef {{ logger: Logger }} Context */
|
|
209
234
|
|
|
210
|
-
/** @typedef {(context: ObjectSerializerContext | ObjectDeserializerContext) => void} ExtendContext */
|
|
235
|
+
/** @typedef {(context: ObjectSerializerContext<EXPECTED_ANY> | ObjectDeserializerContext<EXPECTED_ANY>) => void} ExtendContext */
|
|
211
236
|
|
|
212
237
|
/**
|
|
238
|
+
* Represents ObjectMiddleware.
|
|
213
239
|
* @extends {SerializerMiddleware<DeserializedType, SerializedType, Context>}
|
|
214
240
|
*/
|
|
215
241
|
class ObjectMiddleware extends SerializerMiddleware {
|
|
216
242
|
/**
|
|
243
|
+
* Creates an instance of ObjectMiddleware.
|
|
217
244
|
* @param {ExtendContext} extendContext context extensions
|
|
218
245
|
* @param {HashFunction} hashFunction hash function to use
|
|
219
246
|
*/
|
|
@@ -226,6 +253,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
226
253
|
}
|
|
227
254
|
|
|
228
255
|
/**
|
|
256
|
+
* Processes the provided reg exp.
|
|
229
257
|
* @param {RegExp} regExp RegExp for which the request is tested
|
|
230
258
|
* @param {(request: string) => boolean} loader loader to load the request, returns true when successful
|
|
231
259
|
* @returns {void}
|
|
@@ -235,6 +263,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
235
263
|
}
|
|
236
264
|
|
|
237
265
|
/**
|
|
266
|
+
* Processes the provided constructor.
|
|
238
267
|
* @param {Constructor} Constructor the constructor
|
|
239
268
|
* @param {string} request the request which will be required when deserializing
|
|
240
269
|
* @param {string | null} name the name to make multiple serializer unique when sharing a request
|
|
@@ -266,6 +295,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
266
295
|
}
|
|
267
296
|
|
|
268
297
|
/**
|
|
298
|
+
* Register not serializable.
|
|
269
299
|
* @param {Constructor} Constructor the constructor
|
|
270
300
|
* @returns {void}
|
|
271
301
|
*/
|
|
@@ -280,6 +310,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
280
310
|
}
|
|
281
311
|
|
|
282
312
|
/**
|
|
313
|
+
* Gets serializer for.
|
|
283
314
|
* @param {EXPECTED_ANY} object for serialization
|
|
284
315
|
* @returns {SerializerConfigWithSerializer} Serializer config
|
|
285
316
|
*/
|
|
@@ -311,6 +342,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
311
342
|
}
|
|
312
343
|
|
|
313
344
|
/**
|
|
345
|
+
* Gets deserializer for.
|
|
314
346
|
* @param {string} request request
|
|
315
347
|
* @param {string} name name
|
|
316
348
|
* @returns {ObjectSerializer} serializer
|
|
@@ -327,6 +359,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
327
359
|
}
|
|
328
360
|
|
|
329
361
|
/**
|
|
362
|
+
* Get deserializer for without error.
|
|
330
363
|
* @param {string} request request
|
|
331
364
|
* @param {string} name name
|
|
332
365
|
* @returns {ObjectSerializer | undefined} serializer
|
|
@@ -338,6 +371,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
338
371
|
}
|
|
339
372
|
|
|
340
373
|
/**
|
|
374
|
+
* Serializes this instance into the provided serializer context.
|
|
341
375
|
* @param {DeserializedType} data data
|
|
342
376
|
* @param {Context} context context object
|
|
343
377
|
* @returns {SerializedType | Promise<SerializedType> | null} serialized data
|
|
@@ -349,6 +383,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
349
383
|
/** @type {Map<ReferenceableItem, number>} */
|
|
350
384
|
let referenceable = new Map();
|
|
351
385
|
/**
|
|
386
|
+
* Adds referenceable.
|
|
352
387
|
* @param {ReferenceableItem} item referenceable item
|
|
353
388
|
*/
|
|
354
389
|
const addReferenceable = (item) => {
|
|
@@ -357,6 +392,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
357
392
|
/** @type {Map<number, Buffer | [Buffer, Buffer] | Map<string, Buffer>>} */
|
|
358
393
|
let bufferDedupeMap = new Map();
|
|
359
394
|
/**
|
|
395
|
+
* Returns deduped buffer.
|
|
360
396
|
* @param {Buffer} buf buffer
|
|
361
397
|
* @returns {Buffer} deduped buffer
|
|
362
398
|
*/
|
|
@@ -426,6 +462,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
426
462
|
/** @type {Set<ComplexSerializableType>} */
|
|
427
463
|
const cycleStack = new Set();
|
|
428
464
|
/**
|
|
465
|
+
* Returns stack.
|
|
429
466
|
* @param {ComplexSerializableType} item item to stack
|
|
430
467
|
* @returns {string} stack
|
|
431
468
|
*/
|
|
@@ -487,11 +524,11 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
487
524
|
};
|
|
488
525
|
/** @type {undefined | WeakSet<Error>} */
|
|
489
526
|
let hasDebugInfoAttached;
|
|
490
|
-
/** @type {ObjectSerializerContext} */
|
|
527
|
+
/** @type {ObjectSerializerContext<EXPECTED_ANY>} */
|
|
491
528
|
let ctx = {
|
|
492
529
|
write(value) {
|
|
493
530
|
try {
|
|
494
|
-
process(value);
|
|
531
|
+
process(/** @type {ComplexSerializableType} */ (value));
|
|
495
532
|
} catch (err) {
|
|
496
533
|
if (err !== NOT_SERIALIZABLE) {
|
|
497
534
|
if (hasDebugInfoAttached === undefined) {
|
|
@@ -499,12 +536,14 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
499
536
|
}
|
|
500
537
|
if (!hasDebugInfoAttached.has(/** @type {Error} */ (err))) {
|
|
501
538
|
/** @type {Error} */
|
|
502
|
-
(err).message +=
|
|
539
|
+
(err).message +=
|
|
540
|
+
`\nwhile serializing ${stackToString(/** @type {ComplexSerializableType} */ (value))}`;
|
|
503
541
|
hasDebugInfoAttached.add(/** @type {Error} */ (err));
|
|
504
542
|
}
|
|
505
543
|
}
|
|
506
544
|
throw err;
|
|
507
545
|
}
|
|
546
|
+
return ctx;
|
|
508
547
|
},
|
|
509
548
|
setCircularReference(ref) {
|
|
510
549
|
addReferenceable(ref);
|
|
@@ -531,6 +570,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
531
570
|
};
|
|
532
571
|
this.extendContext(ctx);
|
|
533
572
|
/**
|
|
573
|
+
* Processes the provided item.
|
|
534
574
|
* @param {ComplexSerializableType} item item to serialize
|
|
535
575
|
*/
|
|
536
576
|
const process = (item) => {
|
|
@@ -605,8 +645,19 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
605
645
|
// check if we can emit a reference
|
|
606
646
|
const ref = referenceable.get(item);
|
|
607
647
|
if (ref !== undefined) {
|
|
608
|
-
|
|
609
|
-
|
|
648
|
+
const offset = ref - currentPos;
|
|
649
|
+
if (
|
|
650
|
+
// One far ref → 5 bytes (`null` + offset), one near ref -> 2/3 bytes
|
|
651
|
+
offset >= -32768 ||
|
|
652
|
+
// long enough that the ref wins, keep it
|
|
653
|
+
item.length >= 4 ||
|
|
654
|
+
// multibyte → inline would be even bigger, keep it
|
|
655
|
+
Buffer.byteLength(item) !== item.length
|
|
656
|
+
) {
|
|
657
|
+
// A back-reference is `null` + the offset.
|
|
658
|
+
result.push(ESCAPE, offset);
|
|
659
|
+
return;
|
|
660
|
+
}
|
|
610
661
|
}
|
|
611
662
|
addReferenceable(item);
|
|
612
663
|
}
|
|
@@ -681,6 +732,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
681
732
|
}
|
|
682
733
|
|
|
683
734
|
/**
|
|
735
|
+
* Restores this instance from the provided deserializer context.
|
|
684
736
|
* @param {SerializedType} data data
|
|
685
737
|
* @param {Context} context context object
|
|
686
738
|
* @returns {DeserializedType | Promise<DeserializedType>} deserialized data
|
|
@@ -703,6 +755,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
703
755
|
/** @type {ReferenceableItem[]} */
|
|
704
756
|
let referenceable = [];
|
|
705
757
|
/**
|
|
758
|
+
* Adds referenceable.
|
|
706
759
|
* @param {ReferenceableItem} item referenceable item
|
|
707
760
|
*/
|
|
708
761
|
const addReferenceable = (item) => {
|
|
@@ -714,10 +767,14 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
714
767
|
let objectTypeLookup = [];
|
|
715
768
|
/** @type {ComplexSerializableType[]} */
|
|
716
769
|
let result = [];
|
|
717
|
-
/** @type {ObjectDeserializerContext} */
|
|
770
|
+
/** @type {ObjectDeserializerContext<EXPECTED_ANY>} */
|
|
718
771
|
let ctx = {
|
|
719
772
|
read() {
|
|
720
|
-
return decodeValue();
|
|
773
|
+
return /** @type {EXPECTED_ANY} */ (decodeValue());
|
|
774
|
+
},
|
|
775
|
+
// type-only cursor advance; same object, retyped to the tuple tail
|
|
776
|
+
get rest() {
|
|
777
|
+
return ctx;
|
|
721
778
|
},
|
|
722
779
|
setCircularReference(ref) {
|
|
723
780
|
addReferenceable(ref);
|
|
@@ -726,6 +783,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
726
783
|
};
|
|
727
784
|
this.extendContext(ctx);
|
|
728
785
|
/**
|
|
786
|
+
* Decodes the provided value.
|
|
729
787
|
* @returns {ComplexSerializableType} deserialize value
|
|
730
788
|
*/
|
|
731
789
|
const decodeValue = () => {
|
|
@@ -836,7 +894,9 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
836
894
|
}
|
|
837
895
|
|
|
838
896
|
return item;
|
|
839
|
-
} else if (
|
|
897
|
+
} else if (typeof item === "object") {
|
|
898
|
+
// Only non-null objects reach here (ESCAPE/null handled above), and
|
|
899
|
+
// the stream's only object type is Buffer — avoids a Buffer.isBuffer call
|
|
840
900
|
addReferenceable(item);
|
|
841
901
|
|
|
842
902
|
return item;
|