effect 4.0.5 → 4.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai-docs/package.json +1 -1
- package/ai-docs/src/06_schedule/10_schedules.ts +5 -4
- package/ai-docs/tsconfig.json +3 -1
- package/dist/Arbitrary.d.ts +10 -2
- package/dist/Arbitrary.d.ts.map +1 -1
- package/dist/Arbitrary.js +2 -1
- package/dist/Arbitrary.js.map +1 -1
- package/dist/Array.d.ts +117 -52
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +41 -20
- package/dist/Array.js.map +1 -1
- package/dist/Bytes.d.ts +79 -0
- package/dist/Bytes.d.ts.map +1 -0
- package/dist/Bytes.js +109 -0
- package/dist/Bytes.js.map +1 -0
- package/dist/Channel.d.ts +181 -13
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +144 -34
- package/dist/Channel.js.map +1 -1
- package/dist/ChannelSchema.d.ts.map +1 -1
- package/dist/ChannelSchema.js.map +1 -1
- package/dist/Chunk.d.ts +39 -21
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Chunk.js +26 -17
- package/dist/Chunk.js.map +1 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js +8 -3
- package/dist/Config.js.map +1 -1
- package/dist/ConfigProvider.d.ts.map +1 -1
- package/dist/ConfigProvider.js +2 -1
- package/dist/ConfigProvider.js.map +1 -1
- package/dist/Cron.d.ts +2 -2
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +6 -3
- package/dist/Cron.js.map +1 -1
- package/dist/Data.d.ts +54 -235
- package/dist/Data.d.ts.map +1 -1
- package/dist/Data.js.map +1 -1
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +56 -16
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +488 -164
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +204 -38
- package/dist/Effect.js.map +1 -1
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +8 -1
- package/dist/Equal.js.map +1 -1
- package/dist/Equivalence.d.ts +2 -1
- package/dist/Equivalence.d.ts.map +1 -1
- package/dist/Equivalence.js +12 -8
- package/dist/Equivalence.js.map +1 -1
- package/dist/Exit.d.ts +27 -12
- package/dist/Exit.d.ts.map +1 -1
- package/dist/Exit.js +8 -3
- package/dist/Exit.js.map +1 -1
- package/dist/FiberHandle.d.ts +2 -0
- package/dist/FiberHandle.d.ts.map +1 -1
- package/dist/FiberHandle.js +9 -4
- package/dist/FiberHandle.js.map +1 -1
- package/dist/FiberMap.d.ts +2 -0
- package/dist/FiberMap.d.ts.map +1 -1
- package/dist/FiberMap.js +5 -2
- package/dist/FiberMap.js.map +1 -1
- package/dist/FileSystem.d.ts +5 -0
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +3 -0
- package/dist/FileSystem.js.map +1 -1
- package/dist/Formatter.d.ts.map +1 -1
- package/dist/Formatter.js +27 -13
- package/dist/Formatter.js.map +1 -1
- package/dist/Graph.d.ts.map +1 -1
- package/dist/Graph.js.map +1 -1
- package/dist/Hash.d.ts.map +1 -1
- package/dist/Hash.js +4 -1
- package/dist/Hash.js.map +1 -1
- package/dist/HashSet.d.ts.map +1 -1
- package/dist/HashSet.js.map +1 -1
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +18 -17
- package/dist/Iterable.js.map +1 -1
- package/dist/JsonPatch.js +4 -0
- package/dist/JsonPatch.js.map +1 -1
- package/dist/JsonSchema.d.ts +9 -3
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +32 -43
- package/dist/JsonSchema.js.map +1 -1
- package/dist/Layer.d.ts.map +1 -1
- package/dist/Layer.js +2 -2
- package/dist/Layer.js.map +1 -1
- package/dist/ManagedRuntime.d.ts +19 -1
- package/dist/ManagedRuntime.d.ts.map +1 -1
- package/dist/ManagedRuntime.js +62 -6
- package/dist/ManagedRuntime.js.map +1 -1
- package/dist/Metric.d.ts +135 -3
- package/dist/Metric.d.ts.map +1 -1
- package/dist/Metric.js +197 -25
- package/dist/Metric.js.map +1 -1
- package/dist/MutableHashMap.d.ts.map +1 -1
- package/dist/MutableHashMap.js.map +1 -1
- package/dist/MutableList.d.ts +5 -2
- package/dist/MutableList.d.ts.map +1 -1
- package/dist/MutableList.js +7 -5
- package/dist/MutableList.js.map +1 -1
- package/dist/MutableRef.d.ts.map +1 -1
- package/dist/MutableRef.js +7 -0
- package/dist/MutableRef.js.map +1 -1
- package/dist/Number.js +2 -2
- package/dist/Number.js.map +1 -1
- package/dist/Optic.d.ts.map +1 -1
- package/dist/Optic.js.map +1 -1
- package/dist/PartitionedSemaphore.d.ts +2 -1
- package/dist/PartitionedSemaphore.d.ts.map +1 -1
- package/dist/PartitionedSemaphore.js +22 -12
- package/dist/PartitionedSemaphore.js.map +1 -1
- package/dist/Path.d.ts.map +1 -1
- package/dist/Path.js +8 -1
- package/dist/Path.js.map +1 -1
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +77 -27
- package/dist/Pool.js.map +1 -1
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +17 -13
- package/dist/PubSub.js.map +1 -1
- package/dist/Queue.d.ts +4 -1
- package/dist/Queue.d.ts.map +1 -1
- package/dist/Queue.js +4 -1
- package/dist/Queue.js.map +1 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +1 -1
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts +12 -7
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +9 -6
- package/dist/RcMap.js.map +1 -1
- package/dist/Record.d.ts +51 -0
- package/dist/Record.d.ts.map +1 -1
- package/dist/Record.js +17 -0
- package/dist/Record.js.map +1 -1
- package/dist/Ref.d.ts.map +1 -1
- package/dist/Ref.js +8 -0
- package/dist/Ref.js.map +1 -1
- package/dist/References.d.ts +5 -4
- package/dist/References.d.ts.map +1 -1
- package/dist/References.js +5 -4
- package/dist/References.js.map +1 -1
- package/dist/RequestResolver.d.ts +31 -1
- package/dist/RequestResolver.d.ts.map +1 -1
- package/dist/RequestResolver.js +39 -4
- package/dist/RequestResolver.js.map +1 -1
- package/dist/Resource.js +1 -1
- package/dist/Resource.js.map +1 -1
- package/dist/Runtime.d.ts +3 -3
- package/dist/Runtime.d.ts.map +1 -1
- package/dist/Runtime.js +18 -15
- package/dist/Runtime.js.map +1 -1
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +1 -1
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +408 -340
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +370 -47
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +9 -7
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +38 -25
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaGetter.d.ts +8 -3
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +15 -5
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaIssue.d.ts +4 -4
- package/dist/SchemaIssue.d.ts.map +1 -1
- package/dist/SchemaIssue.js +29 -51
- package/dist/SchemaIssue.js.map +1 -1
- package/dist/SchemaParser.d.ts.map +1 -1
- package/dist/SchemaParser.js +48 -22
- package/dist/SchemaParser.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +75 -11
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +41 -13
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +5 -2
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +10 -3
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/Scope.d.ts +12 -2
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +5 -0
- package/dist/Scope.js.map +1 -1
- package/dist/ScopedCache.d.ts +10 -7
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +9 -5
- package/dist/ScopedCache.js.map +1 -1
- package/dist/SemVer.d.ts +1196 -0
- package/dist/SemVer.d.ts.map +1 -0
- package/dist/SemVer.js +756 -0
- package/dist/SemVer.js.map +1 -0
- package/dist/SemVerRange.d.ts +559 -0
- package/dist/SemVerRange.d.ts.map +1 -0
- package/dist/SemVerRange.js +551 -0
- package/dist/SemVerRange.js.map +1 -0
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +54 -35
- package/dist/Semaphore.js.map +1 -1
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +13 -4
- package/dist/Sink.js.map +1 -1
- package/dist/Stream.d.ts +235 -8
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +167 -70
- package/dist/Stream.js.map +1 -1
- package/dist/String.d.ts +7 -2
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +11 -6
- package/dist/String.js.map +1 -1
- package/dist/TextDiff.d.ts +399 -0
- package/dist/TextDiff.d.ts.map +1 -0
- package/dist/TextDiff.js +634 -0
- package/dist/TextDiff.js.map +1 -0
- package/dist/Tracer.d.ts +11 -1
- package/dist/Tracer.d.ts.map +1 -1
- package/dist/Tracer.js +6 -1
- package/dist/Tracer.js.map +1 -1
- package/dist/TxHashMap.d.ts.map +1 -1
- package/dist/TxHashMap.js.map +1 -1
- package/dist/TxHashSet.d.ts.map +1 -1
- package/dist/TxHashSet.js.map +1 -1
- package/dist/ai/AiError.d.ts +68 -4
- package/dist/ai/AiError.d.ts.map +1 -1
- package/dist/ai/AiError.js +50 -2
- package/dist/ai/AiError.js.map +1 -1
- package/dist/ai/Chat.d.ts +1 -2
- package/dist/ai/Chat.d.ts.map +1 -1
- package/dist/ai/Chat.js +6 -3
- package/dist/ai/Chat.js.map +1 -1
- package/dist/ai/Decision.d.ts +46 -1
- package/dist/ai/Decision.d.ts.map +1 -1
- package/dist/ai/Decision.js.map +1 -1
- package/dist/ai/DecisionModel.d.ts +129 -11
- package/dist/ai/DecisionModel.d.ts.map +1 -1
- package/dist/ai/DecisionModel.js +182 -94
- package/dist/ai/DecisionModel.js.map +1 -1
- package/dist/ai/EmbeddingModel.d.ts +10 -0
- package/dist/ai/EmbeddingModel.d.ts.map +1 -1
- package/dist/ai/EmbeddingModel.js +21 -7
- package/dist/ai/EmbeddingModel.js.map +1 -1
- package/dist/ai/LanguageModel.d.ts.map +1 -1
- package/dist/ai/LanguageModel.js +9 -0
- package/dist/ai/LanguageModel.js.map +1 -1
- package/dist/ai/McpClient.d.ts +289 -0
- package/dist/ai/McpClient.d.ts.map +1 -0
- package/dist/ai/McpClient.js +819 -0
- package/dist/ai/McpClient.js.map +1 -0
- package/dist/ai/McpClientError.d.ts +254 -0
- package/dist/ai/McpClientError.d.ts.map +1 -0
- package/dist/ai/McpClientError.js +260 -0
- package/dist/ai/McpClientError.js.map +1 -0
- package/dist/ai/McpProtocol.d.ts +2 -2
- package/dist/ai/McpProtocol.d.ts.map +1 -1
- package/dist/ai/McpSchema.d.ts +258 -125
- package/dist/ai/McpSchema.d.ts.map +1 -1
- package/dist/ai/McpSchema.js +94 -24
- package/dist/ai/McpSchema.js.map +1 -1
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +46 -37
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/Prompt.d.ts +74 -20
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +61 -1
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Response.d.ts +160 -3
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +39 -37
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +36 -4
- package/dist/ai/Tool.d.ts.map +1 -1
- package/dist/ai/Tool.js +5 -2
- package/dist/ai/Tool.js.map +1 -1
- package/dist/ai/Toolkit.d.ts +48 -1
- package/dist/ai/Toolkit.d.ts.map +1 -1
- package/dist/ai/Toolkit.js +73 -13
- package/dist/ai/Toolkit.js.map +1 -1
- package/dist/ai/index.d.ts +10 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +10 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/internal/mcpCore.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js +1 -1
- package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js +2 -2
- package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js +2 -2
- package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js +4 -7
- package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
- package/dist/ai/internal/mcpProtocol.js +16 -2
- package/dist/ai/internal/mcpProtocol.js.map +1 -1
- package/dist/ai/internal/mcpRuntime.js +3 -4
- package/dist/ai/internal/mcpRuntime.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2024_11_05.js +19 -13
- package/dist/ai/internal/mcpSchema/v2024_11_05.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2025_03_26.js +3 -2
- package/dist/ai/internal/mcpSchema/v2025_03_26.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2025_06_18.js +7 -7
- package/dist/ai/internal/mcpSchema/v2025_06_18.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2025_11_25.js +8 -8
- package/dist/ai/internal/mcpSchema/v2025_11_25.js.map +1 -1
- package/dist/ai/internal/mcpSchema/v2026_07_28.js +43 -42
- package/dist/ai/internal/mcpSchema/v2026_07_28.js.map +1 -1
- package/dist/cli/Argument.d.ts +15 -0
- package/dist/cli/Argument.d.ts.map +1 -1
- package/dist/cli/Argument.js +5 -0
- package/dist/cli/Argument.js.map +1 -1
- package/dist/cli/CliError.d.ts +120 -2
- package/dist/cli/CliError.d.ts.map +1 -1
- package/dist/cli/CliError.js +106 -5
- package/dist/cli/CliError.js.map +1 -1
- package/dist/cli/CliOutput.d.ts +155 -6
- package/dist/cli/CliOutput.d.ts.map +1 -1
- package/dist/cli/CliOutput.js +62 -6
- package/dist/cli/CliOutput.js.map +1 -1
- package/dist/cli/Command.d.ts +310 -18
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +164 -33
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Completions.d.ts +63 -0
- package/dist/cli/Completions.d.ts.map +1 -1
- package/dist/cli/Completions.js +49 -9
- package/dist/cli/Completions.js.map +1 -1
- package/dist/cli/Flag.d.ts +130 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +61 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/cli/GlobalFlag.js +14 -6
- package/dist/cli/GlobalFlag.js.map +1 -1
- package/dist/cli/Param.d.ts +116 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +77 -2
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/TerminalCapabilities.d.ts +85 -0
- package/dist/cli/TerminalCapabilities.d.ts.map +1 -0
- package/dist/cli/TerminalCapabilities.js +124 -0
- package/dist/cli/TerminalCapabilities.js.map +1 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/internal/command.d.ts +2 -1
- package/dist/cli/internal/command.d.ts.map +1 -1
- package/dist/cli/internal/command.js +5 -2
- package/dist/cli/internal/command.js.map +1 -1
- package/dist/cli/internal/completions/bash.js +77 -30
- package/dist/cli/internal/completions/bash.js.map +1 -1
- package/dist/cli/internal/completions/descriptor.js +9 -1
- package/dist/cli/internal/completions/descriptor.js.map +1 -1
- package/dist/cli/internal/completions/fish.js +10 -8
- package/dist/cli/internal/completions/fish.js.map +1 -1
- package/dist/cli/internal/completions/powershell.js +18 -9
- package/dist/cli/internal/completions/powershell.js.map +1 -1
- package/dist/cli/internal/completions/zsh.js +8 -5
- package/dist/cli/internal/completions/zsh.js.map +1 -1
- package/dist/cli/internal/formatter.d.ts +2 -0
- package/dist/cli/internal/formatter.d.ts.map +1 -0
- package/dist/cli/internal/formatter.js +15 -0
- package/dist/cli/internal/formatter.js.map +1 -0
- package/dist/cli/internal/lexer.js +24 -10
- package/dist/cli/internal/lexer.js.map +1 -1
- package/dist/cli/internal/parser.js +24 -12
- package/dist/cli/internal/parser.js.map +1 -1
- package/dist/cluster/ClusterCron.d.ts +29 -1
- package/dist/cluster/ClusterCron.d.ts.map +1 -1
- package/dist/cluster/ClusterCron.js +64 -32
- package/dist/cluster/ClusterCron.js.map +1 -1
- package/dist/cluster/ClusterMetrics.d.ts +143 -7
- package/dist/cluster/ClusterMetrics.d.ts.map +1 -1
- package/dist/cluster/ClusterMetrics.js +151 -7
- package/dist/cluster/ClusterMetrics.js.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +82 -21
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/Entity.d.ts +2 -0
- package/dist/cluster/Entity.d.ts.map +1 -1
- package/dist/cluster/Entity.js.map +1 -1
- package/dist/cluster/MessageStorage.d.ts +44 -45
- package/dist/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/cluster/MessageStorage.js +6 -7
- package/dist/cluster/MessageStorage.js.map +1 -1
- package/dist/cluster/Runners.d.ts.map +1 -1
- package/dist/cluster/Runners.js +54 -15
- package/dist/cluster/Runners.js.map +1 -1
- package/dist/cluster/Sharding.d.ts +1 -0
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +155 -52
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +30 -0
- package/dist/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/cluster/ShardingConfig.js +4 -0
- package/dist/cluster/ShardingConfig.js.map +1 -1
- package/dist/cluster/Snowflake.d.ts.map +1 -1
- package/dist/cluster/Snowflake.js +3 -7
- package/dist/cluster/Snowflake.js.map +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +40 -50
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/cluster/SqlRunnerStorage.d.ts +2 -2
- package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +97 -43
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +119 -28
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/devtools/DevTools.d.ts +3 -2
- package/dist/devtools/DevTools.d.ts.map +1 -1
- package/dist/devtools/DevTools.js +3 -2
- package/dist/devtools/DevTools.js.map +1 -1
- package/dist/devtools/DevToolsClient.d.ts +11 -0
- package/dist/devtools/DevToolsClient.d.ts.map +1 -1
- package/dist/devtools/DevToolsClient.js +33 -4
- package/dist/devtools/DevToolsClient.js.map +1 -1
- package/dist/encoding/Base64.js +36 -0
- package/dist/encoding/Base64.js.map +1 -1
- package/dist/encoding/Base64Url.d.ts +29 -0
- package/dist/encoding/Base64Url.d.ts.map +1 -1
- package/dist/encoding/Base64Url.js +29 -0
- package/dist/encoding/Base64Url.js.map +1 -1
- package/dist/encoding/Ini.d.ts.map +1 -1
- package/dist/encoding/Ini.js +3 -0
- package/dist/encoding/Ini.js.map +1 -1
- package/dist/encoding/JsonArray.d.ts +270 -0
- package/dist/encoding/JsonArray.d.ts.map +1 -0
- package/dist/encoding/JsonArray.js +691 -0
- package/dist/encoding/JsonArray.js.map +1 -0
- package/dist/encoding/Ndjson.d.ts +43 -4
- package/dist/encoding/Ndjson.d.ts.map +1 -1
- package/dist/encoding/Ndjson.js +169 -18
- package/dist/encoding/Ndjson.js.map +1 -1
- package/dist/encoding/SchemaBinary.d.ts +9 -1
- package/dist/encoding/SchemaBinary.d.ts.map +1 -1
- package/dist/encoding/SchemaBinary.js +12 -19
- package/dist/encoding/SchemaBinary.js.map +1 -1
- package/dist/encoding/Sse.d.ts.map +1 -1
- package/dist/encoding/Sse.js +3 -3
- package/dist/encoding/Sse.js.map +1 -1
- package/dist/encoding/Tar.d.ts +309 -0
- package/dist/encoding/Tar.d.ts.map +1 -0
- package/dist/encoding/Tar.js +1182 -0
- package/dist/encoding/Tar.js.map +1 -0
- package/dist/encoding/Toml.d.ts.map +1 -1
- package/dist/encoding/Toml.js +24 -19
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/encoding/Xml.d.ts +464 -0
- package/dist/encoding/Xml.d.ts.map +1 -0
- package/dist/encoding/Xml.js +1619 -0
- package/dist/encoding/Xml.js.map +1 -0
- package/dist/encoding/Yaml.d.ts +6 -2
- package/dist/encoding/Yaml.d.ts.map +1 -1
- package/dist/encoding/Yaml.js +97 -34
- package/dist/encoding/Yaml.js.map +1 -1
- package/dist/encoding/Zip.d.ts +413 -0
- package/dist/encoding/Zip.d.ts.map +1 -0
- package/dist/encoding/Zip.js +1255 -0
- package/dist/encoding/Zip.js.map +1 -0
- package/dist/encoding/index.d.ts +20 -0
- package/dist/encoding/index.d.ts.map +1 -1
- package/dist/encoding/index.js +20 -0
- package/dist/encoding/index.js.map +1 -1
- package/dist/eventlog/EventJournal.d.ts +90 -5
- package/dist/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/eventlog/EventJournal.js +488 -228
- package/dist/eventlog/EventJournal.js.map +1 -1
- package/dist/eventlog/EventLog.d.ts +180 -12
- package/dist/eventlog/EventLog.d.ts.map +1 -1
- package/dist/eventlog/EventLog.js +394 -146
- package/dist/eventlog/EventLog.js.map +1 -1
- package/dist/eventlog/EventLogEncryption.d.ts +36 -30
- package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/eventlog/EventLogEncryption.js +97 -38
- package/dist/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/eventlog/EventLogMessage.d.ts +74 -34
- package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
- package/dist/eventlog/EventLogMessage.js +45 -11
- package/dist/eventlog/EventLogMessage.js.map +1 -1
- package/dist/eventlog/EventLogRemote.d.ts +45 -8
- package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
- package/dist/eventlog/EventLogRemote.js +51 -14
- package/dist/eventlog/EventLogRemote.js.map +1 -1
- package/dist/eventlog/EventLogServer.d.ts +46 -3
- package/dist/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/eventlog/EventLogServer.js +119 -19
- package/dist/eventlog/EventLogServer.js.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.d.ts +23 -33
- package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerEncrypted.js +97 -70
- package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.d.ts +39 -5
- package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/EventLogServerUnencrypted.js +151 -69
- package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/EventRow.d.ts +288 -0
- package/dist/eventlog/EventRow.d.ts.map +1 -0
- package/dist/eventlog/EventRow.js +435 -0
- package/dist/eventlog/EventRow.js.map +1 -0
- package/dist/eventlog/SqlEventJournal.d.ts +18 -18
- package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +417 -169
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +10 -18
- package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerEncrypted.js +179 -69
- package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts +23 -3
- package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/eventlog/SqlEventLogServerUnencrypted.js +102 -51
- package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/eventlog/index.d.ts +5 -0
- package/dist/eventlog/index.d.ts.map +1 -1
- package/dist/eventlog/index.js +5 -0
- package/dist/eventlog/index.js.map +1 -1
- package/dist/eventlog/internal/conflicts.d.ts +46 -0
- package/dist/eventlog/internal/conflicts.d.ts.map +1 -0
- package/dist/eventlog/internal/conflicts.js +89 -0
- package/dist/eventlog/internal/conflicts.js.map +1 -0
- package/dist/graphql/GraphQLClientError.d.ts +2 -2
- package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
- package/dist/graphql/GraphQLClientError.js +4 -18
- package/dist/graphql/GraphQLClientError.js.map +1 -1
- package/dist/graphql/GraphQLProtocol.d.ts +12 -9
- package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
- package/dist/graphql/GraphQLProtocol.js +4 -3
- package/dist/graphql/GraphQLProtocol.js.map +1 -1
- package/dist/graphql/GraphQLResolver.d.ts +2 -0
- package/dist/graphql/GraphQLResolver.d.ts.map +1 -1
- package/dist/graphql/GraphQLResolver.js +74 -32
- package/dist/graphql/GraphQLResolver.js.map +1 -1
- package/dist/http/Cookies.d.ts.map +1 -1
- package/dist/http/Cookies.js +10 -9
- package/dist/http/Cookies.js.map +1 -1
- package/dist/http/FetchHttpClient.d.ts +8 -1
- package/dist/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/http/FetchHttpClient.js +51 -4
- package/dist/http/FetchHttpClient.js.map +1 -1
- package/dist/http/FindMyWay/internal/router.js +10 -0
- package/dist/http/FindMyWay/internal/router.js.map +1 -1
- package/dist/http/Headers.d.ts +227 -0
- package/dist/http/Headers.d.ts.map +1 -1
- package/dist/http/Headers.js +261 -0
- package/dist/http/Headers.js.map +1 -1
- package/dist/http/HttpClient.d.ts +516 -0
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +286 -23
- package/dist/http/HttpClient.js.map +1 -1
- package/dist/http/HttpClientError.d.ts +8 -1
- package/dist/http/HttpClientError.d.ts.map +1 -1
- package/dist/http/HttpClientError.js +37 -1
- package/dist/http/HttpClientError.js.map +1 -1
- package/dist/http/HttpClientRequest.d.ts +127 -3
- package/dist/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/http/HttpClientRequest.js +45 -3
- package/dist/http/HttpClientRequest.js.map +1 -1
- package/dist/http/HttpClientResponse.d.ts +53 -0
- package/dist/http/HttpClientResponse.d.ts.map +1 -1
- package/dist/http/HttpClientResponse.js +47 -0
- package/dist/http/HttpClientResponse.js.map +1 -1
- package/dist/http/HttpEffect.d.ts +6 -2
- package/dist/http/HttpEffect.d.ts.map +1 -1
- package/dist/http/HttpEffect.js +21 -17
- package/dist/http/HttpEffect.js.map +1 -1
- package/dist/http/HttpIncomingMessage.d.ts +2 -1
- package/dist/http/HttpIncomingMessage.d.ts.map +1 -1
- package/dist/http/HttpIncomingMessage.js +3 -23
- package/dist/http/HttpIncomingMessage.js.map +1 -1
- package/dist/http/HttpMiddleware.d.ts +119 -2
- package/dist/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/http/HttpMiddleware.js +173 -29
- package/dist/http/HttpMiddleware.js.map +1 -1
- package/dist/http/HttpRouter.d.ts.map +1 -1
- package/dist/http/HttpRouter.js +9 -3
- package/dist/http/HttpRouter.js.map +1 -1
- package/dist/http/HttpServerError.d.ts +5 -2
- package/dist/http/HttpServerError.d.ts.map +1 -1
- package/dist/http/HttpServerError.js +7 -5
- package/dist/http/HttpServerError.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +30 -5
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +109 -20
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/HttpServerResponse.d.ts +17 -8
- package/dist/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/http/HttpServerResponse.js +37 -21
- package/dist/http/HttpServerResponse.js.map +1 -1
- package/dist/http/HttpStaticServer.d.ts +0 -12
- package/dist/http/HttpStaticServer.d.ts.map +1 -1
- package/dist/http/HttpStaticServer.js +65 -24
- package/dist/http/HttpStaticServer.js.map +1 -1
- package/dist/http/MultipartParser/internal/contentType.d.ts +15 -1
- package/dist/http/MultipartParser/internal/contentType.d.ts.map +1 -1
- package/dist/http/MultipartParser/internal/contentType.js +89 -7
- package/dist/http/MultipartParser/internal/contentType.js.map +1 -1
- package/dist/http/MultipartParser/internal/headers.d.ts.map +1 -1
- package/dist/http/MultipartParser/internal/headers.js +4 -12
- package/dist/http/MultipartParser/internal/headers.js.map +1 -1
- package/dist/http/MultipartParser/internal/multipart.d.ts.map +1 -1
- package/dist/http/MultipartParser/internal/multipart.js +6 -27
- package/dist/http/MultipartParser/internal/multipart.js.map +1 -1
- package/dist/http/Url.d.ts.map +1 -1
- package/dist/http/Url.js +6 -1
- package/dist/http/Url.js.map +1 -1
- package/dist/http/UrlParams.d.ts +3 -1
- package/dist/http/UrlParams.d.ts.map +1 -1
- package/dist/http/UrlParams.js +4 -2
- package/dist/http/UrlParams.js.map +1 -1
- package/dist/http/internal/compression.js +4 -5
- package/dist/http/internal/compression.js.map +1 -1
- package/dist/http/internal/decompression.js +20 -11
- package/dist/http/internal/decompression.js.map +1 -1
- package/dist/http/internal/httpBody.js +8 -1
- package/dist/http/internal/httpBody.js.map +1 -1
- package/dist/http/internal/lazyStream.d.ts +2 -0
- package/dist/http/internal/lazyStream.d.ts.map +1 -0
- package/dist/http/internal/lazyStream.js +18 -0
- package/dist/http/internal/lazyStream.js.map +1 -0
- package/dist/http/internal/requestState.d.ts +2 -0
- package/dist/http/internal/requestState.d.ts.map +1 -0
- package/dist/http/internal/requestState.js +28 -0
- package/dist/http/internal/requestState.js.map +1 -0
- package/dist/http/internal/urlParams.js +25 -0
- package/dist/http/internal/urlParams.js.map +1 -1
- package/dist/http/internal/webResponse.d.ts +2 -0
- package/dist/http/internal/webResponse.d.ts.map +1 -0
- package/dist/http/internal/webResponse.js +12 -0
- package/dist/http/internal/webResponse.js.map +1 -0
- package/dist/http-api/HttpApi.d.ts +3 -6
- package/dist/http-api/HttpApi.d.ts.map +1 -1
- package/dist/http-api/HttpApi.js +4 -7
- package/dist/http-api/HttpApi.js.map +1 -1
- package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
- package/dist/http-api/HttpApiBuilder.js +142 -23
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +99 -4
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +218 -60
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts +72 -29
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +140 -14
- package/dist/http-api/HttpApiEndpoint.js.map +1 -1
- package/dist/http-api/HttpApiError.d.ts +58 -0
- package/dist/http-api/HttpApiError.d.ts.map +1 -1
- package/dist/http-api/HttpApiError.js +38 -12
- package/dist/http-api/HttpApiError.js.map +1 -1
- package/dist/http-api/HttpApiScalar.d.ts +2 -1
- package/dist/http-api/HttpApiScalar.d.ts.map +1 -1
- package/dist/http-api/HttpApiScalar.js +6 -3
- package/dist/http-api/HttpApiScalar.js.map +1 -1
- package/dist/http-api/HttpApiSchema.d.ts +242 -13
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +149 -5
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/http-api/HttpApiSwagger.d.ts +5 -0
- package/dist/http-api/HttpApiSwagger.d.ts.map +1 -1
- package/dist/http-api/HttpApiSwagger.js +14 -4
- package/dist/http-api/HttpApiSwagger.js.map +1 -1
- package/dist/http-api/HttpApiTest.d.ts +13 -2
- package/dist/http-api/HttpApiTest.d.ts.map +1 -1
- package/dist/http-api/HttpApiTest.js +33 -11
- package/dist/http-api/HttpApiTest.js.map +1 -1
- package/dist/http-api/OpenApi.d.ts +17 -3
- package/dist/http-api/OpenApi.d.ts.map +1 -1
- package/dist/http-api/OpenApi.js +81 -47
- package/dist/http-api/OpenApi.js.map +1 -1
- package/dist/http-api/internal/path.js +35 -10
- package/dist/http-api/internal/path.js.map +1 -1
- package/dist/http-api/internal/toCodecHttpProperties.d.ts +2 -0
- package/dist/http-api/internal/toCodecHttpProperties.d.ts.map +1 -0
- package/dist/http-api/internal/toCodecHttpProperties.js +38 -0
- package/dist/http-api/internal/toCodecHttpProperties.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/arbitrary/runner.d.ts.map +1 -1
- package/dist/internal/arbitrary/runner.js +120 -44
- package/dist/internal/arbitrary/runner.js.map +1 -1
- package/dist/internal/core.js +3 -1
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/dateTime.js +19 -7
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +106 -87
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/equal.js +14 -0
- package/dist/internal/equal.js.map +1 -1
- package/dist/internal/hashMap.js +2 -2
- package/dist/internal/hashMap.js.map +1 -1
- package/dist/internal/hydration.d.ts +2 -0
- package/dist/internal/hydration.d.ts.map +1 -0
- package/dist/internal/hydration.js +15 -0
- package/dist/internal/hydration.js.map +1 -0
- package/dist/internal/inflate.d.ts +2 -0
- package/dist/internal/inflate.d.ts.map +1 -0
- package/dist/internal/inflate.js +680 -0
- package/dist/internal/inflate.js.map +1 -0
- package/dist/internal/jsonSchema.d.ts +2 -0
- package/dist/internal/jsonSchema.d.ts.map +1 -0
- package/dist/internal/jsonSchema.js +28 -0
- package/dist/internal/jsonSchema.js.map +1 -0
- package/dist/internal/matcher.js +1 -1
- package/dist/internal/matcher.js.map +1 -1
- package/dist/internal/record.js +6 -0
- package/dist/internal/record.js.map +1 -1
- package/dist/internal/request.js +20 -7
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/schedule.js +17 -22
- package/dist/internal/schedule.js.map +1 -1
- package/dist/internal/schema/compilerRegistry.js +4 -1
- package/dist/internal/schema/compilerRegistry.js.map +1 -1
- package/dist/internal/schema/content.d.ts +2 -0
- package/dist/internal/schema/content.d.ts.map +1 -0
- package/dist/internal/schema/content.js +13 -0
- package/dist/internal/schema/content.js.map +1 -0
- package/dist/internal/schema/fromJsonSchemaDocument.js +253 -255
- package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/fromRepresentation.js +2 -1
- package/dist/internal/schema/fromRepresentation.js.map +1 -1
- package/dist/internal/schema/interpreter.js +51 -36
- package/dist/internal/schema/interpreter.js.map +1 -1
- package/dist/internal/schema/standardSchema.js +42 -35
- package/dist/internal/schema/standardSchema.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +10 -5
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/schema/toCodec.js +99 -17
- package/dist/internal/schema/toCodec.js.map +1 -1
- package/dist/internal/schema/toFormatter.js +5 -5
- package/dist/internal/schema/toFormatter.js.map +1 -1
- package/dist/internal/schema/toJsonSchemaDocument.js +257 -170
- package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
- package/dist/internal/schema/toRepresentation.js +107 -129
- package/dist/internal/schema/toRepresentation.js.map +1 -1
- package/dist/internal/sql.d.ts +2 -0
- package/dist/internal/sql.d.ts.map +1 -0
- package/dist/internal/sql.js +13 -0
- package/dist/internal/sql.js.map +1 -0
- package/dist/internal/trie.js +1 -3
- package/dist/internal/trie.js.map +1 -1
- package/dist/internal/uuid.js +7 -3
- package/dist/internal/uuid.js.map +1 -1
- package/dist/internal/version.js +1 -1
- package/dist/net/NetAddress.d.ts.map +1 -1
- package/dist/net/NetAddress.js +2 -8
- package/dist/net/NetAddress.js.map +1 -1
- package/dist/observability/OtlpExporter.d.ts.map +1 -1
- package/dist/observability/OtlpExporter.js +5 -12
- package/dist/observability/OtlpExporter.js.map +1 -1
- package/dist/observability/OtlpMetrics.d.ts.map +1 -1
- package/dist/observability/OtlpMetrics.js +5 -3
- package/dist/observability/OtlpMetrics.js.map +1 -1
- package/dist/observability/OtlpProxy.d.ts +154 -0
- package/dist/observability/OtlpProxy.d.ts.map +1 -0
- package/dist/observability/OtlpProxy.js +235 -0
- package/dist/observability/OtlpProxy.js.map +1 -0
- package/dist/observability/OtlpResource.d.ts +3 -1
- package/dist/observability/OtlpResource.d.ts.map +1 -1
- package/dist/observability/OtlpResource.js +11 -4
- package/dist/observability/OtlpResource.js.map +1 -1
- package/dist/observability/OtlpSerialization.d.ts +5 -0
- package/dist/observability/OtlpSerialization.d.ts.map +1 -1
- package/dist/observability/OtlpSerialization.js +14 -3
- package/dist/observability/OtlpSerialization.js.map +1 -1
- package/dist/observability/OtlpTracer.d.ts.map +1 -1
- package/dist/observability/OtlpTracer.js +4 -0
- package/dist/observability/OtlpTracer.js.map +1 -1
- package/dist/observability/index.d.ts +5 -0
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +5 -0
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/internal/protobuf.d.ts +0 -9
- package/dist/observability/internal/protobuf.d.ts.map +1 -1
- package/dist/observability/internal/protobuf.js +2 -10
- package/dist/observability/internal/protobuf.js.map +1 -1
- package/dist/persistence/CircuitBreaker.d.ts +897 -0
- package/dist/persistence/CircuitBreaker.d.ts.map +1 -0
- package/dist/persistence/CircuitBreaker.js +1165 -0
- package/dist/persistence/CircuitBreaker.js.map +1 -0
- package/dist/persistence/PersistedCache.d.ts.map +1 -1
- package/dist/persistence/PersistedCache.js +1 -1
- package/dist/persistence/PersistedCache.js.map +1 -1
- package/dist/persistence/PersistedQueue.d.ts +6 -2
- package/dist/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/persistence/PersistedQueue.js +162 -84
- package/dist/persistence/PersistedQueue.js.map +1 -1
- package/dist/persistence/Persistence.d.ts +28 -0
- package/dist/persistence/Persistence.d.ts.map +1 -1
- package/dist/persistence/Persistence.js +36 -8
- package/dist/persistence/Persistence.js.map +1 -1
- package/dist/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/persistence/RateLimiter.js +8 -12
- package/dist/persistence/RateLimiter.js.map +1 -1
- package/dist/persistence/Redis.d.ts +78 -2
- package/dist/persistence/Redis.d.ts.map +1 -1
- package/dist/persistence/Redis.js +62 -7
- package/dist/persistence/Redis.js.map +1 -1
- package/dist/persistence/UserDirectories.d.ts +129 -0
- package/dist/persistence/UserDirectories.d.ts.map +1 -0
- package/dist/persistence/UserDirectories.js +178 -0
- package/dist/persistence/UserDirectories.js.map +1 -0
- package/dist/persistence/index.d.ts +10 -0
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +10 -0
- package/dist/persistence/index.js.map +1 -1
- package/dist/process/ChildProcess.d.ts +32 -5
- package/dist/process/ChildProcess.d.ts.map +1 -1
- package/dist/process/ChildProcess.js.map +1 -1
- package/dist/process/ChildProcessSpawner.d.ts +30 -0
- package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/process/ChildProcessSpawner.js +5 -2
- package/dist/process/ChildProcessSpawner.js.map +1 -1
- package/dist/reactivity/AsyncResult.d.ts +1 -1
- package/dist/reactivity/AsyncResult.d.ts.map +1 -1
- package/dist/reactivity/AsyncResult.js +1 -1
- package/dist/reactivity/AsyncResult.js.map +1 -1
- package/dist/reactivity/Atom.d.ts +69 -30
- package/dist/reactivity/Atom.d.ts.map +1 -1
- package/dist/reactivity/Atom.js +40 -15
- package/dist/reactivity/Atom.js.map +1 -1
- package/dist/reactivity/AtomHttpApi.d.ts +5 -5
- package/dist/reactivity/AtomHttpApi.d.ts.map +1 -1
- package/dist/reactivity/AtomHttpApi.js +1 -1
- package/dist/reactivity/AtomHttpApi.js.map +1 -1
- package/dist/reactivity/AtomRegistry.d.ts +2 -2
- package/dist/reactivity/AtomRegistry.d.ts.map +1 -1
- package/dist/reactivity/AtomRegistry.js +44 -9
- package/dist/reactivity/AtomRegistry.js.map +1 -1
- package/dist/reactivity/AtomRpc.d.ts +3 -3
- package/dist/reactivity/AtomRpc.d.ts.map +1 -1
- package/dist/reactivity/AtomRpc.js +1 -1
- package/dist/reactivity/AtomRpc.js.map +1 -1
- package/dist/reactivity/Hydration.d.ts.map +1 -1
- package/dist/reactivity/Hydration.js +46 -12
- package/dist/reactivity/Hydration.js.map +1 -1
- package/dist/reactivity/Reactivity.d.ts +71 -7
- package/dist/reactivity/Reactivity.d.ts.map +1 -1
- package/dist/reactivity/Reactivity.js +21 -12
- package/dist/reactivity/Reactivity.js.map +1 -1
- package/dist/rpc/Rpc.d.ts +18 -0
- package/dist/rpc/Rpc.d.ts.map +1 -1
- package/dist/rpc/Rpc.js +20 -0
- package/dist/rpc/Rpc.js.map +1 -1
- package/dist/rpc/RpcClient.d.ts +26 -2
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +198 -61
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts +29 -0
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +41 -13
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +20 -19
- package/dist/rpc/RpcServer.js.map +1 -1
- package/dist/rpc/RpcTest.d.ts +1 -0
- package/dist/rpc/RpcTest.d.ts.map +1 -1
- package/dist/rpc/RpcTest.js +1 -0
- package/dist/rpc/RpcTest.js.map +1 -1
- package/dist/schema/Model.d.ts +1 -1
- package/dist/schema/VariantSchema.d.ts +22 -3
- package/dist/schema/VariantSchema.d.ts.map +1 -1
- package/dist/schema/VariantSchema.js +32 -18
- package/dist/schema/VariantSchema.js.map +1 -1
- package/dist/socket/Socket.d.ts +23 -1
- package/dist/socket/Socket.d.ts.map +1 -1
- package/dist/socket/Socket.js +36 -3
- package/dist/socket/Socket.js.map +1 -1
- package/dist/sql/Migrator.d.ts +2 -1
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +21 -6
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +148 -5
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +155 -27
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/SqlResolver.d.ts +13 -0
- package/dist/sql/SqlResolver.d.ts.map +1 -1
- package/dist/sql/SqlResolver.js +27 -4
- package/dist/sql/SqlResolver.js.map +1 -1
- package/dist/sql/Statement.d.ts +10 -1
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +45 -7
- package/dist/sql/Statement.js.map +1 -1
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +4 -2
- package/dist/testing/TestClock.js.map +1 -1
- package/dist/testing/TestSchema.d.ts +7 -1
- package/dist/testing/TestSchema.d.ts.map +1 -1
- package/dist/testing/TestSchema.js +9 -3
- package/dist/testing/TestSchema.js.map +1 -1
- package/dist/workflow/DurableDeferred.d.ts.map +1 -1
- package/dist/workflow/DurableDeferred.js +21 -2
- package/dist/workflow/DurableDeferred.js.map +1 -1
- package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/workflow/WorkflowEngine.js +18 -4
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +13 -3
- package/src/Arbitrary.ts +10 -2
- package/src/Array.ts +128 -55
- package/src/Bytes.ts +111 -0
- package/src/Channel.ts +308 -452
- package/src/ChannelSchema.ts +1 -49
- package/src/Chunk.ts +55 -61
- package/src/Config.ts +12 -86
- package/src/ConfigProvider.ts +2 -1
- package/src/Cron.ts +6 -3
- package/src/Data.ts +60 -265
- package/src/Duration.ts +66 -16
- package/src/Effect.ts +503 -168
- package/src/Equal.ts +8 -1
- package/src/Equivalence.ts +7 -4
- package/src/Exit.ts +27 -12
- package/src/FiberHandle.ts +10 -9
- package/src/FiberMap.ts +13 -66
- package/src/FileSystem.ts +10 -0
- package/src/Formatter.ts +28 -13
- package/src/Graph.ts +171 -1263
- package/src/Hash.ts +4 -1
- package/src/HashSet.ts +0 -60
- package/src/Iterable.ts +15 -14
- package/src/JsonPatch.ts +4 -0
- package/src/JsonSchema.ts +40 -43
- package/src/Layer.ts +2 -2
- package/src/ManagedRuntime.ts +72 -6
- package/src/Metric.ts +252 -510
- package/src/MutableHashMap.ts +4 -473
- package/src/MutableList.ts +7 -5
- package/src/MutableRef.ts +8 -1
- package/src/Number.ts +2 -2
- package/src/Optic.ts +17 -332
- package/src/PartitionedSemaphore.ts +24 -13
- package/src/Path.ts +9 -1
- package/src/Pool.ts +109 -37
- package/src/PubSub.ts +17 -13
- package/src/Queue.ts +5 -37
- package/src/Random.ts +1 -1
- package/src/RcMap.ts +14 -8
- package/src/Record.ts +51 -0
- package/src/Ref.ts +15 -104
- package/src/References.ts +5 -4
- package/src/RequestResolver.ts +46 -87
- package/src/Resource.ts +1 -1
- package/src/Runtime.ts +19 -18
- package/src/Schedule.ts +3 -95
- package/src/Schema.ts +639 -381
- package/src/SchemaAST.ts +40 -29
- package/src/SchemaGetter.ts +22 -5
- package/src/SchemaIssue.ts +44 -53
- package/src/SchemaParser.ts +51 -18
- package/src/SchemaRepresentation.ts +95 -35
- package/src/SchemaTransformation.ts +10 -3
- package/src/Scope.ts +12 -2
- package/src/ScopedCache.ts +17 -142
- package/src/SemVer.ts +1528 -0
- package/src/SemVerRange.ts +883 -0
- package/src/Semaphore.ts +67 -40
- package/src/Sink.ts +21 -4
- package/src/Stream.ts +367 -1027
- package/src/String.ts +11 -8
- package/src/TextDiff.ts +766 -0
- package/src/Tracer.ts +15 -1
- package/src/TxHashMap.ts +1 -103
- package/src/TxHashSet.ts +48 -753
- package/src/ai/AiError.ts +66 -4
- package/src/ai/Chat.ts +10 -5
- package/src/ai/Decision.ts +49 -1
- package/src/ai/DecisionModel.ts +264 -108
- package/src/ai/EmbeddingModel.ts +25 -13
- package/src/ai/LanguageModel.ts +9 -0
- package/src/ai/McpClient.ts +1211 -0
- package/src/ai/McpClientError.ts +329 -0
- package/src/ai/McpProtocol.ts +2 -2
- package/src/ai/McpSchema.ts +153 -35
- package/src/ai/McpServer.ts +231 -233
- package/src/ai/Prompt.ts +114 -35
- package/src/ai/Response.ts +220 -65
- package/src/ai/Tool.ts +50 -6
- package/src/ai/Toolkit.ts +82 -11
- package/src/ai/index.ts +12 -0
- package/src/ai/internal/mcpCore.ts +13 -14
- package/src/ai/internal/mcpProtocol/v2024_11_05.ts +1 -1
- package/src/ai/internal/mcpProtocol/v2025_03_26.ts +1 -1
- package/src/ai/internal/mcpProtocol/v2025_06_18.ts +3 -3
- package/src/ai/internal/mcpProtocol/v2025_11_25.ts +3 -3
- package/src/ai/internal/mcpProtocol/v2026_07_28.ts +12 -14
- package/src/ai/internal/mcpProtocol.ts +22 -2
- package/src/ai/internal/mcpRuntime.ts +3 -4
- package/src/ai/internal/mcpSchema/v2024_11_05.ts +20 -13
- package/src/ai/internal/mcpSchema/v2025_03_26.ts +4 -2
- package/src/ai/internal/mcpSchema/v2025_06_18.ts +7 -7
- package/src/ai/internal/mcpSchema/v2025_11_25.ts +8 -8
- package/src/ai/internal/mcpSchema/v2026_07_28.ts +44 -42
- package/src/cli/Argument.ts +15 -0
- package/src/cli/CliError.ts +136 -4
- package/src/cli/CliOutput.ts +183 -6
- package/src/cli/Command.ts +367 -48
- package/src/cli/Completions.ts +56 -0
- package/src/cli/Flag.ts +132 -0
- package/src/cli/GlobalFlag.ts +5 -6
- package/src/cli/Param.ts +151 -6
- package/src/cli/TerminalCapabilities.ts +159 -0
- package/src/cli/index.ts +6 -0
- package/src/cli/internal/command.ts +8 -3
- package/src/cli/internal/completions/bash.ts +83 -32
- package/src/cli/internal/completions/descriptor.ts +11 -1
- package/src/cli/internal/completions/fish.ts +10 -8
- package/src/cli/internal/completions/powershell.ts +23 -14
- package/src/cli/internal/completions/zsh.ts +8 -5
- package/src/cli/internal/formatter.ts +18 -0
- package/src/cli/internal/lexer.ts +12 -5
- package/src/cli/internal/parser.ts +31 -11
- package/src/cluster/ClusterCron.ts +94 -35
- package/src/cluster/ClusterMetrics.ts +149 -7
- package/src/cluster/ClusterWorkflowEngine.ts +130 -57
- package/src/cluster/Entity.ts +4 -0
- package/src/cluster/MessageStorage.ts +26 -14
- package/src/cluster/Runners.ts +76 -25
- package/src/cluster/Sharding.ts +200 -58
- package/src/cluster/ShardingConfig.ts +20 -0
- package/src/cluster/Snowflake.ts +3 -7
- package/src/cluster/SqlMessageStorage.ts +58 -55
- package/src/cluster/SqlRunnerStorage.ts +120 -51
- package/src/cluster/internal/entityManager.ts +155 -32
- package/src/devtools/DevTools.ts +3 -2
- package/src/devtools/DevToolsClient.ts +29 -10
- package/src/encoding/Base64.ts +38 -0
- package/src/encoding/Base64Url.ts +31 -0
- package/src/encoding/Ini.ts +3 -0
- package/src/encoding/JsonArray.ts +849 -0
- package/src/encoding/Ndjson.ts +211 -20
- package/src/encoding/SchemaBinary.ts +14 -48
- package/src/encoding/Sse.ts +4 -3
- package/src/encoding/Tar.ts +1417 -0
- package/src/encoding/Toml.ts +36 -19
- package/src/encoding/Xml.ts +2037 -0
- package/src/encoding/Yaml.ts +108 -36
- package/src/encoding/Zip.ts +1558 -0
- package/src/encoding/index.ts +24 -0
- package/src/eventlog/EventJournal.ts +611 -227
- package/src/eventlog/EventLog.ts +496 -196
- package/src/eventlog/EventLogEncryption.ts +128 -43
- package/src/eventlog/EventLogMessage.ts +62 -11
- package/src/eventlog/EventLogRemote.ts +77 -21
- package/src/eventlog/EventLogServer.ts +162 -20
- package/src/eventlog/EventLogServerEncrypted.ts +121 -80
- package/src/eventlog/EventLogServerUnencrypted.ts +180 -77
- package/src/eventlog/EventRow.ts +706 -0
- package/src/eventlog/SqlEventJournal.ts +496 -193
- package/src/eventlog/SqlEventLogServerEncrypted.ts +212 -83
- package/src/eventlog/SqlEventLogServerUnencrypted.ts +141 -62
- package/src/eventlog/index.ts +6 -0
- package/src/eventlog/internal/conflicts.ts +119 -0
- package/src/graphql/GraphQLClientError.ts +5 -12
- package/src/graphql/GraphQLProtocol.ts +12 -9
- package/src/graphql/GraphQLResolver.ts +90 -239
- package/src/http/Cookies.ts +10 -11
- package/src/http/FetchHttpClient.ts +56 -6
- package/src/http/FindMyWay/internal/router.ts +11 -0
- package/src/http/Headers.ts +337 -154
- package/src/http/HttpClient.ts +673 -142
- package/src/http/HttpClientError.ts +35 -1
- package/src/http/HttpClientRequest.ts +151 -5
- package/src/http/HttpClientResponse.ts +71 -0
- package/src/http/HttpEffect.ts +25 -33
- package/src/http/HttpIncomingMessage.ts +3 -23
- package/src/http/HttpMiddleware.ts +194 -40
- package/src/http/HttpRouter.ts +10 -3
- package/src/http/HttpServerError.ts +8 -5
- package/src/http/HttpServerRequest.ts +172 -27
- package/src/http/HttpServerResponse.ts +49 -23
- package/src/http/HttpStaticServer.ts +71 -26
- package/src/http/MultipartParser/internal/contentType.ts +109 -8
- package/src/http/MultipartParser/internal/headers.ts +4 -16
- package/src/http/MultipartParser/internal/multipart.ts +10 -32
- package/src/http/Url.ts +6 -1
- package/src/http/UrlParams.ts +6 -1
- package/src/http/internal/compression.ts +4 -5
- package/src/http/internal/decompression.ts +32 -17
- package/src/http/internal/httpBody.ts +10 -2
- package/src/http/internal/lazyStream.ts +25 -0
- package/src/http/internal/requestState.ts +33 -0
- package/src/http/internal/urlParams.ts +29 -0
- package/src/http/internal/webResponse.ts +20 -0
- package/src/http-api/HttpApi.ts +4 -7
- package/src/http-api/HttpApiBuilder.ts +190 -32
- package/src/http-api/HttpApiClient.ts +364 -90
- package/src/http-api/HttpApiEndpoint.ts +248 -46
- package/src/http-api/HttpApiError.ts +55 -0
- package/src/http-api/HttpApiScalar.ts +4 -3
- package/src/http-api/HttpApiSchema.ts +373 -18
- package/src/http-api/HttpApiSwagger.ts +11 -4
- package/src/http-api/HttpApiTest.ts +36 -11
- package/src/http-api/OpenApi.ts +103 -58
- package/src/http-api/internal/path.ts +40 -12
- package/src/http-api/internal/toCodecHttpProperties.ts +56 -0
- package/src/index.ts +24 -0
- package/src/internal/arbitrary/runner.ts +133 -36
- package/src/internal/core.ts +3 -1
- package/src/internal/dateTime.ts +20 -7
- package/src/internal/effect.ts +144 -100
- package/src/internal/equal.ts +17 -0
- package/src/internal/hashMap.ts +2 -2
- package/src/internal/hydration.ts +15 -0
- package/src/internal/inflate.ts +710 -0
- package/src/internal/jsonSchema.ts +27 -0
- package/src/internal/matcher.ts +1 -1
- package/src/internal/record.ts +6 -0
- package/src/internal/request.ts +21 -6
- package/src/internal/schedule.ts +20 -39
- package/src/internal/schema/compilerRegistry.ts +6 -1
- package/src/internal/schema/content.ts +18 -0
- package/src/internal/schema/fromJsonSchemaDocument.ts +458 -351
- package/src/internal/schema/fromRepresentation.ts +2 -1
- package/src/internal/schema/interpreter.ts +58 -45
- package/src/internal/schema/standardSchema.ts +34 -32
- package/src/internal/schema/toCodeDocument.ts +12 -7
- package/src/internal/schema/toCodec.ts +134 -15
- package/src/internal/schema/toFormatter.ts +6 -6
- package/src/internal/schema/toJsonSchemaDocument.ts +246 -194
- package/src/internal/schema/toRepresentation.ts +122 -140
- package/src/internal/sql.ts +14 -0
- package/src/internal/trie.ts +1 -3
- package/src/internal/uuid.ts +15 -10
- package/src/internal/version.ts +1 -1
- package/src/net/NetAddress.ts +2 -9
- package/src/observability/OtlpExporter.ts +5 -12
- package/src/observability/OtlpMetrics.ts +5 -3
- package/src/observability/OtlpProxy.ts +314 -0
- package/src/observability/OtlpResource.ts +16 -6
- package/src/observability/OtlpSerialization.ts +17 -3
- package/src/observability/OtlpTracer.ts +4 -0
- package/src/observability/index.ts +6 -0
- package/src/observability/internal/protobuf.ts +2 -10
- package/src/persistence/CircuitBreaker.ts +1678 -0
- package/src/persistence/PersistedCache.ts +3 -1
- package/src/persistence/PersistedQueue.ts +223 -153
- package/src/persistence/Persistence.ts +64 -30
- package/src/persistence/RateLimiter.ts +18 -21
- package/src/persistence/Redis.ts +129 -8
- package/src/persistence/UserDirectories.ts +273 -0
- package/src/persistence/index.ts +12 -0
- package/src/process/ChildProcess.ts +32 -5
- package/src/process/ChildProcessSpawner.ts +41 -2
- package/src/reactivity/AsyncResult.ts +5 -39
- package/src/reactivity/Atom.ts +134 -166
- package/src/reactivity/AtomHttpApi.ts +10 -16
- package/src/reactivity/AtomRegistry.ts +50 -29
- package/src/reactivity/AtomRpc.ts +6 -22
- package/src/reactivity/Hydration.ts +53 -12
- package/src/reactivity/Reactivity.ts +97 -39
- package/src/rpc/Rpc.ts +21 -0
- package/src/rpc/RpcClient.ts +283 -104
- package/src/rpc/RpcSerialization.ts +53 -14
- package/src/rpc/RpcServer.ts +27 -21
- package/src/rpc/RpcTest.ts +3 -0
- package/src/schema/VariantSchema.ts +86 -22
- package/src/socket/Socket.ts +45 -20
- package/src/sql/Migrator.ts +26 -11
- package/src/sql/SqlClient.ts +273 -29
- package/src/sql/SqlResolver.ts +32 -9
- package/src/sql/Statement.ts +65 -10
- package/src/testing/TestClock.ts +4 -1
- package/src/testing/TestSchema.ts +9 -3
- package/src/workflow/DurableDeferred.ts +23 -6
- package/src/workflow/WorkflowEngine.ts +34 -10
- package/dist/http/internal/preResponseHandler.d.ts +0 -2
- package/dist/http/internal/preResponseHandler.d.ts.map +0 -1
- package/dist/http/internal/preResponseHandler.js +0 -14
- package/dist/http/internal/preResponseHandler.js.map +0 -1
- package/src/http/internal/preResponseHandler.ts +0 -19
|
@@ -35,6 +35,7 @@ import * as HttpIncomingMessage from "./HttpIncomingMessage.ts"
|
|
|
35
35
|
import { hasBody, type HttpMethod } from "./HttpMethod.ts"
|
|
36
36
|
import { HttpServerError, type RequestError, RequestParseError } from "./HttpServerError.ts"
|
|
37
37
|
import * as bodyInternal from "./internal/httpBody.ts"
|
|
38
|
+
import * as lazyStream from "./internal/lazyStream.ts"
|
|
38
39
|
import * as Multipart from "./Multipart.ts"
|
|
39
40
|
import * as UrlParams from "./UrlParams.ts"
|
|
40
41
|
|
|
@@ -72,8 +73,13 @@ export const TypeId = "~effect/http/HttpServerRequest"
|
|
|
72
73
|
* **Details**
|
|
73
74
|
*
|
|
74
75
|
* It extends `HttpIncomingMessage` with request metadata, parsed cookies,
|
|
75
|
-
* multipart accessors,
|
|
76
|
-
* creating adjusted request views.
|
|
76
|
+
* multipart accessors, connection upgrades, and a `modify` method for
|
|
77
|
+
* creating adjusted request views. `upgrade` completes a WebSocket handshake
|
|
78
|
+
* for `Upgrade: websocket`. Platforms that can hand over the connection, such
|
|
79
|
+
* as Node, answer other protocols with `101 Switching Protocols` and expose
|
|
80
|
+
* the raw connection. `upgradeWith` does the same and adds custom headers to
|
|
81
|
+
* the `101` response; `upgrade` is `upgradeWith({})`. WebSocket upgrades fail
|
|
82
|
+
* when custom headers are given.
|
|
77
83
|
*
|
|
78
84
|
* @stability unstable
|
|
79
85
|
* @category models
|
|
@@ -95,12 +101,30 @@ export interface HttpServerRequest extends HttpIncomingMessage.HttpIncomingMessa
|
|
|
95
101
|
readonly multipartStream: Stream.Stream<Multipart.Part, Multipart.MultipartError>
|
|
96
102
|
|
|
97
103
|
readonly upgrade: Effect.Effect<Socket.Socket, HttpServerError>
|
|
104
|
+
readonly upgradeWith: (options: {
|
|
105
|
+
readonly headers?: Headers.Input | undefined
|
|
106
|
+
}) => Effect.Effect<Socket.Socket, HttpServerError>
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Address of the directly connected peer. Trusted proxy middleware replaces
|
|
110
|
+
* `remoteAddress` with the forwarded client address and keeps the previous
|
|
111
|
+
* value here; otherwise it equals `remoteAddress`.
|
|
112
|
+
*/
|
|
113
|
+
readonly peerAddress: Option.Option<string>
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Scheme validated by trusted proxy middleware. `toURL` prefers it over the
|
|
117
|
+
* scheme of the transport connection.
|
|
118
|
+
*/
|
|
119
|
+
readonly protocol: "http" | "https" | undefined
|
|
98
120
|
|
|
99
121
|
readonly modify: (
|
|
100
122
|
options: {
|
|
101
123
|
readonly url?: string
|
|
102
124
|
readonly headers?: Headers.Headers
|
|
103
125
|
readonly remoteAddress?: Option.Option<string>
|
|
126
|
+
readonly peerAddress?: Option.Option<string>
|
|
127
|
+
readonly protocol?: "http" | "https"
|
|
104
128
|
}
|
|
105
129
|
) => HttpServerRequest
|
|
106
130
|
}
|
|
@@ -493,12 +517,16 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
493
517
|
readonly url: string
|
|
494
518
|
public headersOverride?: Headers.Headers | undefined
|
|
495
519
|
private remoteAddressOverride?: Option.Option<string> | undefined
|
|
520
|
+
private peerAddressOverride?: Option.Option<string> | undefined
|
|
521
|
+
readonly protocol: "http" | "https" | undefined
|
|
496
522
|
|
|
497
523
|
constructor(
|
|
498
524
|
source: Request,
|
|
499
525
|
url: string,
|
|
500
526
|
headersOverride?: Headers.Headers,
|
|
501
|
-
remoteAddressOverride?: Option.Option<string
|
|
527
|
+
remoteAddressOverride?: Option.Option<string>,
|
|
528
|
+
peerAddressOverride?: Option.Option<string>,
|
|
529
|
+
protocol?: "http" | "https"
|
|
502
530
|
) {
|
|
503
531
|
super()
|
|
504
532
|
this[TypeId] = TypeId
|
|
@@ -507,6 +535,8 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
507
535
|
this.url = url
|
|
508
536
|
this.headersOverride = headersOverride
|
|
509
537
|
this.remoteAddressOverride = remoteAddressOverride
|
|
538
|
+
this.peerAddressOverride = peerAddressOverride
|
|
539
|
+
this.protocol = protocol
|
|
510
540
|
}
|
|
511
541
|
toJSON(): unknown {
|
|
512
542
|
return HttpIncomingMessage.inspect(this, {
|
|
@@ -520,13 +550,17 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
520
550
|
readonly url?: string | undefined
|
|
521
551
|
readonly headers?: Headers.Headers | undefined
|
|
522
552
|
readonly remoteAddress?: Option.Option<string> | undefined
|
|
553
|
+
readonly peerAddress?: Option.Option<string> | undefined
|
|
554
|
+
readonly protocol?: "http" | "https" | undefined
|
|
523
555
|
}
|
|
524
556
|
) {
|
|
525
557
|
return new ServerRequestImpl(
|
|
526
558
|
this.source,
|
|
527
559
|
options.url ?? this.url,
|
|
528
560
|
options.headers ?? this.headersOverride,
|
|
529
|
-
"remoteAddress" in options ? options.remoteAddress : this.remoteAddressOverride
|
|
561
|
+
"remoteAddress" in options ? options.remoteAddress : this.remoteAddressOverride,
|
|
562
|
+
options.peerAddress ?? this.peerAddressOverride,
|
|
563
|
+
options.protocol ?? this.protocol
|
|
530
564
|
)
|
|
531
565
|
}
|
|
532
566
|
get method(): HttpMethod {
|
|
@@ -538,6 +572,9 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
538
572
|
get remoteAddress(): Option.Option<string> {
|
|
539
573
|
return this.remoteAddressOverride ?? Option.none()
|
|
540
574
|
}
|
|
575
|
+
get peerAddress(): Option.Option<string> {
|
|
576
|
+
return this.peerAddressOverride ?? this.remoteAddress
|
|
577
|
+
}
|
|
541
578
|
get headers(): Headers.Headers {
|
|
542
579
|
this.headersOverride ??= Headers.fromInput(this.source.headers as any)
|
|
543
580
|
return this.headersOverride
|
|
@@ -578,18 +615,23 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
578
615
|
if (this.textEffect) {
|
|
579
616
|
return this.textEffect
|
|
580
617
|
}
|
|
581
|
-
this.textEffect = Effect.
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
618
|
+
this.textEffect = Effect.withFiber((fiber) =>
|
|
619
|
+
fiber.getRef(HttpIncomingMessage.MaxBodySize) === undefined
|
|
620
|
+
? Effect.tryPromise({
|
|
621
|
+
try: () => this.source.text(),
|
|
622
|
+
catch: (cause) =>
|
|
623
|
+
new HttpServerError({
|
|
624
|
+
reason: new RequestParseError({
|
|
625
|
+
request: this,
|
|
626
|
+
cause
|
|
627
|
+
})
|
|
589
628
|
})
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
)
|
|
629
|
+
})
|
|
630
|
+
: Effect.map(this.arrayBuffer, (buffer) => textDecoder.decode(buffer))
|
|
631
|
+
).pipe(
|
|
632
|
+
Effect.cached,
|
|
633
|
+
Effect.runSync
|
|
634
|
+
)
|
|
593
635
|
return this.textEffect
|
|
594
636
|
}
|
|
595
637
|
|
|
@@ -654,22 +696,36 @@ class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
654
696
|
if (this.arrayBufferEffect) {
|
|
655
697
|
return this.arrayBufferEffect
|
|
656
698
|
}
|
|
657
|
-
this.arrayBufferEffect = Effect.
|
|
658
|
-
|
|
659
|
-
|
|
699
|
+
this.arrayBufferEffect = Effect.withFiber((fiber) => {
|
|
700
|
+
const maxBodySize = fiber.getRef(HttpIncomingMessage.MaxBodySize)
|
|
701
|
+
return Effect.tryPromise({
|
|
702
|
+
try: (signal) =>
|
|
703
|
+
maxBodySize === undefined
|
|
704
|
+
? this.source.arrayBuffer()
|
|
705
|
+
: readArrayBufferLimited(this.source, Number(maxBodySize), signal),
|
|
660
706
|
catch: (cause) =>
|
|
661
707
|
new HttpServerError({
|
|
662
708
|
reason: new RequestParseError({
|
|
663
709
|
request: this,
|
|
710
|
+
reason: cause instanceof BodyTooLargeError ? "BodyTooLarge" : "Parse",
|
|
664
711
|
cause
|
|
665
712
|
})
|
|
666
713
|
})
|
|
667
714
|
})
|
|
668
|
-
)
|
|
715
|
+
}).pipe(
|
|
716
|
+
Effect.cached,
|
|
717
|
+
Effect.runSync
|
|
718
|
+
)
|
|
669
719
|
return this.arrayBufferEffect
|
|
670
720
|
}
|
|
671
721
|
|
|
672
722
|
get upgrade(): Effect.Effect<Socket.Socket, HttpServerError> {
|
|
723
|
+
return this.upgradeWith({})
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
upgradeWith(
|
|
727
|
+
_options: { readonly headers?: Headers.Input | undefined }
|
|
728
|
+
): Effect.Effect<Socket.Socket, HttpServerError> {
|
|
673
729
|
return Effect.fail(
|
|
674
730
|
new HttpServerError({
|
|
675
731
|
reason: new RequestParseError({
|
|
@@ -688,6 +744,8 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
688
744
|
public originalUrl: string
|
|
689
745
|
public headersOverride?: Headers.Headers | undefined
|
|
690
746
|
private remoteAddressOverride?: Option.Option<string> | undefined
|
|
747
|
+
private peerAddressOverride?: Option.Option<string> | undefined
|
|
748
|
+
readonly protocol: "http" | "https" | undefined
|
|
691
749
|
private urlOverride?: string | undefined
|
|
692
750
|
|
|
693
751
|
constructor(
|
|
@@ -695,7 +753,9 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
695
753
|
originalUrl: string,
|
|
696
754
|
urlOverride?: string,
|
|
697
755
|
headersOverride?: Headers.Headers,
|
|
698
|
-
remoteAddressOverride?: Option.Option<string
|
|
756
|
+
remoteAddressOverride?: Option.Option<string>,
|
|
757
|
+
peerAddressOverride?: Option.Option<string>,
|
|
758
|
+
protocol?: "http" | "https"
|
|
699
759
|
) {
|
|
700
760
|
super()
|
|
701
761
|
this[TypeId] = TypeId
|
|
@@ -705,6 +765,8 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
705
765
|
this.urlOverride = urlOverride
|
|
706
766
|
this.headersOverride = headersOverride
|
|
707
767
|
this.remoteAddressOverride = remoteAddressOverride
|
|
768
|
+
this.peerAddressOverride = peerAddressOverride
|
|
769
|
+
this.protocol = protocol
|
|
708
770
|
}
|
|
709
771
|
|
|
710
772
|
toJSON(): unknown {
|
|
@@ -720,6 +782,8 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
720
782
|
readonly url?: string | undefined
|
|
721
783
|
readonly headers?: Headers.Headers | undefined
|
|
722
784
|
readonly remoteAddress?: Option.Option<string> | undefined
|
|
785
|
+
readonly peerAddress?: Option.Option<string> | undefined
|
|
786
|
+
readonly protocol?: "http" | "https" | undefined
|
|
723
787
|
}
|
|
724
788
|
) {
|
|
725
789
|
return new ClientRequestImpl(
|
|
@@ -727,7 +791,9 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
727
791
|
this.originalUrl,
|
|
728
792
|
options.url ?? this.url,
|
|
729
793
|
options.headers ?? this.headersOverride,
|
|
730
|
-
"remoteAddress" in options ? options.remoteAddress : this.remoteAddressOverride
|
|
794
|
+
"remoteAddress" in options ? options.remoteAddress : this.remoteAddressOverride,
|
|
795
|
+
options.peerAddress ?? this.peerAddressOverride,
|
|
796
|
+
options.protocol ?? this.protocol
|
|
731
797
|
)
|
|
732
798
|
}
|
|
733
799
|
|
|
@@ -743,6 +809,10 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
743
809
|
return this.remoteAddressOverride ?? Option.none()
|
|
744
810
|
}
|
|
745
811
|
|
|
812
|
+
get peerAddress(): Option.Option<string> {
|
|
813
|
+
return this.peerAddressOverride ?? this.remoteAddress
|
|
814
|
+
}
|
|
815
|
+
|
|
746
816
|
get headers(): Headers.Headers {
|
|
747
817
|
return this.headersOverride ??= this.source.headers
|
|
748
818
|
}
|
|
@@ -870,6 +940,12 @@ class ClientRequestImpl extends Inspectable.Class implements HttpServerRequest {
|
|
|
870
940
|
}
|
|
871
941
|
|
|
872
942
|
get upgrade(): Effect.Effect<Socket.Socket, HttpServerError> {
|
|
943
|
+
return this.upgradeWith({})
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
upgradeWith(
|
|
947
|
+
_options: { readonly headers?: Headers.Input | undefined }
|
|
948
|
+
): Effect.Effect<Socket.Socket, HttpServerError> {
|
|
873
949
|
return Effect.fail(requestParseError(this, "Not an upgradeable ServerRequest"))
|
|
874
950
|
}
|
|
875
951
|
}
|
|
@@ -1034,14 +1110,74 @@ const isBodyInit = (u: unknown): u is BodyInit =>
|
|
|
1034
1110
|
|
|
1035
1111
|
const textDecoder = new TextDecoder()
|
|
1036
1112
|
|
|
1113
|
+
class BodyTooLargeError extends Error {
|
|
1114
|
+
constructor(maxBytes: number) {
|
|
1115
|
+
super(`Request body exceeds ${maxBytes} bytes`)
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
|
|
1119
|
+
const readArrayBufferLimited = async (
|
|
1120
|
+
source: Request,
|
|
1121
|
+
maxBytes: number,
|
|
1122
|
+
signal: AbortSignal
|
|
1123
|
+
): Promise<ArrayBuffer> => {
|
|
1124
|
+
const header = source.headers.get("content-length")
|
|
1125
|
+
const contentLength = header !== null && /^\d+$/.test(header) ? Number(header) : undefined
|
|
1126
|
+
if (contentLength !== undefined && contentLength > maxBytes) {
|
|
1127
|
+
throw new BodyTooLargeError(maxBytes)
|
|
1128
|
+
}
|
|
1129
|
+
if (source.body === null) {
|
|
1130
|
+
return new ArrayBuffer(0)
|
|
1131
|
+
}
|
|
1132
|
+
// A constructed request can understate its content-length, so bytes are
|
|
1133
|
+
// counted on every runtime. Cancellation is not awaited, as the source's
|
|
1134
|
+
// cleanup may never settle.
|
|
1135
|
+
const limit = contentLength ?? maxBytes
|
|
1136
|
+
const reader = source.body.getReader()
|
|
1137
|
+
const cancel = () => {
|
|
1138
|
+
reader.cancel().catch(() => {})
|
|
1139
|
+
}
|
|
1140
|
+
signal.addEventListener("abort", cancel, { once: true })
|
|
1141
|
+
const chunks: Array<Uint8Array> = []
|
|
1142
|
+
let bytes = 0
|
|
1143
|
+
try {
|
|
1144
|
+
while (true) {
|
|
1145
|
+
const { done, value } = await reader.read()
|
|
1146
|
+
if (done) break
|
|
1147
|
+
bytes += value.byteLength
|
|
1148
|
+
if (bytes > limit) {
|
|
1149
|
+
cancel()
|
|
1150
|
+
throw bytes > maxBytes
|
|
1151
|
+
? new BodyTooLargeError(maxBytes)
|
|
1152
|
+
: new Error(`Request body is longer than its content-length of ${contentLength}`)
|
|
1153
|
+
}
|
|
1154
|
+
chunks.push(value)
|
|
1155
|
+
}
|
|
1156
|
+
} finally {
|
|
1157
|
+
signal.removeEventListener("abort", cancel)
|
|
1158
|
+
reader.releaseLock()
|
|
1159
|
+
}
|
|
1160
|
+
const buffer = new Uint8Array(bytes)
|
|
1161
|
+
let offset = 0
|
|
1162
|
+
for (const chunk of chunks) {
|
|
1163
|
+
buffer.set(chunk, offset)
|
|
1164
|
+
offset += chunk.byteLength
|
|
1165
|
+
}
|
|
1166
|
+
return buffer.buffer
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1037
1169
|
/**
|
|
1038
1170
|
* Attempts to construct an absolute `URL` for a server request safely.
|
|
1039
1171
|
*
|
|
1040
1172
|
* **Details**
|
|
1041
1173
|
*
|
|
1042
|
-
*
|
|
1043
|
-
*
|
|
1044
|
-
*
|
|
1174
|
+
* Uses `host` (defaulting to `localhost`) and the request `protocol` set by
|
|
1175
|
+
* trusted proxy middleware. Otherwise, infers HTTPS from a case-insensitive
|
|
1176
|
+
* `https:` prefix in `originalUrl`, defaulting to HTTP. Forwarding headers such
|
|
1177
|
+
* as `x-forwarded-proto` are never read directly; use
|
|
1178
|
+
* `HttpMiddleware.xForwardedHeaders` behind a TLS-terminating proxy. An
|
|
1179
|
+
* absolute `url` keeps its own protocol and host. Invalid URLs return
|
|
1180
|
+
* `Option.none`.
|
|
1045
1181
|
*
|
|
1046
1182
|
* @stability unstable
|
|
1047
1183
|
* @category converting
|
|
@@ -1049,9 +1185,10 @@ const textDecoder = new TextDecoder()
|
|
|
1049
1185
|
*/
|
|
1050
1186
|
export const toURL = (self: HttpServerRequest): Option.Option<URL> => {
|
|
1051
1187
|
const host = self.headers.host ?? "localhost"
|
|
1052
|
-
const protocol = self.
|
|
1188
|
+
const protocol = self.protocol ?? (/^https:/i.test(self.originalUrl) ? "https" : "http")
|
|
1053
1189
|
try {
|
|
1054
|
-
|
|
1190
|
+
// Prefix paths with `.` so leading `//` cannot replace the host.
|
|
1191
|
+
return Option.some(new URL(self.url.startsWith("/") ? `.${self.url}` : self.url, `${protocol}://${host}`))
|
|
1055
1192
|
} catch {
|
|
1056
1193
|
return Option.none()
|
|
1057
1194
|
}
|
|
@@ -1094,7 +1231,15 @@ export const toWebResult = (self: HttpServerRequest, options?: {
|
|
|
1094
1231
|
requestInit.signal = options.signal
|
|
1095
1232
|
}
|
|
1096
1233
|
if (hasBody(self.method)) {
|
|
1097
|
-
|
|
1234
|
+
// Opening on the first pull with a zero high-water mark reads the body only
|
|
1235
|
+
// when the Web body is read, so converting a request leaves it readable.
|
|
1236
|
+
requestInit.body = Stream.toReadableStreamWith(
|
|
1237
|
+
lazyStream.openOnFirstPull(self.stream),
|
|
1238
|
+
options?.context ?? Context.empty(),
|
|
1239
|
+
{
|
|
1240
|
+
strategy: { highWaterMark: 0 }
|
|
1241
|
+
}
|
|
1242
|
+
)
|
|
1098
1243
|
;(requestInit as any).duplex = "half"
|
|
1099
1244
|
}
|
|
1100
1245
|
return Result.succeed(new Request(url.value, requestInit))
|
|
@@ -25,6 +25,7 @@ import { hasProperty } from "../Predicate.ts"
|
|
|
25
25
|
import { redact } from "../Redactable.ts"
|
|
26
26
|
import type * as Schema from "../Schema.ts"
|
|
27
27
|
import type { ParseOptions } from "../SchemaAST.ts"
|
|
28
|
+
import type * as Socket from "../socket/Socket.ts"
|
|
28
29
|
import * as Stream from "../Stream.ts"
|
|
29
30
|
import type { Mutable } from "../Types.ts"
|
|
30
31
|
import * as Cookies from "./Cookies.ts"
|
|
@@ -76,6 +77,9 @@ export interface Options {
|
|
|
76
77
|
readonly headers?: Headers.Input | undefined
|
|
77
78
|
readonly cookies?: Cookies.Cookies | undefined
|
|
78
79
|
readonly contentType?: string | undefined
|
|
80
|
+
/**
|
|
81
|
+
* Sent as `content-length`, so it must equal the body's byte length.
|
|
82
|
+
*/
|
|
79
83
|
readonly contentLength?: number | undefined
|
|
80
84
|
}
|
|
81
85
|
|
|
@@ -1346,6 +1350,9 @@ export const setStatus: {
|
|
|
1346
1350
|
export const omitsBody = (response: HttpServerResponse, withoutBody = false): boolean =>
|
|
1347
1351
|
withoutBody || response.status === 204 || response.status === 205 || response.status === 304
|
|
1348
1352
|
|
|
1353
|
+
// HEAD and 304 retain the representation length; 204 and 205 omit it.
|
|
1354
|
+
const omitsContentLength = (status: number): boolean => status === 204 || status === 205
|
|
1355
|
+
|
|
1349
1356
|
const mergeHeaders = (target: globalThis.Headers, headers: globalThis.Headers): globalThis.Headers => {
|
|
1350
1357
|
for (const [key, value] of headers as any) {
|
|
1351
1358
|
if (key === "set-cookie") {
|
|
@@ -1366,15 +1373,15 @@ const mergeHeaders = (target: globalThis.Headers, headers: globalThis.Headers):
|
|
|
1366
1373
|
* the supplied context, and are interrupted when `signal` aborts.
|
|
1367
1374
|
*
|
|
1368
1375
|
* Bodies are omitted for statuses 204, 205, and 304, or when `withoutBody` is true
|
|
1369
|
-
* (for example, for HEAD responses).
|
|
1370
|
-
*
|
|
1376
|
+
* (for example, for HEAD responses). Statuses 204 and 205 also omit
|
|
1377
|
+
* `content-length`. Omitted raw `ReadableStream` bodies are cancelled without
|
|
1378
|
+
* awaiting completion, and cancellation errors are ignored.
|
|
1371
1379
|
*
|
|
1372
|
-
* A raw `Response` is returned as-is
|
|
1373
|
-
*
|
|
1374
|
-
*
|
|
1375
|
-
*
|
|
1376
|
-
*
|
|
1377
|
-
* status otherwise.
|
|
1380
|
+
* A raw `Response` is returned as-is unless its body or `content-length` must
|
|
1381
|
+
* be omitted, or outer headers or cookies must be merged. Copies leave the
|
|
1382
|
+
* original unchanged: outer headers replace native ones, and cookies append.
|
|
1383
|
+
* Bodyless copies use the outer status for 204, 205 and 304; otherwise they keep
|
|
1384
|
+
* the raw status.
|
|
1378
1385
|
*
|
|
1379
1386
|
* @stability unstable
|
|
1380
1387
|
* @category converting
|
|
@@ -1400,27 +1407,28 @@ export const toWeb = (
|
|
|
1400
1407
|
const withoutBody = outerOmitsBody || options?.withoutBody === true
|
|
1401
1408
|
if (body._tag === "Raw" && body.body instanceof Response) {
|
|
1402
1409
|
const raw = body.body
|
|
1403
|
-
|
|
1404
|
-
if (headers.keys().next().done) {
|
|
1405
|
-
return raw
|
|
1406
|
-
}
|
|
1407
|
-
const copy = new Response(raw.body, raw)
|
|
1408
|
-
mergeHeaders(copy.headers, headers)
|
|
1409
|
-
return copy
|
|
1410
|
-
}
|
|
1411
|
-
// A bodyless outer status is what the caller chose to send; otherwise the
|
|
1412
|
-
// body is only omitted for HEAD and the raw Response describes the resource.
|
|
1410
|
+
// HEAD preserves the raw status; an explicit bodyless status overrides it.
|
|
1413
1411
|
const source = outerOmitsBody ? response : raw
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1412
|
+
const omitContentLength = omitsContentLength(source.status)
|
|
1413
|
+
if (!withoutBody && headers.keys().next().done && !(omitContentLength && raw.headers.has("content-length"))) {
|
|
1414
|
+
return raw
|
|
1415
|
+
}
|
|
1416
|
+
const copy = withoutBody
|
|
1417
|
+
? new Response(undefined, {
|
|
1418
|
+
status: source.status,
|
|
1419
|
+
statusText: source.statusText as string,
|
|
1420
|
+
headers: raw.headers
|
|
1421
|
+
})
|
|
1422
|
+
: new Response(raw.body, raw)
|
|
1423
|
+
mergeHeaders(copy.headers, headers)
|
|
1424
|
+
if (omitContentLength) copy.headers.delete("content-length")
|
|
1425
|
+
return copy
|
|
1419
1426
|
}
|
|
1420
1427
|
if (withoutBody) {
|
|
1421
1428
|
if (body._tag === "Raw" && isReadableStream(body.body)) {
|
|
1422
1429
|
body.body.cancel().catch(constVoid)
|
|
1423
1430
|
}
|
|
1431
|
+
if (omitsContentLength(response.status)) headers.delete("content-length")
|
|
1424
1432
|
return new Response(undefined, {
|
|
1425
1433
|
status: response.status,
|
|
1426
1434
|
statusText: response.statusText as string,
|
|
@@ -1696,6 +1704,18 @@ class ServerHttpClientResponse extends Inspectable.Class implements HttpClientRe
|
|
|
1696
1704
|
return this.formDataResponse ??= new Response((this.response.body as Body.FormData).formData)
|
|
1697
1705
|
}
|
|
1698
1706
|
|
|
1707
|
+
get upgrade(): Effect.Effect<Socket.Socket, HttpClientError.HttpClientError> {
|
|
1708
|
+
return Effect.fail(
|
|
1709
|
+
new HttpClientError.HttpClientError({
|
|
1710
|
+
reason: new HttpClientError.StatusCodeError({
|
|
1711
|
+
request: this.request,
|
|
1712
|
+
response: this,
|
|
1713
|
+
description: "a server response has no connection to hand over"
|
|
1714
|
+
})
|
|
1715
|
+
})
|
|
1716
|
+
)
|
|
1717
|
+
}
|
|
1718
|
+
|
|
1699
1719
|
pipe() {
|
|
1700
1720
|
return pipeArguments(this, arguments)
|
|
1701
1721
|
}
|
|
@@ -1804,6 +1824,12 @@ const makeResponse = (options: {
|
|
|
1804
1824
|
* `Set-Cookie` headers are parsed into the response cookie collection and removed
|
|
1805
1825
|
* from the header map. A present Web body is exposed as a stream body.
|
|
1806
1826
|
*
|
|
1827
|
+
* **Gotchas**
|
|
1828
|
+
*
|
|
1829
|
+
* Preserves `content-length`, which must match the body. When proxying a
|
|
1830
|
+
* compressed response decoded by `fetch`, remove the stale length from a copy
|
|
1831
|
+
* (`new Response(response.body, response)`) before converting it.
|
|
1832
|
+
*
|
|
1807
1833
|
* @stability unstable
|
|
1808
1834
|
* @category converting
|
|
1809
1835
|
* @since 4.0.0
|
|
@@ -10,12 +10,15 @@
|
|
|
10
10
|
* @stability unstable
|
|
11
11
|
* @since 4.0.0
|
|
12
12
|
*/
|
|
13
|
+
import * as DateTime from "../DateTime.ts"
|
|
13
14
|
import * as Effect from "../Effect.ts"
|
|
14
15
|
import * as FileSystem from "../FileSystem.ts"
|
|
15
16
|
import * as Layer from "../Layer.ts"
|
|
16
17
|
import * as Option from "../Option.ts"
|
|
17
18
|
import * as Path from "../Path.ts"
|
|
18
19
|
import type { PlatformError } from "../PlatformError.ts"
|
|
20
|
+
import * as Result from "../Result.ts"
|
|
21
|
+
import * as Headers from "./Headers.ts"
|
|
19
22
|
import * as HttpPlatform from "./HttpPlatform.ts"
|
|
20
23
|
import * as HttpRouter from "./HttpRouter.ts"
|
|
21
24
|
import * as HttpServerError from "./HttpServerError.ts"
|
|
@@ -118,7 +121,9 @@ export const make: (options: {
|
|
|
118
121
|
) => Effect.Effect<HttpServerResponse.HttpServerResponse, HttpServerError.HttpServerError> = Effect.fnUntraced(
|
|
119
122
|
function*(request, filePath, fileSize) {
|
|
120
123
|
const rangeHeader = request.method === "GET" ? request.headers["range"] : undefined
|
|
121
|
-
const shouldEvaluateConditionals = request.headers["if-
|
|
124
|
+
const shouldEvaluateConditionals = request.headers["if-match"] !== undefined ||
|
|
125
|
+
request.headers["if-unmodified-since"] !== undefined ||
|
|
126
|
+
request.headers["if-none-match"] !== undefined ||
|
|
122
127
|
request.headers["if-modified-since"] !== undefined
|
|
123
128
|
|
|
124
129
|
let fullResponse: HttpServerResponse.HttpServerResponse | undefined
|
|
@@ -207,12 +212,26 @@ export const make: (options: {
|
|
|
207
212
|
return serveFile(request, resolvedPath, info.size)
|
|
208
213
|
}
|
|
209
214
|
if (info.type === "Directory" && index !== undefined) {
|
|
215
|
+
let originalUrl = request.originalUrl
|
|
216
|
+
if (!originalUrl.startsWith("/")) {
|
|
217
|
+
const url = new URL(originalUrl)
|
|
218
|
+
originalUrl = url.pathname + url.search
|
|
219
|
+
}
|
|
220
|
+
const pathname = stripQueryString(originalUrl)
|
|
221
|
+
if (!pathname.endsWith("/")) {
|
|
222
|
+
// Keep the redirect local even when the path starts with multiple separators.
|
|
223
|
+
const location = pathname.replace(/^\/+/, "/").replace(/\\/g, "%5C")
|
|
224
|
+
return Effect.succeed(HttpServerResponse.redirect(
|
|
225
|
+
`${location}/${originalUrl.slice(pathname.length)}`,
|
|
226
|
+
{ status: 301 }
|
|
227
|
+
))
|
|
228
|
+
}
|
|
210
229
|
return serveFile(request, path.join(resolvedPath, index))
|
|
211
230
|
}
|
|
212
231
|
return Effect.fail(toRouteNotFoundError(request))
|
|
213
232
|
}
|
|
214
|
-
})
|
|
215
|
-
})
|
|
233
|
+
});
|
|
234
|
+
});
|
|
216
235
|
})
|
|
217
236
|
|
|
218
237
|
/**
|
|
@@ -429,6 +448,22 @@ const stripWeakEtagPrefix = (value: string): string => {
|
|
|
429
448
|
return /^w\//i.test(trimmed) ? trimmed.slice(2) : trimmed;
|
|
430
449
|
}
|
|
431
450
|
|
|
451
|
+
// If-Match uses strong comparison (RFC 9110 §13.1.1), so weak tags never
|
|
452
|
+
// match. Tags may contain commas, so the list is validated whole rather than
|
|
453
|
+
// split, and a malformed list matches nothing.
|
|
454
|
+
const entityTagList = /^[\s,]*(?:(?:W\/)?"[^"]*"\s*(?:,[\s,]*|$))*$/
|
|
455
|
+
const entityTag = /(?:W\/)?"[^"]*"/g
|
|
456
|
+
|
|
457
|
+
const matchesIfMatch = (ifMatch: string, etag: string | undefined): boolean => {
|
|
458
|
+
if (ifMatch.trim() === "*") {
|
|
459
|
+
return true
|
|
460
|
+
}
|
|
461
|
+
if (etag === undefined || !etag.startsWith("\"") || !entityTagList.test(ifMatch)) {
|
|
462
|
+
return false
|
|
463
|
+
}
|
|
464
|
+
return ifMatch.match(entityTag)?.includes(etag) ?? false
|
|
465
|
+
}
|
|
466
|
+
|
|
432
467
|
const matchesIfNoneMatch = (ifNoneMatch: string, etag: string | undefined): boolean => {
|
|
433
468
|
const normalizedEtag = etag === undefined ? undefined : stripWeakEtagPrefix(etag)
|
|
434
469
|
for (const candidate of ifNoneMatch.split(",")) {
|
|
@@ -446,19 +481,19 @@ const matchesIfNoneMatch = (ifNoneMatch: string, etag: string | undefined): bool
|
|
|
446
481
|
return false
|
|
447
482
|
}
|
|
448
483
|
|
|
449
|
-
|
|
484
|
+
// An invalid date on either side disables the precondition (RFC 9110 §13.1.3–4).
|
|
485
|
+
const isModifiedSince = (since: string, lastModified: string | undefined): boolean | undefined => {
|
|
450
486
|
if (lastModified === undefined) {
|
|
451
|
-
return
|
|
452
|
-
}
|
|
453
|
-
const ifModifiedSinceMs = Date.parse(ifModifiedSince)
|
|
454
|
-
if (Number.isNaN(ifModifiedSinceMs)) {
|
|
455
|
-
return false
|
|
487
|
+
return undefined
|
|
456
488
|
}
|
|
457
|
-
const
|
|
458
|
-
if (
|
|
459
|
-
return
|
|
489
|
+
const sinceDate = Headers.parseHttpDate(since)
|
|
490
|
+
if (Result.isFailure(sinceDate)) {
|
|
491
|
+
return undefined
|
|
460
492
|
}
|
|
461
|
-
|
|
493
|
+
const lastModifiedDate = Headers.parseHttpDate(lastModified)
|
|
494
|
+
return Result.isSuccess(lastModifiedDate)
|
|
495
|
+
? DateTime.toEpochMillis(lastModifiedDate.success) > DateTime.toEpochMillis(sinceDate.success)
|
|
496
|
+
: undefined
|
|
462
497
|
}
|
|
463
498
|
|
|
464
499
|
// Only a strong entity-tag can match (RFC 9110 §13.1.5). Weak tags start
|
|
@@ -469,21 +504,18 @@ const matchesIfRange = (ifRange: string, etag: string | undefined): boolean => {
|
|
|
469
504
|
return value.startsWith("\"") && value === etag
|
|
470
505
|
}
|
|
471
506
|
|
|
507
|
+
// Headers a 304 must repeat from the 200 response (RFC 9110 §15.4.5), plus Last-Modified for revalidation.
|
|
508
|
+
const notModifiedHeaders = ["cache-control", "content-location", "date", "etag", "expires", "last-modified", "vary"]
|
|
509
|
+
|
|
472
510
|
const notModifiedResponse = (
|
|
473
511
|
response: HttpServerResponse.HttpServerResponse
|
|
474
512
|
): HttpServerResponse.HttpServerResponse => {
|
|
475
513
|
const headers: Record<string, string> = {}
|
|
476
|
-
const
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
if (cacheControl !== undefined) {
|
|
482
|
-
headers["Cache-Control"] = cacheControl
|
|
483
|
-
}
|
|
484
|
-
const lastModified = response.headers["last-modified"]
|
|
485
|
-
if (lastModified !== undefined) {
|
|
486
|
-
headers["Last-Modified"] = lastModified
|
|
514
|
+
for (const name of notModifiedHeaders) {
|
|
515
|
+
const value = response.headers[name]
|
|
516
|
+
if (value !== undefined) {
|
|
517
|
+
headers[name] = value
|
|
518
|
+
}
|
|
487
519
|
}
|
|
488
520
|
return HttpServerResponse.empty({
|
|
489
521
|
status: 304,
|
|
@@ -495,12 +527,25 @@ const evaluateConditionalRequest = (
|
|
|
495
527
|
request: HttpServerRequest.HttpServerRequest,
|
|
496
528
|
response: HttpServerResponse.HttpServerResponse
|
|
497
529
|
): HttpServerResponse.HttpServerResponse | undefined => {
|
|
530
|
+
const etag = response.headers["etag"]
|
|
531
|
+
const lastModified = response.headers["last-modified"]
|
|
532
|
+
const ifMatch = request.headers["if-match"]
|
|
533
|
+
if (ifMatch !== undefined) {
|
|
534
|
+
if (!matchesIfMatch(ifMatch, etag)) {
|
|
535
|
+
return HttpServerResponse.empty({ status: 412 })
|
|
536
|
+
}
|
|
537
|
+
} else {
|
|
538
|
+
const ifUnmodifiedSince = request.headers["if-unmodified-since"]
|
|
539
|
+
if (ifUnmodifiedSince !== undefined && isModifiedSince(ifUnmodifiedSince, lastModified) === true) {
|
|
540
|
+
return HttpServerResponse.empty({ status: 412 })
|
|
541
|
+
}
|
|
542
|
+
}
|
|
498
543
|
const ifNoneMatch = request.headers["if-none-match"]
|
|
499
544
|
if (ifNoneMatch !== undefined) {
|
|
500
|
-
return matchesIfNoneMatch(ifNoneMatch,
|
|
545
|
+
return matchesIfNoneMatch(ifNoneMatch, etag) ? notModifiedResponse(response) : undefined
|
|
501
546
|
}
|
|
502
547
|
const ifModifiedSince = request.headers["if-modified-since"]
|
|
503
|
-
if (ifModifiedSince !== undefined &&
|
|
548
|
+
if (ifModifiedSince !== undefined && isModifiedSince(ifModifiedSince, lastModified) === false) {
|
|
504
549
|
return notModifiedResponse(response)
|
|
505
550
|
}
|
|
506
551
|
return undefined
|