effect 4.0.5 → 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/tsconfig.json +3 -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 +125 -30
- 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/Duration.d.ts.map +1 -1
- package/dist/Duration.js +56 -16
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +487 -163
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +203 -37
- 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 +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/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/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.map +1 -1
- package/dist/Path.js +8 -1
- 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 +384 -332
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +333 -19
- 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 +4 -2
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +8 -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/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/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.map +1 -1
- package/dist/ai/McpServer.js +25 -22
- 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 +147 -3
- 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 +5 -0
- package/dist/cli/Completions.d.ts.map +1 -1
- package/dist/cli/Completions.js.map +1 -1
- package/dist/cli/Flag.d.ts +115 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +56 -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 +107 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +56 -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 +5 -2
- package/dist/cli/internal/command.js.map +1 -1
- package/dist/cli/internal/completions/bash.js +4 -3
- 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 +37 -11
- 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.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 +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 +65 -8
- 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/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/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/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 +93 -0
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +55 -16
- package/dist/http/HttpClient.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 +44 -2
- 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 +159 -13
- package/dist/http/HttpMiddleware.js.map +1 -1
- package/dist/http/HttpRouter.d.ts.map +1 -1
- package/dist/http/HttpRouter.js +7 -2
- 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 +5 -3
- 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 +36 -10
- 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 +21 -7
- 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 +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 +6 -1
- package/dist/http/Url.js.map +1 -1
- package/dist/http/internal/decompression.js +17 -11
- package/dist/http/internal/decompression.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/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 +83 -23
- 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 +1 -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 +85 -74
- package/dist/internal/effect.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/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/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/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.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 +196 -60
- 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 +143 -5
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +148 -27
- 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.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/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/Array.ts +128 -55
- package/src/Bytes.ts +111 -0
- package/src/Channel.ts +263 -436
- 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/Duration.ts +66 -16
- package/src/Effect.ts +502 -167
- 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 +10 -0
- 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/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 +9 -1
- 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 +591 -356
- 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 +8 -8
- package/src/TextDiff.ts +766 -0
- 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/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 +217 -220
- 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 +5 -0
- package/src/cli/Flag.ts +117 -0
- package/src/cli/GlobalFlag.ts +3 -3
- package/src/cli/Param.ts +122 -0
- package/src/cli/TerminalCapabilities.ts +156 -0
- package/src/cli/index.ts +6 -0
- package/src/cli/internal/command.ts +8 -3
- package/src/cli/internal/completions/bash.ts +4 -3
- 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 +84 -41
- package/src/cluster/Entity.ts +4 -0
- package/src/cluster/MessageStorage.ts +7 -0
- package/src/cluster/Runners.ts +76 -25
- 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 +80 -10
- 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/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/GraphQLClientError.ts +5 -12
- package/src/graphql/GraphQLProtocol.ts +12 -9
- package/src/graphql/GraphQLResolver.ts +90 -239
- 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 +126 -135
- package/src/http/HttpClientRequest.ts +142 -4
- 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 +180 -23
- package/src/http/HttpRouter.ts +8 -2
- package/src/http/HttpServerError.ts +6 -3
- package/src/http/HttpServerRequest.ts +71 -12
- package/src/http/HttpServerResponse.ts +49 -23
- package/src/http/HttpStaticServer.ts +25 -9
- 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 +6 -1
- package/src/http/internal/decompression.ts +26 -17
- package/src/http/internal/lazyStream.ts +25 -0
- package/src/http/internal/requestState.ts +33 -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 +158 -30
- 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 +1 -1
- package/src/internal/dateTime.ts +20 -7
- package/src/internal/effect.ts +120 -84
- 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/OtlpExporter.ts +5 -12
- package/src/observability/OtlpMetrics.ts +5 -3
- package/src/observability/OtlpResource.ts +16 -6
- package/src/observability/OtlpSerialization.ts +17 -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 +4 -38
- 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 +279 -103
- 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 +266 -29
- package/src/sql/SqlResolver.ts +9 -0
- package/src/sql/Statement.ts +35 -8
- package/src/testing/TestClock.ts +4 -1
- package/src/testing/TestSchema.ts +9 -3
- 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
package/src/rpc/RpcClient.ts
CHANGED
|
@@ -15,6 +15,7 @@ import type { NonEmptyReadonlyArray } from "../Array.ts"
|
|
|
15
15
|
import * as Cause from "../Cause.ts"
|
|
16
16
|
import * as Clock from "../Clock.ts"
|
|
17
17
|
import * as Context from "../Context.ts"
|
|
18
|
+
import * as Deferred from "../Deferred.ts"
|
|
18
19
|
import * as Duration from "../Duration.ts"
|
|
19
20
|
import * as Effect from "../Effect.ts"
|
|
20
21
|
import * as Exit from "../Exit.ts"
|
|
@@ -47,7 +48,14 @@ import * as RpcTracing from "./internal/tracing.ts"
|
|
|
47
48
|
import * as Rpc from "./Rpc.ts"
|
|
48
49
|
import { RpcClientDefect, RpcClientError } from "./RpcClientError.ts"
|
|
49
50
|
import type * as RpcGroup from "./RpcGroup.ts"
|
|
50
|
-
import type {
|
|
51
|
+
import type {
|
|
52
|
+
FromClient,
|
|
53
|
+
FromClientEncoded,
|
|
54
|
+
FromServer,
|
|
55
|
+
FromServerEncoded,
|
|
56
|
+
Request,
|
|
57
|
+
RequestEncoded
|
|
58
|
+
} from "./RpcMessage.ts"
|
|
51
59
|
import { constPing, isTerminalResponse, RequestId } from "./RpcMessage.ts"
|
|
52
60
|
import type * as RpcMiddleware from "./RpcMiddleware.ts"
|
|
53
61
|
import * as RpcSchema from "./RpcSchema.ts"
|
|
@@ -301,8 +309,11 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any, E, const Flatten extend
|
|
|
301
309
|
)
|
|
302
310
|
|
|
303
311
|
const clearEntries = Effect.fnUntraced(function*(exit: Exit.Exit<never>) {
|
|
304
|
-
|
|
305
|
-
|
|
312
|
+
// Resuming callers can synchronously start new requests.
|
|
313
|
+
const pending = Array.from(entries.values())
|
|
314
|
+
entries.clear()
|
|
315
|
+
// Once detached, every entry must complete even if delivery is interrupted.
|
|
316
|
+
for (const entry of pending) {
|
|
306
317
|
if (entry._tag === "Queue") {
|
|
307
318
|
yield* (exit._tag === "Success"
|
|
308
319
|
? Queue.end(entry.queue as any)
|
|
@@ -311,7 +322,7 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any, E, const Flatten extend
|
|
|
311
322
|
entry.resume(exit)
|
|
312
323
|
}
|
|
313
324
|
}
|
|
314
|
-
})
|
|
325
|
+
}, Effect.uninterruptible)
|
|
315
326
|
|
|
316
327
|
const onRequest = (rpc: Rpc.AnyWithProps) => {
|
|
317
328
|
const isStream = RpcSchema.isStreamSchema(rpc.successSchema)
|
|
@@ -420,6 +431,7 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any, E, const Flatten extend
|
|
|
420
431
|
)
|
|
421
432
|
fiber.addObserver((exit) => {
|
|
422
433
|
if (exit._tag === "Failure") {
|
|
434
|
+
entries.delete(id)
|
|
423
435
|
return resume(exit)
|
|
424
436
|
}
|
|
425
437
|
})
|
|
@@ -505,7 +517,10 @@ export const makeNoSerialization: <Rpcs extends Rpc.Any, E, const Flatten extend
|
|
|
505
517
|
}
|
|
506
518
|
).pipe(
|
|
507
519
|
span ? Effect.withParentSpan(span, { captureStackTrace: false }) : identity,
|
|
508
|
-
Effect.onError((cause) =>
|
|
520
|
+
Effect.onError((cause) => {
|
|
521
|
+
if (!Cause.hasInterruptsOnly(cause)) entries.delete(id)
|
|
522
|
+
return Queue.failCause(queue, cause)
|
|
523
|
+
}),
|
|
509
524
|
Effect.interruptible,
|
|
510
525
|
Effect.forkIn(scope, { startImmediately: true })
|
|
511
526
|
)
|
|
@@ -674,6 +689,9 @@ export const make: <Rpcs extends Rpc.Any, const Flatten extends boolean = false>
|
|
|
674
689
|
readonly schemas: RpcSchemas
|
|
675
690
|
}
|
|
676
691
|
const entries = new Map<RequestId, ClientEntry>()
|
|
692
|
+
// Set before the protocol stops running this client, so requests made while
|
|
693
|
+
// it shuts down are not handed to a transport that is being torn down.
|
|
694
|
+
let isClosing = false
|
|
677
695
|
|
|
678
696
|
const interruptRequest = (requestId: RequestId): Effect.Effect<void, RpcClientError> => {
|
|
679
697
|
if (!entries.has(requestId)) return Effect.void
|
|
@@ -702,13 +720,23 @@ export const make: <Rpcs extends Rpc.Any, const Flatten extends boolean = false>
|
|
|
702
720
|
return entry.schemas.encodePayload(message.payload).pipe(
|
|
703
721
|
Effect.provideContext(entry.context),
|
|
704
722
|
Effect.orDie,
|
|
705
|
-
Effect.flatMap((payload) =>
|
|
706
|
-
|
|
723
|
+
Effect.flatMap((payload) => {
|
|
724
|
+
// Checked after encoding, which can suspend while the client
|
|
725
|
+
// starts shutting down.
|
|
726
|
+
if (isClosing) {
|
|
727
|
+
entries.delete(message.id)
|
|
728
|
+
return Effect.interrupt
|
|
729
|
+
}
|
|
730
|
+
return send(clientId, {
|
|
707
731
|
...message,
|
|
708
732
|
id: message.id,
|
|
709
733
|
payload,
|
|
710
734
|
headers: Object.entries(message.headers)
|
|
711
735
|
}, collector && collector.readUnsafe())
|
|
736
|
+
}),
|
|
737
|
+
// An interrupted request keeps its entry until the interrupt is sent.
|
|
738
|
+
Effect.onError((cause) =>
|
|
739
|
+
Cause.hasInterruptsOnly(cause) ? Effect.void : Effect.sync(() => entries.delete(message.id))
|
|
712
740
|
)
|
|
713
741
|
) as Effect.Effect<void, RpcClientError>
|
|
714
742
|
}
|
|
@@ -769,15 +797,19 @@ export const make: <Rpcs extends Rpc.Any, const Flatten extends boolean = false>
|
|
|
769
797
|
})
|
|
770
798
|
) as Effect.Effect<void>
|
|
771
799
|
}
|
|
800
|
+
// Clear entries before resuming callers, as they can start new requests
|
|
772
801
|
case "Defect": {
|
|
802
|
+
entries.clear()
|
|
773
803
|
return write({ _tag: "Defect", clientId: 0, defect: decodeDefect(message.defect as any) })
|
|
774
804
|
}
|
|
775
805
|
case "ClientProtocolError": {
|
|
776
806
|
const exit = Exit.fail(message.error)
|
|
807
|
+
const requestIds = Array.from(entries.keys())
|
|
808
|
+
entries.clear()
|
|
777
809
|
return Effect.forEach(
|
|
778
|
-
|
|
810
|
+
requestIds,
|
|
779
811
|
(requestId) => write({ _tag: "Exit", clientId: 0, requestId, exit: exit as any })
|
|
780
|
-
)
|
|
812
|
+
).pipe(Effect.uninterruptible)
|
|
781
813
|
}
|
|
782
814
|
default: {
|
|
783
815
|
return Effect.void
|
|
@@ -788,6 +820,12 @@ export const make: <Rpcs extends Rpc.Any, const Flatten extends boolean = false>
|
|
|
788
820
|
Effect.interruptible,
|
|
789
821
|
Effect.forkScoped
|
|
790
822
|
)
|
|
823
|
+
// Finalizers run in reverse order, so this runs before `run` is interrupted.
|
|
824
|
+
yield* Effect.addFinalizer(() =>
|
|
825
|
+
Effect.sync(() => {
|
|
826
|
+
isClosing = true
|
|
827
|
+
})
|
|
828
|
+
)
|
|
791
829
|
|
|
792
830
|
return client
|
|
793
831
|
})
|
|
@@ -809,13 +847,15 @@ const makeRpcSchemas = (codecFor: RpcSerialization.CodecFor) => {
|
|
|
809
847
|
return entry
|
|
810
848
|
}
|
|
811
849
|
const streamSchemas = RpcSchema.getStreamSchemas(rpc.successSchema)
|
|
850
|
+
const parseOptions = Context.get(rpc.annotations, Rpc.ParseOptions)
|
|
812
851
|
entry = {
|
|
813
852
|
decodeChunk: Option.map(
|
|
814
853
|
streamSchemas,
|
|
815
|
-
(streamSchemas) =>
|
|
854
|
+
(streamSchemas) =>
|
|
855
|
+
Schema.decodeUnknownEffect(codecFor(Schema.NonEmptyArray(streamSchemas.success)), parseOptions)
|
|
816
856
|
),
|
|
817
|
-
encodePayload: Schema.encodeEffect(codecFor(rpc.payloadSchema)),
|
|
818
|
-
decodeExit: Schema.decodeUnknownEffect(codecFor(Rpc.exitSchema(rpc as any)))
|
|
857
|
+
encodePayload: Schema.encodeEffect(codecFor(rpc.payloadSchema), parseOptions),
|
|
858
|
+
decodeExit: Schema.decodeUnknownEffect(codecFor(Rpc.exitSchema(rpc as any)), parseOptions)
|
|
819
859
|
}
|
|
820
860
|
cache.set(rpc, entry)
|
|
821
861
|
return entry
|
|
@@ -913,119 +953,240 @@ export class Protocol extends Context.Service<Protocol, {
|
|
|
913
953
|
}
|
|
914
954
|
|
|
915
955
|
/**
|
|
916
|
-
* Creates a client `Protocol` that sends
|
|
956
|
+
* Creates a client `Protocol` that sends RPC requests through the supplied
|
|
917
957
|
* `HttpClient` and decodes responses with the current `RpcSerialization`.
|
|
918
958
|
*
|
|
959
|
+
* **Details**
|
|
960
|
+
*
|
|
961
|
+
* Each request is sent as its own HTTP request unless `batch` is set. With
|
|
962
|
+
* `batch`, the first request for a client opens a batch. Requests from the
|
|
963
|
+
* same client made before `window` elapses join it, and the batch is sent once
|
|
964
|
+
* the window elapses or it reaches `maxSize` requests, whichever comes first.
|
|
965
|
+
*
|
|
919
966
|
* @stability unstable
|
|
920
967
|
* @category protocols
|
|
921
968
|
* @since 4.0.0
|
|
922
969
|
*/
|
|
923
|
-
export const makeProtocolHttp = (client: HttpClient.HttpClient
|
|
970
|
+
export const makeProtocolHttp = (client: HttpClient.HttpClient, options?: {
|
|
971
|
+
readonly batch?: {
|
|
972
|
+
readonly window: Duration.Input
|
|
973
|
+
readonly maxSize?: number | undefined
|
|
974
|
+
} | undefined
|
|
975
|
+
}): Effect.Effect<
|
|
924
976
|
Protocol["Service"],
|
|
925
977
|
never,
|
|
926
978
|
RpcSerialization.RpcSerialization
|
|
927
|
-
> =>
|
|
979
|
+
> => options?.batch ? makeProtocolHttpBatched(client, options.batch) : makeProtocolHttpUnbatched(client)
|
|
980
|
+
|
|
981
|
+
const makeProtocolHttpUnbatched = (client: HttpClient.HttpClient) =>
|
|
928
982
|
Protocol.make(Effect.fnUntraced(function*(writeResponse) {
|
|
929
983
|
const serialization = yield* RpcSerialization.RpcSerialization
|
|
930
|
-
const
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
const incompleteResponseError = (request: FromClientEncoded) =>
|
|
942
|
-
protocolDefect("HTTP response ended before RPC request completed", request)
|
|
943
|
-
|
|
944
|
-
const send = Effect.fnUntraced(function*(clientId: number, request: FromClientEncoded) {
|
|
945
|
-
if (request._tag !== "Request") {
|
|
946
|
-
return
|
|
947
|
-
}
|
|
948
|
-
|
|
949
|
-
const parser = serialization.makeUnsafe()
|
|
984
|
+
const exchange = makeHttpExchange(client, serialization, writeResponse)
|
|
985
|
+
return {
|
|
986
|
+
send: (clientId, request) =>
|
|
987
|
+
request._tag === "Request"
|
|
988
|
+
? Effect.flatMap(exchange.send(clientId, [request]), (pending) => exchange.requestExit(request, pending))
|
|
989
|
+
: Effect.void,
|
|
990
|
+
supportsAck: false,
|
|
991
|
+
supportsTransferables: false,
|
|
992
|
+
codecFor: serialization.codecFor
|
|
993
|
+
}
|
|
994
|
+
}))
|
|
950
995
|
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
996
|
+
const makeProtocolHttpBatched = Effect.fnUntraced(function*(client: HttpClient.HttpClient, options: {
|
|
997
|
+
readonly window: Duration.Input
|
|
998
|
+
readonly maxSize?: number | undefined
|
|
999
|
+
}) {
|
|
1000
|
+
const { maxSize, window } = options
|
|
1001
|
+
|
|
1002
|
+
// Batches of a client run in its own scope, which is closed when the client
|
|
1003
|
+
// stops running.
|
|
1004
|
+
const scopes = new Map<number, Scope.Closeable>()
|
|
1005
|
+
const closeScope = (clientId: number) => {
|
|
1006
|
+
const scope = scopes.get(clientId)
|
|
1007
|
+
if (scope === undefined) return Effect.void
|
|
1008
|
+
scopes.delete(clientId)
|
|
1009
|
+
return Scope.close(scope, Exit.void)
|
|
1010
|
+
}
|
|
955
1011
|
|
|
956
|
-
|
|
1012
|
+
const protocol = yield* Protocol.make(Effect.fnUntraced(function*(writeResponse) {
|
|
1013
|
+
const serialization = yield* RpcSerialization.RpcSerialization
|
|
1014
|
+
const exchange = makeHttpExchange(client, serialization, writeResponse)
|
|
957
1015
|
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
1016
|
+
interface Batch {
|
|
1017
|
+
readonly requests: Array<RequestEncoded>
|
|
1018
|
+
readonly full: Latch.Latch
|
|
1019
|
+
readonly done: Deferred.Deferred<ReadonlySet<string> | undefined, RpcClientError>
|
|
1020
|
+
}
|
|
1021
|
+
const batches = new Map<number, Batch>()
|
|
1022
|
+
const closeBatch = (clientId: number, batch: Batch) => {
|
|
1023
|
+
if (batches.get(clientId) === batch) {
|
|
1024
|
+
batches.delete(clientId)
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
// Runs in the client scope rather than in a caller, so interrupting one
|
|
1028
|
+
// caller does not cancel the HTTP request for the rest of the batch.
|
|
1029
|
+
const runBatch = (clientId: number, batch: Batch) =>
|
|
1030
|
+
Effect.raceFirst(Effect.sleep(window), batch.full.await).pipe(
|
|
1031
|
+
Effect.andThen(Effect.suspend(() => {
|
|
1032
|
+
closeBatch(clientId, batch)
|
|
1033
|
+
return exchange.send(clientId, batch.requests)
|
|
1034
|
+
})),
|
|
1035
|
+
Effect.onExit((exit) => {
|
|
1036
|
+
closeBatch(clientId, batch)
|
|
1037
|
+
return Deferred.done(batch.done, exit)
|
|
963
1038
|
})
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
let
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
completed = true
|
|
975
|
-
}
|
|
976
|
-
yield* writeResponse(clientId, response)
|
|
977
|
-
}
|
|
978
|
-
if (!completed) {
|
|
979
|
-
return yield* incompleteResponseError(request)
|
|
1039
|
+
)
|
|
1040
|
+
const send = Effect.fnUntraced(function*(clientId: number, request: RequestEncoded) {
|
|
1041
|
+
let batch = batches.get(clientId)
|
|
1042
|
+
if (batch === undefined) {
|
|
1043
|
+
batch = { requests: [request], full: Latch.makeUnsafe(), done: Deferred.makeUnsafe() }
|
|
1044
|
+
batches.set(clientId, batch)
|
|
1045
|
+
let scope = scopes.get(clientId)
|
|
1046
|
+
if (scope === undefined) {
|
|
1047
|
+
scope = Scope.makeUnsafe()
|
|
1048
|
+
scopes.set(clientId, scope)
|
|
980
1049
|
}
|
|
981
|
-
|
|
1050
|
+
yield* Effect.forkIn(runBatch(clientId, batch), scope, { startImmediately: true })
|
|
1051
|
+
} else {
|
|
1052
|
+
batch.requests.push(request)
|
|
982
1053
|
}
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
yield* Stream.runForEachArray(response.stream, (chunk) =>
|
|
987
|
-
Effect.try({
|
|
988
|
-
try: () => chunk.flatMap(parser.decode) as Array<FromServerEncoded>,
|
|
989
|
-
catch: (cause) => protocolDefect("Error decoding HTTP response", cause)
|
|
990
|
-
}).pipe(
|
|
991
|
-
Effect.flatMap((responses) => {
|
|
992
|
-
if (responses.length === 0) return Effect.void
|
|
993
|
-
hasResponse = true
|
|
994
|
-
let i = 0
|
|
995
|
-
return Effect.whileLoop({
|
|
996
|
-
while: () => i < responses.length,
|
|
997
|
-
body: () => {
|
|
998
|
-
const response = responses[i++]
|
|
999
|
-
if (isTerminalResponse(response)) {
|
|
1000
|
-
completed = true
|
|
1001
|
-
}
|
|
1002
|
-
return writeResponse(clientId, response)
|
|
1003
|
-
},
|
|
1004
|
-
step: constVoid
|
|
1005
|
-
})
|
|
1006
|
-
})
|
|
1007
|
-
)).pipe(
|
|
1008
|
-
Effect.mapError((cause) => isRpcClientError(cause) ? cause : httpClientError(cause))
|
|
1009
|
-
)
|
|
1010
|
-
if (!hasResponse) {
|
|
1011
|
-
return yield* emptyResponseError(request)
|
|
1012
|
-
} else if (!completed) {
|
|
1013
|
-
return yield* incompleteResponseError(request)
|
|
1054
|
+
if (batch.requests.length === maxSize) {
|
|
1055
|
+
closeBatch(clientId, batch)
|
|
1056
|
+
batch.full.openUnsafe()
|
|
1014
1057
|
}
|
|
1058
|
+
return yield* exchange.requestExit(request, yield* Deferred.await(batch.done))
|
|
1015
1059
|
})
|
|
1016
1060
|
|
|
1017
1061
|
return {
|
|
1018
|
-
send,
|
|
1062
|
+
send: (clientId, request) => request._tag === "Request" ? send(clientId, request) : Effect.void,
|
|
1019
1063
|
supportsAck: false,
|
|
1020
1064
|
supportsTransferables: false,
|
|
1021
1065
|
codecFor: serialization.codecFor
|
|
1022
1066
|
}
|
|
1023
1067
|
}))
|
|
1024
1068
|
|
|
1069
|
+
return Protocol.of({
|
|
1070
|
+
...protocol,
|
|
1071
|
+
run: (clientId, f) => Effect.onExit(protocol.run(clientId, f), () => closeScope(clientId))
|
|
1072
|
+
})
|
|
1073
|
+
})
|
|
1074
|
+
|
|
1075
|
+
// Sends RPC requests in one HTTP request, shared by the batched and unbatched
|
|
1076
|
+
// HTTP protocols.
|
|
1077
|
+
const makeHttpExchange = (
|
|
1078
|
+
client: HttpClient.HttpClient,
|
|
1079
|
+
serialization: RpcSerialization.RpcSerialization["Service"],
|
|
1080
|
+
writeResponse: (clientId: number, response: FromServerEncoded) => Effect.Effect<void>
|
|
1081
|
+
) => {
|
|
1082
|
+
const isFramed = serialization.includesFraming
|
|
1083
|
+
const httpClientError = (cause: any) =>
|
|
1084
|
+
new RpcClientError({
|
|
1085
|
+
reason: HttpClientErrorSchema.fromHttpClientError(cause)
|
|
1086
|
+
})
|
|
1087
|
+
const protocolDefect = (message: string, cause: unknown) =>
|
|
1088
|
+
new RpcClientError({
|
|
1089
|
+
reason: new RpcClientDefect({ message, cause })
|
|
1090
|
+
})
|
|
1091
|
+
|
|
1092
|
+
// Writes each response as it is decoded. Returns the ids of the requests left
|
|
1093
|
+
// without a terminal response, or `undefined` when the server sent no
|
|
1094
|
+
// responses.
|
|
1095
|
+
const send = Effect.fnUntraced(function*(
|
|
1096
|
+
clientId: number,
|
|
1097
|
+
requests: ReadonlyArray<RequestEncoded>
|
|
1098
|
+
) {
|
|
1099
|
+
const parser = serialization.makeUnsafe()
|
|
1100
|
+
|
|
1101
|
+
const encoded = parser.encode(requests.length === 1 ? requests[0] : requests)!
|
|
1102
|
+
const body = typeof encoded === "string" ?
|
|
1103
|
+
HttpBody.text(encoded, serialization.contentType) :
|
|
1104
|
+
HttpBody.uint8Array(encoded, serialization.contentType)
|
|
1105
|
+
|
|
1106
|
+
const response = yield* client.post("", { body }).pipe(Effect.mapError(httpClientError))
|
|
1107
|
+
|
|
1108
|
+
const pending = new Set<string>()
|
|
1109
|
+
for (let i = 0; i < requests.length; i++) {
|
|
1110
|
+
pending.add(String(requests[i].id))
|
|
1111
|
+
}
|
|
1112
|
+
const onResponse = (response: FromServerEncoded) => {
|
|
1113
|
+
if (response._tag === "Exit") {
|
|
1114
|
+
pending.delete(String(response.requestId))
|
|
1115
|
+
} else if (isTerminalResponse(response)) {
|
|
1116
|
+
// defects and protocol errors end every request of the client
|
|
1117
|
+
pending.clear()
|
|
1118
|
+
}
|
|
1119
|
+
return writeResponse(clientId, response)
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
if (!isFramed) {
|
|
1123
|
+
const text = yield* response.text.pipe(Effect.mapError(httpClientError))
|
|
1124
|
+
const responses = yield* Effect.try({
|
|
1125
|
+
try: () => parser.decode(text),
|
|
1126
|
+
catch: (cause) => protocolDefect("Error decoding HTTP response", cause)
|
|
1127
|
+
})
|
|
1128
|
+
if (!Array.isArray(responses)) {
|
|
1129
|
+
return yield* protocolDefect("Expected an array of responses", responses)
|
|
1130
|
+
}
|
|
1131
|
+
if (responses.length === 0) {
|
|
1132
|
+
return undefined
|
|
1133
|
+
}
|
|
1134
|
+
for (let i = 0; i < responses.length; i++) {
|
|
1135
|
+
yield* onResponse(responses[i])
|
|
1136
|
+
}
|
|
1137
|
+
return pending
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
let hasResponse = false
|
|
1141
|
+
yield* Stream.runForEachArray(response.stream, (chunk) =>
|
|
1142
|
+
Effect.try({
|
|
1143
|
+
try: () => chunk.flatMap(parser.decode) as Array<FromServerEncoded>,
|
|
1144
|
+
catch: (cause) => protocolDefect("Error decoding HTTP response", cause)
|
|
1145
|
+
}).pipe(
|
|
1146
|
+
Effect.flatMap((responses) => {
|
|
1147
|
+
if (responses.length === 0) return Effect.void
|
|
1148
|
+
hasResponse = true
|
|
1149
|
+
let i = 0
|
|
1150
|
+
return Effect.whileLoop({
|
|
1151
|
+
while: () => i < responses.length,
|
|
1152
|
+
body: () => onResponse(responses[i++]),
|
|
1153
|
+
step: constVoid
|
|
1154
|
+
})
|
|
1155
|
+
})
|
|
1156
|
+
)).pipe(
|
|
1157
|
+
Effect.mapError((cause) => isRpcClientError(cause) ? cause : httpClientError(cause))
|
|
1158
|
+
)
|
|
1159
|
+
return hasResponse ? pending : undefined
|
|
1160
|
+
})
|
|
1161
|
+
|
|
1162
|
+
// Completes one request from the result of the exchange that carried it.
|
|
1163
|
+
const requestExit = (
|
|
1164
|
+
request: RequestEncoded,
|
|
1165
|
+
pending: ReadonlySet<string> | undefined
|
|
1166
|
+
): Exit.Exit<void, RpcClientError> => {
|
|
1167
|
+
if (pending === undefined) {
|
|
1168
|
+
return Exit.fail(protocolDefect("Received empty HTTP response from RPC server", request))
|
|
1169
|
+
} else if (pending.has(String(request.id))) {
|
|
1170
|
+
return Exit.fail(protocolDefect("HTTP response ended before RPC request completed", request))
|
|
1171
|
+
}
|
|
1172
|
+
return Exit.void
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
return { send, requestExit } as const
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1025
1178
|
/**
|
|
1026
1179
|
* Provides a client `Protocol` backed by `HttpClient`, targeting the configured
|
|
1027
1180
|
* URL and optionally transforming the client before use.
|
|
1028
1181
|
*
|
|
1182
|
+
* **Details**
|
|
1183
|
+
*
|
|
1184
|
+
* Set `batch` to send concurrent requests from the same client in a single
|
|
1185
|
+
* HTTP request. The first request for a client opens a batch. Requests from
|
|
1186
|
+
* the same client made before `window` elapses join it, and the batch is sent
|
|
1187
|
+
* once the window elapses or it reaches `maxSize` requests, whichever comes
|
|
1188
|
+
* first.
|
|
1189
|
+
*
|
|
1029
1190
|
* @stability unstable
|
|
1030
1191
|
* @category layers
|
|
1031
1192
|
* @since 4.0.0
|
|
@@ -1033,13 +1194,19 @@ export const makeProtocolHttp = (client: HttpClient.HttpClient): Effect.Effect<
|
|
|
1033
1194
|
export const layerProtocolHttp = (options: {
|
|
1034
1195
|
readonly url: string
|
|
1035
1196
|
readonly transformClient?: <E, R>(client: HttpClient.HttpClient.With<E, R>) => HttpClient.HttpClient.With<E, R>
|
|
1197
|
+
readonly batch?: {
|
|
1198
|
+
readonly window: Duration.Input
|
|
1199
|
+
readonly maxSize?: number | undefined
|
|
1200
|
+
} | undefined
|
|
1036
1201
|
}): Layer.Layer<Protocol, never, RpcSerialization.RpcSerialization | HttpClient.HttpClient> =>
|
|
1037
1202
|
Layer.effect(Protocol)(
|
|
1038
1203
|
Effect.flatMap(
|
|
1039
1204
|
HttpClient.HttpClient,
|
|
1040
1205
|
(client) => {
|
|
1041
1206
|
client = HttpClient.mapRequest(client, HttpClientRequest.prependUrl(options.url))
|
|
1042
|
-
return makeProtocolHttp(options.transformClient ? options.transformClient(client) : client
|
|
1207
|
+
return makeProtocolHttp(options.transformClient ? options.transformClient(client) : client, {
|
|
1208
|
+
batch: options.batch
|
|
1209
|
+
})
|
|
1043
1210
|
}
|
|
1044
1211
|
)
|
|
1045
1212
|
)
|
|
@@ -1102,8 +1269,13 @@ export const makeProtocolSocket = (options?: {
|
|
|
1102
1269
|
})
|
|
1103
1270
|
let currentError: RpcClientError | undefined
|
|
1104
1271
|
|
|
1105
|
-
const broadcast = (response: FromServerEncoded) =>
|
|
1106
|
-
Effect.forEach(clientIds, (clientId) => writeResponse(clientId, response))
|
|
1272
|
+
const broadcast = (response: FromServerEncoded) => {
|
|
1273
|
+
const deliver = Effect.forEach(Array.from(clientIds), (clientId) => writeResponse(clientId, response))
|
|
1274
|
+
if (response._tag !== "Defect" && response._tag !== "ClientProtocolError") return deliver
|
|
1275
|
+
// A terminal response ends every request; clear routing before callers can start new ones
|
|
1276
|
+
requestClientMap.clear()
|
|
1277
|
+
return Effect.uninterruptible(deliver)
|
|
1278
|
+
}
|
|
1107
1279
|
const broadcastError = (error: RpcClientError) => {
|
|
1108
1280
|
currentError = error
|
|
1109
1281
|
return broadcast({
|
|
@@ -1218,17 +1390,21 @@ export const makeProtocolSocket = (options?: {
|
|
|
1218
1390
|
Effect.forkScoped
|
|
1219
1391
|
)
|
|
1220
1392
|
|
|
1393
|
+
const write = (request: FromClientEncoded) =>
|
|
1394
|
+
Effect.suspend(() => {
|
|
1395
|
+
const encoded = parser.encode(request)
|
|
1396
|
+
return encoded === undefined ? Effect.void : Effect.orDie(writer.write(encoded))
|
|
1397
|
+
})
|
|
1398
|
+
|
|
1221
1399
|
return {
|
|
1222
1400
|
send(clientId, request) {
|
|
1223
1401
|
if (currentError) {
|
|
1224
1402
|
return Effect.fail(currentError)
|
|
1225
1403
|
}
|
|
1226
|
-
if (request._tag === "
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
if (encoded === undefined) return Effect.void
|
|
1231
|
-
return Effect.orDie(writer.write(encoded))
|
|
1404
|
+
if (request._tag === "Interrupt") requestClientMap.delete(request.requestId)
|
|
1405
|
+
if (request._tag !== "Request") return write(request)
|
|
1406
|
+
requestClientMap.set(request.id, clientId)
|
|
1407
|
+
return Effect.onError(write(request), () => Effect.sync(() => requestClientMap.delete(request.id)))
|
|
1232
1408
|
},
|
|
1233
1409
|
supportsAck: true,
|
|
1234
1410
|
supportsTransferables: false,
|
|
@@ -95,6 +95,18 @@ export class MaxBufferSizeExceeded extends Data.TaggedError("MaxBufferSizeExceed
|
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Error raised when a non-empty NDJSON frame is not valid JSON.
|
|
100
|
+
* The `cause` field preserves the original JSON parsing error.
|
|
101
|
+
*
|
|
102
|
+
* @stability unstable
|
|
103
|
+
* @category errors
|
|
104
|
+
* @since 4.0.0
|
|
105
|
+
*/
|
|
106
|
+
export class NdjsonDecodeError extends Data.TaggedError("NdjsonDecodeError")<{
|
|
107
|
+
readonly cause: unknown
|
|
108
|
+
}> {}
|
|
109
|
+
|
|
98
110
|
/**
|
|
99
111
|
* Options shared by streaming RPC serialization formats.
|
|
100
112
|
*
|
|
@@ -150,7 +162,7 @@ export const json: RpcSerialization["Service"] = RpcSerialization.of({
|
|
|
150
162
|
export const makeNdjson = (options?: StreamOptions): RpcSerialization["Service"] => {
|
|
151
163
|
const maxBufferSize = options?.maxBufferSize ?? defaultMaxBufferSize
|
|
152
164
|
return RpcSerialization.of({
|
|
153
|
-
contentType: "application/ndjson",
|
|
165
|
+
contentType: "application/x-ndjson",
|
|
154
166
|
includesFraming: true,
|
|
155
167
|
codecFor: codecForJson,
|
|
156
168
|
makeUnsafe: () => {
|
|
@@ -171,11 +183,15 @@ export const makeNdjson = (options?: StreamOptions): RpcSerialization["Service"]
|
|
|
171
183
|
if (isBufferSizeExceeded(nlIndex - position, maxBufferSize)) {
|
|
172
184
|
failMaxBufferSize(maxBufferSize)
|
|
173
185
|
}
|
|
174
|
-
const line = buffer.slice(position, nlIndex)
|
|
186
|
+
const line = buffer.slice(position, buffer[nlIndex - 1] === "\r" ? nlIndex - 1 : nlIndex)
|
|
175
187
|
position = nlIndex + 1
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
188
|
+
if (line.length > 0) {
|
|
189
|
+
try {
|
|
190
|
+
items.push(JSON.parse(line))
|
|
191
|
+
} catch (cause) {
|
|
192
|
+
buffer = ""
|
|
193
|
+
throw new NdjsonDecodeError({ cause })
|
|
194
|
+
}
|
|
179
195
|
}
|
|
180
196
|
nlIndex = buffer.indexOf("\n", position)
|
|
181
197
|
}
|
package/src/rpc/RpcServer.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* @since 4.0.0
|
|
13
13
|
*/
|
|
14
14
|
import type { NonEmptyReadonlyArray } from "../Array.ts"
|
|
15
|
+
import * as Bytes from "../Bytes.ts"
|
|
15
16
|
import * as Cause from "../Cause.ts"
|
|
16
17
|
import * as Context from "../Context.ts"
|
|
17
18
|
import * as Deferred from "../Deferred.ts"
|
|
@@ -513,14 +514,16 @@ const rpcCodecs = (codecFor: RpcSerialization.CodecFor, rpc: Rpc.AnyWithProps):
|
|
|
513
514
|
let codecs = shared ? sharedRpcCodecs.get(rpc) : undefined
|
|
514
515
|
if (codecs === undefined) {
|
|
515
516
|
const streamSchemas = RpcSchema.getStreamSchemas(rpc.successSchema)
|
|
517
|
+
const parseOptions = Context.get(rpc.annotations, Rpc.ParseOptions)
|
|
516
518
|
codecs = {
|
|
517
|
-
decode: Schema.decodeUnknownEffect(codecFor(rpc.payloadSchema)) as any,
|
|
519
|
+
decode: Schema.decodeUnknownEffect(codecFor(rpc.payloadSchema), parseOptions) as any,
|
|
518
520
|
encodeChunk: Schema.encodeUnknownEffect(
|
|
519
521
|
codecFor(
|
|
520
522
|
Schema.NonEmptyArray(Option.isSome(streamSchemas) ? streamSchemas.value.success : Schema.Any)
|
|
521
|
-
)
|
|
523
|
+
),
|
|
524
|
+
parseOptions
|
|
522
525
|
) as any,
|
|
523
|
-
encodeExit: Schema.encodeUnknownEffect(codecFor(Rpc.exitSchema(rpc as any))) as any
|
|
526
|
+
encodeExit: Schema.encodeUnknownEffect(codecFor(Rpc.exitSchema(rpc as any)), parseOptions) as any
|
|
524
527
|
}
|
|
525
528
|
if (shared) sharedRpcCodecs.set(rpc, codecs)
|
|
526
529
|
}
|
|
@@ -1246,8 +1249,9 @@ export const makeProtocolWithHttpEffect: (
|
|
|
1246
1249
|
|
|
1247
1250
|
yield* writeRequest(id, constEof)
|
|
1248
1251
|
|
|
1252
|
+
// Allow request aborts during response waits without unmasking response construction.
|
|
1249
1253
|
if (!includesFraming) {
|
|
1250
|
-
const responses = yield* Queue.collect(queue)
|
|
1254
|
+
const responses = yield* Effect.interruptible(Queue.collect(queue))
|
|
1251
1255
|
// Notification-only batches encode without a response body.
|
|
1252
1256
|
const encoded = parser.encode(responses)
|
|
1253
1257
|
return HttpServerResponse.text(encoded === undefined ? "" : encoded as string, {
|
|
@@ -1255,12 +1259,12 @@ export const makeProtocolWithHttpEffect: (
|
|
|
1255
1259
|
})
|
|
1256
1260
|
}
|
|
1257
1261
|
|
|
1258
|
-
const initialChunk = yield* Pull.catchDone(
|
|
1262
|
+
const initialChunk = yield* Effect.interruptible(Pull.catchDone(
|
|
1259
1263
|
Queue.takeAll(queue as Queue.Dequeue<Uint8Array, Cause.Done>),
|
|
1260
1264
|
() => Effect.succeed([])
|
|
1261
|
-
)
|
|
1265
|
+
))
|
|
1262
1266
|
if (queue.state._tag === "Done") {
|
|
1263
|
-
return HttpServerResponse.uint8Array(
|
|
1267
|
+
return HttpServerResponse.uint8Array(initialChunk.length === 1 ? initialChunk[0] : Bytes.concat(initialChunk), {
|
|
1264
1268
|
contentType: serialization.contentType
|
|
1265
1269
|
})
|
|
1266
1270
|
}
|
|
@@ -1302,19 +1306,6 @@ export const makeProtocolWithHttpEffect: (
|
|
|
1302
1306
|
return { protocol, httpEffect } as const
|
|
1303
1307
|
})
|
|
1304
1308
|
|
|
1305
|
-
const mergeUint8Arrays = (arrays: ReadonlyArray<Uint8Array>) => {
|
|
1306
|
-
if (arrays.length === 0) return new Uint8Array(0)
|
|
1307
|
-
if (arrays.length === 1) return arrays[0]
|
|
1308
|
-
const length = arrays.reduce((acc, arr) => acc + arr.length, 0)
|
|
1309
|
-
const result = new Uint8Array(length)
|
|
1310
|
-
let offset = 0
|
|
1311
|
-
for (const arr of arrays) {
|
|
1312
|
-
result.set(arr, offset)
|
|
1313
|
-
offset += arr.length
|
|
1314
|
-
}
|
|
1315
|
-
return result
|
|
1316
|
-
}
|
|
1317
|
-
|
|
1318
1309
|
/**
|
|
1319
1310
|
* Creates an HTTP server `Protocol` and registers its request handler as a POST
|
|
1320
1311
|
* route on the current `HttpRouter`.
|