effect 4.0.5 → 4.0.7
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/tsconfig.json +3 -1
- package/dist/Arbitrary.d.ts +10 -2
- package/dist/Arbitrary.d.ts.map +1 -1
- package/dist/Arbitrary.js +2 -1
- package/dist/Arbitrary.js.map +1 -1
- package/dist/Array.d.ts +117 -52
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +41 -20
- 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 +181 -13
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +144 -34
- 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 +2 -1
- 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/Data.d.ts +54 -235
- package/dist/Data.d.ts.map +1 -1
- package/dist/Data.js.map +1 -1
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +56 -16
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +488 -164
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +204 -38
- package/dist/Effect.js.map +1 -1
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +8 -1
- package/dist/Equal.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 +27 -12
- 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 +5 -0
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +3 -0
- package/dist/FileSystem.js.map +1 -1
- package/dist/Formatter.d.ts.map +1 -1
- package/dist/Formatter.js +27 -13
- package/dist/Formatter.js.map +1 -1
- package/dist/Graph.d.ts.map +1 -1
- package/dist/Graph.js.map +1 -1
- package/dist/Hash.d.ts.map +1 -1
- package/dist/Hash.js +4 -1
- package/dist/Hash.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/JsonPatch.js +4 -0
- package/dist/JsonPatch.js.map +1 -1
- package/dist/JsonSchema.d.ts +9 -3
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +32 -43
- 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/Metric.d.ts +135 -3
- 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/MutableList.d.ts +5 -2
- package/dist/MutableList.d.ts.map +1 -1
- package/dist/MutableList.js +7 -5
- package/dist/MutableList.js.map +1 -1
- package/dist/MutableRef.d.ts.map +1 -1
- package/dist/MutableRef.js +7 -0
- package/dist/MutableRef.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/PartitionedSemaphore.d.ts +2 -1
- package/dist/PartitionedSemaphore.d.ts.map +1 -1
- package/dist/PartitionedSemaphore.js +22 -12
- package/dist/PartitionedSemaphore.js.map +1 -1
- package/dist/Path.d.ts.map +1 -1
- package/dist/Path.js +8 -1
- package/dist/Path.js.map +1 -1
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +77 -27
- package/dist/Pool.js.map +1 -1
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +17 -13
- 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 +8 -0
- 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 +1 -1
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +408 -340
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +370 -47
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +9 -7
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +38 -25
- 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/SchemaParser.d.ts.map +1 -1
- package/dist/SchemaParser.js +48 -22
- package/dist/SchemaParser.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +75 -11
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +41 -13
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +5 -2
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +10 -3
- package/dist/SchemaTransformation.js.map +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/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +54 -35
- package/dist/Semaphore.js.map +1 -1
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +13 -4
- 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 +167 -70
- package/dist/Stream.js.map +1 -1
- package/dist/String.d.ts +7 -2
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +11 -6
- 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/Tracer.d.ts +11 -1
- package/dist/Tracer.d.ts.map +1 -1
- package/dist/Tracer.js +6 -1
- package/dist/Tracer.js.map +1 -1
- 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/ai/AiError.d.ts +68 -4
- package/dist/ai/AiError.d.ts.map +1 -1
- package/dist/ai/AiError.js +50 -2
- 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 +46 -1
- package/dist/ai/Decision.d.ts.map +1 -1
- 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 +182 -94
- 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 +9 -0
- 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 +258 -125
- 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.map +1 -1
- package/dist/ai/McpServer.js +46 -37
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/Prompt.d.ts +74 -20
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +61 -1
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Response.d.ts +160 -3
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +39 -37
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +36 -4
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js +5 -2
- 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 +73 -13
- 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/Argument.d.ts +15 -0
- package/dist/cli/Argument.d.ts.map +1 -1
- package/dist/cli/Argument.js +5 -0
- package/dist/cli/Argument.js.map +1 -1
- package/dist/cli/CliError.d.ts +120 -2
- package/dist/cli/CliError.d.ts.map +1 -1
- package/dist/cli/CliError.js +106 -5
- package/dist/cli/CliError.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +155 -6
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +62 -6
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts +310 -18
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +164 -33
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Completions.d.ts +63 -0
- package/dist/cli/Completions.d.ts.map +1 -1
- package/dist/cli/Completions.js +49 -9
- package/dist/cli/Completions.js.map +1 -1
- package/dist/cli/Flag.d.ts +130 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +61 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/cli/GlobalFlag.js +14 -6
- package/dist/cli/GlobalFlag.js.map +1 -1
- package/dist/cli/Param.d.ts +116 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +77 -2
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/TerminalCapabilities.d.ts +85 -0
- package/dist/cli/TerminalCapabilities.d.ts.map +1 -0
- package/dist/cli/TerminalCapabilities.js +124 -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 +5 -2
- package/dist/cli/internal/command.js.map +1 -1
- package/dist/cli/internal/completions/bash.js +77 -30
- package/dist/cli/internal/completions/bash.js.map +1 -1
- package/dist/cli/internal/completions/descriptor.js +9 -1
- package/dist/cli/internal/completions/descriptor.js.map +1 -1
- package/dist/cli/internal/completions/fish.js +10 -8
- package/dist/cli/internal/completions/fish.js.map +1 -1
- package/dist/cli/internal/completions/powershell.js +18 -9
- package/dist/cli/internal/completions/powershell.js.map +1 -1
- package/dist/cli/internal/completions/zsh.js +8 -5
- 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 +24 -12
- package/dist/cli/internal/parser.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 +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +82 -21
- 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 +44 -45
- package/dist/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/cluster/MessageStorage.js +6 -7
- package/dist/cluster/MessageStorage.js.map +1 -1
- package/dist/cluster/Runners.d.ts.map +1 -1
- package/dist/cluster/Runners.js +54 -15
- 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 +155 -52
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +30 -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/Snowflake.d.ts.map +1 -1
- package/dist/cluster/Snowflake.js +3 -7
- package/dist/cluster/Snowflake.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 +97 -43
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +119 -28
- 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 +33 -4
- package/dist/devtools/DevToolsClient.js.map +1 -1
- package/dist/encoding/Base64.js +36 -0
- package/dist/encoding/Base64.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.d.ts.map +1 -1
- package/dist/encoding/Sse.js +3 -3
- 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.d.ts.map +1 -1
- package/dist/encoding/Toml.js +24 -19
- 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 +417 -169
- 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 +46 -0
- package/dist/eventlog/internal/conflicts.d.ts.map +1 -0
- package/dist/eventlog/internal/conflicts.js +89 -0
- package/dist/eventlog/internal/conflicts.js.map +1 -0
- 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 +12 -9
- package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
- package/dist/graphql/GraphQLProtocol.js +4 -3
- package/dist/graphql/GraphQLProtocol.js.map +1 -1
- package/dist/graphql/GraphQLResolver.d.ts +2 -0
- package/dist/graphql/GraphQLResolver.d.ts.map +1 -1
- package/dist/graphql/GraphQLResolver.js +74 -32
- package/dist/graphql/GraphQLResolver.js.map +1 -1
- package/dist/http/Cookies.d.ts.map +1 -1
- package/dist/http/Cookies.js +10 -9
- package/dist/http/Cookies.js.map +1 -1
- package/dist/http/FetchHttpClient.d.ts +8 -1
- package/dist/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/http/FetchHttpClient.js +51 -4
- package/dist/http/FetchHttpClient.js.map +1 -1
- package/dist/http/FindMyWay/internal/router.js +10 -0
- package/dist/http/FindMyWay/internal/router.js.map +1 -1
- package/dist/http/Headers.d.ts +227 -0
- package/dist/http/Headers.d.ts.map +1 -1
- package/dist/http/Headers.js +261 -0
- package/dist/http/Headers.js.map +1 -1
- package/dist/http/HttpClient.d.ts +516 -0
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +286 -23
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientError.d.ts +8 -1
- package/dist/http/HttpClientError.d.ts.map +1 -1
- package/dist/http/HttpClientError.js +37 -1
- package/dist/http/HttpClientError.js.map +1 -1
- package/dist/http/HttpClientRequest.d.ts +127 -3
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +45 -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 +119 -2
- package/dist/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/http/HttpMiddleware.js +173 -29
- package/dist/http/HttpMiddleware.js.map +1 -1
- package/dist/http/HttpRouter.d.ts.map +1 -1
- package/dist/http/HttpRouter.js +9 -3
- 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 +7 -5
- package/dist/http/HttpServerError.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +30 -5
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +109 -20
- 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 +65 -24
- package/dist/http/HttpStaticServer.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 +89 -7
- 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 +6 -1
- package/dist/http/Url.js.map +1 -1
- package/dist/http/UrlParams.d.ts +3 -1
- package/dist/http/UrlParams.d.ts.map +1 -1
- package/dist/http/UrlParams.js +4 -2
- package/dist/http/UrlParams.js.map +1 -1
- package/dist/http/internal/compression.js +4 -5
- package/dist/http/internal/compression.js.map +1 -1
- package/dist/http/internal/decompression.js +20 -11
- package/dist/http/internal/decompression.js.map +1 -1
- package/dist/http/internal/httpBody.js +8 -1
- package/dist/http/internal/httpBody.js.map +1 -1
- 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/urlParams.js +25 -0
- package/dist/http/internal/urlParams.js.map +1 -1
- 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.d.ts +3 -6
- package/dist/http-api/HttpApi.d.ts.map +1 -1
- package/dist/http-api/HttpApi.js +4 -7
- 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 +142 -23
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +99 -4
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +218 -60
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts +72 -29
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +140 -14
- 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 +242 -13
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +149 -5
- 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 +33 -11
- 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 +81 -47
- 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/http-api/internal/toCodecHttpProperties.d.ts +2 -0
- package/dist/http-api/internal/toCodecHttpProperties.d.ts.map +1 -0
- package/dist/http-api/internal/toCodecHttpProperties.js +38 -0
- package/dist/http-api/internal/toCodecHttpProperties.js.map +1 -0
- 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/arbitrary/runner.d.ts.map +1 -1
- package/dist/internal/arbitrary/runner.js +120 -44
- package/dist/internal/arbitrary/runner.js.map +1 -1
- package/dist/internal/core.js +3 -1
- 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 +106 -87
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/equal.js +14 -0
- package/dist/internal/equal.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/jsonSchema.d.ts +2 -0
- package/dist/internal/jsonSchema.d.ts.map +1 -0
- package/dist/internal/jsonSchema.js +28 -0
- package/dist/internal/jsonSchema.js.map +1 -0
- package/dist/internal/matcher.js +1 -1
- package/dist/internal/matcher.js.map +1 -1
- 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/compilerRegistry.js +4 -1
- package/dist/internal/schema/compilerRegistry.js.map +1 -1
- package/dist/internal/schema/content.d.ts +2 -0
- package/dist/internal/schema/content.d.ts.map +1 -0
- package/dist/internal/schema/content.js +13 -0
- package/dist/internal/schema/content.js.map +1 -0
- package/dist/internal/schema/fromJsonSchemaDocument.js +253 -255
- package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/fromRepresentation.js +2 -1
- package/dist/internal/schema/fromRepresentation.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 +42 -35
- package/dist/internal/schema/standardSchema.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +10 -5
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/schema/toCodec.js +99 -17
- 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 +257 -170
- package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/toRepresentation.js +107 -129
- package/dist/internal/schema/toRepresentation.js.map +1 -1
- package/dist/internal/sql.d.ts +2 -0
- package/dist/internal/sql.d.ts.map +1 -0
- package/dist/internal/sql.js +13 -0
- package/dist/internal/sql.js.map +1 -0
- 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/OtlpExporter.d.ts.map +1 -1
- package/dist/observability/OtlpExporter.js +5 -12
- package/dist/observability/OtlpExporter.js.map +1 -1
- package/dist/observability/OtlpMetrics.d.ts.map +1 -1
- package/dist/observability/OtlpMetrics.js +5 -3
- package/dist/observability/OtlpMetrics.js.map +1 -1
- package/dist/observability/OtlpProxy.d.ts +154 -0
- package/dist/observability/OtlpProxy.d.ts.map +1 -0
- package/dist/observability/OtlpProxy.js +235 -0
- package/dist/observability/OtlpProxy.js.map +1 -0
- 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.map +1 -1
- package/dist/observability/OtlpTracer.js +4 -0
- package/dist/observability/OtlpTracer.js.map +1 -1
- package/dist/observability/index.d.ts +5 -0
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +5 -0
- package/dist/observability/index.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/CircuitBreaker.d.ts +897 -0
- package/dist/persistence/CircuitBreaker.d.ts.map +1 -0
- package/dist/persistence/CircuitBreaker.js +1165 -0
- package/dist/persistence/CircuitBreaker.js.map +1 -0
- 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/Redis.d.ts +78 -2
- package/dist/persistence/Redis.d.ts.map +1 -1
- package/dist/persistence/Redis.js +62 -7
- package/dist/persistence/Redis.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 +10 -0
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +10 -0
- package/dist/persistence/index.js.map +1 -1
- package/dist/process/ChildProcess.d.ts +32 -5
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js.map +1 -1
- package/dist/process/ChildProcessSpawner.d.ts +30 -0
- package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/process/ChildProcessSpawner.js +5 -2
- package/dist/process/ChildProcessSpawner.js.map +1 -1
- package/dist/reactivity/AsyncResult.d.ts +1 -1
- package/dist/reactivity/AsyncResult.d.ts.map +1 -1
- package/dist/reactivity/AsyncResult.js +1 -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 +44 -9
- 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 +198 -61
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts +29 -0
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +41 -13
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +20 -19
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/rpc/RpcTest.d.ts +1 -0
- package/dist/rpc/RpcTest.d.ts.map +1 -1
- package/dist/rpc/RpcTest.js +1 -0
- package/dist/rpc/RpcTest.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 +2 -1
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +21 -6
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +148 -5
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +155 -27
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/SqlResolver.d.ts +13 -0
- package/dist/sql/SqlResolver.d.ts.map +1 -1
- package/dist/sql/SqlResolver.js +27 -4
- package/dist/sql/SqlResolver.js.map +1 -1
- package/dist/sql/Statement.d.ts +10 -1
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +45 -7
- package/dist/sql/Statement.js.map +1 -1
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +4 -2
- 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/DurableDeferred.d.ts.map +1 -1
- package/dist/workflow/DurableDeferred.js +21 -2
- package/dist/workflow/DurableDeferred.js.map +1 -1
- package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +18 -4
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +13 -3
- package/src/Arbitrary.ts +10 -2
- package/src/Array.ts +128 -55
- package/src/Bytes.ts +111 -0
- package/src/Channel.ts +308 -452
- package/src/ChannelSchema.ts +1 -49
- package/src/Chunk.ts +55 -61
- package/src/Config.ts +12 -86
- package/src/ConfigProvider.ts +2 -1
- package/src/Cron.ts +6 -3
- package/src/Data.ts +60 -265
- package/src/Duration.ts +66 -16
- package/src/Effect.ts +503 -168
- package/src/Equal.ts +8 -1
- package/src/Equivalence.ts +7 -4
- package/src/Exit.ts +27 -12
- package/src/FiberHandle.ts +10 -9
- package/src/FiberMap.ts +13 -66
- package/src/FileSystem.ts +10 -0
- package/src/Formatter.ts +28 -13
- package/src/Graph.ts +171 -1263
- package/src/Hash.ts +4 -1
- package/src/HashSet.ts +0 -60
- package/src/Iterable.ts +15 -14
- package/src/JsonPatch.ts +4 -0
- package/src/JsonSchema.ts +40 -43
- package/src/Layer.ts +2 -2
- package/src/ManagedRuntime.ts +72 -6
- package/src/Metric.ts +252 -510
- package/src/MutableHashMap.ts +4 -473
- package/src/MutableList.ts +7 -5
- package/src/MutableRef.ts +8 -1
- package/src/Number.ts +2 -2
- package/src/Optic.ts +17 -332
- package/src/PartitionedSemaphore.ts +24 -13
- package/src/Path.ts +9 -1
- package/src/Pool.ts +109 -37
- package/src/PubSub.ts +17 -13
- 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 +15 -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 +3 -95
- package/src/Schema.ts +639 -381
- package/src/SchemaAST.ts +40 -29
- package/src/SchemaGetter.ts +22 -5
- package/src/SchemaIssue.ts +44 -53
- package/src/SchemaParser.ts +51 -18
- package/src/SchemaRepresentation.ts +95 -35
- package/src/SchemaTransformation.ts +10 -3
- 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/Semaphore.ts +67 -40
- package/src/Sink.ts +21 -4
- package/src/Stream.ts +367 -1027
- package/src/String.ts +11 -8
- package/src/TextDiff.ts +766 -0
- package/src/Tracer.ts +15 -1
- package/src/TxHashMap.ts +1 -103
- package/src/TxHashSet.ts +48 -753
- package/src/ai/AiError.ts +66 -4
- package/src/ai/Chat.ts +10 -5
- package/src/ai/Decision.ts +49 -1
- package/src/ai/DecisionModel.ts +264 -108
- package/src/ai/EmbeddingModel.ts +25 -13
- package/src/ai/LanguageModel.ts +9 -0
- 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 +231 -233
- package/src/ai/Prompt.ts +114 -35
- package/src/ai/Response.ts +220 -65
- package/src/ai/Tool.ts +50 -6
- package/src/ai/Toolkit.ts +82 -11
- 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/Argument.ts +15 -0
- package/src/cli/CliError.ts +136 -4
- package/src/cli/CliOutput.ts +183 -6
- package/src/cli/Command.ts +367 -48
- package/src/cli/Completions.ts +56 -0
- package/src/cli/Flag.ts +132 -0
- package/src/cli/GlobalFlag.ts +5 -6
- package/src/cli/Param.ts +151 -6
- package/src/cli/TerminalCapabilities.ts +159 -0
- package/src/cli/index.ts +6 -0
- package/src/cli/internal/command.ts +8 -3
- package/src/cli/internal/completions/bash.ts +83 -32
- package/src/cli/internal/completions/descriptor.ts +11 -1
- package/src/cli/internal/completions/fish.ts +10 -8
- package/src/cli/internal/completions/powershell.ts +23 -14
- package/src/cli/internal/completions/zsh.ts +8 -5
- package/src/cli/internal/formatter.ts +18 -0
- package/src/cli/internal/lexer.ts +12 -5
- package/src/cli/internal/parser.ts +31 -11
- package/src/cluster/ClusterCron.ts +94 -35
- package/src/cluster/ClusterMetrics.ts +149 -7
- package/src/cluster/ClusterWorkflowEngine.ts +130 -57
- package/src/cluster/Entity.ts +4 -0
- package/src/cluster/MessageStorage.ts +26 -14
- package/src/cluster/Runners.ts +76 -25
- package/src/cluster/Sharding.ts +200 -58
- package/src/cluster/ShardingConfig.ts +20 -0
- package/src/cluster/Snowflake.ts +3 -7
- package/src/cluster/SqlMessageStorage.ts +58 -55
- package/src/cluster/SqlRunnerStorage.ts +120 -51
- package/src/cluster/internal/entityManager.ts +155 -32
- package/src/devtools/DevTools.ts +3 -2
- package/src/devtools/DevToolsClient.ts +29 -10
- package/src/encoding/Base64.ts +38 -0
- 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 +4 -3
- package/src/encoding/Tar.ts +1417 -0
- package/src/encoding/Toml.ts +36 -19
- 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 +496 -193
- 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 +119 -0
- package/src/graphql/GraphQLClientError.ts +5 -12
- package/src/graphql/GraphQLProtocol.ts +12 -9
- package/src/graphql/GraphQLResolver.ts +90 -239
- package/src/http/Cookies.ts +10 -11
- package/src/http/FetchHttpClient.ts +56 -6
- package/src/http/FindMyWay/internal/router.ts +11 -0
- package/src/http/Headers.ts +337 -154
- package/src/http/HttpClient.ts +673 -142
- package/src/http/HttpClientError.ts +35 -1
- package/src/http/HttpClientRequest.ts +151 -5
- 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 +194 -40
- package/src/http/HttpRouter.ts +10 -3
- package/src/http/HttpServerError.ts +8 -5
- package/src/http/HttpServerRequest.ts +172 -27
- package/src/http/HttpServerResponse.ts +49 -23
- package/src/http/HttpStaticServer.ts +71 -26
- package/src/http/MultipartParser/internal/contentType.ts +109 -8
- package/src/http/MultipartParser/internal/headers.ts +4 -16
- package/src/http/MultipartParser/internal/multipart.ts +10 -32
- package/src/http/Url.ts +6 -1
- package/src/http/UrlParams.ts +6 -1
- package/src/http/internal/compression.ts +4 -5
- package/src/http/internal/decompression.ts +32 -17
- package/src/http/internal/httpBody.ts +10 -2
- package/src/http/internal/lazyStream.ts +25 -0
- package/src/http/internal/requestState.ts +33 -0
- package/src/http/internal/urlParams.ts +29 -0
- package/src/http/internal/webResponse.ts +20 -0
- package/src/http-api/HttpApi.ts +4 -7
- package/src/http-api/HttpApiBuilder.ts +190 -32
- package/src/http-api/HttpApiClient.ts +364 -90
- package/src/http-api/HttpApiEndpoint.ts +248 -46
- package/src/http-api/HttpApiError.ts +55 -0
- package/src/http-api/HttpApiScalar.ts +4 -3
- package/src/http-api/HttpApiSchema.ts +373 -18
- package/src/http-api/HttpApiSwagger.ts +11 -4
- package/src/http-api/HttpApiTest.ts +36 -11
- package/src/http-api/OpenApi.ts +103 -58
- package/src/http-api/internal/path.ts +40 -12
- package/src/http-api/internal/toCodecHttpProperties.ts +56 -0
- package/src/index.ts +24 -0
- package/src/internal/arbitrary/runner.ts +133 -36
- package/src/internal/core.ts +3 -1
- package/src/internal/dateTime.ts +20 -7
- package/src/internal/effect.ts +144 -100
- package/src/internal/equal.ts +17 -0
- package/src/internal/hashMap.ts +2 -2
- package/src/internal/hydration.ts +15 -0
- package/src/internal/inflate.ts +710 -0
- package/src/internal/jsonSchema.ts +27 -0
- package/src/internal/matcher.ts +1 -1
- 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/compilerRegistry.ts +6 -1
- package/src/internal/schema/content.ts +18 -0
- package/src/internal/schema/fromJsonSchemaDocument.ts +458 -351
- package/src/internal/schema/fromRepresentation.ts +2 -1
- package/src/internal/schema/interpreter.ts +58 -45
- package/src/internal/schema/standardSchema.ts +34 -32
- package/src/internal/schema/toCodeDocument.ts +12 -7
- package/src/internal/schema/toCodec.ts +134 -15
- package/src/internal/schema/toFormatter.ts +6 -6
- package/src/internal/schema/toJsonSchemaDocument.ts +246 -194
- package/src/internal/schema/toRepresentation.ts +122 -140
- package/src/internal/sql.ts +14 -0
- 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/OtlpExporter.ts +5 -12
- package/src/observability/OtlpMetrics.ts +5 -3
- package/src/observability/OtlpProxy.ts +314 -0
- package/src/observability/OtlpResource.ts +16 -6
- package/src/observability/OtlpSerialization.ts +17 -3
- package/src/observability/OtlpTracer.ts +4 -0
- package/src/observability/index.ts +6 -0
- package/src/observability/internal/protobuf.ts +2 -10
- package/src/persistence/CircuitBreaker.ts +1678 -0
- 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/Redis.ts +129 -8
- package/src/persistence/UserDirectories.ts +273 -0
- package/src/persistence/index.ts +12 -0
- package/src/process/ChildProcess.ts +32 -5
- package/src/process/ChildProcessSpawner.ts +41 -2
- package/src/reactivity/AsyncResult.ts +5 -39
- package/src/reactivity/Atom.ts +134 -166
- package/src/reactivity/AtomHttpApi.ts +10 -16
- package/src/reactivity/AtomRegistry.ts +50 -29
- 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 +283 -104
- package/src/rpc/RpcSerialization.ts +53 -14
- package/src/rpc/RpcServer.ts +27 -21
- package/src/rpc/RpcTest.ts +3 -0
- package/src/schema/VariantSchema.ts +86 -22
- package/src/socket/Socket.ts +45 -20
- package/src/sql/Migrator.ts +26 -11
- package/src/sql/SqlClient.ts +273 -29
- package/src/sql/SqlResolver.ts +32 -9
- package/src/sql/Statement.ts +65 -10
- package/src/testing/TestClock.ts +4 -1
- package/src/testing/TestSchema.ts +9 -3
- package/src/workflow/DurableDeferred.ts +23 -6
- package/src/workflow/WorkflowEngine.ts +34 -10
- 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
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SQL-backed
|
|
3
|
-
*
|
|
4
|
-
* This module implements `EventJournal` on top of a `SqlClient`. It stores event
|
|
5
|
-
* entries as encoded bytes and stores per-remote sequence metadata in separate
|
|
6
|
-
* tables, giving event-log programs a durable journal that can be replayed after
|
|
7
|
-
* restart and synchronized with remote journals.
|
|
2
|
+
* SQL-backed event journal with per-remote upload checkpoints.
|
|
8
3
|
*
|
|
9
4
|
* @stability unstable
|
|
10
5
|
* @since 4.0.0
|
|
11
6
|
*/
|
|
12
7
|
import * as Arr from "../Array.js";
|
|
8
|
+
import * as Clock from "../Clock.js";
|
|
13
9
|
import * as Effect from "../Effect.js";
|
|
14
10
|
import * as Uuid from "../internal/uuid.js";
|
|
15
11
|
import * as Layer from "../Layer.js";
|
|
@@ -20,13 +16,26 @@ import * as SqlClient from "../sql/SqlClient.js";
|
|
|
20
16
|
import * as SqlError from "../sql/SqlError.js";
|
|
21
17
|
import * as SqlSchema from "../sql/SqlSchema.js";
|
|
22
18
|
import * as EventJournal from "./EventJournal.js";
|
|
19
|
+
import { ConflictIndex } from "./internal/conflicts.js";
|
|
23
20
|
/**
|
|
24
21
|
* Creates an `EventJournal` backed by a SQL database.
|
|
25
22
|
*
|
|
26
23
|
* **Details**
|
|
27
24
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
25
|
+
* Maintains `entryTable`, `${entryTable}_sequence`, `${entryTable}_sources`,
|
|
26
|
+
* `${remotesTable}_checkpoints` and `remoteCursorsTable` (default
|
|
27
|
+
* `${remotesTable}_cursors`) using the configured `SqlClient`.
|
|
28
|
+
*
|
|
29
|
+
* **Gotchas**
|
|
30
|
+
*
|
|
31
|
+
* Creating or migrating the schema requires a writable connection. Migrated
|
|
32
|
+
* databases can be reopened read-only.
|
|
33
|
+
*
|
|
34
|
+
* Journals from earlier releases keep one `remotesTable` row per entry per
|
|
35
|
+
* remote. Opening one replaces those rows with entry sources and drops the
|
|
36
|
+
* table; an entry known to several remotes keeps one of them as its source.
|
|
37
|
+
*
|
|
38
|
+
* Upload acknowledgements do not advance past unseen entries.
|
|
30
39
|
*
|
|
31
40
|
* @stability unstable
|
|
32
41
|
* @category constructors
|
|
@@ -36,183 +45,421 @@ export const make = options => Effect.gen(function* () {
|
|
|
36
45
|
const sql = (yield* SqlClient.SqlClient).withoutTransforms();
|
|
37
46
|
const entryTable = options?.entryTable ?? "effect_event_journal";
|
|
38
47
|
const remotesTable = options?.remotesTable ?? "effect_event_remotes";
|
|
48
|
+
const remoteCursorsTable = options?.remoteCursorsTable ?? `${remotesTable}_cursors`;
|
|
49
|
+
const sequenceTable = `${entryTable}_sequence`;
|
|
50
|
+
const sourcesTable = `${entryTable}_sources`;
|
|
51
|
+
const checkpointsTable = `${remotesTable}_checkpoints`;
|
|
39
52
|
const entryTableSql = sql(entryTable);
|
|
40
53
|
const remotesTableSql = sql(remotesTable);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
mysql: () => sql`
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
54
|
+
const sequenceTableSql = sql(sequenceTable);
|
|
55
|
+
const sourcesTableSql = sql(sourcesTable);
|
|
56
|
+
const checkpointsTableSql = sql(checkpointsTable);
|
|
57
|
+
const remoteCursorsTableSql = sql(remoteCursorsTable);
|
|
58
|
+
// to_regclass folds unquoted names to lowercase, so pass the quoted identifier.
|
|
59
|
+
const quoted = table => sql`${sql(table)}`.compile(true)[0];
|
|
60
|
+
const tableExists = table => sql.onDialectOrElse({
|
|
61
|
+
// Reading the catalog refreshes cached names after concurrent DDL.
|
|
62
|
+
pg: () => sql`SELECT 1 AS found FROM pg_class WHERE oid = to_regclass(${quoted(table)})`,
|
|
63
|
+
mysql: () => sql`SELECT 1 AS found FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = ${table}`,
|
|
64
|
+
mssql: () => sql`SELECT 1 AS found WHERE OBJECT_ID(${table}, 'U') IS NOT NULL`,
|
|
65
|
+
orElse: () => sql`SELECT 1 AS found FROM sqlite_master WHERE type = 'table' AND name = ${table}`
|
|
66
|
+
}).pipe(Effect.map(rows => rows.length > 0));
|
|
67
|
+
const createSchema = Effect.gen(function* () {
|
|
68
|
+
const eventIndex = sql(`${entryTable}_event_idx`);
|
|
69
|
+
const timestampIndex = sql(`${entryTable}_timestamp_idx`);
|
|
70
|
+
yield* sql.onDialectOrElse({
|
|
71
|
+
pg: () => sql`
|
|
72
|
+
CREATE TABLE IF NOT EXISTS ${entryTableSql} (
|
|
73
|
+
id BYTEA PRIMARY KEY,
|
|
74
|
+
event TEXT NOT NULL,
|
|
75
|
+
primary_key TEXT NOT NULL,
|
|
76
|
+
payload BYTEA NOT NULL,
|
|
77
|
+
timestamp BIGINT NOT NULL
|
|
78
|
+
)`,
|
|
79
|
+
mysql: () => sql`
|
|
80
|
+
CREATE TABLE IF NOT EXISTS ${entryTableSql} (
|
|
81
|
+
id BINARY(16) PRIMARY KEY,
|
|
82
|
+
event TEXT NOT NULL,
|
|
83
|
+
primary_key TEXT NOT NULL,
|
|
84
|
+
payload BLOB NOT NULL,
|
|
85
|
+
timestamp BIGINT NOT NULL
|
|
86
|
+
)`,
|
|
87
|
+
mssql: () => sql`
|
|
88
|
+
CREATE TABLE IF NOT EXISTS ${entryTableSql} (
|
|
89
|
+
id UNIQUEIDENTIFIER PRIMARY KEY,
|
|
90
|
+
event NVARCHAR(MAX) NOT NULL,
|
|
91
|
+
primary_key NVARCHAR(MAX) NOT NULL,
|
|
92
|
+
payload VARBINARY(MAX) NOT NULL,
|
|
93
|
+
timestamp BIGINT NOT NULL
|
|
94
|
+
)`,
|
|
95
|
+
orElse: () => sql`
|
|
96
|
+
CREATE TABLE IF NOT EXISTS ${entryTableSql} (
|
|
97
|
+
id BLOB PRIMARY KEY,
|
|
98
|
+
event TEXT NOT NULL,
|
|
99
|
+
primary_key TEXT NOT NULL,
|
|
100
|
+
payload BLOB NOT NULL,
|
|
101
|
+
timestamp INTEGER NOT NULL
|
|
102
|
+
)`
|
|
103
|
+
});
|
|
104
|
+
// Insertion sequences let uploads include older entries imported later.
|
|
105
|
+
yield* sql.onDialectOrElse({
|
|
106
|
+
pg: () => sql`
|
|
107
|
+
CREATE TABLE IF NOT EXISTS ${sequenceTableSql} (
|
|
108
|
+
sequence BIGSERIAL PRIMARY KEY,
|
|
109
|
+
entry_id BYTEA NOT NULL UNIQUE
|
|
110
|
+
)`,
|
|
111
|
+
mysql: () => sql`
|
|
112
|
+
CREATE TABLE IF NOT EXISTS ${sequenceTableSql} (
|
|
113
|
+
sequence BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
114
|
+
entry_id BINARY(16) NOT NULL UNIQUE
|
|
115
|
+
)`,
|
|
116
|
+
mssql: () => sql`
|
|
117
|
+
CREATE TABLE ${sequenceTableSql} (
|
|
118
|
+
sequence BIGINT IDENTITY(1,1) PRIMARY KEY,
|
|
119
|
+
entry_id UNIQUEIDENTIFIER NOT NULL UNIQUE
|
|
120
|
+
)`,
|
|
121
|
+
orElse: () => sql`
|
|
122
|
+
CREATE TABLE IF NOT EXISTS ${sequenceTableSql} (
|
|
123
|
+
sequence INTEGER PRIMARY KEY,
|
|
124
|
+
entry_id BLOB NOT NULL UNIQUE
|
|
125
|
+
)`
|
|
126
|
+
});
|
|
127
|
+
yield* sql.onDialectOrElse({
|
|
128
|
+
pg: () => sql`
|
|
129
|
+
CREATE TABLE IF NOT EXISTS ${checkpointsTableSql} (
|
|
130
|
+
remote_id BYTEA PRIMARY KEY,
|
|
131
|
+
sequence BIGINT NOT NULL
|
|
132
|
+
)`,
|
|
133
|
+
mysql: () => sql`
|
|
134
|
+
CREATE TABLE IF NOT EXISTS ${checkpointsTableSql} (
|
|
135
|
+
remote_id BINARY(16) PRIMARY KEY,
|
|
136
|
+
sequence BIGINT NOT NULL
|
|
137
|
+
)`,
|
|
138
|
+
mssql: () => sql`
|
|
139
|
+
CREATE TABLE ${checkpointsTableSql} (
|
|
140
|
+
remote_id UNIQUEIDENTIFIER PRIMARY KEY,
|
|
141
|
+
sequence BIGINT NOT NULL
|
|
142
|
+
)`,
|
|
143
|
+
orElse: () => sql`
|
|
144
|
+
CREATE TABLE IF NOT EXISTS ${checkpointsTableSql} (
|
|
145
|
+
remote_id BLOB PRIMARY KEY,
|
|
146
|
+
sequence INTEGER NOT NULL
|
|
147
|
+
)`
|
|
148
|
+
});
|
|
149
|
+
yield* sql.onDialectOrElse({
|
|
150
|
+
pg: () => sql`
|
|
151
|
+
CREATE TABLE IF NOT EXISTS ${remoteCursorsTableSql} (
|
|
152
|
+
remote_id BYTEA PRIMARY KEY,
|
|
153
|
+
next_sequence INT NOT NULL
|
|
154
|
+
)`,
|
|
155
|
+
mysql: () => sql`
|
|
156
|
+
CREATE TABLE IF NOT EXISTS ${remoteCursorsTableSql} (
|
|
157
|
+
remote_id BINARY(16) PRIMARY KEY,
|
|
158
|
+
next_sequence INT NOT NULL
|
|
159
|
+
)`,
|
|
160
|
+
mssql: () => sql`
|
|
161
|
+
CREATE TABLE ${remoteCursorsTableSql} (
|
|
162
|
+
remote_id UNIQUEIDENTIFIER PRIMARY KEY,
|
|
163
|
+
next_sequence INT NOT NULL
|
|
164
|
+
)`,
|
|
165
|
+
orElse: () => sql`
|
|
166
|
+
CREATE TABLE IF NOT EXISTS ${remoteCursorsTableSql} (
|
|
167
|
+
remote_id BLOB PRIMARY KEY,
|
|
168
|
+
next_sequence INT NOT NULL
|
|
169
|
+
)`
|
|
170
|
+
});
|
|
171
|
+
// The remote each imported entry came from, so uploads skip it.
|
|
172
|
+
yield* sql.onDialectOrElse({
|
|
173
|
+
pg: () => sql`
|
|
174
|
+
CREATE TABLE IF NOT EXISTS ${sourcesTableSql} (
|
|
175
|
+
entry_id BYTEA PRIMARY KEY,
|
|
176
|
+
remote_id BYTEA NOT NULL
|
|
177
|
+
)`,
|
|
178
|
+
mysql: () => sql`
|
|
179
|
+
CREATE TABLE IF NOT EXISTS ${sourcesTableSql} (
|
|
180
|
+
entry_id BINARY(16) PRIMARY KEY,
|
|
181
|
+
remote_id BINARY(16) NOT NULL
|
|
182
|
+
)`,
|
|
183
|
+
mssql: () => sql`
|
|
184
|
+
CREATE TABLE ${sourcesTableSql} (
|
|
185
|
+
entry_id UNIQUEIDENTIFIER PRIMARY KEY,
|
|
186
|
+
remote_id UNIQUEIDENTIFIER NOT NULL
|
|
187
|
+
)`,
|
|
188
|
+
orElse: () => sql`
|
|
189
|
+
CREATE TABLE IF NOT EXISTS ${sourcesTableSql} (
|
|
190
|
+
entry_id BLOB PRIMARY KEY,
|
|
191
|
+
remote_id BLOB NOT NULL
|
|
192
|
+
)`
|
|
193
|
+
});
|
|
194
|
+
yield* sql.onDialectOrElse({
|
|
195
|
+
// MySQL indexes TEXT columns by prefix only.
|
|
196
|
+
mysql: () => Effect.andThen(sql`CREATE INDEX ${eventIndex} ON ${entryTableSql} (event(191), primary_key(191), timestamp)`, sql`CREATE INDEX ${timestampIndex} ON ${entryTableSql} (timestamp)`),
|
|
197
|
+
// B-tree entries are limited to about 2.7 KB, so index hashes of the
|
|
198
|
+
// unbounded columns.
|
|
199
|
+
pg: () => Effect.andThen(sql`CREATE INDEX IF NOT EXISTS ${eventIndex} ON ${entryTableSql} (md5(event), md5(primary_key), timestamp)`, sql`CREATE INDEX IF NOT EXISTS ${timestampIndex} ON ${entryTableSql} (timestamp)`),
|
|
200
|
+
// NVARCHAR(MAX) columns cannot be index keys.
|
|
201
|
+
mssql: () => sql`CREATE INDEX ${timestampIndex} ON ${entryTableSql} (timestamp)`,
|
|
202
|
+
orElse: () => Effect.andThen(sql`CREATE INDEX IF NOT EXISTS ${eventIndex} ON ${entryTableSql} (event, primary_key, timestamp)`, sql`CREATE INDEX IF NOT EXISTS ${timestampIndex} ON ${entryTableSql} (timestamp)`)
|
|
203
|
+
});
|
|
204
|
+
// Number existing entries in creation order. `WHERE true` keeps SQLite
|
|
205
|
+
// from parsing ON CONFLICT as a join constraint.
|
|
206
|
+
yield* sql`
|
|
207
|
+
INSERT INTO ${sequenceTableSql} (entry_id)
|
|
208
|
+
SELECT id FROM ${entryTableSql} WHERE true ORDER BY timestamp ASC, id ASC
|
|
209
|
+
ON CONFLICT DO NOTHING
|
|
210
|
+
`;
|
|
211
|
+
});
|
|
212
|
+
// Earlier releases kept a remotes row per entry per remote. An entry known
|
|
213
|
+
// to several remotes keeps one of them as its source, and a remote without
|
|
214
|
+
// a cursor resumes after its highest downloaded sequence.
|
|
215
|
+
const importRemotes = Effect.gen(function* () {
|
|
216
|
+
yield* sql`
|
|
217
|
+
INSERT INTO ${sourcesTableSql} (entry_id, remote_id)
|
|
218
|
+
SELECT entry_id, remote_id FROM ${remotesTableSql} WHERE true
|
|
219
|
+
ON CONFLICT DO NOTHING
|
|
220
|
+
`;
|
|
221
|
+
yield* sql`
|
|
222
|
+
INSERT INTO ${remoteCursorsTableSql} (remote_id, next_sequence)
|
|
223
|
+
SELECT remote_id, MAX(sequence) + 1 FROM ${remotesTableSql} GROUP BY remote_id
|
|
224
|
+
ON CONFLICT DO NOTHING
|
|
225
|
+
`;
|
|
226
|
+
yield* sql`DROP TABLE ${remotesTableSql}`;
|
|
227
|
+
});
|
|
228
|
+
// Both steps run in one transaction, so a complete schema has the sources
|
|
229
|
+
// table and no remotes table. Checking that first lets complete databases
|
|
230
|
+
// open read-only; PostgreSQL also locks and rechecks so concurrent opens
|
|
231
|
+
// migrate once.
|
|
232
|
+
const schemaState = Effect.all({
|
|
233
|
+
sources: tableExists(sourcesTable),
|
|
234
|
+
remotes: tableExists(remotesTable)
|
|
235
|
+
});
|
|
236
|
+
const isComplete = state => state.sources && !state.remotes;
|
|
237
|
+
yield* Effect.gen(function* () {
|
|
238
|
+
if (isComplete(yield* schemaState)) return;
|
|
239
|
+
yield* Effect.gen(function* () {
|
|
240
|
+
yield* sql.onDialectOrElse({
|
|
241
|
+
pg: () => sql`SELECT pg_advisory_xact_lock(hashtext(${quoted(entryTable)}))`,
|
|
242
|
+
orElse: () => Effect.void
|
|
243
|
+
});
|
|
244
|
+
const state = yield* schemaState;
|
|
245
|
+
if (!state.sources) yield* createSchema;
|
|
246
|
+
if (state.remotes) yield* importRemotes;
|
|
247
|
+
}).pipe(sql.withTransaction);
|
|
104
248
|
}).pipe(withTracerDisabled);
|
|
105
249
|
const decodeEntryRows = Schema.decodeUnknownEffect(EntryRowArray);
|
|
106
250
|
const decodeEntryIdRows = Schema.decodeUnknownEffect(EntryIdRowArray);
|
|
107
251
|
const toEntries = rows => rows.map(toEntry);
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
execute: entry => sql`INSERT INTO ${entryTableSql} ${sql.insert(entry)} ON CONFLICT DO NOTHING`
|
|
111
|
-
});
|
|
252
|
+
// Sort timestamp ties by id bytes consistently across dialects.
|
|
253
|
+
const toOrderedEntries = rows => rows.map(toEntry).sort(EventJournal.Entry.Order);
|
|
112
254
|
const insertEntries = SqlSchema.void({
|
|
113
255
|
Request: EntryRowArray,
|
|
114
|
-
execute: entries => sql`INSERT INTO ${entryTableSql} ${sql.insert(
|
|
256
|
+
execute: entries => forEachChunk(entries, entryColumns, chunk => sql`INSERT INTO ${entryTableSql} ${sql.insert(chunk)} ON CONFLICT DO NOTHING`)
|
|
257
|
+
});
|
|
258
|
+
const insertSources = (entries, remoteId) => forEachChunk(entries, 2, chunk => {
|
|
259
|
+
const rows = chunk.map(entry => ({
|
|
260
|
+
entry_id: entry.id,
|
|
261
|
+
remote_id: remoteId
|
|
262
|
+
}));
|
|
263
|
+
return sql`INSERT INTO ${sourcesTableSql} ${sql.insert(rows)} ON CONFLICT DO NOTHING`;
|
|
115
264
|
});
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
265
|
+
// Serialize writers so checkpoints cannot skip out-of-order commits.
|
|
266
|
+
// Lock before callbacks in both paths to avoid projection-row deadlocks.
|
|
267
|
+
const lockWriters = sql.onDialectOrElse({
|
|
268
|
+
pg: () => Effect.asVoid(sql`LOCK TABLE ${sequenceTableSql} IN SHARE ROW EXCLUSIVE MODE`),
|
|
269
|
+
orElse: () => Effect.void
|
|
119
270
|
});
|
|
271
|
+
const insertSequence = entries => forEachChunk(entries, 1, chunk => {
|
|
272
|
+
const rows = chunk.map(entry => ({
|
|
273
|
+
entry_id: entry.id
|
|
274
|
+
}));
|
|
275
|
+
return sql`INSERT INTO ${sequenceTableSql} ${sql.insert(rows)} ON CONFLICT DO NOTHING`;
|
|
276
|
+
});
|
|
277
|
+
const decodeCursorRows = Schema.decodeUnknownEffect(CursorRowArray);
|
|
278
|
+
const readCursor = remoteId => sql`SELECT next_sequence FROM ${remoteCursorsTableSql} WHERE remote_id = ${remoteId}`.pipe(Effect.flatMap(decodeCursorRows), Effect.map(rows => rows.length > 0 ? rows[0].next_sequence : 0));
|
|
279
|
+
// Cursors only move forward.
|
|
280
|
+
const writeCursor = (remoteId, next) => sql`
|
|
281
|
+
INSERT INTO ${remoteCursorsTableSql} ${sql.insert({
|
|
282
|
+
remote_id: remoteId,
|
|
283
|
+
next_sequence: next
|
|
284
|
+
})}
|
|
285
|
+
ON CONFLICT (remote_id) DO UPDATE SET next_sequence = excluded.next_sequence
|
|
286
|
+
WHERE ${remoteCursorsTableSql}.next_sequence < excluded.next_sequence
|
|
287
|
+
`;
|
|
120
288
|
const pubsub = yield* PubSub.unbounded();
|
|
289
|
+
const clock = yield* Clock.Clock;
|
|
121
290
|
const writeFromRemote = Effect.fnUntraced(function* (options) {
|
|
122
291
|
const entries = options.entries.map(remoteEntry => remoteEntry.entry);
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
})));
|
|
135
|
-
}
|
|
136
|
-
if (entries.length > 0) {
|
|
137
|
-
yield* insertEntries(entries.map(toEntryRow));
|
|
138
|
-
}
|
|
139
|
-
if (remoteRows.length > 0) {
|
|
140
|
-
yield* insertRemotes(remoteRows);
|
|
141
|
-
}
|
|
142
|
-
const uncommitted = options.entries.filter(entry => !existingIds.has(entry.entry.idString));
|
|
292
|
+
yield* lockWriters;
|
|
293
|
+
const existingRows = yield* forEachChunk(entries, 1, chunk => sql`SELECT id FROM ${entryTableSql} WHERE ${sql.in("id", chunk.map(entry => entry.id))}`).pipe(Effect.flatMap(decodeEntryIdRows));
|
|
294
|
+
const existingIds = new Set(existingRows.map(row => Uuid.stringify(row.id)));
|
|
295
|
+
// Overlapping batches can repeat an entry; the first copy wins.
|
|
296
|
+
const incomingIds = new Set();
|
|
297
|
+
const uncommitted = options.entries.filter(entry => {
|
|
298
|
+
const idString = entry.entry.idString;
|
|
299
|
+
if (existingIds.has(idString) || incomingIds.has(idString)) return false;
|
|
300
|
+
incomingIds.add(idString);
|
|
301
|
+
return true;
|
|
302
|
+
});
|
|
143
303
|
const duplicateEntries = options.entries.filter(entry => existingIds.has(entry.entry.idString)).map(entry => entry.entry);
|
|
144
304
|
const compacted = options.compact ? yield* options.compact(uncommitted) : uncommitted.map(remoteEntry => remoteEntry.entry);
|
|
145
|
-
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
305
|
+
if (Arr.isReadonlyArrayNonEmpty(compacted)) {
|
|
306
|
+
const index = new ConflictIndex(compacted);
|
|
307
|
+
const conflicts = groups => {
|
|
308
|
+
const events = Array.from(new Set(groups.map(group => group.event)));
|
|
309
|
+
const primaryKeys = Array.from(new Set(groups.map(group => group.primaryKey)));
|
|
310
|
+
return sql`SELECT * FROM ${entryTableSql} WHERE ${sql.and([
|
|
311
|
+
// Match the hash index; exact predicates below rule out hash collisions.
|
|
312
|
+
...sql.onDialectOrElse({
|
|
313
|
+
pg: () => [sql`md5(event) IN (${sql.csv(events.map(event => sql`md5(${event})`))})`, sql`md5(primary_key) IN (${sql.csv(primaryKeys.map(primaryKey => sql`md5(${primaryKey})`))})`],
|
|
314
|
+
orElse: () => []
|
|
315
|
+
}), sql.in("event", events), sql.in("primary_key", primaryKeys),
|
|
316
|
+
// A coarse filter: the index compares ids exactly.
|
|
317
|
+
sql`timestamp >= ${index.oldestMillis}`])}`;
|
|
318
|
+
};
|
|
319
|
+
// Each group binds its event and key, twice on PostgreSQL, and one
|
|
320
|
+
// parameter is left for the timestamp.
|
|
321
|
+
const groupsPerChunk = Math.floor((maxParameters - 1) / sql.onDialectOrElse({
|
|
322
|
+
pg: () => 4,
|
|
323
|
+
orElse: () => 2
|
|
324
|
+
}));
|
|
325
|
+
const stored = yield* Effect.forEach(Arr.chunksOf(index.groups(), groupsPerChunk), conflicts).pipe(Effect.flatMap(rows => decodeEntryRows(rows.flat())), Effect.map(toEntries));
|
|
326
|
+
// Chunks can share an event and a key, so a row can be returned twice.
|
|
327
|
+
const added = new Set();
|
|
328
|
+
for (const entry of stored) {
|
|
329
|
+
if (added.has(entry.idString)) continue;
|
|
330
|
+
added.add(entry.idString);
|
|
331
|
+
index.add(entry);
|
|
332
|
+
}
|
|
333
|
+
yield* options.effect(index.toBatch());
|
|
334
|
+
}
|
|
335
|
+
// Keep the incoming batch out of conflict queries and persist only after
|
|
336
|
+
// compaction and every callback have succeeded.
|
|
337
|
+
if (uncommitted.length > 0) {
|
|
338
|
+
const imported = uncommitted.map(remoteEntry => remoteEntry.entry);
|
|
339
|
+
yield* insertEntries(imported.map(toEntryRow));
|
|
340
|
+
yield* insertSequence(imported);
|
|
341
|
+
yield* insertSources(imported, options.remoteId);
|
|
158
342
|
}
|
|
343
|
+
// The change stream is ordered, so every earlier sequence is now known.
|
|
344
|
+
if (options.entries.length > 0) {
|
|
345
|
+
yield* writeCursor(options.remoteId, EventJournal.nextSequenceAfter(options.entries));
|
|
346
|
+
}
|
|
347
|
+
yield* EventJournal.warnIfAhead(clock, uncommitted.map(remoteEntry => remoteEntry.entry.id));
|
|
159
348
|
return {
|
|
160
349
|
duplicateEntries
|
|
161
350
|
};
|
|
162
351
|
});
|
|
352
|
+
// Other processes share the database but not the entry id sequence. Ids in
|
|
353
|
+
// the latest millisecond are few, and comparing them here avoids ordering
|
|
354
|
+
// id bytes in SQL.
|
|
355
|
+
const latestEntryIds = sql`
|
|
356
|
+
SELECT id FROM ${entryTableSql} WHERE timestamp = (SELECT MAX(timestamp) FROM ${entryTableSql})
|
|
357
|
+
`.pipe(Effect.flatMap(decodeEntryIdRows), Effect.map(rows => rows.map(row => row.id)));
|
|
358
|
+
const writeMany = ({
|
|
359
|
+
effect,
|
|
360
|
+
entries
|
|
361
|
+
}) => Effect.uninterruptibleMask(restore => Effect.gen(function* () {
|
|
362
|
+
yield* lockWriters;
|
|
363
|
+
// Rows visible here include an enclosing transaction's uncommitted
|
|
364
|
+
// ones, which local ids must also sort after.
|
|
365
|
+
const committed = yield* EventJournal.makeEntries(entries, yield* latestEntryIds);
|
|
366
|
+
const result = yield* restore(effect(committed)).pipe(Effect.mapError(error => new CallbackFailure(error)));
|
|
367
|
+
yield* insertEntries(committed.map(toEntryRow));
|
|
368
|
+
yield* insertSequence(committed);
|
|
369
|
+
return {
|
|
370
|
+
result,
|
|
371
|
+
committed
|
|
372
|
+
};
|
|
373
|
+
}).pipe(sql.withTransaction, Effect.mapError(error => error instanceof CallbackFailure ? error.error : error instanceof EventJournal.EventJournalError ? error : new EventJournal.EventJournalError({
|
|
374
|
+
cause: error,
|
|
375
|
+
method: "writeMany"
|
|
376
|
+
})), Effect.flatMap(({
|
|
377
|
+
committed,
|
|
378
|
+
result
|
|
379
|
+
}) => Effect.as(PubSub.publishAll(pubsub, committed), result)))).pipe(withTracerDisabled);
|
|
163
380
|
return EventJournal.EventJournal.of({
|
|
164
|
-
entries: sql`SELECT * FROM ${entryTableSql} ORDER BY timestamp ASC`.pipe(withTracerDisabled, Effect.flatMap(decodeEntryRows), Effect.map(
|
|
381
|
+
entries: sql`SELECT * FROM ${entryTableSql} ORDER BY timestamp ASC`.pipe(withTracerDisabled, Effect.flatMap(decodeEntryRows), Effect.map(toOrderedEntries), Effect.mapError(cause => new EventJournal.EventJournalError({
|
|
165
382
|
cause,
|
|
166
383
|
method: "entries"
|
|
167
384
|
}))),
|
|
168
|
-
|
|
385
|
+
entriesById: ids => forEachChunk(ids, 1, chunk => sql`SELECT * FROM ${entryTableSql} WHERE ${sql.in("id", chunk)}`).pipe(withTracerDisabled, Effect.flatMap(decodeEntryRows), Effect.map(rows => {
|
|
386
|
+
const byId = new Map(toEntries(rows).map(entry => [entry.idString, entry]));
|
|
387
|
+
return ids.map(id => byId.get(Uuid.stringify(id)));
|
|
388
|
+
}), Effect.mapError(cause => new EventJournal.EventJournalError({
|
|
389
|
+
cause,
|
|
390
|
+
method: "entriesById"
|
|
391
|
+
}))),
|
|
392
|
+
write: ({
|
|
169
393
|
effect,
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
primaryKey,
|
|
178
|
-
payload
|
|
179
|
-
}, {
|
|
180
|
-
disableChecks: true
|
|
181
|
-
});
|
|
182
|
-
return yield* Effect.uninterruptibleMask(restore => restore(effect(entry)).pipe(Effect.tap(insertEntry(toEntryRow(entry)).pipe(Effect.mapError(cause => new EventJournal.EventJournalError({
|
|
183
|
-
cause,
|
|
184
|
-
method: "write"
|
|
185
|
-
})))), Effect.tap(PubSub.publish(pubsub, entry))));
|
|
186
|
-
}, withTracerDisabled),
|
|
187
|
-
writeFromRemote: options => writeFromRemote(options).pipe(withTracerDisabled, Effect.catchIf(e => e._tag !== "EventJournalError", cause => Effect.fail(new EventJournal.EventJournalError({
|
|
394
|
+
...entry
|
|
395
|
+
}) => writeMany({
|
|
396
|
+
entries: [entry],
|
|
397
|
+
effect: entries => effect(entries[0])
|
|
398
|
+
}),
|
|
399
|
+
writeMany,
|
|
400
|
+
writeFromRemote: options => writeFromRemote(options).pipe(sql.withTransaction, withTracerDisabled, Effect.catchIf(e => e._tag !== "EventJournalError", cause => Effect.fail(new EventJournal.EventJournalError({
|
|
188
401
|
cause,
|
|
189
402
|
method: "writeFromRemote"
|
|
190
403
|
})))),
|
|
191
404
|
withRemoteUncommited: Effect.fnUntraced(function* (remoteId, f) {
|
|
192
|
-
const
|
|
193
|
-
SELECT *
|
|
194
|
-
FROM ${entryTableSql}
|
|
195
|
-
WHERE id NOT IN (SELECT entry_id FROM ${remotesTableSql} WHERE remote_id = ${remoteId})
|
|
196
|
-
ORDER BY timestamp ASC
|
|
197
|
-
`.pipe(Effect.flatMap(decodeEntryRows), Effect.map(toEntries), Effect.mapError(cause => new EventJournal.EventJournalError({
|
|
405
|
+
const mapError = Effect.mapError(cause => new EventJournal.EventJournalError({
|
|
198
406
|
cause,
|
|
199
407
|
method: "withRemoteUncommited"
|
|
200
|
-
}))
|
|
201
|
-
|
|
202
|
-
|
|
408
|
+
}));
|
|
409
|
+
// Capture an upper bound so entries committed during upload remain pending.
|
|
410
|
+
const [{
|
|
411
|
+
checkpoint,
|
|
412
|
+
latest
|
|
413
|
+
}] = yield* sql`
|
|
414
|
+
SELECT
|
|
415
|
+
COALESCE((SELECT sequence FROM ${checkpointsTableSql} WHERE remote_id = ${remoteId}), 0) AS checkpoint,
|
|
416
|
+
COALESCE((SELECT MAX(sequence) FROM ${sequenceTableSql}), 0) AS latest
|
|
417
|
+
`.pipe(Effect.flatMap(decodeUploadBounds), mapError);
|
|
418
|
+
if (latest <= checkpoint) return yield* Effect.succeedNone;
|
|
419
|
+
const entries = yield* sql`
|
|
420
|
+
SELECT e.*
|
|
421
|
+
FROM ${sequenceTableSql} s
|
|
422
|
+
JOIN ${entryTableSql} e ON e.id = s.entry_id
|
|
423
|
+
WHERE s.sequence > ${checkpoint} AND
|
|
424
|
+
s.sequence <= ${latest} AND
|
|
425
|
+
NOT EXISTS (
|
|
426
|
+
SELECT 1 FROM ${sourcesTableSql} src WHERE src.entry_id = s.entry_id AND src.remote_id = ${remoteId}
|
|
427
|
+
)
|
|
428
|
+
`.pipe(Effect.flatMap(decodeEntryRows), Effect.map(toOrderedEntries), mapError);
|
|
429
|
+
// Uploads can complete out of order; the checkpoint only moves forward.
|
|
430
|
+
const saveCheckpoint = sql`
|
|
431
|
+
INSERT INTO ${checkpointsTableSql} ${sql.insert({
|
|
432
|
+
remote_id: remoteId,
|
|
433
|
+
sequence: latest
|
|
434
|
+
})}
|
|
435
|
+
ON CONFLICT (remote_id) DO UPDATE SET sequence = excluded.sequence
|
|
436
|
+
WHERE ${checkpointsTableSql}.sequence < excluded.sequence
|
|
437
|
+
`.pipe(mapError);
|
|
438
|
+
return yield* Effect.uninterruptibleMask(restore => restore(Arr.isReadonlyArrayNonEmpty(entries) ? Effect.asSome(f(entries)) : Effect.succeedNone).pipe(Effect.tap(saveCheckpoint)));
|
|
203
439
|
}, withTracerDisabled),
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
})
|
|
440
|
+
writeRemoteAcks: Effect.fnUntraced(function* ({
|
|
441
|
+
acks,
|
|
442
|
+
firstSequence,
|
|
443
|
+
remoteId
|
|
444
|
+
}) {
|
|
445
|
+
if (acks.length === 0) return;
|
|
446
|
+
const next = yield* readCursor(remoteId);
|
|
447
|
+
yield* writeCursor(remoteId, EventJournal.advanceSequence(next, acks, firstSequence));
|
|
448
|
+
}, _ => sql.withTransaction(_), _ => withTracerDisabled(_), Effect.mapError(cause => new EventJournal.EventJournalError({
|
|
449
|
+
cause,
|
|
450
|
+
method: "writeRemoteAcks"
|
|
451
|
+
}))),
|
|
452
|
+
nextRemoteSequence: remoteId => readCursor(remoteId).pipe(withTracerDisabled, Effect.mapError(cause => new EventJournal.EventJournalError({
|
|
209
453
|
cause,
|
|
210
454
|
method: "nextRemoteSequence"
|
|
211
455
|
}))),
|
|
212
456
|
changes: PubSub.subscribe(pubsub),
|
|
213
457
|
destroy: Effect.gen(function* () {
|
|
214
458
|
yield* sql`DROP TABLE ${entryTableSql}`;
|
|
215
|
-
yield* sql`DROP TABLE ${
|
|
459
|
+
yield* sql`DROP TABLE ${sequenceTableSql}`;
|
|
460
|
+
yield* sql`DROP TABLE ${sourcesTableSql}`;
|
|
461
|
+
yield* sql`DROP TABLE ${checkpointsTableSql}`;
|
|
462
|
+
yield* sql`DROP TABLE ${remoteCursorsTableSql}`;
|
|
216
463
|
}).pipe(withTracerDisabled, Effect.mapError(cause => new EventJournal.EventJournalError({
|
|
217
464
|
cause,
|
|
218
465
|
method: "destroy"
|
|
@@ -223,25 +470,11 @@ export const make = options => Effect.gen(function* () {
|
|
|
223
470
|
});
|
|
224
471
|
});
|
|
225
472
|
/**
|
|
226
|
-
* Provides `EventJournal`
|
|
227
|
-
* `make`.
|
|
228
|
-
*
|
|
229
|
-
* **When to use**
|
|
230
|
-
*
|
|
231
|
-
* Use when composing a Layer graph that should provide a persistent SQL-backed
|
|
232
|
-
* `EventJournal` from an existing `SqlClient` service.
|
|
233
|
-
*
|
|
234
|
-
* **Details**
|
|
235
|
-
*
|
|
236
|
-
* The layer delegates to `make(options)`, so the same optional `entryTable` and
|
|
237
|
-
* `remotesTable` settings are used and construction requires `SqlClient` and
|
|
238
|
-
* may fail with `SqlError`.
|
|
473
|
+
* Provides a SQL-backed `EventJournal` from an existing `SqlClient` service.
|
|
239
474
|
*
|
|
240
475
|
* **Gotchas**
|
|
241
476
|
*
|
|
242
|
-
*
|
|
243
|
-
* setup as `make`; manage indexes and schema migrations outside this layer when
|
|
244
|
-
* your SQL schema needs more than the built-in tables.
|
|
477
|
+
* Creating or migrating the schema requires a writable connection.
|
|
245
478
|
*
|
|
246
479
|
* @see {@link make} for constructing the SQL-backed service directly
|
|
247
480
|
* @see {@link EventJournal.layerMemory} for an in-memory `EventJournal` layer
|
|
@@ -272,6 +505,11 @@ const EntryRow = /*#__PURE__*/Schema.Struct({
|
|
|
272
505
|
timestamp: SqlNatural
|
|
273
506
|
});
|
|
274
507
|
const EntryRowArray = /*#__PURE__*/Schema.Array(EntryRow);
|
|
508
|
+
const entryColumns = /*#__PURE__*/Object.keys(EntryRow.fields).length;
|
|
509
|
+
const decodeUploadBounds = /*#__PURE__*/Schema.decodeUnknownEffect(/*#__PURE__*/Schema.Tuple([/*#__PURE__*/Schema.Struct({
|
|
510
|
+
checkpoint: SqlNatural,
|
|
511
|
+
latest: SqlNatural
|
|
512
|
+
})]));
|
|
275
513
|
const EntryIdRowArray = /*#__PURE__*/Schema.Array(/*#__PURE__*/Schema.Struct({
|
|
276
514
|
id: SqlEntryId
|
|
277
515
|
}));
|
|
@@ -290,11 +528,21 @@ const toEntryRow = entry => ({
|
|
|
290
528
|
payload: entry.payload,
|
|
291
529
|
timestamp: EventJournal.entryIdMillis(entry.id)
|
|
292
530
|
});
|
|
293
|
-
const
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
sequence: Schema.Natural
|
|
297
|
-
});
|
|
298
|
-
const RemoteRowArray = /*#__PURE__*/Schema.Array(RemoteRow);
|
|
531
|
+
const CursorRowArray = /*#__PURE__*/Schema.Array(/*#__PURE__*/Schema.Struct({
|
|
532
|
+
next_sequence: SqlNatural
|
|
533
|
+
}));
|
|
299
534
|
const withTracerDisabled = /*#__PURE__*/Effect.withTracerEnabled(false);
|
|
535
|
+
// Statements bind at most this many parameters: Cloudflare Durable Object
|
|
536
|
+
// SQLite's per-statement limit, the lowest of the supported databases.
|
|
537
|
+
const maxParameters = 100;
|
|
538
|
+
// Runs `f` in order over chunks of `values`, each binding `parametersPerValue`
|
|
539
|
+
// parameters per value, and concatenates the rows.
|
|
540
|
+
const forEachChunk = (values, parametersPerValue, f) => Effect.map(Effect.forEach(Arr.chunksOf(values, Math.floor(maxParameters / parametersPerValue)), f), rows => rows.flat());
|
|
541
|
+
// Preserve callback errors without wrapping them as journal SQL errors.
|
|
542
|
+
class CallbackFailure {
|
|
543
|
+
error;
|
|
544
|
+
constructor(error) {
|
|
545
|
+
this.error = error;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
300
548
|
//# sourceMappingURL=SqlEventJournal.js.map
|