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
|
@@ -277,13 +277,42 @@ const makeEncodedStorage = Effect.fnUntraced(function*(
|
|
|
277
277
|
const sqlFalse = sql.literal(supportsBooleans ? "FALSE" : "0")
|
|
278
278
|
const sqlTrue = sql.literal(supportsBooleans ? "TRUE" : "1")
|
|
279
279
|
|
|
280
|
+
// Read SQLite IDs as text to avoid rounding on number-returning drivers
|
|
281
|
+
// such as Durable Objects.
|
|
282
|
+
const idsAsText = sql.onDialectOrElse({
|
|
283
|
+
sqlite: () => true,
|
|
284
|
+
orElse: () => false
|
|
285
|
+
})
|
|
286
|
+
const idAs = (column: string, alias: string) =>
|
|
287
|
+
idsAsText ? `CAST(${column} AS TEXT) AS ${alias}` : `${column} AS ${alias}`
|
|
288
|
+
const replyJoinColumns = "r.kind as reply_kind, r.payload as reply_payload, r.sequence as reply_sequence"
|
|
289
|
+
const messageColumns = idsAsText
|
|
290
|
+
? `${idAs("m.id", "id")}, m.message_id, m.shard_id, m.entity_type, m.entity_id, m.kind, m.tag, m.payload, ` +
|
|
291
|
+
`m.headers, m.trace_id, m.span_id, m.sampled, m.processed, ${idAs("m.request_id", "request_id")}, ` +
|
|
292
|
+
`${idAs("m.reply_id", "reply_id")}, ${idAs("m.last_reply_id", "last_reply_id")}, m.last_read, m.deliver_at`
|
|
293
|
+
: "m.*"
|
|
294
|
+
|
|
295
|
+
const idColumn = sql.literal(idAs("id", "id"))
|
|
296
|
+
const replyColumns = sql.literal(
|
|
297
|
+
`${idAs("id", "id")}, kind, ${idAs("request_id", "request_id")}, payload, sequence`
|
|
298
|
+
)
|
|
299
|
+
const duplicateColumns = sql.literal(
|
|
300
|
+
`${idAs("m.id", "id")}, ${idAs("r.id", "reply_id")}, ${replyJoinColumns}`
|
|
301
|
+
)
|
|
302
|
+
const messageJoinColumns = sql.literal(
|
|
303
|
+
`${messageColumns}, ${idAs("r.id", "reply_reply_id")}, ${replyJoinColumns}`
|
|
304
|
+
)
|
|
305
|
+
|
|
280
306
|
const selectByMessageId = (message_id: string): Effect.Effect<ReadonlyArray<Row>, SqlError> =>
|
|
281
307
|
sql`
|
|
282
|
-
SELECT
|
|
308
|
+
SELECT ${duplicateColumns}
|
|
283
309
|
FROM ${messagesTableSql} m
|
|
284
310
|
LEFT JOIN ${repliesTableSql} r ON r.id = m.last_reply_id
|
|
285
311
|
WHERE m.message_id = ${message_id}
|
|
286
312
|
`
|
|
313
|
+
// an insert that returned no rows hit an existing message_id
|
|
314
|
+
const selectUnlessInserted = (message_id: string) => (inserted: ReadonlyArray<unknown>) =>
|
|
315
|
+
inserted.length > 0 ? Effect.succeed([]) : selectByMessageId(message_id)
|
|
287
316
|
|
|
288
317
|
const insertEnvelope: (
|
|
289
318
|
row: MessageRow,
|
|
@@ -294,11 +323,7 @@ const makeEncodedStorage = Effect.fnUntraced(function*(
|
|
|
294
323
|
INSERT INTO ${messagesTableSql} ${sql.insert(row)}
|
|
295
324
|
ON CONFLICT (message_id) DO NOTHING
|
|
296
325
|
RETURNING id
|
|
297
|
-
`.pipe(Effect.flatMap((
|
|
298
|
-
// inserted a new row
|
|
299
|
-
if (rows.length > 0) return Effect.succeed([])
|
|
300
|
-
return selectByMessageId(message_id)
|
|
301
|
-
})),
|
|
326
|
+
`.pipe(Effect.flatMap(selectUnlessInserted(message_id))),
|
|
302
327
|
mysql: () => (row, message_id) =>
|
|
303
328
|
Effect.flatMap(
|
|
304
329
|
sql`INSERT IGNORE INTO ${messagesTableSql} ${sql.insert(row)}`.raw,
|
|
@@ -316,37 +341,8 @@ const makeEncodedStorage = Effect.fnUntraced(function*(
|
|
|
316
341
|
ON target.message_id = source.message_id
|
|
317
342
|
WHEN NOT MATCHED THEN
|
|
318
343
|
INSERT ${sql.insert(row)}
|
|
319
|
-
OUTPUT
|
|
320
|
-
|
|
321
|
-
CASE
|
|
322
|
-
WHEN inserted.id IS NULL THEN (
|
|
323
|
-
SELECT r.id, r.kind, r.payload
|
|
324
|
-
FROM ${repliesTableSql} r
|
|
325
|
-
WHERE r.id = target.last_reply_id
|
|
326
|
-
)
|
|
327
|
-
END as reply_id,
|
|
328
|
-
CASE
|
|
329
|
-
WHEN inserted.id IS NULL THEN (
|
|
330
|
-
SELECT r.kind
|
|
331
|
-
FROM ${repliesTableSql} r
|
|
332
|
-
WHERE r.id = target.last_reply_id
|
|
333
|
-
)
|
|
334
|
-
END as reply_kind,
|
|
335
|
-
CASE
|
|
336
|
-
WHEN inserted.id IS NULL THEN (
|
|
337
|
-
SELECT r.payload
|
|
338
|
-
FROM ${repliesTableSql} r
|
|
339
|
-
WHERE r.id = target.last_reply_id
|
|
340
|
-
)
|
|
341
|
-
END as reply_payload,
|
|
342
|
-
CASE
|
|
343
|
-
WHEN inserted.id IS NULL THEN (
|
|
344
|
-
SELECT r.sequence
|
|
345
|
-
FROM ${repliesTableSql} r
|
|
346
|
-
WHERE r.id = target.last_reply_id
|
|
347
|
-
)
|
|
348
|
-
END as reply_sequence;
|
|
349
|
-
`,
|
|
344
|
+
OUTPUT inserted.id;
|
|
345
|
+
`.pipe(Effect.flatMap(selectUnlessInserted(message_id))),
|
|
350
346
|
orElse: () => (row, message_id) =>
|
|
351
347
|
selectByMessageId(message_id).pipe(
|
|
352
348
|
Effect.tap(sql`INSERT OR IGNORE INTO ${messagesTableSql} ${sql.insert(row)}`),
|
|
@@ -374,9 +370,15 @@ const makeEncodedStorage = Effect.fnUntraced(function*(
|
|
|
374
370
|
orElse: () => (s: string) => `'${s}'`
|
|
375
371
|
})
|
|
376
372
|
const forUpdate = sql.onDialectOrElse({
|
|
373
|
+
mssql: () => sql.literal(""),
|
|
377
374
|
sqlite: () => sql.literal(""),
|
|
378
375
|
orElse: () => sql.literal("FOR UPDATE")
|
|
379
376
|
})
|
|
377
|
+
// mssql locks claimed rows with a table hint instead of FOR UPDATE
|
|
378
|
+
const updateLock = sql.onDialectOrElse({
|
|
379
|
+
mssql: () => sql.literal("WITH (UPDLOCK)"),
|
|
380
|
+
orElse: () => sql.literal("")
|
|
381
|
+
})
|
|
380
382
|
|
|
381
383
|
const emptyFragment = sql.literal("")
|
|
382
384
|
// mssql only limits with OFFSET/FETCH, which requires the ORDER BY that
|
|
@@ -459,8 +461,8 @@ const makeEncodedStorage = Effect.fnUntraced(function*(
|
|
|
459
461
|
`,
|
|
460
462
|
orElse: () => (shardIds: ReadonlyArray<string>, now: number, filters: UnprocessedFilters) =>
|
|
461
463
|
sql<MessageJoinRow>`
|
|
462
|
-
SELECT
|
|
463
|
-
FROM ${messagesTableSql} m
|
|
464
|
+
SELECT ${messageJoinColumns}
|
|
465
|
+
FROM ${messagesTableSql} m ${updateLock}
|
|
464
466
|
LEFT JOIN ${repliesTableSql} r ON r.id = m.last_reply_id
|
|
465
467
|
WHERE m.shard_id IN (${sql.literal(shardIds.map(wrapString).join(","))})
|
|
466
468
|
${filters.addressFilter}
|
|
@@ -630,11 +632,11 @@ const makeEncodedStorage = Effect.fnUntraced(function*(
|
|
|
630
632
|
requestIdForPrimaryKey: (primaryKey) =>
|
|
631
633
|
messageIdForPrimaryKey(primaryKey).pipe(
|
|
632
634
|
Effect.flatMap((messageId) =>
|
|
633
|
-
sql<{ id: string | bigint }>`SELECT
|
|
635
|
+
sql<{ id: string | bigint }>`SELECT ${idColumn} FROM ${messagesTableSql} WHERE message_id = ${messageId}`
|
|
634
636
|
),
|
|
635
637
|
Effect.flatMap((rows) =>
|
|
636
638
|
rows.length === 0 && mayHaveLegacyRow(primaryKey)
|
|
637
|
-
? sql<{ id: string | bigint }>`SELECT
|
|
639
|
+
? sql<{ id: string | bigint }>`SELECT ${idColumn} FROM ${messagesTableSql} WHERE message_id = ${primaryKey}`
|
|
638
640
|
: Effect.succeed(rows)
|
|
639
641
|
),
|
|
640
642
|
Effect.map((rows) => Option.map(Option.fromNullishOr(rows[0]?.id), Snowflake.Snowflake)),
|
|
@@ -649,7 +651,7 @@ const makeEncodedStorage = Effect.fnUntraced(function*(
|
|
|
649
651
|
// - the kind is WithExit
|
|
650
652
|
// - or the kind is Chunk and has not been acked yet
|
|
651
653
|
sql<ReplyRow>`
|
|
652
|
-
SELECT
|
|
654
|
+
SELECT ${replyColumns}
|
|
653
655
|
FROM ${repliesTableSql}
|
|
654
656
|
WHERE request_id IN (${sql.literal(requestIds.join(","))})
|
|
655
657
|
AND (
|
|
@@ -669,7 +671,7 @@ const makeEncodedStorage = Effect.fnUntraced(function*(
|
|
|
669
671
|
|
|
670
672
|
repliesForUnfiltered: (requestIds) =>
|
|
671
673
|
sql<ReplyRow>`
|
|
672
|
-
SELECT
|
|
674
|
+
SELECT ${replyColumns}
|
|
673
675
|
FROM ${repliesTableSql}
|
|
674
676
|
WHERE request_id IN (${sql.literal(requestIds.join(","))})
|
|
675
677
|
ORDER BY rowid ASC
|
|
@@ -705,7 +707,7 @@ const makeEncodedStorage = Effect.fnUntraced(function*(
|
|
|
705
707
|
unprocessedMessagesById(ids, now) {
|
|
706
708
|
const idArr = Array.from(ids, (id) => String(id))
|
|
707
709
|
return sql<MessageRow & ReplyJoinRow>`
|
|
708
|
-
SELECT
|
|
710
|
+
SELECT ${messageJoinColumns}
|
|
709
711
|
FROM ${messagesTableSql} m
|
|
710
712
|
LEFT JOIN ${repliesTableSql} r ON r.id = m.last_reply_id
|
|
711
713
|
WHERE m.id IN (${sql.literal(idArr.join(","))})
|
|
@@ -840,6 +842,8 @@ export const migrations = (options?: {
|
|
|
840
842
|
const messagesTableSql = sql(messagesTable)
|
|
841
843
|
const repliesTableSql = sql(repliesTable)
|
|
842
844
|
|
|
845
|
+
// mssql UNIQUE constraints treat NULLs as equal, so nullable keys use
|
|
846
|
+
// filtered unique indexes instead
|
|
843
847
|
yield* sql.onDialectOrElse({
|
|
844
848
|
mssql: () =>
|
|
845
849
|
sql`
|
|
@@ -853,8 +857,8 @@ export const migrations = (options?: {
|
|
|
853
857
|
entity_id VARCHAR(255) NOT NULL,
|
|
854
858
|
kind INT NOT NULL,
|
|
855
859
|
tag VARCHAR(50),
|
|
856
|
-
payload
|
|
857
|
-
headers
|
|
860
|
+
payload NVARCHAR(MAX),
|
|
861
|
+
headers NVARCHAR(MAX),
|
|
858
862
|
trace_id VARCHAR(32),
|
|
859
863
|
span_id VARCHAR(16),
|
|
860
864
|
sampled BIT,
|
|
@@ -864,7 +868,7 @@ export const migrations = (options?: {
|
|
|
864
868
|
last_reply_id BIGINT,
|
|
865
869
|
last_read DATETIME,
|
|
866
870
|
deliver_at BIGINT,
|
|
867
|
-
UNIQUE (message_id)
|
|
871
|
+
INDEX ${sql(messagesTable + "_message_id_idx")} UNIQUE (message_id) WHERE message_id IS NOT NULL
|
|
868
872
|
)
|
|
869
873
|
`,
|
|
870
874
|
mysql: () =>
|
|
@@ -967,17 +971,16 @@ export const migrations = (options?: {
|
|
|
967
971
|
CREATE INDEX ${sql(requestIdLookupIndex)}
|
|
968
972
|
ON ${messagesTableSql} (request_id);
|
|
969
973
|
`.unprepared.pipe(Effect.ignore),
|
|
970
|
-
pg: ()
|
|
971
|
-
|
|
972
|
-
yield* sql`
|
|
974
|
+
pg: Effect.fnUntraced(function*() {
|
|
975
|
+
yield* sql`
|
|
973
976
|
CREATE INDEX IF NOT EXISTS ${sql(shardLookupIndex)}
|
|
974
977
|
ON ${messagesTableSql} (shard_id, processed, last_read, deliver_at)
|
|
975
978
|
`
|
|
976
|
-
|
|
979
|
+
yield* sql`
|
|
977
980
|
CREATE INDEX IF NOT EXISTS ${sql(requestIdLookupIndex)}
|
|
978
981
|
ON ${messagesTableSql} (request_id)
|
|
979
982
|
`
|
|
980
|
-
|
|
983
|
+
}),
|
|
981
984
|
orElse: () =>
|
|
982
985
|
// sqlite
|
|
983
986
|
Effect.all([
|
|
@@ -1001,11 +1004,11 @@ export const migrations = (options?: {
|
|
|
1001
1004
|
rowid BIGINT IDENTITY(1,1),
|
|
1002
1005
|
kind INT,
|
|
1003
1006
|
request_id BIGINT NOT NULL,
|
|
1004
|
-
payload
|
|
1007
|
+
payload NVARCHAR(MAX) NOT NULL,
|
|
1005
1008
|
sequence INT,
|
|
1006
1009
|
acked BIT NOT NULL DEFAULT 0,
|
|
1007
|
-
|
|
1008
|
-
|
|
1010
|
+
INDEX ${sql(repliesTable + "_one_exit")} UNIQUE (request_id, kind) WHERE kind IS NOT NULL,
|
|
1011
|
+
INDEX ${sql(repliesTable + "_sequence")} UNIQUE (request_id, sequence) WHERE sequence IS NOT NULL
|
|
1009
1012
|
)
|
|
1010
1013
|
`,
|
|
1011
1014
|
mysql: () =>
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
* shard. This module migrates the required runner and lock tables, supports an
|
|
7
7
|
* optional table prefix, uses advisory locks for PostgreSQL and MySQL when
|
|
8
8
|
* enabled, and provides constructors and layers for the storage service.
|
|
9
|
+
* PGlite clients always use lock table rows on the shared client, so the
|
|
10
|
+
* storage never holds their only connection.
|
|
9
11
|
*
|
|
10
12
|
* `layer`, `layerWith`, and `make` run the migrations before building the
|
|
11
13
|
* storage. To run migrations with a different connection, such as a schema
|
|
@@ -36,6 +38,14 @@ import * as ShardingConfig from "./ShardingConfig.ts"
|
|
|
36
38
|
|
|
37
39
|
const withTracerDisabled = Effect.withTracerEnabled(false)
|
|
38
40
|
|
|
41
|
+
// The session holding a storage's advisory locks, as reported to other
|
|
42
|
+
// sessions.
|
|
43
|
+
interface LockSession {
|
|
44
|
+
pid: number
|
|
45
|
+
// MySQL only: the lock that pins the session's lock connection
|
|
46
|
+
readonly pinLock: string | undefined
|
|
47
|
+
}
|
|
48
|
+
|
|
39
49
|
// This exact FNV-1a hash, including its tag and UTF-8 encoding, is a persistent
|
|
40
50
|
// advisory-lock wire format and must never change.
|
|
41
51
|
const postgresLockNamespace = (prefix: string): number => {
|
|
@@ -53,9 +63,13 @@ const makeStorage = Effect.fnUntraced(function*(options: {
|
|
|
53
63
|
const config = yield* ShardingConfig.ShardingConfig
|
|
54
64
|
const shardGroups = ShardingConfig.shardGroupConfig(config)
|
|
55
65
|
const availableShardGroups = Array.from(shardGroups.available)
|
|
56
|
-
const disableAdvisoryLocks = config.shardLockDisableAdvisory
|
|
57
66
|
const lockOperationInterval = effectiveInterval(config)
|
|
58
67
|
const sql = (yield* SqlClient.SqlClient).withoutTransforms()
|
|
68
|
+
// PGlite runs every statement on one session, so advisory locks are shared by
|
|
69
|
+
// every user of the client and a reserved connection would block all other
|
|
70
|
+
// statements. Use table leases on the shared client instead.
|
|
71
|
+
const singleSession = sql.driver === "pglite"
|
|
72
|
+
const disableAdvisoryLocks = config.shardLockDisableAdvisory || singleSession
|
|
59
73
|
const layerScope = yield* Effect.scope
|
|
60
74
|
const prefix = options?.prefix ?? "cluster"
|
|
61
75
|
const table = (name: string) => `${prefix}_${name}`
|
|
@@ -63,17 +77,48 @@ const makeStorage = Effect.fnUntraced(function*(options: {
|
|
|
63
77
|
// PostgreSQL exposes the signed int4 lock key through pg_locks as an unsigned oid.
|
|
64
78
|
const pgLockNamespaceOid = pgLockNamespace >>> 0
|
|
65
79
|
|
|
80
|
+
// MySQL identifies a lock holder by connection id. Behind Vitess that is the
|
|
81
|
+
// id of vtgate's lock connection for the session, which vtgate replaces
|
|
82
|
+
// once the session releases all of its locks. A lock of the session's own
|
|
83
|
+
// pins that connection and reads its id.
|
|
84
|
+
const pinLockSession = Effect.fnUntraced(function*(conn: Connection, pinLock?: string) {
|
|
85
|
+
while (true) {
|
|
86
|
+
const name = pinLock ?? `cluster:pid:${(Math.random() * Number.MAX_SAFE_INTEGER) | 0}`
|
|
87
|
+
const taken = (yield* conn.executeValues(
|
|
88
|
+
`SELECT GET_LOCK('${name}', 10), IS_USED_LOCK('${name}')`,
|
|
89
|
+
[]
|
|
90
|
+
))[0] as [1 | null, number]
|
|
91
|
+
if (taken[0] === null) continue
|
|
92
|
+
return { pid: Number(taken[1]), pinLock: name }
|
|
93
|
+
}
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
// In milliseconds, capped to the largest value PostgreSQL accepts.
|
|
97
|
+
const idleSessionTimeout = Math.min(
|
|
98
|
+
Math.ceil(Duration.toMillis(Duration.fromInputUnsafe(config.shardLockExpiration))),
|
|
99
|
+
2147483647
|
|
100
|
+
)
|
|
101
|
+
|
|
66
102
|
// Keep all PostgreSQL and MySQL shard-lock operations on a rebuildable
|
|
67
103
|
// reserved connection, including when advisory locks are disabled.
|
|
68
|
-
const acquireLockConn = sql.onDialectOrElse({
|
|
104
|
+
const acquireLockConn = singleSession ? undefined : sql.onDialectOrElse({
|
|
69
105
|
pg: () =>
|
|
70
106
|
Effect.fnUntraced(function*(scope: Scope.Scope) {
|
|
71
107
|
const conn = yield* Effect.orDie(sql.reserve).pipe(
|
|
72
108
|
Scope.provide(scope)
|
|
73
109
|
)
|
|
110
|
+
// Advisory locks belong to the session, so a frozen runner whose
|
|
111
|
+
// connection stays open would hold them indefinitely. End the session
|
|
112
|
+
// once it has been idle for shardLockExpiration, which releases them.
|
|
113
|
+
// Runners holding shards use it at least every shardLockExpiration / 3.
|
|
114
|
+
// Servers without idle_session_timeout (before PostgreSQL 14) keep the
|
|
115
|
+
// session open.
|
|
74
116
|
const pid = disableAdvisoryLocks
|
|
75
117
|
? 0
|
|
76
|
-
: (yield* conn.executeValues(
|
|
118
|
+
: (yield* conn.executeValues(
|
|
119
|
+
`SELECT pg_backend_pid(), (SELECT set_config(name, '${idleSessionTimeout}', false) FROM pg_settings WHERE name = 'idle_session_timeout')`,
|
|
120
|
+
[]
|
|
121
|
+
))[0][0] as number
|
|
77
122
|
if (!disableAdvisoryLocks) {
|
|
78
123
|
yield* Scope.addFinalizerExit(scope, () =>
|
|
79
124
|
conn.executeRaw("SELECT pg_advisory_unlock_all()", []).pipe(
|
|
@@ -82,26 +127,17 @@ const makeStorage = Effect.fnUntraced(function*(options: {
|
|
|
82
127
|
Effect.ignoreCause
|
|
83
128
|
))
|
|
84
129
|
}
|
|
85
|
-
return [conn, pid] as const
|
|
130
|
+
return [conn, { pid, pinLock: undefined }] as const
|
|
86
131
|
}, Effect.orDie),
|
|
87
132
|
mysql: () =>
|
|
88
133
|
Effect.fnUntraced(function*(scope: Scope.Scope) {
|
|
89
134
|
const conn = yield* Effect.orDie(sql.reserve).pipe(
|
|
90
135
|
Scope.provide(scope)
|
|
91
136
|
)
|
|
92
|
-
if (disableAdvisoryLocks) return [conn, 0] as const
|
|
137
|
+
if (disableAdvisoryLocks) return [conn, { pid: 0, pinLock: undefined }] as const
|
|
93
138
|
// we need to get the connection id using IS_USED_LOCK to properly
|
|
94
139
|
// support vitess
|
|
95
|
-
|
|
96
|
-
while (pid === undefined) {
|
|
97
|
-
const address = `cluster:pid:${(Math.random() * Number.MAX_SAFE_INTEGER) | 0}`
|
|
98
|
-
const taken = (yield* conn.executeValues(
|
|
99
|
-
`SELECT GET_LOCK('${address}', 10), IS_USED_LOCK('${address}')`,
|
|
100
|
-
[]
|
|
101
|
-
))[0] as [1 | null, number]
|
|
102
|
-
if (taken[0] === null) continue
|
|
103
|
-
pid = taken[1]
|
|
104
|
-
}
|
|
140
|
+
const session: LockSession = yield* pinLockSession(conn)
|
|
105
141
|
if (!disableAdvisoryLocks) {
|
|
106
142
|
yield* Scope.addFinalizerExit(scope, () =>
|
|
107
143
|
conn.executeRaw("SELECT RELEASE_ALL_LOCKS()", []).pipe(
|
|
@@ -110,7 +146,7 @@ const makeStorage = Effect.fnUntraced(function*(options: {
|
|
|
110
146
|
Effect.ignoreCause
|
|
111
147
|
))
|
|
112
148
|
}
|
|
113
|
-
return [conn,
|
|
149
|
+
return [conn, session] as const
|
|
114
150
|
}, Effect.orDie),
|
|
115
151
|
orElse: () => undefined
|
|
116
152
|
})
|
|
@@ -134,7 +170,7 @@ const makeStorage = Effect.fnUntraced(function*(options: {
|
|
|
134
170
|
)
|
|
135
171
|
})
|
|
136
172
|
|
|
137
|
-
const rebuildLockConn = (from?: readonly [Connection,
|
|
173
|
+
const rebuildLockConn = (from?: readonly [Connection, LockSession]) => {
|
|
138
174
|
const rebuild = lockConn?.rebuildUnsafe({ from })
|
|
139
175
|
if (!rebuild) return Effect.void
|
|
140
176
|
// Bound release so a stalled connection cannot block subsequent rebuilds.
|
|
@@ -146,13 +182,13 @@ const makeStorage = Effect.fnUntraced(function*(options: {
|
|
|
146
182
|
}
|
|
147
183
|
// SQL failures replace the held connection; deadlines are handled by withLockOperationDeadline.
|
|
148
184
|
const useLockConn = <A, E, R>(
|
|
149
|
-
f: (conn: Connection, pid: number) => Effect.Effect<A, E, R>
|
|
185
|
+
f: (conn: Connection, pid: number, session: LockSession) => Effect.Effect<A, E, R>
|
|
150
186
|
): Effect.Effect<A, E, R> =>
|
|
151
187
|
Effect.flatMap(
|
|
152
188
|
lockConn!.await,
|
|
153
189
|
(held) =>
|
|
154
190
|
Effect.onError(
|
|
155
|
-
f(held[0], held[1]),
|
|
191
|
+
f(held[0], held[1].pid, held[1]),
|
|
156
192
|
(cause) => Cause.hasInterruptsOnly(cause) ? Effect.void : rebuildLockConn(held)
|
|
157
193
|
)
|
|
158
194
|
)
|
|
@@ -264,6 +300,40 @@ const makeStorage = Effect.fnUntraced(function*(options: {
|
|
|
264
300
|
return useLockConn((conn) => conn.executeValues(query, params))
|
|
265
301
|
}
|
|
266
302
|
|
|
303
|
+
// Splits shardIds into the advisory locks held by the lock session and the rest.
|
|
304
|
+
const pgHeldLocks = Effect.fnUntraced(function*(conn: Connection, pid: number, shardIds: ReadonlyArray<string>) {
|
|
305
|
+
const held: Array<string> = []
|
|
306
|
+
const notHeld = new Map(shardIds.map((shardId) => [lockNumbers.get(shardId)!, shardId]))
|
|
307
|
+
const takenLocks = yield* conn.executeValues(
|
|
308
|
+
`SELECT objid FROM pg_locks WHERE locktype = 'advisory' AND granted = true AND classid = ${pgLockNamespaceOid} AND objsubid = 2 AND pid = ${pid} ORDER BY objid`,
|
|
309
|
+
[]
|
|
310
|
+
)
|
|
311
|
+
for (let i = 0; i < takenLocks.length; i++) {
|
|
312
|
+
const lockNum = takenLocks[i][0] as number
|
|
313
|
+
const shardId = notHeld.get(lockNum)
|
|
314
|
+
if (shardId === undefined) continue
|
|
315
|
+
held.push(shardId)
|
|
316
|
+
notHeld.delete(lockNum)
|
|
317
|
+
}
|
|
318
|
+
return [held, notHeld] as const
|
|
319
|
+
})
|
|
320
|
+
|
|
321
|
+
const mysqlHeldLocks = Effect.fnUntraced(function*(conn: Connection, pid: number, shardIds: ReadonlyArray<string>) {
|
|
322
|
+
const takenLocks = (yield* conn.executeValues(`SELECT ${allMySqlTakenLocks}`, []))[0] as Array<number | null>
|
|
323
|
+
const held: Array<string> = []
|
|
324
|
+
const notHeld: Array<string> = []
|
|
325
|
+
for (let i = 0; i < shardIds.length; i++) {
|
|
326
|
+
const shardId = shardIds[i]
|
|
327
|
+
const lockTakenBy = takenLocks[shardIdsIndex.get(shardId)!]
|
|
328
|
+
if (lockTakenBy !== null && Number(lockTakenBy) === pid) {
|
|
329
|
+
held.push(shardId)
|
|
330
|
+
} else {
|
|
331
|
+
notHeld.push(shardId)
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return [held, notHeld] as const
|
|
335
|
+
})
|
|
336
|
+
|
|
267
337
|
const acquireLock = sql.onDialectOrElse({
|
|
268
338
|
pg: () => {
|
|
269
339
|
if (disableAdvisoryLocks) {
|
|
@@ -287,19 +357,7 @@ const makeStorage = Effect.fnUntraced(function*(options: {
|
|
|
287
357
|
}
|
|
288
358
|
return (_address: string, shardIds: ReadonlyArray<string>) =>
|
|
289
359
|
useLockConn(Effect.fnUntraced(function*(conn, pid) {
|
|
290
|
-
const acquiredShardIds
|
|
291
|
-
const toAcquire = new Map(shardIds.map((shardId) => [lockNumbers.get(shardId)!, shardId]))
|
|
292
|
-
const takenLocks = yield* conn.executeValues(
|
|
293
|
-
`SELECT objid FROM pg_locks WHERE locktype = 'advisory' AND granted = true AND classid = ${pgLockNamespaceOid} AND objsubid = 2 AND pid = ${pid} ORDER BY objid`,
|
|
294
|
-
[]
|
|
295
|
-
)
|
|
296
|
-
for (let i = 0; i < takenLocks.length; i++) {
|
|
297
|
-
const lockNum = takenLocks[i][0] as number
|
|
298
|
-
const shardId = toAcquire.get(lockNum)
|
|
299
|
-
if (shardId === undefined) continue
|
|
300
|
-
acquiredShardIds.push(shardId)
|
|
301
|
-
toAcquire.delete(lockNum)
|
|
302
|
-
}
|
|
360
|
+
const [acquiredShardIds, toAcquire] = yield* pgHeldLocks(conn, pid, shardIds)
|
|
303
361
|
if (toAcquire.size === 0) {
|
|
304
362
|
return acquiredShardIds
|
|
305
363
|
}
|
|
@@ -333,18 +391,7 @@ const makeStorage = Effect.fnUntraced(function*(options: {
|
|
|
333
391
|
}
|
|
334
392
|
return (_address: string, shardIds: ReadonlyArray<string>) =>
|
|
335
393
|
useLockConn(Effect.fnUntraced(function*(conn, pid) {
|
|
336
|
-
const
|
|
337
|
-
const acquiredShardIds: Array<string> = []
|
|
338
|
-
const toAcquire: Array<string> = []
|
|
339
|
-
for (let i = 0; i < shardIds.length; i++) {
|
|
340
|
-
const shardId = shardIds[i]
|
|
341
|
-
const lockTakenBy = takenLocks[shardIdsIndex.get(shardId)!]
|
|
342
|
-
if (lockTakenBy === pid) {
|
|
343
|
-
acquiredShardIds.push(shardId)
|
|
344
|
-
} else if (shardIds.includes(shardId)) {
|
|
345
|
-
toAcquire.push(shardId)
|
|
346
|
-
}
|
|
347
|
-
}
|
|
394
|
+
const [acquiredShardIds, toAcquire] = yield* mysqlHeldLocks(conn, pid, shardIds)
|
|
348
395
|
if (toAcquire.length === 0) {
|
|
349
396
|
return acquiredShardIds
|
|
350
397
|
}
|
|
@@ -457,9 +504,15 @@ const makeStorage = Effect.fnUntraced(function*(options: {
|
|
|
457
504
|
const stringLiteral = (s: string) => sql.literal(wrapString(s))
|
|
458
505
|
const stringLiteralArr = (arr: ReadonlyArray<string>) => sql.literal(`(${arr.map(wrapString).join(",")})`)
|
|
459
506
|
|
|
507
|
+
// An advisory lock refresh only confirms the locks the current lock session
|
|
508
|
+
// holds. A replaced session has lost its predecessor's locks, possibly to
|
|
509
|
+
// another runner in between, so reacquiring them here would hide the loss.
|
|
460
510
|
const refreshShards = sql.onDialectOrElse({
|
|
461
511
|
pg: () => {
|
|
462
|
-
if (!disableAdvisoryLocks)
|
|
512
|
+
if (!disableAdvisoryLocks) {
|
|
513
|
+
return (_address: string, shardIds: ReadonlyArray<string>) =>
|
|
514
|
+
useLockConn((conn, pid) => Effect.map(pgHeldLocks(conn, pid, shardIds), ([held]) => held))
|
|
515
|
+
}
|
|
463
516
|
return (address: string, shardIds: ReadonlyArray<string>) =>
|
|
464
517
|
sql`
|
|
465
518
|
WITH locked AS (
|
|
@@ -477,7 +530,10 @@ const makeStorage = Effect.fnUntraced(function*(options: {
|
|
|
477
530
|
)
|
|
478
531
|
},
|
|
479
532
|
mysql: () => {
|
|
480
|
-
if (!disableAdvisoryLocks)
|
|
533
|
+
if (!disableAdvisoryLocks) {
|
|
534
|
+
return (_address: string, shardIds: ReadonlyArray<string>) =>
|
|
535
|
+
useLockConn((conn, pid) => Effect.map(mysqlHeldLocks(conn, pid, shardIds), ([held]) => held))
|
|
536
|
+
}
|
|
481
537
|
return (address: string, shardIds: ReadonlyArray<string>) => {
|
|
482
538
|
const shardIdsStr = stringLiteralArr(shardIds)
|
|
483
539
|
return sql<Array<{ shard_id: string }>>`
|
|
@@ -552,7 +608,7 @@ const makeStorage = Effect.fnUntraced(function*(options: {
|
|
|
552
608
|
`SELECT IS_USED_LOCK('${lockName}')`,
|
|
553
609
|
[]
|
|
554
610
|
)
|
|
555
|
-
if (takenLocks.length === 0 || takenLocks[0][0] !== pid) return
|
|
611
|
+
if (takenLocks.length === 0 || Number(takenLocks[0][0]) !== pid) return
|
|
556
612
|
}
|
|
557
613
|
}))
|
|
558
614
|
},
|
|
@@ -573,7 +629,12 @@ const makeStorage = Effect.fnUntraced(function*(options: {
|
|
|
573
629
|
mysql: () => (address: string) =>
|
|
574
630
|
disableAdvisoryLocks
|
|
575
631
|
? sql`DELETE FROM ${locksTableSql} WHERE address = ${address}`.pipe(execWithLockConn)
|
|
576
|
-
:
|
|
632
|
+
: useLockConn(Effect.fnUntraced(function*(conn, _pid, session) {
|
|
633
|
+
yield* conn.executeRaw("SELECT RELEASE_ALL_LOCKS()", [])
|
|
634
|
+
// Releasing every lock also releases the pin, so take it again.
|
|
635
|
+
const pinned = yield* pinLockSession(conn, session.pinLock)
|
|
636
|
+
session.pid = pinned.pid
|
|
637
|
+
})),
|
|
577
638
|
orElse: () => (address: string) => sql`DELETE FROM ${locksTableSql} WHERE address = ${address}`
|
|
578
639
|
})
|
|
579
640
|
|
|
@@ -606,8 +667,16 @@ const makeStorage = Effect.fnUntraced(function*(options: {
|
|
|
606
667
|
withTracerDisabled
|
|
607
668
|
),
|
|
608
669
|
|
|
670
|
+
// A runner without shards leaves its lock connection idle, so the server
|
|
671
|
+
// may have ended the session, and the first operation on it fails and
|
|
672
|
+
// replaces it. Acquiring does not depend on the previous session, so retry
|
|
673
|
+
// once on the replacement.
|
|
609
674
|
acquire: (address, shardIds) =>
|
|
610
|
-
withLockOperationDeadline(
|
|
675
|
+
withLockOperationDeadline(
|
|
676
|
+
lockConn
|
|
677
|
+
? Effect.catch(acquireLock(address, shardIds), () => acquireLock(address, shardIds))
|
|
678
|
+
: acquireLock(address, shardIds)
|
|
679
|
+
).pipe(
|
|
611
680
|
PersistenceError.refail,
|
|
612
681
|
withTracerDisabled
|
|
613
682
|
),
|
|
@@ -667,8 +736,8 @@ const makeStorage = Effect.fnUntraced(function*(options: {
|
|
|
667
736
|
* permission to create tables. When `prefix` is omitted, `make` uses the
|
|
668
737
|
* `cluster` prefix, creating `cluster_runners`, `cluster_locks`, and the
|
|
669
738
|
* `cluster_runner_migrations` history table. PostgreSQL and MySQL use advisory
|
|
670
|
-
* locks unless `ShardingConfig.shardLockDisableAdvisory` is enabled
|
|
671
|
-
* dialects use rows in the locks table.
|
|
739
|
+
* locks unless `ShardingConfig.shardLockDisableAdvisory` is enabled or the
|
|
740
|
+
* client is PGlite; other dialects and PGlite use rows in the locks table.
|
|
672
741
|
*
|
|
673
742
|
* **Gotchas**
|
|
674
743
|
*
|