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
package/src/eventlog/EventLog.ts
CHANGED
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
* @stability unstable
|
|
11
11
|
* @since 4.0.0
|
|
12
12
|
*/
|
|
13
|
+
import * as Arr from "../Array.ts"
|
|
14
|
+
import * as Cause from "../Cause.ts"
|
|
13
15
|
import * as Context from "../Context.ts"
|
|
14
16
|
import * as Effect from "../Effect.ts"
|
|
15
17
|
import * as FiberMap from "../FiberMap.ts"
|
|
@@ -25,6 +27,8 @@ import { Reactivity } from "../reactivity/Reactivity.ts"
|
|
|
25
27
|
import * as ReactivityLayer from "../reactivity/Reactivity.ts"
|
|
26
28
|
import type * as Record from "../Record.ts"
|
|
27
29
|
import * as Redacted from "../Redacted.ts"
|
|
30
|
+
import { CurrentLogAnnotations } from "../References.ts"
|
|
31
|
+
import * as Result from "../Result.ts"
|
|
28
32
|
import * as Schedule from "../Schedule.ts"
|
|
29
33
|
import * as Schema from "../Schema.ts"
|
|
30
34
|
import * as SchemaGetter from "../SchemaGetter.ts"
|
|
@@ -36,6 +40,7 @@ import { Entry, EventJournal, type EventJournalError, makeEntryIdUnsafe, type Re
|
|
|
36
40
|
import * as EventLogEncryption from "./EventLogEncryption.ts"
|
|
37
41
|
import { StoreId } from "./EventLogMessage.ts"
|
|
38
42
|
import type { EventLogRemote } from "./EventLogRemote.ts"
|
|
43
|
+
import { setAnchor } from "./internal/conflicts.ts"
|
|
39
44
|
|
|
40
45
|
/**
|
|
41
46
|
* Service for writing typed event-log events through registered handlers.
|
|
@@ -59,6 +64,27 @@ export class EventLog extends Context.Service<EventLog, {
|
|
|
59
64
|
Event.SuccessWithTag<EventGroup.Events<Groups>, Tag>,
|
|
60
65
|
Event.ErrorWithTag<EventGroup.Events<Groups>, Tag> | EventJournalError
|
|
61
66
|
>
|
|
67
|
+
/**
|
|
68
|
+
* Write several events under one journal lock and one `HandlerTransaction`,
|
|
69
|
+
* returning each handler's result in input order. If any handler fails,
|
|
70
|
+
* none of the events are committed.
|
|
71
|
+
*/
|
|
72
|
+
readonly writeMany: <
|
|
73
|
+
Groups extends EventGroup.Any,
|
|
74
|
+
// Pairs each event tag with its own payload.
|
|
75
|
+
Item extends {
|
|
76
|
+
readonly [Tag in Event.Tag<EventGroup.Events<Groups>>]: {
|
|
77
|
+
readonly event: Tag
|
|
78
|
+
readonly payload: Event.PayloadWithTag<EventGroup.Events<Groups>, Tag>
|
|
79
|
+
}
|
|
80
|
+
}[Event.Tag<EventGroup.Events<Groups>>]
|
|
81
|
+
>(options: {
|
|
82
|
+
readonly schema: EventLogSchema<Groups>
|
|
83
|
+
readonly events: Arr.NonEmptyReadonlyArray<Item>
|
|
84
|
+
}) => Effect.Effect<
|
|
85
|
+
Arr.NonEmptyArray<Event.SuccessWithTag<EventGroup.Events<Groups>, Item["event"]>>,
|
|
86
|
+
Event.ErrorWithTag<EventGroup.Events<Groups>, Item["event"]> | EventJournalError
|
|
87
|
+
>
|
|
62
88
|
readonly entries: Effect.Effect<ReadonlyArray<Entry>, EventJournalError>
|
|
63
89
|
readonly destroy: Effect.Effect<void, EventJournalError>
|
|
64
90
|
}>()("effect/eventlog/EventLog") {}
|
|
@@ -83,7 +109,9 @@ export class Registry extends Context.Service<Registry, {
|
|
|
83
109
|
readonly events: ReadonlyArray<string>
|
|
84
110
|
readonly effect: (options: {
|
|
85
111
|
readonly entries: ReadonlyArray<Entry>
|
|
86
|
-
|
|
112
|
+
// Pass an input entry as source to anchor replacements during remote replay.
|
|
113
|
+
// Without it, matching IDs retain their position; new IDs use the group start.
|
|
114
|
+
readonly write: (entry: Entry, source?: Entry) => Effect.Effect<void>
|
|
87
115
|
}) => Effect.Effect<void>
|
|
88
116
|
}) => Effect.Effect<void, never, Scope.Scope>
|
|
89
117
|
|
|
@@ -91,7 +119,7 @@ export class Registry extends Context.Service<Registry, {
|
|
|
91
119
|
readonly events: ReadonlySet<string>
|
|
92
120
|
readonly effect: (options: {
|
|
93
121
|
readonly entries: ReadonlyArray<Entry>
|
|
94
|
-
readonly write: (entry: Entry) => Effect.Effect<void>
|
|
122
|
+
readonly write: (entry: Entry, source?: Entry) => Effect.Effect<void>
|
|
95
123
|
}) => Effect.Effect<void>
|
|
96
124
|
}>
|
|
97
125
|
|
|
@@ -119,7 +147,7 @@ export const layerRegistry = Layer.effect(
|
|
|
119
147
|
readonly events: ReadonlySet<string>
|
|
120
148
|
readonly effect: (options: {
|
|
121
149
|
readonly entries: ReadonlyArray<Entry>
|
|
122
|
-
readonly write: (entry: Entry) => Effect.Effect<void>
|
|
150
|
+
readonly write: (entry: Entry, source?: Entry) => Effect.Effect<void>
|
|
123
151
|
}) => Effect.Effect<void>
|
|
124
152
|
}>()
|
|
125
153
|
|
|
@@ -437,6 +465,68 @@ export class CurrentStoreId extends Context.Reference<StoreId>("effect/eventlog/
|
|
|
437
465
|
defaultValue: constant(StoreId.make("default"))
|
|
438
466
|
}) {}
|
|
439
467
|
|
|
468
|
+
/**
|
|
469
|
+
* Context reference for a transaction that wraps the event handlers of each
|
|
470
|
+
* batch replayed from a remote and of each local `write` or `writeMany`.
|
|
471
|
+
*
|
|
472
|
+
* **When to use**
|
|
473
|
+
*
|
|
474
|
+
* Use when handlers project into a store with transactions, such as
|
|
475
|
+
* `sql.withTransaction` or an IndexedDB transaction over the projection
|
|
476
|
+
* tables, so a batch of N events commits once instead of N times.
|
|
477
|
+
*
|
|
478
|
+
* **Details**
|
|
479
|
+
*
|
|
480
|
+
* The journal performs no I/O while the transaction is open: it reads replay
|
|
481
|
+
* conflicts before the transaction starts and commits the batch after it
|
|
482
|
+
* completes. Defaults to running the handlers without a transaction.
|
|
483
|
+
*
|
|
484
|
+
* If the transaction fails, the journal commits nothing from the batch. For a
|
|
485
|
+
* replayed batch, the remote is subscribed again after a backoff of up to 10
|
|
486
|
+
* seconds and the batch is delivered again, so later batches from that remote
|
|
487
|
+
* wait until it succeeds; local writes and other remotes are not blocked. A
|
|
488
|
+
* local write fails with the error and is not retried.
|
|
489
|
+
*
|
|
490
|
+
* **Gotchas**
|
|
491
|
+
*
|
|
492
|
+
* - A replayed entry that fails to decode, or whose handler fails or dies,
|
|
493
|
+
* fails the whole batch, which is retried as above. A failure that repeats
|
|
494
|
+
* on every attempt, such as a payload written by a newer schema, stops sync
|
|
495
|
+
* from that remote until the app is updated to handle it.
|
|
496
|
+
* - In a local write, an error returned by a handler fails the transaction
|
|
497
|
+
* and the write, and the journal commits none of its events.
|
|
498
|
+
* - Failures that abort the underlying transaction fail the whole batch, even
|
|
499
|
+
* when the handler recovers from them. In IndexedDB, any failed request that
|
|
500
|
+
* is not prevented aborts the whole transaction, and in PostgreSQL so does a
|
|
501
|
+
* failed statement outside a savepoint.
|
|
502
|
+
* - Failing the batch does not undo side effects of handlers that already ran.
|
|
503
|
+
* Only changes made inside a transaction that rolls back are undone.
|
|
504
|
+
* - Replay handlers must tolerate running more than once for the same entry.
|
|
505
|
+
* - Unless the transaction and the journal share a database connection, the
|
|
506
|
+
* transaction commits before the journal does, and the two commits are not
|
|
507
|
+
* atomic. A crash between them replays a remote batch on restart, but a
|
|
508
|
+
* local write is lost from the journal while its projection changes remain.
|
|
509
|
+
* - An IndexedDB transaction commits once it has no pending requests and
|
|
510
|
+
* control returns to the event loop. A custom wrapper must stop the fiber
|
|
511
|
+
* from yielding to the scheduler while it is open, by providing
|
|
512
|
+
* `References.PreventSchedulerYield` as `withTransaction` from
|
|
513
|
+
* `@effect/platform-browser` does. Otherwise it can commit partway through a
|
|
514
|
+
* batch, and the remaining handlers fail.
|
|
515
|
+
* - The transaction stays open for the whole batch, so other read-write
|
|
516
|
+
* transactions on the same tables wait for it.
|
|
517
|
+
* - The transaction must not change the error or success of the wrapped
|
|
518
|
+
* effect. Convert its own failures into defects.
|
|
519
|
+
*
|
|
520
|
+
* @stability unstable
|
|
521
|
+
* @category services
|
|
522
|
+
* @since 4.0.6
|
|
523
|
+
*/
|
|
524
|
+
export class HandlerTransaction extends Context.Reference<
|
|
525
|
+
<A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
|
|
526
|
+
>("effect/eventlog/EventLog/HandlerTransaction", {
|
|
527
|
+
defaultValue: constant(identity)
|
|
528
|
+
}) {}
|
|
529
|
+
|
|
440
530
|
const RedactedUint8Array = Schema.Uint8ArrayFromBase64.pipe(
|
|
441
531
|
Schema.decodeTo(Schema.Redacted(Schema.Uint8Array), {
|
|
442
532
|
decode: SchemaGetter.transform((value) => Redacted.make(value)),
|
|
@@ -581,28 +671,19 @@ export const group = <Events extends Event.Any, Return>(
|
|
|
581
671
|
})
|
|
582
672
|
) as any
|
|
583
673
|
|
|
584
|
-
|
|
585
|
-
* Registers a compaction handler for an event group.
|
|
586
|
-
*
|
|
587
|
-
* **Details**
|
|
588
|
-
*
|
|
589
|
-
* During remote replay, matching entries are decoded, grouped by primary key, and
|
|
590
|
-
* passed to the compaction effect, which may write replacement entries.
|
|
591
|
-
*
|
|
592
|
-
* @stability unstable
|
|
593
|
-
* @category compaction
|
|
594
|
-
* @since 4.0.0
|
|
595
|
-
*/
|
|
596
|
-
export const groupCompaction = <Events extends Event.Any, R>(
|
|
674
|
+
const registerBatchCompaction = <Events extends Event.Any, R>(
|
|
597
675
|
group: EventGroup.EventGroup<Events>,
|
|
598
676
|
effect: (options: {
|
|
599
|
-
readonly
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
677
|
+
readonly entries: ReadonlyArray<{
|
|
678
|
+
readonly entry: Entry
|
|
679
|
+
readonly event: Event.TaggedPayload<Events> | undefined
|
|
680
|
+
}>
|
|
681
|
+
readonly writeFrom: <Tag extends Event.Tag<Events>>(
|
|
682
|
+
source: Entry,
|
|
603
683
|
tag: Tag,
|
|
604
684
|
payload: Event.PayloadWithTag<Events, Tag>
|
|
605
685
|
) => Effect.Effect<void, never, Event.PayloadSchemaWithTag<Events, Tag>["EncodingServices"]>
|
|
686
|
+
readonly forward: (entry: Entry) => Effect.Effect<void>
|
|
606
687
|
}) => Effect.Effect<void, never, R>
|
|
607
688
|
): Layer.Layer<never, never, R | Event.PayloadSchema<Events>["DecodingServices"] | Registry> =>
|
|
608
689
|
Layer.effectDiscard(
|
|
@@ -616,70 +697,197 @@ export const groupCompaction = <Events extends Event.Any, R>(
|
|
|
616
697
|
const isEventTag = (tag: string): tag is Event.Tag<Events> => Object.hasOwn(group.events, tag)
|
|
617
698
|
const decodePayload = <Tag extends Event.Tag<Events>>(tag: Tag, payload: Uint8Array) =>
|
|
618
699
|
Schema.decodeUnknownEffect(group.events[tag].payloadSchemaBinary)(payload).pipe(
|
|
619
|
-
Effect.updateContext((input) => Context.merge(services, input))
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
timestamp: number,
|
|
700
|
+
Effect.updateContext((input) => Context.merge(services, input))
|
|
701
|
+
) as unknown as Effect.Effect<Event.PayloadWithTag<Events, Tag>, Schema.SchemaError>
|
|
702
|
+
const writeFrom = Effect.fnUntraced(function*<Tag extends Event.Tag<Events>>(
|
|
703
|
+
source: Entry,
|
|
624
704
|
tag: Tag,
|
|
625
705
|
payload: Event.PayloadWithTag<Events, Tag>
|
|
626
706
|
): Effect.fn.Return<void, never, Event.PayloadSchemaWithTag<Events, Tag>["EncodingServices"]> {
|
|
627
707
|
const event = Object.hasOwn(group.events, tag) ? group.events[tag] : undefined!
|
|
628
708
|
const entry = new Entry({
|
|
629
|
-
id: makeEntryIdUnsafe({ msecs:
|
|
709
|
+
id: makeEntryIdUnsafe({ msecs: source.createdAtMillis }),
|
|
630
710
|
event: tag,
|
|
631
711
|
payload: yield* Schema.encodeUnknownEffect(event.payloadSchemaBinary)(payload).pipe(
|
|
632
712
|
Effect.orDie
|
|
633
713
|
) as any,
|
|
634
714
|
primaryKey: event.primaryKey(payload)
|
|
635
715
|
}, { disableChecks: true })
|
|
636
|
-
yield* write(entry)
|
|
716
|
+
yield* write(entry, source)
|
|
637
717
|
})
|
|
718
|
+
const forward = (entry: Entry) => write(entry)
|
|
638
719
|
|
|
639
|
-
const
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
readonly taggedPayloads: Array<Event.TaggedPayload<Events>>
|
|
644
|
-
}
|
|
645
|
-
>()
|
|
720
|
+
const batch: Array<{
|
|
721
|
+
readonly entry: Entry
|
|
722
|
+
readonly event: Event.TaggedPayload<Events> | undefined
|
|
723
|
+
}> = []
|
|
646
724
|
for (const entry of entries) {
|
|
647
725
|
if (!isEventTag(entry.event)) {
|
|
648
726
|
continue
|
|
649
727
|
}
|
|
650
|
-
const payload = yield* decodePayload(entry.event, entry.payload)
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
}
|
|
657
|
-
byPrimaryKey.set(entry.primaryKey, {
|
|
658
|
-
entries: [entry],
|
|
659
|
-
taggedPayloads: [taggedPayload]
|
|
660
|
-
})
|
|
661
|
-
}
|
|
728
|
+
const payload = yield* Effect.result(decodePayload(entry.event, entry.payload))
|
|
729
|
+
batch.push({
|
|
730
|
+
entry,
|
|
731
|
+
event: Result.isFailure(payload)
|
|
732
|
+
? undefined
|
|
733
|
+
: { _tag: entry.event, payload: payload.success } as unknown as Event.TaggedPayload<Events>
|
|
734
|
+
})
|
|
662
735
|
}
|
|
663
736
|
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
events: taggedPayloads,
|
|
670
|
-
write(tag, payload) {
|
|
671
|
-
return Effect.orDie(writePayload(entries[0].createdAtMillis, tag, payload))
|
|
672
|
-
}
|
|
673
|
-
}).pipe(
|
|
674
|
-
Effect.updateContext((input) => Context.merge(services, input))
|
|
675
|
-
)
|
|
676
|
-
) as any
|
|
677
|
-
}
|
|
737
|
+
yield* Effect.orDie(
|
|
738
|
+
effect({ entries: batch, writeFrom, forward }).pipe(
|
|
739
|
+
Effect.updateContext((input) => Context.merge(services, input))
|
|
740
|
+
)
|
|
741
|
+
) as any
|
|
678
742
|
})
|
|
679
743
|
})
|
|
680
744
|
})
|
|
681
745
|
)
|
|
682
746
|
|
|
747
|
+
/**
|
|
748
|
+
* Registers a batch compaction handler for an event group.
|
|
749
|
+
*
|
|
750
|
+
* **When to use**
|
|
751
|
+
*
|
|
752
|
+
* Use when an event under one primary key affects entries under other keys.
|
|
753
|
+
*
|
|
754
|
+
* **Details**
|
|
755
|
+
*
|
|
756
|
+
* The compaction effect receives every entry for the group in batch order, with
|
|
757
|
+
* its decoded event or `event: undefined` if the payload cannot be decoded.
|
|
758
|
+
*
|
|
759
|
+
* Only entries that the effect outputs are kept:
|
|
760
|
+
*
|
|
761
|
+
* - `forward(entry)` keeps an input entry unchanged, with the same id, payload,
|
|
762
|
+
* and primary key.
|
|
763
|
+
* - `write(tag, payload)` encodes a replacement entry anchored to the first
|
|
764
|
+
* entry in the batch, with a fresh id in that entry's millisecond.
|
|
765
|
+
*
|
|
766
|
+
* Entries that are neither forwarded nor replaced are dropped, including entries
|
|
767
|
+
* that could not be decoded. During remote replay, kept entries are replayed in
|
|
768
|
+
* the id order of their anchors, then in write order, and a replacement's
|
|
769
|
+
* conflicts are the stored entries newer than its anchor.
|
|
770
|
+
*
|
|
771
|
+
* **Gotchas**
|
|
772
|
+
*
|
|
773
|
+
* Compaction runs before conflicts are read, so it never sees stored entries.
|
|
774
|
+
* Collapsing several entries into one is only safe when no stored entry for
|
|
775
|
+
* the same event and primary key has an id between theirs. Otherwise that
|
|
776
|
+
* stored entry should have applied between the collapsed ones, and replicas
|
|
777
|
+
* that received the entries in separate batches end up different.
|
|
778
|
+
*
|
|
779
|
+
* @see {@link groupCompaction} for compaction grouped by primary key
|
|
780
|
+
*
|
|
781
|
+
* @stability unstable
|
|
782
|
+
* @category compaction
|
|
783
|
+
* @since 4.0.0
|
|
784
|
+
*/
|
|
785
|
+
export const groupBatchCompaction = <Events extends Event.Any, R>(
|
|
786
|
+
group: EventGroup.EventGroup<Events>,
|
|
787
|
+
effect: (options: {
|
|
788
|
+
readonly entries: ReadonlyArray<{
|
|
789
|
+
readonly entry: Entry
|
|
790
|
+
readonly event: Event.TaggedPayload<Events> | undefined
|
|
791
|
+
}>
|
|
792
|
+
readonly write: <Tag extends Event.Tag<Events>>(
|
|
793
|
+
tag: Tag,
|
|
794
|
+
payload: Event.PayloadWithTag<Events, Tag>
|
|
795
|
+
) => Effect.Effect<void, never, Event.PayloadSchemaWithTag<Events, Tag>["EncodingServices"]>
|
|
796
|
+
readonly forward: (entry: Entry) => Effect.Effect<void>
|
|
797
|
+
}) => Effect.Effect<void, never, R>
|
|
798
|
+
): Layer.Layer<never, never, R | Event.PayloadSchema<Events>["DecodingServices"] | Registry> =>
|
|
799
|
+
registerBatchCompaction(group, ({ entries, writeFrom, forward }) =>
|
|
800
|
+
effect({
|
|
801
|
+
entries,
|
|
802
|
+
write: (tag, payload) => writeFrom(entries[0].entry, tag, payload),
|
|
803
|
+
forward
|
|
804
|
+
}))
|
|
805
|
+
|
|
806
|
+
/**
|
|
807
|
+
* Registers a compaction handler for an event group.
|
|
808
|
+
*
|
|
809
|
+
* **Details**
|
|
810
|
+
*
|
|
811
|
+
* During remote replay, decoded entries are grouped by primary key and passed to
|
|
812
|
+
* the compaction effect, which outputs the entries to keep:
|
|
813
|
+
*
|
|
814
|
+
* - `forward(entry)` keeps an input entry unchanged, with the same id, payload,
|
|
815
|
+
* and primary key.
|
|
816
|
+
* - `write(tag, payload)` encodes a replacement entry anchored to the first
|
|
817
|
+
* decoded entry for the primary key, with a fresh id in that entry's
|
|
818
|
+
* millisecond.
|
|
819
|
+
*
|
|
820
|
+
* Entries that are neither forwarded nor replaced are dropped. Entries that
|
|
821
|
+
* cannot be decoded are not passed to the effect and are kept unchanged.
|
|
822
|
+
* During remote replay, kept entries are replayed in the id order of their
|
|
823
|
+
* anchors, then in write order, and a replacement's conflicts are the stored
|
|
824
|
+
* entries newer than its anchor.
|
|
825
|
+
*
|
|
826
|
+
* **Gotchas**
|
|
827
|
+
*
|
|
828
|
+
* Compaction runs before conflicts are read, so it never sees stored entries.
|
|
829
|
+
* Collapsing several entries into one is only safe when no stored entry for
|
|
830
|
+
* the same event and primary key has an id between theirs. Otherwise that
|
|
831
|
+
* stored entry should have applied between the collapsed ones, and replicas
|
|
832
|
+
* that received the entries in separate batches end up different.
|
|
833
|
+
*
|
|
834
|
+
* @see {@link groupBatchCompaction} for compaction across primary keys
|
|
835
|
+
*
|
|
836
|
+
* @stability unstable
|
|
837
|
+
* @category compaction
|
|
838
|
+
* @since 4.0.0
|
|
839
|
+
*/
|
|
840
|
+
export const groupCompaction = <Events extends Event.Any, R>(
|
|
841
|
+
group: EventGroup.EventGroup<Events>,
|
|
842
|
+
effect: (options: {
|
|
843
|
+
readonly primaryKey: string
|
|
844
|
+
readonly entries: ReadonlyArray<Entry>
|
|
845
|
+
readonly events: ReadonlyArray<Event.TaggedPayload<Events>>
|
|
846
|
+
readonly write: <Tag extends Event.Tag<Events>>(
|
|
847
|
+
tag: Tag,
|
|
848
|
+
payload: Event.PayloadWithTag<Events, Tag>
|
|
849
|
+
) => Effect.Effect<void, never, Event.PayloadSchemaWithTag<Events, Tag>["EncodingServices"]>
|
|
850
|
+
readonly forward: (entry: Entry) => Effect.Effect<void>
|
|
851
|
+
}) => Effect.Effect<void, never, R>
|
|
852
|
+
): Layer.Layer<never, never, R | Event.PayloadSchema<Events>["DecodingServices"] | Registry> =>
|
|
853
|
+
registerBatchCompaction(
|
|
854
|
+
group,
|
|
855
|
+
Effect.fnUntraced(function*({ entries, writeFrom, forward }) {
|
|
856
|
+
const byPrimaryKey = new Map<
|
|
857
|
+
string,
|
|
858
|
+
{
|
|
859
|
+
readonly entries: Array<Entry>
|
|
860
|
+
readonly events: Array<Event.TaggedPayload<Events>>
|
|
861
|
+
}
|
|
862
|
+
>()
|
|
863
|
+
for (const { entry, event } of entries) {
|
|
864
|
+
if (event === undefined) {
|
|
865
|
+
yield* forward(entry)
|
|
866
|
+
continue
|
|
867
|
+
}
|
|
868
|
+
const record = byPrimaryKey.get(entry.primaryKey)
|
|
869
|
+
if (record) {
|
|
870
|
+
record.entries.push(entry)
|
|
871
|
+
record.events.push(event)
|
|
872
|
+
} else {
|
|
873
|
+
byPrimaryKey.set(entry.primaryKey, { entries: [entry], events: [event] })
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
for (const [primaryKey, { entries, events }] of byPrimaryKey) {
|
|
878
|
+
yield* effect({
|
|
879
|
+
primaryKey,
|
|
880
|
+
entries,
|
|
881
|
+
events,
|
|
882
|
+
write: (tag, payload) => writeFrom(entries[0], tag, payload),
|
|
883
|
+
forward
|
|
884
|
+
})
|
|
885
|
+
}
|
|
886
|
+
})
|
|
887
|
+
)
|
|
888
|
+
|
|
889
|
+
type ReactivityKeyName = [keyof ReactivityLayer.Keys] extends [never] ? string : keyof ReactivityLayer.Keys
|
|
890
|
+
|
|
683
891
|
/**
|
|
684
892
|
* Registers reactivity keys to invalidate when events from a group are written or
|
|
685
893
|
* replayed.
|
|
@@ -695,8 +903,8 @@ export const groupCompaction = <Events extends Event.Any, R>(
|
|
|
695
903
|
export const groupReactivity = <Events extends Event.Any>(
|
|
696
904
|
group: EventGroup.EventGroup<Events>,
|
|
697
905
|
keys:
|
|
698
|
-
| { readonly [Tag in Event.Tag<Events>]?: ReadonlyArray<
|
|
699
|
-
| ReadonlyArray<
|
|
906
|
+
| { readonly [Tag in Event.Tag<Events>]?: ReadonlyArray<ReactivityKeyName> }
|
|
907
|
+
| ReadonlyArray<ReactivityKeyName>
|
|
700
908
|
): Layer.Layer<never, never, Registry> =>
|
|
701
909
|
Effect.gen(function*() {
|
|
702
910
|
const registry = yield* Registry
|
|
@@ -719,8 +927,10 @@ export const groupReactivity = <Events extends Event.Any>(
|
|
|
719
927
|
* **Details**
|
|
720
928
|
*
|
|
721
929
|
* The returned handler decodes the entry and conflicts with the registered event
|
|
722
|
-
* schema, runs the matching handler with the supplied identity and store id,
|
|
723
|
-
*
|
|
930
|
+
* schema, runs the matching handler with the supplied identity and store id, and
|
|
931
|
+
* invalidates configured reactivity keys. Decode and handler failures are logged
|
|
932
|
+
* and fail the effect. Invalidations are deferred until the end of an enclosing
|
|
933
|
+
* `Reactivity.withBatch`.
|
|
724
934
|
*
|
|
725
935
|
* @stability unstable
|
|
726
936
|
* @category handlers
|
|
@@ -736,60 +946,128 @@ export const makeReplayFromRemote = (options: {
|
|
|
736
946
|
readonly service: string
|
|
737
947
|
readonly effect: string
|
|
738
948
|
}
|
|
739
|
-
}) =>
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
949
|
+
}) => {
|
|
950
|
+
const replayBatch = makeReplayBatchFromRemote(options)
|
|
951
|
+
return (input: ReplayInput) => replayBatch([input])
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
type ReplayInput = {
|
|
955
|
+
readonly entry: Entry
|
|
956
|
+
readonly conflicts: ReadonlyArray<Entry>
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
type DecodedConflict = { entry: Entry; payload: unknown }
|
|
960
|
+
|
|
961
|
+
type ReplayBatch = {
|
|
962
|
+
readonly context: Context.Context<never>
|
|
963
|
+
readonly handlerContexts: Map<Handlers.Item<any>, Context.Context<any>>
|
|
964
|
+
readonly decodedConflicts: Map<Entry, DecodedConflict>
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
/**
|
|
968
|
+
* Replays a batch, merging each handler's context with the batch context once
|
|
969
|
+
* and decoding each conflict entry shared by several entries once. The batch
|
|
970
|
+
* state is created per execution, so transaction retries start fresh.
|
|
971
|
+
*/
|
|
972
|
+
const makeReplayBatchFromRemote = (options: Parameters<typeof makeReplayFromRemote>[0]) => {
|
|
973
|
+
const replayEntry = makeReplayEntryFromRemote(options)
|
|
974
|
+
return (batch: ReadonlyArray<ReplayInput>) =>
|
|
975
|
+
Effect.contextWith((context: Context.Context<never>) => {
|
|
976
|
+
const state: ReplayBatch = { context, handlerContexts: new Map(), decodedConflicts: new Map() }
|
|
977
|
+
return Effect.forEach(batch, (input) => replayEntry(input, state), { discard: true })
|
|
978
|
+
})
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
// An entry's context is the batch context plus its log annotations, so only
|
|
982
|
+
// the annotations need to be copied into the merged handler context.
|
|
983
|
+
const withEntryAnnotations = (context: Context.Context<any>, entryContext: Context.Context<any>) =>
|
|
984
|
+
Context.add(context, CurrentLogAnnotations, Context.get(entryContext, CurrentLogAnnotations))
|
|
985
|
+
|
|
986
|
+
const makeReplayEntryFromRemote = (options: Parameters<typeof makeReplayFromRemote>[0]) => {
|
|
987
|
+
// Decoders depend only on the event schema, so they are shared across batches.
|
|
988
|
+
const decoders = new WeakMap<
|
|
989
|
+
Handlers.Item<any>,
|
|
990
|
+
(input: unknown) => Effect.Effect<unknown, Schema.SchemaError, unknown>
|
|
991
|
+
>()
|
|
992
|
+
const decoderFor = (handler: Handlers.Item<any>) => {
|
|
993
|
+
let decoder = decoders.get(handler)
|
|
994
|
+
if (decoder === undefined) {
|
|
995
|
+
decoder = Schema.decodeUnknownEffect(handler.event.payloadSchemaBinary)
|
|
996
|
+
decoders.set(handler, decoder)
|
|
997
|
+
}
|
|
998
|
+
return decoder
|
|
999
|
+
}
|
|
1000
|
+
const contextFor = (batch: ReplayBatch, handler: Handlers.Item<any>) => {
|
|
1001
|
+
let context = batch.handlerContexts.get(handler)
|
|
1002
|
+
if (context === undefined) {
|
|
1003
|
+
context = Context.merge(handler.context, batch.context)
|
|
1004
|
+
batch.handlerContexts.set(handler, context)
|
|
1005
|
+
}
|
|
1006
|
+
return context
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
return Effect.fnUntraced(
|
|
1010
|
+
function*(
|
|
1011
|
+
{ conflicts, entry }: ReplayInput,
|
|
1012
|
+
batch: ReplayBatch
|
|
1013
|
+
): Effect.fn.Return<void, unknown> {
|
|
745
1014
|
const handler = options.handlers.get(entry.event) as Handlers.Item<any> | undefined
|
|
746
1015
|
if (!handler) {
|
|
747
1016
|
return yield* Effect.logDebug(`Event handler not found for: "${entry.event}"`)
|
|
748
1017
|
}
|
|
749
1018
|
|
|
750
|
-
const decodePayload =
|
|
751
|
-
const
|
|
1019
|
+
const decodePayload = decoderFor(handler)
|
|
1020
|
+
const context = contextFor(batch, handler)
|
|
1021
|
+
const conflictPayloads: Array<DecodedConflict> = new Array(conflicts.length)
|
|
752
1022
|
for (let i = 0; i < conflicts.length; i++) {
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
1023
|
+
const conflict = conflicts[i]
|
|
1024
|
+
let decoded = batch.decodedConflicts.get(conflict)
|
|
1025
|
+
if (!decoded) {
|
|
1026
|
+
decoded = {
|
|
1027
|
+
entry: conflict,
|
|
1028
|
+
payload: yield* decodePayload(conflict.payload).pipe(
|
|
1029
|
+
Effect.updateContext((input) => withEntryAnnotations(context, input))
|
|
1030
|
+
) as any
|
|
1031
|
+
}
|
|
1032
|
+
batch.decodedConflicts.set(conflict, decoded)
|
|
758
1033
|
}
|
|
1034
|
+
conflictPayloads[i] = decoded
|
|
759
1035
|
}
|
|
760
1036
|
|
|
1037
|
+
// Conflicts decode with the caller's Identity; the payload and handler use the log's.
|
|
761
1038
|
yield* decodePayload(entry.payload).pipe(
|
|
762
1039
|
Effect.flatMap((payload) =>
|
|
763
1040
|
handler.handler({
|
|
764
1041
|
storeId: options.storeId,
|
|
765
1042
|
payload,
|
|
766
1043
|
entry,
|
|
767
|
-
conflicts:
|
|
1044
|
+
conflicts: conflictPayloads
|
|
768
1045
|
})
|
|
769
1046
|
),
|
|
770
|
-
Effect.
|
|
771
|
-
Effect.updateContext((input) => Context.merge(handler.context, input)),
|
|
1047
|
+
Effect.updateContext((input) => Context.add(withEntryAnnotations(context, input), Identity, options.identity)),
|
|
772
1048
|
Effect.asVoid
|
|
773
1049
|
) as any
|
|
774
1050
|
|
|
775
|
-
|
|
776
|
-
? options.reactivityKeys[entry.event]
|
|
777
|
-
: undefined
|
|
778
|
-
if (keys) {
|
|
779
|
-
for (const key of keys) {
|
|
780
|
-
options.reactivity.invalidateUnsafe({
|
|
781
|
-
[key]: [entry.primaryKey]
|
|
782
|
-
})
|
|
783
|
-
}
|
|
784
|
-
}
|
|
1051
|
+
yield* invalidateEntry(options.reactivity, options.reactivityKeys, entry)
|
|
785
1052
|
},
|
|
786
|
-
Effect.
|
|
1053
|
+
Effect.tapCauseIf((cause) => !Cause.hasInterruptsOnly(cause), Effect.logError),
|
|
787
1054
|
(effect, { entry }) =>
|
|
788
1055
|
Effect.annotateLogs(effect, {
|
|
789
1056
|
...options.logAnnotations,
|
|
790
1057
|
entryId: entry.idString
|
|
791
1058
|
})
|
|
792
1059
|
)
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
const invalidateEntry = (
|
|
1063
|
+
reactivity: Reactivity,
|
|
1064
|
+
reactivityKeys: Record<string, ReadonlyArray<string>>,
|
|
1065
|
+
entry: Entry
|
|
1066
|
+
): Effect.Effect<void> => {
|
|
1067
|
+
const keys = Object.hasOwn(reactivityKeys, entry.event) ? reactivityKeys[entry.event] : undefined
|
|
1068
|
+
if (!keys) return Effect.void
|
|
1069
|
+
return Effect.forEach(keys, (key) => reactivity.invalidate({ [key]: [entry.primaryKey] }), { discard: true })
|
|
1070
|
+
}
|
|
793
1071
|
|
|
794
1072
|
const remoteRetrySchedule = Schedule.min([
|
|
795
1073
|
Schedule.exponential(200, 1.5),
|
|
@@ -803,7 +1081,8 @@ const make = Effect.gen(function*() {
|
|
|
803
1081
|
const registry = yield* Registry
|
|
804
1082
|
|
|
805
1083
|
const reactivity = yield* Reactivity
|
|
806
|
-
const
|
|
1084
|
+
const handlerTransaction = yield* HandlerTransaction
|
|
1085
|
+
const replayFromRemote = makeReplayBatchFromRemote({
|
|
807
1086
|
handlers: registry.handlers,
|
|
808
1087
|
storeId,
|
|
809
1088
|
identity,
|
|
@@ -816,78 +1095,80 @@ const make = Effect.gen(function*() {
|
|
|
816
1095
|
})
|
|
817
1096
|
|
|
818
1097
|
const invalidateReactivityEntries = (entries: ReadonlyArray<Entry>) =>
|
|
819
|
-
Effect.
|
|
820
|
-
for (const entry of entries) {
|
|
821
|
-
const keys = Object.hasOwn(registry.reactivityKeys, entry.event)
|
|
822
|
-
? registry.reactivityKeys[entry.event]
|
|
823
|
-
: undefined
|
|
824
|
-
if (!keys) {
|
|
825
|
-
continue
|
|
826
|
-
}
|
|
827
|
-
for (const key of keys) {
|
|
828
|
-
reactivity.invalidateUnsafe({
|
|
829
|
-
[key]: [entry.primaryKey]
|
|
830
|
-
})
|
|
831
|
-
}
|
|
832
|
-
}
|
|
833
|
-
})
|
|
1098
|
+
Effect.forEach(entries, (entry) => invalidateEntry(reactivity, registry.reactivityKeys, entry), { discard: true })
|
|
834
1099
|
|
|
835
1100
|
const runRemote = Effect.fnUntraced(
|
|
836
1101
|
function*(remote: EventLogRemote["Service"]) {
|
|
837
|
-
const startSequence = yield* journal.nextRemoteSequence(remote.id)
|
|
838
|
-
|
|
839
1102
|
yield* Effect.gen(function*() {
|
|
840
|
-
const
|
|
1103
|
+
const startSequence = yield* journal.nextRemoteSequence(remote.id)
|
|
1104
|
+
const changes = yield* remote.changes({
|
|
1105
|
+
identity,
|
|
1106
|
+
startSequence,
|
|
1107
|
+
storeId,
|
|
1108
|
+
knownEntries: journal.entriesById
|
|
1109
|
+
})
|
|
841
1110
|
while (true) {
|
|
842
1111
|
const entries = yield* Queue.takeAll(changes)
|
|
843
1112
|
yield* journal.writeFromRemote({
|
|
844
1113
|
remoteId: remote.id,
|
|
845
|
-
entries
|
|
1114
|
+
entries,
|
|
846
1115
|
compact: registry.compactors.size > 0
|
|
847
1116
|
? Effect.fnUntraced(function*(remoteEntries) {
|
|
848
|
-
|
|
1117
|
+
// The journal sorts the batch by anchor, so output order is irrelevant.
|
|
1118
|
+
const output: Array<Entry> = []
|
|
1119
|
+
const inputs = new Map<string, Entry>()
|
|
1120
|
+
const outputCounts = new Map<Entry, number>()
|
|
849
1121
|
const compactable = new Map<
|
|
850
1122
|
(options: {
|
|
851
1123
|
readonly entries: ReadonlyArray<Entry>
|
|
852
|
-
readonly write: (entry: Entry) => Effect.Effect<void>
|
|
1124
|
+
readonly write: (entry: Entry, source?: Entry) => Effect.Effect<void>
|
|
853
1125
|
}) => Effect.Effect<void>,
|
|
854
1126
|
Array<Entry>
|
|
855
1127
|
>()
|
|
856
1128
|
|
|
857
|
-
for (
|
|
858
|
-
|
|
859
|
-
const entry = remoteEntry.entry
|
|
1129
|
+
for (const { entry } of remoteEntries) {
|
|
1130
|
+
inputs.set(entry.idString, entry)
|
|
860
1131
|
const compactor = registry.compactors.get(entry.event)
|
|
861
1132
|
if (!compactor) {
|
|
862
|
-
|
|
1133
|
+
output.push(entry)
|
|
863
1134
|
continue
|
|
864
1135
|
}
|
|
865
|
-
let
|
|
866
|
-
if (!
|
|
867
|
-
|
|
868
|
-
compactable.set(compactor.effect,
|
|
1136
|
+
let group = compactable.get(compactor.effect)
|
|
1137
|
+
if (!group) {
|
|
1138
|
+
group = []
|
|
1139
|
+
compactable.set(compactor.effect, group)
|
|
869
1140
|
}
|
|
870
|
-
|
|
1141
|
+
group.push(entry)
|
|
871
1142
|
}
|
|
872
1143
|
|
|
873
1144
|
for (const [compact, entries] of compactable) {
|
|
874
1145
|
yield* compact({
|
|
875
1146
|
entries,
|
|
876
|
-
write(entry) {
|
|
1147
|
+
write(entry, source) {
|
|
877
1148
|
return Effect.sync(() => {
|
|
878
|
-
|
|
1149
|
+
// Each output is ordered and conflict-checked by its source,
|
|
1150
|
+
// then by write order, not by its own fresh id. An output
|
|
1151
|
+
// without a known source stands for the group's first entry.
|
|
1152
|
+
const anchor = inputs.get((source ?? entry).idString) ?? entries[0]
|
|
1153
|
+
const index = outputCounts.get(anchor) ?? 0
|
|
1154
|
+
outputCounts.set(anchor, index + 1)
|
|
1155
|
+
setAnchor(entry, anchor, index)
|
|
1156
|
+
output.push(entry)
|
|
879
1157
|
})
|
|
880
1158
|
}
|
|
881
1159
|
})
|
|
882
1160
|
}
|
|
883
1161
|
|
|
884
|
-
return
|
|
1162
|
+
return output
|
|
885
1163
|
})
|
|
886
1164
|
: undefined,
|
|
887
|
-
|
|
1165
|
+
// A failed batch is not committed, so the remote redelivers it on retry.
|
|
1166
|
+
effect: (batch) => handlerTransaction(replayFromRemote(batch)).pipe(Effect.orDie)
|
|
888
1167
|
}).pipe(
|
|
889
1168
|
Effect.tap(({ duplicateEntries }) => invalidateReactivityEntries(duplicateEntries)),
|
|
890
|
-
journal.withLock(storeId)
|
|
1169
|
+
journal.withLock(storeId),
|
|
1170
|
+
// Outside the lock, so queries re-run after the journal transaction commits.
|
|
1171
|
+
reactivity.withBatch
|
|
891
1172
|
)
|
|
892
1173
|
}
|
|
893
1174
|
}).pipe(
|
|
@@ -901,7 +1182,19 @@ const make = Effect.gen(function*() {
|
|
|
901
1182
|
Effect.forkScoped
|
|
902
1183
|
)
|
|
903
1184
|
|
|
904
|
-
const write = journal.withRemoteUncommited(
|
|
1185
|
+
const write = journal.withRemoteUncommited(
|
|
1186
|
+
remote.id,
|
|
1187
|
+
(entries) =>
|
|
1188
|
+
remote.write({ identity, entries, storeId }).pipe(
|
|
1189
|
+
Effect.flatMap((acks) =>
|
|
1190
|
+
acks === undefined || acks.length === 0
|
|
1191
|
+
? Effect.void
|
|
1192
|
+
: journal.writeRemoteAcks({ remoteId: remote.id, acks, firstSequence: remote.firstSequence }).pipe(
|
|
1193
|
+
journal.withLock(storeId)
|
|
1194
|
+
)
|
|
1195
|
+
)
|
|
1196
|
+
)
|
|
1197
|
+
)
|
|
905
1198
|
const writeUntilSuccess = write.pipe(
|
|
906
1199
|
Effect.tapCause(Effect.logDebug),
|
|
907
1200
|
Effect.retry(remoteRetrySchedule)
|
|
@@ -926,60 +1219,49 @@ const make = Effect.gen(function*() {
|
|
|
926
1219
|
Effect.orDie
|
|
927
1220
|
)
|
|
928
1221
|
|
|
929
|
-
const
|
|
930
|
-
readonly
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
}))
|
|
965
|
-
})
|
|
966
|
-
|
|
967
|
-
const eventLogWrite = (options: {
|
|
968
|
-
readonly schema: EventLogSchema<any>
|
|
969
|
-
readonly event: string
|
|
970
|
-
readonly payload: unknown
|
|
971
|
-
}) => {
|
|
972
|
-
const handler = registry.handlers.get(options.event) as Handlers.Item<any> | undefined
|
|
973
|
-
if (handler === undefined) {
|
|
974
|
-
return Effect.die(`Event handler not found for: "${options.event}"`)
|
|
975
|
-
}
|
|
976
|
-
return writeHandler(handler, options)
|
|
977
|
-
}
|
|
1222
|
+
const writeEvents = (
|
|
1223
|
+
events: Arr.NonEmptyReadonlyArray<{ readonly event: string; readonly payload: unknown }>
|
|
1224
|
+
): Effect.Effect<Arr.NonEmptyArray<unknown>, unknown> =>
|
|
1225
|
+
Effect.forEach(events, ({ event, payload }) => {
|
|
1226
|
+
const handler = registry.handlers.get(event) as Handlers.Item<any> | undefined
|
|
1227
|
+
if (handler === undefined) {
|
|
1228
|
+
return Effect.die(`Event handler not found for: "${event}"`)
|
|
1229
|
+
}
|
|
1230
|
+
return Schema.encodeUnknownEffect(handler.event.payloadSchemaBinary)(payload).pipe(
|
|
1231
|
+
Effect.orDie,
|
|
1232
|
+
Effect.map((encoded) => ({
|
|
1233
|
+
handler,
|
|
1234
|
+
payload,
|
|
1235
|
+
entry: { event, primaryKey: handler.event.primaryKey(payload as never), payload: encoded as Uint8Array }
|
|
1236
|
+
}))
|
|
1237
|
+
)
|
|
1238
|
+
}).pipe(
|
|
1239
|
+
Effect.flatMap((writes) =>
|
|
1240
|
+
journal.withLock(storeId)(journal.writeMany({
|
|
1241
|
+
entries: Arr.map(writes, (write) => write.entry),
|
|
1242
|
+
effect: (written) =>
|
|
1243
|
+
handlerTransaction(Effect.forEach(written, (entry, i) => {
|
|
1244
|
+
const { handler, payload } = writes[i]
|
|
1245
|
+
return handler.handler({ storeId, payload, entry, conflicts: [] }).pipe(
|
|
1246
|
+
Effect.updateContext((input) => Context.merge(handler.context, input)),
|
|
1247
|
+
Effect.provideService(Identity, identity),
|
|
1248
|
+
Effect.tap(() => invalidateEntry(reactivity, registry.reactivityKeys, entry))
|
|
1249
|
+
)
|
|
1250
|
+
}))
|
|
1251
|
+
}))
|
|
1252
|
+
),
|
|
1253
|
+
// Outside the lock, so queries re-run after the handler transaction and
|
|
1254
|
+
// the journal commit.
|
|
1255
|
+
reactivity.withBatch
|
|
1256
|
+
) as Effect.Effect<Arr.NonEmptyArray<unknown>, unknown>
|
|
978
1257
|
|
|
979
1258
|
yield* registry.handleRemote(runRemote)
|
|
980
1259
|
|
|
981
1260
|
return EventLog.of({
|
|
982
|
-
write:
|
|
1261
|
+
write: ((options: { readonly event: string; readonly payload: unknown }) =>
|
|
1262
|
+
Effect.map(writeEvents([options]), Arr.headNonEmpty)) as EventLog["Service"]["write"],
|
|
1263
|
+
writeMany: ((options: { readonly events: Arr.NonEmptyReadonlyArray<any> }) =>
|
|
1264
|
+
writeEvents(options.events)) as EventLog["Service"]["writeMany"],
|
|
983
1265
|
entries: journal.entries,
|
|
984
1266
|
destroy: journal.destroy
|
|
985
1267
|
})
|
|
@@ -1049,8 +1331,27 @@ export const layer = <Groups extends EventGroup.Any, E, R>(
|
|
|
1049
1331
|
*
|
|
1050
1332
|
* **Details**
|
|
1051
1333
|
*
|
|
1052
|
-
* The returned function
|
|
1053
|
-
* event
|
|
1334
|
+
* The returned function takes one `{ event, payload }` object, typed so the
|
|
1335
|
+
* payload matches the event, as `writeMany` items are. It delegates to the
|
|
1336
|
+
* `EventLog` service and preserves each event's success and error types.
|
|
1337
|
+
*
|
|
1338
|
+
* **Example** (Writing events with a client)
|
|
1339
|
+
*
|
|
1340
|
+
* ```ts
|
|
1341
|
+
* import { Effect, Schema } from "effect"
|
|
1342
|
+
* import { EventGroup, EventLog } from "effect/eventlog"
|
|
1343
|
+
*
|
|
1344
|
+
* const Users = EventGroup.empty.add({
|
|
1345
|
+
* tag: "UserCreated",
|
|
1346
|
+
* primaryKey: (payload) => payload.id,
|
|
1347
|
+
* payload: Schema.Struct({ id: Schema.String })
|
|
1348
|
+
* })
|
|
1349
|
+
*
|
|
1350
|
+
* export const createUser = Effect.gen(function*() {
|
|
1351
|
+
* const client = yield* EventLog.makeClient(EventLog.schema(Users))
|
|
1352
|
+
* yield* client({ event: "UserCreated", payload: { id: "user-1" } })
|
|
1353
|
+
* })
|
|
1354
|
+
* ```
|
|
1054
1355
|
*
|
|
1055
1356
|
* @stability unstable
|
|
1056
1357
|
* @category constructors
|
|
@@ -1059,24 +1360,23 @@ export const layer = <Groups extends EventGroup.Any, E, R>(
|
|
|
1059
1360
|
export const makeClient = <Groups extends EventGroup.Any>(
|
|
1060
1361
|
schema: EventLogSchema<Groups>
|
|
1061
1362
|
): Effect.Effect<
|
|
1062
|
-
|
|
1063
|
-
event
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1363
|
+
<
|
|
1364
|
+
// Pairs each event tag with its own payload.
|
|
1365
|
+
Item extends {
|
|
1366
|
+
readonly [Tag in Event.Tag<EventGroup.Events<Groups>>]: {
|
|
1367
|
+
readonly event: Tag
|
|
1368
|
+
readonly payload: Event.PayloadWithTag<EventGroup.Events<Groups>, Tag>
|
|
1369
|
+
}
|
|
1370
|
+
}[Event.Tag<EventGroup.Events<Groups>>]
|
|
1371
|
+
>(item: Item) => Effect.Effect<
|
|
1372
|
+
Event.SuccessWithTag<EventGroup.Events<Groups>, Item["event"]>,
|
|
1373
|
+
Event.ErrorWithTag<EventGroup.Events<Groups>, Item["event"]> | EventJournalError
|
|
1374
|
+
>,
|
|
1069
1375
|
never,
|
|
1070
1376
|
EventLog
|
|
1071
1377
|
> =>
|
|
1072
1378
|
Effect.gen(function*() {
|
|
1073
1379
|
const log = yield* EventLog
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
payload: Event.PayloadWithTag<EventGroup.Events<Groups>, Tag>
|
|
1078
|
-
): Effect.Effect<
|
|
1079
|
-
Event.SuccessWithTag<EventGroup.Events<Groups>, Tag>,
|
|
1080
|
-
Event.ErrorWithTag<EventGroup.Events<Groups>, Tag> | EventJournalError
|
|
1081
|
-
> => log.write({ schema, event, payload })
|
|
1082
|
-
})
|
|
1380
|
+
return (item: { readonly event: string; readonly payload: unknown }) =>
|
|
1381
|
+
log.write({ schema, event: item.event, payload: item.payload } as any)
|
|
1382
|
+
}) as any
|