effect 4.0.4 → 4.0.6
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/ai-docs/package.json +1 -1
- package/ai-docs/src/06_schedule/10_schedules.ts +5 -4
- package/ai-docs/src/52_graphql/10_basics.ts +19 -13
- package/ai-docs/src/52_graphql/30_batching.ts +6 -4
- package/ai-docs/src/52_graphql/40_aliased-batching.ts +6 -4
- package/ai-docs/tsconfig.json +3 -1
- package/dist/Array.d.ts +207 -58
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +45 -22
- package/dist/Array.js.map +1 -1
- package/dist/Bytes.d.ts +79 -0
- package/dist/Bytes.d.ts.map +1 -0
- package/dist/Bytes.js +109 -0
- package/dist/Bytes.js.map +1 -0
- package/dist/Channel.d.ts +187 -14
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +142 -33
- package/dist/Channel.js.map +1 -1
- package/dist/ChannelSchema.d.ts.map +1 -1
- package/dist/ChannelSchema.js.map +1 -1
- package/dist/Chunk.d.ts +39 -21
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Chunk.js +26 -17
- package/dist/Chunk.js.map +1 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js +8 -3
- package/dist/Config.js.map +1 -1
- package/dist/ConfigProvider.d.ts.map +1 -1
- package/dist/ConfigProvider.js +34 -32
- package/dist/ConfigProvider.js.map +1 -1
- package/dist/Cron.d.ts +2 -2
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +6 -3
- package/dist/Cron.js.map +1 -1
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +58 -21
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +548 -182
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +261 -76
- package/dist/Effect.js.map +1 -1
- package/dist/Equivalence.d.ts +2 -1
- package/dist/Equivalence.d.ts.map +1 -1
- package/dist/Equivalence.js +12 -8
- package/dist/Equivalence.js.map +1 -1
- package/dist/Exit.d.ts +24 -9
- package/dist/Exit.d.ts.map +1 -1
- package/dist/Exit.js +8 -3
- package/dist/Exit.js.map +1 -1
- package/dist/FiberHandle.d.ts +2 -0
- package/dist/FiberHandle.d.ts.map +1 -1
- package/dist/FiberHandle.js +9 -4
- package/dist/FiberHandle.js.map +1 -1
- package/dist/FiberMap.d.ts +2 -0
- package/dist/FiberMap.d.ts.map +1 -1
- package/dist/FiberMap.js +5 -2
- package/dist/FiberMap.js.map +1 -1
- package/dist/FileSystem.d.ts +28 -9
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +3 -0
- package/dist/FileSystem.js.map +1 -1
- package/dist/Graph.d.ts.map +1 -1
- package/dist/Graph.js.map +1 -1
- package/dist/HashSet.d.ts.map +1 -1
- package/dist/HashSet.js.map +1 -1
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +18 -17
- package/dist/Iterable.js.map +1 -1
- package/dist/JsonSchema.d.ts +9 -3
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +19 -3
- package/dist/JsonSchema.js.map +1 -1
- package/dist/Layer.d.ts.map +1 -1
- package/dist/Layer.js +2 -2
- package/dist/Layer.js.map +1 -1
- package/dist/ManagedRuntime.d.ts +19 -1
- package/dist/ManagedRuntime.d.ts.map +1 -1
- package/dist/ManagedRuntime.js +62 -6
- package/dist/ManagedRuntime.js.map +1 -1
- package/dist/Match.d.ts +20 -6
- package/dist/Match.d.ts.map +1 -1
- package/dist/Match.js +2 -2
- package/dist/Match.js.map +1 -1
- package/dist/Metric.d.ts +132 -0
- package/dist/Metric.d.ts.map +1 -1
- package/dist/Metric.js +197 -25
- package/dist/Metric.js.map +1 -1
- package/dist/MutableHashMap.d.ts.map +1 -1
- package/dist/MutableHashMap.js.map +1 -1
- package/dist/Number.js +2 -2
- package/dist/Number.js.map +1 -1
- package/dist/Optic.d.ts.map +1 -1
- package/dist/Optic.js.map +1 -1
- package/dist/Path.d.ts +37 -5
- package/dist/Path.d.ts.map +1 -1
- package/dist/Path.js +44 -6
- package/dist/Path.js.map +1 -1
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +12 -7
- package/dist/PubSub.js.map +1 -1
- package/dist/Queue.d.ts +4 -1
- package/dist/Queue.d.ts.map +1 -1
- package/dist/Queue.js +4 -1
- package/dist/Queue.js.map +1 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +1 -1
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts +12 -7
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +9 -6
- package/dist/RcMap.js.map +1 -1
- package/dist/Record.d.ts +51 -0
- package/dist/Record.d.ts.map +1 -1
- package/dist/Record.js +17 -0
- package/dist/Record.js.map +1 -1
- package/dist/Ref.d.ts.map +1 -1
- package/dist/Ref.js.map +1 -1
- package/dist/References.d.ts +5 -4
- package/dist/References.d.ts.map +1 -1
- package/dist/References.js +5 -4
- package/dist/References.js.map +1 -1
- package/dist/RequestResolver.d.ts +31 -1
- package/dist/RequestResolver.d.ts.map +1 -1
- package/dist/RequestResolver.js +39 -4
- package/dist/RequestResolver.js.map +1 -1
- package/dist/Resource.js +1 -1
- package/dist/Resource.js.map +1 -1
- package/dist/Runtime.d.ts +3 -3
- package/dist/Runtime.d.ts.map +1 -1
- package/dist/Runtime.js +18 -15
- package/dist/Runtime.js.map +1 -1
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +383 -326
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +338 -17
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +5 -5
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +24 -8
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaGetter.d.ts +8 -3
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +15 -5
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaIssue.d.ts +4 -4
- package/dist/SchemaIssue.d.ts.map +1 -1
- package/dist/SchemaIssue.js +29 -51
- package/dist/SchemaIssue.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +56 -1
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +18 -0
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +1 -1
- package/dist/SchemaTransformation.js +1 -1
- package/dist/Scope.d.ts +12 -2
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +5 -0
- package/dist/Scope.js.map +1 -1
- package/dist/ScopedCache.d.ts +10 -7
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +9 -5
- package/dist/ScopedCache.js.map +1 -1
- package/dist/SemVer.d.ts +1196 -0
- package/dist/SemVer.d.ts.map +1 -0
- package/dist/SemVer.js +756 -0
- package/dist/SemVer.js.map +1 -0
- package/dist/SemVerRange.d.ts +559 -0
- package/dist/SemVerRange.d.ts.map +1 -0
- package/dist/SemVerRange.js +551 -0
- package/dist/SemVerRange.js.map +1 -0
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +6 -2
- package/dist/Sink.js.map +1 -1
- package/dist/Stream.d.ts +235 -8
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +145 -60
- package/dist/Stream.js.map +1 -1
- package/dist/String.d.ts +16 -2
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +25 -10
- package/dist/String.js.map +1 -1
- package/dist/TextDiff.d.ts +399 -0
- package/dist/TextDiff.d.ts.map +1 -0
- package/dist/TextDiff.js +634 -0
- package/dist/TextDiff.js.map +1 -0
- package/dist/TxHashMap.d.ts.map +1 -1
- package/dist/TxHashMap.js.map +1 -1
- package/dist/TxHashSet.d.ts.map +1 -1
- package/dist/TxHashSet.js.map +1 -1
- package/dist/TxRef.d.ts.map +1 -1
- package/dist/TxRef.js +3 -2
- package/dist/TxRef.js.map +1 -1
- package/dist/ai/AiError.d.ts +78 -14
- package/dist/ai/AiError.d.ts.map +1 -1
- package/dist/ai/AiError.js +51 -3
- package/dist/ai/AiError.js.map +1 -1
- package/dist/ai/Chat.d.ts +1 -2
- package/dist/ai/Chat.d.ts.map +1 -1
- package/dist/ai/Chat.js +6 -3
- package/dist/ai/Chat.js.map +1 -1
- package/dist/ai/Decision.d.ts +116 -20
- package/dist/ai/Decision.d.ts.map +1 -1
- package/dist/ai/Decision.js +37 -3
- package/dist/ai/Decision.js.map +1 -1
- package/dist/ai/DecisionModel.d.ts +129 -11
- package/dist/ai/DecisionModel.d.ts.map +1 -1
- package/dist/ai/DecisionModel.js +183 -95
- package/dist/ai/DecisionModel.js.map +1 -1
- package/dist/ai/EmbeddingModel.d.ts +10 -0
- package/dist/ai/EmbeddingModel.d.ts.map +1 -1
- package/dist/ai/EmbeddingModel.js +21 -7
- package/dist/ai/EmbeddingModel.js.map +1 -1
- package/dist/ai/LanguageModel.d.ts.map +1 -1
- package/dist/ai/LanguageModel.js +47 -35
- package/dist/ai/LanguageModel.js.map +1 -1
- package/dist/ai/McpClient.d.ts +289 -0
- package/dist/ai/McpClient.d.ts.map +1 -0
- package/dist/ai/McpClient.js +819 -0
- package/dist/ai/McpClient.js.map +1 -0
- package/dist/ai/McpClientError.d.ts +254 -0
- package/dist/ai/McpClientError.d.ts.map +1 -0
- package/dist/ai/McpClientError.js +260 -0
- package/dist/ai/McpClientError.js.map +1 -0
- package/dist/ai/McpProtocol.d.ts +2 -2
- package/dist/ai/McpProtocol.d.ts.map +1 -1
- package/dist/ai/McpSchema.d.ts +368 -235
- package/dist/ai/McpSchema.d.ts.map +1 -1
- package/dist/ai/McpSchema.js +94 -24
- package/dist/ai/McpSchema.js.map +1 -1
- package/dist/ai/McpServer.d.ts +6 -52
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +27 -50
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/Prompt.d.ts +22 -20
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +23 -1
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Response.d.ts +148 -4
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +35 -37
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +12 -4
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js.map +1 -1
- package/dist/ai/Toolkit.d.ts +48 -1
- package/dist/ai/Toolkit.d.ts.map +1 -1
- package/dist/ai/Toolkit.js +65 -12
- package/dist/ai/Toolkit.js.map +1 -1
- package/dist/ai/index.d.ts +10 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +10 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/internal/mcpCore.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js +2 -2
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js +2 -2
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +4 -7
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js +16 -2
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +3 -4
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2024_11_05.js +19 -13
- package/dist/ai/internal/mcpSchema/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2025_03_26.js +3 -2
- package/dist/ai/internal/mcpSchema/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2025_06_18.js +7 -7
- package/dist/ai/internal/mcpSchema/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2025_11_25.js +8 -8
- package/dist/ai/internal/mcpSchema/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2026_07_28.js +43 -42
- package/dist/ai/internal/mcpSchema/v2026_07_28.js.map +1 -1
- package/dist/cli/CliError.d.ts +42 -2
- package/dist/cli/CliError.d.ts.map +1 -1
- package/dist/cli/CliError.js +44 -5
- package/dist/cli/CliError.js.map +1 -1
- package/dist/cli/Command.d.ts +286 -2
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +107 -6
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Completions.d.ts +10 -0
- package/dist/cli/Completions.d.ts.map +1 -1
- package/dist/cli/Completions.js.map +1 -1
- package/dist/cli/Flag.d.ts +215 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +89 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/cli/GlobalFlag.js +3 -3
- package/dist/cli/GlobalFlag.js.map +1 -1
- package/dist/cli/Param.d.ts +194 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +86 -0
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/TerminalCapabilities.d.ts +84 -0
- package/dist/cli/TerminalCapabilities.d.ts.map +1 -0
- package/dist/cli/TerminalCapabilities.js +122 -0
- package/dist/cli/TerminalCapabilities.js.map +1 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/internal/command.d.ts +2 -1
- package/dist/cli/internal/command.d.ts.map +1 -1
- package/dist/cli/internal/command.js +7 -3
- package/dist/cli/internal/command.js.map +1 -1
- package/dist/cli/internal/completions/bash.js +7 -5
- package/dist/cli/internal/completions/bash.js.map +1 -1
- package/dist/cli/internal/completions/descriptor.js +16 -1
- package/dist/cli/internal/completions/descriptor.js.map +1 -1
- package/dist/cli/internal/completions/fish.js +12 -10
- package/dist/cli/internal/completions/fish.js.map +1 -1
- package/dist/cli/internal/completions/powershell.js +20 -10
- package/dist/cli/internal/completions/powershell.js.map +1 -1
- package/dist/cli/internal/completions/zsh.js +15 -8
- package/dist/cli/internal/completions/zsh.js.map +1 -1
- package/dist/cli/internal/formatter.d.ts +2 -0
- package/dist/cli/internal/formatter.d.ts.map +1 -0
- package/dist/cli/internal/formatter.js +15 -0
- package/dist/cli/internal/formatter.js.map +1 -0
- package/dist/cli/internal/lexer.js +24 -10
- package/dist/cli/internal/lexer.js.map +1 -1
- package/dist/cli/internal/parser.js +35 -15
- package/dist/cli/internal/parser.js.map +1 -1
- package/dist/cli/internal/wizard.d.ts.map +1 -1
- package/dist/cli/internal/wizard.js +2 -1
- package/dist/cli/internal/wizard.js.map +1 -1
- package/dist/cluster/ClusterCron.d.ts +29 -1
- package/dist/cluster/ClusterCron.d.ts.map +1 -1
- package/dist/cluster/ClusterCron.js +64 -32
- package/dist/cluster/ClusterCron.js.map +1 -1
- package/dist/cluster/ClusterMetrics.d.ts +143 -7
- package/dist/cluster/ClusterMetrics.d.ts.map +1 -1
- package/dist/cluster/ClusterMetrics.js +151 -7
- package/dist/cluster/ClusterMetrics.js.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts +2 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +98 -18
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/Entity.d.ts +2 -0
- package/dist/cluster/Entity.d.ts.map +1 -1
- package/dist/cluster/Entity.js.map +1 -1
- package/dist/cluster/MessageStorage.d.ts +21 -0
- package/dist/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/cluster/MessageStorage.js +20 -12
- package/dist/cluster/MessageStorage.js.map +1 -1
- package/dist/cluster/Runners.d.ts.map +1 -1
- package/dist/cluster/Runners.js +96 -37
- package/dist/cluster/Runners.js.map +1 -1
- package/dist/cluster/Sharding.d.ts +1 -0
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +95 -32
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +20 -0
- package/dist/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/cluster/ShardingConfig.js +4 -0
- package/dist/cluster/ShardingConfig.js.map +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +40 -50
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts +2 -2
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +10 -4
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +66 -9
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/devtools/DevTools.d.ts +3 -2
- package/dist/devtools/DevTools.d.ts.map +1 -1
- package/dist/devtools/DevTools.js +3 -2
- package/dist/devtools/DevTools.js.map +1 -1
- package/dist/devtools/DevToolsClient.d.ts +11 -0
- package/dist/devtools/DevToolsClient.d.ts.map +1 -1
- package/dist/devtools/DevToolsClient.js +31 -4
- package/dist/devtools/DevToolsClient.js.map +1 -1
- package/dist/encoding/Base64Url.d.ts +29 -0
- package/dist/encoding/Base64Url.d.ts.map +1 -1
- package/dist/encoding/Base64Url.js +29 -0
- package/dist/encoding/Base64Url.js.map +1 -1
- package/dist/encoding/Ini.d.ts.map +1 -1
- package/dist/encoding/Ini.js +3 -0
- package/dist/encoding/Ini.js.map +1 -1
- package/dist/encoding/JsonArray.d.ts +270 -0
- package/dist/encoding/JsonArray.d.ts.map +1 -0
- package/dist/encoding/JsonArray.js +691 -0
- package/dist/encoding/JsonArray.js.map +1 -0
- package/dist/encoding/Ndjson.d.ts +43 -4
- package/dist/encoding/Ndjson.d.ts.map +1 -1
- package/dist/encoding/Ndjson.js +169 -18
- package/dist/encoding/Ndjson.js.map +1 -1
- package/dist/encoding/SchemaBinary.d.ts +9 -1
- package/dist/encoding/SchemaBinary.d.ts.map +1 -1
- package/dist/encoding/SchemaBinary.js +12 -19
- package/dist/encoding/SchemaBinary.js.map +1 -1
- package/dist/encoding/Sse.js +1 -1
- package/dist/encoding/Sse.js.map +1 -1
- package/dist/encoding/Tar.d.ts +309 -0
- package/dist/encoding/Tar.d.ts.map +1 -0
- package/dist/encoding/Tar.js +1182 -0
- package/dist/encoding/Tar.js.map +1 -0
- package/dist/encoding/Toml.js +3 -3
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/encoding/Xml.d.ts +464 -0
- package/dist/encoding/Xml.d.ts.map +1 -0
- package/dist/encoding/Xml.js +1619 -0
- package/dist/encoding/Xml.js.map +1 -0
- package/dist/encoding/Yaml.d.ts +6 -2
- package/dist/encoding/Yaml.d.ts.map +1 -1
- package/dist/encoding/Yaml.js +97 -34
- package/dist/encoding/Yaml.js.map +1 -1
- package/dist/encoding/Zip.d.ts +413 -0
- package/dist/encoding/Zip.d.ts.map +1 -0
- package/dist/encoding/Zip.js +1255 -0
- package/dist/encoding/Zip.js.map +1 -0
- package/dist/encoding/index.d.ts +20 -0
- package/dist/encoding/index.d.ts.map +1 -1
- package/dist/encoding/index.js +20 -0
- package/dist/encoding/index.js.map +1 -1
- package/dist/eventlog/EventJournal.d.ts +90 -5
- package/dist/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/eventlog/EventJournal.js +488 -228
- package/dist/eventlog/EventJournal.js.map +1 -1
- package/dist/eventlog/EventLog.d.ts +180 -12
- package/dist/eventlog/EventLog.d.ts.map +1 -1
- package/dist/eventlog/EventLog.js +394 -146
- package/dist/eventlog/EventLog.js.map +1 -1
- package/dist/eventlog/EventLogEncryption.d.ts +36 -30
- package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/eventlog/EventLogEncryption.js +97 -38
- package/dist/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/eventlog/EventLogMessage.d.ts +74 -34
- package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
- package/dist/eventlog/EventLogMessage.js +45 -11
- package/dist/eventlog/EventLogMessage.js.map +1 -1
- package/dist/eventlog/EventLogRemote.d.ts +45 -8
- package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
- package/dist/eventlog/EventLogRemote.js +51 -14
- package/dist/eventlog/EventLogRemote.js.map +1 -1
- package/dist/eventlog/EventLogServer.d.ts +46 -3
- package/dist/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/eventlog/EventLogServer.js +119 -19
- package/dist/eventlog/EventLogServer.js.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.d.ts +23 -33
- package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.js +97 -70
- package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.d.ts +39 -5
- package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.js +151 -69
- package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/EventRow.d.ts +288 -0
- package/dist/eventlog/EventRow.d.ts.map +1 -0
- package/dist/eventlog/EventRow.js +435 -0
- package/dist/eventlog/EventRow.js.map +1 -0
- package/dist/eventlog/SqlEventJournal.d.ts +18 -18
- package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +387 -159
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +10 -18
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.js +179 -69
- package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts +23 -3
- package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.js +102 -51
- package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/index.d.ts +5 -0
- package/dist/eventlog/index.d.ts.map +1 -1
- package/dist/eventlog/index.js +5 -0
- package/dist/eventlog/index.js.map +1 -1
- package/dist/eventlog/internal/conflicts.d.ts +47 -0
- package/dist/eventlog/internal/conflicts.d.ts.map +1 -0
- package/dist/eventlog/internal/conflicts.js +92 -0
- package/dist/eventlog/internal/conflicts.js.map +1 -0
- package/dist/graphql/GraphQLClient.d.ts.map +1 -1
- package/dist/graphql/GraphQLClient.js +12 -5
- package/dist/graphql/GraphQLClient.js.map +1 -1
- package/dist/graphql/GraphQLClientError.d.ts +2 -2
- package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
- package/dist/graphql/GraphQLClientError.js +4 -18
- package/dist/graphql/GraphQLClientError.js.map +1 -1
- package/dist/graphql/GraphQLProtocol.d.ts +252 -11
- package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
- package/dist/graphql/GraphQLProtocol.js +99 -8
- package/dist/graphql/GraphQLProtocol.js.map +1 -1
- package/dist/graphql/GraphQLResolver.d.ts +3 -1
- package/dist/graphql/GraphQLResolver.d.ts.map +1 -1
- package/dist/graphql/GraphQLResolver.js +91 -19
- package/dist/graphql/GraphQLResolver.js.map +1 -1
- package/dist/http/FetchHttpClient.d.ts +13 -3
- package/dist/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/http/FetchHttpClient.js +56 -6
- package/dist/http/FetchHttpClient.js.map +1 -1
- package/dist/http/FindMyWay/internal/router.js +12 -1
- package/dist/http/FindMyWay/internal/router.js.map +1 -1
- package/dist/http/Headers.d.ts +230 -3
- package/dist/http/Headers.d.ts.map +1 -1
- package/dist/http/Headers.js +267 -5
- package/dist/http/Headers.js.map +1 -1
- package/dist/http/HttpClient.d.ts +105 -0
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +69 -17
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientError.d.ts.map +1 -1
- package/dist/http/HttpClientError.js +8 -6
- package/dist/http/HttpClientError.js.map +1 -1
- package/dist/http/HttpClientRequest.d.ts +274 -7
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +91 -3
- package/dist/http/HttpClientRequest.js.map +1 -1
- package/dist/http/HttpClientResponse.d.ts +53 -0
- package/dist/http/HttpClientResponse.d.ts.map +1 -1
- package/dist/http/HttpClientResponse.js +47 -0
- package/dist/http/HttpClientResponse.js.map +1 -1
- package/dist/http/HttpEffect.d.ts +6 -2
- package/dist/http/HttpEffect.d.ts.map +1 -1
- package/dist/http/HttpEffect.js +21 -17
- package/dist/http/HttpEffect.js.map +1 -1
- package/dist/http/HttpIncomingMessage.d.ts +2 -1
- package/dist/http/HttpIncomingMessage.d.ts.map +1 -1
- package/dist/http/HttpIncomingMessage.js +3 -23
- package/dist/http/HttpIncomingMessage.js.map +1 -1
- package/dist/http/HttpMiddleware.d.ts +179 -2
- package/dist/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/http/HttpMiddleware.js +226 -18
- package/dist/http/HttpMiddleware.js.map +1 -1
- package/dist/http/HttpRouter.d.ts.map +1 -1
- package/dist/http/HttpRouter.js +58 -14
- package/dist/http/HttpRouter.js.map +1 -1
- package/dist/http/HttpServerError.d.ts +5 -2
- package/dist/http/HttpServerError.d.ts.map +1 -1
- package/dist/http/HttpServerError.js +11 -7
- package/dist/http/HttpServerError.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +25 -5
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +38 -12
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/HttpServerResponse.d.ts +17 -8
- package/dist/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/http/HttpServerResponse.js +37 -21
- package/dist/http/HttpServerResponse.js.map +1 -1
- package/dist/http/HttpStaticServer.d.ts +0 -12
- package/dist/http/HttpStaticServer.d.ts.map +1 -1
- package/dist/http/HttpStaticServer.js +25 -17
- package/dist/http/HttpStaticServer.js.map +1 -1
- package/dist/http/HttpTraceContext.js +1 -1
- package/dist/http/HttpTraceContext.js.map +1 -1
- package/dist/http/MultipartParser/internal/contentType.d.ts +15 -1
- package/dist/http/MultipartParser/internal/contentType.d.ts.map +1 -1
- package/dist/http/MultipartParser/internal/contentType.js +87 -5
- package/dist/http/MultipartParser/internal/contentType.js.map +1 -1
- package/dist/http/MultipartParser/internal/headers.d.ts.map +1 -1
- package/dist/http/MultipartParser/internal/headers.js +4 -12
- package/dist/http/MultipartParser/internal/headers.js.map +1 -1
- package/dist/http/MultipartParser/internal/multipart.d.ts.map +1 -1
- package/dist/http/MultipartParser/internal/multipart.js +6 -27
- package/dist/http/MultipartParser/internal/multipart.js.map +1 -1
- package/dist/http/Url.d.ts.map +1 -1
- package/dist/http/Url.js +8 -2
- package/dist/http/Url.js.map +1 -1
- package/dist/http/UrlParams.d.ts +112 -8
- package/dist/http/UrlParams.d.ts.map +1 -1
- package/dist/http/UrlParams.js +141 -14
- package/dist/http/UrlParams.js.map +1 -1
- package/dist/http/internal/compression.d.ts +1 -1
- package/dist/http/internal/compression.d.ts.map +1 -1
- package/dist/http/internal/compression.js +2 -10
- package/dist/http/internal/compression.js.map +1 -1
- package/dist/http/internal/compressionBody.d.ts +2 -0
- package/dist/http/internal/compressionBody.d.ts.map +1 -0
- package/dist/http/internal/compressionBody.js +36 -0
- package/dist/http/internal/compressionBody.js.map +1 -0
- package/dist/http/internal/decompression.d.ts +2 -0
- package/dist/http/internal/decompression.d.ts.map +1 -0
- package/dist/http/internal/decompression.js +168 -0
- package/dist/http/internal/decompression.js.map +1 -0
- package/dist/http/internal/lazyStream.d.ts +2 -0
- package/dist/http/internal/lazyStream.d.ts.map +1 -0
- package/dist/http/internal/lazyStream.js +18 -0
- package/dist/http/internal/lazyStream.js.map +1 -0
- package/dist/http/internal/requestState.d.ts +2 -0
- package/dist/http/internal/requestState.d.ts.map +1 -0
- package/dist/http/internal/requestState.js +28 -0
- package/dist/http/internal/requestState.js.map +1 -0
- package/dist/http/internal/tracing.js +14 -4
- package/dist/http/internal/tracing.js.map +1 -1
- package/dist/http/internal/urlParams.d.ts +2 -0
- package/dist/http/internal/urlParams.d.ts.map +1 -0
- package/dist/http/internal/urlParams.js +4 -0
- package/dist/http/internal/urlParams.js.map +1 -0
- package/dist/http/internal/webResponse.d.ts +2 -0
- package/dist/http/internal/webResponse.d.ts.map +1 -0
- package/dist/http/internal/webResponse.js +12 -0
- package/dist/http/internal/webResponse.js.map +1 -0
- package/dist/http-api/HttpApi.js +1 -1
- package/dist/http-api/HttpApi.js.map +1 -1
- package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
- package/dist/http-api/HttpApiBuilder.js +121 -18
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +29 -4
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +85 -24
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts +55 -29
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +49 -5
- package/dist/http-api/HttpApiEndpoint.js.map +1 -1
- package/dist/http-api/HttpApiError.d.ts +58 -0
- package/dist/http-api/HttpApiError.d.ts.map +1 -1
- package/dist/http-api/HttpApiError.js +38 -12
- package/dist/http-api/HttpApiError.js.map +1 -1
- package/dist/http-api/HttpApiScalar.d.ts +2 -1
- package/dist/http-api/HttpApiScalar.d.ts.map +1 -1
- package/dist/http-api/HttpApiScalar.js +6 -3
- package/dist/http-api/HttpApiScalar.js.map +1 -1
- package/dist/http-api/HttpApiSchema.d.ts +191 -9
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +137 -4
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/http-api/HttpApiSwagger.d.ts +5 -0
- package/dist/http-api/HttpApiSwagger.d.ts.map +1 -1
- package/dist/http-api/HttpApiSwagger.js +14 -4
- package/dist/http-api/HttpApiSwagger.js.map +1 -1
- package/dist/http-api/HttpApiTest.d.ts +13 -2
- package/dist/http-api/HttpApiTest.d.ts.map +1 -1
- package/dist/http-api/HttpApiTest.js +30 -9
- package/dist/http-api/HttpApiTest.js.map +1 -1
- package/dist/http-api/OpenApi.d.ts +17 -3
- package/dist/http-api/OpenApi.d.ts.map +1 -1
- package/dist/http-api/OpenApi.js +57 -32
- package/dist/http-api/OpenApi.js.map +1 -1
- package/dist/http-api/internal/path.js +35 -10
- package/dist/http-api/internal/path.js.map +1 -1
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/core.js +18 -2
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/dateTime.js +19 -7
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +89 -76
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/graphql.js +12 -2
- package/dist/internal/graphql.js.map +1 -1
- package/dist/internal/hashMap.js +2 -2
- package/dist/internal/hashMap.js.map +1 -1
- package/dist/internal/hydration.d.ts +2 -0
- package/dist/internal/hydration.d.ts.map +1 -0
- package/dist/internal/hydration.js +15 -0
- package/dist/internal/hydration.js.map +1 -0
- package/dist/internal/inflate.d.ts +2 -0
- package/dist/internal/inflate.d.ts.map +1 -0
- package/dist/internal/inflate.js +680 -0
- package/dist/internal/inflate.js.map +1 -0
- package/dist/internal/record.js +6 -0
- package/dist/internal/record.js.map +1 -1
- package/dist/internal/request.js +20 -7
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/schedule.js +17 -22
- package/dist/internal/schedule.js.map +1 -1
- package/dist/internal/schema/fromJsonSchemaDocument.js +136 -126
- package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/interpreter.js +51 -36
- package/dist/internal/schema/interpreter.js.map +1 -1
- package/dist/internal/schema/standardSchema.js +34 -33
- package/dist/internal/schema/standardSchema.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +7 -2
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/schema/toCodec.js +86 -1
- package/dist/internal/schema/toCodec.js.map +1 -1
- package/dist/internal/schema/toFormatter.js +5 -5
- package/dist/internal/schema/toFormatter.js.map +1 -1
- package/dist/internal/schema/toJsonSchemaDocument.js +60 -38
- package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
- package/dist/internal/trie.js +1 -3
- package/dist/internal/trie.js.map +1 -1
- package/dist/internal/uuid.js +7 -3
- package/dist/internal/uuid.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/net/NetAddress.d.ts.map +1 -1
- package/dist/net/NetAddress.js +2 -8
- package/dist/net/NetAddress.js.map +1 -1
- package/dist/observability/Otlp.d.ts +15 -0
- package/dist/observability/Otlp.d.ts.map +1 -1
- package/dist/observability/Otlp.js +3 -0
- package/dist/observability/Otlp.js.map +1 -1
- package/dist/observability/OtlpExporter.d.ts +8 -0
- package/dist/observability/OtlpExporter.d.ts.map +1 -1
- package/dist/observability/OtlpExporter.js +15 -13
- package/dist/observability/OtlpExporter.js.map +1 -1
- package/dist/observability/OtlpLogger.d.ts +17 -0
- package/dist/observability/OtlpLogger.d.ts.map +1 -1
- package/dist/observability/OtlpLogger.js +14 -1
- package/dist/observability/OtlpLogger.js.map +1 -1
- package/dist/observability/OtlpMetrics.d.ts +17 -0
- package/dist/observability/OtlpMetrics.d.ts.map +1 -1
- package/dist/observability/OtlpMetrics.js +18 -3
- package/dist/observability/OtlpMetrics.js.map +1 -1
- package/dist/observability/OtlpResource.d.ts +3 -1
- package/dist/observability/OtlpResource.d.ts.map +1 -1
- package/dist/observability/OtlpResource.js +11 -4
- package/dist/observability/OtlpResource.js.map +1 -1
- package/dist/observability/OtlpSerialization.d.ts +5 -0
- package/dist/observability/OtlpSerialization.d.ts.map +1 -1
- package/dist/observability/OtlpSerialization.js +14 -3
- package/dist/observability/OtlpSerialization.js.map +1 -1
- package/dist/observability/OtlpTracer.d.ts +17 -0
- package/dist/observability/OtlpTracer.d.ts.map +1 -1
- package/dist/observability/OtlpTracer.js +15 -2
- package/dist/observability/OtlpTracer.js.map +1 -1
- package/dist/observability/internal/protobuf.d.ts +0 -9
- package/dist/observability/internal/protobuf.d.ts.map +1 -1
- package/dist/observability/internal/protobuf.js +2 -10
- package/dist/observability/internal/protobuf.js.map +1 -1
- package/dist/persistence/PersistedCache.d.ts.map +1 -1
- package/dist/persistence/PersistedCache.js +1 -1
- package/dist/persistence/PersistedCache.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +6 -2
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +162 -84
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/persistence/Persistence.d.ts +28 -0
- package/dist/persistence/Persistence.d.ts.map +1 -1
- package/dist/persistence/Persistence.js +36 -8
- package/dist/persistence/Persistence.js.map +1 -1
- package/dist/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/persistence/RateLimiter.js +8 -12
- package/dist/persistence/RateLimiter.js.map +1 -1
- package/dist/persistence/UserDirectories.d.ts +129 -0
- package/dist/persistence/UserDirectories.d.ts.map +1 -0
- package/dist/persistence/UserDirectories.js +178 -0
- package/dist/persistence/UserDirectories.js.map +1 -0
- package/dist/persistence/index.d.ts +5 -0
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +5 -0
- package/dist/persistence/index.js.map +1 -1
- package/dist/process/ChildProcess.d.ts +2 -1
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js.map +1 -1
- package/dist/reactivity/AsyncResult.d.ts +6 -0
- package/dist/reactivity/AsyncResult.d.ts.map +1 -1
- package/dist/reactivity/AsyncResult.js +28 -1
- package/dist/reactivity/AsyncResult.js.map +1 -1
- package/dist/reactivity/Atom.d.ts +69 -30
- package/dist/reactivity/Atom.d.ts.map +1 -1
- package/dist/reactivity/Atom.js +40 -15
- package/dist/reactivity/Atom.js.map +1 -1
- package/dist/reactivity/AtomHttpApi.d.ts +5 -5
- package/dist/reactivity/AtomHttpApi.d.ts.map +1 -1
- package/dist/reactivity/AtomHttpApi.js +1 -1
- package/dist/reactivity/AtomHttpApi.js.map +1 -1
- package/dist/reactivity/AtomRegistry.d.ts +2 -2
- package/dist/reactivity/AtomRegistry.d.ts.map +1 -1
- package/dist/reactivity/AtomRegistry.js +47 -10
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/reactivity/AtomRpc.d.ts +3 -3
- package/dist/reactivity/AtomRpc.d.ts.map +1 -1
- package/dist/reactivity/AtomRpc.js +1 -1
- package/dist/reactivity/AtomRpc.js.map +1 -1
- package/dist/reactivity/Hydration.d.ts.map +1 -1
- package/dist/reactivity/Hydration.js +46 -12
- package/dist/reactivity/Hydration.js.map +1 -1
- package/dist/reactivity/Reactivity.d.ts +71 -7
- package/dist/reactivity/Reactivity.d.ts.map +1 -1
- package/dist/reactivity/Reactivity.js +21 -12
- package/dist/reactivity/Reactivity.js.map +1 -1
- package/dist/rpc/Rpc.d.ts +18 -0
- package/dist/rpc/Rpc.d.ts.map +1 -1
- package/dist/rpc/Rpc.js +20 -0
- package/dist/rpc/Rpc.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +26 -2
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +202 -61
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts +15 -0
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +21 -5
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +9 -18
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/schema/Model.d.ts +1 -1
- package/dist/schema/VariantSchema.d.ts +22 -3
- package/dist/schema/VariantSchema.d.ts.map +1 -1
- package/dist/schema/VariantSchema.js +32 -18
- package/dist/schema/VariantSchema.js.map +1 -1
- package/dist/socket/Socket.d.ts +23 -1
- package/dist/socket/Socket.d.ts.map +1 -1
- package/dist/socket/Socket.js +36 -3
- package/dist/socket/Socket.js.map +1 -1
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +15 -3
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +151 -12
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +156 -34
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/SqlResolver.d.ts +9 -0
- package/dist/sql/SqlResolver.d.ts.map +1 -1
- package/dist/sql/SqlResolver.js +9 -0
- package/dist/sql/SqlResolver.js.map +1 -1
- package/dist/sql/Statement.d.ts +3 -1
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +24 -5
- package/dist/sql/Statement.js.map +1 -1
- package/dist/testing/TestClock.d.ts +16 -3
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +115 -23
- package/dist/testing/TestClock.js.map +1 -1
- package/dist/testing/TestSchema.d.ts +7 -1
- package/dist/testing/TestSchema.d.ts.map +1 -1
- package/dist/testing/TestSchema.js +9 -3
- package/dist/testing/TestSchema.js.map +1 -1
- package/dist/workflow/Activity.js +1 -0
- package/dist/workflow/Activity.js.map +1 -1
- package/dist/workflow/Workflow.d.ts +22 -0
- package/dist/workflow/Workflow.d.ts.map +1 -1
- package/dist/workflow/Workflow.js +15 -3
- package/dist/workflow/Workflow.js.map +1 -1
- package/dist/workflow/WorkflowEngine.d.ts +20 -1
- package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +52 -24
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +13 -3
- package/src/Array.ts +223 -61
- package/src/Bytes.ts +111 -0
- package/src/Channel.ts +287 -439
- package/src/ChannelSchema.ts +1 -49
- package/src/Chunk.ts +55 -61
- package/src/Config.ts +12 -86
- package/src/ConfigProvider.ts +41 -44
- package/src/Cron.ts +6 -3
- package/src/Duration.ts +70 -21
- package/src/Effect.ts +642 -220
- package/src/Equivalence.ts +7 -4
- package/src/Exit.ts +24 -9
- package/src/FiberHandle.ts +10 -9
- package/src/FiberMap.ts +13 -66
- package/src/FileSystem.ts +33 -9
- package/src/Graph.ts +171 -1263
- package/src/HashSet.ts +0 -60
- package/src/Iterable.ts +15 -14
- package/src/JsonSchema.ts +28 -3
- package/src/Layer.ts +2 -2
- package/src/ManagedRuntime.ts +72 -6
- package/src/Match.ts +65 -12
- package/src/Metric.ts +249 -507
- package/src/MutableHashMap.ts +4 -473
- package/src/Number.ts +2 -2
- package/src/Optic.ts +17 -332
- package/src/Path.ts +61 -8
- package/src/PubSub.ts +12 -7
- package/src/Queue.ts +5 -37
- package/src/Random.ts +1 -1
- package/src/RcMap.ts +14 -8
- package/src/Record.ts +51 -0
- package/src/Ref.ts +7 -104
- package/src/References.ts +5 -4
- package/src/RequestResolver.ts +46 -87
- package/src/Resource.ts +1 -1
- package/src/Runtime.ts +19 -18
- package/src/Schedule.ts +2 -94
- package/src/Schema.ts +596 -348
- package/src/SchemaAST.ts +20 -9
- package/src/SchemaGetter.ts +22 -5
- package/src/SchemaIssue.ts +44 -53
- package/src/SchemaRepresentation.ts +64 -1
- package/src/SchemaTransformation.ts +1 -1
- package/src/Scope.ts +12 -2
- package/src/ScopedCache.ts +17 -142
- package/src/SemVer.ts +1528 -0
- package/src/SemVerRange.ts +883 -0
- package/src/Sink.ts +6 -2
- package/src/Stream.ts +334 -1011
- package/src/String.ts +25 -12
- package/src/TextDiff.ts +766 -0
- package/src/TxHashMap.ts +1 -103
- package/src/TxHashSet.ts +48 -753
- package/src/TxRef.ts +4 -2
- package/src/ai/AiError.ts +69 -5
- package/src/ai/Chat.ts +10 -5
- package/src/ai/Decision.ts +119 -22
- package/src/ai/DecisionModel.ts +265 -109
- package/src/ai/EmbeddingModel.ts +25 -13
- package/src/ai/LanguageModel.ts +57 -51
- package/src/ai/McpClient.ts +1211 -0
- package/src/ai/McpClientError.ts +329 -0
- package/src/ai/McpProtocol.ts +2 -2
- package/src/ai/McpSchema.ts +153 -35
- package/src/ai/McpServer.ts +232 -275
- package/src/ai/Prompt.ts +49 -35
- package/src/ai/Response.ts +195 -65
- package/src/ai/Tool.ts +12 -4
- package/src/ai/Toolkit.ts +78 -10
- package/src/ai/index.ts +12 -0
- package/src/ai/internal/mcpCore.ts +13 -14
- package/src/ai/internal/mcpProtocol/v2024_11_05.ts +1 -1
- package/src/ai/internal/mcpProtocol/v2025_03_26.ts +1 -1
- package/src/ai/internal/mcpProtocol/v2025_06_18.ts +3 -3
- package/src/ai/internal/mcpProtocol/v2025_11_25.ts +3 -3
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +12 -14
- package/src/ai/internal/mcpProtocol.ts +22 -2
- package/src/ai/internal/mcpRuntime.ts +3 -4
- package/src/ai/internal/mcpSchema/v2024_11_05.ts +20 -13
- package/src/ai/internal/mcpSchema/v2025_03_26.ts +4 -2
- package/src/ai/internal/mcpSchema/v2025_06_18.ts +7 -7
- package/src/ai/internal/mcpSchema/v2025_11_25.ts +8 -8
- package/src/ai/internal/mcpSchema/v2026_07_28.ts +44 -42
- package/src/cli/CliError.ts +49 -4
- package/src/cli/Command.ts +316 -9
- package/src/cli/Completions.ts +10 -0
- package/src/cli/Flag.ts +218 -0
- package/src/cli/GlobalFlag.ts +3 -3
- package/src/cli/Param.ts +218 -0
- package/src/cli/TerminalCapabilities.ts +156 -0
- package/src/cli/index.ts +6 -0
- package/src/cli/internal/command.ts +10 -4
- package/src/cli/internal/completions/bash.ts +7 -5
- package/src/cli/internal/completions/descriptor.ts +20 -1
- package/src/cli/internal/completions/fish.ts +12 -10
- package/src/cli/internal/completions/powershell.ts +25 -13
- package/src/cli/internal/completions/zsh.ts +15 -8
- package/src/cli/internal/formatter.ts +18 -0
- package/src/cli/internal/lexer.ts +12 -5
- package/src/cli/internal/parser.ts +43 -14
- package/src/cli/internal/wizard.ts +2 -1
- package/src/cluster/ClusterCron.ts +94 -35
- package/src/cluster/ClusterMetrics.ts +149 -7
- package/src/cluster/ClusterWorkflowEngine.ts +164 -53
- package/src/cluster/Entity.ts +4 -0
- package/src/cluster/MessageStorage.ts +21 -3
- package/src/cluster/Runners.ts +145 -72
- package/src/cluster/Sharding.ts +118 -38
- package/src/cluster/ShardingConfig.ts +15 -0
- package/src/cluster/SqlMessageStorage.ts +58 -55
- package/src/cluster/SqlRunnerStorage.ts +10 -4
- package/src/cluster/internal/entityManager.ts +81 -11
- package/src/devtools/DevTools.ts +3 -2
- package/src/devtools/DevToolsClient.ts +27 -10
- package/src/encoding/Base64Url.ts +31 -0
- package/src/encoding/Ini.ts +3 -0
- package/src/encoding/JsonArray.ts +849 -0
- package/src/encoding/Ndjson.ts +211 -20
- package/src/encoding/SchemaBinary.ts +14 -48
- package/src/encoding/Sse.ts +1 -1
- package/src/encoding/Tar.ts +1417 -0
- package/src/encoding/Toml.ts +3 -3
- package/src/encoding/Xml.ts +2037 -0
- package/src/encoding/Yaml.ts +108 -36
- package/src/encoding/Zip.ts +1558 -0
- package/src/encoding/index.ts +24 -0
- package/src/eventlog/EventJournal.ts +611 -227
- package/src/eventlog/EventLog.ts +496 -196
- package/src/eventlog/EventLogEncryption.ts +128 -43
- package/src/eventlog/EventLogMessage.ts +62 -11
- package/src/eventlog/EventLogRemote.ts +77 -21
- package/src/eventlog/EventLogServer.ts +162 -20
- package/src/eventlog/EventLogServerEncrypted.ts +121 -80
- package/src/eventlog/EventLogServerUnencrypted.ts +180 -77
- package/src/eventlog/EventRow.ts +706 -0
- package/src/eventlog/SqlEventJournal.ts +453 -173
- package/src/eventlog/SqlEventLogServerEncrypted.ts +212 -83
- package/src/eventlog/SqlEventLogServerUnencrypted.ts +141 -62
- package/src/eventlog/index.ts +6 -0
- package/src/eventlog/internal/conflicts.ts +123 -0
- package/src/graphql/GraphQLClient.ts +17 -5
- package/src/graphql/GraphQLClientError.ts +5 -12
- package/src/graphql/GraphQLProtocol.ts +277 -20
- package/src/graphql/GraphQLResolver.ts +109 -230
- package/src/http/FetchHttpClient.ts +61 -8
- package/src/http/FindMyWay/internal/router.ts +13 -1
- package/src/http/Headers.ts +343 -163
- package/src/http/HttpClient.ts +144 -136
- package/src/http/HttpClientError.ts +10 -6
- package/src/http/HttpClientRequest.ts +315 -11
- package/src/http/HttpClientResponse.ts +71 -0
- package/src/http/HttpEffect.ts +25 -33
- package/src/http/HttpIncomingMessage.ts +3 -23
- package/src/http/HttpMiddleware.ts +265 -28
- package/src/http/HttpRouter.ts +67 -14
- package/src/http/HttpServerError.ts +14 -7
- package/src/http/HttpServerRequest.ts +73 -14
- package/src/http/HttpServerResponse.ts +49 -23
- package/src/http/HttpStaticServer.ts +29 -19
- package/src/http/HttpTraceContext.ts +1 -1
- package/src/http/MultipartParser/internal/contentType.ts +107 -6
- package/src/http/MultipartParser/internal/headers.ts +4 -16
- package/src/http/MultipartParser/internal/multipart.ts +10 -32
- package/src/http/Url.ts +8 -2
- package/src/http/UrlParams.ts +225 -26
- package/src/http/internal/compression.ts +3 -17
- package/src/http/internal/compressionBody.ts +56 -0
- package/src/http/internal/decompression.ts +235 -0
- package/src/http/internal/lazyStream.ts +25 -0
- package/src/http/internal/requestState.ts +33 -0
- package/src/http/internal/tracing.ts +21 -4
- package/src/http/internal/urlParams.ts +5 -0
- package/src/http/internal/webResponse.ts +20 -0
- package/src/http-api/HttpApi.ts +1 -1
- package/src/http-api/HttpApiBuilder.ts +151 -23
- package/src/http-api/HttpApiClient.ts +160 -31
- package/src/http-api/HttpApiEndpoint.ts +144 -33
- package/src/http-api/HttpApiError.ts +55 -0
- package/src/http-api/HttpApiScalar.ts +4 -3
- package/src/http-api/HttpApiSchema.ts +275 -13
- package/src/http-api/HttpApiSwagger.ts +11 -4
- package/src/http-api/HttpApiTest.ts +33 -9
- package/src/http-api/OpenApi.ts +84 -42
- package/src/http-api/internal/path.ts +40 -12
- package/src/index.ts +24 -0
- package/src/internal/core.ts +22 -2
- package/src/internal/dateTime.ts +20 -7
- package/src/internal/effect.ts +125 -88
- package/src/internal/graphql.ts +30 -7
- package/src/internal/hashMap.ts +2 -2
- package/src/internal/hydration.ts +15 -0
- package/src/internal/inflate.ts +710 -0
- package/src/internal/record.ts +6 -0
- package/src/internal/request.ts +21 -6
- package/src/internal/schedule.ts +20 -39
- package/src/internal/schema/fromJsonSchemaDocument.ts +262 -193
- package/src/internal/schema/interpreter.ts +58 -45
- package/src/internal/schema/standardSchema.ts +32 -30
- package/src/internal/schema/toCodeDocument.ts +8 -3
- package/src/internal/schema/toCodec.ts +116 -1
- package/src/internal/schema/toFormatter.ts +6 -6
- package/src/internal/schema/toJsonSchemaDocument.ts +69 -39
- package/src/internal/trie.ts +1 -3
- package/src/internal/uuid.ts +15 -10
- package/src/internal/version.ts +1 -1
- package/src/net/NetAddress.ts +2 -9
- package/src/observability/Otlp.ts +18 -0
- package/src/observability/OtlpExporter.ts +19 -15
- package/src/observability/OtlpLogger.ts +31 -2
- package/src/observability/OtlpMetrics.ts +35 -4
- package/src/observability/OtlpResource.ts +16 -6
- package/src/observability/OtlpSerialization.ts +17 -3
- package/src/observability/OtlpTracer.ts +32 -3
- package/src/observability/internal/protobuf.ts +2 -10
- package/src/persistence/PersistedCache.ts +3 -1
- package/src/persistence/PersistedQueue.ts +223 -153
- package/src/persistence/Persistence.ts +64 -30
- package/src/persistence/RateLimiter.ts +18 -21
- package/src/persistence/UserDirectories.ts +273 -0
- package/src/persistence/index.ts +6 -0
- package/src/process/ChildProcess.ts +2 -1
- package/src/reactivity/AsyncResult.ts +35 -38
- package/src/reactivity/Atom.ts +134 -166
- package/src/reactivity/AtomHttpApi.ts +10 -16
- package/src/reactivity/AtomRegistry.ts +53 -30
- package/src/reactivity/AtomRpc.ts +6 -22
- package/src/reactivity/Hydration.ts +53 -12
- package/src/reactivity/Reactivity.ts +97 -39
- package/src/rpc/Rpc.ts +21 -0
- package/src/rpc/RpcClient.ts +285 -104
- package/src/rpc/RpcSerialization.ts +21 -5
- package/src/rpc/RpcServer.ts +11 -20
- package/src/schema/VariantSchema.ts +86 -22
- package/src/socket/Socket.ts +45 -20
- package/src/sql/Migrator.ts +19 -9
- package/src/sql/SqlClient.ts +275 -36
- package/src/sql/SqlResolver.ts +9 -0
- package/src/sql/Statement.ts +35 -8
- package/src/testing/TestClock.ts +147 -29
- package/src/testing/TestSchema.ts +9 -3
- package/src/workflow/Activity.ts +1 -0
- package/src/workflow/Workflow.ts +31 -5
- package/src/workflow/WorkflowEngine.ts +93 -31
- package/dist/http/internal/preResponseHandler.d.ts +0 -2
- package/dist/http/internal/preResponseHandler.d.ts.map +0 -1
- package/dist/http/internal/preResponseHandler.js +0 -14
- package/dist/http/internal/preResponseHandler.js.map +0 -1
- package/src/http/internal/preResponseHandler.ts +0 -19
|
@@ -0,0 +1,706 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mutable rows that converge across event-log replicas.
|
|
3
|
+
*
|
|
4
|
+
* Each row type has one event with `set`, `patch` and `remove` payloads, keyed
|
|
5
|
+
* by one or more of its fields. Pass the result of `make` to `EventGroup.add`.
|
|
6
|
+
* Its `set`, `patch` and `remove` constructors return `{ event, payload }`,
|
|
7
|
+
* which spreads into `EventLog.write` and serves as an item of
|
|
8
|
+
* `EventLog.writeMany` or an argument of an `EventLog.makeClient` client.
|
|
9
|
+
*
|
|
10
|
+
* `handler` resolves conflicts per top-level field and calls at most one
|
|
11
|
+
* storage callback. Replicas converge to the result of applying entries in
|
|
12
|
+
* id order. `compaction` drops entries that newer ones shadow.
|
|
13
|
+
*
|
|
14
|
+
* **Details**
|
|
15
|
+
*
|
|
16
|
+
* Replay decodes entries and stored conflicts with the current row schema,
|
|
17
|
+
* which must accept every encoding previously written:
|
|
18
|
+
*
|
|
19
|
+
* - New fields must accept absence, for example with
|
|
20
|
+
* `Schema.withDecodingDefaultKey`. Nullable fields alone reject old `set`
|
|
21
|
+
* entries. Patches never apply defaults.
|
|
22
|
+
* - Removing a field is safe. Old entries decode without it.
|
|
23
|
+
* - To change a field's type, keep its encoded type and change its decoded
|
|
24
|
+
* type with a transformation, such as `Schema.NumberFromString` for a field
|
|
25
|
+
* that used to be a string.
|
|
26
|
+
* - Making a field required, renaming it, narrowing its type, changing its
|
|
27
|
+
* encoded type or changing the key breaks old entries. That includes
|
|
28
|
+
* widening a field to a union of its old and new types, because union
|
|
29
|
+
* encodings are tagged. A rename keeps old entries readable only if the
|
|
30
|
+
* field has an explicit `SchemaBinary.fieldId`.
|
|
31
|
+
* - Key-field schemas must decode written values to ones with the same
|
|
32
|
+
* primary key, since replicas derive the key from decoded values.
|
|
33
|
+
*
|
|
34
|
+
* Conflicts are scoped to one row; parent removal does not resolve concurrent
|
|
35
|
+
* child writes. For cascading deletion, retain a removed-parent marker and
|
|
36
|
+
* delete its children in the parent `remove` callback. The `remove` callback
|
|
37
|
+
* writes the marker even when the parent was never stored, since compaction
|
|
38
|
+
* or a newer `remove` can skip its `set`, and the marker must not depend on
|
|
39
|
+
* the old row. A parent `patch` treats a marker as a missing row. Child `set`
|
|
40
|
+
* and `patch` callbacks must skip marked parents but allow parents not yet
|
|
41
|
+
* received. Make the parent id part of the child key, as in
|
|
42
|
+
* `fields: ["parentId", "id"]`, so a child cannot move between parents. This
|
|
43
|
+
* converges only if parent deletion is final (no key reuse). Queries must
|
|
44
|
+
* exclude marked parents. Retain markers unless the app defines a safe cutoff
|
|
45
|
+
* for removing them.
|
|
46
|
+
*
|
|
47
|
+
* **Example** (Syncing grocery rows)
|
|
48
|
+
*
|
|
49
|
+
* ```ts
|
|
50
|
+
* import { Effect, Schema } from "effect"
|
|
51
|
+
* import { EventGroup, EventLog, EventRow } from "effect/eventlog"
|
|
52
|
+
*
|
|
53
|
+
* const Grocery = EventRow.make("grocery", {
|
|
54
|
+
* key: "id",
|
|
55
|
+
* schema: Schema.Struct({
|
|
56
|
+
* id: Schema.String,
|
|
57
|
+
* name: Schema.String,
|
|
58
|
+
* completed: Schema.Boolean
|
|
59
|
+
* })
|
|
60
|
+
* })
|
|
61
|
+
*
|
|
62
|
+
* const Groceries = EventGroup.empty.add(Grocery)
|
|
63
|
+
*
|
|
64
|
+
* const store = new Map<string, typeof Grocery.schema.Type>()
|
|
65
|
+
*
|
|
66
|
+
* export const GroceriesLive = EventLog.group(Groceries, (handlers) =>
|
|
67
|
+
* handlers.handle(
|
|
68
|
+
* "grocery",
|
|
69
|
+
* EventRow.handler(Grocery, {
|
|
70
|
+
* set: (row) => Effect.sync(() => store.set(row.id, row)),
|
|
71
|
+
* patch: (id, fields) =>
|
|
72
|
+
* Effect.sync(() => {
|
|
73
|
+
* const row = store.get(id)
|
|
74
|
+
* if (row !== undefined) store.set(id, { ...row, ...fields })
|
|
75
|
+
* }),
|
|
76
|
+
* remove: (id) => Effect.sync(() => store.delete(id))
|
|
77
|
+
* })
|
|
78
|
+
* ))
|
|
79
|
+
*
|
|
80
|
+
* export const complete = Effect.fnUntraced(function*(id: string) {
|
|
81
|
+
* const log = yield* EventLog.EventLog
|
|
82
|
+
* yield* log.write({
|
|
83
|
+
* schema: EventLog.schema(Groceries),
|
|
84
|
+
* ...Grocery.patch(id, { completed: true })
|
|
85
|
+
* })
|
|
86
|
+
* })
|
|
87
|
+
* ```
|
|
88
|
+
*
|
|
89
|
+
* **Example** (Evolving a row schema)
|
|
90
|
+
*
|
|
91
|
+
* ```ts import.meta.vitest
|
|
92
|
+
* import { Effect, Schema } from "effect"
|
|
93
|
+
* import { EventGroup, EventRow } from "effect/eventlog"
|
|
94
|
+
*
|
|
95
|
+
* const ItemV1 = EventRow.make("item", {
|
|
96
|
+
* key: "id",
|
|
97
|
+
* schema: Schema.Struct({ id: Schema.String, quantity: Schema.String })
|
|
98
|
+
* })
|
|
99
|
+
*
|
|
100
|
+
* // Adds a nullable field and reads the old string quantity as a number.
|
|
101
|
+
* const ItemV2 = EventRow.make("item", {
|
|
102
|
+
* key: "id",
|
|
103
|
+
* schema: Schema.Struct({
|
|
104
|
+
* id: Schema.String,
|
|
105
|
+
* quantity: Schema.NumberFromString,
|
|
106
|
+
* note: Schema.NullOr(Schema.String).pipe(
|
|
107
|
+
* Schema.withDecodingDefaultKey(Effect.succeed(null))
|
|
108
|
+
* )
|
|
109
|
+
* })
|
|
110
|
+
* })
|
|
111
|
+
*
|
|
112
|
+
* const v1 = EventGroup.empty.add(ItemV1).events.item.payloadSchemaBinary
|
|
113
|
+
* const v2 = EventGroup.empty.add(ItemV2).events.item.payloadSchemaBinary
|
|
114
|
+
*
|
|
115
|
+
* const written = Schema.encodeUnknownSync(v1)(ItemV1.set({ id: "a", quantity: "3" }).payload)
|
|
116
|
+
* const decoded = Schema.decodeUnknownSync(v2)(written)
|
|
117
|
+
* decoded // => { _tag: "set", row: { id: "a", quantity: 3, note: null } }
|
|
118
|
+
* ```
|
|
119
|
+
*
|
|
120
|
+
* @stability unstable
|
|
121
|
+
* @since 4.0.6
|
|
122
|
+
*/
|
|
123
|
+
import * as Context from "../Context.ts"
|
|
124
|
+
import * as Effect from "../Effect.ts"
|
|
125
|
+
import * as SchemaBinary from "../encoding/SchemaBinary.ts"
|
|
126
|
+
import * as Layer from "../Layer.ts"
|
|
127
|
+
import * as Result from "../Result.ts"
|
|
128
|
+
import * as Schema from "../Schema.ts"
|
|
129
|
+
import * as SchemaGetter from "../SchemaGetter.ts"
|
|
130
|
+
import * as SchemaIssue from "../SchemaIssue.ts"
|
|
131
|
+
import * as SchemaParser from "../SchemaParser.ts"
|
|
132
|
+
import * as Struct from "../Struct.ts"
|
|
133
|
+
import type * as Event from "./Event.ts"
|
|
134
|
+
import type * as EventGroup from "./EventGroup.ts"
|
|
135
|
+
import { Entry } from "./EventJournal.ts"
|
|
136
|
+
import * as EventLog from "./EventLog.ts"
|
|
137
|
+
import type { StoreId } from "./EventLogMessage.ts"
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Required fields that can be part of a declared row key.
|
|
141
|
+
*
|
|
142
|
+
* @stability unstable
|
|
143
|
+
* @category utility types
|
|
144
|
+
* @since 4.0.6
|
|
145
|
+
*/
|
|
146
|
+
export type RequiredField<Fields extends Schema.Struct.Fields> =
|
|
147
|
+
& {
|
|
148
|
+
[K in keyof Fields]: Fields[K] extends { readonly "~type.optionality": "optional" } ? never : K
|
|
149
|
+
}[keyof Fields]
|
|
150
|
+
& string
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Values of the declared key fields of a row.
|
|
154
|
+
*
|
|
155
|
+
* @stability unstable
|
|
156
|
+
* @category utility types
|
|
157
|
+
* @since 4.0.6
|
|
158
|
+
*/
|
|
159
|
+
export type KeyValues<Fields extends Schema.Struct.Fields, Names extends keyof Fields> = {
|
|
160
|
+
readonly [K in Names]: Schema.Schema.Type<Fields[K]>
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Required fields whose values are all strings, all numbers or all
|
|
165
|
+
* `Uint8Array`s, so their JSON encodings form keys without `derive`.
|
|
166
|
+
*
|
|
167
|
+
* @stability unstable
|
|
168
|
+
* @category utility types
|
|
169
|
+
* @since 4.0.6
|
|
170
|
+
*/
|
|
171
|
+
export type DefaultKeyField<Fields extends Schema.Struct.Fields> = {
|
|
172
|
+
[K in RequiredField<Fields>]: [Schema.Schema.Type<Fields[K]>] extends [string] ? K
|
|
173
|
+
: [Schema.Schema.Type<Fields[K]>] extends [number] ? K
|
|
174
|
+
: [Schema.Schema.Type<Fields[K]>] extends [Uint8Array] ? K
|
|
175
|
+
: never
|
|
176
|
+
}[RequiredField<Fields>]
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* A row key declared from one or more fields.
|
|
180
|
+
*
|
|
181
|
+
* **Details**
|
|
182
|
+
*
|
|
183
|
+
* The primary key is the result of `derive`, which must be deterministic and
|
|
184
|
+
* unique per row. Without it, the primary key is the JSON tuple of the
|
|
185
|
+
* fields' JSON encodings, in declaration order, which needs every field to be
|
|
186
|
+
* a {@link DefaultKeyField}. Other fields can collide in JSON, such as `null`
|
|
187
|
+
* and `undefined`, so they require `derive`.
|
|
188
|
+
*
|
|
189
|
+
* @stability unstable
|
|
190
|
+
* @category models
|
|
191
|
+
* @since 4.0.6
|
|
192
|
+
*/
|
|
193
|
+
export type KeyDeclaration<Fields extends Schema.Struct.Fields, Names extends RequiredField<Fields>> =
|
|
194
|
+
& { readonly fields: readonly [Names, ...Array<Names>] }
|
|
195
|
+
& ([Names] extends [DefaultKeyField<Fields>] ?
|
|
196
|
+
{ readonly derive?: ((fields: KeyValues<Fields, Names>) => string) | undefined }
|
|
197
|
+
: { readonly derive: (fields: KeyValues<Fields, Names>) => string })
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Primary key type of a row: the key value for a string-typed single-field
|
|
201
|
+
* key, and `string` otherwise.
|
|
202
|
+
*
|
|
203
|
+
* @stability unstable
|
|
204
|
+
* @category utility types
|
|
205
|
+
* @since 4.0.6
|
|
206
|
+
*/
|
|
207
|
+
export type PrimaryKey<KeySchema extends Schema.Constraint> = Schema.Schema.Type<KeySchema> extends string
|
|
208
|
+
? Schema.Schema.Type<KeySchema>
|
|
209
|
+
: string
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Optional non-key fields of a `patch` payload.
|
|
213
|
+
*
|
|
214
|
+
* @stability unstable
|
|
215
|
+
* @category utility types
|
|
216
|
+
* @since 4.0.6
|
|
217
|
+
*/
|
|
218
|
+
export type PatchFields<Fields extends Schema.Struct.Fields, Key extends keyof Fields> = {
|
|
219
|
+
readonly [K in Exclude<keyof Fields, Key>]: Schema.optionalKey<Fields[K]>
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Schema of a row event's payload, derived from the row schema.
|
|
224
|
+
*
|
|
225
|
+
* **Details**
|
|
226
|
+
*
|
|
227
|
+
* - `set` carries the full row, validated by the row schema.
|
|
228
|
+
* - `patch` carries the row key and the fields to write. An absent field is
|
|
229
|
+
* not written. The key itself cannot be patched.
|
|
230
|
+
* - `remove` carries the row key.
|
|
231
|
+
*
|
|
232
|
+
* @stability unstable
|
|
233
|
+
* @category models
|
|
234
|
+
* @since 4.0.6
|
|
235
|
+
*/
|
|
236
|
+
export type PayloadSchema<
|
|
237
|
+
Fields extends Schema.Struct.Fields,
|
|
238
|
+
Key extends keyof Fields,
|
|
239
|
+
KeySchema extends Schema.Constraint = Fields[Key]
|
|
240
|
+
> = Schema.Union<
|
|
241
|
+
readonly [
|
|
242
|
+
Schema.TaggedStruct<"set", { readonly row: Schema.Struct<Fields> }>,
|
|
243
|
+
Schema.TaggedStruct<"patch", {
|
|
244
|
+
readonly key: KeySchema
|
|
245
|
+
readonly fields: Schema.Struct<PatchFields<Fields, Key>>
|
|
246
|
+
}>,
|
|
247
|
+
Schema.TaggedStruct<"remove", { readonly key: KeySchema }>
|
|
248
|
+
]
|
|
249
|
+
>
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Decoded payload of a row event.
|
|
253
|
+
*
|
|
254
|
+
* @stability unstable
|
|
255
|
+
* @category models
|
|
256
|
+
* @since 4.0.6
|
|
257
|
+
*/
|
|
258
|
+
export type Payload<
|
|
259
|
+
Fields extends Schema.Struct.Fields,
|
|
260
|
+
Key extends keyof Fields,
|
|
261
|
+
KeySchema extends Schema.Constraint = Fields[Key]
|
|
262
|
+
> = Schema.Schema.Type<PayloadSchema<Fields, Key, KeySchema>>
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* A row event to write, as returned by the `set`, `patch` and `remove`
|
|
266
|
+
* constructors of a row.
|
|
267
|
+
*
|
|
268
|
+
* @stability unstable
|
|
269
|
+
* @category models
|
|
270
|
+
* @since 4.0.6
|
|
271
|
+
*/
|
|
272
|
+
export type Write<
|
|
273
|
+
Tag extends string,
|
|
274
|
+
Fields extends Schema.Struct.Fields,
|
|
275
|
+
Key extends keyof Fields,
|
|
276
|
+
KeySchema extends Schema.Constraint = Fields[Key]
|
|
277
|
+
> = {
|
|
278
|
+
readonly event: Tag
|
|
279
|
+
readonly payload: Payload<Fields, Key, KeySchema>
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* A row type that syncs through an `EventLog`.
|
|
284
|
+
*
|
|
285
|
+
* **Details**
|
|
286
|
+
*
|
|
287
|
+
* Includes `EventGroup.add` options, the row schema, its key fields and
|
|
288
|
+
* constructors for the events to write. The row key is the event primary key;
|
|
289
|
+
* success is `void`.
|
|
290
|
+
*
|
|
291
|
+
* `Key` is the union of the key fields. `KeySchema` is the schema of the key
|
|
292
|
+
* in `patch` and `remove` payloads and callbacks: the field's schema for a
|
|
293
|
+
* single-field key, and a struct of the key fields for a declared key.
|
|
294
|
+
*
|
|
295
|
+
* @stability unstable
|
|
296
|
+
* @category models
|
|
297
|
+
* @since 4.0.6
|
|
298
|
+
*/
|
|
299
|
+
export interface EventRow<
|
|
300
|
+
out Tag extends string,
|
|
301
|
+
in out Fields extends Schema.Struct.Fields,
|
|
302
|
+
in out Key extends keyof Fields & string,
|
|
303
|
+
in out Error extends Schema.Top = typeof Schema.Never,
|
|
304
|
+
in out KeySchema extends Schema.Constraint = Fields[Key]
|
|
305
|
+
> {
|
|
306
|
+
readonly tag: Tag
|
|
307
|
+
readonly keyFields: ReadonlyArray<Key>
|
|
308
|
+
readonly schema: Schema.Struct<Fields>
|
|
309
|
+
readonly primaryKey: (payload: Payload<Fields, Key, KeySchema>) => string
|
|
310
|
+
readonly payload: PayloadSchema<Fields, Key, KeySchema>
|
|
311
|
+
readonly success: typeof Schema.Void
|
|
312
|
+
readonly error: Error
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Computes the primary key of a row from its key fields.
|
|
316
|
+
*/
|
|
317
|
+
readonly keyOf: (fields: KeyValues<Fields, Key>) => PrimaryKey<KeySchema>
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Replaces the whole row, creating it if missing.
|
|
321
|
+
*/
|
|
322
|
+
readonly set: (row: Schema.Struct<Fields>["Type"]) => Write<Tag, Fields, Key, KeySchema>
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Writes fields of an existing row.
|
|
326
|
+
*
|
|
327
|
+
* **Details**
|
|
328
|
+
*
|
|
329
|
+
* A patch on a missing row does nothing. To clear a value, use a nullable
|
|
330
|
+
* field and write `null`.
|
|
331
|
+
*
|
|
332
|
+
* Absent fields stay unwritten, even with decoding defaults. Values whose
|
|
333
|
+
* encoding omits the key, such as `Option.none()` for
|
|
334
|
+
* `Schema.OptionFromOptionalKey`, fail encoding: replicas cannot distinguish
|
|
335
|
+
* them from unwritten fields.
|
|
336
|
+
*/
|
|
337
|
+
readonly patch: (
|
|
338
|
+
key: Schema.Schema.Type<KeySchema>,
|
|
339
|
+
fields: Schema.Struct<PatchFields<Fields, Key>>["Type"]
|
|
340
|
+
) => Write<Tag, Fields, Key, KeySchema>
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Deletes the row.
|
|
344
|
+
*/
|
|
345
|
+
readonly remove: (key: Schema.Schema.Type<KeySchema>) => Write<Tag, Fields, Key, KeySchema>
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Defines a row type as a single event.
|
|
350
|
+
*
|
|
351
|
+
* **Details**
|
|
352
|
+
*
|
|
353
|
+
* `key` names a required field, or declares required fields with an
|
|
354
|
+
* optional `derive` function. `patch`, `remove` and the handler callbacks take
|
|
355
|
+
* the key as typed values: the field's value for a single field, and a struct
|
|
356
|
+
* of the fields for a declaration. Key fields cannot be patched. To move a
|
|
357
|
+
* row, remove it and set it again.
|
|
358
|
+
*
|
|
359
|
+
* A single-field key must be a {@link DefaultKeyField}. Declare other fields
|
|
360
|
+
* with a `derive` function.
|
|
361
|
+
*
|
|
362
|
+
* `keyOf` computes the primary key that conflicts are grouped by: the value
|
|
363
|
+
* of a string single-field key, the result of `derive`, or else the JSON
|
|
364
|
+
* tuple of the key fields' JSON encodings. `-0` and `0` are the same key.
|
|
365
|
+
*
|
|
366
|
+
* Last-writer-wins applies to top-level fields. Nested values are atomic, so
|
|
367
|
+
* concurrent updates within one nested value do not merge.
|
|
368
|
+
*
|
|
369
|
+
* `error` is the error schema of the event. Handler callbacks can fail with it.
|
|
370
|
+
*
|
|
371
|
+
* **Gotchas**
|
|
372
|
+
*
|
|
373
|
+
* Do not compact row events with `EventLog.groupCompaction` or
|
|
374
|
+
* `EventLog.groupBatchCompaction`. Compaction runs before stored conflicts
|
|
375
|
+
* are read, so merging row ops loses or misapplies writes. Use
|
|
376
|
+
* {@link compaction}, which only drops entries that newer ones shadow.
|
|
377
|
+
*
|
|
378
|
+
* For multi-row operations, use `EventLog.writeMany` with one op per row.
|
|
379
|
+
*
|
|
380
|
+
* @stability unstable
|
|
381
|
+
* @category constructors
|
|
382
|
+
* @since 4.0.6
|
|
383
|
+
*/
|
|
384
|
+
export const make = <
|
|
385
|
+
const Tag extends string,
|
|
386
|
+
Fields extends Schema.Struct.Fields,
|
|
387
|
+
const Key extends DefaultKeyField<Fields> = never,
|
|
388
|
+
const Declared extends RequiredField<Fields> = never,
|
|
389
|
+
Error extends Schema.Top = typeof Schema.Never
|
|
390
|
+
>(tag: Tag, options: {
|
|
391
|
+
readonly key: Key | KeyDeclaration<Fields, Declared>
|
|
392
|
+
readonly schema: Schema.Struct<Fields>
|
|
393
|
+
readonly error?: Error | undefined
|
|
394
|
+
}): EventRow<
|
|
395
|
+
Tag,
|
|
396
|
+
Fields,
|
|
397
|
+
// A declaration also infers `Key`, as its constraint, so `Declared` decides.
|
|
398
|
+
// `NoInfer` keeps a contextual return type from inferring `Declared`.
|
|
399
|
+
[NoInfer<Declared>] extends [never] ? NoInfer<Key> : NoInfer<Declared>,
|
|
400
|
+
Error,
|
|
401
|
+
[NoInfer<Declared>] extends [never] ? Fields[NoInfer<Key>]
|
|
402
|
+
: Schema.Struct<{ readonly [K in NoInfer<Declared>]: Fields[K] }>
|
|
403
|
+
> => {
|
|
404
|
+
const fields = options.schema.fields
|
|
405
|
+
const key = typeof options.key === "string"
|
|
406
|
+
? scalarKey(options.key, fields[options.key])
|
|
407
|
+
: declaredKey(options.key as KeyDeclaration<any, string>, fields)
|
|
408
|
+
const patchFields: Record<string, Schema.Constraint> = {}
|
|
409
|
+
for (const name of Object.keys(fields)) {
|
|
410
|
+
if (!key.fields.includes(name)) patchFields[name] = patchField(fields[name])
|
|
411
|
+
}
|
|
412
|
+
const payload = Schema.Union([
|
|
413
|
+
Schema.TaggedStruct("set", { row: options.schema }),
|
|
414
|
+
Schema.TaggedStruct("patch", { key: key.schema, fields: Schema.Struct(patchFields) }),
|
|
415
|
+
Schema.TaggedStruct("remove", { key: key.schema })
|
|
416
|
+
])
|
|
417
|
+
return {
|
|
418
|
+
tag,
|
|
419
|
+
keyFields: key.fields,
|
|
420
|
+
schema: options.schema,
|
|
421
|
+
keyOf: key.primaryKey,
|
|
422
|
+
[keyFromId]: key.fromRow,
|
|
423
|
+
primaryKey: (payload: Op) => key.primaryKey(payload._tag === "set" ? payload.row : key.toValues(payload.key)),
|
|
424
|
+
payload,
|
|
425
|
+
success: Schema.Void,
|
|
426
|
+
error: options.error ?? Schema.Never,
|
|
427
|
+
set: (row: unknown) => ({ event: tag, payload: { _tag: "set", row } }),
|
|
428
|
+
patch: (key: unknown, fields: unknown) => ({ event: tag, payload: { _tag: "patch", key, fields } }),
|
|
429
|
+
remove: (key: unknown) => ({ event: tag, payload: { _tag: "remove", key } })
|
|
430
|
+
} as any
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Builds the handler for a row event, to pass to `handlers.handle`.
|
|
435
|
+
*
|
|
436
|
+
* **Details**
|
|
437
|
+
*
|
|
438
|
+
* Resolves newer conflicts in id order and calls at most one callback with
|
|
439
|
+
* typed values and key, never conflicts.
|
|
440
|
+
*
|
|
441
|
+
* Newer writes take precedence per top-level field. Empty patches and entries
|
|
442
|
+
* with nothing left to write skip the callback but are still journaled and synced.
|
|
443
|
+
* A late `set` retains newer patches, including when the row is missing.
|
|
444
|
+
*
|
|
445
|
+
* Decodes stored entry bytes so local writes and replay pass the same values
|
|
446
|
+
* to callbacks, stripping keys outside the schema at any depth. Requires the
|
|
447
|
+
* payload schema's decoding services, plus any services the callbacks require.
|
|
448
|
+
* Callbacks may fail with the event's error type; success is always `void`.
|
|
449
|
+
*
|
|
450
|
+
* **Gotchas**
|
|
451
|
+
*
|
|
452
|
+
* Convergence requires this callback contract:
|
|
453
|
+
*
|
|
454
|
+
* - `set` replaces the whole row, creating it if it is missing.
|
|
455
|
+
* - `patch` updates an existing row and does nothing if the row is missing.
|
|
456
|
+
* Upserting can resurrect removed rows on only some replicas.
|
|
457
|
+
* - `remove` is idempotent.
|
|
458
|
+
*
|
|
459
|
+
* @stability unstable
|
|
460
|
+
* @category handlers
|
|
461
|
+
* @since 4.0.6
|
|
462
|
+
*/
|
|
463
|
+
export const handler = <
|
|
464
|
+
Tag extends string,
|
|
465
|
+
Fields extends Schema.Struct.Fields,
|
|
466
|
+
Key extends keyof Fields & string,
|
|
467
|
+
Error extends Schema.Top,
|
|
468
|
+
KeySchema extends Schema.Constraint,
|
|
469
|
+
RSet = never,
|
|
470
|
+
RPatch = never,
|
|
471
|
+
RRemove = never
|
|
472
|
+
>(
|
|
473
|
+
row: EventRow<Tag, Fields, Key, Error, KeySchema>,
|
|
474
|
+
callbacks: {
|
|
475
|
+
readonly set: (
|
|
476
|
+
row: Schema.Struct<Fields>["Type"],
|
|
477
|
+
key: Schema.Schema.Type<KeySchema>
|
|
478
|
+
) => Effect.Effect<unknown, Error["Type"], RSet>
|
|
479
|
+
readonly patch: (
|
|
480
|
+
key: Schema.Schema.Type<KeySchema>,
|
|
481
|
+
fields: Schema.Struct<PatchFields<Fields, Key>>["Type"]
|
|
482
|
+
) => Effect.Effect<unknown, Error["Type"], RPatch>
|
|
483
|
+
readonly remove: (key: Schema.Schema.Type<KeySchema>) => Effect.Effect<unknown, Error["Type"], RRemove>
|
|
484
|
+
}
|
|
485
|
+
): (options: {
|
|
486
|
+
readonly storeId: StoreId
|
|
487
|
+
readonly payload: Payload<Fields, Key, KeySchema>
|
|
488
|
+
readonly entry: Entry
|
|
489
|
+
readonly conflicts: ReadonlyArray<{
|
|
490
|
+
readonly entry: Entry
|
|
491
|
+
readonly payload: Payload<Fields, Key, KeySchema>
|
|
492
|
+
}>
|
|
493
|
+
}) => Effect.Effect<void, Error["Type"], RSet | RPatch | RRemove | DecodingServices<Fields, Key, KeySchema>> => {
|
|
494
|
+
const decode = Schema.decodeUnknownEffect(SchemaBinary.toCodec(row.payload))
|
|
495
|
+
const keyFrom: RowKey["fromRow"] = (row as any)[keyFromId]
|
|
496
|
+
return (options) =>
|
|
497
|
+
Effect.flatMap(
|
|
498
|
+
Effect.orDie(decode(options.entry.payload)),
|
|
499
|
+
(payload): Effect.Effect<unknown, Error["Type"], RSet | RPatch | RRemove> => {
|
|
500
|
+
const op = resolve(payload as Op, options.conflicts as ReadonlyArray<{ readonly payload: Op }>)
|
|
501
|
+
if (op === undefined) return Effect.void
|
|
502
|
+
switch (op._tag) {
|
|
503
|
+
case "set":
|
|
504
|
+
return callbacks.set(op.row as any, keyFrom(op.row) as any)
|
|
505
|
+
case "patch":
|
|
506
|
+
return Object.keys(op.fields).length === 0 ? Effect.void : callbacks.patch(op.key as any, op.fields as any)
|
|
507
|
+
case "remove":
|
|
508
|
+
return callbacks.remove(op.key as any)
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
).pipe(Effect.asVoid)
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
/**
|
|
515
|
+
* Registers a compactor for one row event of a group.
|
|
516
|
+
*
|
|
517
|
+
* **Details**
|
|
518
|
+
*
|
|
519
|
+
* Drops entries superseded within the same remote batch and row by a newer
|
|
520
|
+
* `set` or `remove`. A `patch` is also dropped when newer patches together
|
|
521
|
+
* overwrite all its fields. Kept entries retain their ids and stored conflicts.
|
|
522
|
+
*
|
|
523
|
+
* A `set` or `remove` followed only by patches is kept: without it, the
|
|
524
|
+
* patches would apply to a different row, or to none. Entries that fail to
|
|
525
|
+
* decode are kept.
|
|
526
|
+
*
|
|
527
|
+
* Leaves other events' compactors unchanged. Register one compactor per row
|
|
528
|
+
* event.
|
|
529
|
+
*
|
|
530
|
+
* @stability unstable
|
|
531
|
+
* @category compaction
|
|
532
|
+
* @since 4.0.6
|
|
533
|
+
*/
|
|
534
|
+
export const compaction = <
|
|
535
|
+
Events extends Event.Any,
|
|
536
|
+
Tag extends Event.Tag<Events>,
|
|
537
|
+
Fields extends Schema.Struct.Fields,
|
|
538
|
+
Key extends keyof Fields & string,
|
|
539
|
+
Error extends Schema.Top,
|
|
540
|
+
KeySchema extends Schema.Constraint
|
|
541
|
+
>(
|
|
542
|
+
group: EventGroup.EventGroup<Events>,
|
|
543
|
+
row: EventRow<Tag, Fields, Key, Error, KeySchema>
|
|
544
|
+
): Layer.Layer<never, never, EventLog.Registry | DecodingServices<Fields, Key, KeySchema>> =>
|
|
545
|
+
Layer.effectDiscard(Effect.gen(function*() {
|
|
546
|
+
const registry = yield* EventLog.Registry
|
|
547
|
+
const services = yield* Effect.context<DecodingServices<Fields, Key, KeySchema>>()
|
|
548
|
+
const decode = Schema.decodeUnknownEffect(group.events[row.tag].payloadSchemaBinary)
|
|
549
|
+
yield* registry.registerCompaction({
|
|
550
|
+
events: [row.tag],
|
|
551
|
+
effect: Effect.fnUntraced(function*({ entries, write }) {
|
|
552
|
+
const ops = new Map<Entry, Op>()
|
|
553
|
+
for (const entry of entries) {
|
|
554
|
+
const payload = yield* Effect.result(
|
|
555
|
+
decode(entry.payload).pipe(Effect.updateContext((input) => Context.merge(services, input)))
|
|
556
|
+
) as Effect.Effect<Result.Result<Op, unknown>>
|
|
557
|
+
if (Result.isSuccess(payload)) ops.set(entry, payload.success)
|
|
558
|
+
}
|
|
559
|
+
const shadowed = shadowedEntries(entries, ops)
|
|
560
|
+
for (const entry of entries) {
|
|
561
|
+
if (!shadowed.has(entry)) yield* write(entry)
|
|
562
|
+
}
|
|
563
|
+
})
|
|
564
|
+
})
|
|
565
|
+
}))
|
|
566
|
+
|
|
567
|
+
const shadowedEntries = (entries: ReadonlyArray<Entry>, ops: ReadonlyMap<Entry, Op>): Set<Entry> => {
|
|
568
|
+
const shadowed = new Set<Entry>()
|
|
569
|
+
const byKey = new Map<string, Array<Entry>>()
|
|
570
|
+
for (const entry of entries) {
|
|
571
|
+
const row = byKey.get(entry.primaryKey)
|
|
572
|
+
if (row === undefined) byKey.set(entry.primaryKey, [entry])
|
|
573
|
+
else row.push(entry)
|
|
574
|
+
}
|
|
575
|
+
for (const row of byKey.values()) {
|
|
576
|
+
row.sort(Entry.Order)
|
|
577
|
+
let replaced = false
|
|
578
|
+
let patched = false
|
|
579
|
+
const written = new Set<string>()
|
|
580
|
+
for (let i = row.length - 1; i >= 0; i--) {
|
|
581
|
+
const op = ops.get(row[i])
|
|
582
|
+
if (op === undefined) continue
|
|
583
|
+
if (op._tag !== "patch") {
|
|
584
|
+
if (replaced) shadowed.add(row[i])
|
|
585
|
+
replaced = true
|
|
586
|
+
continue
|
|
587
|
+
}
|
|
588
|
+
const names = Object.keys(op.fields)
|
|
589
|
+
if (replaced || (patched && names.every((name) => written.has(name)))) shadowed.add(row[i])
|
|
590
|
+
patched = true
|
|
591
|
+
for (const name of names) written.add(name)
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
return shadowed
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
const keyFromId = "~effect/eventlog/EventRow/keyFrom"
|
|
598
|
+
|
|
599
|
+
type Row = Readonly<Record<string, unknown>>
|
|
600
|
+
|
|
601
|
+
// How a row's key is carried and derived, for a single key field or a declaration.
|
|
602
|
+
interface RowKey {
|
|
603
|
+
readonly fields: ReadonlyArray<string>
|
|
604
|
+
// Schema of the key in `patch` and `remove` payloads.
|
|
605
|
+
readonly schema: Schema.Constraint
|
|
606
|
+
// The key as payloads and callbacks carry it.
|
|
607
|
+
readonly fromRow: (row: Row) => unknown
|
|
608
|
+
// The key field values a carried key stands for.
|
|
609
|
+
readonly toValues: (key: unknown) => Row
|
|
610
|
+
readonly primaryKey: (values: Row) => string
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
const scalarKey = (name: string, field: Schema.Constraint): RowKey => ({
|
|
614
|
+
fields: [name],
|
|
615
|
+
schema: field,
|
|
616
|
+
fromRow: (row) => row[name],
|
|
617
|
+
toValues: (key) => ({ [name]: key }),
|
|
618
|
+
primaryKey: jsonKey([[name, field]], true)
|
|
619
|
+
})
|
|
620
|
+
|
|
621
|
+
const declaredKey = (declaration: KeyDeclaration<any, string>, fields: Schema.Struct.Fields): RowKey => {
|
|
622
|
+
const names = declaration.fields
|
|
623
|
+
const derive = declaration.derive
|
|
624
|
+
return {
|
|
625
|
+
fields: names,
|
|
626
|
+
schema: Schema.Struct(Struct.pick(fields, names) as Schema.Struct.Fields),
|
|
627
|
+
fromRow: (row) => Struct.pick(row, names),
|
|
628
|
+
toValues: (key) => key as Row,
|
|
629
|
+
primaryKey: derive !== undefined
|
|
630
|
+
? (row) => derive(Struct.pick(row, names) as any)
|
|
631
|
+
: jsonKey(names.map((name) => [name, fields[name]]), false)
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
// A string single-field key is its own primary key. Otherwise the key is the
|
|
636
|
+
// JSON tuple of the fields' JSON encodings, distinct for distinct values of
|
|
637
|
+
// `DefaultKeyField`s. A field holds one kind of value, so a raw string never
|
|
638
|
+
// meets a tuple from the same field.
|
|
639
|
+
const jsonKey = (fields: ReadonlyArray<readonly [string, Schema.Constraint]>, single: boolean) => {
|
|
640
|
+
let encoders: ReadonlyArray<readonly [string, (value: unknown) => unknown]> | undefined
|
|
641
|
+
return (row: Row): string => {
|
|
642
|
+
if (single && typeof row[fields[0][0]] === "string") return row[fields[0][0]] as string
|
|
643
|
+
encoders ??= fields.map(([name, field]) =>
|
|
644
|
+
[name, Schema.encodeUnknownSync(Schema.toCodecJson(field as Schema.Codec<unknown>))] as const
|
|
645
|
+
)
|
|
646
|
+
return JSON.stringify(encoders.map(([name, encode]) => encode(row[name])))
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
// Run the field codec only for present keys, bypassing missing-key defaults.
|
|
651
|
+
const patchField = (field: Schema.Constraint): Schema.Constraint => {
|
|
652
|
+
const decode = SchemaParser.decodeUnknownEffect(field)
|
|
653
|
+
// The struct wrapper detects encodings that drop a written key.
|
|
654
|
+
const encode = SchemaParser.encodeUnknownEffect(Schema.Struct({ value: field }))
|
|
655
|
+
return Schema.optionalKey(Schema.toEncoded(field)).pipe(Schema.decodeTo(Schema.optionalKey(Schema.toType(field)), {
|
|
656
|
+
decode: SchemaGetter.transformEffect(decode),
|
|
657
|
+
encode: SchemaGetter.transformEffect((value, options) =>
|
|
658
|
+
Effect.flatMap(encode({ value }, options), (encoded) =>
|
|
659
|
+
Object.hasOwn(encoded, "value")
|
|
660
|
+
? Effect.succeed(encoded.value)
|
|
661
|
+
: Effect.fail(
|
|
662
|
+
new SchemaIssue.Forbidden({ message: "A patch cannot write a value whose encoding omits the key" }, value)
|
|
663
|
+
))
|
|
664
|
+
)
|
|
665
|
+
}))
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
type DecodingServices<
|
|
669
|
+
Fields extends Schema.Struct.Fields,
|
|
670
|
+
Key extends keyof Fields,
|
|
671
|
+
KeySchema extends Schema.Constraint
|
|
672
|
+
> = PayloadSchema<Fields, Key, KeySchema>["DecodingServices"]
|
|
673
|
+
|
|
674
|
+
type Op =
|
|
675
|
+
| { readonly _tag: "set"; readonly row: Row }
|
|
676
|
+
| { readonly _tag: "patch"; readonly key: unknown; readonly fields: Row }
|
|
677
|
+
| { readonly _tag: "remove"; readonly key: unknown }
|
|
678
|
+
|
|
679
|
+
const compose = (x: Op, y: Op): Op => {
|
|
680
|
+
if (y._tag !== "patch") return y
|
|
681
|
+
switch (x._tag) {
|
|
682
|
+
case "set":
|
|
683
|
+
return { _tag: "set", row: { ...x.row, ...y.fields } }
|
|
684
|
+
case "patch":
|
|
685
|
+
return { _tag: "patch", key: y.key, fields: { ...x.fields, ...y.fields } }
|
|
686
|
+
case "remove":
|
|
687
|
+
return x
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
const resolve = (entry: Op, conflicts: ReadonlyArray<{ readonly payload: Op }>): Op | undefined => {
|
|
692
|
+
if (conflicts.length === 0) return entry
|
|
693
|
+
let newer = conflicts[0].payload
|
|
694
|
+
for (let i = 1; i < conflicts.length; i++) {
|
|
695
|
+
newer = compose(newer, conflicts[i].payload)
|
|
696
|
+
}
|
|
697
|
+
if (newer._tag !== "patch") return undefined
|
|
698
|
+
switch (entry._tag) {
|
|
699
|
+
case "set":
|
|
700
|
+
return { _tag: "set", row: { ...entry.row, ...newer.fields } }
|
|
701
|
+
case "patch":
|
|
702
|
+
return { _tag: "patch", key: entry.key, fields: Struct.omit(entry.fields, Object.keys(newer.fields)) }
|
|
703
|
+
case "remove":
|
|
704
|
+
return entry
|
|
705
|
+
}
|
|
706
|
+
}
|