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/http-api/OpenApi.ts
CHANGED
|
@@ -548,10 +548,13 @@ function makeOpenApi<Id extends string, Groups extends HttpApiGroup.Constraint>(
|
|
|
548
548
|
if (!HttpApiMiddleware.isSecurity(middleware)) {
|
|
549
549
|
return
|
|
550
550
|
}
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
551
|
+
const names = Object.keys(middleware.security)
|
|
552
|
+
for (const name of names) {
|
|
553
|
+
processHttpApiSecurity(name, middleware.security[name])
|
|
554
554
|
}
|
|
555
|
+
// Stacked middleware must all pass (AND); schemes within one middleware are alternatives (OR).
|
|
556
|
+
const requirements = op.security.length === 0 ? [{}] : op.security
|
|
557
|
+
op.security = requirements.flatMap((requirement) => names.map((name) => ({ ...requirement, [name]: [] })))
|
|
555
558
|
})
|
|
556
559
|
|
|
557
560
|
function processHttpApiSecurity(
|
|
@@ -585,7 +588,9 @@ function makeOpenApi<Id extends string, Groups extends HttpApiGroup.Constraint>(
|
|
|
585
588
|
for (const schema of HttpApiEndpoint.getPayloadSchemas(endpoint)) {
|
|
586
589
|
if (HttpApiSchema.isStreamSchema(schema)) {
|
|
587
590
|
// Endpoint construction rejects a buffered payload sharing a streaming payload's media type.
|
|
588
|
-
|
|
591
|
+
for (const contentType of schema.contentTypes) {
|
|
592
|
+
schemasByContentType.set(contentType, schema)
|
|
593
|
+
}
|
|
589
594
|
continue
|
|
590
595
|
}
|
|
591
596
|
if (HttpApiSchema.isNoContent(schema.ast)) continue
|
|
@@ -825,6 +830,9 @@ function selectReferences(
|
|
|
825
830
|
|
|
826
831
|
pushChecks(representation.checks)
|
|
827
832
|
switch (representation._tag) {
|
|
833
|
+
case "String":
|
|
834
|
+
if (representation.content?.schema !== undefined) stack.push(representation.content.schema)
|
|
835
|
+
break
|
|
828
836
|
case "Declaration":
|
|
829
837
|
stack.push(...representation.typeParameters)
|
|
830
838
|
break
|
|
@@ -899,6 +907,7 @@ function extractResponseBodies(
|
|
|
899
907
|
map.get(status)!.headers.push(
|
|
900
908
|
Schema.Struct({ connection: Schema.Literal("Upgrade"), upgrade: Schema.Literal(body.protocol) })
|
|
901
909
|
)
|
|
910
|
+
if (body.headers !== undefined) map.get(status)!.headers.push(body.headers)
|
|
902
911
|
} else if (HttpApiSchema.isStreamSchema(body)) {
|
|
903
912
|
addStreamContent(body, status)
|
|
904
913
|
} else if (HttpApiSchema.isNoContent(ast)) {
|
|
@@ -975,20 +984,14 @@ function extractResponseBodies(
|
|
|
975
984
|
stream: HttpApiSchema.StreamSchema,
|
|
976
985
|
status: number
|
|
977
986
|
) {
|
|
978
|
-
|
|
987
|
+
let statusMap = map.get(status)
|
|
979
988
|
if (statusMap === undefined) {
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
} else {
|
|
987
|
-
if (statusMap.streamContent === undefined) {
|
|
988
|
-
statusMap.streamContent = new Map([[stream.contentType, stream]])
|
|
989
|
-
} else {
|
|
990
|
-
statusMap.streamContent.set(stream.contentType, stream)
|
|
991
|
-
}
|
|
989
|
+
statusMap = { descriptions: new Set(), content: undefined, headers: [], streamContent: undefined }
|
|
990
|
+
map.set(status, statusMap)
|
|
991
|
+
}
|
|
992
|
+
const streamContent = statusMap.streamContent ??= new Map()
|
|
993
|
+
for (const contentType of stream.contentTypes) {
|
|
994
|
+
streamContent.set(contentType, stream)
|
|
992
995
|
}
|
|
993
996
|
}
|
|
994
997
|
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { memoize } from "../../Function.ts"
|
|
2
|
+
import * as Option from "../../Option.ts"
|
|
3
|
+
import * as Predicate from "../../Predicate.ts"
|
|
4
|
+
import * as Schema from "../../Schema.ts"
|
|
5
|
+
import * as SchemaAST from "../../SchemaAST.ts"
|
|
6
|
+
import * as SchemaGetter from "../../SchemaGetter.ts"
|
|
7
|
+
import * as SchemaTransformation from "../../SchemaTransformation.ts"
|
|
8
|
+
|
|
9
|
+
/** @internal */
|
|
10
|
+
export function toCodecHttpProperties<S extends Schema.Constraint>(schema: S): Schema.toCodecStringTree<S> {
|
|
11
|
+
const codec = Schema.toCodecStringTree(schema)
|
|
12
|
+
return codec.rebuild(normalizeProperties(codec.ast))
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const omitUndefined = new SchemaTransformation.Transformation(
|
|
16
|
+
SchemaGetter.passthrough(),
|
|
17
|
+
SchemaGetter.transformOptional(Option.filter(Predicate.isNotUndefined))
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
// Only descend through unions and suspensions, leaving nested values alone.
|
|
21
|
+
const present = memoize((ast: SchemaAST.AST): SchemaAST.AST => {
|
|
22
|
+
if (ast._tag === "Undefined") return new SchemaAST.Never(ast.annotations, undefined, undefined, ast.context)
|
|
23
|
+
if (ast._tag === "Suspend") return ast.recur(present)
|
|
24
|
+
if (ast._tag !== "Union") return ast
|
|
25
|
+
|
|
26
|
+
const members = SchemaAST.mapOrSame(ast.types, present)
|
|
27
|
+
if (members === ast.types) return ast
|
|
28
|
+
const types = members.filter((member) => member._tag !== "Never")
|
|
29
|
+
if (types.length === 1 && ast.checks === undefined && ast.annotations === undefined) {
|
|
30
|
+
return SchemaAST.replaceContext(types[0], ast.context)
|
|
31
|
+
}
|
|
32
|
+
return new SchemaAST.Union(types, ast.options, ast.annotations, ast.checks, undefined, ast.context)
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
const normalizeProperties = SchemaAST.applyToSelfOrLastLinkEncodingIdempotent((ast) => {
|
|
36
|
+
if (ast._tag === "Union" || ast._tag === "Suspend") return ast.recur(normalizeProperties)
|
|
37
|
+
if (ast._tag !== "Objects") return ast
|
|
38
|
+
|
|
39
|
+
const properties = SchemaAST.mapOrSame(ast.propertySignatures, (ps) => {
|
|
40
|
+
const encoded = SchemaAST.toEncoded(ps.type)
|
|
41
|
+
if (!SchemaAST.isOptional(encoded)) return ps
|
|
42
|
+
const wire = present(encoded)
|
|
43
|
+
return wire === encoded
|
|
44
|
+
? ps
|
|
45
|
+
: new SchemaAST.PropertySignature(ps.name, SchemaAST.decodeTo(wire, ps.type, omitUndefined))
|
|
46
|
+
})
|
|
47
|
+
return properties === ast.propertySignatures ? ast : new SchemaAST.Objects(
|
|
48
|
+
properties,
|
|
49
|
+
ast.indexSignatures,
|
|
50
|
+
ast.annotations,
|
|
51
|
+
ast.checks,
|
|
52
|
+
undefined,
|
|
53
|
+
ast.context,
|
|
54
|
+
ast.encodingChecks
|
|
55
|
+
)
|
|
56
|
+
})
|
|
@@ -3,7 +3,9 @@ import type {
|
|
|
3
3
|
ArrayOptions,
|
|
4
4
|
CheckOptions,
|
|
5
5
|
CheckResult,
|
|
6
|
+
Exhausted,
|
|
6
7
|
GlobalOptions,
|
|
8
|
+
Passed,
|
|
7
9
|
PropertyError,
|
|
8
10
|
PropertyFailure,
|
|
9
11
|
Replay,
|
|
@@ -13,12 +15,16 @@ import type {
|
|
|
13
15
|
SchemaOptions
|
|
14
16
|
} from "../../Arbitrary.ts"
|
|
15
17
|
import * as Effect from "../../Effect.ts"
|
|
18
|
+
import * as Fiber from "../../Fiber.ts"
|
|
16
19
|
import * as Option from "../../Option.ts"
|
|
17
20
|
import { pipeArguments } from "../../Pipeable.ts"
|
|
21
|
+
import * as Queue from "../../Queue.ts"
|
|
18
22
|
import * as Random from "../../Random.ts"
|
|
19
23
|
import type * as Result from "../../Result.ts"
|
|
20
24
|
import * as Scheduler from "../../Scheduler.ts"
|
|
21
25
|
import type * as Schema from "../../Schema.ts"
|
|
26
|
+
import * as Scope from "../../Scope.ts"
|
|
27
|
+
import * as Semaphore from "../../Semaphore.ts"
|
|
22
28
|
import { done } from "../core.ts"
|
|
23
29
|
import * as InternalRecord from "../record.ts"
|
|
24
30
|
import * as Arrays from "./array.ts"
|
|
@@ -582,6 +588,111 @@ const followReplay = Effect.fnUntraced(function*<A, E, R>(
|
|
|
582
588
|
return { _tag: "Replayed", current, failure } as const
|
|
583
589
|
})
|
|
584
590
|
|
|
591
|
+
interface SearchOptions {
|
|
592
|
+
readonly runs: number
|
|
593
|
+
readonly size: number
|
|
594
|
+
readonly maxDiscards: number
|
|
595
|
+
readonly seed: string | number
|
|
596
|
+
readonly maxOpsBeforeYield: number
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
interface SearchCase<A> {
|
|
600
|
+
readonly sample: Model.Sample<A>
|
|
601
|
+
readonly attempt: number
|
|
602
|
+
readonly size: number
|
|
603
|
+
readonly runs: number
|
|
604
|
+
readonly discards: number
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
interface Found<A, E> extends SearchCase<A> {
|
|
608
|
+
readonly _tag: "Found"
|
|
609
|
+
readonly failure: PropertyFailure<E>
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
type SearchResult<A, E> = Passed | Exhausted | Found<A, E>
|
|
613
|
+
|
|
614
|
+
// Only the search advances this cursor. Each generated case advances size, while discards retain it.
|
|
615
|
+
// This gives both search strategies the sequential seed and size schedule, independently of evaluation timing.
|
|
616
|
+
const makeSearch = <A>(self: Arbitrary<A>, options: SearchOptions) => {
|
|
617
|
+
const seed = hashSeed(options.seed)
|
|
618
|
+
let runs = 0
|
|
619
|
+
let discards = 0
|
|
620
|
+
let attemptIndex = 0
|
|
621
|
+
return Effect.gen(function*(): Effect.fn.Return<SearchCase<A> | Exhausted> {
|
|
622
|
+
const size = options.runs === 1 ? options.size : Math.round(runs * options.size / (options.runs - 1))
|
|
623
|
+
while (true) {
|
|
624
|
+
const index = attemptIndex++
|
|
625
|
+
const sample = yield* generateAttempt(self.gen, seed, index, size, true)
|
|
626
|
+
if (sample._tag === "Generated") {
|
|
627
|
+
return { sample, attempt: index, size, runs: ++runs, discards }
|
|
628
|
+
}
|
|
629
|
+
if (++discards > options.maxDiscards) return { _tag: "Exhausted", runs, discards, seed: options.seed }
|
|
630
|
+
if (options.maxOpsBeforeYield <= 1 || discards % options.maxOpsBeforeYield === 0) yield* Effect.yieldNow
|
|
631
|
+
}
|
|
632
|
+
})
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
const searchSequential = Effect.fnUntraced(function*<A, E, R>(
|
|
636
|
+
next: Effect.Effect<SearchCase<A> | Exhausted>,
|
|
637
|
+
property: (value: A) => boolean | Effect.Effect<boolean, E, R>,
|
|
638
|
+
runs: number
|
|
639
|
+
): Effect.fn.Return<SearchResult<A, E>, never, R> {
|
|
640
|
+
while (true) {
|
|
641
|
+
const current = yield* next
|
|
642
|
+
if ("_tag" in current) return current
|
|
643
|
+
const outcome = yield* evaluateProperty(property, current.sample.value)
|
|
644
|
+
if (outcome._tag !== "Passed") return { ...current, _tag: "Found", failure: outcome }
|
|
645
|
+
if (current.runs === runs) return { _tag: "Passed", runs, discards: current.discards }
|
|
646
|
+
}
|
|
647
|
+
})
|
|
648
|
+
|
|
649
|
+
const searchConcurrent = Effect.fnUntraced(function*<A, E, R>(
|
|
650
|
+
next: Effect.Effect<SearchCase<A> | Exhausted>,
|
|
651
|
+
property: (value: A) => boolean | Effect.Effect<boolean, E, R>,
|
|
652
|
+
runs: number,
|
|
653
|
+
concurrency: number
|
|
654
|
+
): Effect.fn.Return<SearchResult<A, E>, never, R> {
|
|
655
|
+
interface Pending extends SearchCase<A> {
|
|
656
|
+
readonly fiber: Fiber.Fiber<typeof passedProperty | PropertyFailure<E>>
|
|
657
|
+
}
|
|
658
|
+
const queue = yield* Queue.make<Pending | Exhausted>()
|
|
659
|
+
const window = yield* Semaphore.make(concurrency)
|
|
660
|
+
const scope = yield* Scope.make("parallel")
|
|
661
|
+
const produce = Effect.gen(function*() {
|
|
662
|
+
for (let index = 0; index < runs; index++) {
|
|
663
|
+
// Hold each permit until its result is consumed, bounding both work and buffered results.
|
|
664
|
+
yield* window.take(1)
|
|
665
|
+
const current = yield* next
|
|
666
|
+
if ("_tag" in current) {
|
|
667
|
+
yield* Queue.offer(queue, current)
|
|
668
|
+
return
|
|
669
|
+
}
|
|
670
|
+
const fiber = yield* Effect.forkIn(Effect.suspend(() => evaluateProperty(property, current.sample.value)), scope)
|
|
671
|
+
yield* Queue.offer(queue, { ...current, fiber })
|
|
672
|
+
}
|
|
673
|
+
}).pipe(
|
|
674
|
+
// Queue failure follows already queued cases, so speculative generation defects cannot overtake them.
|
|
675
|
+
Effect.catchCause((cause) => Queue.failCause(queue, cause)),
|
|
676
|
+
Effect.awaitAllChildren
|
|
677
|
+
)
|
|
678
|
+
return yield* Effect.acquireUseRelease(
|
|
679
|
+
Effect.forkIn(produce, scope),
|
|
680
|
+
() =>
|
|
681
|
+
Effect.gen(function*(): Effect.fn.Return<SearchResult<A, E>, never, R> {
|
|
682
|
+
while (true) {
|
|
683
|
+
const current = yield* Queue.take(queue)
|
|
684
|
+
if ("_tag" in current) return current
|
|
685
|
+
const outcome = yield* Fiber.join(current.fiber)
|
|
686
|
+
if (outcome._tag !== "Passed") return { ...current, _tag: "Found", failure: outcome }
|
|
687
|
+
if (current.runs === runs) return { _tag: "Passed", runs, discards: current.discards }
|
|
688
|
+
yield* window.release(1)
|
|
689
|
+
}
|
|
690
|
+
}),
|
|
691
|
+
// Generator and evaluation finalizers can depend on each other, so interrupt them independently before awaiting.
|
|
692
|
+
(_, exit) => Scope.close(scope, exit)
|
|
693
|
+
)
|
|
694
|
+
})
|
|
695
|
+
|
|
585
696
|
/** @internal */
|
|
586
697
|
export const checkEffect = Effect.fnUntraced(function*<A, E, R>(
|
|
587
698
|
self: Arbitrary<A>,
|
|
@@ -612,6 +723,7 @@ export const checkEffect = Effect.fnUntraced(function*<A, E, R>(
|
|
|
612
723
|
|
|
613
724
|
const defaults = globalOptions.check
|
|
614
725
|
const runsTarget = positive(options?.runs ?? defaults?.runs, 100, "runs")
|
|
726
|
+
const concurrency = positive(options?.concurrency ?? defaults?.concurrency, 1, "concurrency")
|
|
615
727
|
const size = natural(options?.size ?? defaults?.size, 10, "size")
|
|
616
728
|
const maxDiscards = natural(
|
|
617
729
|
options?.maxDiscards ?? defaults?.maxDiscards,
|
|
@@ -622,41 +734,26 @@ export const checkEffect = Effect.fnUntraced(function*<A, E, R>(
|
|
|
622
734
|
const seedOption = options?.seed ?? defaults?.seed
|
|
623
735
|
const maxOpsBeforeYield = yield* Scheduler.MaxOpsBeforeYield
|
|
624
736
|
const seed = yield* resolveMasterSeed(seedOption)
|
|
625
|
-
const
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
initialInput: attempt.value,
|
|
647
|
-
shrunkInput: minimized.current.value,
|
|
648
|
-
failure: minimized.failure,
|
|
649
|
-
runs: runs + 1,
|
|
650
|
-
discards,
|
|
651
|
-
shrinks: minimized.shrinks,
|
|
652
|
-
replay: makeReplay({
|
|
653
|
-
seed,
|
|
654
|
-
attempt: currentAttempt,
|
|
655
|
-
size: currentSize,
|
|
656
|
-
path: minimized.path,
|
|
657
|
-
failureTag: outcome._tag
|
|
658
|
-
})
|
|
659
|
-
}
|
|
737
|
+
const next = makeSearch(self, { runs: runsTarget, size, maxDiscards, seed, maxOpsBeforeYield })
|
|
738
|
+
const result = yield* concurrency === 1
|
|
739
|
+
? searchSequential(next, property, runsTarget)
|
|
740
|
+
: searchConcurrent(next, property, runsTarget, concurrency)
|
|
741
|
+
if (result._tag !== "Found") return result
|
|
742
|
+
const minimized = yield* shrink(result.sample, result.failure, property, maxShrinks)
|
|
743
|
+
return {
|
|
744
|
+
_tag: "Falsified",
|
|
745
|
+
initialInput: result.sample.value,
|
|
746
|
+
shrunkInput: minimized.current.value,
|
|
747
|
+
failure: minimized.failure,
|
|
748
|
+
runs: result.runs,
|
|
749
|
+
discards: result.discards,
|
|
750
|
+
shrinks: minimized.shrinks,
|
|
751
|
+
replay: makeReplay({
|
|
752
|
+
seed,
|
|
753
|
+
attempt: result.attempt,
|
|
754
|
+
size: result.size,
|
|
755
|
+
path: minimized.path,
|
|
756
|
+
failureTag: result.failure._tag
|
|
757
|
+
})
|
|
660
758
|
}
|
|
661
|
-
return { _tag: "Passed", runs, discards }
|
|
662
759
|
})
|
package/src/internal/core.ts
CHANGED
|
@@ -216,6 +216,8 @@ export abstract class ReasonBase<Tag extends string> implements Cause.Cause.Reas
|
|
|
216
216
|
if (options?.overwrite !== true && newAnnotations.has(key)) return
|
|
217
217
|
newAnnotations.set(key, value)
|
|
218
218
|
})
|
|
219
|
+
// Keep the reason when nothing was added, so interrupts still match by identity.
|
|
220
|
+
if (options?.overwrite !== true && newAnnotations.size === this.annotations.size) return this
|
|
219
221
|
const self = Object.assign(Object.create(Object.getPrototypeOf(this)), this)
|
|
220
222
|
self.annotations = newAnnotations
|
|
221
223
|
return self
|
package/src/internal/effect.ts
CHANGED
|
@@ -1005,7 +1005,10 @@ export const fail: <E>(error: E) => Effect.Effect<never, E> = exitFail
|
|
|
1005
1005
|
export const sync: <A>(thunk: LazyArg<A>) => Effect.Effect<A> = makePrimitive({
|
|
1006
1006
|
op: "Sync",
|
|
1007
1007
|
[evaluate](fiber): Primitive | Yield {
|
|
1008
|
-
|
|
1008
|
+
// call the thunk without a receiver, so V8 does not name its frame after
|
|
1009
|
+
// the args property, which the stack cleaner cuts at
|
|
1010
|
+
const thunk = this[args]
|
|
1011
|
+
const value = thunk()
|
|
1009
1012
|
const cont = fiber.getCont(contA)
|
|
1010
1013
|
return cont ? cont[contA](value, fiber) : fiber.yieldWith(exitSucceed(value))
|
|
1011
1014
|
}
|
|
@@ -1017,7 +1020,9 @@ export const suspend: <A, E, R>(
|
|
|
1017
1020
|
) => Effect.Effect<A, E, R> = makePrimitive({
|
|
1018
1021
|
op: "Suspend",
|
|
1019
1022
|
[evaluate](_fiber) {
|
|
1020
|
-
|
|
1023
|
+
// see Sync
|
|
1024
|
+
const thunk = this[args]
|
|
1025
|
+
return thunk()
|
|
1021
1026
|
}
|
|
1022
1027
|
})
|
|
1023
1028
|
|
|
@@ -1353,6 +1358,17 @@ const makeFn = (
|
|
|
1353
1358
|
: (pipeables.shift()!).bind(bodyOrOptions.self)
|
|
1354
1359
|
const definitionName = `${name} (definition)`
|
|
1355
1360
|
const definitionStack = defError ? fnStackCleaner(() => defError.stack) : constUndefined
|
|
1361
|
+
// Built outside the traced function so the frame cannot capture its `arguments`,
|
|
1362
|
+
// which forked fibers inheriting the frame would otherwise keep alive.
|
|
1363
|
+
const makeCallFrame = (callError: Error | undefined) => (prev: StackFrame | undefined): StackFrame => ({
|
|
1364
|
+
name,
|
|
1365
|
+
stack: callError ? fnStackCleaner(() => callError.stack) : constUndefined,
|
|
1366
|
+
parent: {
|
|
1367
|
+
name: definitionName,
|
|
1368
|
+
stack: definitionStack,
|
|
1369
|
+
parent: prev
|
|
1370
|
+
}
|
|
1371
|
+
})
|
|
1356
1372
|
|
|
1357
1373
|
return defineFunctionLength(body.length, function(this: any, ...args: Array<any>) {
|
|
1358
1374
|
let result = suspend(() => {
|
|
@@ -1377,15 +1393,7 @@ const makeFn = (
|
|
|
1377
1393
|
useSpan(name, spanOptions!, (span) => provideParentSpan(result, span)) :
|
|
1378
1394
|
result,
|
|
1379
1395
|
CurrentStackFrame,
|
|
1380
|
-
(
|
|
1381
|
-
name,
|
|
1382
|
-
stack: callError ? fnStackCleaner(() => callError.stack) : constUndefined,
|
|
1383
|
-
parent: {
|
|
1384
|
-
name: definitionName,
|
|
1385
|
-
stack: definitionStack,
|
|
1386
|
-
parent: prev
|
|
1387
|
-
}
|
|
1388
|
-
})
|
|
1396
|
+
makeCallFrame(callError)
|
|
1389
1397
|
)
|
|
1390
1398
|
})
|
|
1391
1399
|
}
|
|
@@ -2057,17 +2065,17 @@ export const exitFindDefect = Filter.composePassthrough(
|
|
|
2057
2065
|
/** @internal */
|
|
2058
2066
|
export const exitHasInterrupts = <A, E>(
|
|
2059
2067
|
self: Exit.Exit<A, E>
|
|
2060
|
-
):
|
|
2068
|
+
): boolean => self._tag === "Failure" && hasInterrupts(self.cause)
|
|
2061
2069
|
|
|
2062
2070
|
/** @internal */
|
|
2063
2071
|
export const exitHasDies = <A, E>(
|
|
2064
2072
|
self: Exit.Exit<A, E>
|
|
2065
|
-
):
|
|
2073
|
+
): boolean => self._tag === "Failure" && hasDies(self.cause)
|
|
2066
2074
|
|
|
2067
2075
|
/** @internal */
|
|
2068
2076
|
export const exitHasFails = <A, E>(
|
|
2069
2077
|
self: Exit.Exit<A, E>
|
|
2070
|
-
):
|
|
2078
|
+
): boolean => self._tag === "Failure" && hasFails(self.cause)
|
|
2071
2079
|
|
|
2072
2080
|
/** @internal */
|
|
2073
2081
|
export const exitVoid: Exit.Exit<void> = exitSucceed(void 0)
|
|
@@ -6307,7 +6315,7 @@ export const annotateCurrentSpan: {
|
|
|
6307
6315
|
} = (...args: [Record<string, unknown>] | [key: string, value: unknown]) =>
|
|
6308
6316
|
withFiber((fiber) => {
|
|
6309
6317
|
const span = fiber.currentSpanLocal
|
|
6310
|
-
if (span) {
|
|
6318
|
+
if (span && span.status._tag !== "Ended") {
|
|
6311
6319
|
if (args.length === 1) {
|
|
6312
6320
|
for (const [key, value] of Object.entries(args[0])) {
|
|
6313
6321
|
span.attribute(key, value)
|
|
@@ -6950,7 +6958,7 @@ export const tracerLogger = loggerMake<unknown, void>(({ cause, fiber, logLevel,
|
|
|
6950
6958
|
const clock = fiber.getRef(ClockRef)
|
|
6951
6959
|
const annotations = fiber.getRef(CurrentLogAnnotations)
|
|
6952
6960
|
const span = fiber.cache.span
|
|
6953
|
-
if (span === undefined || span._tag === "ExternalSpan") return
|
|
6961
|
+
if (span === undefined || span._tag === "ExternalSpan" || span.status._tag === "Ended") return
|
|
6954
6962
|
const attributes: Record<string, unknown> = {}
|
|
6955
6963
|
for (const [key, value] of Object.entries(annotations)) {
|
|
6956
6964
|
InternalRecord.assignProperty(attributes, key, value)
|
package/src/internal/equal.ts
CHANGED
|
@@ -29,3 +29,20 @@ export const byReferenceInstances = new WeakSet<object>()
|
|
|
29
29
|
|
|
30
30
|
/** @internal */
|
|
31
31
|
export const viewBytes = (view: DataView): Uint8Array => new Uint8Array(view.buffer, view.byteOffset, view.byteLength)
|
|
32
|
+
|
|
33
|
+
/** @internal */
|
|
34
|
+
export const isArrayBufferLike = (u: unknown): u is ArrayBufferLike =>
|
|
35
|
+
u instanceof ArrayBuffer || (typeof SharedArrayBuffer !== "undefined" && u instanceof SharedArrayBuffer)
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Returns `undefined` for detached buffers, which can no longer be read.
|
|
39
|
+
*
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
export const bufferBytes = (buffer: ArrayBufferLike): Uint8Array | undefined => {
|
|
43
|
+
try {
|
|
44
|
+
return new Uint8Array(buffer)
|
|
45
|
+
} catch {
|
|
46
|
+
return undefined
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** @internal */
|
|
2
|
+
export function getSubschemaKind(keyword: string): "schema" | "map" | "array" | undefined {
|
|
3
|
+
switch (keyword) {
|
|
4
|
+
case "$defs":
|
|
5
|
+
case "properties":
|
|
6
|
+
case "patternProperties":
|
|
7
|
+
case "dependentSchemas":
|
|
8
|
+
return "map"
|
|
9
|
+
case "allOf":
|
|
10
|
+
case "anyOf":
|
|
11
|
+
case "oneOf":
|
|
12
|
+
case "prefixItems":
|
|
13
|
+
return "array"
|
|
14
|
+
case "not":
|
|
15
|
+
case "additionalProperties":
|
|
16
|
+
case "propertyNames":
|
|
17
|
+
case "unevaluatedProperties":
|
|
18
|
+
case "items":
|
|
19
|
+
case "contains":
|
|
20
|
+
case "unevaluatedItems":
|
|
21
|
+
case "if":
|
|
22
|
+
case "then":
|
|
23
|
+
case "else":
|
|
24
|
+
case "contentSchema":
|
|
25
|
+
return "schema"
|
|
26
|
+
}
|
|
27
|
+
}
|
package/src/internal/matcher.ts
CHANGED
|
@@ -58,6 +58,7 @@ export interface Entry {
|
|
|
58
58
|
readonly is?: Is | undefined
|
|
59
59
|
readonly decode?: Decode | undefined
|
|
60
60
|
readonly make?: Make | undefined
|
|
61
|
+
readonly compiledMakeEffect?: Parser | undefined
|
|
61
62
|
readonly decodeEffect: Parser
|
|
62
63
|
readonly parser: Parser
|
|
63
64
|
readonly makeEffect: Parser
|
|
@@ -117,6 +118,10 @@ class CompilerEntry extends InterpretedEntry {
|
|
|
117
118
|
return this.save("make", this.operation("make"))
|
|
118
119
|
}
|
|
119
120
|
|
|
121
|
+
get compiledMakeEffect(): Parser | undefined {
|
|
122
|
+
return this.save("compiledMakeEffect", this.operation("makeEffect"))
|
|
123
|
+
}
|
|
124
|
+
|
|
120
125
|
override get decodeEffect(): Parser {
|
|
121
126
|
return this.save(
|
|
122
127
|
"decodeEffect",
|
|
@@ -132,7 +137,7 @@ class CompilerEntry extends InterpretedEntry {
|
|
|
132
137
|
}
|
|
133
138
|
|
|
134
139
|
override get makeEffect(): Parser {
|
|
135
|
-
const makeEffect = this.
|
|
140
|
+
const makeEffect = this.compiledMakeEffect
|
|
136
141
|
if (makeEffect !== undefined) return this.save("makeEffect", makeEffect)
|
|
137
142
|
const child = (ast: SchemaAST.AST): Parser => lazyParser(this.resolve, ast, "makeEffect")
|
|
138
143
|
return this.save(
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const ContentTypeId = Symbol.for("~effect/Schema/content")
|
|
2
|
+
|
|
3
|
+
/** @internal */
|
|
4
|
+
export interface Content {
|
|
5
|
+
readonly mediaType: string
|
|
6
|
+
readonly preserveSchema: boolean
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/** @internal */
|
|
10
|
+
export function setContent<A extends object>(operation: A, content: Content): A {
|
|
11
|
+
Object.defineProperty(operation, ContentTypeId, { value: content })
|
|
12
|
+
return operation
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** @internal */
|
|
16
|
+
export function getContent(operation: object): Content | undefined {
|
|
17
|
+
return (operation as { readonly [ContentTypeId]?: Content })[ContentTypeId]
|
|
18
|
+
}
|