effect 4.0.4 → 4.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai-docs/package.json +1 -1
- package/ai-docs/src/06_schedule/10_schedules.ts +5 -4
- package/ai-docs/src/52_graphql/10_basics.ts +19 -13
- package/ai-docs/src/52_graphql/30_batching.ts +6 -4
- package/ai-docs/src/52_graphql/40_aliased-batching.ts +6 -4
- package/ai-docs/tsconfig.json +3 -1
- package/dist/Array.d.ts +207 -58
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +45 -22
- package/dist/Array.js.map +1 -1
- package/dist/Bytes.d.ts +79 -0
- package/dist/Bytes.d.ts.map +1 -0
- package/dist/Bytes.js +109 -0
- package/dist/Bytes.js.map +1 -0
- package/dist/Channel.d.ts +187 -14
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +142 -33
- package/dist/Channel.js.map +1 -1
- package/dist/ChannelSchema.d.ts.map +1 -1
- package/dist/ChannelSchema.js.map +1 -1
- package/dist/Chunk.d.ts +39 -21
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Chunk.js +26 -17
- package/dist/Chunk.js.map +1 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js +8 -3
- package/dist/Config.js.map +1 -1
- package/dist/ConfigProvider.d.ts.map +1 -1
- package/dist/ConfigProvider.js +34 -32
- package/dist/ConfigProvider.js.map +1 -1
- package/dist/Cron.d.ts +2 -2
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +6 -3
- package/dist/Cron.js.map +1 -1
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +58 -21
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +548 -182
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +261 -76
- package/dist/Effect.js.map +1 -1
- package/dist/Equivalence.d.ts +2 -1
- package/dist/Equivalence.d.ts.map +1 -1
- package/dist/Equivalence.js +12 -8
- package/dist/Equivalence.js.map +1 -1
- package/dist/Exit.d.ts +24 -9
- package/dist/Exit.d.ts.map +1 -1
- package/dist/Exit.js +8 -3
- package/dist/Exit.js.map +1 -1
- package/dist/FiberHandle.d.ts +2 -0
- package/dist/FiberHandle.d.ts.map +1 -1
- package/dist/FiberHandle.js +9 -4
- package/dist/FiberHandle.js.map +1 -1
- package/dist/FiberMap.d.ts +2 -0
- package/dist/FiberMap.d.ts.map +1 -1
- package/dist/FiberMap.js +5 -2
- package/dist/FiberMap.js.map +1 -1
- package/dist/FileSystem.d.ts +28 -9
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +3 -0
- package/dist/FileSystem.js.map +1 -1
- package/dist/Graph.d.ts.map +1 -1
- package/dist/Graph.js.map +1 -1
- package/dist/HashSet.d.ts.map +1 -1
- package/dist/HashSet.js.map +1 -1
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +18 -17
- package/dist/Iterable.js.map +1 -1
- package/dist/JsonSchema.d.ts +9 -3
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +19 -3
- package/dist/JsonSchema.js.map +1 -1
- package/dist/Layer.d.ts.map +1 -1
- package/dist/Layer.js +2 -2
- package/dist/Layer.js.map +1 -1
- package/dist/ManagedRuntime.d.ts +19 -1
- package/dist/ManagedRuntime.d.ts.map +1 -1
- package/dist/ManagedRuntime.js +62 -6
- package/dist/ManagedRuntime.js.map +1 -1
- package/dist/Match.d.ts +20 -6
- package/dist/Match.d.ts.map +1 -1
- package/dist/Match.js +2 -2
- package/dist/Match.js.map +1 -1
- package/dist/Metric.d.ts +132 -0
- package/dist/Metric.d.ts.map +1 -1
- package/dist/Metric.js +197 -25
- package/dist/Metric.js.map +1 -1
- package/dist/MutableHashMap.d.ts.map +1 -1
- package/dist/MutableHashMap.js.map +1 -1
- package/dist/Number.js +2 -2
- package/dist/Number.js.map +1 -1
- package/dist/Optic.d.ts.map +1 -1
- package/dist/Optic.js.map +1 -1
- package/dist/Path.d.ts +37 -5
- package/dist/Path.d.ts.map +1 -1
- package/dist/Path.js +44 -6
- package/dist/Path.js.map +1 -1
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +12 -7
- package/dist/PubSub.js.map +1 -1
- package/dist/Queue.d.ts +4 -1
- package/dist/Queue.d.ts.map +1 -1
- package/dist/Queue.js +4 -1
- package/dist/Queue.js.map +1 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +1 -1
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts +12 -7
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +9 -6
- package/dist/RcMap.js.map +1 -1
- package/dist/Record.d.ts +51 -0
- package/dist/Record.d.ts.map +1 -1
- package/dist/Record.js +17 -0
- package/dist/Record.js.map +1 -1
- package/dist/Ref.d.ts.map +1 -1
- package/dist/Ref.js.map +1 -1
- package/dist/References.d.ts +5 -4
- package/dist/References.d.ts.map +1 -1
- package/dist/References.js +5 -4
- package/dist/References.js.map +1 -1
- package/dist/RequestResolver.d.ts +31 -1
- package/dist/RequestResolver.d.ts.map +1 -1
- package/dist/RequestResolver.js +39 -4
- package/dist/RequestResolver.js.map +1 -1
- package/dist/Resource.js +1 -1
- package/dist/Resource.js.map +1 -1
- package/dist/Runtime.d.ts +3 -3
- package/dist/Runtime.d.ts.map +1 -1
- package/dist/Runtime.js +18 -15
- package/dist/Runtime.js.map +1 -1
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +383 -326
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +338 -17
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +5 -5
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +24 -8
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaGetter.d.ts +8 -3
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +15 -5
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaIssue.d.ts +4 -4
- package/dist/SchemaIssue.d.ts.map +1 -1
- package/dist/SchemaIssue.js +29 -51
- package/dist/SchemaIssue.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +56 -1
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +18 -0
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +1 -1
- package/dist/SchemaTransformation.js +1 -1
- package/dist/Scope.d.ts +12 -2
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +5 -0
- package/dist/Scope.js.map +1 -1
- package/dist/ScopedCache.d.ts +10 -7
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +9 -5
- package/dist/ScopedCache.js.map +1 -1
- package/dist/SemVer.d.ts +1196 -0
- package/dist/SemVer.d.ts.map +1 -0
- package/dist/SemVer.js +756 -0
- package/dist/SemVer.js.map +1 -0
- package/dist/SemVerRange.d.ts +559 -0
- package/dist/SemVerRange.d.ts.map +1 -0
- package/dist/SemVerRange.js +551 -0
- package/dist/SemVerRange.js.map +1 -0
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +6 -2
- package/dist/Sink.js.map +1 -1
- package/dist/Stream.d.ts +235 -8
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +145 -60
- package/dist/Stream.js.map +1 -1
- package/dist/String.d.ts +16 -2
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +25 -10
- package/dist/String.js.map +1 -1
- package/dist/TextDiff.d.ts +399 -0
- package/dist/TextDiff.d.ts.map +1 -0
- package/dist/TextDiff.js +634 -0
- package/dist/TextDiff.js.map +1 -0
- package/dist/TxHashMap.d.ts.map +1 -1
- package/dist/TxHashMap.js.map +1 -1
- package/dist/TxHashSet.d.ts.map +1 -1
- package/dist/TxHashSet.js.map +1 -1
- package/dist/TxRef.d.ts.map +1 -1
- package/dist/TxRef.js +3 -2
- package/dist/TxRef.js.map +1 -1
- package/dist/ai/AiError.d.ts +78 -14
- package/dist/ai/AiError.d.ts.map +1 -1
- package/dist/ai/AiError.js +51 -3
- package/dist/ai/AiError.js.map +1 -1
- package/dist/ai/Chat.d.ts +1 -2
- package/dist/ai/Chat.d.ts.map +1 -1
- package/dist/ai/Chat.js +6 -3
- package/dist/ai/Chat.js.map +1 -1
- package/dist/ai/Decision.d.ts +116 -20
- package/dist/ai/Decision.d.ts.map +1 -1
- package/dist/ai/Decision.js +37 -3
- package/dist/ai/Decision.js.map +1 -1
- package/dist/ai/DecisionModel.d.ts +129 -11
- package/dist/ai/DecisionModel.d.ts.map +1 -1
- package/dist/ai/DecisionModel.js +183 -95
- package/dist/ai/DecisionModel.js.map +1 -1
- package/dist/ai/EmbeddingModel.d.ts +10 -0
- package/dist/ai/EmbeddingModel.d.ts.map +1 -1
- package/dist/ai/EmbeddingModel.js +21 -7
- package/dist/ai/EmbeddingModel.js.map +1 -1
- package/dist/ai/LanguageModel.d.ts.map +1 -1
- package/dist/ai/LanguageModel.js +47 -35
- package/dist/ai/LanguageModel.js.map +1 -1
- package/dist/ai/McpClient.d.ts +289 -0
- package/dist/ai/McpClient.d.ts.map +1 -0
- package/dist/ai/McpClient.js +819 -0
- package/dist/ai/McpClient.js.map +1 -0
- package/dist/ai/McpClientError.d.ts +254 -0
- package/dist/ai/McpClientError.d.ts.map +1 -0
- package/dist/ai/McpClientError.js +260 -0
- package/dist/ai/McpClientError.js.map +1 -0
- package/dist/ai/McpProtocol.d.ts +2 -2
- package/dist/ai/McpProtocol.d.ts.map +1 -1
- package/dist/ai/McpSchema.d.ts +368 -235
- package/dist/ai/McpSchema.d.ts.map +1 -1
- package/dist/ai/McpSchema.js +94 -24
- package/dist/ai/McpSchema.js.map +1 -1
- package/dist/ai/McpServer.d.ts +6 -52
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +27 -50
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/Prompt.d.ts +22 -20
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +23 -1
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Response.d.ts +148 -4
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +35 -37
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +12 -4
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js.map +1 -1
- package/dist/ai/Toolkit.d.ts +48 -1
- package/dist/ai/Toolkit.d.ts.map +1 -1
- package/dist/ai/Toolkit.js +65 -12
- package/dist/ai/Toolkit.js.map +1 -1
- package/dist/ai/index.d.ts +10 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +10 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/internal/mcpCore.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js +2 -2
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js +2 -2
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +4 -7
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js +16 -2
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +3 -4
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2024_11_05.js +19 -13
- package/dist/ai/internal/mcpSchema/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2025_03_26.js +3 -2
- package/dist/ai/internal/mcpSchema/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2025_06_18.js +7 -7
- package/dist/ai/internal/mcpSchema/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2025_11_25.js +8 -8
- package/dist/ai/internal/mcpSchema/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2026_07_28.js +43 -42
- package/dist/ai/internal/mcpSchema/v2026_07_28.js.map +1 -1
- package/dist/cli/CliError.d.ts +42 -2
- package/dist/cli/CliError.d.ts.map +1 -1
- package/dist/cli/CliError.js +44 -5
- package/dist/cli/CliError.js.map +1 -1
- package/dist/cli/Command.d.ts +286 -2
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +107 -6
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Completions.d.ts +10 -0
- package/dist/cli/Completions.d.ts.map +1 -1
- package/dist/cli/Completions.js.map +1 -1
- package/dist/cli/Flag.d.ts +215 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +89 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/cli/GlobalFlag.js +3 -3
- package/dist/cli/GlobalFlag.js.map +1 -1
- package/dist/cli/Param.d.ts +194 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +86 -0
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/TerminalCapabilities.d.ts +84 -0
- package/dist/cli/TerminalCapabilities.d.ts.map +1 -0
- package/dist/cli/TerminalCapabilities.js +122 -0
- package/dist/cli/TerminalCapabilities.js.map +1 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/internal/command.d.ts +2 -1
- package/dist/cli/internal/command.d.ts.map +1 -1
- package/dist/cli/internal/command.js +7 -3
- package/dist/cli/internal/command.js.map +1 -1
- package/dist/cli/internal/completions/bash.js +7 -5
- package/dist/cli/internal/completions/bash.js.map +1 -1
- package/dist/cli/internal/completions/descriptor.js +16 -1
- package/dist/cli/internal/completions/descriptor.js.map +1 -1
- package/dist/cli/internal/completions/fish.js +12 -10
- package/dist/cli/internal/completions/fish.js.map +1 -1
- package/dist/cli/internal/completions/powershell.js +20 -10
- package/dist/cli/internal/completions/powershell.js.map +1 -1
- package/dist/cli/internal/completions/zsh.js +15 -8
- package/dist/cli/internal/completions/zsh.js.map +1 -1
- package/dist/cli/internal/formatter.d.ts +2 -0
- package/dist/cli/internal/formatter.d.ts.map +1 -0
- package/dist/cli/internal/formatter.js +15 -0
- package/dist/cli/internal/formatter.js.map +1 -0
- package/dist/cli/internal/lexer.js +24 -10
- package/dist/cli/internal/lexer.js.map +1 -1
- package/dist/cli/internal/parser.js +35 -15
- package/dist/cli/internal/parser.js.map +1 -1
- package/dist/cli/internal/wizard.d.ts.map +1 -1
- package/dist/cli/internal/wizard.js +2 -1
- package/dist/cli/internal/wizard.js.map +1 -1
- package/dist/cluster/ClusterCron.d.ts +29 -1
- package/dist/cluster/ClusterCron.d.ts.map +1 -1
- package/dist/cluster/ClusterCron.js +64 -32
- package/dist/cluster/ClusterCron.js.map +1 -1
- package/dist/cluster/ClusterMetrics.d.ts +143 -7
- package/dist/cluster/ClusterMetrics.d.ts.map +1 -1
- package/dist/cluster/ClusterMetrics.js +151 -7
- package/dist/cluster/ClusterMetrics.js.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts +2 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +98 -18
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/Entity.d.ts +2 -0
- package/dist/cluster/Entity.d.ts.map +1 -1
- package/dist/cluster/Entity.js.map +1 -1
- package/dist/cluster/MessageStorage.d.ts +21 -0
- package/dist/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/cluster/MessageStorage.js +20 -12
- package/dist/cluster/MessageStorage.js.map +1 -1
- package/dist/cluster/Runners.d.ts.map +1 -1
- package/dist/cluster/Runners.js +96 -37
- package/dist/cluster/Runners.js.map +1 -1
- package/dist/cluster/Sharding.d.ts +1 -0
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +95 -32
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +20 -0
- package/dist/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/cluster/ShardingConfig.js +4 -0
- package/dist/cluster/ShardingConfig.js.map +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +40 -50
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts +2 -2
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +10 -4
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +66 -9
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/devtools/DevTools.d.ts +3 -2
- package/dist/devtools/DevTools.d.ts.map +1 -1
- package/dist/devtools/DevTools.js +3 -2
- package/dist/devtools/DevTools.js.map +1 -1
- package/dist/devtools/DevToolsClient.d.ts +11 -0
- package/dist/devtools/DevToolsClient.d.ts.map +1 -1
- package/dist/devtools/DevToolsClient.js +31 -4
- package/dist/devtools/DevToolsClient.js.map +1 -1
- package/dist/encoding/Base64Url.d.ts +29 -0
- package/dist/encoding/Base64Url.d.ts.map +1 -1
- package/dist/encoding/Base64Url.js +29 -0
- package/dist/encoding/Base64Url.js.map +1 -1
- package/dist/encoding/Ini.d.ts.map +1 -1
- package/dist/encoding/Ini.js +3 -0
- package/dist/encoding/Ini.js.map +1 -1
- package/dist/encoding/JsonArray.d.ts +270 -0
- package/dist/encoding/JsonArray.d.ts.map +1 -0
- package/dist/encoding/JsonArray.js +691 -0
- package/dist/encoding/JsonArray.js.map +1 -0
- package/dist/encoding/Ndjson.d.ts +43 -4
- package/dist/encoding/Ndjson.d.ts.map +1 -1
- package/dist/encoding/Ndjson.js +169 -18
- package/dist/encoding/Ndjson.js.map +1 -1
- package/dist/encoding/SchemaBinary.d.ts +9 -1
- package/dist/encoding/SchemaBinary.d.ts.map +1 -1
- package/dist/encoding/SchemaBinary.js +12 -19
- package/dist/encoding/SchemaBinary.js.map +1 -1
- package/dist/encoding/Sse.js +1 -1
- package/dist/encoding/Sse.js.map +1 -1
- package/dist/encoding/Tar.d.ts +309 -0
- package/dist/encoding/Tar.d.ts.map +1 -0
- package/dist/encoding/Tar.js +1182 -0
- package/dist/encoding/Tar.js.map +1 -0
- package/dist/encoding/Toml.js +3 -3
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/encoding/Xml.d.ts +464 -0
- package/dist/encoding/Xml.d.ts.map +1 -0
- package/dist/encoding/Xml.js +1619 -0
- package/dist/encoding/Xml.js.map +1 -0
- package/dist/encoding/Yaml.d.ts +6 -2
- package/dist/encoding/Yaml.d.ts.map +1 -1
- package/dist/encoding/Yaml.js +97 -34
- package/dist/encoding/Yaml.js.map +1 -1
- package/dist/encoding/Zip.d.ts +413 -0
- package/dist/encoding/Zip.d.ts.map +1 -0
- package/dist/encoding/Zip.js +1255 -0
- package/dist/encoding/Zip.js.map +1 -0
- package/dist/encoding/index.d.ts +20 -0
- package/dist/encoding/index.d.ts.map +1 -1
- package/dist/encoding/index.js +20 -0
- package/dist/encoding/index.js.map +1 -1
- package/dist/eventlog/EventJournal.d.ts +90 -5
- package/dist/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/eventlog/EventJournal.js +488 -228
- package/dist/eventlog/EventJournal.js.map +1 -1
- package/dist/eventlog/EventLog.d.ts +180 -12
- package/dist/eventlog/EventLog.d.ts.map +1 -1
- package/dist/eventlog/EventLog.js +394 -146
- package/dist/eventlog/EventLog.js.map +1 -1
- package/dist/eventlog/EventLogEncryption.d.ts +36 -30
- package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/eventlog/EventLogEncryption.js +97 -38
- package/dist/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/eventlog/EventLogMessage.d.ts +74 -34
- package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
- package/dist/eventlog/EventLogMessage.js +45 -11
- package/dist/eventlog/EventLogMessage.js.map +1 -1
- package/dist/eventlog/EventLogRemote.d.ts +45 -8
- package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
- package/dist/eventlog/EventLogRemote.js +51 -14
- package/dist/eventlog/EventLogRemote.js.map +1 -1
- package/dist/eventlog/EventLogServer.d.ts +46 -3
- package/dist/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/eventlog/EventLogServer.js +119 -19
- package/dist/eventlog/EventLogServer.js.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.d.ts +23 -33
- package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.js +97 -70
- package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.d.ts +39 -5
- package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.js +151 -69
- package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/EventRow.d.ts +288 -0
- package/dist/eventlog/EventRow.d.ts.map +1 -0
- package/dist/eventlog/EventRow.js +435 -0
- package/dist/eventlog/EventRow.js.map +1 -0
- package/dist/eventlog/SqlEventJournal.d.ts +18 -18
- package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +387 -159
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +10 -18
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.js +179 -69
- package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts +23 -3
- package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.js +102 -51
- package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/index.d.ts +5 -0
- package/dist/eventlog/index.d.ts.map +1 -1
- package/dist/eventlog/index.js +5 -0
- package/dist/eventlog/index.js.map +1 -1
- package/dist/eventlog/internal/conflicts.d.ts +47 -0
- package/dist/eventlog/internal/conflicts.d.ts.map +1 -0
- package/dist/eventlog/internal/conflicts.js +92 -0
- package/dist/eventlog/internal/conflicts.js.map +1 -0
- package/dist/graphql/GraphQLClient.d.ts.map +1 -1
- package/dist/graphql/GraphQLClient.js +12 -5
- package/dist/graphql/GraphQLClient.js.map +1 -1
- package/dist/graphql/GraphQLClientError.d.ts +2 -2
- package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
- package/dist/graphql/GraphQLClientError.js +4 -18
- package/dist/graphql/GraphQLClientError.js.map +1 -1
- package/dist/graphql/GraphQLProtocol.d.ts +252 -11
- package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
- package/dist/graphql/GraphQLProtocol.js +99 -8
- package/dist/graphql/GraphQLProtocol.js.map +1 -1
- package/dist/graphql/GraphQLResolver.d.ts +3 -1
- package/dist/graphql/GraphQLResolver.d.ts.map +1 -1
- package/dist/graphql/GraphQLResolver.js +91 -19
- package/dist/graphql/GraphQLResolver.js.map +1 -1
- package/dist/http/FetchHttpClient.d.ts +13 -3
- package/dist/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/http/FetchHttpClient.js +56 -6
- package/dist/http/FetchHttpClient.js.map +1 -1
- package/dist/http/FindMyWay/internal/router.js +12 -1
- package/dist/http/FindMyWay/internal/router.js.map +1 -1
- package/dist/http/Headers.d.ts +230 -3
- package/dist/http/Headers.d.ts.map +1 -1
- package/dist/http/Headers.js +267 -5
- package/dist/http/Headers.js.map +1 -1
- package/dist/http/HttpClient.d.ts +105 -0
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +69 -17
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientError.d.ts.map +1 -1
- package/dist/http/HttpClientError.js +8 -6
- package/dist/http/HttpClientError.js.map +1 -1
- package/dist/http/HttpClientRequest.d.ts +274 -7
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +91 -3
- package/dist/http/HttpClientRequest.js.map +1 -1
- package/dist/http/HttpClientResponse.d.ts +53 -0
- package/dist/http/HttpClientResponse.d.ts.map +1 -1
- package/dist/http/HttpClientResponse.js +47 -0
- package/dist/http/HttpClientResponse.js.map +1 -1
- package/dist/http/HttpEffect.d.ts +6 -2
- package/dist/http/HttpEffect.d.ts.map +1 -1
- package/dist/http/HttpEffect.js +21 -17
- package/dist/http/HttpEffect.js.map +1 -1
- package/dist/http/HttpIncomingMessage.d.ts +2 -1
- package/dist/http/HttpIncomingMessage.d.ts.map +1 -1
- package/dist/http/HttpIncomingMessage.js +3 -23
- package/dist/http/HttpIncomingMessage.js.map +1 -1
- package/dist/http/HttpMiddleware.d.ts +179 -2
- package/dist/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/http/HttpMiddleware.js +226 -18
- package/dist/http/HttpMiddleware.js.map +1 -1
- package/dist/http/HttpRouter.d.ts.map +1 -1
- package/dist/http/HttpRouter.js +58 -14
- package/dist/http/HttpRouter.js.map +1 -1
- package/dist/http/HttpServerError.d.ts +5 -2
- package/dist/http/HttpServerError.d.ts.map +1 -1
- package/dist/http/HttpServerError.js +11 -7
- package/dist/http/HttpServerError.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +25 -5
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +38 -12
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/HttpServerResponse.d.ts +17 -8
- package/dist/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/http/HttpServerResponse.js +37 -21
- package/dist/http/HttpServerResponse.js.map +1 -1
- package/dist/http/HttpStaticServer.d.ts +0 -12
- package/dist/http/HttpStaticServer.d.ts.map +1 -1
- package/dist/http/HttpStaticServer.js +25 -17
- package/dist/http/HttpStaticServer.js.map +1 -1
- package/dist/http/HttpTraceContext.js +1 -1
- package/dist/http/HttpTraceContext.js.map +1 -1
- package/dist/http/MultipartParser/internal/contentType.d.ts +15 -1
- package/dist/http/MultipartParser/internal/contentType.d.ts.map +1 -1
- package/dist/http/MultipartParser/internal/contentType.js +87 -5
- package/dist/http/MultipartParser/internal/contentType.js.map +1 -1
- package/dist/http/MultipartParser/internal/headers.d.ts.map +1 -1
- package/dist/http/MultipartParser/internal/headers.js +4 -12
- package/dist/http/MultipartParser/internal/headers.js.map +1 -1
- package/dist/http/MultipartParser/internal/multipart.d.ts.map +1 -1
- package/dist/http/MultipartParser/internal/multipart.js +6 -27
- package/dist/http/MultipartParser/internal/multipart.js.map +1 -1
- package/dist/http/Url.d.ts.map +1 -1
- package/dist/http/Url.js +8 -2
- package/dist/http/Url.js.map +1 -1
- package/dist/http/UrlParams.d.ts +112 -8
- package/dist/http/UrlParams.d.ts.map +1 -1
- package/dist/http/UrlParams.js +141 -14
- package/dist/http/UrlParams.js.map +1 -1
- package/dist/http/internal/compression.d.ts +1 -1
- package/dist/http/internal/compression.d.ts.map +1 -1
- package/dist/http/internal/compression.js +2 -10
- package/dist/http/internal/compression.js.map +1 -1
- package/dist/http/internal/compressionBody.d.ts +2 -0
- package/dist/http/internal/compressionBody.d.ts.map +1 -0
- package/dist/http/internal/compressionBody.js +36 -0
- package/dist/http/internal/compressionBody.js.map +1 -0
- package/dist/http/internal/decompression.d.ts +2 -0
- package/dist/http/internal/decompression.d.ts.map +1 -0
- package/dist/http/internal/decompression.js +168 -0
- package/dist/http/internal/decompression.js.map +1 -0
- package/dist/http/internal/lazyStream.d.ts +2 -0
- package/dist/http/internal/lazyStream.d.ts.map +1 -0
- package/dist/http/internal/lazyStream.js +18 -0
- package/dist/http/internal/lazyStream.js.map +1 -0
- package/dist/http/internal/requestState.d.ts +2 -0
- package/dist/http/internal/requestState.d.ts.map +1 -0
- package/dist/http/internal/requestState.js +28 -0
- package/dist/http/internal/requestState.js.map +1 -0
- package/dist/http/internal/tracing.js +14 -4
- package/dist/http/internal/tracing.js.map +1 -1
- package/dist/http/internal/urlParams.d.ts +2 -0
- package/dist/http/internal/urlParams.d.ts.map +1 -0
- package/dist/http/internal/urlParams.js +4 -0
- package/dist/http/internal/urlParams.js.map +1 -0
- package/dist/http/internal/webResponse.d.ts +2 -0
- package/dist/http/internal/webResponse.d.ts.map +1 -0
- package/dist/http/internal/webResponse.js +12 -0
- package/dist/http/internal/webResponse.js.map +1 -0
- package/dist/http-api/HttpApi.js +1 -1
- package/dist/http-api/HttpApi.js.map +1 -1
- package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
- package/dist/http-api/HttpApiBuilder.js +121 -18
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +29 -4
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +85 -24
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts +55 -29
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +49 -5
- package/dist/http-api/HttpApiEndpoint.js.map +1 -1
- package/dist/http-api/HttpApiError.d.ts +58 -0
- package/dist/http-api/HttpApiError.d.ts.map +1 -1
- package/dist/http-api/HttpApiError.js +38 -12
- package/dist/http-api/HttpApiError.js.map +1 -1
- package/dist/http-api/HttpApiScalar.d.ts +2 -1
- package/dist/http-api/HttpApiScalar.d.ts.map +1 -1
- package/dist/http-api/HttpApiScalar.js +6 -3
- package/dist/http-api/HttpApiScalar.js.map +1 -1
- package/dist/http-api/HttpApiSchema.d.ts +191 -9
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +137 -4
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/http-api/HttpApiSwagger.d.ts +5 -0
- package/dist/http-api/HttpApiSwagger.d.ts.map +1 -1
- package/dist/http-api/HttpApiSwagger.js +14 -4
- package/dist/http-api/HttpApiSwagger.js.map +1 -1
- package/dist/http-api/HttpApiTest.d.ts +13 -2
- package/dist/http-api/HttpApiTest.d.ts.map +1 -1
- package/dist/http-api/HttpApiTest.js +30 -9
- package/dist/http-api/HttpApiTest.js.map +1 -1
- package/dist/http-api/OpenApi.d.ts +17 -3
- package/dist/http-api/OpenApi.d.ts.map +1 -1
- package/dist/http-api/OpenApi.js +57 -32
- package/dist/http-api/OpenApi.js.map +1 -1
- package/dist/http-api/internal/path.js +35 -10
- package/dist/http-api/internal/path.js.map +1 -1
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/core.js +18 -2
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/dateTime.js +19 -7
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +89 -76
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/graphql.js +12 -2
- package/dist/internal/graphql.js.map +1 -1
- package/dist/internal/hashMap.js +2 -2
- package/dist/internal/hashMap.js.map +1 -1
- package/dist/internal/hydration.d.ts +2 -0
- package/dist/internal/hydration.d.ts.map +1 -0
- package/dist/internal/hydration.js +15 -0
- package/dist/internal/hydration.js.map +1 -0
- package/dist/internal/inflate.d.ts +2 -0
- package/dist/internal/inflate.d.ts.map +1 -0
- package/dist/internal/inflate.js +680 -0
- package/dist/internal/inflate.js.map +1 -0
- package/dist/internal/record.js +6 -0
- package/dist/internal/record.js.map +1 -1
- package/dist/internal/request.js +20 -7
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/schedule.js +17 -22
- package/dist/internal/schedule.js.map +1 -1
- package/dist/internal/schema/fromJsonSchemaDocument.js +136 -126
- package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/interpreter.js +51 -36
- package/dist/internal/schema/interpreter.js.map +1 -1
- package/dist/internal/schema/standardSchema.js +34 -33
- package/dist/internal/schema/standardSchema.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +7 -2
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/schema/toCodec.js +86 -1
- package/dist/internal/schema/toCodec.js.map +1 -1
- package/dist/internal/schema/toFormatter.js +5 -5
- package/dist/internal/schema/toFormatter.js.map +1 -1
- package/dist/internal/schema/toJsonSchemaDocument.js +60 -38
- package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
- package/dist/internal/trie.js +1 -3
- package/dist/internal/trie.js.map +1 -1
- package/dist/internal/uuid.js +7 -3
- package/dist/internal/uuid.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/net/NetAddress.d.ts.map +1 -1
- package/dist/net/NetAddress.js +2 -8
- package/dist/net/NetAddress.js.map +1 -1
- package/dist/observability/Otlp.d.ts +15 -0
- package/dist/observability/Otlp.d.ts.map +1 -1
- package/dist/observability/Otlp.js +3 -0
- package/dist/observability/Otlp.js.map +1 -1
- package/dist/observability/OtlpExporter.d.ts +8 -0
- package/dist/observability/OtlpExporter.d.ts.map +1 -1
- package/dist/observability/OtlpExporter.js +15 -13
- package/dist/observability/OtlpExporter.js.map +1 -1
- package/dist/observability/OtlpLogger.d.ts +17 -0
- package/dist/observability/OtlpLogger.d.ts.map +1 -1
- package/dist/observability/OtlpLogger.js +14 -1
- package/dist/observability/OtlpLogger.js.map +1 -1
- package/dist/observability/OtlpMetrics.d.ts +17 -0
- package/dist/observability/OtlpMetrics.d.ts.map +1 -1
- package/dist/observability/OtlpMetrics.js +18 -3
- package/dist/observability/OtlpMetrics.js.map +1 -1
- package/dist/observability/OtlpResource.d.ts +3 -1
- package/dist/observability/OtlpResource.d.ts.map +1 -1
- package/dist/observability/OtlpResource.js +11 -4
- package/dist/observability/OtlpResource.js.map +1 -1
- package/dist/observability/OtlpSerialization.d.ts +5 -0
- package/dist/observability/OtlpSerialization.d.ts.map +1 -1
- package/dist/observability/OtlpSerialization.js +14 -3
- package/dist/observability/OtlpSerialization.js.map +1 -1
- package/dist/observability/OtlpTracer.d.ts +17 -0
- package/dist/observability/OtlpTracer.d.ts.map +1 -1
- package/dist/observability/OtlpTracer.js +15 -2
- package/dist/observability/OtlpTracer.js.map +1 -1
- package/dist/observability/internal/protobuf.d.ts +0 -9
- package/dist/observability/internal/protobuf.d.ts.map +1 -1
- package/dist/observability/internal/protobuf.js +2 -10
- package/dist/observability/internal/protobuf.js.map +1 -1
- package/dist/persistence/PersistedCache.d.ts.map +1 -1
- package/dist/persistence/PersistedCache.js +1 -1
- package/dist/persistence/PersistedCache.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +6 -2
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +162 -84
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/persistence/Persistence.d.ts +28 -0
- package/dist/persistence/Persistence.d.ts.map +1 -1
- package/dist/persistence/Persistence.js +36 -8
- package/dist/persistence/Persistence.js.map +1 -1
- package/dist/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/persistence/RateLimiter.js +8 -12
- package/dist/persistence/RateLimiter.js.map +1 -1
- package/dist/persistence/UserDirectories.d.ts +129 -0
- package/dist/persistence/UserDirectories.d.ts.map +1 -0
- package/dist/persistence/UserDirectories.js +178 -0
- package/dist/persistence/UserDirectories.js.map +1 -0
- package/dist/persistence/index.d.ts +5 -0
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +5 -0
- package/dist/persistence/index.js.map +1 -1
- package/dist/process/ChildProcess.d.ts +2 -1
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js.map +1 -1
- package/dist/reactivity/AsyncResult.d.ts +6 -0
- package/dist/reactivity/AsyncResult.d.ts.map +1 -1
- package/dist/reactivity/AsyncResult.js +28 -1
- package/dist/reactivity/AsyncResult.js.map +1 -1
- package/dist/reactivity/Atom.d.ts +69 -30
- package/dist/reactivity/Atom.d.ts.map +1 -1
- package/dist/reactivity/Atom.js +40 -15
- package/dist/reactivity/Atom.js.map +1 -1
- package/dist/reactivity/AtomHttpApi.d.ts +5 -5
- package/dist/reactivity/AtomHttpApi.d.ts.map +1 -1
- package/dist/reactivity/AtomHttpApi.js +1 -1
- package/dist/reactivity/AtomHttpApi.js.map +1 -1
- package/dist/reactivity/AtomRegistry.d.ts +2 -2
- package/dist/reactivity/AtomRegistry.d.ts.map +1 -1
- package/dist/reactivity/AtomRegistry.js +47 -10
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/reactivity/AtomRpc.d.ts +3 -3
- package/dist/reactivity/AtomRpc.d.ts.map +1 -1
- package/dist/reactivity/AtomRpc.js +1 -1
- package/dist/reactivity/AtomRpc.js.map +1 -1
- package/dist/reactivity/Hydration.d.ts.map +1 -1
- package/dist/reactivity/Hydration.js +46 -12
- package/dist/reactivity/Hydration.js.map +1 -1
- package/dist/reactivity/Reactivity.d.ts +71 -7
- package/dist/reactivity/Reactivity.d.ts.map +1 -1
- package/dist/reactivity/Reactivity.js +21 -12
- package/dist/reactivity/Reactivity.js.map +1 -1
- package/dist/rpc/Rpc.d.ts +18 -0
- package/dist/rpc/Rpc.d.ts.map +1 -1
- package/dist/rpc/Rpc.js +20 -0
- package/dist/rpc/Rpc.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +26 -2
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +202 -61
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts +15 -0
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +21 -5
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +9 -18
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/schema/Model.d.ts +1 -1
- package/dist/schema/VariantSchema.d.ts +22 -3
- package/dist/schema/VariantSchema.d.ts.map +1 -1
- package/dist/schema/VariantSchema.js +32 -18
- package/dist/schema/VariantSchema.js.map +1 -1
- package/dist/socket/Socket.d.ts +23 -1
- package/dist/socket/Socket.d.ts.map +1 -1
- package/dist/socket/Socket.js +36 -3
- package/dist/socket/Socket.js.map +1 -1
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +15 -3
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +151 -12
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +156 -34
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/SqlResolver.d.ts +9 -0
- package/dist/sql/SqlResolver.d.ts.map +1 -1
- package/dist/sql/SqlResolver.js +9 -0
- package/dist/sql/SqlResolver.js.map +1 -1
- package/dist/sql/Statement.d.ts +3 -1
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +24 -5
- package/dist/sql/Statement.js.map +1 -1
- package/dist/testing/TestClock.d.ts +16 -3
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +115 -23
- package/dist/testing/TestClock.js.map +1 -1
- package/dist/testing/TestSchema.d.ts +7 -1
- package/dist/testing/TestSchema.d.ts.map +1 -1
- package/dist/testing/TestSchema.js +9 -3
- package/dist/testing/TestSchema.js.map +1 -1
- package/dist/workflow/Activity.js +1 -0
- package/dist/workflow/Activity.js.map +1 -1
- package/dist/workflow/Workflow.d.ts +22 -0
- package/dist/workflow/Workflow.d.ts.map +1 -1
- package/dist/workflow/Workflow.js +15 -3
- package/dist/workflow/Workflow.js.map +1 -1
- package/dist/workflow/WorkflowEngine.d.ts +20 -1
- package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +52 -24
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +13 -3
- package/src/Array.ts +223 -61
- package/src/Bytes.ts +111 -0
- package/src/Channel.ts +287 -439
- package/src/ChannelSchema.ts +1 -49
- package/src/Chunk.ts +55 -61
- package/src/Config.ts +12 -86
- package/src/ConfigProvider.ts +41 -44
- package/src/Cron.ts +6 -3
- package/src/Duration.ts +70 -21
- package/src/Effect.ts +642 -220
- package/src/Equivalence.ts +7 -4
- package/src/Exit.ts +24 -9
- package/src/FiberHandle.ts +10 -9
- package/src/FiberMap.ts +13 -66
- package/src/FileSystem.ts +33 -9
- package/src/Graph.ts +171 -1263
- package/src/HashSet.ts +0 -60
- package/src/Iterable.ts +15 -14
- package/src/JsonSchema.ts +28 -3
- package/src/Layer.ts +2 -2
- package/src/ManagedRuntime.ts +72 -6
- package/src/Match.ts +65 -12
- package/src/Metric.ts +249 -507
- package/src/MutableHashMap.ts +4 -473
- package/src/Number.ts +2 -2
- package/src/Optic.ts +17 -332
- package/src/Path.ts +61 -8
- package/src/PubSub.ts +12 -7
- package/src/Queue.ts +5 -37
- package/src/Random.ts +1 -1
- package/src/RcMap.ts +14 -8
- package/src/Record.ts +51 -0
- package/src/Ref.ts +7 -104
- package/src/References.ts +5 -4
- package/src/RequestResolver.ts +46 -87
- package/src/Resource.ts +1 -1
- package/src/Runtime.ts +19 -18
- package/src/Schedule.ts +2 -94
- package/src/Schema.ts +596 -348
- package/src/SchemaAST.ts +20 -9
- package/src/SchemaGetter.ts +22 -5
- package/src/SchemaIssue.ts +44 -53
- package/src/SchemaRepresentation.ts +64 -1
- package/src/SchemaTransformation.ts +1 -1
- package/src/Scope.ts +12 -2
- package/src/ScopedCache.ts +17 -142
- package/src/SemVer.ts +1528 -0
- package/src/SemVerRange.ts +883 -0
- package/src/Sink.ts +6 -2
- package/src/Stream.ts +334 -1011
- package/src/String.ts +25 -12
- package/src/TextDiff.ts +766 -0
- package/src/TxHashMap.ts +1 -103
- package/src/TxHashSet.ts +48 -753
- package/src/TxRef.ts +4 -2
- package/src/ai/AiError.ts +69 -5
- package/src/ai/Chat.ts +10 -5
- package/src/ai/Decision.ts +119 -22
- package/src/ai/DecisionModel.ts +265 -109
- package/src/ai/EmbeddingModel.ts +25 -13
- package/src/ai/LanguageModel.ts +57 -51
- package/src/ai/McpClient.ts +1211 -0
- package/src/ai/McpClientError.ts +329 -0
- package/src/ai/McpProtocol.ts +2 -2
- package/src/ai/McpSchema.ts +153 -35
- package/src/ai/McpServer.ts +232 -275
- package/src/ai/Prompt.ts +49 -35
- package/src/ai/Response.ts +195 -65
- package/src/ai/Tool.ts +12 -4
- package/src/ai/Toolkit.ts +78 -10
- package/src/ai/index.ts +12 -0
- package/src/ai/internal/mcpCore.ts +13 -14
- package/src/ai/internal/mcpProtocol/v2024_11_05.ts +1 -1
- package/src/ai/internal/mcpProtocol/v2025_03_26.ts +1 -1
- package/src/ai/internal/mcpProtocol/v2025_06_18.ts +3 -3
- package/src/ai/internal/mcpProtocol/v2025_11_25.ts +3 -3
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +12 -14
- package/src/ai/internal/mcpProtocol.ts +22 -2
- package/src/ai/internal/mcpRuntime.ts +3 -4
- package/src/ai/internal/mcpSchema/v2024_11_05.ts +20 -13
- package/src/ai/internal/mcpSchema/v2025_03_26.ts +4 -2
- package/src/ai/internal/mcpSchema/v2025_06_18.ts +7 -7
- package/src/ai/internal/mcpSchema/v2025_11_25.ts +8 -8
- package/src/ai/internal/mcpSchema/v2026_07_28.ts +44 -42
- package/src/cli/CliError.ts +49 -4
- package/src/cli/Command.ts +316 -9
- package/src/cli/Completions.ts +10 -0
- package/src/cli/Flag.ts +218 -0
- package/src/cli/GlobalFlag.ts +3 -3
- package/src/cli/Param.ts +218 -0
- package/src/cli/TerminalCapabilities.ts +156 -0
- package/src/cli/index.ts +6 -0
- package/src/cli/internal/command.ts +10 -4
- package/src/cli/internal/completions/bash.ts +7 -5
- package/src/cli/internal/completions/descriptor.ts +20 -1
- package/src/cli/internal/completions/fish.ts +12 -10
- package/src/cli/internal/completions/powershell.ts +25 -13
- package/src/cli/internal/completions/zsh.ts +15 -8
- package/src/cli/internal/formatter.ts +18 -0
- package/src/cli/internal/lexer.ts +12 -5
- package/src/cli/internal/parser.ts +43 -14
- package/src/cli/internal/wizard.ts +2 -1
- package/src/cluster/ClusterCron.ts +94 -35
- package/src/cluster/ClusterMetrics.ts +149 -7
- package/src/cluster/ClusterWorkflowEngine.ts +164 -53
- package/src/cluster/Entity.ts +4 -0
- package/src/cluster/MessageStorage.ts +21 -3
- package/src/cluster/Runners.ts +145 -72
- package/src/cluster/Sharding.ts +118 -38
- package/src/cluster/ShardingConfig.ts +15 -0
- package/src/cluster/SqlMessageStorage.ts +58 -55
- package/src/cluster/SqlRunnerStorage.ts +10 -4
- package/src/cluster/internal/entityManager.ts +81 -11
- package/src/devtools/DevTools.ts +3 -2
- package/src/devtools/DevToolsClient.ts +27 -10
- package/src/encoding/Base64Url.ts +31 -0
- package/src/encoding/Ini.ts +3 -0
- package/src/encoding/JsonArray.ts +849 -0
- package/src/encoding/Ndjson.ts +211 -20
- package/src/encoding/SchemaBinary.ts +14 -48
- package/src/encoding/Sse.ts +1 -1
- package/src/encoding/Tar.ts +1417 -0
- package/src/encoding/Toml.ts +3 -3
- package/src/encoding/Xml.ts +2037 -0
- package/src/encoding/Yaml.ts +108 -36
- package/src/encoding/Zip.ts +1558 -0
- package/src/encoding/index.ts +24 -0
- package/src/eventlog/EventJournal.ts +611 -227
- package/src/eventlog/EventLog.ts +496 -196
- package/src/eventlog/EventLogEncryption.ts +128 -43
- package/src/eventlog/EventLogMessage.ts +62 -11
- package/src/eventlog/EventLogRemote.ts +77 -21
- package/src/eventlog/EventLogServer.ts +162 -20
- package/src/eventlog/EventLogServerEncrypted.ts +121 -80
- package/src/eventlog/EventLogServerUnencrypted.ts +180 -77
- package/src/eventlog/EventRow.ts +706 -0
- package/src/eventlog/SqlEventJournal.ts +453 -173
- package/src/eventlog/SqlEventLogServerEncrypted.ts +212 -83
- package/src/eventlog/SqlEventLogServerUnencrypted.ts +141 -62
- package/src/eventlog/index.ts +6 -0
- package/src/eventlog/internal/conflicts.ts +123 -0
- package/src/graphql/GraphQLClient.ts +17 -5
- package/src/graphql/GraphQLClientError.ts +5 -12
- package/src/graphql/GraphQLProtocol.ts +277 -20
- package/src/graphql/GraphQLResolver.ts +109 -230
- package/src/http/FetchHttpClient.ts +61 -8
- package/src/http/FindMyWay/internal/router.ts +13 -1
- package/src/http/Headers.ts +343 -163
- package/src/http/HttpClient.ts +144 -136
- package/src/http/HttpClientError.ts +10 -6
- package/src/http/HttpClientRequest.ts +315 -11
- package/src/http/HttpClientResponse.ts +71 -0
- package/src/http/HttpEffect.ts +25 -33
- package/src/http/HttpIncomingMessage.ts +3 -23
- package/src/http/HttpMiddleware.ts +265 -28
- package/src/http/HttpRouter.ts +67 -14
- package/src/http/HttpServerError.ts +14 -7
- package/src/http/HttpServerRequest.ts +73 -14
- package/src/http/HttpServerResponse.ts +49 -23
- package/src/http/HttpStaticServer.ts +29 -19
- package/src/http/HttpTraceContext.ts +1 -1
- package/src/http/MultipartParser/internal/contentType.ts +107 -6
- package/src/http/MultipartParser/internal/headers.ts +4 -16
- package/src/http/MultipartParser/internal/multipart.ts +10 -32
- package/src/http/Url.ts +8 -2
- package/src/http/UrlParams.ts +225 -26
- package/src/http/internal/compression.ts +3 -17
- package/src/http/internal/compressionBody.ts +56 -0
- package/src/http/internal/decompression.ts +235 -0
- package/src/http/internal/lazyStream.ts +25 -0
- package/src/http/internal/requestState.ts +33 -0
- package/src/http/internal/tracing.ts +21 -4
- package/src/http/internal/urlParams.ts +5 -0
- package/src/http/internal/webResponse.ts +20 -0
- package/src/http-api/HttpApi.ts +1 -1
- package/src/http-api/HttpApiBuilder.ts +151 -23
- package/src/http-api/HttpApiClient.ts +160 -31
- package/src/http-api/HttpApiEndpoint.ts +144 -33
- package/src/http-api/HttpApiError.ts +55 -0
- package/src/http-api/HttpApiScalar.ts +4 -3
- package/src/http-api/HttpApiSchema.ts +275 -13
- package/src/http-api/HttpApiSwagger.ts +11 -4
- package/src/http-api/HttpApiTest.ts +33 -9
- package/src/http-api/OpenApi.ts +84 -42
- package/src/http-api/internal/path.ts +40 -12
- package/src/index.ts +24 -0
- package/src/internal/core.ts +22 -2
- package/src/internal/dateTime.ts +20 -7
- package/src/internal/effect.ts +125 -88
- package/src/internal/graphql.ts +30 -7
- package/src/internal/hashMap.ts +2 -2
- package/src/internal/hydration.ts +15 -0
- package/src/internal/inflate.ts +710 -0
- package/src/internal/record.ts +6 -0
- package/src/internal/request.ts +21 -6
- package/src/internal/schedule.ts +20 -39
- package/src/internal/schema/fromJsonSchemaDocument.ts +262 -193
- package/src/internal/schema/interpreter.ts +58 -45
- package/src/internal/schema/standardSchema.ts +32 -30
- package/src/internal/schema/toCodeDocument.ts +8 -3
- package/src/internal/schema/toCodec.ts +116 -1
- package/src/internal/schema/toFormatter.ts +6 -6
- package/src/internal/schema/toJsonSchemaDocument.ts +69 -39
- package/src/internal/trie.ts +1 -3
- package/src/internal/uuid.ts +15 -10
- package/src/internal/version.ts +1 -1
- package/src/net/NetAddress.ts +2 -9
- package/src/observability/Otlp.ts +18 -0
- package/src/observability/OtlpExporter.ts +19 -15
- package/src/observability/OtlpLogger.ts +31 -2
- package/src/observability/OtlpMetrics.ts +35 -4
- package/src/observability/OtlpResource.ts +16 -6
- package/src/observability/OtlpSerialization.ts +17 -3
- package/src/observability/OtlpTracer.ts +32 -3
- package/src/observability/internal/protobuf.ts +2 -10
- package/src/persistence/PersistedCache.ts +3 -1
- package/src/persistence/PersistedQueue.ts +223 -153
- package/src/persistence/Persistence.ts +64 -30
- package/src/persistence/RateLimiter.ts +18 -21
- package/src/persistence/UserDirectories.ts +273 -0
- package/src/persistence/index.ts +6 -0
- package/src/process/ChildProcess.ts +2 -1
- package/src/reactivity/AsyncResult.ts +35 -38
- package/src/reactivity/Atom.ts +134 -166
- package/src/reactivity/AtomHttpApi.ts +10 -16
- package/src/reactivity/AtomRegistry.ts +53 -30
- package/src/reactivity/AtomRpc.ts +6 -22
- package/src/reactivity/Hydration.ts +53 -12
- package/src/reactivity/Reactivity.ts +97 -39
- package/src/rpc/Rpc.ts +21 -0
- package/src/rpc/RpcClient.ts +285 -104
- package/src/rpc/RpcSerialization.ts +21 -5
- package/src/rpc/RpcServer.ts +11 -20
- package/src/schema/VariantSchema.ts +86 -22
- package/src/socket/Socket.ts +45 -20
- package/src/sql/Migrator.ts +19 -9
- package/src/sql/SqlClient.ts +275 -36
- package/src/sql/SqlResolver.ts +9 -0
- package/src/sql/Statement.ts +35 -8
- package/src/testing/TestClock.ts +147 -29
- package/src/testing/TestSchema.ts +9 -3
- package/src/workflow/Activity.ts +1 -0
- package/src/workflow/Workflow.ts +31 -5
- package/src/workflow/WorkflowEngine.ts +93 -31
- package/dist/http/internal/preResponseHandler.d.ts +0 -2
- package/dist/http/internal/preResponseHandler.d.ts.map +0 -1
- package/dist/http/internal/preResponseHandler.js +0 -14
- package/dist/http/internal/preResponseHandler.js.map +0 -1
- package/src/http/internal/preResponseHandler.ts +0 -19
|
@@ -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,95 +45,245 @@ 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
256
|
execute: entries => sql`INSERT INTO ${entryTableSql} ${sql.insert(entries)} ON CONFLICT DO NOTHING`
|
|
115
257
|
});
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
258
|
+
const insertSources = (entries, remoteId) => sql`INSERT INTO ${sourcesTableSql} ${sql.insert(entries.map(entry => ({
|
|
259
|
+
entry_id: entry.id,
|
|
260
|
+
remote_id: remoteId
|
|
261
|
+
})))} ON CONFLICT DO NOTHING`;
|
|
262
|
+
// Serialize writers so checkpoints cannot skip out-of-order commits.
|
|
263
|
+
// Lock before callbacks in both paths to avoid projection-row deadlocks.
|
|
264
|
+
const lockWriters = sql.onDialectOrElse({
|
|
265
|
+
pg: () => Effect.asVoid(sql`LOCK TABLE ${sequenceTableSql} IN SHARE ROW EXCLUSIVE MODE`),
|
|
266
|
+
orElse: () => Effect.void
|
|
119
267
|
});
|
|
268
|
+
const insertSequence = entries => sql`INSERT INTO ${sequenceTableSql} ${sql.insert(entries.map(entry => ({
|
|
269
|
+
entry_id: entry.id
|
|
270
|
+
})))} ON CONFLICT DO NOTHING`;
|
|
271
|
+
const decodeCursorRows = Schema.decodeUnknownEffect(CursorRowArray);
|
|
272
|
+
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));
|
|
273
|
+
// Cursors only move forward.
|
|
274
|
+
const writeCursor = (remoteId, next) => sql`
|
|
275
|
+
INSERT INTO ${remoteCursorsTableSql} ${sql.insert({
|
|
276
|
+
remote_id: remoteId,
|
|
277
|
+
next_sequence: next
|
|
278
|
+
})}
|
|
279
|
+
ON CONFLICT (remote_id) DO UPDATE SET next_sequence = excluded.next_sequence
|
|
280
|
+
WHERE ${remoteCursorsTableSql}.next_sequence < excluded.next_sequence
|
|
281
|
+
`;
|
|
120
282
|
const pubsub = yield* PubSub.unbounded();
|
|
283
|
+
const clock = yield* Clock.Clock;
|
|
121
284
|
const writeFromRemote = Effect.fnUntraced(function* (options) {
|
|
122
285
|
const entries = options.entries.map(remoteEntry => remoteEntry.entry);
|
|
123
|
-
|
|
124
|
-
remote_id: options.remoteId,
|
|
125
|
-
entry_id: remoteEntry.entry.id,
|
|
126
|
-
sequence: remoteEntry.remoteSequence
|
|
127
|
-
}));
|
|
286
|
+
yield* lockWriters;
|
|
128
287
|
const existingIds = new Set();
|
|
129
288
|
if (entries.length > 0) {
|
|
130
289
|
yield* sql`SELECT id FROM ${entryTableSql} WHERE ${sql.in("id", entries.map(entry => entry.id))}`.pipe(Effect.flatMap(decodeEntryIdRows), Effect.tap(rows => Effect.sync(() => {
|
|
@@ -133,86 +292,161 @@ export const make = options => Effect.gen(function* () {
|
|
|
133
292
|
}
|
|
134
293
|
})));
|
|
135
294
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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
|
-
ORDER BY timestamp ASC
|
|
153
|
-
`.pipe(Effect.flatMap(decodeEntryRows), Effect.map(toEntries));
|
|
154
|
-
yield* options.effect({
|
|
155
|
-
entry,
|
|
156
|
-
conflicts
|
|
305
|
+
if (Arr.isReadonlyArrayNonEmpty(compacted)) {
|
|
306
|
+
const index = new ConflictIndex(compacted);
|
|
307
|
+
const primaryKeys = Array.from(new Set(compacted.map(entry => entry.primaryKey)));
|
|
308
|
+
// Match the hash index; exact predicates below rule out hash collisions.
|
|
309
|
+
const hashed = sql.onDialectOrElse({
|
|
310
|
+
pg: () => [sql`md5(event) IN (${sql.csv(index.events.map(event => sql`md5(${event})`))})`, sql`md5(primary_key) IN (${sql.csv(primaryKeys.map(primaryKey => sql`md5(${primaryKey})`))})`],
|
|
311
|
+
orElse: () => []
|
|
157
312
|
});
|
|
313
|
+
const conflicts = sql.and([...hashed, sql.in("event", index.events), sql.in("primary_key", primaryKeys),
|
|
314
|
+
// A coarse filter: the index compares ids exactly.
|
|
315
|
+
sql`timestamp >= ${index.oldestMillis}`]);
|
|
316
|
+
const stored = yield* sql`SELECT * FROM ${entryTableSql} WHERE ${conflicts}`.pipe(Effect.flatMap(decodeEntryRows), Effect.map(toEntries));
|
|
317
|
+
for (const entry of stored) {
|
|
318
|
+
index.add(entry);
|
|
319
|
+
}
|
|
320
|
+
yield* options.effect(index.toBatch());
|
|
158
321
|
}
|
|
322
|
+
// Keep the incoming batch out of conflict queries and persist only after
|
|
323
|
+
// compaction and every callback have succeeded.
|
|
324
|
+
if (uncommitted.length > 0) {
|
|
325
|
+
const imported = uncommitted.map(remoteEntry => remoteEntry.entry);
|
|
326
|
+
yield* insertEntries(imported.map(toEntryRow));
|
|
327
|
+
yield* insertSequence(imported);
|
|
328
|
+
yield* insertSources(imported, options.remoteId);
|
|
329
|
+
}
|
|
330
|
+
// The change stream is ordered, so every earlier sequence is now known.
|
|
331
|
+
if (options.entries.length > 0) {
|
|
332
|
+
yield* writeCursor(options.remoteId, EventJournal.nextSequenceAfter(options.entries));
|
|
333
|
+
}
|
|
334
|
+
yield* EventJournal.warnIfAhead(clock, uncommitted.map(remoteEntry => remoteEntry.entry.id));
|
|
159
335
|
return {
|
|
160
336
|
duplicateEntries
|
|
161
337
|
};
|
|
162
338
|
});
|
|
339
|
+
// Other processes share the database but not the entry id sequence. Ids in
|
|
340
|
+
// the latest millisecond are few, and comparing them here avoids ordering
|
|
341
|
+
// id bytes in SQL.
|
|
342
|
+
const latestEntryIds = sql`
|
|
343
|
+
SELECT id FROM ${entryTableSql} WHERE timestamp = (SELECT MAX(timestamp) FROM ${entryTableSql})
|
|
344
|
+
`.pipe(Effect.flatMap(decodeEntryIdRows), Effect.map(rows => rows.map(row => row.id)));
|
|
345
|
+
const writeMany = ({
|
|
346
|
+
effect,
|
|
347
|
+
entries
|
|
348
|
+
}) => Effect.uninterruptibleMask(restore => Effect.gen(function* () {
|
|
349
|
+
yield* lockWriters;
|
|
350
|
+
// Rows visible here include an enclosing transaction's uncommitted
|
|
351
|
+
// ones, which local ids must also sort after.
|
|
352
|
+
const committed = yield* EventJournal.makeEntries(entries, yield* latestEntryIds);
|
|
353
|
+
const result = yield* restore(effect(committed)).pipe(Effect.mapError(error => new CallbackFailure(error)));
|
|
354
|
+
yield* insertEntries(committed.map(toEntryRow));
|
|
355
|
+
yield* insertSequence(committed);
|
|
356
|
+
return {
|
|
357
|
+
result,
|
|
358
|
+
committed
|
|
359
|
+
};
|
|
360
|
+
}).pipe(sql.withTransaction, Effect.mapError(error => error instanceof CallbackFailure ? error.error : error instanceof EventJournal.EventJournalError ? error : new EventJournal.EventJournalError({
|
|
361
|
+
cause: error,
|
|
362
|
+
method: "writeMany"
|
|
363
|
+
})), Effect.flatMap(({
|
|
364
|
+
committed,
|
|
365
|
+
result
|
|
366
|
+
}) => Effect.as(PubSub.publishAll(pubsub, committed), result)))).pipe(withTracerDisabled);
|
|
163
367
|
return EventJournal.EventJournal.of({
|
|
164
|
-
entries: sql`SELECT * FROM ${entryTableSql} ORDER BY timestamp ASC`.pipe(withTracerDisabled, Effect.flatMap(decodeEntryRows), Effect.map(
|
|
368
|
+
entries: sql`SELECT * FROM ${entryTableSql} ORDER BY timestamp ASC`.pipe(withTracerDisabled, Effect.flatMap(decodeEntryRows), Effect.map(toOrderedEntries), Effect.mapError(cause => new EventJournal.EventJournalError({
|
|
165
369
|
cause,
|
|
166
370
|
method: "entries"
|
|
167
371
|
}))),
|
|
168
|
-
|
|
372
|
+
entriesById: ids => ids.length === 0 ? Effect.succeed([]) : sql`SELECT * FROM ${entryTableSql} WHERE ${sql.in("id", ids)}`.pipe(withTracerDisabled, Effect.flatMap(decodeEntryRows), Effect.map(rows => {
|
|
373
|
+
const byId = new Map(toEntries(rows).map(entry => [entry.idString, entry]));
|
|
374
|
+
return ids.map(id => byId.get(Uuid.stringify(id)));
|
|
375
|
+
}), Effect.mapError(cause => new EventJournal.EventJournalError({
|
|
376
|
+
cause,
|
|
377
|
+
method: "entriesById"
|
|
378
|
+
}))),
|
|
379
|
+
write: ({
|
|
169
380
|
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({
|
|
381
|
+
...entry
|
|
382
|
+
}) => writeMany({
|
|
383
|
+
entries: [entry],
|
|
384
|
+
effect: entries => effect(entries[0])
|
|
385
|
+
}),
|
|
386
|
+
writeMany,
|
|
387
|
+
writeFromRemote: options => writeFromRemote(options).pipe(sql.withTransaction, withTracerDisabled, Effect.catchIf(e => e._tag !== "EventJournalError", cause => Effect.fail(new EventJournal.EventJournalError({
|
|
188
388
|
cause,
|
|
189
389
|
method: "writeFromRemote"
|
|
190
390
|
})))),
|
|
191
391
|
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({
|
|
392
|
+
const mapError = Effect.mapError(cause => new EventJournal.EventJournalError({
|
|
198
393
|
cause,
|
|
199
394
|
method: "withRemoteUncommited"
|
|
200
|
-
}))
|
|
201
|
-
|
|
202
|
-
|
|
395
|
+
}));
|
|
396
|
+
// Capture an upper bound so entries committed during upload remain pending.
|
|
397
|
+
const [{
|
|
398
|
+
checkpoint,
|
|
399
|
+
latest
|
|
400
|
+
}] = yield* sql`
|
|
401
|
+
SELECT
|
|
402
|
+
COALESCE((SELECT sequence FROM ${checkpointsTableSql} WHERE remote_id = ${remoteId}), 0) AS checkpoint,
|
|
403
|
+
COALESCE((SELECT MAX(sequence) FROM ${sequenceTableSql}), 0) AS latest
|
|
404
|
+
`.pipe(Effect.flatMap(decodeUploadBounds), mapError);
|
|
405
|
+
if (latest <= checkpoint) return yield* Effect.succeedNone;
|
|
406
|
+
const entries = yield* sql`
|
|
407
|
+
SELECT e.*
|
|
408
|
+
FROM ${sequenceTableSql} s
|
|
409
|
+
JOIN ${entryTableSql} e ON e.id = s.entry_id
|
|
410
|
+
WHERE s.sequence > ${checkpoint} AND
|
|
411
|
+
s.sequence <= ${latest} AND
|
|
412
|
+
NOT EXISTS (
|
|
413
|
+
SELECT 1 FROM ${sourcesTableSql} src WHERE src.entry_id = s.entry_id AND src.remote_id = ${remoteId}
|
|
414
|
+
)
|
|
415
|
+
`.pipe(Effect.flatMap(decodeEntryRows), Effect.map(toOrderedEntries), mapError);
|
|
416
|
+
// Uploads can complete out of order; the checkpoint only moves forward.
|
|
417
|
+
const saveCheckpoint = sql`
|
|
418
|
+
INSERT INTO ${checkpointsTableSql} ${sql.insert({
|
|
419
|
+
remote_id: remoteId,
|
|
420
|
+
sequence: latest
|
|
421
|
+
})}
|
|
422
|
+
ON CONFLICT (remote_id) DO UPDATE SET sequence = excluded.sequence
|
|
423
|
+
WHERE ${checkpointsTableSql}.sequence < excluded.sequence
|
|
424
|
+
`.pipe(mapError);
|
|
425
|
+
return yield* Effect.uninterruptibleMask(restore => restore(Arr.isReadonlyArrayNonEmpty(entries) ? Effect.asSome(f(entries)) : Effect.succeedNone).pipe(Effect.tap(saveCheckpoint)));
|
|
203
426
|
}, withTracerDisabled),
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
})
|
|
427
|
+
writeRemoteAcks: Effect.fnUntraced(function* ({
|
|
428
|
+
acks,
|
|
429
|
+
firstSequence,
|
|
430
|
+
remoteId
|
|
431
|
+
}) {
|
|
432
|
+
if (acks.length === 0) return;
|
|
433
|
+
const next = yield* readCursor(remoteId);
|
|
434
|
+
yield* writeCursor(remoteId, EventJournal.advanceSequence(next, acks, firstSequence));
|
|
435
|
+
}, _ => sql.withTransaction(_), _ => withTracerDisabled(_), Effect.mapError(cause => new EventJournal.EventJournalError({
|
|
436
|
+
cause,
|
|
437
|
+
method: "writeRemoteAcks"
|
|
438
|
+
}))),
|
|
439
|
+
nextRemoteSequence: remoteId => readCursor(remoteId).pipe(withTracerDisabled, Effect.mapError(cause => new EventJournal.EventJournalError({
|
|
209
440
|
cause,
|
|
210
441
|
method: "nextRemoteSequence"
|
|
211
442
|
}))),
|
|
212
443
|
changes: PubSub.subscribe(pubsub),
|
|
213
444
|
destroy: Effect.gen(function* () {
|
|
214
445
|
yield* sql`DROP TABLE ${entryTableSql}`;
|
|
215
|
-
yield* sql`DROP TABLE ${
|
|
446
|
+
yield* sql`DROP TABLE ${sequenceTableSql}`;
|
|
447
|
+
yield* sql`DROP TABLE ${sourcesTableSql}`;
|
|
448
|
+
yield* sql`DROP TABLE ${checkpointsTableSql}`;
|
|
449
|
+
yield* sql`DROP TABLE ${remoteCursorsTableSql}`;
|
|
216
450
|
}).pipe(withTracerDisabled, Effect.mapError(cause => new EventJournal.EventJournalError({
|
|
217
451
|
cause,
|
|
218
452
|
method: "destroy"
|
|
@@ -223,25 +457,11 @@ export const make = options => Effect.gen(function* () {
|
|
|
223
457
|
});
|
|
224
458
|
});
|
|
225
459
|
/**
|
|
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`.
|
|
460
|
+
* Provides a SQL-backed `EventJournal` from an existing `SqlClient` service.
|
|
239
461
|
*
|
|
240
462
|
* **Gotchas**
|
|
241
463
|
*
|
|
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.
|
|
464
|
+
* Creating or migrating the schema requires a writable connection.
|
|
245
465
|
*
|
|
246
466
|
* @see {@link make} for constructing the SQL-backed service directly
|
|
247
467
|
* @see {@link EventJournal.layerMemory} for an in-memory `EventJournal` layer
|
|
@@ -272,6 +492,10 @@ const EntryRow = /*#__PURE__*/Schema.Struct({
|
|
|
272
492
|
timestamp: SqlNatural
|
|
273
493
|
});
|
|
274
494
|
const EntryRowArray = /*#__PURE__*/Schema.Array(EntryRow);
|
|
495
|
+
const decodeUploadBounds = /*#__PURE__*/Schema.decodeUnknownEffect(/*#__PURE__*/Schema.Tuple([/*#__PURE__*/Schema.Struct({
|
|
496
|
+
checkpoint: SqlNatural,
|
|
497
|
+
latest: SqlNatural
|
|
498
|
+
})]));
|
|
275
499
|
const EntryIdRowArray = /*#__PURE__*/Schema.Array(/*#__PURE__*/Schema.Struct({
|
|
276
500
|
id: SqlEntryId
|
|
277
501
|
}));
|
|
@@ -290,11 +514,15 @@ const toEntryRow = entry => ({
|
|
|
290
514
|
payload: entry.payload,
|
|
291
515
|
timestamp: EventJournal.entryIdMillis(entry.id)
|
|
292
516
|
});
|
|
293
|
-
const
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
sequence: Schema.Natural
|
|
297
|
-
});
|
|
298
|
-
const RemoteRowArray = /*#__PURE__*/Schema.Array(RemoteRow);
|
|
517
|
+
const CursorRowArray = /*#__PURE__*/Schema.Array(/*#__PURE__*/Schema.Struct({
|
|
518
|
+
next_sequence: SqlNatural
|
|
519
|
+
}));
|
|
299
520
|
const withTracerDisabled = /*#__PURE__*/Effect.withTracerEnabled(false);
|
|
521
|
+
// Preserve callback errors without wrapping them as journal SQL errors.
|
|
522
|
+
class CallbackFailure {
|
|
523
|
+
error;
|
|
524
|
+
constructor(error) {
|
|
525
|
+
this.error = error;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
300
528
|
//# sourceMappingURL=SqlEventJournal.js.map
|