webpack 5.97.1 → 5.104.1
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 +368 -434
- package/bin/webpack.js +15 -9
- package/hot/dev-server.js +18 -3
- package/hot/emitter-event-target.js +7 -0
- package/hot/lazy-compilation-node.js +45 -29
- package/hot/lazy-compilation-universal.js +18 -0
- package/hot/lazy-compilation-web.js +15 -5
- package/hot/load-http.js +7 -0
- package/hot/log.js +15 -15
- package/hot/only-dev-server.js +19 -4
- package/hot/poll.js +1 -0
- package/lib/APIPlugin.js +48 -50
- package/lib/AbstractMethodError.js +1 -0
- package/lib/AsyncDependenciesBlock.js +4 -5
- package/lib/AutomaticPrefetchPlugin.js +22 -22
- package/lib/BannerPlugin.js +35 -40
- package/lib/Cache.js +12 -9
- package/lib/CacheFacade.js +13 -13
- package/lib/CaseSensitiveModulesWarning.js +6 -6
- package/lib/Chunk.js +68 -47
- package/lib/ChunkGraph.js +174 -95
- package/lib/ChunkGroup.js +32 -24
- package/lib/ChunkTemplate.js +8 -8
- package/lib/CleanPlugin.js +90 -42
- package/lib/CodeGenerationResults.js +12 -9
- package/lib/CompatibilityPlugin.js +70 -21
- package/lib/Compilation.js +827 -550
- package/lib/Compiler.js +137 -109
- package/lib/ConcatenationScope.js +45 -8
- package/lib/ConditionalInitFragment.js +1 -1
- package/lib/ConstPlugin.js +89 -59
- package/lib/ContextExclusionPlugin.js +5 -4
- package/lib/ContextModule.js +66 -51
- package/lib/ContextModuleFactory.js +51 -30
- package/lib/ContextReplacementPlugin.js +89 -34
- package/lib/CssModule.js +8 -4
- package/lib/DefinePlugin.js +209 -57
- package/lib/DelegatedModule.js +34 -23
- package/lib/DelegatedModuleFactoryPlugin.js +27 -24
- package/lib/DelegatedPlugin.js +4 -2
- package/lib/DependenciesBlock.js +0 -2
- package/lib/Dependency.js +37 -19
- package/lib/DependencyTemplate.js +2 -0
- package/lib/DependencyTemplates.js +5 -6
- package/lib/DllEntryPlugin.js +8 -4
- package/lib/DllModule.js +11 -12
- package/lib/DllModuleFactory.js +2 -2
- package/lib/DllPlugin.js +9 -6
- package/lib/DllReferencePlugin.js +60 -65
- package/lib/DotenvPlugin.js +462 -0
- package/lib/DynamicEntryPlugin.js +8 -8
- package/lib/EntryOptionPlugin.js +8 -6
- package/lib/EntryPlugin.js +5 -3
- package/lib/Entrypoint.js +19 -0
- package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
- package/lib/EnvironmentPlugin.js +26 -19
- package/lib/ErrorHelpers.js +6 -6
- package/lib/EvalDevToolModulePlugin.js +17 -14
- package/lib/EvalSourceMapDevToolPlugin.js +156 -142
- package/lib/ExportsInfo.js +180 -115
- package/lib/ExportsInfoApiPlugin.js +2 -2
- package/lib/ExternalModule.js +256 -102
- package/lib/ExternalModuleFactoryPlugin.js +66 -29
- package/lib/ExternalsPlugin.js +57 -2
- package/lib/FileSystemInfo.js +313 -247
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
- package/lib/FlagDependencyExportsPlugin.js +29 -19
- package/lib/FlagDependencyUsagePlugin.js +9 -10
- package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
- package/lib/Generator.js +43 -10
- package/lib/GraphHelpers.js +11 -3
- package/lib/HookWebpackError.js +35 -7
- package/lib/HotModuleReplacementPlugin.js +149 -108
- package/lib/HotUpdateChunk.js +0 -3
- package/lib/IgnoreErrorModuleFactory.js +2 -2
- package/lib/IgnorePlugin.js +16 -13
- package/lib/IgnoreWarningsPlugin.js +6 -4
- package/lib/InitFragment.js +41 -23
- package/lib/InvalidDependenciesModuleWarning.js +2 -3
- package/lib/JavascriptMetaInfoPlugin.js +2 -4
- package/lib/LibManifestPlugin.js +12 -13
- package/lib/LoaderOptionsPlugin.js +12 -14
- package/lib/LoaderTargetPlugin.js +5 -3
- package/lib/MainTemplate.js +18 -29
- package/lib/ManifestPlugin.js +235 -0
- package/lib/Module.js +138 -60
- package/lib/ModuleBuildError.js +4 -2
- package/lib/ModuleDependencyError.js +4 -3
- package/lib/ModuleDependencyWarning.js +4 -3
- package/lib/ModuleError.js +1 -1
- package/lib/ModuleFactory.js +10 -3
- package/lib/ModuleFilenameHelpers.js +63 -60
- package/lib/ModuleGraph.js +195 -70
- package/lib/ModuleGraphConnection.js +14 -20
- package/lib/ModuleInfoHeaderPlugin.js +15 -16
- package/lib/ModuleNotFoundError.js +1 -1
- package/lib/ModuleParseError.js +8 -4
- package/lib/ModuleSourceTypeConstants.js +189 -0
- package/lib/ModuleTemplate.js +7 -8
- package/lib/ModuleTypeConstants.js +37 -15
- package/lib/ModuleWarning.js +1 -1
- package/lib/MultiCompiler.js +64 -49
- package/lib/MultiStats.js +19 -14
- package/lib/MultiWatching.js +7 -11
- package/lib/NoEmitOnErrorsPlugin.js +5 -3
- package/lib/NodeStuffPlugin.js +438 -126
- package/lib/NormalModule.js +322 -201
- package/lib/NormalModuleFactory.js +230 -117
- package/lib/NormalModuleReplacementPlugin.js +37 -39
- package/lib/NullFactory.js +3 -2
- package/lib/OptimizationStages.js +1 -1
- package/lib/OptionsApply.js +1 -1
- package/lib/Parser.js +5 -3
- package/lib/PlatformPlugin.js +3 -1
- package/lib/PrefetchPlugin.js +6 -4
- package/lib/ProgressPlugin.js +48 -49
- package/lib/ProvidePlugin.js +7 -5
- package/lib/RawModule.js +26 -12
- package/lib/RecordIdsPlugin.js +88 -110
- package/lib/RequestShortener.js +3 -1
- package/lib/ResolverFactory.js +15 -14
- package/lib/RuntimeGlobals.js +216 -153
- package/lib/RuntimeModule.js +7 -6
- package/lib/RuntimePlugin.js +115 -62
- package/lib/RuntimeTemplate.js +248 -76
- package/lib/SelfModuleFactory.js +2 -2
- package/lib/SizeFormatHelpers.js +2 -2
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
- package/lib/SourceMapDevToolPlugin.js +72 -59
- package/lib/Stats.js +2 -3
- package/lib/Template.js +31 -24
- package/lib/TemplatedPathPlugin.js +24 -21
- package/lib/UseStrictPlugin.js +1 -1
- package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
- package/lib/WarnDeprecatedOptionPlugin.js +7 -8
- package/lib/WarnNoModeSetPlugin.js +3 -1
- package/lib/WatchIgnorePlugin.js +11 -9
- package/lib/Watching.js +27 -29
- package/lib/WebpackError.js +10 -3
- package/lib/WebpackIsIncludedPlugin.js +4 -5
- package/lib/WebpackOptionsApply.js +263 -135
- package/lib/asset/AssetBytesGenerator.js +171 -0
- package/lib/asset/AssetBytesParser.js +37 -0
- package/lib/asset/AssetGenerator.js +285 -223
- package/lib/asset/AssetModulesPlugin.js +103 -41
- package/lib/asset/AssetParser.js +7 -3
- package/lib/asset/AssetSourceGenerator.js +41 -17
- package/lib/asset/RawDataUrlModule.js +17 -9
- package/lib/async-modules/AsyncModuleHelpers.js +52 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
- package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
- package/lib/buildChunkGraph.js +36 -17
- package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
- package/lib/cache/IdleFileCachePlugin.js +22 -20
- package/lib/cache/MemoryCachePlugin.js +3 -3
- package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
- package/lib/cache/PackFileCacheStrategy.js +198 -170
- package/lib/cache/ResolverCachePlugin.js +58 -48
- package/lib/cache/getLazyHashedEtag.js +5 -4
- package/lib/cli.js +197 -39
- package/lib/config/browserslistTargetHandler.js +110 -85
- package/lib/config/defaults.js +514 -113
- package/lib/config/normalization.js +91 -64
- package/lib/config/target.js +30 -18
- package/lib/container/ContainerEntryDependency.js +0 -1
- package/lib/container/ContainerEntryModule.js +16 -15
- package/lib/container/ContainerEntryModuleFactory.js +2 -2
- package/lib/container/ContainerPlugin.js +5 -6
- package/lib/container/ContainerReferencePlugin.js +27 -30
- package/lib/container/FallbackDependency.js +2 -1
- package/lib/container/FallbackModule.js +19 -14
- package/lib/container/FallbackModuleFactory.js +2 -2
- package/lib/container/HoistContainerReferencesPlugin.js +7 -7
- package/lib/container/ModuleFederationPlugin.js +4 -4
- package/lib/container/RemoteModule.js +14 -14
- package/lib/container/RemoteRuntimeModule.js +2 -2
- package/lib/container/options.js +9 -9
- package/lib/css/CssGenerator.js +366 -74
- package/lib/css/CssLoadingRuntimeModule.js +26 -16
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
- package/lib/css/CssModulesPlugin.js +191 -142
- package/lib/css/CssParser.js +1756 -740
- package/lib/css/walkCssTokens.js +180 -67
- package/lib/debug/ProfilingPlugin.js +135 -51
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
- package/lib/dependencies/AMDPlugin.js +18 -11
- package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
- package/lib/dependencies/AMDRequireContextDependency.js +2 -1
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
- package/lib/dependencies/AMDRuntimeModules.js +3 -1
- package/lib/dependencies/CachedConstDependency.js +24 -18
- package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
- package/lib/dependencies/CommonJsExportsDependency.js +2 -1
- package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
- package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
- package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
- package/lib/dependencies/CommonJsPlugin.js +29 -18
- package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
- package/lib/dependencies/ConstDependency.js +2 -2
- package/lib/dependencies/ContextDependency.js +10 -5
- package/lib/dependencies/ContextDependencyHelpers.js +21 -13
- package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
- package/lib/dependencies/ContextElementDependency.js +23 -12
- package/lib/dependencies/CssIcssExportDependency.js +402 -22
- package/lib/dependencies/CssIcssImportDependency.js +116 -51
- package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
- package/lib/dependencies/CssImportDependency.js +17 -14
- package/lib/dependencies/CssUrlDependency.js +8 -13
- package/lib/dependencies/DynamicExports.js +19 -19
- package/lib/dependencies/ExportsInfoDependency.js +13 -10
- package/lib/dependencies/ExternalModuleDependency.js +7 -7
- package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
- package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
- package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
- package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
- package/lib/dependencies/HarmonyExports.js +5 -5
- package/lib/dependencies/HarmonyImportDependency.js +92 -45
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
- package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
- package/lib/dependencies/ImportContextDependency.js +15 -1
- package/lib/dependencies/ImportDependency.js +25 -7
- package/lib/dependencies/ImportEagerDependency.js +7 -5
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
- package/lib/dependencies/ImportMetaPlugin.js +172 -20
- package/lib/dependencies/ImportParserPlugin.js +327 -49
- package/lib/dependencies/ImportPhase.js +121 -0
- package/lib/dependencies/ImportPlugin.js +3 -1
- package/lib/dependencies/ImportWeakDependency.js +7 -5
- package/lib/dependencies/JsonExportsDependency.js +54 -28
- package/lib/dependencies/LoaderDependency.js +0 -3
- package/lib/dependencies/LoaderImportDependency.js +0 -3
- package/lib/dependencies/LoaderPlugin.js +24 -25
- package/lib/dependencies/LocalModulesHelpers.js +4 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
- package/lib/dependencies/ModuleDependency.js +14 -13
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/ProvidedDependency.js +8 -10
- package/lib/dependencies/PureExpressionDependency.js +1 -2
- package/lib/dependencies/RequireContextDependency.js +2 -1
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
- package/lib/dependencies/RequireContextPlugin.js +5 -2
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
- package/lib/dependencies/RequireEnsurePlugin.js +6 -6
- package/lib/dependencies/RequireIncludeDependency.js +2 -2
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
- package/lib/dependencies/RequireIncludePlugin.js +1 -0
- package/lib/dependencies/RequireResolveContextDependency.js +1 -1
- package/lib/dependencies/RequireResolveDependency.js +3 -3
- package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
- package/lib/dependencies/StaticExportsDependency.js +3 -5
- package/lib/dependencies/SystemPlugin.js +4 -4
- package/lib/dependencies/URLContextDependency.js +65 -0
- package/lib/dependencies/URLDependency.js +3 -8
- package/lib/dependencies/URLPlugin.js +18 -159
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
- package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
- package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
- package/lib/dependencies/WorkerDependency.js +8 -6
- package/lib/dependencies/WorkerPlugin.js +131 -67
- package/lib/dependencies/getFunctionExpression.js +2 -2
- package/lib/dependencies/processExportInfo.js +4 -4
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
- package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
- package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
- package/lib/formatLocation.js +2 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
- package/lib/hmr/LazyCompilationPlugin.js +67 -54
- package/lib/hmr/lazyCompilationBackend.js +23 -18
- package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
- package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
- package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
- package/lib/ids/HashedModuleIdsPlugin.js +15 -13
- package/lib/ids/IdHelpers.js +66 -49
- package/lib/ids/NamedChunkIdsPlugin.js +14 -17
- package/lib/ids/NamedModuleIdsPlugin.js +12 -14
- package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
- package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
- package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
- package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
- package/lib/ids/SyncModuleIdsPlugin.js +18 -13
- package/lib/index.js +54 -14
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
- package/lib/javascript/BasicEvaluatedExpression.js +26 -18
- package/lib/javascript/ChunkFormatHelpers.js +70 -0
- package/lib/javascript/ChunkHelpers.js +17 -5
- package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
- package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
- package/lib/javascript/JavascriptGenerator.js +122 -100
- package/lib/javascript/JavascriptModulesPlugin.js +332 -152
- package/lib/javascript/JavascriptParser.js +1488 -1052
- package/lib/javascript/JavascriptParserHelpers.js +48 -47
- package/lib/javascript/StartupHelpers.js +23 -22
- package/lib/json/JsonData.js +4 -4
- package/lib/json/JsonGenerator.js +66 -32
- package/lib/json/JsonModulesPlugin.js +16 -6
- package/lib/json/JsonParser.js +23 -8
- package/lib/library/AbstractLibraryPlugin.js +45 -10
- package/lib/library/AmdLibraryPlugin.js +7 -5
- package/lib/library/AssignLibraryPlugin.js +71 -17
- package/lib/library/EnableLibraryPlugin.js +51 -25
- package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
- package/lib/library/JsonpLibraryPlugin.js +5 -2
- package/lib/library/ModuleLibraryPlugin.js +230 -18
- package/lib/library/SystemLibraryPlugin.js +29 -11
- package/lib/library/UmdLibraryPlugin.js +35 -32
- package/lib/logging/Logger.js +18 -15
- package/lib/logging/createConsoleLogger.js +27 -27
- package/lib/logging/runtime.js +11 -11
- package/lib/logging/truncateArgs.js +5 -5
- package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
- package/lib/node/NodeEnvironmentPlugin.js +9 -3
- package/lib/node/NodeTargetPlugin.js +9 -1
- package/lib/node/NodeTemplatePlugin.js +2 -2
- package/lib/node/NodeWatchFileSystem.js +4 -4
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
- package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
- package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
- package/lib/node/nodeConsole.js +12 -7
- package/lib/optimize/AggressiveMergingPlugin.js +46 -47
- package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
- package/lib/optimize/ConcatenatedModule.js +620 -251
- package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
- package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
- package/lib/optimize/InnerGraph.js +139 -124
- package/lib/optimize/InnerGraphPlugin.js +29 -24
- package/lib/optimize/LimitChunkCountPlugin.js +32 -8
- package/lib/optimize/MangleExportsPlugin.js +22 -22
- package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
- package/lib/optimize/MinChunkSizePlugin.js +12 -7
- package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
- package/lib/optimize/RealContentHashPlugin.js +58 -44
- package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
- package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
- package/lib/optimize/RuntimeChunkPlugin.js +22 -25
- package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
- package/lib/optimize/SplitChunksPlugin.js +209 -158
- package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
- package/lib/performance/SizeLimitsPlugin.js +8 -5
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
- package/lib/rules/BasicEffectRulePlugin.js +14 -5
- package/lib/rules/BasicMatcherRulePlugin.js +18 -7
- package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
- package/lib/rules/RuleSetCompiler.js +73 -32
- package/lib/rules/UseEffectRulePlugin.js +61 -25
- package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
- package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
- package/lib/runtime/BaseUriRuntimeModule.js +2 -2
- package/lib/runtime/CompatRuntimeModule.js +0 -1
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
- package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
- package/lib/runtime/PublicPathRuntimeModule.js +2 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
- package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
- package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
- package/lib/runtime/SystemContextRuntimeModule.js +0 -2
- package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
- package/lib/schemes/DataUriPlugin.js +9 -31
- package/lib/schemes/FileUriPlugin.js +11 -6
- package/lib/schemes/HttpUriPlugin.js +381 -261
- package/lib/schemes/VirtualUrlPlugin.js +222 -0
- package/lib/serialization/AggregateErrorSerializer.js +41 -0
- package/lib/serialization/BinaryMiddleware.js +51 -33
- package/lib/serialization/ErrorObjectSerializer.js +7 -2
- package/lib/serialization/FileMiddleware.js +101 -71
- package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
- package/lib/serialization/ObjectMiddleware.js +130 -54
- package/lib/serialization/PlainObjectSerializer.js +1 -1
- package/lib/serialization/Serializer.js +38 -20
- package/lib/serialization/SerializerMiddleware.js +121 -49
- package/lib/serialization/SingleItemMiddleware.js +9 -7
- package/lib/serialization/types.js +1 -1
- package/lib/sharing/ConsumeSharedModule.js +9 -9
- package/lib/sharing/ConsumeSharedPlugin.js +14 -14
- package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
- package/lib/sharing/ProvideSharedModule.js +9 -11
- package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
- package/lib/sharing/ProvideSharedPlugin.js +15 -10
- package/lib/sharing/SharePlugin.js +3 -4
- package/lib/sharing/ShareRuntimeModule.js +7 -6
- package/lib/sharing/resolveMatchedConfigs.js +27 -13
- package/lib/sharing/utils.js +37 -43
- package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
- package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
- package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
- package/lib/stats/StatsFactory.js +75 -32
- package/lib/stats/StatsPrinter.js +71 -51
- package/lib/url/URLParserPlugin.js +264 -0
- package/lib/util/ArrayHelpers.js +6 -8
- package/lib/util/ArrayQueue.js +1 -1
- package/lib/util/AsyncQueue.js +11 -10
- package/lib/util/Hash.js +37 -5
- package/lib/util/IterableHelpers.js +4 -4
- package/lib/util/LazyBucketSortedSet.js +46 -27
- package/lib/util/LazySet.js +16 -10
- package/lib/util/MapHelpers.js +1 -1
- package/lib/util/ParallelismFactorCalculator.js +2 -2
- package/lib/util/Semaphore.js +3 -3
- package/lib/util/SetHelpers.js +6 -6
- package/lib/util/SortableSet.js +11 -9
- package/lib/util/StackedCacheMap.js +2 -2
- package/lib/util/StackedMap.js +3 -3
- package/lib/util/StringXor.js +2 -1
- package/lib/util/TupleQueue.js +11 -8
- package/lib/util/TupleSet.js +44 -19
- package/lib/util/URLAbsoluteSpecifier.js +3 -4
- package/lib/util/WeakTupleMap.js +56 -42
- package/lib/util/binarySearchBounds.js +4 -3
- package/lib/util/chainedImports.js +3 -1
- package/lib/util/cleverMerge.js +171 -107
- package/lib/util/comparators.js +265 -162
- package/lib/util/compileBooleanMatcher.js +120 -41
- package/lib/util/concatenate.js +20 -16
- package/lib/util/conventions.js +73 -74
- package/lib/util/create-schema-validation.js +8 -8
- package/lib/util/createHash.js +32 -135
- package/lib/util/dataURL.js +39 -0
- package/lib/util/deprecation.js +119 -116
- package/lib/util/deterministicGrouping.js +56 -47
- package/lib/util/extractSourceMap.js +319 -0
- package/lib/util/extractUrlAndGlobal.js +1 -1
- package/lib/util/findGraphRoots.js +19 -9
- package/lib/util/fs.js +169 -141
- package/lib/util/hash/BatchedHash.js +50 -10
- package/lib/util/hash/BulkUpdateHash.js +138 -0
- package/lib/util/hash/DebugHash.js +75 -0
- package/lib/util/hash/hash-digest.js +216 -0
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/wasm-hash.js +59 -17
- package/lib/util/identifier.js +124 -61
- package/lib/util/internalSerializables.js +4 -6
- package/lib/util/magicComment.js +9 -5
- package/lib/util/makeSerializable.js +2 -2
- package/lib/util/memoize.js +5 -2
- package/lib/util/objectToMap.js +3 -2
- package/lib/util/processAsyncTree.js +5 -5
- package/lib/util/propertyAccess.js +1 -1
- package/lib/util/propertyName.js +2 -3
- package/lib/util/registerExternalSerializer.js +16 -20
- package/lib/util/removeBOM.js +25 -0
- package/lib/util/runtime.js +72 -56
- package/lib/util/semver.js +44 -33
- package/lib/util/serialization.js +56 -56
- package/lib/util/smartGrouping.js +42 -27
- package/lib/util/source.js +5 -4
- package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
- package/lib/validateSchema.js +7 -9
- package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
- package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
- package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
- package/lib/wasm-sync/WebAssemblyParser.js +10 -17
- package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
- package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
- package/lib/web/FetchCompileWasmPlugin.js +6 -8
- package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
- package/lib/web/JsonpTemplatePlugin.js +0 -1
- package/lib/webpack.js +107 -87
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
- package/module.d.ts +5 -0
- package/package.json +149 -129
- package/schemas/WebpackOptions.check.d.ts +1 -1
- package/schemas/WebpackOptions.check.js +2 -2
- package/schemas/WebpackOptions.json +543 -190
- package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
- package/schemas/plugins/BannerPlugin.check.js +2 -2
- package/schemas/plugins/BannerPlugin.json +4 -0
- package/schemas/plugins/DllPlugin.check.d.ts +1 -1
- package/schemas/plugins/DllPlugin.check.js +1 -1
- package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
- package/schemas/plugins/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
- package/schemas/plugins/IgnorePlugin.check.js +1 -1
- package/schemas/plugins/IgnorePlugin.json +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
- package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
- package/schemas/plugins/ManifestPlugin.check.js +6 -0
- package/schemas/plugins/ManifestPlugin.json +98 -0
- package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
- package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
- package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
- package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
- package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
- package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
- package/schemas/plugins/container/ExternalsType.check.js +2 -2
- package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
- package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
- package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +2 -2
- package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
- package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
- package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
- package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
- package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
- package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
- package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +5115 -1863
- package/SECURITY.md +0 -9
- package/lib/ModuleSourceTypesConstants.js +0 -112
- package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
- package/lib/library/ModernModuleLibraryPlugin.js +0 -144
- package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
- package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
- package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
- package/schemas/plugins/JsonModulesPluginParser.json +0 -12
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
- package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
- package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
- package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
- package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
- package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
- package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
package/lib/util/cleverMerge.js
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
/** @type {WeakMap<
|
|
8
|
+
/** @type {WeakMap<EXPECTED_OBJECT, WeakMap<EXPECTED_OBJECT, EXPECTED_OBJECT>>} */
|
|
9
9
|
const mergeCache = new WeakMap();
|
|
10
|
-
/** @type {WeakMap<
|
|
10
|
+
/** @type {WeakMap<EXPECTED_OBJECT, Map<string, Map<string | number | boolean, EXPECTED_OBJECT>>>} */
|
|
11
11
|
const setPropertyCache = new WeakMap();
|
|
12
12
|
const DELETE = Symbol("DELETE");
|
|
13
13
|
const DYNAMIC_INFO = Symbol("cleverMerge dynamic info");
|
|
@@ -30,10 +30,12 @@ const DYNAMIC_INFO = Symbol("cleverMerge dynamic info");
|
|
|
30
30
|
const cachedCleverMerge = (first, second) => {
|
|
31
31
|
if (second === undefined) return /** @type {T} */ (first);
|
|
32
32
|
if (first === undefined) return /** @type {O} */ (second);
|
|
33
|
-
if (typeof second !== "object" || second === null)
|
|
33
|
+
if (typeof second !== "object" || second === null) {
|
|
34
34
|
return /** @type {O} */ (second);
|
|
35
|
-
|
|
35
|
+
}
|
|
36
|
+
if (typeof first !== "object" || first === null) {
|
|
36
37
|
return /** @type {T} */ (first);
|
|
38
|
+
}
|
|
37
39
|
|
|
38
40
|
let innerCache = mergeCache.get(first);
|
|
39
41
|
if (innerCache === undefined) {
|
|
@@ -44,14 +46,14 @@ const cachedCleverMerge = (first, second) => {
|
|
|
44
46
|
if (prevMerge !== undefined) return prevMerge;
|
|
45
47
|
const newMerge = _cleverMerge(first, second, true);
|
|
46
48
|
innerCache.set(second, newMerge);
|
|
47
|
-
return
|
|
49
|
+
return newMerge;
|
|
48
50
|
};
|
|
49
51
|
|
|
50
52
|
/**
|
|
51
53
|
* @template T
|
|
52
54
|
* @param {Partial<T>} obj object
|
|
53
55
|
* @param {string} property property
|
|
54
|
-
* @param {string|number|boolean} value assignment value
|
|
56
|
+
* @param {string | number | boolean} value assignment value
|
|
55
57
|
* @returns {T} new object
|
|
56
58
|
*/
|
|
57
59
|
const cachedSetProperty = (obj, property, value) => {
|
|
@@ -82,49 +84,70 @@ const cachedSetProperty = (obj, property, value) => {
|
|
|
82
84
|
return /** @type {T} */ (result);
|
|
83
85
|
};
|
|
84
86
|
|
|
85
|
-
/**
|
|
87
|
+
/**
|
|
88
|
+
* @typedef {Map<string, EXPECTED_ANY>} ByValues
|
|
89
|
+
*/
|
|
86
90
|
|
|
87
91
|
/**
|
|
92
|
+
* @template T
|
|
88
93
|
* @typedef {object} ObjectParsedPropertyEntry
|
|
89
|
-
* @property {
|
|
90
|
-
* @property {string | undefined} byProperty the name of the selector property
|
|
91
|
-
* @property {ByValues} byValues value depending on selector property, merged with base
|
|
94
|
+
* @property {T[keyof T] | undefined} base base value
|
|
95
|
+
* @property {`by${string}` | undefined} byProperty the name of the selector property
|
|
96
|
+
* @property {ByValues | undefined} byValues value depending on selector property, merged with base
|
|
97
|
+
*/
|
|
98
|
+
|
|
99
|
+
/** @typedef {(function(...EXPECTED_ANY): object) & { [DYNAMIC_INFO]: [DynamicFunction, object] }} DynamicFunction */
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @template {object} T
|
|
103
|
+
* @typedef {Map<keyof T, ObjectParsedPropertyEntry<T>>} ParsedObjectStatic
|
|
104
|
+
*/
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @template {object} T
|
|
108
|
+
* @typedef {{ byProperty: `by${string}`, fn: DynamicFunction }} ParsedObjectDynamic
|
|
92
109
|
*/
|
|
93
110
|
|
|
94
111
|
/**
|
|
112
|
+
* @template {object} T
|
|
95
113
|
* @typedef {object} ParsedObject
|
|
96
|
-
* @property {
|
|
97
|
-
* @property {
|
|
114
|
+
* @property {ParsedObjectStatic<T>} static static properties (key is property name)
|
|
115
|
+
* @property {ParsedObjectDynamic<T> | undefined} dynamic dynamic part
|
|
98
116
|
*/
|
|
99
117
|
|
|
100
|
-
/** @type {WeakMap<
|
|
118
|
+
/** @type {WeakMap<EXPECTED_OBJECT, ParsedObject<EXPECTED_ANY>>} */
|
|
101
119
|
const parseCache = new WeakMap();
|
|
102
120
|
|
|
103
121
|
/**
|
|
104
|
-
* @
|
|
105
|
-
* @
|
|
122
|
+
* @template {object} T
|
|
123
|
+
* @param {T} obj the object
|
|
124
|
+
* @returns {ParsedObject<T>} parsed object
|
|
106
125
|
*/
|
|
107
|
-
const cachedParseObject = obj => {
|
|
108
|
-
const entry = parseCache.get(obj);
|
|
126
|
+
const cachedParseObject = (obj) => {
|
|
127
|
+
const entry = parseCache.get(/** @type {EXPECTED_OBJECT} */ (obj));
|
|
109
128
|
if (entry !== undefined) return entry;
|
|
110
129
|
const result = parseObject(obj);
|
|
111
|
-
parseCache.set(obj, result);
|
|
130
|
+
parseCache.set(/** @type {EXPECTED_OBJECT} */ (obj), result);
|
|
112
131
|
return result;
|
|
113
132
|
};
|
|
114
133
|
|
|
134
|
+
/** @typedef {{ [p: string]: { [p: string]: EXPECTED_ANY } } | DynamicFunction} ByObject */
|
|
135
|
+
|
|
115
136
|
/**
|
|
116
137
|
* @template {object} T
|
|
117
138
|
* @param {T} obj the object
|
|
118
|
-
* @returns {ParsedObject} parsed object
|
|
139
|
+
* @returns {ParsedObject<T>} parsed object
|
|
119
140
|
*/
|
|
120
|
-
const parseObject = obj => {
|
|
141
|
+
const parseObject = (obj) => {
|
|
142
|
+
/** @type {ParsedObjectStatic<T>} */
|
|
121
143
|
const info = new Map();
|
|
144
|
+
/** @type {ParsedObjectDynamic<T> | undefined} */
|
|
122
145
|
let dynamicInfo;
|
|
123
146
|
/**
|
|
124
|
-
* @param {
|
|
125
|
-
* @returns {Partial<ObjectParsedPropertyEntry
|
|
147
|
+
* @param {keyof T} p path
|
|
148
|
+
* @returns {Partial<ObjectParsedPropertyEntry<T>>} object parsed property entry
|
|
126
149
|
*/
|
|
127
|
-
const getInfo = p => {
|
|
150
|
+
const getInfo = (p) => {
|
|
128
151
|
const entry = info.get(p);
|
|
129
152
|
if (entry !== undefined) return entry;
|
|
130
153
|
const newEntry = {
|
|
@@ -135,17 +158,18 @@ const parseObject = obj => {
|
|
|
135
158
|
info.set(p, newEntry);
|
|
136
159
|
return newEntry;
|
|
137
160
|
};
|
|
138
|
-
for (const
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const
|
|
161
|
+
for (const key_ of Object.keys(obj)) {
|
|
162
|
+
const key = /** @type {keyof T} */ (key_);
|
|
163
|
+
if (typeof key === "string" && key.startsWith("by")) {
|
|
164
|
+
const byProperty = key;
|
|
165
|
+
const byObj = /** @type {ByObject} */ (obj[byProperty]);
|
|
142
166
|
if (typeof byObj === "object") {
|
|
143
167
|
for (const byValue of Object.keys(byObj)) {
|
|
144
168
|
const obj = byObj[/** @type {keyof (keyof T)} */ (byValue)];
|
|
145
169
|
for (const key of Object.keys(obj)) {
|
|
146
|
-
const entry = getInfo(key);
|
|
170
|
+
const entry = getInfo(/** @type {keyof T} */ (key));
|
|
147
171
|
if (entry.byProperty === undefined) {
|
|
148
|
-
entry.byProperty = /** @type {string} */ (byProperty);
|
|
172
|
+
entry.byProperty = /** @type {`by${string}`} */ (byProperty);
|
|
149
173
|
entry.byValues = new Map();
|
|
150
174
|
} else if (entry.byProperty !== byProperty) {
|
|
151
175
|
throw new Error(
|
|
@@ -153,17 +177,18 @@ const parseObject = obj => {
|
|
|
153
177
|
);
|
|
154
178
|
}
|
|
155
179
|
/** @type {ByValues} */
|
|
156
|
-
(entry.byValues).set(
|
|
157
|
-
byValue,
|
|
158
|
-
obj[/** @type {keyof (keyof T)} */ (key)]
|
|
159
|
-
);
|
|
180
|
+
(entry.byValues).set(byValue, obj[key]);
|
|
160
181
|
if (byValue === "default") {
|
|
161
182
|
for (const otherByValue of Object.keys(byObj)) {
|
|
162
183
|
if (
|
|
163
|
-
!(
|
|
164
|
-
|
|
184
|
+
!(
|
|
185
|
+
/** @type {ByValues} */
|
|
186
|
+
(entry.byValues).has(otherByValue)
|
|
187
|
+
)
|
|
188
|
+
) {
|
|
165
189
|
/** @type {ByValues} */
|
|
166
190
|
(entry.byValues).set(otherByValue, undefined);
|
|
191
|
+
}
|
|
167
192
|
}
|
|
168
193
|
}
|
|
169
194
|
}
|
|
@@ -171,7 +196,7 @@ const parseObject = obj => {
|
|
|
171
196
|
} else if (typeof byObj === "function") {
|
|
172
197
|
if (dynamicInfo === undefined) {
|
|
173
198
|
dynamicInfo = {
|
|
174
|
-
byProperty: key,
|
|
199
|
+
byProperty: /** @type {`by${string}`} */ (key),
|
|
175
200
|
fn: byObj
|
|
176
201
|
};
|
|
177
202
|
} else {
|
|
@@ -181,11 +206,11 @@ const parseObject = obj => {
|
|
|
181
206
|
}
|
|
182
207
|
} else {
|
|
183
208
|
const entry = getInfo(key);
|
|
184
|
-
entry.base = obj[
|
|
209
|
+
entry.base = obj[key];
|
|
185
210
|
}
|
|
186
211
|
} else {
|
|
187
212
|
const entry = getInfo(key);
|
|
188
|
-
entry.base = obj[
|
|
213
|
+
entry.base = obj[key];
|
|
189
214
|
}
|
|
190
215
|
}
|
|
191
216
|
return {
|
|
@@ -196,30 +221,36 @@ const parseObject = obj => {
|
|
|
196
221
|
|
|
197
222
|
/**
|
|
198
223
|
* @template {object} T
|
|
199
|
-
* @param {
|
|
200
|
-
* @param {{ byProperty: string
|
|
224
|
+
* @param {ParsedObjectStatic<T>} info static properties (key is property name)
|
|
225
|
+
* @param {{ byProperty: `by${string}`, fn: DynamicFunction } | undefined} dynamicInfo dynamic part
|
|
201
226
|
* @returns {T} the object
|
|
202
227
|
*/
|
|
203
228
|
const serializeObject = (info, dynamicInfo) => {
|
|
204
|
-
const obj = /** @type {
|
|
229
|
+
const obj = /** @type {EXPECTED_ANY} */ ({});
|
|
205
230
|
// Setup byProperty structure
|
|
206
231
|
for (const entry of info.values()) {
|
|
207
232
|
if (entry.byProperty !== undefined) {
|
|
208
|
-
const
|
|
209
|
-
|
|
233
|
+
const byProperty = entry.byProperty;
|
|
234
|
+
const byObj = (obj[byProperty] = obj[byProperty] || {});
|
|
235
|
+
for (const byValue of /** @type {ByValues} */ (entry.byValues).keys()) {
|
|
210
236
|
byObj[byValue] = byObj[byValue] || {};
|
|
211
237
|
}
|
|
212
238
|
}
|
|
213
239
|
}
|
|
214
240
|
for (const [key, entry] of info) {
|
|
215
241
|
if (entry.base !== undefined) {
|
|
216
|
-
obj[
|
|
242
|
+
obj[key] = entry.base;
|
|
217
243
|
}
|
|
218
244
|
// Fill byProperty structure
|
|
219
245
|
if (entry.byProperty !== undefined) {
|
|
220
|
-
const
|
|
246
|
+
const byProperty = entry.byProperty;
|
|
247
|
+
const byObj = (obj[byProperty] = obj[byProperty] || {});
|
|
221
248
|
for (const byValue of Object.keys(byObj)) {
|
|
222
|
-
const value = getFromByValues(
|
|
249
|
+
const value = getFromByValues(
|
|
250
|
+
/** @type {ByValues} */
|
|
251
|
+
(entry.byValues),
|
|
252
|
+
byValue
|
|
253
|
+
);
|
|
223
254
|
if (value !== undefined) byObj[byValue][key] = value;
|
|
224
255
|
}
|
|
225
256
|
}
|
|
@@ -237,10 +268,11 @@ const VALUE_TYPE_OBJECT = 3;
|
|
|
237
268
|
const VALUE_TYPE_DELETE = 4;
|
|
238
269
|
|
|
239
270
|
/**
|
|
240
|
-
* @
|
|
271
|
+
* @template T
|
|
272
|
+
* @param {T} value a single value
|
|
241
273
|
* @returns {VALUE_TYPE_UNDEFINED | VALUE_TYPE_ATOM | VALUE_TYPE_ARRAY_EXTEND | VALUE_TYPE_OBJECT | VALUE_TYPE_DELETE} value type
|
|
242
274
|
*/
|
|
243
|
-
const getValueType = value => {
|
|
275
|
+
const getValueType = (value) => {
|
|
244
276
|
if (value === undefined) {
|
|
245
277
|
return VALUE_TYPE_UNDEFINED;
|
|
246
278
|
} else if (value === DELETE) {
|
|
@@ -278,11 +310,13 @@ const cleverMerge = (first, second) => {
|
|
|
278
310
|
};
|
|
279
311
|
|
|
280
312
|
/**
|
|
313
|
+
* @template {object} T
|
|
314
|
+
* @template {object} O
|
|
281
315
|
* Merges two objects. Objects are deeply clever merged.
|
|
282
|
-
* @param {
|
|
283
|
-
* @param {
|
|
316
|
+
* @param {T} first first
|
|
317
|
+
* @param {O} second second
|
|
284
318
|
* @param {boolean} internalCaching should parsing of objects and nested merges be cached
|
|
285
|
-
* @returns {
|
|
319
|
+
* @returns {T & O} merged object of first and second object
|
|
286
320
|
*/
|
|
287
321
|
const _cleverMerge = (first, second, internalCaching = false) => {
|
|
288
322
|
const firstObject = internalCaching
|
|
@@ -295,11 +329,16 @@ const _cleverMerge = (first, second, internalCaching = false) => {
|
|
|
295
329
|
let { byProperty, fn } = firstDynamicInfo;
|
|
296
330
|
const fnInfo = fn[DYNAMIC_INFO];
|
|
297
331
|
if (fnInfo) {
|
|
298
|
-
second =
|
|
299
|
-
|
|
300
|
-
|
|
332
|
+
second =
|
|
333
|
+
/** @type {O} */
|
|
334
|
+
(
|
|
335
|
+
internalCaching
|
|
336
|
+
? cachedCleverMerge(fnInfo[1], second)
|
|
337
|
+
: cleverMerge(fnInfo[1], second)
|
|
338
|
+
);
|
|
301
339
|
fn = fnInfo[0];
|
|
302
340
|
}
|
|
341
|
+
/** @type {DynamicFunction} */
|
|
303
342
|
const newFn = (...args) => {
|
|
304
343
|
const fnResult = fn(...args);
|
|
305
344
|
return internalCaching
|
|
@@ -307,7 +346,9 @@ const _cleverMerge = (first, second, internalCaching = false) => {
|
|
|
307
346
|
: cleverMerge(fnResult, second);
|
|
308
347
|
};
|
|
309
348
|
newFn[DYNAMIC_INFO] = [fn, second];
|
|
310
|
-
return
|
|
349
|
+
return /** @type {T & O} */ (
|
|
350
|
+
serializeObject(firstObject.static, { byProperty, fn: newFn })
|
|
351
|
+
);
|
|
311
352
|
}
|
|
312
353
|
|
|
313
354
|
// If the first part is static only, we merge the static parts and keep the dynamic part of the second argument
|
|
@@ -315,10 +356,12 @@ const _cleverMerge = (first, second, internalCaching = false) => {
|
|
|
315
356
|
? cachedParseObject(second)
|
|
316
357
|
: parseObject(second);
|
|
317
358
|
const { static: secondInfo, dynamic: secondDynamicInfo } = secondObject;
|
|
318
|
-
/** @type {Map<string, ObjectParsedPropertyEntry>} */
|
|
319
359
|
const resultInfo = new Map();
|
|
320
360
|
for (const [key, firstEntry] of firstInfo) {
|
|
321
|
-
const secondEntry = secondInfo.get(
|
|
361
|
+
const secondEntry = secondInfo.get(
|
|
362
|
+
/** @type {keyof (T | O)} */
|
|
363
|
+
(key)
|
|
364
|
+
);
|
|
322
365
|
const entry =
|
|
323
366
|
secondEntry !== undefined
|
|
324
367
|
? mergeEntries(firstEntry, secondEntry, internalCaching)
|
|
@@ -326,18 +369,19 @@ const _cleverMerge = (first, second, internalCaching = false) => {
|
|
|
326
369
|
resultInfo.set(key, entry);
|
|
327
370
|
}
|
|
328
371
|
for (const [key, secondEntry] of secondInfo) {
|
|
329
|
-
if (!firstInfo.has(key)) {
|
|
372
|
+
if (!firstInfo.has(/** @type {keyof (T | O)} */ (key))) {
|
|
330
373
|
resultInfo.set(key, secondEntry);
|
|
331
374
|
}
|
|
332
375
|
}
|
|
333
|
-
return serializeObject(resultInfo, secondDynamicInfo);
|
|
376
|
+
return /** @type {T & O} */ (serializeObject(resultInfo, secondDynamicInfo));
|
|
334
377
|
};
|
|
335
378
|
|
|
336
379
|
/**
|
|
337
|
-
* @
|
|
338
|
-
* @param {ObjectParsedPropertyEntry}
|
|
380
|
+
* @template T, O
|
|
381
|
+
* @param {ObjectParsedPropertyEntry<T>} firstEntry a
|
|
382
|
+
* @param {ObjectParsedPropertyEntry<O>} secondEntry b
|
|
339
383
|
* @param {boolean} internalCaching should parsing of objects and nested merges be cached
|
|
340
|
-
* @returns {ObjectParsedPropertyEntry} new entry
|
|
384
|
+
* @returns {ObjectParsedPropertyEntry<T> | ObjectParsedPropertyEntry<O> | ObjectParsedPropertyEntry<T & O>} new entry
|
|
341
385
|
*/
|
|
342
386
|
const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
|
|
343
387
|
switch (getValueType(secondEntry.base)) {
|
|
@@ -363,8 +407,14 @@ const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
|
|
|
363
407
|
// = first.base + (first.byProperty + second.byProperty)
|
|
364
408
|
// need to merge first and second byValues
|
|
365
409
|
const newByValues = new Map(firstEntry.byValues);
|
|
366
|
-
for (const [key, value] of
|
|
367
|
-
|
|
410
|
+
for (const [key, value] of /** @type {ByValues} */ (
|
|
411
|
+
secondEntry.byValues
|
|
412
|
+
)) {
|
|
413
|
+
const firstValue = getFromByValues(
|
|
414
|
+
/** @type {ByValues} */
|
|
415
|
+
(firstEntry.byValues),
|
|
416
|
+
key
|
|
417
|
+
);
|
|
368
418
|
newByValues.set(
|
|
369
419
|
key,
|
|
370
420
|
mergeSingleValue(firstValue, value, internalCaching)
|
|
@@ -381,11 +431,15 @@ const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
|
|
|
381
431
|
// The simple case
|
|
382
432
|
// = (first.base + second.base) + second.byProperty
|
|
383
433
|
return {
|
|
384
|
-
base:
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
434
|
+
base:
|
|
435
|
+
/** @type {T[keyof T] & O[keyof O]} */
|
|
436
|
+
(
|
|
437
|
+
mergeSingleValue(
|
|
438
|
+
firstEntry.base,
|
|
439
|
+
secondEntry.base,
|
|
440
|
+
internalCaching
|
|
441
|
+
)
|
|
442
|
+
),
|
|
389
443
|
byProperty: secondEntry.byProperty,
|
|
390
444
|
byValues: secondEntry.byValues
|
|
391
445
|
};
|
|
@@ -399,10 +453,12 @@ const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
|
|
|
399
453
|
);
|
|
400
454
|
}
|
|
401
455
|
if (
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
456
|
+
[.../** @type {ByValues} */ (firstEntry.byValues).values()].every(
|
|
457
|
+
(value) => {
|
|
458
|
+
const type = getValueType(value);
|
|
459
|
+
return type === VALUE_TYPE_ATOM || type === VALUE_TYPE_DELETE;
|
|
460
|
+
}
|
|
461
|
+
)
|
|
406
462
|
) {
|
|
407
463
|
// = (first.base + second.base) + ((first.byProperty + second.base) + second.byProperty)
|
|
408
464
|
newBase = mergeSingleValue(
|
|
@@ -413,13 +469,14 @@ const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
|
|
|
413
469
|
} else {
|
|
414
470
|
// = first.base + ((first.byProperty (+default) + second.base) + second.byProperty)
|
|
415
471
|
newBase = firstEntry.base;
|
|
416
|
-
if (!intermediateByValues.has("default"))
|
|
472
|
+
if (!intermediateByValues.has("default")) {
|
|
417
473
|
intermediateByValues.set("default", secondEntry.base);
|
|
474
|
+
}
|
|
418
475
|
}
|
|
419
476
|
if (!secondEntry.byProperty) {
|
|
420
477
|
// = first.base + (first.byProperty + second.base)
|
|
421
478
|
return {
|
|
422
|
-
base: newBase,
|
|
479
|
+
base: /** @type {T[keyof T] & O[keyof O]} */ (newBase),
|
|
423
480
|
byProperty: firstEntry.byProperty,
|
|
424
481
|
byValues: intermediateByValues
|
|
425
482
|
};
|
|
@@ -429,7 +486,9 @@ const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
|
|
|
429
486
|
);
|
|
430
487
|
}
|
|
431
488
|
const newByValues = new Map(intermediateByValues);
|
|
432
|
-
for (const [key, value] of
|
|
489
|
+
for (const [key, value] of /** @type {ByValues} */ (
|
|
490
|
+
secondEntry.byValues
|
|
491
|
+
)) {
|
|
433
492
|
const firstValue = getFromByValues(intermediateByValues, key);
|
|
434
493
|
newByValues.set(
|
|
435
494
|
key,
|
|
@@ -437,7 +496,7 @@ const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
|
|
|
437
496
|
);
|
|
438
497
|
}
|
|
439
498
|
return {
|
|
440
|
-
base: newBase,
|
|
499
|
+
base: /** @type {T[keyof T] & O[keyof O]} */ (newBase),
|
|
441
500
|
byProperty: firstEntry.byProperty,
|
|
442
501
|
byValues: newByValues
|
|
443
502
|
};
|
|
@@ -446,9 +505,10 @@ const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
|
|
|
446
505
|
};
|
|
447
506
|
|
|
448
507
|
/**
|
|
449
|
-
* @
|
|
508
|
+
* @template V
|
|
509
|
+
* @param {ByValues} byValues all values
|
|
450
510
|
* @param {string} key value of the selector
|
|
451
|
-
* @returns {
|
|
511
|
+
* @returns {V | undefined} value
|
|
452
512
|
*/
|
|
453
513
|
const getFromByValues = (byValues, key) => {
|
|
454
514
|
if (key !== "default" && byValues.has(key)) {
|
|
@@ -458,10 +518,12 @@ const getFromByValues = (byValues, key) => {
|
|
|
458
518
|
};
|
|
459
519
|
|
|
460
520
|
/**
|
|
461
|
-
* @
|
|
462
|
-
* @
|
|
521
|
+
* @template A
|
|
522
|
+
* @template B
|
|
523
|
+
* @param {A | A[]} a value
|
|
524
|
+
* @param {B | B[]} b value
|
|
463
525
|
* @param {boolean} internalCaching should parsing of objects and nested merges be cached
|
|
464
|
-
* @returns {
|
|
526
|
+
* @returns {A & B | (A | B)[] | A | A[] | B | B[]} value
|
|
465
527
|
*/
|
|
466
528
|
const mergeSingleValue = (a, b, internalCaching) => {
|
|
467
529
|
const bType = getValueType(b);
|
|
@@ -490,12 +552,13 @@ const mergeSingleValue = (a, b, internalCaching) => {
|
|
|
490
552
|
case VALUE_TYPE_UNDEFINED:
|
|
491
553
|
return b;
|
|
492
554
|
case VALUE_TYPE_DELETE:
|
|
493
|
-
return /** @type {
|
|
555
|
+
return /** @type {B[]} */ (b).filter((item) => item !== "...");
|
|
494
556
|
case VALUE_TYPE_ARRAY_EXTEND: {
|
|
557
|
+
/** @type {(A | B)[]} */
|
|
495
558
|
const newArray = [];
|
|
496
|
-
for (const item of b) {
|
|
559
|
+
for (const item of /** @type {B[]} */ (b)) {
|
|
497
560
|
if (item === "...") {
|
|
498
|
-
for (const item of a) {
|
|
561
|
+
for (const item of /** @type {A[]} */ (a)) {
|
|
499
562
|
newArray.push(item);
|
|
500
563
|
}
|
|
501
564
|
} else {
|
|
@@ -505,8 +568,8 @@ const mergeSingleValue = (a, b, internalCaching) => {
|
|
|
505
568
|
return newArray;
|
|
506
569
|
}
|
|
507
570
|
case VALUE_TYPE_OBJECT:
|
|
508
|
-
return /** @type {
|
|
509
|
-
item === "..." ? a : item
|
|
571
|
+
return /** @type {(A | B)[]} */ (b).map((item) =>
|
|
572
|
+
item === "..." ? /** @type {A} */ (a) : item
|
|
510
573
|
);
|
|
511
574
|
default:
|
|
512
575
|
throw new Error("Not implemented");
|
|
@@ -524,14 +587,12 @@ const mergeSingleValue = (a, b, internalCaching) => {
|
|
|
524
587
|
*/
|
|
525
588
|
const removeOperations = (obj, keysToKeepOriginalValue = []) => {
|
|
526
589
|
const newObj = /** @type {T} */ ({});
|
|
527
|
-
for (const
|
|
528
|
-
const
|
|
590
|
+
for (const _key of Object.keys(obj)) {
|
|
591
|
+
const key = /** @type {keyof T} */ (_key);
|
|
592
|
+
const value = obj[key];
|
|
529
593
|
const type = getValueType(value);
|
|
530
|
-
if (
|
|
531
|
-
|
|
532
|
-
keysToKeepOriginalValue.includes(/** @type {keyof T} */ (key))
|
|
533
|
-
) {
|
|
534
|
-
newObj[/** @type {keyof T} */ (key)] = value;
|
|
594
|
+
if (type === VALUE_TYPE_OBJECT && keysToKeepOriginalValue.includes(key)) {
|
|
595
|
+
newObj[key] = value;
|
|
535
596
|
continue;
|
|
536
597
|
}
|
|
537
598
|
switch (type) {
|
|
@@ -539,25 +600,26 @@ const removeOperations = (obj, keysToKeepOriginalValue = []) => {
|
|
|
539
600
|
case VALUE_TYPE_DELETE:
|
|
540
601
|
break;
|
|
541
602
|
case VALUE_TYPE_OBJECT:
|
|
542
|
-
newObj[
|
|
603
|
+
newObj[key] =
|
|
543
604
|
/** @type {T[keyof T]} */
|
|
544
605
|
(
|
|
545
606
|
removeOperations(
|
|
546
|
-
/** @type {
|
|
607
|
+
/** @type {T} */
|
|
608
|
+
(value),
|
|
547
609
|
keysToKeepOriginalValue
|
|
548
610
|
)
|
|
549
611
|
);
|
|
550
612
|
break;
|
|
551
613
|
case VALUE_TYPE_ARRAY_EXTEND:
|
|
552
|
-
newObj[
|
|
614
|
+
newObj[key] =
|
|
553
615
|
/** @type {T[keyof T]} */
|
|
554
616
|
(
|
|
555
|
-
/** @type {
|
|
556
|
-
(value).filter(i => i !== "...")
|
|
617
|
+
/** @type {EXPECTED_ANY[]} */
|
|
618
|
+
(value).filter((i) => i !== "...")
|
|
557
619
|
);
|
|
558
620
|
break;
|
|
559
621
|
default:
|
|
560
|
-
newObj[
|
|
622
|
+
newObj[key] = value;
|
|
561
623
|
break;
|
|
562
624
|
}
|
|
563
625
|
}
|
|
@@ -566,10 +628,11 @@ const removeOperations = (obj, keysToKeepOriginalValue = []) => {
|
|
|
566
628
|
|
|
567
629
|
/**
|
|
568
630
|
* @template T
|
|
569
|
-
* @template {
|
|
631
|
+
* @template {keyof T} P
|
|
632
|
+
* @template V
|
|
570
633
|
* @param {T} obj the object
|
|
571
634
|
* @param {P} byProperty the by description
|
|
572
|
-
* @param
|
|
635
|
+
* @param {...V} values values
|
|
573
636
|
* @returns {Omit<T, P>} object with merged byProperty
|
|
574
637
|
*/
|
|
575
638
|
const resolveByProperty = (obj, byProperty, ...values) => {
|
|
@@ -579,10 +642,10 @@ const resolveByProperty = (obj, byProperty, ...values) => {
|
|
|
579
642
|
const { [byProperty]: _byValue, ..._remaining } = obj;
|
|
580
643
|
const remaining = /** @type {T} */ (_remaining);
|
|
581
644
|
const byValue =
|
|
582
|
-
/** @type {Record<string, T> |
|
|
645
|
+
/** @type {Record<string, T> | ((...args: V[]) => T)} */
|
|
583
646
|
(_byValue);
|
|
584
647
|
if (typeof byValue === "object") {
|
|
585
|
-
const key = values[0];
|
|
648
|
+
const key = /** @type {string} */ (values[0]);
|
|
586
649
|
if (key in byValue) {
|
|
587
650
|
return cachedCleverMerge(remaining, byValue[key]);
|
|
588
651
|
} else if ("default" in byValue) {
|
|
@@ -597,11 +660,12 @@ const resolveByProperty = (obj, byProperty, ...values) => {
|
|
|
597
660
|
resolveByProperty(result, byProperty, ...values)
|
|
598
661
|
);
|
|
599
662
|
}
|
|
663
|
+
return obj;
|
|
600
664
|
};
|
|
601
665
|
|
|
602
|
-
module.exports.
|
|
666
|
+
module.exports.DELETE = DELETE;
|
|
603
667
|
module.exports.cachedCleverMerge = cachedCleverMerge;
|
|
668
|
+
module.exports.cachedSetProperty = cachedSetProperty;
|
|
604
669
|
module.exports.cleverMerge = cleverMerge;
|
|
605
|
-
module.exports.resolveByProperty = resolveByProperty;
|
|
606
670
|
module.exports.removeOperations = removeOperations;
|
|
607
|
-
module.exports.
|
|
671
|
+
module.exports.resolveByProperty = resolveByProperty;
|