effect 4.0.6 → 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/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/Channel.d.ts.map +1 -1
- package/dist/Channel.js +21 -6
- package/dist/Channel.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/Effect.d.ts +1 -1
- package/dist/Effect.js +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/Exit.d.ts +3 -3
- package/dist/Exit.d.ts.map +1 -1
- package/dist/Exit.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/Hash.d.ts.map +1 -1
- package/dist/Hash.js +4 -1
- package/dist/Hash.js.map +1 -1
- package/dist/JsonPatch.js +4 -0
- package/dist/JsonPatch.js.map +1 -1
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +13 -40
- package/dist/JsonSchema.js.map +1 -1
- package/dist/Metric.d.ts +3 -3
- 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/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/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 +5 -6
- package/dist/PubSub.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/Schedule.js +1 -1
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +24 -8
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +37 -28
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +4 -2
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +14 -17
- package/dist/SchemaAST.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 +19 -10
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +23 -13
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +4 -1
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +9 -2
- package/dist/SchemaTransformation.js.map +1 -1
- 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 +7 -2
- package/dist/Sink.js.map +1 -1
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +22 -10
- package/dist/Stream.js.map +1 -1
- package/dist/String.d.ts +3 -0
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +3 -0
- package/dist/String.js.map +1 -1
- 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/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/McpSchema.d.ts +110 -110
- package/dist/ai/McpSchema.d.ts.map +1 -1
- package/dist/ai/McpServer.d.ts.map +1 -1
- package/dist/ai/McpServer.js +21 -15
- package/dist/ai/McpServer.js.map +1 -1
- package/dist/ai/Prompt.d.ts +52 -0
- package/dist/ai/Prompt.d.ts.map +1 -1
- package/dist/ai/Prompt.js +38 -0
- package/dist/ai/Prompt.js.map +1 -1
- package/dist/ai/Response.d.ts +16 -3
- package/dist/ai/Response.d.ts.map +1 -1
- package/dist/ai/Response.js +4 -0
- package/dist/ai/Response.js.map +1 -1
- package/dist/ai/Tool.d.ts +24 -0
- 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.map +1 -1
- package/dist/ai/Toolkit.js +8 -1
- package/dist/ai/Toolkit.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 +78 -0
- package/dist/cli/CliError.d.ts.map +1 -1
- package/dist/cli/CliError.js +65 -3
- 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 +24 -16
- package/dist/cli/Command.d.ts.map +1 -1
- package/dist/cli/Command.js +59 -29
- package/dist/cli/Command.js.map +1 -1
- package/dist/cli/Completions.d.ts +58 -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 +15 -0
- package/dist/cli/Flag.d.ts.map +1 -1
- package/dist/cli/Flag.js +5 -0
- package/dist/cli/Flag.js.map +1 -1
- package/dist/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/cli/GlobalFlag.js +15 -7
- package/dist/cli/GlobalFlag.js.map +1 -1
- package/dist/cli/Param.d.ts +9 -0
- package/dist/cli/Param.d.ts.map +1 -1
- package/dist/cli/Param.js +21 -2
- package/dist/cli/Param.js.map +1 -1
- package/dist/cli/TerminalCapabilities.d.ts +3 -2
- package/dist/cli/TerminalCapabilities.d.ts.map +1 -1
- package/dist/cli/TerminalCapabilities.js +3 -1
- package/dist/cli/TerminalCapabilities.js.map +1 -1
- package/dist/cli/internal/completions/bash.js +73 -27
- package/dist/cli/internal/completions/bash.js.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +45 -10
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/MessageStorage.d.ts +23 -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/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +61 -21
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/ShardingConfig.d.ts +10 -0
- package/dist/cluster/ShardingConfig.d.ts.map +1 -1
- 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/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/cluster/SqlRunnerStorage.js +87 -39
- package/dist/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/cluster/internal/entityManager.js +54 -20
- package/dist/cluster/internal/entityManager.js.map +1 -1
- package/dist/devtools/DevToolsClient.d.ts.map +1 -1
- package/dist/devtools/DevToolsClient.js +2 -0
- 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/Sse.d.ts.map +1 -1
- package/dist/encoding/Sse.js +3 -3
- package/dist/encoding/Sse.js.map +1 -1
- package/dist/encoding/Toml.d.ts.map +1 -1
- package/dist/encoding/Toml.js +21 -16
- package/dist/encoding/Toml.js.map +1 -1
- package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
- package/dist/eventlog/SqlEventJournal.js +47 -27
- package/dist/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/eventlog/internal/conflicts.d.ts +0 -1
- package/dist/eventlog/internal/conflicts.d.ts.map +1 -1
- package/dist/eventlog/internal/conflicts.js +0 -3
- package/dist/eventlog/internal/conflicts.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/HttpClient.d.ts +423 -0
- package/dist/http/HttpClient.d.ts.map +1 -1
- package/dist/http/HttpClient.js +231 -7
- 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.map +1 -1
- package/dist/http/HttpClientRequest.js +1 -1
- package/dist/http/HttpClientRequest.js.map +1 -1
- package/dist/http/HttpMiddleware.d.ts +1 -1
- package/dist/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/http/HttpMiddleware.js +14 -16
- package/dist/http/HttpMiddleware.js.map +1 -1
- package/dist/http/HttpRouter.d.ts.map +1 -1
- package/dist/http/HttpRouter.js +2 -1
- package/dist/http/HttpRouter.js.map +1 -1
- package/dist/http/HttpServerError.js +2 -2
- package/dist/http/HttpServerError.js.map +1 -1
- package/dist/http/HttpServerRequest.d.ts +6 -1
- package/dist/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/http/HttpServerRequest.js +73 -10
- package/dist/http/HttpServerRequest.js.map +1 -1
- package/dist/http/HttpStaticServer.d.ts.map +1 -1
- package/dist/http/HttpStaticServer.js +48 -21
- package/dist/http/HttpStaticServer.js.map +1 -1
- package/dist/http/MultipartParser/internal/contentType.js +3 -3
- 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 +3 -0
- 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/urlParams.js +25 -0
- package/dist/http/internal/urlParams.js.map +1 -1
- 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 +3 -6
- 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 +27 -11
- package/dist/http-api/HttpApiBuilder.js.map +1 -1
- package/dist/http-api/HttpApiClient.d.ts +77 -7
- package/dist/http-api/HttpApiClient.d.ts.map +1 -1
- package/dist/http-api/HttpApiClient.js +142 -44
- package/dist/http-api/HttpApiClient.js.map +1 -1
- package/dist/http-api/HttpApiEndpoint.d.ts +24 -7
- package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/http-api/HttpApiEndpoint.js +109 -27
- package/dist/http-api/HttpApiEndpoint.js.map +1 -1
- package/dist/http-api/HttpApiSchema.d.ts +76 -29
- package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
- package/dist/http-api/HttpApiSchema.js +70 -59
- package/dist/http-api/HttpApiSchema.js.map +1 -1
- package/dist/http-api/HttpApiTest.d.ts.map +1 -1
- package/dist/http-api/HttpApiTest.js +3 -2
- package/dist/http-api/HttpApiTest.js.map +1 -1
- package/dist/http-api/OpenApi.d.ts.map +1 -1
- package/dist/http-api/OpenApi.js +25 -16
- package/dist/http-api/OpenApi.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/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 +2 -0
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/effect.js +21 -13
- 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/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/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 +173 -185
- 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/standardSchema.js +8 -2
- package/dist/internal/schema/standardSchema.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +3 -3
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/schema/toCodec.js +21 -24
- package/dist/internal/schema/toCodec.js.map +1 -1
- package/dist/internal/schema/toJsonSchemaDocument.js +205 -140
- 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/version.js +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/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/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/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/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 +30 -4
- 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/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +9 -8
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcSerialization.d.ts +14 -0
- package/dist/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/rpc/RpcSerialization.js +20 -8
- package/dist/rpc/RpcSerialization.js.map +1 -1
- package/dist/rpc/RpcServer.d.ts.map +1 -1
- package/dist/rpc/RpcServer.js +11 -1
- 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/sql/Migrator.d.ts +2 -1
- package/dist/sql/Migrator.d.ts.map +1 -1
- package/dist/sql/Migrator.js +11 -8
- package/dist/sql/Migrator.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +9 -4
- package/dist/sql/SqlClient.d.ts.map +1 -1
- package/dist/sql/SqlClient.js +8 -1
- package/dist/sql/SqlClient.js.map +1 -1
- package/dist/sql/SqlResolver.d.ts +4 -0
- package/dist/sql/SqlResolver.d.ts.map +1 -1
- package/dist/sql/SqlResolver.js +18 -4
- package/dist/sql/SqlResolver.js.map +1 -1
- package/dist/sql/Statement.d.ts +7 -0
- package/dist/sql/Statement.d.ts.map +1 -1
- package/dist/sql/Statement.js +21 -2
- package/dist/sql/Statement.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/package.json +1 -1
- package/src/Arbitrary.ts +10 -2
- package/src/Channel.ts +47 -18
- package/src/Data.ts +60 -265
- package/src/Effect.ts +1 -1
- package/src/Equal.ts +8 -1
- package/src/Exit.ts +3 -3
- package/src/Formatter.ts +28 -13
- package/src/Hash.ts +4 -1
- package/src/JsonPatch.ts +4 -0
- package/src/JsonSchema.ts +12 -40
- package/src/Metric.ts +3 -3
- package/src/MutableList.ts +7 -5
- package/src/MutableRef.ts +8 -1
- package/src/PartitionedSemaphore.ts +24 -13
- package/src/Pool.ts +109 -37
- package/src/PubSub.ts +5 -6
- package/src/Ref.ts +8 -0
- package/src/Schedule.ts +1 -1
- package/src/Schema.ts +48 -25
- package/src/SchemaAST.ts +20 -20
- package/src/SchemaParser.ts +51 -18
- package/src/SchemaRepresentation.ts +31 -34
- package/src/SchemaTransformation.ts +9 -2
- package/src/Semaphore.ts +67 -40
- package/src/Sink.ts +15 -2
- package/src/Stream.ts +33 -16
- package/src/String.ts +3 -0
- package/src/Tracer.ts +15 -1
- package/src/ai/LanguageModel.ts +9 -0
- package/src/ai/McpServer.ts +14 -13
- package/src/ai/Prompt.ts +65 -0
- package/src/ai/Response.ts +34 -9
- package/src/ai/Tool.ts +38 -2
- package/src/ai/Toolkit.ts +4 -1
- package/src/cli/Argument.ts +15 -0
- package/src/cli/CliError.ts +90 -3
- package/src/cli/CliOutput.ts +183 -6
- package/src/cli/Command.ts +53 -41
- package/src/cli/Completions.ts +51 -0
- package/src/cli/Flag.ts +15 -0
- package/src/cli/GlobalFlag.ts +6 -7
- package/src/cli/Param.ts +29 -6
- package/src/cli/TerminalCapabilities.ts +6 -3
- package/src/cli/internal/completions/bash.ts +79 -29
- package/src/cluster/ClusterWorkflowEngine.ts +46 -16
- package/src/cluster/MessageStorage.ts +19 -14
- package/src/cluster/Sharding.ts +83 -21
- package/src/cluster/ShardingConfig.ts +5 -0
- package/src/cluster/Snowflake.ts +3 -7
- package/src/cluster/SqlRunnerStorage.ts +110 -47
- package/src/cluster/internal/entityManager.ts +75 -22
- package/src/devtools/DevToolsClient.ts +2 -0
- package/src/encoding/Base64.ts +38 -0
- package/src/encoding/Sse.ts +4 -3
- package/src/encoding/Toml.ts +33 -16
- package/src/eventlog/SqlEventJournal.ts +68 -45
- package/src/eventlog/internal/conflicts.ts +0 -4
- package/src/http/Cookies.ts +10 -11
- package/src/http/HttpClient.ts +547 -7
- package/src/http/HttpClientError.ts +35 -1
- package/src/http/HttpClientRequest.ts +9 -1
- package/src/http/HttpMiddleware.ts +15 -18
- package/src/http/HttpRouter.ts +2 -1
- package/src/http/HttpServerError.ts +2 -2
- package/src/http/HttpServerRequest.ts +102 -16
- package/src/http/HttpStaticServer.ts +51 -22
- package/src/http/MultipartParser/internal/contentType.ts +3 -3
- package/src/http/UrlParams.ts +6 -1
- package/src/http/internal/compression.ts +4 -5
- package/src/http/internal/decompression.ts +6 -0
- package/src/http/internal/httpBody.ts +10 -2
- package/src/http/internal/urlParams.ts +29 -0
- package/src/http-api/HttpApi.ts +3 -6
- package/src/http-api/HttpApiBuilder.ts +45 -15
- package/src/http-api/HttpApiClient.ts +218 -72
- package/src/http-api/HttpApiEndpoint.ts +121 -30
- package/src/http-api/HttpApiSchema.ts +141 -48
- package/src/http-api/HttpApiTest.ts +3 -2
- package/src/http-api/OpenApi.ts +20 -17
- package/src/http-api/internal/toCodecHttpProperties.ts +56 -0
- package/src/internal/arbitrary/runner.ts +133 -36
- package/src/internal/core.ts +2 -0
- package/src/internal/effect.ts +24 -16
- package/src/internal/equal.ts +17 -0
- package/src/internal/jsonSchema.ts +27 -0
- package/src/internal/matcher.ts +1 -1
- package/src/internal/schema/compilerRegistry.ts +6 -1
- package/src/internal/schema/content.ts +18 -0
- package/src/internal/schema/fromJsonSchemaDocument.ts +228 -190
- package/src/internal/schema/fromRepresentation.ts +2 -1
- package/src/internal/schema/standardSchema.ts +2 -2
- package/src/internal/schema/toCodeDocument.ts +4 -4
- package/src/internal/schema/toCodec.ts +26 -22
- package/src/internal/schema/toJsonSchemaDocument.ts +189 -167
- package/src/internal/schema/toRepresentation.ts +122 -140
- package/src/internal/sql.ts +14 -0
- package/src/internal/version.ts +1 -1
- package/src/observability/OtlpProxy.ts +314 -0
- package/src/observability/OtlpTracer.ts +4 -0
- package/src/observability/index.ts +6 -0
- package/src/persistence/CircuitBreaker.ts +1678 -0
- package/src/persistence/Redis.ts +129 -8
- package/src/persistence/index.ts +6 -0
- package/src/process/ChildProcess.ts +30 -4
- package/src/process/ChildProcessSpawner.ts +41 -2
- package/src/reactivity/AsyncResult.ts +1 -1
- package/src/rpc/RpcClient.ts +13 -10
- package/src/rpc/RpcSerialization.ts +32 -9
- package/src/rpc/RpcServer.ts +16 -1
- package/src/rpc/RpcTest.ts +3 -0
- package/src/sql/Migrator.ts +12 -7
- package/src/sql/SqlClient.ts +11 -4
- package/src/sql/SqlResolver.ts +23 -9
- package/src/sql/Statement.ts +30 -2
- package/src/workflow/DurableDeferred.ts +23 -6
package/src/sql/Migrator.ts
CHANGED
|
@@ -98,7 +98,8 @@ export class MigrationError extends Data.TaggedError("MigrationError")<{
|
|
|
98
98
|
/**
|
|
99
99
|
* Creates a migrator that ensures the migrations table exists, runs pending
|
|
100
100
|
* migrations in a transaction, and optionally dumps the schema after successful
|
|
101
|
-
* migrations.
|
|
101
|
+
* migrations. ClickHouse runs without a transaction and records each migration
|
|
102
|
+
* only after it succeeds.
|
|
102
103
|
*
|
|
103
104
|
* @stability unstable
|
|
104
105
|
* @category constructors
|
|
@@ -240,6 +241,12 @@ ORDER BY migration_id`,
|
|
|
240
241
|
|
|
241
242
|
// === run
|
|
242
243
|
|
|
244
|
+
// BEGIN is still experimental on clickhouse
|
|
245
|
+
const transactional = sql.onDialectOrElse({
|
|
246
|
+
clickhouse: () => false,
|
|
247
|
+
orElse: () => true
|
|
248
|
+
})
|
|
249
|
+
|
|
243
250
|
const run = Effect.gen(function*() {
|
|
244
251
|
yield* sql.onDialectOrElse({
|
|
245
252
|
pg: () => sql`LOCK TABLE ${sql(table)} IN ACCESS EXCLUSIVE MODE`,
|
|
@@ -279,7 +286,8 @@ ORDER BY migration_id`,
|
|
|
279
286
|
])
|
|
280
287
|
}
|
|
281
288
|
|
|
282
|
-
|
|
289
|
+
// rows recorded up front are only rolled back inside a transaction
|
|
290
|
+
if (transactional && required.length > 0) {
|
|
283
291
|
yield* pipe(
|
|
284
292
|
insertMigrations(required.map(([id, name]) => [id, name])),
|
|
285
293
|
Effect.mapError((error): MigrationError | SqlError =>
|
|
@@ -298,6 +306,7 @@ ORDER BY migration_id`,
|
|
|
298
306
|
([id, name, effect]) =>
|
|
299
307
|
Effect.logDebug(`Running migration`).pipe(
|
|
300
308
|
Effect.flatMap(() => runMigration(id, name, effect)),
|
|
309
|
+
Effect.andThen(transactional ? Effect.void : insertMigrations([[id, name]])),
|
|
301
310
|
Effect.annotateLogs("migration_id", String(id)),
|
|
302
311
|
Effect.annotateLogs("migration_name", name),
|
|
303
312
|
Effect.withSpan(`Migrator ${id}_${name}`)
|
|
@@ -325,11 +334,7 @@ ORDER BY migration_id`,
|
|
|
325
334
|
yield* ensureMigrationsTable
|
|
326
335
|
|
|
327
336
|
const completed = yield* pipe(
|
|
328
|
-
sql.
|
|
329
|
-
// BEGIN is still experimental on clickhouse
|
|
330
|
-
clickhouse: () => run,
|
|
331
|
-
orElse: () => sql.withTransaction(run)
|
|
332
|
-
}),
|
|
337
|
+
transactional ? sql.withTransaction(run) : run,
|
|
333
338
|
Effect.catchTag("MigrationError", (_) =>
|
|
334
339
|
_.kind === "Locked"
|
|
335
340
|
? Effect.as(Effect.logDebug(_.message), [])
|
package/src/sql/SqlClient.ts
CHANGED
|
@@ -15,6 +15,7 @@ import * as Context from "../Context.ts"
|
|
|
15
15
|
import * as Effect from "../Effect.ts"
|
|
16
16
|
import * as Exit from "../Exit.ts"
|
|
17
17
|
import { identity } from "../Function.ts"
|
|
18
|
+
import { CurrentTransactionService } from "../internal/sql.ts"
|
|
18
19
|
import * as Option from "../Option.ts"
|
|
19
20
|
import { hasProperty } from "../Predicate.ts"
|
|
20
21
|
import type * as Queue from "../Queue.ts"
|
|
@@ -87,8 +88,7 @@ export interface SqlClient extends Constructor {
|
|
|
87
88
|
* enclosing `Reactivity.withBatch`. Only the `Reactivity` service read from
|
|
88
89
|
* the transaction's context defers, and a fiber that outlives the
|
|
89
90
|
* transaction can't defer through it, as with `afterCommit`. Transactions
|
|
90
|
-
* that don't go through `makeWithTransaction
|
|
91
|
-
* `@effect/sql-sqlite-do`, invalidate immediately.
|
|
91
|
+
* that don't go through `makeWithTransaction` invalidate immediately.
|
|
92
92
|
*/
|
|
93
93
|
readonly withTransaction: <R, E, A>(
|
|
94
94
|
self: Effect.Effect<A, E, R>
|
|
@@ -136,8 +136,8 @@ export interface SqlClient extends Constructor {
|
|
|
136
136
|
* long-running work.
|
|
137
137
|
* Registering after the transaction has ended is a defect.
|
|
138
138
|
*
|
|
139
|
-
* Transactions that don't go through `makeWithTransaction
|
|
140
|
-
*
|
|
139
|
+
* Transactions that don't go through `makeWithTransaction` run callbacks
|
|
140
|
+
* immediately.
|
|
141
141
|
*/
|
|
142
142
|
readonly afterCommit: <R>(effect: Effect.Effect<void, never, R>) => Effect.Effect<void, never, R>
|
|
143
143
|
|
|
@@ -525,6 +525,12 @@ const makeAfterCommit =
|
|
|
525
525
|
* failure or interruption. Releases nested savepoints when `releaseSavepoint`
|
|
526
526
|
* is provided.
|
|
527
527
|
*
|
|
528
|
+
* **Details**
|
|
529
|
+
*
|
|
530
|
+
* Transactions started this way are also recognized by `SqlResolver` when the
|
|
531
|
+
* caller's context has no `SqlClient`, so their requests don't share a batch
|
|
532
|
+
* with requests outside the transaction.
|
|
533
|
+
*
|
|
528
534
|
* @stability unstable
|
|
529
535
|
* @category transactions
|
|
530
536
|
* @since 4.0.0
|
|
@@ -612,6 +618,7 @@ export const makeWithTransaction = <I, S>(options: {
|
|
|
612
618
|
restore(effect),
|
|
613
619
|
services.pipe(
|
|
614
620
|
Context.add(options.transactionService, level),
|
|
621
|
+
Context.add(CurrentTransactionService, options.transactionService),
|
|
615
622
|
reactivity ? Context.add(Reactivity, deferInvalidations(reactivity)) : identity,
|
|
616
623
|
Context.add(transactionSemaphore, Semaphore.makeUnsafe(1)),
|
|
617
624
|
Context.add(Tracer.ParentSpan, span)
|
package/src/sql/SqlResolver.ts
CHANGED
|
@@ -8,6 +8,10 @@
|
|
|
8
8
|
* grouped, id-based, and side-effect-only resolver constructors, and keeps
|
|
9
9
|
* batches separated by the active SQL transaction connection.
|
|
10
10
|
*
|
|
11
|
+
* The active transaction is found through the `SqlClient` in each request's
|
|
12
|
+
* context, and otherwise through the innermost transaction started with
|
|
13
|
+
* `SqlClient.makeWithTransaction`.
|
|
14
|
+
*
|
|
11
15
|
* Only the transaction connection separates batches. Other differences in
|
|
12
16
|
* caller services do not: `execute` and result decoding are provided with the
|
|
13
17
|
* first entry's context, while request encoding uses each entry's own context.
|
|
@@ -27,6 +31,7 @@ import * as Effect from "../Effect.ts"
|
|
|
27
31
|
import * as Equal from "../Equal.ts"
|
|
28
32
|
import * as Exit from "../Exit.ts"
|
|
29
33
|
import * as Hash from "../Hash.ts"
|
|
34
|
+
import { CurrentTransactionService } from "../internal/sql.ts"
|
|
30
35
|
import * as MutableHashMap from "../MutableHashMap.ts"
|
|
31
36
|
import * as Option from "../Option.ts"
|
|
32
37
|
import * as Request from "../Request.ts"
|
|
@@ -146,7 +151,7 @@ export const ordered = <Req extends Schema.Constraint, Res extends Schema.Constr
|
|
|
146
151
|
E | ResultLengthMismatch,
|
|
147
152
|
Req["EncodingServices"] | Res["DecodingServices"] | R
|
|
148
153
|
>,
|
|
149
|
-
|
|
154
|
+
object | undefined
|
|
150
155
|
>({
|
|
151
156
|
key: transactionKey,
|
|
152
157
|
resolver: Effect.fnUntraced(function*(entries) {
|
|
@@ -204,7 +209,7 @@ export const grouped = <Req extends Schema.Constraint, Res extends Schema.Constr
|
|
|
204
209
|
E | Schema.SchemaError | Cause.NoSuchElementError,
|
|
205
210
|
Req["EncodingServices"] | Res["DecodingServices"] | R
|
|
206
211
|
>,
|
|
207
|
-
|
|
212
|
+
object | undefined
|
|
208
213
|
>({
|
|
209
214
|
key: transactionKey,
|
|
210
215
|
resolver: Effect.fnUntraced(function*(entries) {
|
|
@@ -274,7 +279,7 @@ export const findById = <Id extends Schema.Constraint, Res extends Schema.Constr
|
|
|
274
279
|
E | Schema.SchemaError | Cause.NoSuchElementError,
|
|
275
280
|
Id["EncodingServices"] | Res["DecodingServices"] | R
|
|
276
281
|
>,
|
|
277
|
-
|
|
282
|
+
object | undefined
|
|
278
283
|
>({
|
|
279
284
|
key: transactionKey,
|
|
280
285
|
resolver: Effect.fnUntraced(function*(entries) {
|
|
@@ -328,7 +333,7 @@ const void_ = <Req extends Schema.Constraint, _, E, R>(
|
|
|
328
333
|
E | Schema.SchemaError,
|
|
329
334
|
Req["EncodingServices"] | R
|
|
330
335
|
>,
|
|
331
|
-
|
|
336
|
+
object | undefined
|
|
332
337
|
>({
|
|
333
338
|
key: transactionKey,
|
|
334
339
|
resolver: Effect.fnUntraced(function*(entries) {
|
|
@@ -429,10 +434,19 @@ const partitionRequestsById = function*<In, A, E, R, InE>(
|
|
|
429
434
|
return [inputs, byIdMap] as const
|
|
430
435
|
}
|
|
431
436
|
|
|
432
|
-
function transactionKey<A>(entry: Request.Entry<A>):
|
|
437
|
+
function transactionKey<A>(entry: Request.Entry<A>): object | undefined {
|
|
438
|
+
// The transaction of the request's `SqlClient`, and the innermost transaction
|
|
439
|
+
// started with `SqlClient.makeWithTransaction` by any client.
|
|
433
440
|
const client = Context.getOrUndefined(entry.context, SqlClient.SqlClient)
|
|
434
|
-
|
|
435
|
-
const
|
|
436
|
-
|
|
437
|
-
|
|
441
|
+
const clientTransaction = client && Context.getOrUndefined(entry.context, client.transactionService)
|
|
442
|
+
const currentService = Context.get(entry.context, CurrentTransactionService)
|
|
443
|
+
const currentTransaction = currentService && Context.getOrUndefined(entry.context, currentService)
|
|
444
|
+
if (clientTransaction === undefined || clientTransaction === currentTransaction) {
|
|
445
|
+
return currentTransaction && Equal.byReferenceUnsafe(currentTransaction)
|
|
446
|
+
}
|
|
447
|
+
if (currentTransaction === undefined) {
|
|
448
|
+
return Equal.byReferenceUnsafe(clientTransaction)
|
|
449
|
+
}
|
|
450
|
+
// Two different transactions are active, so neither identifies the request on its own.
|
|
451
|
+
return [Equal.byReferenceUnsafe(clientTransaction), Equal.byReferenceUnsafe(currentTransaction)]
|
|
438
452
|
}
|
package/src/sql/Statement.ts
CHANGED
|
@@ -519,6 +519,9 @@ export interface Constructor {
|
|
|
519
519
|
* **Gotchas**
|
|
520
520
|
*
|
|
521
521
|
* Not supported in sqlite.
|
|
522
|
+
*
|
|
523
|
+
* The alias is escaped as an identifier and is not passed through name
|
|
524
|
+
* transforms.
|
|
522
525
|
*/
|
|
523
526
|
readonly updateValues: (
|
|
524
527
|
value: ReadonlyArray<Record<string, unknown>>,
|
|
@@ -838,6 +841,10 @@ export type CompilerOptions<C extends Custom<any, any, any, any> = any> = {
|
|
|
838
841
|
readonly dialect: Dialect
|
|
839
842
|
readonly placeholder: (index: number, value: unknown) => string
|
|
840
843
|
readonly onIdentifier: (value: string, withoutTransform: boolean) => string
|
|
844
|
+
/**
|
|
845
|
+
* Renders `updateValues`. The `alias` is already escaped with
|
|
846
|
+
* `onIdentifier(alias, true)` and must be inserted as is.
|
|
847
|
+
*/
|
|
841
848
|
readonly onRecordUpdate: (
|
|
842
849
|
placeholders: string,
|
|
843
850
|
alias: string,
|
|
@@ -945,6 +952,19 @@ const CompilerProto = {
|
|
|
945
952
|
}
|
|
946
953
|
|
|
947
954
|
case "ArrayHelper": {
|
|
955
|
+
if (segment.value.length === 0) {
|
|
956
|
+
const inKeyword = emptyInKeyword.exec(sql)
|
|
957
|
+
if (inKeyword === null || isInLineComment(sql, inKeyword.index)) {
|
|
958
|
+
sql += "()"
|
|
959
|
+
} else if (this.dialect === "pg") {
|
|
960
|
+
// an empty subquery is typed as text in postgres, so compare with an
|
|
961
|
+
// empty array, which takes the type of the left operand instead
|
|
962
|
+
sql = sql.slice(0, inKeyword.index) + (inKeyword[1] ? "<> ALL('{}')" : "= ANY('{}')")
|
|
963
|
+
} else {
|
|
964
|
+
sql += "(SELECT NULL WHERE 1=0)"
|
|
965
|
+
}
|
|
966
|
+
break
|
|
967
|
+
}
|
|
948
968
|
sql += `(${placeholders(segment.value)})`
|
|
949
969
|
binds.push.apply(binds, segment.value as any)
|
|
950
970
|
break
|
|
@@ -1088,7 +1108,7 @@ const CompilerProto = {
|
|
|
1088
1108
|
}
|
|
1089
1109
|
const [s, b] = opts.onRecordUpdate(
|
|
1090
1110
|
placeholders,
|
|
1091
|
-
segment.alias,
|
|
1111
|
+
opts.onIdentifier(segment.alias, true),
|
|
1092
1112
|
generateColumns(keys, opts.onIdentifier, withoutTransform),
|
|
1093
1113
|
values,
|
|
1094
1114
|
typeof segment.returningIdentifier === "string"
|
|
@@ -1222,7 +1242,7 @@ export const defaultTransforms = (
|
|
|
1222
1242
|
) => {
|
|
1223
1243
|
const transformValue = (value: any) => {
|
|
1224
1244
|
if (Array.isArray(value)) {
|
|
1225
|
-
if (value.length === 0 || value[0]
|
|
1245
|
+
if (value.length === 0 || value[0]?.constructor !== Object) {
|
|
1226
1246
|
return value
|
|
1227
1247
|
}
|
|
1228
1248
|
return array(value)
|
|
@@ -1248,6 +1268,8 @@ export const defaultTransforms = (
|
|
|
1248
1268
|
const row = rows[i]
|
|
1249
1269
|
if (Array.isArray(row)) {
|
|
1250
1270
|
newRows[i] = transformArrayNested(row) as any
|
|
1271
|
+
} else if (row === null || typeof row !== "object") {
|
|
1272
|
+
newRows[i] = row
|
|
1251
1273
|
} else {
|
|
1252
1274
|
const obj: any = {}
|
|
1253
1275
|
for (const [key, value] of Object.entries(row)) {
|
|
@@ -1267,6 +1289,8 @@ export const defaultTransforms = (
|
|
|
1267
1289
|
const row = rows[i]
|
|
1268
1290
|
if (Array.isArray(row)) {
|
|
1269
1291
|
newRows[i] = transformArray(row) as any
|
|
1292
|
+
} else if (row === null || typeof row !== "object") {
|
|
1293
|
+
newRows[i] = row
|
|
1270
1294
|
} else {
|
|
1271
1295
|
const obj: any = {}
|
|
1272
1296
|
for (const [key, value] of Object.entries(row)) {
|
|
@@ -1686,3 +1710,7 @@ function in_(): Fragment | ArrayHelper {
|
|
|
1686
1710
|
}
|
|
1687
1711
|
|
|
1688
1712
|
const neverFragment = fragment([literal("1=0")])
|
|
1713
|
+
|
|
1714
|
+
const emptyInKeyword = /\b(NOT\s+)?IN\s*$/i
|
|
1715
|
+
|
|
1716
|
+
const isInLineComment = (sql: string, index: number) => sql.lastIndexOf("--", index) > sql.lastIndexOf("\n", index)
|
|
@@ -347,6 +347,7 @@ const recordHeld = Effect.fnUntraced(function*<A, E, R>(
|
|
|
347
347
|
): Effect.fn.Return<A, E, R | WorkflowEngine | WorkflowInstance> {
|
|
348
348
|
const engine = yield* EngineTag
|
|
349
349
|
const instance = yield* InstanceTag
|
|
350
|
+
let parked: Cause.Cause<unknown> | undefined
|
|
350
351
|
const exit = yield* Workflow.wrapActivityResult(
|
|
351
352
|
Effect.gen(function*() {
|
|
352
353
|
if (checkCache) {
|
|
@@ -374,11 +375,13 @@ const recordHeld = Effect.fnUntraced(function*<A, E, R>(
|
|
|
374
375
|
Effect.forkChild({ startImmediately: true })
|
|
375
376
|
)
|
|
376
377
|
return yield* Effect.onInterrupt(Fiber.await(fiber), () => Fiber.interrupt(fiber)).pipe(
|
|
377
|
-
Effect.map((exit) =>
|
|
378
|
-
local.suspended && Exit.isFailure(exit) && Cause.hasInterruptsOnly(exit.cause)
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
378
|
+
Effect.map((exit) => {
|
|
379
|
+
if (local.suspended && Exit.isFailure(exit) && Cause.hasInterruptsOnly(exit.cause)) {
|
|
380
|
+
parked = exit.cause
|
|
381
|
+
return Option.none()
|
|
382
|
+
}
|
|
383
|
+
return Option.some(exit)
|
|
384
|
+
}),
|
|
382
385
|
// The waits are over once the body has a result. Otherwise every branch
|
|
383
386
|
// parked, or an enclosing race interrupted the body, and the waits move
|
|
384
387
|
// to the enclosing owner, if any, to be released when that race settles.
|
|
@@ -398,11 +401,25 @@ const recordHeld = Effect.fnUntraced(function*<A, E, R>(
|
|
|
398
401
|
Option.isNone
|
|
399
402
|
)
|
|
400
403
|
if (Option.isNone(exit)) {
|
|
401
|
-
return yield*
|
|
404
|
+
return yield* suspendWith(instance, parked!)
|
|
402
405
|
}
|
|
403
406
|
return yield* exit.value
|
|
404
407
|
})
|
|
405
408
|
|
|
409
|
+
/**
|
|
410
|
+
* Suspends like `Workflow.suspend`, keeping the annotations of the interrupts
|
|
411
|
+
* that stopped the branches. A branch can stop on an engine interrupt, such as
|
|
412
|
+
* a runner shutdown abandoning an activity, rather than on a durable wait. The
|
|
413
|
+
* engine must still see that interrupt to replay the run instead of storing it
|
|
414
|
+
* as suspended.
|
|
415
|
+
*/
|
|
416
|
+
const suspendWith = (instance: WorkflowInstance["Service"], cause: Cause.Cause<unknown>): Effect.Effect<never> =>
|
|
417
|
+
Effect.interruptible(Effect.callback<never>(() => {
|
|
418
|
+
instance.suspended = true
|
|
419
|
+
const fiber = Fiber.getCurrent()!
|
|
420
|
+
fiber.interruptUnsafe(fiber.id, Context.omit(Cause.StackTrace)(Cause.annotations(cause)))
|
|
421
|
+
}))
|
|
422
|
+
|
|
406
423
|
/**
|
|
407
424
|
* Runs effects as a durable race, returning a previously persisted result when
|
|
408
425
|
* present or completing a named deferred with the first result.
|