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
|
@@ -1,20 +1,27 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { escapeToken, parseUriFragment } from "../../JsonPointer.ts"
|
|
2
2
|
import * as JsonSchema from "../../JsonSchema.ts"
|
|
3
|
-
import
|
|
4
|
-
import type * as Schema from "../../Schema.ts"
|
|
3
|
+
import * as Schema from "../../Schema.ts"
|
|
5
4
|
import * as InternalAST from "../../SchemaAST.ts"
|
|
6
5
|
import type * as SchemaRepresentation from "../../SchemaRepresentation.ts"
|
|
7
6
|
import { errorWithPath } from "../errors.ts"
|
|
7
|
+
import * as InternalJsonSchema from "../jsonSchema.ts"
|
|
8
8
|
import * as InternalRecord from "../record.ts"
|
|
9
9
|
import * as InternalAnnotations from "./annotations.ts"
|
|
10
|
-
import {
|
|
10
|
+
import { ReferenceSlot } from "./fromRepresentation.ts"
|
|
11
11
|
|
|
12
12
|
type Path = ReadonlyArray<string | number>
|
|
13
|
-
type
|
|
14
|
-
type Check = Filter | FilterGroup
|
|
13
|
+
type Check = Filter | FilterGroup | PropertyNames
|
|
15
14
|
|
|
16
|
-
interface Filter
|
|
17
|
-
readonly
|
|
15
|
+
interface Filter {
|
|
16
|
+
readonly _tag: "Filter"
|
|
17
|
+
readonly filter: InternalAST.Filter<any>
|
|
18
|
+
readonly annotations?: Schema.Annotations.Filter | undefined
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface PropertyNames {
|
|
22
|
+
readonly _tag: "PropertyNames"
|
|
23
|
+
readonly type: ImportedJsonSchemaRepresentation
|
|
24
|
+
readonly annotations?: Schema.Annotations.Filter | undefined
|
|
18
25
|
}
|
|
19
26
|
|
|
20
27
|
interface FilterGroup {
|
|
@@ -54,7 +61,6 @@ interface ImportedArrays extends ImportedKeyword<"Arrays"> {
|
|
|
54
61
|
|
|
55
62
|
interface ImportedProperty extends ImportedElement {
|
|
56
63
|
readonly name: string
|
|
57
|
-
readonly isMutable: false
|
|
58
64
|
}
|
|
59
65
|
|
|
60
66
|
interface ImportedIndexSignature {
|
|
@@ -79,7 +85,7 @@ interface ImportedUnion extends ImportedKeyword<"Union"> {
|
|
|
79
85
|
}
|
|
80
86
|
|
|
81
87
|
// Import nodes keep source metadata and scopes until normalization is complete.
|
|
82
|
-
// Only finalize
|
|
88
|
+
// Only finalize constructs runtime schemas after normalization.
|
|
83
89
|
type ImportedJsonSchemaRepresentation =
|
|
84
90
|
| ImportedKeyword<"Never">
|
|
85
91
|
| ImportedKeyword<"Unknown">
|
|
@@ -114,6 +120,13 @@ interface ImportedObjectScope {
|
|
|
114
120
|
const never: ImportedJsonSchemaRepresentation = { _tag: "Never", checks: [] }
|
|
115
121
|
const unknown: ImportedJsonSchemaRepresentation = { _tag: "Unknown", checks: [] }
|
|
116
122
|
const string: ImportedJsonSchemaRepresentation = { _tag: "String", checks: [] }
|
|
123
|
+
const primitiveSchemas = {
|
|
124
|
+
Never: Schema.Never,
|
|
125
|
+
Null: Schema.Null,
|
|
126
|
+
String: Schema.String,
|
|
127
|
+
Number: Schema.Number,
|
|
128
|
+
Boolean: Schema.Boolean
|
|
129
|
+
}
|
|
117
130
|
const unsupportedStructuredValue = "Only primitive values are supported in \"const\" and \"enum\"."
|
|
118
131
|
const jsonSchemaPatternFlags = "u"
|
|
119
132
|
|
|
@@ -202,30 +215,17 @@ function hasTypeSpecificKeywords(schema: JsonSchema.JsonSchema): boolean {
|
|
|
202
215
|
return jsonSchemaTypeSpecificKeys.some((key) => schema[key] !== undefined)
|
|
203
216
|
}
|
|
204
217
|
|
|
205
|
-
function
|
|
206
|
-
|
|
207
|
-
payload: Schema.Json,
|
|
208
|
-
schemas?: ReadonlyArray<ImportedJsonSchemaRepresentation>
|
|
209
|
-
): Check {
|
|
210
|
-
return {
|
|
211
|
-
_tag: "Filter",
|
|
212
|
-
aborted: false,
|
|
213
|
-
representation: {
|
|
214
|
-
id,
|
|
215
|
-
payload,
|
|
216
|
-
...(schemas === undefined ? undefined : { schemas })
|
|
217
|
-
}
|
|
218
|
-
}
|
|
218
|
+
function makeFilter(filter: InternalAST.Filter<any>): Filter {
|
|
219
|
+
return { _tag: "Filter", filter }
|
|
219
220
|
}
|
|
220
221
|
|
|
221
222
|
function addNumberCheck(
|
|
222
223
|
checks: Array<Check>,
|
|
223
224
|
value: unknown,
|
|
224
|
-
|
|
225
|
-
key: string
|
|
225
|
+
make: (value: number) => InternalAST.Filter<any>
|
|
226
226
|
): void {
|
|
227
227
|
if (typeof value === "number") {
|
|
228
|
-
checks.push(
|
|
228
|
+
checks.push(makeFilter(make(value)))
|
|
229
229
|
}
|
|
230
230
|
}
|
|
231
231
|
|
|
@@ -259,108 +259,103 @@ function jsonSchemaAnnotations(
|
|
|
259
259
|
return { annotations: Object.keys(annotations).length === 0 ? undefined : annotations, customAnnotations }
|
|
260
260
|
}
|
|
261
261
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
): Representation {
|
|
265
|
-
return {
|
|
266
|
-
_tag: "Declaration",
|
|
267
|
-
representation: {
|
|
268
|
-
id: "effect/schema/Json",
|
|
269
|
-
payload: null
|
|
270
|
-
},
|
|
271
|
-
annotations: {
|
|
272
|
-
...annotations,
|
|
273
|
-
expected: "JSON value"
|
|
274
|
-
},
|
|
275
|
-
checks: [],
|
|
276
|
-
typeParameters: []
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
function translateJsonSchemaMultiDocument(
|
|
262
|
+
/** @internal */
|
|
263
|
+
export function fromJsonSchemaMultiDocument(
|
|
281
264
|
document: JsonSchema.MultiDocument<"draft-2020-12">,
|
|
282
265
|
options?: SchemaRepresentation.FromJsonSchemaOptions,
|
|
283
266
|
singleRoot = false
|
|
284
|
-
):
|
|
267
|
+
): readonly [Schema.Top, ...Array<Schema.Top>] {
|
|
285
268
|
const definitionCache = new Map<string, ImportedJsonSchemaRepresentation | null>()
|
|
269
|
+
const validatedAliases = new Set<string>()
|
|
286
270
|
const resolvingChoices = new Set<string>()
|
|
287
|
-
const
|
|
271
|
+
const references = new Map<string, ReferenceSlot>()
|
|
288
272
|
let inNestedResource = false
|
|
289
273
|
|
|
290
|
-
function finalize(input: ImportedJsonSchemaRepresentation):
|
|
274
|
+
function finalize(input: ImportedJsonSchemaRepresentation): Schema.Top {
|
|
291
275
|
const annotations = mergeAnnotations(input.annotations, input.customAnnotations)
|
|
292
276
|
if (input._tag === "Reference") {
|
|
293
|
-
if (
|
|
294
|
-
|
|
295
|
-
if (
|
|
296
|
-
|
|
297
|
-
|
|
277
|
+
if (annotations !== undefined) resolveReference(input, input.path)
|
|
278
|
+
let slot = references.get(input.$ref)
|
|
279
|
+
if (slot === undefined) {
|
|
280
|
+
slot = new ReferenceSlot(input.$ref)
|
|
281
|
+
references.set(input.$ref, slot)
|
|
282
|
+
slot.body = finalize(translateDefinition(input.$ref, input.path)).annotate({ identifier: input.$ref })
|
|
283
|
+
}
|
|
284
|
+
return annotations === undefined ? slot.body ?? slot.wrapper : slot.wrapper.annotate(annotations)
|
|
298
285
|
}
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
switch (
|
|
286
|
+
|
|
287
|
+
let schema: Schema.Top
|
|
288
|
+
switch (input._tag) {
|
|
302
289
|
case "Unknown":
|
|
303
|
-
return
|
|
304
|
-
case "
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
290
|
+
return Schema.Json.annotate({ ...annotations, expected: "JSON value" })
|
|
291
|
+
case "Never":
|
|
292
|
+
case "Null":
|
|
293
|
+
case "String":
|
|
294
|
+
case "Number":
|
|
295
|
+
case "Boolean":
|
|
296
|
+
schema = primitiveSchemas[input._tag]
|
|
297
|
+
break
|
|
298
|
+
case "Literal":
|
|
299
|
+
schema = Schema.Literal(input.literal)
|
|
300
|
+
break
|
|
301
|
+
case "Arrays": {
|
|
302
|
+
const elements = input.elements.map((element) => {
|
|
303
|
+
const type = finalize(element.type)
|
|
304
|
+
return element.isOptional ? Schema.optionalKey(type) : type
|
|
305
|
+
})
|
|
306
|
+
const rest = input.rest[0] === undefined ? undefined : finalize(input.rest[0])
|
|
307
|
+
schema = rest !== undefined
|
|
308
|
+
? elements.length === 0
|
|
309
|
+
? Schema.Array(rest)
|
|
310
|
+
: Schema.TupleWithRest(Schema.Tuple(elements), [rest])
|
|
311
|
+
: Schema.Tuple(elements)
|
|
312
|
+
break
|
|
313
|
+
}
|
|
313
314
|
case "Objects": {
|
|
314
|
-
// Intersections may
|
|
315
|
-
// if an open pattern remains in the final representation.
|
|
316
|
-
const { scopes, path, ...object } = representation
|
|
315
|
+
// Intersections may remove open patterns, so check the normalized object.
|
|
317
316
|
if (
|
|
318
|
-
|
|
319
|
-
scopes.some((scope) => scope.patterns.length > 0)
|
|
317
|
+
input.indexSignatures[0]?.parameter === string &&
|
|
318
|
+
input.scopes.some((scope) => scope.patterns.length > 0)
|
|
320
319
|
) {
|
|
321
320
|
throw errorWithPath(
|
|
322
321
|
"Cannot import open \"patternProperties\": unmatched keys cannot be typed correctly.",
|
|
323
|
-
path
|
|
322
|
+
input.path
|
|
324
323
|
)
|
|
325
324
|
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
type: finalize(property.type)
|
|
331
|
-
})),
|
|
332
|
-
indexSignatures: representation.indexSignatures.map((indexSignature) => ({
|
|
333
|
-
parameter: finalize(indexSignature.parameter),
|
|
334
|
-
type: finalize(indexSignature.type)
|
|
335
|
-
}))
|
|
325
|
+
const fields: Record<string, Schema.Top> = {}
|
|
326
|
+
for (const property of input.propertySignatures) {
|
|
327
|
+
const type = finalize(property.type)
|
|
328
|
+
InternalRecord.assignProperty(fields, property.name, property.isOptional ? Schema.optionalKey(type) : type)
|
|
336
329
|
}
|
|
330
|
+
const index = input.indexSignatures[0]
|
|
331
|
+
const record = index === undefined
|
|
332
|
+
? undefined
|
|
333
|
+
: Schema.Record(finalize(index.parameter) as Schema.Record.Key, finalize(index.type))
|
|
334
|
+
schema = record !== undefined
|
|
335
|
+
? input.propertySignatures.length === 0
|
|
336
|
+
? record
|
|
337
|
+
: Schema.StructWithRest(Schema.Struct(fields), [record])
|
|
338
|
+
: Schema.Struct(fields)
|
|
339
|
+
break
|
|
337
340
|
}
|
|
338
341
|
case "Union":
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
return representation
|
|
342
|
+
schema = Schema.Union(input.types.map(finalize), input.options)
|
|
343
|
+
break
|
|
342
344
|
}
|
|
345
|
+
if (annotations !== undefined) schema = schema.annotate(annotations)
|
|
346
|
+
const checks = input.checks.map(finalizeCheck)
|
|
347
|
+
return checks.length > 0 ? schema.check(...checks as [InternalAST.Check<any>]) : schema
|
|
343
348
|
}
|
|
344
349
|
|
|
345
|
-
function finalizeCheck(check: Check):
|
|
350
|
+
function finalizeCheck(check: Check): InternalAST.Check<any> {
|
|
346
351
|
if (check._tag === "FilterGroup") {
|
|
347
|
-
return
|
|
348
|
-
...
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
}
|
|
352
|
-
const representation = check.representation
|
|
353
|
-
const schemas = representation.schemas
|
|
354
|
-
if (schemas === undefined) {
|
|
355
|
-
return check
|
|
356
|
-
}
|
|
357
|
-
return {
|
|
358
|
-
...check,
|
|
359
|
-
representation: {
|
|
360
|
-
...representation,
|
|
361
|
-
schemas: schemas.map(finalize)
|
|
362
|
-
}
|
|
352
|
+
return Schema.makeFilterGroup(
|
|
353
|
+
check.checks.map(finalizeCheck) as [InternalAST.Check<any>, ...Array<InternalAST.Check<any>>],
|
|
354
|
+
check.annotations
|
|
355
|
+
)
|
|
363
356
|
}
|
|
357
|
+
const filter = check._tag === "PropertyNames" ? Schema.isPropertyNames(finalize(check.type)) : check.filter
|
|
358
|
+
return check.annotations === undefined ? filter : filter.annotate(check.annotations)
|
|
364
359
|
}
|
|
365
360
|
|
|
366
361
|
function annotate(
|
|
@@ -392,11 +387,50 @@ function translateJsonSchemaMultiDocument(
|
|
|
392
387
|
return cached
|
|
393
388
|
}
|
|
394
389
|
definitionCache.set(key, null)
|
|
395
|
-
const
|
|
390
|
+
const pointer = pointers.get(key)
|
|
391
|
+
const wasInNestedResource = inNestedResource
|
|
392
|
+
if (pointer !== undefined) inNestedResource = pointer.crossesResource
|
|
393
|
+
const representation = pointer === undefined
|
|
394
|
+
? translateSchema(document.definitions[key], ["definitions", key])
|
|
395
|
+
: translateSchema(pointer.target, ["definitions", ...pointer.tokens])
|
|
396
|
+
inNestedResource = wasInNestedResource
|
|
396
397
|
definitionCache.set(key, representation)
|
|
398
|
+
if (pointer !== undefined) {
|
|
399
|
+
validatePointerAliases(representation, path, recursiveReferenceError)
|
|
400
|
+
}
|
|
397
401
|
return representation
|
|
398
402
|
}
|
|
399
403
|
|
|
404
|
+
function validatePointerAliases(
|
|
405
|
+
representation: ImportedJsonSchemaRepresentation,
|
|
406
|
+
path: Path,
|
|
407
|
+
recursiveReferenceError?: string,
|
|
408
|
+
visiting: Set<string> = new Set()
|
|
409
|
+
): void {
|
|
410
|
+
if (representation._tag === "Reference") {
|
|
411
|
+
const key = representation.$ref
|
|
412
|
+
if (validatedAliases.has(key)) return
|
|
413
|
+
if (visiting.has(key)) {
|
|
414
|
+
throw errorWithPath(`Definition ${JSON.stringify(key)} is a circular alias.`, [...path, "$ref"])
|
|
415
|
+
}
|
|
416
|
+
visiting.add(key)
|
|
417
|
+
validatePointerAliases(
|
|
418
|
+
translateDefinition(key, path, recursiveReferenceError),
|
|
419
|
+
path,
|
|
420
|
+
recursiveReferenceError,
|
|
421
|
+
visiting
|
|
422
|
+
)
|
|
423
|
+
visiting.delete(key)
|
|
424
|
+
validatedAliases.add(key)
|
|
425
|
+
} else if (representation._tag === "Union") {
|
|
426
|
+
// Alternatives share completed checks, but only ancestors belong to the active path.
|
|
427
|
+
for (const type of representation.types) {
|
|
428
|
+
validatePointerAliases(type, path, recursiveReferenceError, visiting)
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
// Recursion through object properties or array items consumes a child value.
|
|
432
|
+
}
|
|
433
|
+
|
|
400
434
|
function resolveReference(
|
|
401
435
|
reference: ImportedReference,
|
|
402
436
|
path: Path,
|
|
@@ -420,6 +454,59 @@ function translateJsonSchemaMultiDocument(
|
|
|
420
454
|
return representation
|
|
421
455
|
}
|
|
422
456
|
|
|
457
|
+
// Pointers below a definition are registered as definitions keyed by their escaped tokens, e.g. "O/properties/v"
|
|
458
|
+
const pointers = new Map<
|
|
459
|
+
string,
|
|
460
|
+
{ readonly target: unknown; readonly tokens: ReadonlyArray<string>; readonly crossesResource: boolean }
|
|
461
|
+
>()
|
|
462
|
+
|
|
463
|
+
function resolvePointer($ref: string, path: Path): string {
|
|
464
|
+
const pointer = $ref.startsWith("#") ? parseUriFragment($ref) : undefined
|
|
465
|
+
if (pointer === undefined || pointer.length < 3 || pointer[0] !== "$defs") {
|
|
466
|
+
throw errorWithPath(`Unsupported $ref ${JSON.stringify($ref)}. Use "#/$defs/Name".`, [...path, "$ref"])
|
|
467
|
+
}
|
|
468
|
+
const tokens = pointer.slice(1)
|
|
469
|
+
const key = tokens.map(escapeToken).join("/")
|
|
470
|
+
if (Object.hasOwn(document.definitions, key)) {
|
|
471
|
+
throw errorWithPath(
|
|
472
|
+
`Pointer $ref ${JSON.stringify($ref)} conflicts with definition ${JSON.stringify(key)}.`,
|
|
473
|
+
[...path, "$ref"]
|
|
474
|
+
)
|
|
475
|
+
}
|
|
476
|
+
if (pointers.has(key)) return key
|
|
477
|
+
// Walk through the onEnter result of each ancestor schema, as translateSchema would see it
|
|
478
|
+
let node: unknown = document.definitions
|
|
479
|
+
let position: "schema" | "container" | "value" = "container"
|
|
480
|
+
let crossesResource = false
|
|
481
|
+
for (const token of tokens) {
|
|
482
|
+
if (position === "container") {
|
|
483
|
+
position = "schema"
|
|
484
|
+
} else if (position === "schema" && isObject(node)) {
|
|
485
|
+
if (options?.onEnter !== undefined) node = options.onEnter(node as JsonSchema.JsonSchema)
|
|
486
|
+
crossesResource ||= isObject(node) && typeof node.$id === "string"
|
|
487
|
+
const kind = InternalJsonSchema.getSubschemaKind(token)
|
|
488
|
+
position = kind === "schema"
|
|
489
|
+
? "schema"
|
|
490
|
+
: kind === undefined
|
|
491
|
+
? "value"
|
|
492
|
+
: "container"
|
|
493
|
+
} else {
|
|
494
|
+
position = "value"
|
|
495
|
+
}
|
|
496
|
+
node = typeof node === "object" && node !== null && Object.hasOwn(node, token)
|
|
497
|
+
? (node as Record<string, unknown>)[token]
|
|
498
|
+
: undefined
|
|
499
|
+
}
|
|
500
|
+
if (!isObject(node) && typeof node !== "boolean") {
|
|
501
|
+
throw errorWithPath(
|
|
502
|
+
`Unresolvable $ref ${JSON.stringify($ref)}. Nothing exists at that location.`,
|
|
503
|
+
[...path, "$ref"]
|
|
504
|
+
)
|
|
505
|
+
}
|
|
506
|
+
pointers.set(key, { target: node, tokens, crossesResource })
|
|
507
|
+
return key
|
|
508
|
+
}
|
|
509
|
+
|
|
423
510
|
function mergeAnnotations(
|
|
424
511
|
left: Schema.Annotations.Annotations | undefined,
|
|
425
512
|
right: Schema.Annotations.Annotations | undefined
|
|
@@ -444,8 +531,10 @@ function translateJsonSchemaMultiDocument(
|
|
|
444
531
|
): Checked {
|
|
445
532
|
let checks = right.checks
|
|
446
533
|
for (const id of deduplicate) {
|
|
447
|
-
if (left.checks.some((check) => check._tag === "Filter" && check.representation?.id === id)) {
|
|
448
|
-
checks = checks.filter((check) =>
|
|
534
|
+
if (left.checks.some((check) => check._tag === "Filter" && check.filter.annotations?.representation?.id === id)) {
|
|
535
|
+
checks = checks.filter((check) =>
|
|
536
|
+
check._tag !== "Filter" || check.filter.annotations?.representation?.id !== id
|
|
537
|
+
)
|
|
449
538
|
}
|
|
450
539
|
}
|
|
451
540
|
const annotations = checks.length === 0 ? mergeAnnotations(left.annotations, right.annotations) : left.annotations
|
|
@@ -465,36 +554,11 @@ function translateJsonSchemaMultiDocument(
|
|
|
465
554
|
}
|
|
466
555
|
}
|
|
467
556
|
|
|
468
|
-
function satisfiesPrimitiveCheck(check: Check, value: string | number): boolean
|
|
557
|
+
function satisfiesPrimitiveCheck(check: Check, value: string | number): boolean {
|
|
469
558
|
if (check._tag === "FilterGroup") {
|
|
470
559
|
return check.checks.every((check) => satisfiesPrimitiveCheck(check, value))
|
|
471
560
|
}
|
|
472
|
-
|
|
473
|
-
const payload = representation.payload as Record<string, any>
|
|
474
|
-
switch (representation.id) {
|
|
475
|
-
case "effect/schema/isMinLength":
|
|
476
|
-
return (value as string).length >= payload.minLength
|
|
477
|
-
case "effect/schema/isMinCodePoints":
|
|
478
|
-
return Iterable.size(value as string) >= payload.minCodePoints
|
|
479
|
-
case "effect/schema/isMaxCodePoints":
|
|
480
|
-
return Iterable.size(value as string) <= payload.maxCodePoints
|
|
481
|
-
case "effect/schema/isPattern":
|
|
482
|
-
return new RegExp(payload.source as string, payload.flags as string).test(value as string)
|
|
483
|
-
case "effect/schema/isFinite":
|
|
484
|
-
return globalThis.Number.isFinite(value as number)
|
|
485
|
-
case "effect/schema/isInt":
|
|
486
|
-
return globalThis.Number.isSafeInteger(value as number)
|
|
487
|
-
case "effect/schema/isMultipleOf":
|
|
488
|
-
return remainder(value as number, payload.divisor) === 0
|
|
489
|
-
case "effect/schema/isGreaterThan":
|
|
490
|
-
return (value as number) > payload.exclusiveMinimum
|
|
491
|
-
case "effect/schema/isGreaterThanOrEqualTo":
|
|
492
|
-
return (value as number) >= payload.minimum
|
|
493
|
-
case "effect/schema/isLessThan":
|
|
494
|
-
return (value as number) < payload.exclusiveMaximum
|
|
495
|
-
case "effect/schema/isLessThanOrEqualTo":
|
|
496
|
-
return (value as number) <= payload.maximum
|
|
497
|
-
}
|
|
561
|
+
return check._tag === "Filter" && check.filter.run(value, Schema.Unknown.ast, {}) === undefined
|
|
498
562
|
}
|
|
499
563
|
|
|
500
564
|
function satisfiesLiteral(
|
|
@@ -620,7 +684,7 @@ function translateJsonSchemaMultiDocument(
|
|
|
620
684
|
}
|
|
621
685
|
const type = intersectAll(types, [...path, "properties", name])
|
|
622
686
|
if (!isOptional && type._tag === "Never") return never
|
|
623
|
-
properties.push({ name, type, isOptional
|
|
687
|
+
properties.push({ name, type, isOptional })
|
|
624
688
|
}
|
|
625
689
|
|
|
626
690
|
const indexSignatures: ReadonlyArray<ImportedIndexSignature> = closedPattern !== undefined
|
|
@@ -712,7 +776,7 @@ function translateJsonSchemaMultiDocument(
|
|
|
712
776
|
function checkHasChoices(check: Check): boolean {
|
|
713
777
|
return check._tag === "FilterGroup"
|
|
714
778
|
? check.checks.some(checkHasChoices)
|
|
715
|
-
: check.
|
|
779
|
+
: check._tag === "PropertyNames" && hasChoices(check.type)
|
|
716
780
|
}
|
|
717
781
|
|
|
718
782
|
function makeUnion(
|
|
@@ -1003,19 +1067,14 @@ function translateJsonSchemaMultiDocument(
|
|
|
1003
1067
|
[...path, "$ref"]
|
|
1004
1068
|
)
|
|
1005
1069
|
}
|
|
1006
|
-
const
|
|
1007
|
-
if (
|
|
1008
|
-
throw errorWithPath(
|
|
1009
|
-
`Unsupported $ref ${JSON.stringify(schema.$ref)}. Use "#/$defs/Name".`,
|
|
1010
|
-
[...path, "$ref"]
|
|
1011
|
-
)
|
|
1012
|
-
}
|
|
1013
|
-
if (!Object.hasOwn(document.definitions, $ref)) {
|
|
1070
|
+
const key = JsonSchema.getReferenceKey(schema.$ref)
|
|
1071
|
+
if (key !== undefined && !Object.hasOwn(document.definitions, key)) {
|
|
1014
1072
|
throw errorWithPath(
|
|
1015
|
-
`Missing definition ${JSON.stringify(
|
|
1073
|
+
`Missing definition ${JSON.stringify(key)} for $ref ${JSON.stringify(schema.$ref)}.`,
|
|
1016
1074
|
[...path, "$ref"]
|
|
1017
1075
|
)
|
|
1018
1076
|
}
|
|
1077
|
+
const $ref = key ?? resolvePointer(schema.$ref, path)
|
|
1019
1078
|
const reference: ImportedReference = { _tag: "Reference", $ref, path }
|
|
1020
1079
|
representation = representation._tag === "Unknown"
|
|
1021
1080
|
? reference
|
|
@@ -1090,7 +1149,7 @@ function translateJsonSchemaMultiDocument(
|
|
|
1090
1149
|
return {
|
|
1091
1150
|
_tag: "Number",
|
|
1092
1151
|
checks: [
|
|
1093
|
-
|
|
1152
|
+
makeFilter(type === "number" ? Schema.isFinite() : Schema.isInt()),
|
|
1094
1153
|
...collectNumberChecks(schema)
|
|
1095
1154
|
]
|
|
1096
1155
|
}
|
|
@@ -1146,7 +1205,7 @@ function translateJsonSchemaMultiDocument(
|
|
|
1146
1205
|
} catch {
|
|
1147
1206
|
throw errorWithPath("Cannot import pattern using ECMAScript Unicode mode.", path)
|
|
1148
1207
|
}
|
|
1149
|
-
return
|
|
1208
|
+
return makeFilter(Schema.isPattern(regex))
|
|
1150
1209
|
}
|
|
1151
1210
|
}
|
|
1152
1211
|
}
|
|
@@ -1154,11 +1213,11 @@ function translateJsonSchemaMultiDocument(
|
|
|
1154
1213
|
function collectStringChecks(schema: JsonSchema.JsonSchema, path: Path): Array<Check> {
|
|
1155
1214
|
const checks: Array<Check> = []
|
|
1156
1215
|
if (schema.minLength === 1) {
|
|
1157
|
-
addNumberCheck(checks, schema.minLength,
|
|
1216
|
+
addNumberCheck(checks, schema.minLength, Schema.isMinLength)
|
|
1158
1217
|
} else {
|
|
1159
|
-
addNumberCheck(checks, schema.minLength,
|
|
1218
|
+
addNumberCheck(checks, schema.minLength, Schema.isMinCodePoints)
|
|
1160
1219
|
}
|
|
1161
|
-
addNumberCheck(checks, schema.maxLength,
|
|
1220
|
+
addNumberCheck(checks, schema.maxLength, Schema.isMaxCodePoints)
|
|
1162
1221
|
if (typeof schema.pattern === "string") {
|
|
1163
1222
|
const check = importPatternCheck(schema.pattern, [...path, "pattern"])
|
|
1164
1223
|
if (check !== undefined) checks.push(check)
|
|
@@ -1168,11 +1227,11 @@ function translateJsonSchemaMultiDocument(
|
|
|
1168
1227
|
|
|
1169
1228
|
function collectNumberChecks(schema: JsonSchema.JsonSchema): Array<Check> {
|
|
1170
1229
|
const checks: Array<Check> = []
|
|
1171
|
-
addNumberCheck(checks, schema.minimum,
|
|
1172
|
-
addNumberCheck(checks, schema.maximum,
|
|
1173
|
-
addNumberCheck(checks, schema.exclusiveMinimum,
|
|
1174
|
-
addNumberCheck(checks, schema.exclusiveMaximum,
|
|
1175
|
-
addNumberCheck(checks, schema.multipleOf,
|
|
1230
|
+
addNumberCheck(checks, schema.minimum, Schema.isGreaterThanOrEqualTo)
|
|
1231
|
+
addNumberCheck(checks, schema.maximum, Schema.isLessThanOrEqualTo)
|
|
1232
|
+
addNumberCheck(checks, schema.exclusiveMinimum, Schema.isGreaterThan)
|
|
1233
|
+
addNumberCheck(checks, schema.exclusiveMaximum, Schema.isLessThan)
|
|
1234
|
+
addNumberCheck(checks, schema.multipleOf, Schema.isMultipleOf)
|
|
1176
1235
|
return checks
|
|
1177
1236
|
}
|
|
1178
1237
|
|
|
@@ -1182,13 +1241,13 @@ function translateJsonSchemaMultiDocument(
|
|
|
1182
1241
|
!Array.isArray(schema.prefixItems) ||
|
|
1183
1242
|
typeof schema.minItems === "number" && schema.minItems > schema.prefixItems.length
|
|
1184
1243
|
) {
|
|
1185
|
-
addNumberCheck(checks, schema.minItems,
|
|
1244
|
+
addNumberCheck(checks, schema.minItems, Schema.isMinLength)
|
|
1186
1245
|
}
|
|
1187
1246
|
if (!isMaxItemsRedundant) {
|
|
1188
|
-
addNumberCheck(checks, schema.maxItems,
|
|
1247
|
+
addNumberCheck(checks, schema.maxItems, Schema.isMaxLength)
|
|
1189
1248
|
}
|
|
1190
1249
|
if (schema.uniqueItems === true) {
|
|
1191
|
-
checks.push(
|
|
1250
|
+
checks.push(makeFilter(Schema.isUnique()))
|
|
1192
1251
|
}
|
|
1193
1252
|
return checks
|
|
1194
1253
|
}
|
|
@@ -1242,41 +1301,33 @@ function translateJsonSchemaMultiDocument(
|
|
|
1242
1301
|
path: Path
|
|
1243
1302
|
): Array<Check> {
|
|
1244
1303
|
const checks: Array<Check> = []
|
|
1245
|
-
addNumberCheck(checks, schema.minProperties,
|
|
1246
|
-
addNumberCheck(checks, schema.maxProperties,
|
|
1304
|
+
addNumberCheck(checks, schema.minProperties, Schema.isMinProperties)
|
|
1305
|
+
addNumberCheck(checks, schema.maxProperties, Schema.isMaxProperties)
|
|
1247
1306
|
if (schema.propertyNames !== undefined) {
|
|
1248
1307
|
const propertyNamesPath = [...path, "propertyNames"]
|
|
1249
|
-
checks.push(
|
|
1250
|
-
"
|
|
1251
|
-
|
|
1252
|
-
[intersect(
|
|
1308
|
+
checks.push({
|
|
1309
|
+
_tag: "PropertyNames",
|
|
1310
|
+
type: intersect(
|
|
1253
1311
|
string,
|
|
1254
1312
|
translateSchema(schema.propertyNames, propertyNamesPath),
|
|
1255
1313
|
propertyNamesPath
|
|
1256
|
-
)
|
|
1257
|
-
)
|
|
1314
|
+
)
|
|
1315
|
+
})
|
|
1258
1316
|
}
|
|
1259
1317
|
return checks
|
|
1260
1318
|
}
|
|
1261
1319
|
|
|
1262
|
-
|
|
1263
|
-
const representations = document.schemas.map((schema, index) =>
|
|
1320
|
+
return document.schemas.map((schema, index) =>
|
|
1264
1321
|
finalize(translateSchema(schema, singleRoot ? ["schema"] : ["schemas", index], true))
|
|
1265
|
-
) as [
|
|
1266
|
-
// Definitions expanded away by intersections do not need a standalone output schema.
|
|
1267
|
-
for (const [key, reference] of finalReferences) {
|
|
1268
|
-
InternalRecord.assignProperty(references, key, finalize(translateDefinition(key, reference.path)))
|
|
1269
|
-
}
|
|
1270
|
-
return { representations, references }
|
|
1322
|
+
) as [Schema.Top, ...Array<Schema.Top>]
|
|
1271
1323
|
}
|
|
1272
1324
|
|
|
1273
1325
|
/** @internal */
|
|
1274
1326
|
export function fromJsonSchemaDocument(
|
|
1275
1327
|
document: JsonSchema.Document<"draft-2020-12">,
|
|
1276
|
-
options: SchemaRepresentation.FromJsonSchemaOptions | undefined
|
|
1277
|
-
revivers: ReadonlyArray<SchemaRepresentation.AnyReviver>
|
|
1328
|
+
options: SchemaRepresentation.FromJsonSchemaOptions | undefined
|
|
1278
1329
|
): Schema.Top {
|
|
1279
|
-
|
|
1330
|
+
return fromJsonSchemaMultiDocument(
|
|
1280
1331
|
{
|
|
1281
1332
|
dialect: document.dialect,
|
|
1282
1333
|
schemas: [document.schema],
|
|
@@ -1284,18 +1335,5 @@ export function fromJsonSchemaDocument(
|
|
|
1284
1335
|
},
|
|
1285
1336
|
options,
|
|
1286
1337
|
true
|
|
1287
|
-
)
|
|
1288
|
-
return fromRepresentation({
|
|
1289
|
-
representation: translated.representations[0],
|
|
1290
|
-
references: translated.references
|
|
1291
|
-
}, revivers)
|
|
1292
|
-
}
|
|
1293
|
-
|
|
1294
|
-
/** @internal */
|
|
1295
|
-
export function fromJsonSchemaMultiDocument(
|
|
1296
|
-
document: JsonSchema.MultiDocument<"draft-2020-12">,
|
|
1297
|
-
options: SchemaRepresentation.FromJsonSchemaOptions | undefined,
|
|
1298
|
-
revivers: ReadonlyArray<SchemaRepresentation.AnyReviver>
|
|
1299
|
-
): readonly [Schema.Top, ...Array<Schema.Top>] {
|
|
1300
|
-
return fromRepresentations(translateJsonSchemaMultiDocument(document, options), revivers)
|
|
1338
|
+
)[0]
|
|
1301
1339
|
}
|
|
@@ -18,7 +18,8 @@ export function fromRepresentations(
|
|
|
18
18
|
return revivePersisted(document.representations, document.references, makeReviverMap(revivers), false)
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
/** @internal */
|
|
22
|
+
export class ReferenceSlot {
|
|
22
23
|
body: Schema.Top | undefined
|
|
23
24
|
resolving = false
|
|
24
25
|
readonly wrapper: Schema.Top
|
|
@@ -94,14 +94,14 @@ function toBaseStandardJSONSchemaV1(
|
|
|
94
94
|
): JsonSchema.JsonSchema {
|
|
95
95
|
const doc2020_12 = toJsonSchemaDocument(ast)
|
|
96
96
|
if (target === "draft-2020-12") {
|
|
97
|
-
const schema = doc2020_12.schema
|
|
97
|
+
const schema: JsonSchema.JsonSchema = { $schema: JsonSchema.META_SCHEMA_URI_DRAFT_2020_12, ...doc2020_12.schema }
|
|
98
98
|
if (Object.keys(doc2020_12.definitions).length > 0) {
|
|
99
99
|
schema.$defs = doc2020_12.definitions
|
|
100
100
|
}
|
|
101
101
|
return schema
|
|
102
102
|
} else if (target === "draft-07") {
|
|
103
103
|
const doc07 = JsonSchema.toDocumentDraft07(doc2020_12)
|
|
104
|
-
const schema = doc07.schema
|
|
104
|
+
const schema: JsonSchema.JsonSchema = { $schema: JsonSchema.META_SCHEMA_URI_DRAFT_07, ...doc07.schema }
|
|
105
105
|
if (Object.keys(doc07.definitions).length > 0) {
|
|
106
106
|
schema.definitions = doc07.definitions
|
|
107
107
|
}
|