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
|
@@ -0,0 +1,849 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encodes and decodes a single JSON array as a stream of its elements.
|
|
3
|
+
*
|
|
4
|
+
* **Details**
|
|
5
|
+
*
|
|
6
|
+
* Use `JsonArray` when a large response or file is one JSON document, such as
|
|
7
|
+
* `[...]` or `{"items":[...],"total":n}`, and its elements should be processed
|
|
8
|
+
* without buffering the whole document. Use `Ndjson` when the producer writes
|
|
9
|
+
* one JSON value per line. This module is unrelated to `Schema.JsonArray`, the
|
|
10
|
+
* type of a JSON array value.
|
|
11
|
+
*
|
|
12
|
+
* Decoders stream the elements of one array, the root array by default or the
|
|
13
|
+
* array selected by an RFC 6901 JSON Pointer. Each element is buffered only
|
|
14
|
+
* until it is complete and then parsed with `JSON.parse`. The rest of the
|
|
15
|
+
* document is validated and discarded. Encoders write a stream of values as
|
|
16
|
+
* one JSON array.
|
|
17
|
+
*
|
|
18
|
+
* **Example** (Streaming the items of a large HTTP response)
|
|
19
|
+
*
|
|
20
|
+
* ```ts
|
|
21
|
+
* import { Effect, Schema, Stream } from "effect"
|
|
22
|
+
* import { JsonArray } from "effect/encoding"
|
|
23
|
+
* import { HttpClient, HttpClientResponse } from "effect/http"
|
|
24
|
+
*
|
|
25
|
+
* const User = Schema.Struct({ id: Schema.Number, name: Schema.String })
|
|
26
|
+
*
|
|
27
|
+
* // The response body is {"data":[{"id":1,"name":"Alice"},...],"total":...}
|
|
28
|
+
* const program = HttpClientResponse.stream(HttpClient.get("https://example.com/users")).pipe(
|
|
29
|
+
* Stream.pipeThroughChannel(JsonArray.decodeSchema(User)({ pointer: "/data" })),
|
|
30
|
+
* Stream.runForEach((user) => Effect.log(user.name))
|
|
31
|
+
* )
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @stability unstable
|
|
35
|
+
* @since 4.0.6
|
|
36
|
+
*/
|
|
37
|
+
import * as Arr from "../Array.ts"
|
|
38
|
+
import * as Cause from "../Cause.ts"
|
|
39
|
+
import * as Channel from "../Channel.ts"
|
|
40
|
+
import * as ChannelSchema from "../ChannelSchema.ts"
|
|
41
|
+
import * as Data from "../Data.ts"
|
|
42
|
+
import * as Effect from "../Effect.ts"
|
|
43
|
+
import * as JsonPointer from "../JsonPointer.ts"
|
|
44
|
+
import * as Predicate from "../Predicate.ts"
|
|
45
|
+
import * as Pull from "../Pull.ts"
|
|
46
|
+
import type * as Schema from "../Schema.ts"
|
|
47
|
+
|
|
48
|
+
const JsonArrayErrorTypeId = "~effect/encoding/JsonArray/JsonArrayError"
|
|
49
|
+
|
|
50
|
+
const encoder = new TextEncoder()
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Error raised when JSON array encoding or decoding fails.
|
|
54
|
+
*
|
|
55
|
+
* **Details**
|
|
56
|
+
*
|
|
57
|
+
* - `Syntax`: the input is not valid JSON, including an empty input or
|
|
58
|
+
* content after the document.
|
|
59
|
+
* - `Limit`: a value exceeds `maxDepth` or `maxElementSize`, whether it is an
|
|
60
|
+
* element, a key, or a value outside the selected array.
|
|
61
|
+
* - `Pointer`: the pointer target is missing or not an array, a value along the
|
|
62
|
+
* pointer is not an object or array, or an object along the pointer repeats
|
|
63
|
+
* the key that the pointer follows.
|
|
64
|
+
* - `Encode`: a value has no JSON representation.
|
|
65
|
+
*
|
|
66
|
+
* Decoding errors set `offset`, a zero-based offset in UTF-16 code units into
|
|
67
|
+
* the decoded text after any leading BOM. When a value is invalid or exceeds a
|
|
68
|
+
* limit, the offset is the start of that value. `Encode` errors have no
|
|
69
|
+
* offset. When `JSON.parse` or `JSON.stringify` throws, `Syntax` and `Encode`
|
|
70
|
+
* errors retain the original thrown value as `cause`.
|
|
71
|
+
*
|
|
72
|
+
* @stability unstable
|
|
73
|
+
* @category errors
|
|
74
|
+
* @since 4.0.6
|
|
75
|
+
*/
|
|
76
|
+
export class JsonArrayError extends Data.TaggedError("JsonArrayError")<{
|
|
77
|
+
readonly kind: "Syntax" | "Limit" | "Pointer" | "Encode"
|
|
78
|
+
readonly message: string
|
|
79
|
+
readonly offset?: number | undefined
|
|
80
|
+
readonly cause?: unknown
|
|
81
|
+
}> {
|
|
82
|
+
/**
|
|
83
|
+
* Marks this value as a JSON array encoding or decoding error for runtime
|
|
84
|
+
* guards.
|
|
85
|
+
*
|
|
86
|
+
* @stability unstable
|
|
87
|
+
* @since 4.0.6
|
|
88
|
+
*/
|
|
89
|
+
readonly [JsonArrayErrorTypeId] = JsonArrayErrorTypeId
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Checks whether a value is a `JsonArrayError`.
|
|
94
|
+
*
|
|
95
|
+
* @stability unstable
|
|
96
|
+
* @category guards
|
|
97
|
+
* @since 4.0.6
|
|
98
|
+
*/
|
|
99
|
+
export const isJsonArrayError = (u: unknown): u is JsonArrayError => Predicate.hasProperty(u, JsonArrayErrorTypeId)
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* JSON array decoding options.
|
|
103
|
+
*
|
|
104
|
+
* **Details**
|
|
105
|
+
*
|
|
106
|
+
* - `pointer`: an RFC 6901 JSON Pointer to the array to stream, such as
|
|
107
|
+
* `"/data"`. Defaults to `""`, the root. Tokens select object members by
|
|
108
|
+
* key and array elements by index.
|
|
109
|
+
* - `maxDepth`: the maximum nesting of arrays and objects in one value, where
|
|
110
|
+
* an array or object element has depth 1. Defaults to 1000.
|
|
111
|
+
* - `maxElementSize`: the maximum length of one value in UTF-16 code units.
|
|
112
|
+
* Defaults to 16 MiB; `Infinity` disables the limit.
|
|
113
|
+
*
|
|
114
|
+
* Both limits also apply to values outside the selected array, which are
|
|
115
|
+
* buffered and validated before being discarded. Invalid options throw when
|
|
116
|
+
* the channel is created.
|
|
117
|
+
*
|
|
118
|
+
* @stability unstable
|
|
119
|
+
* @category configuration
|
|
120
|
+
* @since 4.0.6
|
|
121
|
+
*/
|
|
122
|
+
export interface DecodeOptions {
|
|
123
|
+
readonly pointer?: string | undefined
|
|
124
|
+
readonly maxDepth?: number | undefined
|
|
125
|
+
readonly maxElementSize?: number | undefined
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
interface Config {
|
|
129
|
+
readonly tokens: ReadonlyArray<string>
|
|
130
|
+
// The array index selected by each token, or -1 when it is not an index.
|
|
131
|
+
readonly indices: ReadonlyArray<number>
|
|
132
|
+
readonly maxDepth: number
|
|
133
|
+
readonly maxElementSize: number
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const makeConfig = (options: DecodeOptions | undefined): Config => {
|
|
137
|
+
const pointer = options?.pointer ?? ""
|
|
138
|
+
if (pointer !== "" && (!pointer.startsWith("/") || /~(?:[^01]|$)/.test(pointer))) {
|
|
139
|
+
throw new Error(`JsonArray: pointer must be an RFC 6901 JSON Pointer, got ${JSON.stringify(pointer)}`)
|
|
140
|
+
}
|
|
141
|
+
const maxDepth = options?.maxDepth ?? 1000
|
|
142
|
+
if (!(Number.isInteger(maxDepth) && maxDepth >= 0)) {
|
|
143
|
+
throw new Error(`JsonArray: maxDepth must be a non-negative integer, got ${maxDepth}`)
|
|
144
|
+
}
|
|
145
|
+
const maxElementSize = options?.maxElementSize ?? 16 * 1024 * 1024
|
|
146
|
+
if (!(maxElementSize >= 1)) {
|
|
147
|
+
throw new Error(`JsonArray: maxElementSize must be at least 1, got ${maxElementSize}`)
|
|
148
|
+
}
|
|
149
|
+
const tokens = pointer === "" ? [] : pointer.slice(1).split("/").map(JsonPointer.unescapeToken)
|
|
150
|
+
return {
|
|
151
|
+
tokens,
|
|
152
|
+
indices: tokens.map((token) => /^(?:0|[1-9]\d*)$/.test(token) ? Number(token) : -1),
|
|
153
|
+
maxDepth,
|
|
154
|
+
maxElementSize
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const TAB = 9
|
|
159
|
+
const LF = 10
|
|
160
|
+
const CR = 13
|
|
161
|
+
const SPACE = 32
|
|
162
|
+
const QUOTE = 34
|
|
163
|
+
const COMMA = 44
|
|
164
|
+
const COLON = 58
|
|
165
|
+
const LBRACKET = 91
|
|
166
|
+
const BACKSLASH = 92
|
|
167
|
+
const RBRACKET = 93
|
|
168
|
+
const LBRACE = 123
|
|
169
|
+
const RBRACE = 125
|
|
170
|
+
|
|
171
|
+
const isWhitespace = (c: number): boolean => c === SPACE || c === LF || c === CR || c === TAB
|
|
172
|
+
|
|
173
|
+
const indexOf = (text: string, search: string, i: number): number => {
|
|
174
|
+
const index = text.indexOf(search, i)
|
|
175
|
+
return index === -1 ? text.length : index
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const isValueStart = (c: number): boolean =>
|
|
179
|
+
c === QUOTE || c === LBRACKET || c === LBRACE || c === 45 || (c >= 48 && c <= 57) || c === 102 || c === 110 ||
|
|
180
|
+
c === 116
|
|
181
|
+
|
|
182
|
+
// The scanner walks the containers along the pointer and the selected array.
|
|
183
|
+
// Every other value is captured whole and parsed with `JSON.parse`: elements
|
|
184
|
+
// are emitted, keys are matched against the pointer, and the rest is
|
|
185
|
+
// discarded.
|
|
186
|
+
|
|
187
|
+
// Structural states.
|
|
188
|
+
const VALUE = 0 // the value at the current pointer prefix
|
|
189
|
+
const OBJECT_START = 1 // after `{`: a key or `}`
|
|
190
|
+
const OBJECT_KEY = 2 // after `,`: a key
|
|
191
|
+
const OBJECT_COLON = 3 // after a key: `:`
|
|
192
|
+
const OBJECT_VALUE = 4 // after `:` for a key the pointer does not follow
|
|
193
|
+
const OBJECT_NEXT = 5 // after a member: `,` or `}`
|
|
194
|
+
const ARRAY_START = 6 // after `[`: a value or `]`
|
|
195
|
+
const ARRAY_VALUE = 7 // after `,`: a value
|
|
196
|
+
const ARRAY_NEXT = 8 // after an element: `,` or `]`
|
|
197
|
+
const END = 9 // after the document
|
|
198
|
+
|
|
199
|
+
// Capture modes.
|
|
200
|
+
const NONE = 0
|
|
201
|
+
const SKIP = 1
|
|
202
|
+
const ELEMENT = 2
|
|
203
|
+
const KEY = 3
|
|
204
|
+
|
|
205
|
+
interface Frame {
|
|
206
|
+
readonly object: boolean
|
|
207
|
+
// Whether this is the selected array.
|
|
208
|
+
readonly target: boolean
|
|
209
|
+
// Whether the pointer token for this container has been found.
|
|
210
|
+
found: boolean
|
|
211
|
+
index: number
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
class Scanner {
|
|
215
|
+
readonly config: Config
|
|
216
|
+
state = VALUE
|
|
217
|
+
readonly frames: Array<Frame> = []
|
|
218
|
+
key = ""
|
|
219
|
+
started = false
|
|
220
|
+
// The offset of the start of the current chunk.
|
|
221
|
+
base = 0
|
|
222
|
+
|
|
223
|
+
// The value being captured, which may span chunks.
|
|
224
|
+
capture = NONE
|
|
225
|
+
start = 0
|
|
226
|
+
buffer = ""
|
|
227
|
+
scalar = false
|
|
228
|
+
depth = 0
|
|
229
|
+
inString = false
|
|
230
|
+
escape = false
|
|
231
|
+
|
|
232
|
+
// Cached quote and backslash positions; the chunk length means not found.
|
|
233
|
+
quote = -1
|
|
234
|
+
backslash = -1
|
|
235
|
+
// Absolute end of a batch that failed to parse. The precise scan handles
|
|
236
|
+
// text before it, so the batch is not rescanned for every element.
|
|
237
|
+
slow = 0
|
|
238
|
+
|
|
239
|
+
constructor(config: Config) {
|
|
240
|
+
this.config = config
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
fail(kind: "Syntax" | "Limit" | "Pointer", message: string, offset: number, cause?: unknown): JsonArrayError {
|
|
244
|
+
return new JsonArrayError({ kind, message, offset, cause })
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
pointerPrefix(length: number, ...rest: Array<string>): string {
|
|
248
|
+
return JSON.stringify(
|
|
249
|
+
this.config.tokens.slice(0, length).concat(rest).map((token) => "/" + JsonPointer.escapeToken(token)).join("")
|
|
250
|
+
)
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Names the value being captured, for limit errors.
|
|
254
|
+
subject(): string {
|
|
255
|
+
if (this.capture === ELEMENT) return "Element"
|
|
256
|
+
const depth = this.frames.length - 1
|
|
257
|
+
if (this.capture === KEY) return `Key in ${this.pointerPrefix(depth)}`
|
|
258
|
+
const frame = this.frames[depth]
|
|
259
|
+
const token = frame.object ? this.key : String(frame.index - 1)
|
|
260
|
+
return `Value outside the selected array at ${this.pointerPrefix(depth, token)}`
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
feed(text: string, out: Array<unknown>): void {
|
|
264
|
+
if (!this.started && text.length > 0) {
|
|
265
|
+
this.started = true
|
|
266
|
+
if (text.charCodeAt(0) === 0xFEFF) text = text.slice(1)
|
|
267
|
+
}
|
|
268
|
+
this.quote = -1
|
|
269
|
+
this.backslash = -1
|
|
270
|
+
let i = this.capture === NONE ? 0 : this.scan(text, 0, out)
|
|
271
|
+
while (i < text.length) {
|
|
272
|
+
const c = text.charCodeAt(i)
|
|
273
|
+
i = isWhitespace(c) ? i + 1 : this.step(text, i, c, out)
|
|
274
|
+
}
|
|
275
|
+
if (this.capture !== NONE) {
|
|
276
|
+
this.buffer += text.slice(Math.max(this.start - this.base, 0))
|
|
277
|
+
this.checkSize(this.buffer.length)
|
|
278
|
+
}
|
|
279
|
+
this.base += text.length
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
end(): void {
|
|
283
|
+
if (this.state !== END || this.capture !== NONE) {
|
|
284
|
+
throw this.fail("Syntax", "Unexpected end of input", this.base)
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Handles one structural character and returns the next index.
|
|
289
|
+
step(text: string, i: number, c: number, out: Array<unknown>): number {
|
|
290
|
+
const frame = this.frames[this.frames.length - 1]
|
|
291
|
+
switch (this.state) {
|
|
292
|
+
case VALUE: {
|
|
293
|
+
const target = this.frames.length === this.config.tokens.length
|
|
294
|
+
if (c === LBRACKET || (c === LBRACE && !target)) {
|
|
295
|
+
this.frames.push({ object: c === LBRACE, target, found: false, index: 0 })
|
|
296
|
+
this.state = c === LBRACE ? OBJECT_START : ARRAY_START
|
|
297
|
+
return i + 1
|
|
298
|
+
}
|
|
299
|
+
if (isValueStart(c)) {
|
|
300
|
+
const expected = target ? "an array" : "an object or array"
|
|
301
|
+
throw this.fail(
|
|
302
|
+
"Pointer",
|
|
303
|
+
`Expected ${expected} at ${this.pointerPrefix(this.frames.length)}`,
|
|
304
|
+
this.base + i
|
|
305
|
+
)
|
|
306
|
+
}
|
|
307
|
+
break
|
|
308
|
+
}
|
|
309
|
+
case OBJECT_START:
|
|
310
|
+
case OBJECT_KEY: {
|
|
311
|
+
if (c === QUOTE) {
|
|
312
|
+
this.state = OBJECT_COLON
|
|
313
|
+
return this.begin(KEY, text, i, out)
|
|
314
|
+
}
|
|
315
|
+
if (c === RBRACE && this.state === OBJECT_START) return this.close(i)
|
|
316
|
+
break
|
|
317
|
+
}
|
|
318
|
+
case OBJECT_COLON: {
|
|
319
|
+
if (c !== COLON) break
|
|
320
|
+
if (this.key === this.config.tokens[this.frames.length - 1]) {
|
|
321
|
+
if (frame.found) {
|
|
322
|
+
throw this.fail("Pointer", `Duplicate key ${JSON.stringify(this.key)} along the pointer`, this.base + i)
|
|
323
|
+
}
|
|
324
|
+
frame.found = true
|
|
325
|
+
this.state = VALUE
|
|
326
|
+
} else {
|
|
327
|
+
this.state = OBJECT_VALUE
|
|
328
|
+
}
|
|
329
|
+
return i + 1
|
|
330
|
+
}
|
|
331
|
+
case OBJECT_VALUE: {
|
|
332
|
+
if (!isValueStart(c)) break
|
|
333
|
+
this.state = OBJECT_NEXT
|
|
334
|
+
return this.begin(SKIP, text, i, out)
|
|
335
|
+
}
|
|
336
|
+
case OBJECT_NEXT:
|
|
337
|
+
case ARRAY_NEXT: {
|
|
338
|
+
if (c === COMMA) {
|
|
339
|
+
this.state = this.state === OBJECT_NEXT ? OBJECT_KEY : ARRAY_VALUE
|
|
340
|
+
return i + 1
|
|
341
|
+
}
|
|
342
|
+
if (c === (this.state === OBJECT_NEXT ? RBRACE : RBRACKET)) return this.close(i)
|
|
343
|
+
break
|
|
344
|
+
}
|
|
345
|
+
case ARRAY_START:
|
|
346
|
+
case ARRAY_VALUE: {
|
|
347
|
+
if (c === RBRACKET && this.state === ARRAY_START) return this.close(i)
|
|
348
|
+
if (!isValueStart(c)) break
|
|
349
|
+
if (frame.target) {
|
|
350
|
+
const next = this.scanElements(text, i, out)
|
|
351
|
+
if (next > i) return next
|
|
352
|
+
this.state = ARRAY_NEXT
|
|
353
|
+
return this.begin(ELEMENT, text, i, out)
|
|
354
|
+
}
|
|
355
|
+
this.state = ARRAY_NEXT
|
|
356
|
+
if (frame.index++ === this.config.indices[this.frames.length - 1]) {
|
|
357
|
+
frame.found = true
|
|
358
|
+
this.state = VALUE
|
|
359
|
+
return i
|
|
360
|
+
}
|
|
361
|
+
return this.begin(SKIP, text, i, out)
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
throw this.fail(
|
|
365
|
+
"Syntax",
|
|
366
|
+
this.state === END
|
|
367
|
+
? "Unexpected content after the document"
|
|
368
|
+
: `Unexpected character ${JSON.stringify(String.fromCharCode(c))}`,
|
|
369
|
+
this.base + i
|
|
370
|
+
)
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
close(i: number): number {
|
|
374
|
+
const frame = this.frames.pop()!
|
|
375
|
+
if (!frame.target && !frame.found) {
|
|
376
|
+
throw this.fail("Pointer", `No value at ${this.pointerPrefix(this.frames.length + 1)}`, this.base + i)
|
|
377
|
+
}
|
|
378
|
+
const parent = this.frames[this.frames.length - 1]
|
|
379
|
+
this.state = parent === undefined ? END : parent.object ? OBJECT_NEXT : ARRAY_NEXT
|
|
380
|
+
return i + 1
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// Starts capturing the value that begins at `i`.
|
|
384
|
+
begin(mode: number, text: string, i: number, out: Array<unknown>): number {
|
|
385
|
+
const c = text.charCodeAt(i)
|
|
386
|
+
this.capture = mode
|
|
387
|
+
this.start = this.base + i
|
|
388
|
+
this.inString = c === QUOTE
|
|
389
|
+
this.escape = false
|
|
390
|
+
this.depth = c === LBRACKET || c === LBRACE ? 1 : 0
|
|
391
|
+
this.scalar = !this.inString && this.depth === 0
|
|
392
|
+
if (this.depth > this.config.maxDepth) this.failDepth()
|
|
393
|
+
return this.scan(text, i + 1, out)
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
// Continues the captured value from `i`, completing it if it ends in this
|
|
397
|
+
// chunk. Returns the index after the value, or the chunk length.
|
|
398
|
+
scan(text: string, i: number, out: Array<unknown>): number {
|
|
399
|
+
const end = this.scalar ? this.scanScalar(text, i) : this.scanNested(text, i)
|
|
400
|
+
if (end === -1) return text.length
|
|
401
|
+
const source = this.buffer + text.slice(Math.max(this.start - this.base, 0), end)
|
|
402
|
+
this.checkSize(source.length)
|
|
403
|
+
const mode = this.capture
|
|
404
|
+
this.capture = NONE
|
|
405
|
+
this.buffer = ""
|
|
406
|
+
let value: unknown
|
|
407
|
+
try {
|
|
408
|
+
value = JSON.parse(source)
|
|
409
|
+
} catch (cause) {
|
|
410
|
+
throw this.fail("Syntax", "Invalid JSON value", this.start, cause)
|
|
411
|
+
}
|
|
412
|
+
if (mode === ELEMENT) out.push(value)
|
|
413
|
+
else if (mode === KEY) this.key = value as string
|
|
414
|
+
return end
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// A scalar ends at the first delimiter, which `JSON.parse` then validates.
|
|
418
|
+
scanScalar(text: string, i: number): number {
|
|
419
|
+
for (; i < text.length; i++) {
|
|
420
|
+
const c = text.charCodeAt(i)
|
|
421
|
+
if (isWhitespace(c) || c === COMMA || c === RBRACKET || c === RBRACE) return i
|
|
422
|
+
}
|
|
423
|
+
return -1
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// Tracks only string, escape and nesting state; `JSON.parse` validates the
|
|
427
|
+
// rest. Returns the index after the value, or -1.
|
|
428
|
+
scanNested(text: string, i: number): number {
|
|
429
|
+
if (this.inString) {
|
|
430
|
+
i = this.scanString(text, i, this.escape)
|
|
431
|
+
if (i === -1) return -1
|
|
432
|
+
this.inString = false
|
|
433
|
+
if (this.depth === 0) return i
|
|
434
|
+
}
|
|
435
|
+
let depth = this.depth
|
|
436
|
+
while (i < text.length) {
|
|
437
|
+
const c = text.charCodeAt(i++)
|
|
438
|
+
if (c === QUOTE) {
|
|
439
|
+
i = this.scanString(text, i, false)
|
|
440
|
+
if (i === -1) {
|
|
441
|
+
this.inString = true
|
|
442
|
+
break
|
|
443
|
+
}
|
|
444
|
+
} else if (c === LBRACKET || c === LBRACE) {
|
|
445
|
+
if (++depth > this.config.maxDepth) this.failDepth()
|
|
446
|
+
} else if ((c === RBRACKET || c === RBRACE) && --depth === 0) {
|
|
447
|
+
this.depth = 0
|
|
448
|
+
return i
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
this.depth = depth
|
|
452
|
+
return -1
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
// Scans string contents from `i`; returns the index after the closing quote,
|
|
456
|
+
// or -1 if the string continues into the next chunk, recording `escape` for
|
|
457
|
+
// `scanNested` to resume with.
|
|
458
|
+
scanString(text: string, i: number, escape: boolean): number {
|
|
459
|
+
let plain = 0
|
|
460
|
+
while (i < text.length) {
|
|
461
|
+
const c = text.charCodeAt(i++)
|
|
462
|
+
if (escape) {
|
|
463
|
+
escape = false
|
|
464
|
+
} else if (c === BACKSLASH) {
|
|
465
|
+
escape = true
|
|
466
|
+
} else if (c === QUOTE) {
|
|
467
|
+
return i
|
|
468
|
+
} else if (++plain === 16) {
|
|
469
|
+
// A long string: jump to the next quote or backslash.
|
|
470
|
+
if (this.quote < i) this.quote = indexOf(text, "\"", i)
|
|
471
|
+
if (this.backslash < i) this.backslash = indexOf(text, "\\", i)
|
|
472
|
+
i = Math.min(this.quote, this.backslash)
|
|
473
|
+
plain = 0
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
this.escape = escape
|
|
477
|
+
return -1
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
// Parses the elements from `i` up to the last comma or closing bracket at
|
|
481
|
+
// the array's level with one `JSON.parse`. Wrapped in brackets, that text
|
|
482
|
+
// parses only when every element and separator in it is valid. Returns `i`
|
|
483
|
+
// to leave anything else, including errors, to the precise scan.
|
|
484
|
+
scanElements(text: string, i: number, out: Array<unknown>): number {
|
|
485
|
+
if (this.base + i < this.slow) return i
|
|
486
|
+
const { maxDepth, maxElementSize } = this.config
|
|
487
|
+
let cut = -1
|
|
488
|
+
let start = i
|
|
489
|
+
let close = false
|
|
490
|
+
let depth = 0
|
|
491
|
+
let j = i
|
|
492
|
+
while (j < text.length) {
|
|
493
|
+
const c = text.charCodeAt(j++)
|
|
494
|
+
if (c === QUOTE) {
|
|
495
|
+
j = this.scanString(text, j, false)
|
|
496
|
+
if (j === -1) break
|
|
497
|
+
} else if (c === LBRACKET || c === LBRACE) {
|
|
498
|
+
if (++depth > maxDepth) break
|
|
499
|
+
} else if (c === RBRACKET || c === RBRACE) {
|
|
500
|
+
if (depth-- > 0) continue
|
|
501
|
+
// Including surrounding whitespace makes this a conservative size check.
|
|
502
|
+
if (c === RBRACKET && j - 1 - start <= maxElementSize) {
|
|
503
|
+
cut = j - 1
|
|
504
|
+
close = true
|
|
505
|
+
}
|
|
506
|
+
break
|
|
507
|
+
} else if (c === COMMA && depth === 0) {
|
|
508
|
+
if (j - 1 - start > maxElementSize) break
|
|
509
|
+
cut = j - 1
|
|
510
|
+
start = j
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
let values: Array<unknown> | undefined
|
|
514
|
+
if (cut !== -1) {
|
|
515
|
+
try {
|
|
516
|
+
values = JSON.parse("[" + text.slice(i, cut) + "]")
|
|
517
|
+
} catch {
|
|
518
|
+
this.slow = this.base + cut
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
// Rescanning may start before the cached matches, so discard them.
|
|
522
|
+
this.quote = -1
|
|
523
|
+
this.backslash = -1
|
|
524
|
+
if (values === undefined) return i
|
|
525
|
+
for (let k = 0; k < values.length; k++) out.push(values[k])
|
|
526
|
+
if (close) return this.close(cut)
|
|
527
|
+
this.state = ARRAY_VALUE
|
|
528
|
+
return cut + 1
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
checkSize(size: number): void {
|
|
532
|
+
if (size > this.config.maxElementSize) {
|
|
533
|
+
throw this.fail("Limit", `${this.subject()} exceeds maxElementSize of ${this.config.maxElementSize}`, this.start)
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
failDepth(): never {
|
|
538
|
+
throw this.fail("Limit", `${this.subject()} exceeds maxDepth of ${this.config.maxDepth}`, this.start)
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
/**
|
|
543
|
+
* Creates a channel that parses the text of one JSON document and emits the
|
|
544
|
+
* elements of one of its arrays.
|
|
545
|
+
*
|
|
546
|
+
* **When to use**
|
|
547
|
+
*
|
|
548
|
+
* Use when a large JSON array, or an object that contains one, arrives as
|
|
549
|
+
* string chunks and its elements should be processed as they arrive.
|
|
550
|
+
*
|
|
551
|
+
* **Details**
|
|
552
|
+
*
|
|
553
|
+
* Each output chunk holds the elements completed by one input chunk. Elements
|
|
554
|
+
* may span input chunks and are buffered only until they are complete. A
|
|
555
|
+
* leading BOM is stripped.
|
|
556
|
+
*
|
|
557
|
+
* **Gotchas**
|
|
558
|
+
*
|
|
559
|
+
* - The document is validated as it streams, so elements from earlier
|
|
560
|
+
* successfully processed input chunks may already have been emitted when a
|
|
561
|
+
* later error fails the channel. Elements accumulated in the failing chunk
|
|
562
|
+
* are not emitted. A failure in content after the selected array signals
|
|
563
|
+
* that the document was invalid, but cannot guard against using earlier
|
|
564
|
+
* output.
|
|
565
|
+
* - The pointer follows the first occurrence of a key, where `JSON.parse`
|
|
566
|
+
* keeps the last. A repeated followed key fails with a `Pointer` error, as
|
|
567
|
+
* does a first occurrence that is not an object or array where the pointer
|
|
568
|
+
* needs one. When the repeat comes after the selected array, elements from
|
|
569
|
+
* earlier successfully processed chunks may already have been emitted.
|
|
570
|
+
* - A root that is not an array fails with a `Pointer` error unless the
|
|
571
|
+
* pointer selects an array inside it.
|
|
572
|
+
*
|
|
573
|
+
* **Example** (Streaming an array inside an envelope)
|
|
574
|
+
*
|
|
575
|
+
* ```ts import.meta.vitest
|
|
576
|
+
* import { Effect, Stream } from "effect"
|
|
577
|
+
* import { JsonArray } from "effect/encoding"
|
|
578
|
+
*
|
|
579
|
+
* const items = Stream.make("{\"total\":2,\"items\":[{\"id\":1},{\"i", "d\":2}]}").pipe(
|
|
580
|
+
* Stream.pipeThroughChannel(JsonArray.decodeString({ pointer: "/items" })),
|
|
581
|
+
* Stream.runCollect
|
|
582
|
+
* )
|
|
583
|
+
* await Effect.runPromise(items) // => [{ id: 1 }, { id: 2 }]
|
|
584
|
+
* ```
|
|
585
|
+
*
|
|
586
|
+
* @see decode
|
|
587
|
+
* @see decodeSchemaString
|
|
588
|
+
* @stability unstable
|
|
589
|
+
* @category decoding
|
|
590
|
+
* @since 4.0.6
|
|
591
|
+
*/
|
|
592
|
+
export const decodeString = <IE = never, Done = unknown>(options?: DecodeOptions): Channel.Channel<
|
|
593
|
+
Arr.NonEmptyReadonlyArray<unknown>,
|
|
594
|
+
IE | JsonArrayError,
|
|
595
|
+
Done,
|
|
596
|
+
Arr.NonEmptyReadonlyArray<string>,
|
|
597
|
+
IE,
|
|
598
|
+
Done
|
|
599
|
+
> => {
|
|
600
|
+
const config = makeConfig(options)
|
|
601
|
+
return Channel.fromTransform((upstream, _scope) =>
|
|
602
|
+
Effect.sync(() => {
|
|
603
|
+
const scanner = new Scanner(config)
|
|
604
|
+
let done: Pull.Pull<never, never, Done> | undefined
|
|
605
|
+
type Out = Pull.Pull<Arr.NonEmptyReadonlyArray<unknown>, IE | JsonArrayError, Done>
|
|
606
|
+
|
|
607
|
+
const emit = (run: (out: Array<unknown>) => void): Out => {
|
|
608
|
+
const out: Array<unknown> = []
|
|
609
|
+
try {
|
|
610
|
+
run(out)
|
|
611
|
+
} catch (error) {
|
|
612
|
+
if (isJsonArrayError(error)) return Effect.fail(error)
|
|
613
|
+
throw error
|
|
614
|
+
}
|
|
615
|
+
return Arr.isArrayNonEmpty(out) ? Effect.succeed(out) : pull
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
const pull: Out = Effect.suspend(() => {
|
|
619
|
+
if (done !== undefined) return done
|
|
620
|
+
return Pull.matchEffect(upstream, {
|
|
621
|
+
onSuccess: (texts) =>
|
|
622
|
+
emit((out) => {
|
|
623
|
+
for (const text of texts) scanner.feed(text, out)
|
|
624
|
+
}),
|
|
625
|
+
onFailure: Effect.failCause,
|
|
626
|
+
onDone: (value) => {
|
|
627
|
+
done = Cause.done(value)
|
|
628
|
+
return emit(() => scanner.end())
|
|
629
|
+
}
|
|
630
|
+
})
|
|
631
|
+
})
|
|
632
|
+
return pull
|
|
633
|
+
})
|
|
634
|
+
)
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
/**
|
|
638
|
+
* Creates a channel that parses UTF-8 bytes of one JSON document and emits the
|
|
639
|
+
* elements of one of its arrays.
|
|
640
|
+
*
|
|
641
|
+
* **Details**
|
|
642
|
+
*
|
|
643
|
+
* Multi-byte characters may span input chunks, and invalid UTF-8 is replaced
|
|
644
|
+
* with U+FFFD.
|
|
645
|
+
*
|
|
646
|
+
* @see decodeString
|
|
647
|
+
* @stability unstable
|
|
648
|
+
* @category decoding
|
|
649
|
+
* @since 4.0.6
|
|
650
|
+
*/
|
|
651
|
+
export const decode = <IE = never, Done = unknown>(options?: DecodeOptions): Channel.Channel<
|
|
652
|
+
Arr.NonEmptyReadonlyArray<unknown>,
|
|
653
|
+
IE | JsonArrayError,
|
|
654
|
+
Done,
|
|
655
|
+
Arr.NonEmptyReadonlyArray<Uint8Array>,
|
|
656
|
+
IE,
|
|
657
|
+
Done
|
|
658
|
+
> => Channel.pipeTo(Channel.decodeText<IE, Done>("utf-8", { ignoreBOM: true }), decodeString(options))
|
|
659
|
+
|
|
660
|
+
/**
|
|
661
|
+
* Creates a channel that parses the text of one JSON document and decodes the
|
|
662
|
+
* elements of one of its arrays with a schema.
|
|
663
|
+
*
|
|
664
|
+
* @see decodeString
|
|
665
|
+
* @stability unstable
|
|
666
|
+
* @category decoding
|
|
667
|
+
* @since 4.0.6
|
|
668
|
+
*/
|
|
669
|
+
export const decodeSchemaString = <S extends Schema.Constraint>(
|
|
670
|
+
schema: S
|
|
671
|
+
) =>
|
|
672
|
+
<IE = never, Done = unknown>(options?: DecodeOptions): Channel.Channel<
|
|
673
|
+
Arr.NonEmptyReadonlyArray<S["Type"]>,
|
|
674
|
+
Schema.SchemaError | JsonArrayError | IE,
|
|
675
|
+
Done,
|
|
676
|
+
Arr.NonEmptyReadonlyArray<string>,
|
|
677
|
+
IE,
|
|
678
|
+
Done,
|
|
679
|
+
S["DecodingServices"]
|
|
680
|
+
> => Channel.pipeTo(decodeString(options), ChannelSchema.decodeUnknown(schema)())
|
|
681
|
+
|
|
682
|
+
/**
|
|
683
|
+
* Creates a channel that parses UTF-8 bytes of one JSON document and decodes
|
|
684
|
+
* the elements of one of its arrays with a schema.
|
|
685
|
+
*
|
|
686
|
+
* @see decodeSchemaString
|
|
687
|
+
* @stability unstable
|
|
688
|
+
* @category decoding
|
|
689
|
+
* @since 4.0.6
|
|
690
|
+
*/
|
|
691
|
+
export const decodeSchema = <S extends Schema.Constraint>(
|
|
692
|
+
schema: S
|
|
693
|
+
) =>
|
|
694
|
+
<IE = never, Done = unknown>(options?: DecodeOptions): Channel.Channel<
|
|
695
|
+
Arr.NonEmptyReadonlyArray<S["Type"]>,
|
|
696
|
+
Schema.SchemaError | JsonArrayError | IE,
|
|
697
|
+
Done,
|
|
698
|
+
Arr.NonEmptyReadonlyArray<Uint8Array>,
|
|
699
|
+
IE,
|
|
700
|
+
Done,
|
|
701
|
+
S["DecodingServices"]
|
|
702
|
+
> => Channel.pipeTo(decode(options), ChannelSchema.decodeUnknown(schema)())
|
|
703
|
+
|
|
704
|
+
const stringify = (value: unknown): string => {
|
|
705
|
+
let output: string | undefined
|
|
706
|
+
try {
|
|
707
|
+
output = JSON.stringify(value)
|
|
708
|
+
} catch (cause) {
|
|
709
|
+
throw new JsonArrayError({ kind: "Encode", message: cause instanceof Error ? cause.message : String(cause), cause })
|
|
710
|
+
}
|
|
711
|
+
if (output === undefined) {
|
|
712
|
+
throw new JsonArrayError({ kind: "Encode", message: `Value of type ${typeof value} cannot be represented as JSON` })
|
|
713
|
+
}
|
|
714
|
+
return output
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
/**
|
|
718
|
+
* Creates a channel that writes a stream of values as the text of one JSON
|
|
719
|
+
* array.
|
|
720
|
+
*
|
|
721
|
+
* **Details**
|
|
722
|
+
*
|
|
723
|
+
* Each input chunk produces one string. An empty stream produces `"[]"`.
|
|
724
|
+
* Values are written with `JSON.stringify`.
|
|
725
|
+
*
|
|
726
|
+
* **Gotchas**
|
|
727
|
+
*
|
|
728
|
+
* A value that `JSON.stringify` cannot write, such as `undefined`, a function
|
|
729
|
+
* or a `bigint`, fails with an `Encode` error after the preceding text has
|
|
730
|
+
* been emitted.
|
|
731
|
+
*
|
|
732
|
+
* **Example** (Writing values as a JSON array)
|
|
733
|
+
*
|
|
734
|
+
* ```ts import.meta.vitest
|
|
735
|
+
* import { Effect, Stream } from "effect"
|
|
736
|
+
* import { JsonArray } from "effect/encoding"
|
|
737
|
+
*
|
|
738
|
+
* const json = Stream.make({ id: 1 }, { id: 2 }).pipe(
|
|
739
|
+
* Stream.pipeThroughChannel(JsonArray.encodeString()),
|
|
740
|
+
* Stream.mkString
|
|
741
|
+
* )
|
|
742
|
+
* await Effect.runPromise(json) // => '[{"id":1},{"id":2}]'
|
|
743
|
+
* ```
|
|
744
|
+
*
|
|
745
|
+
* @see encode
|
|
746
|
+
* @see encodeSchemaString
|
|
747
|
+
* @stability unstable
|
|
748
|
+
* @category encoding
|
|
749
|
+
* @since 4.0.6
|
|
750
|
+
*/
|
|
751
|
+
export const encodeString = <IE = never, Done = unknown>(): Channel.Channel<
|
|
752
|
+
Arr.NonEmptyReadonlyArray<string>,
|
|
753
|
+
IE | JsonArrayError,
|
|
754
|
+
Done,
|
|
755
|
+
Arr.NonEmptyReadonlyArray<unknown>,
|
|
756
|
+
IE,
|
|
757
|
+
Done
|
|
758
|
+
> =>
|
|
759
|
+
Channel.fromTransform((upstream, _scope) =>
|
|
760
|
+
Effect.sync(() => {
|
|
761
|
+
let started = false
|
|
762
|
+
let done: Pull.Pull<never, never, Done> | undefined
|
|
763
|
+
type Out = Pull.Pull<Arr.NonEmptyReadonlyArray<string>, IE | JsonArrayError, Done>
|
|
764
|
+
const pull: Out = Effect.suspend((): Out => {
|
|
765
|
+
if (done !== undefined) return done
|
|
766
|
+
return Pull.matchEffect(upstream, {
|
|
767
|
+
onSuccess: (values): Out => {
|
|
768
|
+
let text: string
|
|
769
|
+
try {
|
|
770
|
+
text = (started ? "," : "[") + values.map(stringify).join(",")
|
|
771
|
+
} catch (error) {
|
|
772
|
+
if (isJsonArrayError(error)) return Effect.fail(error)
|
|
773
|
+
throw error
|
|
774
|
+
}
|
|
775
|
+
started = true
|
|
776
|
+
return Effect.succeed(Arr.of(text))
|
|
777
|
+
},
|
|
778
|
+
onFailure: Effect.failCause,
|
|
779
|
+
onDone: (value) => {
|
|
780
|
+
done = Cause.done(value)
|
|
781
|
+
return Effect.succeed(Arr.of(started ? "]" : "[]"))
|
|
782
|
+
}
|
|
783
|
+
})
|
|
784
|
+
})
|
|
785
|
+
return pull
|
|
786
|
+
})
|
|
787
|
+
)
|
|
788
|
+
|
|
789
|
+
/**
|
|
790
|
+
* Creates a channel that writes a stream of values as UTF-8 bytes of one JSON
|
|
791
|
+
* array.
|
|
792
|
+
*
|
|
793
|
+
* @see encodeString
|
|
794
|
+
* @stability unstable
|
|
795
|
+
* @category encoding
|
|
796
|
+
* @since 4.0.6
|
|
797
|
+
*/
|
|
798
|
+
export const encode = <IE = never, Done = unknown>(): Channel.Channel<
|
|
799
|
+
Arr.NonEmptyReadonlyArray<Uint8Array>,
|
|
800
|
+
IE | JsonArrayError,
|
|
801
|
+
Done,
|
|
802
|
+
Arr.NonEmptyReadonlyArray<unknown>,
|
|
803
|
+
IE,
|
|
804
|
+
Done
|
|
805
|
+
> => Channel.map(encodeString(), Arr.map((text) => encoder.encode(text)))
|
|
806
|
+
|
|
807
|
+
/**
|
|
808
|
+
* Creates a channel that encodes values with a schema and writes them as the
|
|
809
|
+
* text of one JSON array.
|
|
810
|
+
*
|
|
811
|
+
* @see encodeString
|
|
812
|
+
* @stability unstable
|
|
813
|
+
* @category encoding
|
|
814
|
+
* @since 4.0.6
|
|
815
|
+
*/
|
|
816
|
+
export const encodeSchemaString = <S extends Schema.Constraint>(
|
|
817
|
+
schema: S
|
|
818
|
+
) =>
|
|
819
|
+
<IE = never, Done = unknown>(): Channel.Channel<
|
|
820
|
+
Arr.NonEmptyReadonlyArray<string>,
|
|
821
|
+
JsonArrayError | Schema.SchemaError | IE,
|
|
822
|
+
Done,
|
|
823
|
+
Arr.NonEmptyReadonlyArray<S["Type"]>,
|
|
824
|
+
IE,
|
|
825
|
+
Done,
|
|
826
|
+
S["EncodingServices"]
|
|
827
|
+
> => Channel.pipeTo(ChannelSchema.encode(schema)(), encodeString())
|
|
828
|
+
|
|
829
|
+
/**
|
|
830
|
+
* Creates a channel that encodes values with a schema and writes them as UTF-8
|
|
831
|
+
* bytes of one JSON array.
|
|
832
|
+
*
|
|
833
|
+
* @see encodeSchemaString
|
|
834
|
+
* @stability unstable
|
|
835
|
+
* @category encoding
|
|
836
|
+
* @since 4.0.6
|
|
837
|
+
*/
|
|
838
|
+
export const encodeSchema = <S extends Schema.Constraint>(
|
|
839
|
+
schema: S
|
|
840
|
+
) =>
|
|
841
|
+
<IE = never, Done = unknown>(): Channel.Channel<
|
|
842
|
+
Arr.NonEmptyReadonlyArray<Uint8Array>,
|
|
843
|
+
JsonArrayError | Schema.SchemaError | IE,
|
|
844
|
+
Done,
|
|
845
|
+
Arr.NonEmptyReadonlyArray<S["Type"]>,
|
|
846
|
+
IE,
|
|
847
|
+
Done,
|
|
848
|
+
S["EncodingServices"]
|
|
849
|
+
> => Channel.pipeTo(ChannelSchema.encode(schema)(), encode())
|