effect 4.0.0-beta.99 → 4.0.0-rc.108
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/AGENTS.md +381 -0
- package/CLAUDE.md +381 -0
- package/README.md +14 -19
- package/ai-docs/README.md +44 -0
- package/ai-docs/package.json +36 -0
- package/ai-docs/src/01_effect/01_basics/01_effect-gen.ts +30 -0
- package/ai-docs/src/01_effect/01_basics/02_effect-fn.ts +39 -0
- package/ai-docs/src/01_effect/01_basics/10_creating-effects.ts +74 -0
- package/ai-docs/src/01_effect/01_basics/index.md +5 -0
- package/ai-docs/src/01_effect/02_schema/10_schema-basics.ts +43 -0
- package/ai-docs/src/01_effect/02_schema/index.md +7 -0
- package/ai-docs/src/01_effect/03_services/01_service.ts +45 -0
- package/ai-docs/src/01_effect/03_services/10_reference.ts +10 -0
- package/ai-docs/src/01_effect/03_services/20_layer-composition.ts +70 -0
- package/ai-docs/src/01_effect/03_services/20_layer-unwrap.ts +66 -0
- package/ai-docs/src/01_effect/03_services/index.md +5 -0
- package/ai-docs/src/01_effect/04_errors/01_error-handling.ts +30 -0
- package/ai-docs/src/01_effect/04_errors/10_catch-tags.ts +24 -0
- package/ai-docs/src/01_effect/04_errors/20_reason-errors.ts +64 -0
- package/ai-docs/src/01_effect/04_errors/index.md +1 -0
- package/ai-docs/src/01_effect/05_resources/10_acquire-release.ts +105 -0
- package/ai-docs/src/01_effect/05_resources/20_layer-side-effects.ts +31 -0
- package/ai-docs/src/01_effect/05_resources/30_layer-map.ts +86 -0
- package/ai-docs/src/01_effect/05_resources/index.md +3 -0
- package/ai-docs/src/01_effect/06_running/10_run-main.ts +30 -0
- package/ai-docs/src/01_effect/06_running/20_layer-launch.ts +27 -0
- package/ai-docs/src/01_effect/06_running/index.md +1 -0
- package/ai-docs/src/01_effect/07_pubsub/10_pubsub.ts +56 -0
- package/ai-docs/src/01_effect/07_pubsub/index.md +3 -0
- package/ai-docs/src/03_stream/10_creating-streams.ts +103 -0
- package/ai-docs/src/03_stream/20_consuming-streams.ts +137 -0
- package/ai-docs/src/03_stream/30_encoding.ts +165 -0
- package/ai-docs/src/03_stream/index.md +4 -0
- package/ai-docs/src/04_integration/10_managed-runtime.ts +129 -0
- package/ai-docs/src/04_integration/index.md +5 -0
- package/ai-docs/src/05_batching/10_request-resolver.ts +89 -0
- package/ai-docs/src/05_batching/index.md +3 -0
- package/ai-docs/src/06_schedule/10_schedules.ts +110 -0
- package/ai-docs/src/06_schedule/index.md +3 -0
- package/ai-docs/src/07_datetime/10_creating-and-formatting.ts +30 -0
- package/ai-docs/src/07_datetime/20_time-zones.ts +44 -0
- package/ai-docs/src/07_datetime/index.md +5 -0
- package/ai-docs/src/08_observability/10_logging.ts +66 -0
- package/ai-docs/src/08_observability/20_otlp-tracing.ts +95 -0
- package/ai-docs/src/08_observability/index.md +7 -0
- package/ai-docs/src/09_testing/10_effect-tests.ts +55 -0
- package/ai-docs/src/09_testing/20_layer-tests.ts +138 -0
- package/ai-docs/src/09_testing/index.md +1 -0
- package/ai-docs/src/10_predicate/01_basics.ts +14 -0
- package/ai-docs/src/10_predicate/index.md +9 -0
- package/ai-docs/src/50_http-client/10_basics.ts +102 -0
- package/ai-docs/src/50_http-client/index.md +3 -0
- package/ai-docs/src/51_http-server/10_basics.ts +116 -0
- package/ai-docs/src/51_http-server/fixtures/api/Api.ts +14 -0
- package/ai-docs/src/51_http-server/fixtures/api/Authorization.ts +36 -0
- package/ai-docs/src/51_http-server/fixtures/api/System.ts +10 -0
- package/ai-docs/src/51_http-server/fixtures/api/Users.ts +91 -0
- package/ai-docs/src/51_http-server/fixtures/domain/User.ts +12 -0
- package/ai-docs/src/51_http-server/fixtures/domain/UserErrors.ts +22 -0
- package/ai-docs/src/51_http-server/fixtures/server/Authorization.ts +36 -0
- package/ai-docs/src/51_http-server/fixtures/server/Users/http.ts +71 -0
- package/ai-docs/src/51_http-server/fixtures/server/Users.ts +62 -0
- package/ai-docs/src/51_http-server/index.md +3 -0
- package/ai-docs/src/60_child-process/10_working-with-child-processes.ts +117 -0
- package/ai-docs/src/60_child-process/index.md +3 -0
- package/ai-docs/src/70_cli/10_basics.ts +136 -0
- package/ai-docs/src/70_cli/index.md +5 -0
- package/ai-docs/src/71_ai/10_language-model.ts +156 -0
- package/ai-docs/src/71_ai/20_tools.ts +226 -0
- package/ai-docs/src/71_ai/30_chat.ts +158 -0
- package/ai-docs/src/71_ai/fixtures/domain/LaunchPlan.ts +9 -0
- package/ai-docs/src/71_ai/index.md +5 -0
- package/ai-docs/src/80_cluster/10_entities.ts +97 -0
- package/ai-docs/src/80_cluster/index.md +4 -0
- package/ai-docs/src/index.md +10 -0
- package/ai-docs/tsconfig.json +24 -0
- package/dist/Array.d.ts +971 -1037
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +462 -412
- package/dist/Array.js.map +1 -1
- package/dist/BigDecimal.d.ts +433 -756
- package/dist/BigDecimal.d.ts.map +1 -1
- package/dist/BigDecimal.js +200 -325
- package/dist/BigDecimal.js.map +1 -1
- package/dist/BigInt.d.ts +207 -267
- package/dist/BigInt.d.ts.map +1 -1
- package/dist/BigInt.js +107 -135
- package/dist/BigInt.js.map +1 -1
- package/dist/Boolean.d.ts +146 -188
- package/dist/Boolean.d.ts.map +1 -1
- package/dist/Boolean.js +64 -84
- package/dist/Boolean.js.map +1 -1
- package/dist/Brand.d.ts +3 -3
- package/dist/Brand.d.ts.map +1 -1
- package/dist/Brand.js +4 -3
- package/dist/Brand.js.map +1 -1
- package/dist/Cache.d.ts +409 -256
- package/dist/Cache.d.ts.map +1 -1
- package/dist/Cache.js +213 -134
- package/dist/Cache.js.map +1 -1
- package/dist/Cause.d.ts +167 -277
- package/dist/Cause.d.ts.map +1 -1
- package/dist/Cause.js +122 -176
- package/dist/Cause.js.map +1 -1
- package/dist/Channel.d.ts +756 -769
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +588 -449
- package/dist/Channel.js.map +1 -1
- package/dist/ChannelSchema.d.ts +1 -1
- package/dist/ChannelSchema.d.ts.map +1 -1
- package/dist/ChannelSchema.js.map +1 -1
- package/dist/Chunk.d.ts +834 -1173
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Chunk.js +326 -439
- package/dist/Chunk.js.map +1 -1
- package/dist/Clock.d.ts +180 -49
- package/dist/Clock.d.ts.map +1 -1
- package/dist/Clock.js +96 -31
- package/dist/Clock.js.map +1 -1
- package/dist/Combiner.d.ts +20 -33
- package/dist/Combiner.d.ts.map +1 -1
- package/dist/Combiner.js +18 -30
- package/dist/Combiner.js.map +1 -1
- package/dist/Config.d.ts +226 -174
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js +361 -267
- package/dist/Config.js.map +1 -1
- package/dist/ConfigProvider.d.ts +229 -71
- package/dist/ConfigProvider.d.ts.map +1 -1
- package/dist/ConfigProvider.js +164 -95
- package/dist/ConfigProvider.js.map +1 -1
- package/dist/Console.d.ts +233 -33
- package/dist/Console.d.ts.map +1 -1
- package/dist/Console.js +232 -32
- package/dist/Console.js.map +1 -1
- package/dist/Context.d.ts +153 -277
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +172 -236
- package/dist/Context.js.map +1 -1
- package/dist/Cron.d.ts +144 -176
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +227 -162
- package/dist/Cron.js.map +1 -1
- package/dist/Crypto.d.ts +13 -15
- package/dist/Crypto.d.ts.map +1 -1
- package/dist/Crypto.js +22 -15
- package/dist/Crypto.js.map +1 -1
- package/dist/Data.d.ts +60 -80
- package/dist/Data.d.ts.map +1 -1
- package/dist/Data.js +18 -24
- package/dist/Data.js.map +1 -1
- package/dist/DateTime.d.ts +562 -660
- package/dist/DateTime.d.ts.map +1 -1
- package/dist/DateTime.js +307 -362
- package/dist/DateTime.js.map +1 -1
- package/dist/Deferred.d.ts +253 -256
- package/dist/Deferred.d.ts.map +1 -1
- package/dist/Deferred.js +110 -98
- package/dist/Deferred.js.map +1 -1
- package/dist/Duration.d.ts +216 -308
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +157 -188
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +3142 -3345
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +1452 -1570
- package/dist/Effect.js.map +1 -1
- package/dist/Effectable.js.map +1 -1
- package/dist/Encoding.d.ts +22 -40
- package/dist/Encoding.d.ts.map +1 -1
- package/dist/Encoding.js +22 -40
- package/dist/Encoding.js.map +1 -1
- package/dist/Equal.d.ts +33 -37
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +39 -23
- package/dist/Equal.js.map +1 -1
- package/dist/Equivalence.d.ts +103 -105
- package/dist/Equivalence.d.ts.map +1 -1
- package/dist/Equivalence.js +77 -79
- package/dist/Equivalence.js.map +1 -1
- package/dist/ErrorReporter.d.ts +51 -27
- package/dist/ErrorReporter.d.ts.map +1 -1
- package/dist/ErrorReporter.js +50 -26
- package/dist/ErrorReporter.js.map +1 -1
- package/dist/ExecutionPlan.d.ts +86 -55
- package/dist/ExecutionPlan.d.ts.map +1 -1
- package/dist/ExecutionPlan.js +8 -29
- package/dist/ExecutionPlan.js.map +1 -1
- package/dist/Exit.d.ts +116 -192
- package/dist/Exit.d.ts.map +1 -1
- package/dist/Exit.js +82 -130
- package/dist/Exit.js.map +1 -1
- package/dist/Fiber.d.ts +83 -147
- package/dist/Fiber.d.ts.map +1 -1
- package/dist/Fiber.js +48 -87
- package/dist/Fiber.js.map +1 -1
- package/dist/FiberHandle.d.ts +152 -105
- package/dist/FiberHandle.d.ts.map +1 -1
- package/dist/FiberHandle.js +109 -75
- package/dist/FiberHandle.js.map +1 -1
- package/dist/FiberMap.d.ts +213 -168
- package/dist/FiberMap.d.ts.map +1 -1
- package/dist/FiberMap.js +114 -89
- package/dist/FiberMap.js.map +1 -1
- package/dist/FiberSet.d.ts +123 -81
- package/dist/FiberSet.d.ts.map +1 -1
- package/dist/FiberSet.js +86 -60
- package/dist/FiberSet.js.map +1 -1
- package/dist/FileSystem.d.ts +154 -265
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +42 -147
- package/dist/FileSystem.js.map +1 -1
- package/dist/Filter.d.ts +61 -33
- package/dist/Filter.d.ts.map +1 -1
- package/dist/Filter.js +26 -15
- package/dist/Filter.js.map +1 -1
- package/dist/Formatter.d.ts +24 -32
- package/dist/Formatter.d.ts.map +1 -1
- package/dist/Formatter.js +55 -60
- package/dist/Formatter.js.map +1 -1
- package/dist/Function.d.ts +106 -148
- package/dist/Function.d.ts.map +1 -1
- package/dist/Function.js +81 -62
- package/dist/Function.js.map +1 -1
- package/dist/Graph.d.ts +360 -714
- package/dist/Graph.d.ts.map +1 -1
- package/dist/Graph.js +168 -297
- package/dist/Graph.js.map +1 -1
- package/dist/HKT.d.ts +12 -6
- package/dist/HKT.d.ts.map +1 -1
- package/dist/Hash.d.ts +47 -83
- package/dist/Hash.d.ts.map +1 -1
- package/dist/Hash.js +46 -68
- package/dist/Hash.js.map +1 -1
- package/dist/HashMap.d.ts +319 -411
- package/dist/HashMap.d.ts.map +1 -1
- package/dist/HashMap.js +122 -166
- package/dist/HashMap.js.map +1 -1
- package/dist/HashRing.d.ts.map +1 -1
- package/dist/HashRing.js +1 -0
- package/dist/HashRing.js.map +1 -1
- package/dist/HashSet.d.ts +177 -284
- package/dist/HashSet.d.ts.map +1 -1
- package/dist/HashSet.js +68 -109
- package/dist/HashSet.js.map +1 -1
- package/dist/Inspectable.d.ts +19 -18
- package/dist/Inspectable.d.ts.map +1 -1
- package/dist/Inspectable.js +20 -16
- package/dist/Inspectable.js.map +1 -1
- package/dist/Iterable.d.ts +620 -786
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +241 -317
- package/dist/Iterable.js.map +1 -1
- package/dist/JsonPatch.d.ts +11 -13
- package/dist/JsonPatch.d.ts.map +1 -1
- package/dist/JsonPatch.js +46 -103
- package/dist/JsonPatch.js.map +1 -1
- package/dist/JsonPointer.d.ts +8 -8
- package/dist/JsonPointer.js +8 -8
- package/dist/JsonPointer.js.map +1 -1
- package/dist/JsonSchema.d.ts +98 -44
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +319 -241
- package/dist/JsonSchema.js.map +1 -1
- package/dist/Latch.d.ts +23 -35
- package/dist/Latch.d.ts.map +1 -1
- package/dist/Latch.js +16 -28
- package/dist/Latch.js.map +1 -1
- package/dist/Layer.d.ts +359 -260
- package/dist/Layer.d.ts.map +1 -1
- package/dist/Layer.js +202 -180
- package/dist/Layer.js.map +1 -1
- package/dist/LayerMap.d.ts +42 -29
- package/dist/LayerMap.d.ts.map +1 -1
- package/dist/LayerMap.js +31 -21
- package/dist/LayerMap.js.map +1 -1
- package/dist/LayerRef.d.ts +6 -2
- package/dist/LayerRef.d.ts.map +1 -1
- package/dist/LayerRef.js +6 -2
- package/dist/LayerRef.js.map +1 -1
- package/dist/LogLevel.d.ts +114 -214
- package/dist/LogLevel.d.ts.map +1 -1
- package/dist/LogLevel.js +41 -76
- package/dist/LogLevel.js.map +1 -1
- package/dist/Logger.d.ts +218 -467
- package/dist/Logger.d.ts.map +1 -1
- package/dist/Logger.js +208 -453
- package/dist/Logger.js.map +1 -1
- package/dist/ManagedRuntime.d.ts +16 -5
- package/dist/ManagedRuntime.d.ts.map +1 -1
- package/dist/ManagedRuntime.js +10 -5
- package/dist/ManagedRuntime.js.map +1 -1
- package/dist/Match.d.ts +217 -252
- package/dist/Match.d.ts.map +1 -1
- package/dist/Match.js +150 -183
- package/dist/Match.js.map +1 -1
- package/dist/Metric.d.ts +442 -993
- package/dist/Metric.d.ts.map +1 -1
- package/dist/Metric.js +202 -645
- package/dist/Metric.js.map +1 -1
- package/dist/MutableHashMap.d.ts +144 -173
- package/dist/MutableHashMap.d.ts.map +1 -1
- package/dist/MutableHashMap.js +68 -79
- package/dist/MutableHashMap.js.map +1 -1
- package/dist/MutableHashSet.d.ts +84 -89
- package/dist/MutableHashSet.d.ts.map +1 -1
- package/dist/MutableHashSet.js +44 -47
- package/dist/MutableHashSet.js.map +1 -1
- package/dist/MutableList.d.ts +71 -370
- package/dist/MutableList.d.ts.map +1 -1
- package/dist/MutableList.js +63 -284
- package/dist/MutableList.js.map +1 -1
- package/dist/MutableRef.d.ts +420 -243
- package/dist/MutableRef.d.ts.map +1 -1
- package/dist/MutableRef.js +209 -120
- package/dist/MutableRef.js.map +1 -1
- package/dist/Newtype.d.ts +21 -14
- package/dist/Newtype.d.ts.map +1 -1
- package/dist/Newtype.js +15 -13
- package/dist/Newtype.js.map +1 -1
- package/dist/NonEmptyIterable.d.ts +7 -137
- package/dist/NonEmptyIterable.d.ts.map +1 -1
- package/dist/NonEmptyIterable.js +5 -93
- package/dist/NonEmptyIterable.js.map +1 -1
- package/dist/Number.d.ts +196 -233
- package/dist/Number.d.ts.map +1 -1
- package/dist/Number.js +90 -109
- package/dist/Number.js.map +1 -1
- package/dist/Optic.d.ts +132 -210
- package/dist/Optic.d.ts.map +1 -1
- package/dist/Optic.js +221 -324
- package/dist/Optic.js.map +1 -1
- package/dist/Option.d.ts +447 -812
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.js +213 -393
- package/dist/Option.js.map +1 -1
- package/dist/Order.d.ts +109 -109
- package/dist/Order.js +91 -91
- package/dist/Order.js.map +1 -1
- package/dist/Ordering.d.ts +20 -23
- package/dist/Ordering.d.ts.map +1 -1
- package/dist/Ordering.js +8 -9
- package/dist/Ordering.js.map +1 -1
- package/dist/PartitionedSemaphore.d.ts.map +1 -1
- package/dist/PartitionedSemaphore.js +1 -4
- package/dist/PartitionedSemaphore.js.map +1 -1
- package/dist/Path.d.ts +38 -41
- package/dist/Path.d.ts.map +1 -1
- package/dist/Path.js +3 -4
- package/dist/Path.js.map +1 -1
- package/dist/Pipeable.d.ts +6 -5
- package/dist/Pipeable.d.ts.map +1 -1
- package/dist/Pipeable.js +2 -2
- package/dist/Pipeable.js.map +1 -1
- package/dist/PlatformError.d.ts +4 -4
- package/dist/PlatformError.js +3 -3
- package/dist/PlatformError.js.map +1 -1
- package/dist/Pool.d.ts +4 -2
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +4 -2
- package/dist/Pool.js.map +1 -1
- package/dist/Predicate.d.ts +200 -181
- package/dist/Predicate.d.ts.map +1 -1
- package/dist/Predicate.js +100 -108
- package/dist/Predicate.js.map +1 -1
- package/dist/PrimaryKey.d.ts +7 -7
- package/dist/PrimaryKey.js +5 -5
- package/dist/PrimaryKey.js.map +1 -1
- package/dist/PubSub.d.ts +425 -494
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +373 -362
- package/dist/PubSub.js.map +1 -1
- package/dist/Pull.d.ts +24 -18
- package/dist/Pull.d.ts.map +1 -1
- package/dist/Pull.js +11 -9
- package/dist/Pull.js.map +1 -1
- package/dist/Queue.d.ts +200 -159
- package/dist/Queue.d.ts.map +1 -1
- package/dist/Queue.js +166 -138
- package/dist/Queue.js.map +1 -1
- package/dist/Random.d.ts +49 -74
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +35 -54
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts +121 -63
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +42 -21
- package/dist/RcMap.js.map +1 -1
- package/dist/RcRef.d.ts +24 -13
- package/dist/RcRef.d.ts.map +1 -1
- package/dist/RcRef.js +15 -9
- package/dist/RcRef.js.map +1 -1
- package/dist/Record.d.ts +361 -466
- package/dist/Record.d.ts.map +1 -1
- package/dist/Record.js +163 -216
- package/dist/Record.js.map +1 -1
- package/dist/Redactable.d.ts +6 -2
- package/dist/Redactable.d.ts.map +1 -1
- package/dist/Redactable.js +7 -2
- package/dist/Redactable.js.map +1 -1
- package/dist/Redacted.d.ts +25 -25
- package/dist/Redacted.d.ts.map +1 -1
- package/dist/Redacted.js +19 -20
- package/dist/Redacted.js.map +1 -1
- package/dist/Reducer.d.ts +8 -15
- package/dist/Reducer.d.ts.map +1 -1
- package/dist/Reducer.js +6 -12
- package/dist/Reducer.js.map +1 -1
- package/dist/Ref.d.ts +95 -165
- package/dist/Ref.d.ts.map +1 -1
- package/dist/Ref.js +75 -122
- package/dist/Ref.js.map +1 -1
- package/dist/References.d.ts +102 -213
- package/dist/References.d.ts.map +1 -1
- package/dist/References.js +102 -213
- package/dist/References.js.map +1 -1
- package/dist/RegExp.d.ts +10 -14
- package/dist/RegExp.d.ts.map +1 -1
- package/dist/RegExp.js +10 -14
- package/dist/RegExp.js.map +1 -1
- package/dist/Request.d.ts +31 -21
- package/dist/Request.d.ts.map +1 -1
- package/dist/Request.js +25 -19
- package/dist/Request.js.map +1 -1
- package/dist/RequestResolver.d.ts +201 -90
- package/dist/RequestResolver.d.ts.map +1 -1
- package/dist/RequestResolver.js +87 -41
- package/dist/RequestResolver.js.map +1 -1
- package/dist/Resource.js.map +1 -1
- package/dist/Result.d.ts +302 -470
- package/dist/Result.d.ts.map +1 -1
- package/dist/Result.js +135 -218
- package/dist/Result.js.map +1 -1
- package/dist/Runtime.d.ts +50 -75
- package/dist/Runtime.d.ts.map +1 -1
- package/dist/Runtime.js +39 -60
- package/dist/Runtime.js.map +1 -1
- package/dist/Schedule.d.ts +292 -1638
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +164 -805
- package/dist/Schedule.js.map +1 -1
- package/dist/Scheduler.d.ts +5 -5
- package/dist/Scheduler.d.ts.map +1 -1
- package/dist/Scheduler.js +18 -6
- package/dist/Scheduler.js.map +1 -1
- package/dist/Schema.d.ts +2056 -1269
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +2868 -1135
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +64 -72
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +698 -468
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaGetter.d.ts +236 -188
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +281 -234
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaIssue.d.ts +219 -190
- package/dist/SchemaIssue.d.ts.map +1 -1
- package/dist/SchemaIssue.js +303 -309
- package/dist/SchemaIssue.js.map +1 -1
- package/dist/SchemaParser.d.ts +32 -2
- package/dist/SchemaParser.d.ts.map +1 -1
- package/dist/SchemaParser.js +170 -118
- package/dist/SchemaParser.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +433 -1511
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +301 -2854
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +117 -77
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +139 -104
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/Scope.d.ts +123 -151
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +72 -92
- package/dist/Scope.js.map +1 -1
- package/dist/ScopedCache.js +1 -1
- package/dist/ScopedCache.js.map +1 -1
- package/dist/ScopedRef.d.ts +3 -3
- package/dist/ScopedRef.d.ts.map +1 -1
- package/dist/ScopedRef.js +2 -2
- package/dist/ScopedRef.js.map +1 -1
- package/dist/Semaphore.d.ts +101 -13
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +78 -39
- package/dist/Semaphore.js.map +1 -1
- package/dist/Sink.d.ts +118 -108
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +107 -100
- package/dist/Sink.js.map +1 -1
- package/dist/Stdio.d.ts +18 -5
- package/dist/Stdio.d.ts.map +1 -1
- package/dist/Stdio.js +6 -3
- package/dist/Stdio.js.map +1 -1
- package/dist/Stream.d.ts +2467 -2962
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +1154 -1413
- package/dist/Stream.js.map +1 -1
- package/dist/String.d.ts +262 -308
- package/dist/String.d.ts.map +1 -1
- package/dist/String.js +184 -215
- package/dist/String.js.map +1 -1
- package/dist/Struct.d.ts +109 -114
- package/dist/Struct.d.ts.map +1 -1
- package/dist/Struct.js +46 -54
- package/dist/Struct.js.map +1 -1
- package/dist/SubscriptionRef.d.ts +282 -250
- package/dist/SubscriptionRef.d.ts.map +1 -1
- package/dist/SubscriptionRef.js +104 -92
- package/dist/SubscriptionRef.js.map +1 -1
- package/dist/Symbol.d.ts +3 -3
- package/dist/Symbol.js +3 -3
- package/dist/Symbol.js.map +1 -1
- package/dist/SynchronizedRef.js +1 -1
- package/dist/SynchronizedRef.js.map +1 -1
- package/dist/Take.js.map +1 -1
- package/dist/Terminal.d.ts +2 -2
- package/dist/Terminal.js +2 -2
- package/dist/Terminal.js.map +1 -1
- package/dist/Tracer.d.ts +100 -54
- package/dist/Tracer.d.ts.map +1 -1
- package/dist/Tracer.js +41 -24
- package/dist/Tracer.js.map +1 -1
- package/dist/Trie.d.ts +287 -679
- package/dist/Trie.d.ts.map +1 -1
- package/dist/Trie.js +109 -251
- package/dist/Trie.js.map +1 -1
- package/dist/Tuple.d.ts +98 -131
- package/dist/Tuple.d.ts.map +1 -1
- package/dist/Tuple.js +42 -57
- package/dist/Tuple.js.map +1 -1
- package/dist/TxChunk.d.ts +201 -121
- package/dist/TxChunk.d.ts.map +1 -1
- package/dist/TxChunk.js +85 -56
- package/dist/TxChunk.js.map +1 -1
- package/dist/TxDeferred.d.ts +62 -46
- package/dist/TxDeferred.d.ts.map +1 -1
- package/dist/TxDeferred.js +30 -22
- package/dist/TxDeferred.js.map +1 -1
- package/dist/TxHashMap.d.ts +631 -779
- package/dist/TxHashMap.d.ts.map +1 -1
- package/dist/TxHashMap.js +268 -330
- package/dist/TxHashMap.js.map +1 -1
- package/dist/TxHashSet.d.ts +297 -236
- package/dist/TxHashSet.d.ts.map +1 -1
- package/dist/TxHashSet.js +130 -100
- package/dist/TxHashSet.js.map +1 -1
- package/dist/TxPriorityQueue.d.ts +126 -95
- package/dist/TxPriorityQueue.d.ts.map +1 -1
- package/dist/TxPriorityQueue.js +74 -56
- package/dist/TxPriorityQueue.js.map +1 -1
- package/dist/TxPubSub.d.ts +101 -88
- package/dist/TxPubSub.d.ts.map +1 -1
- package/dist/TxPubSub.js +87 -66
- package/dist/TxPubSub.js.map +1 -1
- package/dist/TxQueue.d.ts +200 -180
- package/dist/TxQueue.d.ts.map +1 -1
- package/dist/TxQueue.js +161 -137
- package/dist/TxQueue.js.map +1 -1
- package/dist/TxReentrantLock.d.ts +89 -114
- package/dist/TxReentrantLock.d.ts.map +1 -1
- package/dist/TxReentrantLock.js +75 -53
- package/dist/TxReentrantLock.js.map +1 -1
- package/dist/TxRef.d.ts +51 -32
- package/dist/TxRef.d.ts.map +1 -1
- package/dist/TxRef.js +23 -15
- package/dist/TxRef.js.map +1 -1
- package/dist/TxSemaphore.d.ts +129 -95
- package/dist/TxSemaphore.d.ts.map +1 -1
- package/dist/TxSemaphore.js +85 -70
- package/dist/TxSemaphore.js.map +1 -1
- package/dist/TxSubscriptionRef.d.ts +97 -70
- package/dist/TxSubscriptionRef.d.ts.map +1 -1
- package/dist/TxSubscriptionRef.js +44 -34
- package/dist/TxSubscriptionRef.js.map +1 -1
- package/dist/Types.d.ts +127 -70
- package/dist/Types.d.ts.map +1 -1
- package/dist/UndefinedOr.js.map +1 -1
- package/dist/Unify.d.ts +45 -65
- package/dist/Unify.d.ts.map +1 -1
- package/dist/Unify.js +6 -9
- package/dist/Unify.js.map +1 -1
- package/dist/Utils.d.ts +23 -16
- package/dist/Utils.d.ts.map +1 -1
- package/dist/Utils.js +3 -7
- package/dist/Utils.js.map +1 -1
- package/dist/index.d.ts +0 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -8
- package/dist/index.js.map +1 -1
- package/dist/internal/array.js.map +1 -1
- package/dist/internal/core.js +4 -3
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/dateTime.js +5 -1
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/doNotation.js.map +1 -1
- package/dist/internal/effect.js +252 -108
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/equal.js.map +1 -1
- package/dist/internal/errors.js.map +1 -1
- package/dist/internal/executionPlan.js +52 -3
- package/dist/internal/executionPlan.js.map +1 -1
- package/dist/internal/hashMap.js +12 -8
- package/dist/internal/hashMap.js.map +1 -1
- package/dist/internal/hashSet.js.map +1 -1
- package/dist/internal/layer.js.map +1 -1
- package/dist/internal/matcher.js +2 -2
- package/dist/internal/matcher.js.map +1 -1
- package/dist/internal/metric.js.map +1 -1
- package/dist/internal/option.js.map +1 -1
- package/dist/internal/persistence.d.ts +2 -0
- package/dist/internal/persistence.d.ts.map +1 -0
- package/dist/internal/persistence.js +3 -0
- package/dist/internal/persistence.js.map +1 -0
- package/dist/internal/random.js.map +1 -1
- package/dist/internal/rcRef.js +18 -13
- package/dist/internal/rcRef.js.map +1 -1
- package/dist/internal/record.d.ts +0 -3
- package/dist/internal/record.d.ts.map +1 -1
- package/dist/internal/record.js +10 -5
- package/dist/internal/record.js.map +1 -1
- package/dist/internal/redacted.js.map +1 -1
- package/dist/internal/references.js +3 -4
- package/dist/internal/references.js.map +1 -1
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/result.js.map +1 -1
- package/dist/internal/schedule.js.map +1 -1
- package/dist/internal/schema/annotations.js +15 -1
- package/dist/internal/schema/annotations.js.map +1 -1
- package/dist/internal/schema/cause.js.map +1 -1
- package/dist/internal/schema/fromJsonSchemaDocument.d.ts +2 -0
- package/dist/internal/schema/fromJsonSchemaDocument.d.ts.map +1 -0
- package/dist/internal/schema/fromJsonSchemaDocument.js +761 -0
- package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -0
- package/dist/internal/schema/fromRepresentation.d.ts +2 -0
- package/dist/internal/schema/fromRepresentation.d.ts.map +1 -0
- package/dist/internal/schema/fromRepresentation.js +245 -0
- package/dist/internal/schema/fromRepresentation.js.map +1 -0
- package/dist/internal/schema/parser.d.ts +14 -0
- package/dist/internal/schema/parser.d.ts.map +1 -0
- package/dist/internal/schema/parser.js +13 -0
- package/dist/internal/schema/parser.js.map +1 -0
- package/dist/internal/schema/schema.js +29 -49
- package/dist/internal/schema/schema.js.map +1 -1
- package/dist/internal/schema/toArbitrary.d.ts +2 -0
- package/dist/internal/schema/toArbitrary.d.ts.map +1 -0
- package/dist/internal/schema/{arbitrary.js → toArbitrary.js} +8 -83
- package/dist/internal/schema/toArbitrary.js.map +1 -0
- package/dist/internal/schema/toCodeDocument.d.ts +2 -0
- package/dist/internal/schema/toCodeDocument.d.ts.map +1 -0
- package/dist/internal/schema/toCodeDocument.js +438 -0
- package/dist/internal/schema/toCodeDocument.js.map +1 -0
- package/dist/internal/schema/toEquivalence.d.ts +2 -0
- package/dist/internal/schema/toEquivalence.d.ts.map +1 -0
- package/dist/internal/schema/{equivalence.js → toEquivalence.js} +15 -13
- package/dist/internal/schema/toEquivalence.js.map +1 -0
- package/dist/internal/schema/toJsonSchemaDocument.d.ts +2 -0
- package/dist/internal/schema/toJsonSchemaDocument.d.ts.map +1 -0
- package/dist/internal/schema/toJsonSchemaDocument.js +522 -0
- package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -0
- package/dist/internal/schema/toRepresentation.d.ts +2 -0
- package/dist/internal/schema/toRepresentation.d.ts.map +1 -0
- package/dist/internal/schema/toRepresentation.js +351 -0
- package/dist/internal/schema/toRepresentation.js.map +1 -0
- package/dist/internal/stackTraceLimit.js +3 -6
- package/dist/internal/stackTraceLimit.js.map +1 -1
- package/dist/internal/stream.js.map +1 -1
- package/dist/internal/tracer.js.map +1 -1
- package/dist/internal/trie.js +24 -10
- package/dist/internal/trie.js.map +1 -1
- package/dist/testing/FastCheck.d.ts +8 -7
- package/dist/testing/FastCheck.d.ts.map +1 -1
- package/dist/testing/FastCheck.js +8 -7
- package/dist/testing/FastCheck.js.map +1 -1
- package/dist/testing/TestClock.d.ts +57 -28
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +65 -20
- package/dist/testing/TestClock.js.map +1 -1
- package/dist/testing/TestConsole.d.ts +32 -31
- package/dist/testing/TestConsole.d.ts.map +1 -1
- package/dist/testing/TestConsole.js +24 -22
- package/dist/testing/TestConsole.js.map +1 -1
- package/dist/testing/TestSchema.d.ts +31 -31
- package/dist/testing/TestSchema.d.ts.map +1 -1
- package/dist/testing/TestSchema.js +35 -34
- package/dist/testing/TestSchema.js.map +1 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/unstable/ai/AiError.d.ts +121 -144
- package/dist/unstable/ai/AiError.d.ts.map +1 -1
- package/dist/unstable/ai/AiError.js +118 -140
- package/dist/unstable/ai/AiError.js.map +1 -1
- package/dist/unstable/ai/AnthropicStructuredOutput.d.ts +22 -7
- package/dist/unstable/ai/AnthropicStructuredOutput.d.ts.map +1 -1
- package/dist/unstable/ai/AnthropicStructuredOutput.js +87 -317
- package/dist/unstable/ai/AnthropicStructuredOutput.js.map +1 -1
- package/dist/unstable/ai/Chat.d.ts +132 -97
- package/dist/unstable/ai/Chat.d.ts.map +1 -1
- package/dist/unstable/ai/Chat.js +56 -52
- package/dist/unstable/ai/Chat.js.map +1 -1
- package/dist/unstable/ai/EmbeddingModel.d.ts +1 -1
- package/dist/unstable/ai/EmbeddingModel.js +1 -1
- package/dist/unstable/ai/EmbeddingModel.js.map +1 -1
- package/dist/unstable/ai/IdGenerator.d.ts +32 -28
- package/dist/unstable/ai/IdGenerator.d.ts.map +1 -1
- package/dist/unstable/ai/IdGenerator.js +26 -21
- package/dist/unstable/ai/IdGenerator.js.map +1 -1
- package/dist/unstable/ai/LanguageModel.d.ts +111 -68
- package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
- package/dist/unstable/ai/LanguageModel.js +127 -83
- package/dist/unstable/ai/LanguageModel.js.map +1 -1
- package/dist/unstable/ai/McpProtocol.d.ts +30 -0
- package/dist/unstable/ai/McpProtocol.d.ts.map +1 -0
- package/dist/unstable/ai/McpProtocol.js +20 -0
- package/dist/unstable/ai/McpProtocol.js.map +1 -0
- package/dist/unstable/ai/McpSchema.d.ts +320 -254
- package/dist/unstable/ai/McpSchema.d.ts.map +1 -1
- package/dist/unstable/ai/McpSchema.js +79 -71
- package/dist/unstable/ai/McpSchema.js.map +1 -1
- package/dist/unstable/ai/McpServer.d.ts +71 -62
- package/dist/unstable/ai/McpServer.d.ts.map +1 -1
- package/dist/unstable/ai/McpServer.js +777 -245
- package/dist/unstable/ai/McpServer.js.map +1 -1
- package/dist/unstable/ai/Model.d.ts +8 -19
- package/dist/unstable/ai/Model.d.ts.map +1 -1
- package/dist/unstable/ai/Model.js +9 -20
- package/dist/unstable/ai/Model.js.map +1 -1
- package/dist/unstable/ai/OpenAiStructuredOutput.d.ts +33 -11
- package/dist/unstable/ai/OpenAiStructuredOutput.d.ts.map +1 -1
- package/dist/unstable/ai/OpenAiStructuredOutput.js +194 -378
- package/dist/unstable/ai/OpenAiStructuredOutput.js.map +1 -1
- package/dist/unstable/ai/Prompt.d.ts +131 -44
- package/dist/unstable/ai/Prompt.d.ts.map +1 -1
- package/dist/unstable/ai/Prompt.js +100 -36
- package/dist/unstable/ai/Prompt.js.map +1 -1
- package/dist/unstable/ai/Response.d.ts +47 -33
- package/dist/unstable/ai/Response.d.ts.map +1 -1
- package/dist/unstable/ai/Response.js +23 -18
- package/dist/unstable/ai/Response.js.map +1 -1
- package/dist/unstable/ai/ResponseIdTracker.js.map +1 -1
- package/dist/unstable/ai/Telemetry.d.ts +46 -13
- package/dist/unstable/ai/Telemetry.d.ts.map +1 -1
- package/dist/unstable/ai/Telemetry.js +18 -7
- package/dist/unstable/ai/Telemetry.js.map +1 -1
- package/dist/unstable/ai/Tokenizer.d.ts +14 -3
- package/dist/unstable/ai/Tokenizer.d.ts.map +1 -1
- package/dist/unstable/ai/Tokenizer.js +10 -2
- package/dist/unstable/ai/Tokenizer.js.map +1 -1
- package/dist/unstable/ai/Tool.d.ts +63 -44
- package/dist/unstable/ai/Tool.d.ts.map +1 -1
- package/dist/unstable/ai/Tool.js +59 -42
- package/dist/unstable/ai/Tool.js.map +1 -1
- package/dist/unstable/ai/Toolkit.d.ts +35 -9
- package/dist/unstable/ai/Toolkit.d.ts.map +1 -1
- package/dist/unstable/ai/Toolkit.js +32 -14
- package/dist/unstable/ai/Toolkit.js.map +1 -1
- package/dist/unstable/ai/index.d.ts +4 -0
- package/dist/unstable/ai/index.d.ts.map +1 -1
- package/dist/unstable/ai/index.js +4 -0
- package/dist/unstable/ai/index.js.map +1 -1
- package/dist/unstable/ai/internal/codec-transformer.js +15 -12
- package/dist/unstable/ai/internal/codec-transformer.js.map +1 -1
- package/dist/unstable/ai/internal/mcpProtocol.d.ts +21 -0
- package/dist/unstable/ai/internal/mcpProtocol.d.ts.map +1 -0
- package/dist/unstable/ai/internal/mcpProtocol.js +22 -0
- package/dist/unstable/ai/internal/mcpProtocol.js.map +1 -0
- package/dist/unstable/ai/internal/mcpProtocolRegistry.d.ts +2 -0
- package/dist/unstable/ai/internal/mcpProtocolRegistry.d.ts.map +1 -0
- package/dist/unstable/ai/internal/mcpProtocolRegistry.js +32 -0
- package/dist/unstable/ai/internal/mcpProtocolRegistry.js.map +1 -0
- package/dist/unstable/ai/internal/structured-output.d.ts +2 -0
- package/dist/unstable/ai/internal/structured-output.d.ts.map +1 -0
- package/dist/unstable/ai/internal/structured-output.js +315 -0
- package/dist/unstable/ai/internal/structured-output.js.map +1 -0
- package/dist/unstable/cli/Argument.d.ts +279 -72
- package/dist/unstable/cli/Argument.d.ts.map +1 -1
- package/dist/unstable/cli/Argument.js +113 -34
- package/dist/unstable/cli/Argument.js.map +1 -1
- package/dist/unstable/cli/CliConfig.js.map +1 -1
- package/dist/unstable/cli/CliError.d.ts +126 -76
- package/dist/unstable/cli/CliError.d.ts.map +1 -1
- package/dist/unstable/cli/CliError.js +136 -76
- package/dist/unstable/cli/CliError.js.map +1 -1
- package/dist/unstable/cli/CliOutput.d.ts +35 -54
- package/dist/unstable/cli/CliOutput.d.ts.map +1 -1
- package/dist/unstable/cli/CliOutput.js +26 -42
- package/dist/unstable/cli/CliOutput.js.map +1 -1
- package/dist/unstable/cli/Command.d.ts +736 -115
- package/dist/unstable/cli/Command.d.ts.map +1 -1
- package/dist/unstable/cli/Command.js +282 -56
- package/dist/unstable/cli/Command.js.map +1 -1
- package/dist/unstable/cli/Completions.js.map +1 -1
- package/dist/unstable/cli/Flag.d.ts +418 -138
- package/dist/unstable/cli/Flag.d.ts.map +1 -1
- package/dist/unstable/cli/Flag.js +197 -71
- package/dist/unstable/cli/Flag.js.map +1 -1
- package/dist/unstable/cli/GlobalFlag.d.ts +1 -1
- package/dist/unstable/cli/GlobalFlag.js.map +1 -1
- package/dist/unstable/cli/HelpDoc.d.ts +12 -4
- package/dist/unstable/cli/HelpDoc.d.ts.map +1 -1
- package/dist/unstable/cli/Param.d.ts +299 -83
- package/dist/unstable/cli/Param.d.ts.map +1 -1
- package/dist/unstable/cli/Param.js +146 -60
- package/dist/unstable/cli/Param.js.map +1 -1
- package/dist/unstable/cli/Primitive.d.ts +370 -149
- package/dist/unstable/cli/Primitive.d.ts.map +1 -1
- package/dist/unstable/cli/Primitive.js +377 -162
- package/dist/unstable/cli/Primitive.js.map +1 -1
- package/dist/unstable/cli/Prompt.d.ts +23 -14
- package/dist/unstable/cli/Prompt.d.ts.map +1 -1
- package/dist/unstable/cli/Prompt.js +54 -31
- package/dist/unstable/cli/Prompt.js.map +1 -1
- package/dist/unstable/cli/index.js.map +1 -1
- package/dist/unstable/cli/internal/ansi.js +2 -2
- package/dist/unstable/cli/internal/ansi.js.map +1 -1
- package/dist/unstable/cli/internal/auto-suggest.js.map +1 -1
- package/dist/unstable/cli/internal/command.d.ts +5 -3
- package/dist/unstable/cli/internal/command.d.ts.map +1 -1
- package/dist/unstable/cli/internal/command.js +21 -13
- package/dist/unstable/cli/internal/command.js.map +1 -1
- package/dist/unstable/cli/internal/completions/bash.js +69 -9
- package/dist/unstable/cli/internal/completions/bash.js.map +1 -1
- package/dist/unstable/cli/internal/completions/descriptor.js +24 -18
- package/dist/unstable/cli/internal/completions/descriptor.js.map +1 -1
- package/dist/unstable/cli/internal/completions/fish.js +5 -5
- package/dist/unstable/cli/internal/completions/fish.js.map +1 -1
- package/dist/unstable/cli/internal/completions/zsh.js.map +1 -1
- package/dist/unstable/cli/internal/config.d.ts +0 -48
- package/dist/unstable/cli/internal/config.d.ts.map +1 -1
- package/dist/unstable/cli/internal/config.js +8 -10
- package/dist/unstable/cli/internal/config.js.map +1 -1
- package/dist/unstable/cli/internal/help.d.ts.map +1 -1
- package/dist/unstable/cli/internal/help.js +4 -2
- package/dist/unstable/cli/internal/help.js.map +1 -1
- package/dist/unstable/cli/internal/lexer.js +17 -7
- package/dist/unstable/cli/internal/lexer.js.map +1 -1
- package/dist/unstable/cli/internal/parser.js +5 -5
- package/dist/unstable/cli/internal/parser.js.map +1 -1
- package/dist/unstable/cli/internal/wizard.js +2 -2
- package/dist/unstable/cli/internal/wizard.js.map +1 -1
- package/dist/unstable/cluster/ClusterCron.js.map +1 -1
- package/dist/unstable/cluster/ClusterError.js +7 -7
- package/dist/unstable/cluster/ClusterError.js.map +1 -1
- package/dist/unstable/cluster/ClusterMetrics.js.map +1 -1
- package/dist/unstable/cluster/ClusterSchema.d.ts +8 -8
- package/dist/unstable/cluster/ClusterSchema.js +8 -8
- package/dist/unstable/cluster/ClusterSchema.js.map +1 -1
- package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/unstable/cluster/ClusterWorkflowEngine.js +32 -16
- package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/unstable/cluster/DeliverAt.js.map +1 -1
- package/dist/unstable/cluster/Entity.d.ts +12 -12
- package/dist/unstable/cluster/Entity.d.ts.map +1 -1
- package/dist/unstable/cluster/Entity.js +9 -9
- package/dist/unstable/cluster/Entity.js.map +1 -1
- package/dist/unstable/cluster/EntityAddress.js.map +1 -1
- package/dist/unstable/cluster/EntityId.js.map +1 -1
- package/dist/unstable/cluster/EntityProxy.d.ts +7 -5
- package/dist/unstable/cluster/EntityProxy.d.ts.map +1 -1
- package/dist/unstable/cluster/EntityProxy.js +8 -5
- package/dist/unstable/cluster/EntityProxy.js.map +1 -1
- package/dist/unstable/cluster/EntityProxyServer.js.map +1 -1
- package/dist/unstable/cluster/EntityResource.d.ts +2 -2
- package/dist/unstable/cluster/EntityResource.js +2 -2
- package/dist/unstable/cluster/EntityResource.js.map +1 -1
- package/dist/unstable/cluster/EntityType.js.map +1 -1
- package/dist/unstable/cluster/Envelope.d.ts +3 -3
- package/dist/unstable/cluster/Envelope.d.ts.map +1 -1
- package/dist/unstable/cluster/Envelope.js +5 -4
- package/dist/unstable/cluster/Envelope.js.map +1 -1
- package/dist/unstable/cluster/HttpRunner.d.ts +2 -2
- package/dist/unstable/cluster/HttpRunner.d.ts.map +1 -1
- package/dist/unstable/cluster/HttpRunner.js +6 -4
- package/dist/unstable/cluster/HttpRunner.js.map +1 -1
- package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
- package/dist/unstable/cluster/MachineId.js.map +1 -1
- package/dist/unstable/cluster/Message.d.ts +9 -9
- package/dist/unstable/cluster/Message.js +6 -6
- package/dist/unstable/cluster/Message.js.map +1 -1
- package/dist/unstable/cluster/MessageStorage.d.ts +15 -15
- package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/MessageStorage.js +13 -6
- package/dist/unstable/cluster/MessageStorage.js.map +1 -1
- package/dist/unstable/cluster/Reply.d.ts +8 -0
- package/dist/unstable/cluster/Reply.d.ts.map +1 -1
- package/dist/unstable/cluster/Reply.js +17 -5
- package/dist/unstable/cluster/Reply.js.map +1 -1
- package/dist/unstable/cluster/Runner.d.ts +1 -1
- package/dist/unstable/cluster/Runner.js +1 -1
- package/dist/unstable/cluster/Runner.js.map +1 -1
- package/dist/unstable/cluster/RunnerAddress.d.ts +1 -1
- package/dist/unstable/cluster/RunnerAddress.js +1 -1
- package/dist/unstable/cluster/RunnerAddress.js.map +1 -1
- package/dist/unstable/cluster/RunnerHealth.d.ts +1 -1
- package/dist/unstable/cluster/RunnerHealth.js +1 -1
- package/dist/unstable/cluster/RunnerHealth.js.map +1 -1
- package/dist/unstable/cluster/RunnerServer.d.ts +2 -1
- package/dist/unstable/cluster/RunnerServer.d.ts.map +1 -1
- package/dist/unstable/cluster/RunnerServer.js +29 -23
- package/dist/unstable/cluster/RunnerServer.js.map +1 -1
- package/dist/unstable/cluster/RunnerStorage.d.ts +3 -4
- package/dist/unstable/cluster/RunnerStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/RunnerStorage.js +8 -7
- package/dist/unstable/cluster/RunnerStorage.js.map +1 -1
- package/dist/unstable/cluster/Runners.d.ts +11 -15
- package/dist/unstable/cluster/Runners.d.ts.map +1 -1
- package/dist/unstable/cluster/Runners.js +32 -22
- package/dist/unstable/cluster/Runners.js.map +1 -1
- package/dist/unstable/cluster/ShardId.js +1 -1
- package/dist/unstable/cluster/ShardId.js.map +1 -1
- package/dist/unstable/cluster/Sharding.d.ts +2 -2
- package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
- package/dist/unstable/cluster/Sharding.js +164 -31
- package/dist/unstable/cluster/Sharding.js.map +1 -1
- package/dist/unstable/cluster/ShardingConfig.d.ts +13 -5
- package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/unstable/cluster/ShardingConfig.js +3 -3
- package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
- package/dist/unstable/cluster/ShardingRegistrationEvent.js.map +1 -1
- package/dist/unstable/cluster/SingleRunner.d.ts +4 -2
- package/dist/unstable/cluster/SingleRunner.d.ts.map +1 -1
- package/dist/unstable/cluster/SingleRunner.js +2 -1
- package/dist/unstable/cluster/SingleRunner.js.map +1 -1
- package/dist/unstable/cluster/Singleton.js.map +1 -1
- package/dist/unstable/cluster/SingletonAddress.d.ts +1 -1
- package/dist/unstable/cluster/SingletonAddress.js +1 -1
- package/dist/unstable/cluster/SingletonAddress.js.map +1 -1
- package/dist/unstable/cluster/Snowflake.d.ts +8 -8
- package/dist/unstable/cluster/Snowflake.js +8 -8
- package/dist/unstable/cluster/Snowflake.js.map +1 -1
- package/dist/unstable/cluster/SocketRunner.js.map +1 -1
- package/dist/unstable/cluster/SqlMessageStorage.d.ts +7 -4
- package/dist/unstable/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/SqlMessageStorage.js +56 -25
- package/dist/unstable/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/unstable/cluster/SqlRunnerStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/SqlRunnerStorage.js +141 -79
- package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/unstable/cluster/TestRunner.js.map +1 -1
- package/dist/unstable/cluster/index.js.map +1 -1
- package/dist/unstable/cluster/internal/entityManager.js +25 -13
- package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
- package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
- package/dist/unstable/cluster/internal/hash.js.map +1 -1
- package/dist/unstable/cluster/internal/interruptors.js.map +1 -1
- package/dist/unstable/cluster/internal/resourceMap.js +2 -2
- package/dist/unstable/cluster/internal/resourceMap.js.map +1 -1
- package/dist/unstable/cluster/internal/resourceRef.js +17 -0
- package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
- package/dist/unstable/cluster/internal/shardLock.d.ts +2 -0
- package/dist/unstable/cluster/internal/shardLock.d.ts.map +1 -0
- package/dist/unstable/cluster/internal/shardLock.js +4 -0
- package/dist/unstable/cluster/internal/shardLock.js.map +1 -0
- package/dist/unstable/devtools/DevTools.js.map +1 -1
- package/dist/unstable/devtools/DevToolsClient.d.ts.map +1 -1
- package/dist/unstable/devtools/DevToolsClient.js +7 -2
- package/dist/unstable/devtools/DevToolsClient.js.map +1 -1
- package/dist/unstable/devtools/DevToolsSchema.d.ts +20 -20
- package/dist/unstable/devtools/DevToolsSchema.d.ts.map +1 -1
- package/dist/unstable/devtools/DevToolsSchema.js +8 -5
- package/dist/unstable/devtools/DevToolsSchema.js.map +1 -1
- package/dist/unstable/devtools/DevToolsServer.js.map +1 -1
- package/dist/unstable/devtools/index.js.map +1 -1
- package/dist/unstable/encoding/Ini.d.ts +20 -0
- package/dist/unstable/encoding/Ini.d.ts.map +1 -0
- package/dist/unstable/encoding/Ini.js +153 -0
- package/dist/unstable/encoding/Ini.js.map +1 -0
- package/dist/unstable/encoding/Msgpack.d.ts +2 -1
- package/dist/unstable/encoding/Msgpack.d.ts.map +1 -1
- package/dist/unstable/encoding/Msgpack.js +31 -19
- package/dist/unstable/encoding/Msgpack.js.map +1 -1
- package/dist/unstable/encoding/Ndjson.d.ts.map +1 -1
- package/dist/unstable/encoding/Ndjson.js +7 -1
- package/dist/unstable/encoding/Ndjson.js.map +1 -1
- package/dist/unstable/encoding/Sse.d.ts +72 -8
- package/dist/unstable/encoding/Sse.d.ts.map +1 -1
- package/dist/unstable/encoding/Sse.js +72 -31
- package/dist/unstable/encoding/Sse.js.map +1 -1
- package/dist/unstable/encoding/Toml.d.ts +19 -0
- package/dist/unstable/encoding/Toml.d.ts.map +1 -0
- package/dist/unstable/encoding/Toml.js +434 -0
- package/dist/unstable/encoding/Toml.js.map +1 -0
- package/dist/unstable/encoding/Yaml.d.ts +19 -0
- package/dist/unstable/encoding/Yaml.d.ts.map +1 -0
- package/dist/unstable/encoding/Yaml.js +461 -0
- package/dist/unstable/encoding/Yaml.js.map +1 -0
- package/dist/unstable/encoding/index.d.ts +12 -0
- package/dist/unstable/encoding/index.d.ts.map +1 -1
- package/dist/unstable/encoding/index.js +12 -0
- package/dist/unstable/encoding/index.js.map +1 -1
- package/dist/unstable/eventlog/Event.d.ts +20 -20
- package/dist/unstable/eventlog/Event.js.map +1 -1
- package/dist/unstable/eventlog/EventGroup.d.ts +4 -4
- package/dist/unstable/eventlog/EventGroup.js.map +1 -1
- package/dist/unstable/eventlog/EventJournal.d.ts +17 -17
- package/dist/unstable/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventJournal.js +27 -19
- package/dist/unstable/eventlog/EventJournal.js.map +1 -1
- package/dist/unstable/eventlog/EventLog.d.ts +3 -3
- package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLog.js +18 -14
- package/dist/unstable/eventlog/EventLog.js.map +1 -1
- package/dist/unstable/eventlog/EventLogEncryption.d.ts +8 -7
- package/dist/unstable/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogEncryption.js +16 -14
- package/dist/unstable/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/unstable/eventlog/EventLogMessage.d.ts +31 -31
- package/dist/unstable/eventlog/EventLogMessage.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogMessage.js +12 -8
- package/dist/unstable/eventlog/EventLogMessage.js.map +1 -1
- package/dist/unstable/eventlog/EventLogRemote.d.ts +15 -15
- package/dist/unstable/eventlog/EventLogRemote.js +5 -5
- package/dist/unstable/eventlog/EventLogRemote.js.map +1 -1
- package/dist/unstable/eventlog/EventLogServer.d.ts +11 -2
- package/dist/unstable/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogServer.js +45 -21
- package/dist/unstable/eventlog/EventLogServer.js.map +1 -1
- package/dist/unstable/eventlog/EventLogServerEncrypted.d.ts +4 -4
- package/dist/unstable/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogServerEncrypted.js +16 -7
- package/dist/unstable/eventlog/EventLogServerEncrypted.js.map +1 -1
- package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts +5 -5
- package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogServerUnencrypted.js +15 -7
- package/dist/unstable/eventlog/EventLogServerUnencrypted.js.map +1 -1
- package/dist/unstable/eventlog/EventLogSessionAuth.d.ts +1 -1
- package/dist/unstable/eventlog/EventLogSessionAuth.js +1 -1
- package/dist/unstable/eventlog/EventLogSessionAuth.js.map +1 -1
- package/dist/unstable/eventlog/SqlEventJournal.d.ts.map +1 -1
- package/dist/unstable/eventlog/SqlEventJournal.js +3 -6
- package/dist/unstable/eventlog/SqlEventJournal.js.map +1 -1
- package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js +1 -1
- package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
- package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js +3 -3
- package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
- package/dist/unstable/eventlog/index.js.map +1 -1
- package/dist/unstable/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
- package/dist/unstable/http/Cookies.d.ts +2 -2
- package/dist/unstable/http/Cookies.d.ts.map +1 -1
- package/dist/unstable/http/Cookies.js +54 -40
- package/dist/unstable/http/Cookies.js.map +1 -1
- package/dist/unstable/http/Etag.d.ts +1 -1
- package/dist/unstable/http/Etag.js +1 -1
- package/dist/unstable/http/Etag.js.map +1 -1
- package/dist/unstable/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/unstable/http/FetchHttpClient.js.map +1 -1
- package/dist/unstable/http/FindMyWay/internal/queryString.d.ts +11 -0
- package/dist/unstable/http/FindMyWay/internal/queryString.d.ts.map +1 -0
- package/dist/unstable/http/FindMyWay/internal/queryString.js +259 -0
- package/dist/unstable/http/FindMyWay/internal/queryString.js.map +1 -0
- package/dist/unstable/http/FindMyWay/internal/router.d.ts +2 -0
- package/dist/unstable/http/FindMyWay/internal/router.d.ts.map +1 -0
- package/dist/unstable/http/FindMyWay/internal/router.js +665 -0
- package/dist/unstable/http/FindMyWay/internal/router.js.map +1 -0
- package/dist/unstable/http/FindMyWay.d.ts +33 -8
- package/dist/unstable/http/FindMyWay.d.ts.map +1 -1
- package/dist/unstable/http/FindMyWay.js +4 -7
- package/dist/unstable/http/FindMyWay.js.map +1 -1
- package/dist/unstable/http/Headers.d.ts +2 -2
- package/dist/unstable/http/Headers.js +10 -10
- package/dist/unstable/http/Headers.js.map +1 -1
- package/dist/unstable/http/HttpBody.d.ts +5 -3
- package/dist/unstable/http/HttpBody.d.ts.map +1 -1
- package/dist/unstable/http/HttpBody.js +11 -5
- package/dist/unstable/http/HttpBody.js.map +1 -1
- package/dist/unstable/http/HttpClient.d.ts +110 -47
- package/dist/unstable/http/HttpClient.d.ts.map +1 -1
- package/dist/unstable/http/HttpClient.js +79 -36
- package/dist/unstable/http/HttpClient.js.map +1 -1
- package/dist/unstable/http/HttpClientError.js +1 -1
- package/dist/unstable/http/HttpClientError.js.map +1 -1
- package/dist/unstable/http/HttpClientRequest.d.ts +44 -0
- package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/unstable/http/HttpClientRequest.js +16 -12
- package/dist/unstable/http/HttpClientRequest.js.map +1 -1
- package/dist/unstable/http/HttpClientResponse.d.ts +4 -4
- package/dist/unstable/http/HttpClientResponse.js +3 -18
- package/dist/unstable/http/HttpClientResponse.js.map +1 -1
- package/dist/unstable/http/HttpEffect.d.ts +7 -9
- package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
- package/dist/unstable/http/HttpEffect.js +7 -8
- package/dist/unstable/http/HttpEffect.js.map +1 -1
- package/dist/unstable/http/HttpIncomingMessage.js.map +1 -1
- package/dist/unstable/http/HttpMethod.d.ts +6 -9
- package/dist/unstable/http/HttpMethod.d.ts.map +1 -1
- package/dist/unstable/http/HttpMethod.js +6 -9
- package/dist/unstable/http/HttpMethod.js.map +1 -1
- package/dist/unstable/http/HttpMiddleware.d.ts +75 -9
- package/dist/unstable/http/HttpMiddleware.d.ts.map +1 -1
- package/dist/unstable/http/HttpMiddleware.js +164 -39
- package/dist/unstable/http/HttpMiddleware.js.map +1 -1
- package/dist/unstable/http/HttpPlatform.d.ts +76 -0
- package/dist/unstable/http/HttpPlatform.d.ts.map +1 -1
- package/dist/unstable/http/HttpPlatform.js +53 -3
- package/dist/unstable/http/HttpPlatform.js.map +1 -1
- package/dist/unstable/http/HttpRouter.d.ts +91 -92
- package/dist/unstable/http/HttpRouter.d.ts.map +1 -1
- package/dist/unstable/http/HttpRouter.js +78 -79
- package/dist/unstable/http/HttpRouter.js.map +1 -1
- package/dist/unstable/http/HttpServer.d.ts +13 -13
- package/dist/unstable/http/HttpServer.js +6 -6
- package/dist/unstable/http/HttpServer.js.map +1 -1
- package/dist/unstable/http/HttpServerError.d.ts +2 -2
- package/dist/unstable/http/HttpServerError.js +2 -2
- package/dist/unstable/http/HttpServerError.js.map +1 -1
- package/dist/unstable/http/HttpServerRequest.d.ts +4 -4
- package/dist/unstable/http/HttpServerRequest.d.ts.map +1 -1
- package/dist/unstable/http/HttpServerRequest.js +23 -15
- package/dist/unstable/http/HttpServerRequest.js.map +1 -1
- package/dist/unstable/http/HttpServerRespondable.js.map +1 -1
- package/dist/unstable/http/HttpServerResponse.d.ts +22 -0
- package/dist/unstable/http/HttpServerResponse.d.ts.map +1 -1
- package/dist/unstable/http/HttpServerResponse.js +17 -5
- package/dist/unstable/http/HttpServerResponse.js.map +1 -1
- package/dist/unstable/http/HttpStaticServer.d.ts +35 -7
- package/dist/unstable/http/HttpStaticServer.d.ts.map +1 -1
- package/dist/unstable/http/HttpStaticServer.js +35 -7
- package/dist/unstable/http/HttpStaticServer.js.map +1 -1
- package/dist/unstable/http/HttpTraceContext.js.map +1 -1
- package/dist/unstable/http/Multipart.d.ts +28 -9
- package/dist/unstable/http/Multipart.d.ts.map +1 -1
- package/dist/unstable/http/Multipart.js +65 -35
- package/dist/unstable/http/Multipart.js.map +1 -1
- package/dist/unstable/http/MultipartParser/HeadersParser.d.ts +53 -0
- package/dist/unstable/http/MultipartParser/HeadersParser.d.ts.map +1 -0
- package/dist/unstable/http/MultipartParser/HeadersParser.js +14 -0
- package/dist/unstable/http/MultipartParser/HeadersParser.js.map +1 -0
- package/dist/unstable/http/MultipartParser/Search.d.ts +11 -0
- package/dist/unstable/http/MultipartParser/Search.d.ts.map +1 -0
- package/dist/unstable/http/MultipartParser/Search.js +14 -0
- package/dist/unstable/http/MultipartParser/Search.js.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/contentType.d.ts +5 -0
- package/dist/unstable/http/MultipartParser/internal/contentType.d.ts.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/contentType.js +82 -0
- package/dist/unstable/http/MultipartParser/internal/contentType.js.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/headers.d.ts +3 -0
- package/dist/unstable/http/MultipartParser/internal/headers.d.ts.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/headers.js +208 -0
- package/dist/unstable/http/MultipartParser/internal/headers.js.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/multipart.d.ts +8 -0
- package/dist/unstable/http/MultipartParser/internal/multipart.d.ts.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/multipart.js +241 -0
- package/dist/unstable/http/MultipartParser/internal/multipart.js.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/search.d.ts +5 -0
- package/dist/unstable/http/MultipartParser/internal/search.d.ts.map +1 -0
- package/dist/unstable/http/MultipartParser/internal/search.js +120 -0
- package/dist/unstable/http/MultipartParser/internal/search.js.map +1 -0
- package/dist/unstable/http/MultipartParser.d.ts +98 -0
- package/dist/unstable/http/MultipartParser.d.ts.map +1 -0
- package/dist/unstable/http/MultipartParser.js +23 -0
- package/dist/unstable/http/MultipartParser.js.map +1 -0
- package/dist/unstable/http/Template.d.ts.map +1 -1
- package/dist/unstable/http/Template.js +3 -3
- package/dist/unstable/http/Template.js.map +1 -1
- package/dist/unstable/http/Url.d.ts +33 -63
- package/dist/unstable/http/Url.d.ts.map +1 -1
- package/dist/unstable/http/Url.js +14 -28
- package/dist/unstable/http/Url.js.map +1 -1
- package/dist/unstable/http/UrlParams.d.ts +10 -18
- package/dist/unstable/http/UrlParams.d.ts.map +1 -1
- package/dist/unstable/http/UrlParams.js +26 -31
- package/dist/unstable/http/UrlParams.js.map +1 -1
- package/dist/unstable/http/index.d.ts +1 -1
- package/dist/unstable/http/index.d.ts.map +1 -1
- package/dist/unstable/http/index.js +1 -1
- package/dist/unstable/http/index.js.map +1 -1
- package/dist/unstable/http/internal/compression.d.ts +2 -0
- package/dist/unstable/http/internal/compression.d.ts.map +1 -0
- package/dist/unstable/http/internal/compression.js +155 -0
- package/dist/unstable/http/internal/compression.js.map +1 -0
- package/dist/unstable/http/internal/httpBody.d.ts +2 -0
- package/dist/unstable/http/internal/httpBody.d.ts.map +1 -0
- package/dist/unstable/http/internal/httpBody.js +10 -0
- package/dist/unstable/http/internal/httpBody.js.map +1 -0
- package/dist/unstable/http/internal/preResponseHandler.js.map +1 -1
- package/dist/unstable/httpapi/HttpApi.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApi.js +9 -9
- package/dist/unstable/httpapi/HttpApi.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.d.ts +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.js +82 -30
- package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiClient.d.ts +4 -5
- package/dist/unstable/httpapi/HttpApiClient.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiClient.js +89 -51
- package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +48 -46
- package/dist/unstable/httpapi/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiEndpoint.js +73 -16
- package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiError.d.ts +18 -18
- package/dist/unstable/httpapi/HttpApiError.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiError.js +30 -30
- package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiGroup.d.ts +15 -15
- package/dist/unstable/httpapi/HttpApiGroup.js +2 -2
- package/dist/unstable/httpapi/HttpApiGroup.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiMiddleware.d.ts +71 -24
- package/dist/unstable/httpapi/HttpApiMiddleware.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiMiddleware.js +57 -10
- package/dist/unstable/httpapi/HttpApiMiddleware.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiScalar.d.ts +0 -12
- package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiSchema.d.ts +225 -6
- package/dist/unstable/httpapi/HttpApiSchema.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiSchema.js +174 -4
- package/dist/unstable/httpapi/HttpApiSchema.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiSecurity.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiSwagger.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiTest.js.map +1 -1
- package/dist/unstable/httpapi/OpenApi.d.ts +21 -13
- package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
- package/dist/unstable/httpapi/OpenApi.js +110 -57
- package/dist/unstable/httpapi/OpenApi.js.map +1 -1
- package/dist/unstable/httpapi/index.js.map +1 -1
- package/dist/unstable/httpapi/internal/html.js.map +1 -1
- package/dist/unstable/httpapi/internal/httpApiScalar.js.map +1 -1
- package/dist/unstable/httpapi/internal/httpApiSwagger.js.map +1 -1
- package/dist/unstable/httpapi/internal/mediaType.js.map +1 -1
- package/dist/unstable/observability/Otlp.js.map +1 -1
- package/dist/unstable/observability/OtlpExporter.d.ts +71 -2
- package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpExporter.js +86 -7
- package/dist/unstable/observability/OtlpExporter.js.map +1 -1
- package/dist/unstable/observability/OtlpLogger.d.ts +4 -3
- package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpLogger.js +4 -4
- package/dist/unstable/observability/OtlpLogger.js.map +1 -1
- package/dist/unstable/observability/OtlpMetrics.d.ts +11 -4
- package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpMetrics.js +31 -15
- package/dist/unstable/observability/OtlpMetrics.js.map +1 -1
- package/dist/unstable/observability/OtlpResource.d.ts +16 -7
- package/dist/unstable/observability/OtlpResource.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpResource.js +21 -12
- package/dist/unstable/observability/OtlpResource.js.map +1 -1
- package/dist/unstable/observability/OtlpSerialization.js.map +1 -1
- package/dist/unstable/observability/OtlpTracer.d.ts +4 -3
- package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpTracer.js +3 -3
- package/dist/unstable/observability/OtlpTracer.js.map +1 -1
- package/dist/unstable/observability/PrometheusMetrics.d.ts +13 -4
- package/dist/unstable/observability/PrometheusMetrics.d.ts.map +1 -1
- package/dist/unstable/observability/PrometheusMetrics.js +10 -3
- package/dist/unstable/observability/PrometheusMetrics.js.map +1 -1
- package/dist/unstable/observability/index.js.map +1 -1
- package/dist/unstable/observability/internal/otlpEnv.js +1 -1
- package/dist/unstable/observability/internal/otlpEnv.js.map +1 -1
- package/dist/unstable/observability/internal/otlpProtobuf.js.map +1 -1
- package/dist/unstable/observability/internal/protobuf.js +3 -0
- package/dist/unstable/observability/internal/protobuf.js.map +1 -1
- package/dist/unstable/persistence/KeyValueStore.d.ts +8 -3
- package/dist/unstable/persistence/KeyValueStore.d.ts.map +1 -1
- package/dist/unstable/persistence/KeyValueStore.js +22 -13
- package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
- package/dist/unstable/persistence/Persistable.d.ts +8 -8
- package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
- package/dist/unstable/persistence/Persistable.js +2 -1
- package/dist/unstable/persistence/Persistable.js.map +1 -1
- package/dist/unstable/persistence/PersistedCache.js.map +1 -1
- package/dist/unstable/persistence/PersistedQueue.d.ts +6 -6
- package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/unstable/persistence/PersistedQueue.js +15 -15
- package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
- package/dist/unstable/persistence/Persistence.d.ts +3 -3
- package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
- package/dist/unstable/persistence/Persistence.js +108 -22
- package/dist/unstable/persistence/Persistence.js.map +1 -1
- package/dist/unstable/persistence/RateLimiter.d.ts +47 -26
- package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/unstable/persistence/RateLimiter.js +31 -47
- package/dist/unstable/persistence/RateLimiter.js.map +1 -1
- package/dist/unstable/persistence/Redis.d.ts +2 -2
- package/dist/unstable/persistence/Redis.d.ts.map +1 -1
- package/dist/unstable/persistence/Redis.js +4 -4
- package/dist/unstable/persistence/Redis.js.map +1 -1
- package/dist/unstable/persistence/index.js.map +1 -1
- package/dist/unstable/process/ChildProcess.d.ts +72 -21
- package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
- package/dist/unstable/process/ChildProcess.js +14 -5
- package/dist/unstable/process/ChildProcess.js.map +1 -1
- package/dist/unstable/process/ChildProcessSpawner.d.ts +21 -10
- package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/unstable/process/ChildProcessSpawner.js +4 -2
- package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
- package/dist/unstable/process/index.js.map +1 -1
- package/dist/unstable/reactivity/AsyncResult.d.ts +8 -8
- package/dist/unstable/reactivity/AsyncResult.d.ts.map +1 -1
- package/dist/unstable/reactivity/AsyncResult.js +14 -13
- package/dist/unstable/reactivity/AsyncResult.js.map +1 -1
- package/dist/unstable/reactivity/Atom.d.ts +131 -30
- package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
- package/dist/unstable/reactivity/Atom.js +53 -34
- package/dist/unstable/reactivity/Atom.js.map +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.d.ts +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.js +4 -1
- package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
- package/dist/unstable/reactivity/AtomRef.js.map +1 -1
- package/dist/unstable/reactivity/AtomRegistry.js +25 -4
- package/dist/unstable/reactivity/AtomRegistry.js.map +1 -1
- package/dist/unstable/reactivity/AtomRpc.d.ts +1 -1
- package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomRpc.js +4 -1
- package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
- package/dist/unstable/reactivity/Hydration.d.ts +1 -1
- package/dist/unstable/reactivity/Hydration.js +1 -1
- package/dist/unstable/reactivity/Hydration.js.map +1 -1
- package/dist/unstable/reactivity/Reactivity.js.map +1 -1
- package/dist/unstable/reactivity/index.js.map +1 -1
- package/dist/unstable/rpc/Rpc.d.ts +35 -33
- package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
- package/dist/unstable/rpc/Rpc.js +4 -2
- package/dist/unstable/rpc/Rpc.js.map +1 -1
- package/dist/unstable/rpc/RpcClient.d.ts +26 -12
- package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcClient.js +40 -22
- package/dist/unstable/rpc/RpcClient.js.map +1 -1
- package/dist/unstable/rpc/RpcClientError.js +2 -2
- package/dist/unstable/rpc/RpcClientError.js.map +1 -1
- package/dist/unstable/rpc/RpcGroup.d.ts +8 -8
- package/dist/unstable/rpc/RpcGroup.js +1 -1
- package/dist/unstable/rpc/RpcGroup.js.map +1 -1
- package/dist/unstable/rpc/RpcMessage.d.ts +31 -30
- package/dist/unstable/rpc/RpcMessage.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcMessage.js +6 -6
- package/dist/unstable/rpc/RpcMessage.js.map +1 -1
- package/dist/unstable/rpc/RpcMiddleware.d.ts +10 -10
- package/dist/unstable/rpc/RpcMiddleware.js +1 -1
- package/dist/unstable/rpc/RpcMiddleware.js.map +1 -1
- package/dist/unstable/rpc/RpcSchema.d.ts +4 -4
- package/dist/unstable/rpc/RpcSchema.js +3 -3
- package/dist/unstable/rpc/RpcSchema.js.map +1 -1
- package/dist/unstable/rpc/RpcSerialization.d.ts +58 -7
- package/dist/unstable/rpc/RpcSerialization.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcSerialization.js +177 -96
- package/dist/unstable/rpc/RpcSerialization.js.map +1 -1
- package/dist/unstable/rpc/RpcServer.d.ts +13 -13
- package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcServer.js +20 -15
- package/dist/unstable/rpc/RpcServer.js.map +1 -1
- package/dist/unstable/rpc/RpcTest.js.map +1 -1
- package/dist/unstable/rpc/RpcWorker.d.ts +5 -5
- package/dist/unstable/rpc/RpcWorker.js +4 -4
- package/dist/unstable/rpc/RpcWorker.js.map +1 -1
- package/dist/unstable/rpc/Utils.js.map +1 -1
- package/dist/unstable/rpc/index.js.map +1 -1
- package/dist/unstable/schema/Model.d.ts +53 -51
- package/dist/unstable/schema/Model.d.ts.map +1 -1
- package/dist/unstable/schema/Model.js +35 -33
- package/dist/unstable/schema/Model.js.map +1 -1
- package/dist/unstable/schema/VariantSchema.d.ts +11 -12
- package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
- package/dist/unstable/schema/VariantSchema.js +28 -17
- package/dist/unstable/schema/VariantSchema.js.map +1 -1
- package/dist/unstable/schema/index.js.map +1 -1
- package/dist/unstable/socket/Socket.d.ts +12 -4
- package/dist/unstable/socket/Socket.d.ts.map +1 -1
- package/dist/unstable/socket/Socket.js +38 -17
- package/dist/unstable/socket/Socket.js.map +1 -1
- package/dist/unstable/socket/SocketServer.js.map +1 -1
- package/dist/unstable/socket/index.js.map +1 -1
- package/dist/unstable/sql/Migrator.d.ts +9 -1
- package/dist/unstable/sql/Migrator.d.ts.map +1 -1
- package/dist/unstable/sql/Migrator.js +15 -2
- package/dist/unstable/sql/Migrator.js.map +1 -1
- package/dist/unstable/sql/SqlClient.d.ts +1 -1
- package/dist/unstable/sql/SqlClient.d.ts.map +1 -1
- package/dist/unstable/sql/SqlClient.js +8 -4
- package/dist/unstable/sql/SqlClient.js.map +1 -1
- package/dist/unstable/sql/SqlConnection.js.map +1 -1
- package/dist/unstable/sql/SqlError.d.ts +2 -2
- package/dist/unstable/sql/SqlError.js +15 -15
- package/dist/unstable/sql/SqlError.js.map +1 -1
- package/dist/unstable/sql/SqlModel.d.ts +2 -2
- package/dist/unstable/sql/SqlModel.js +2 -2
- package/dist/unstable/sql/SqlModel.js.map +1 -1
- package/dist/unstable/sql/SqlResolver.d.ts +5 -5
- package/dist/unstable/sql/SqlResolver.d.ts.map +1 -1
- package/dist/unstable/sql/SqlResolver.js +30 -24
- package/dist/unstable/sql/SqlResolver.js.map +1 -1
- package/dist/unstable/sql/SqlSchema.js.map +1 -1
- package/dist/unstable/sql/SqlStream.js.map +1 -1
- package/dist/unstable/sql/Statement.d.ts +6 -6
- package/dist/unstable/sql/Statement.d.ts.map +1 -1
- package/dist/unstable/sql/Statement.js +30 -27
- package/dist/unstable/sql/Statement.js.map +1 -1
- package/dist/unstable/sql/index.js.map +1 -1
- package/dist/unstable/workers/Transferable.d.ts +1 -1
- package/dist/unstable/workers/Transferable.js +1 -1
- package/dist/unstable/workers/Transferable.js.map +1 -1
- package/dist/unstable/workers/Worker.d.ts +2 -2
- package/dist/unstable/workers/Worker.d.ts.map +1 -1
- package/dist/unstable/workers/Worker.js +13 -14
- package/dist/unstable/workers/Worker.js.map +1 -1
- package/dist/unstable/workers/WorkerError.d.ts +7 -7
- package/dist/unstable/workers/WorkerError.js +11 -11
- package/dist/unstable/workers/WorkerError.js.map +1 -1
- package/dist/unstable/workers/WorkerRunner.d.ts +1 -1
- package/dist/unstable/workers/WorkerRunner.js +1 -1
- package/dist/unstable/workers/WorkerRunner.js.map +1 -1
- package/dist/unstable/workers/index.js.map +1 -1
- package/dist/unstable/workflow/Activity.d.ts +2 -2
- package/dist/unstable/workflow/Activity.js +2 -2
- package/dist/unstable/workflow/Activity.js.map +1 -1
- package/dist/unstable/workflow/DurableClock.d.ts +1 -1
- package/dist/unstable/workflow/DurableClock.js +1 -1
- package/dist/unstable/workflow/DurableClock.js.map +1 -1
- package/dist/unstable/workflow/DurableDeferred.d.ts +10 -10
- package/dist/unstable/workflow/DurableDeferred.d.ts.map +1 -1
- package/dist/unstable/workflow/DurableDeferred.js +13 -8
- package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
- package/dist/unstable/workflow/DurableQueue.d.ts +22 -20
- package/dist/unstable/workflow/DurableQueue.d.ts.map +1 -1
- package/dist/unstable/workflow/DurableQueue.js +22 -20
- package/dist/unstable/workflow/DurableQueue.js.map +1 -1
- package/dist/unstable/workflow/Workflow.d.ts +21 -21
- package/dist/unstable/workflow/Workflow.d.ts.map +1 -1
- package/dist/unstable/workflow/Workflow.js +13 -14
- package/dist/unstable/workflow/Workflow.js.map +1 -1
- package/dist/unstable/workflow/WorkflowEngine.d.ts +26 -3
- package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/unstable/workflow/WorkflowEngine.js +72 -6
- package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
- package/dist/unstable/workflow/WorkflowProxy.d.ts +4 -2
- package/dist/unstable/workflow/WorkflowProxy.d.ts.map +1 -1
- package/dist/unstable/workflow/WorkflowProxy.js +4 -2
- package/dist/unstable/workflow/WorkflowProxy.js.map +1 -1
- package/dist/unstable/workflow/WorkflowProxyServer.js.map +1 -1
- package/dist/unstable/workflow/index.js.map +1 -1
- package/dist/unstable/workflow/internal/crypto.js.map +1 -1
- package/package.json +10 -14
- package/src/Array.ts +1068 -1070
- package/src/BigDecimal.ts +433 -756
- package/src/BigInt.ts +213 -269
- package/src/Boolean.ts +146 -188
- package/src/Brand.ts +4 -4
- package/src/Cache.ts +469 -851
- package/src/Cause.ts +167 -277
- package/src/Channel.ts +982 -831
- package/src/ChannelSchema.ts +1 -1
- package/src/Chunk.ts +841 -1181
- package/src/Clock.ts +181 -49
- package/src/Combiner.ts +20 -33
- package/src/Config.ts +642 -335
- package/src/ConfigProvider.ts +267 -135
- package/src/Console.ts +289 -39
- package/src/Context.ts +323 -404
- package/src/Cron.ts +271 -219
- package/src/Crypto.ts +30 -23
- package/src/Data.ts +63 -82
- package/src/DateTime.ts +564 -660
- package/src/Deferred.ts +259 -258
- package/src/Duration.ts +244 -311
- package/src/Effect.ts +3215 -3394
- package/src/Encoding.ts +22 -40
- package/src/Equal.ts +59 -41
- package/src/Equivalence.ts +103 -105
- package/src/ErrorReporter.ts +51 -27
- package/src/ExecutionPlan.ts +91 -56
- package/src/Exit.ts +116 -192
- package/src/Fiber.ts +82 -149
- package/src/FiberHandle.ts +155 -107
- package/src/FiberMap.ts +225 -174
- package/src/FiberSet.ts +125 -83
- package/src/FileSystem.ts +156 -264
- package/src/Filter.ts +61 -33
- package/src/Formatter.ts +69 -76
- package/src/Function.ts +119 -151
- package/src/Graph.ts +416 -770
- package/src/HKT.ts +12 -6
- package/src/Hash.ts +52 -83
- package/src/HashMap.ts +319 -411
- package/src/HashRing.ts +1 -0
- package/src/HashSet.ts +177 -284
- package/src/Inspectable.ts +22 -20
- package/src/Iterable.ts +633 -797
- package/src/JsonPatch.ts +60 -113
- package/src/JsonPointer.ts +8 -8
- package/src/JsonSchema.ts +408 -251
- package/src/Latch.ts +23 -35
- package/src/Layer.ts +366 -265
- package/src/LayerMap.ts +49 -29
- package/src/LayerRef.ts +6 -2
- package/src/LogLevel.ts +114 -214
- package/src/Logger.ts +348 -700
- package/src/ManagedRuntime.ts +20 -5
- package/src/Match.ts +217 -252
- package/src/Metric.ts +520 -1092
- package/src/MutableHashMap.ts +218 -255
- package/src/MutableHashSet.ts +84 -89
- package/src/MutableList.ts +77 -370
- package/src/MutableRef.ts +420 -243
- package/src/Newtype.ts +21 -14
- package/src/NonEmptyIterable.ts +7 -137
- package/src/Number.ts +196 -233
- package/src/Optic.ts +303 -441
- package/src/Option.ts +449 -813
- package/src/Order.ts +109 -109
- package/src/Ordering.ts +20 -23
- package/src/PartitionedSemaphore.ts +1 -4
- package/src/Path.ts +38 -41
- package/src/Pipeable.ts +6 -5
- package/src/PlatformError.ts +4 -4
- package/src/Pool.ts +4 -2
- package/src/Predicate.ts +200 -181
- package/src/PrimaryKey.ts +7 -7
- package/src/PubSub.ts +526 -552
- package/src/Pull.ts +24 -18
- package/src/Queue.ts +204 -165
- package/src/Random.ts +49 -74
- package/src/RcMap.ts +121 -63
- package/src/RcRef.ts +24 -13
- package/src/Record.ts +387 -487
- package/src/Redactable.ts +10 -3
- package/src/Redacted.ts +25 -25
- package/src/Reducer.ts +8 -15
- package/src/Ref.ts +221 -361
- package/src/References.ts +102 -214
- package/src/RegExp.ts +10 -14
- package/src/Request.ts +36 -28
- package/src/RequestResolver.ts +202 -91
- package/src/Result.ts +314 -485
- package/src/Runtime.ts +50 -75
- package/src/Schedule.ts +311 -1737
- package/src/Scheduler.ts +20 -7
- package/src/Schema.ts +3475 -1913
- package/src/SchemaAST.ts +902 -573
- package/src/SchemaGetter.ts +351 -233
- package/src/SchemaIssue.ts +367 -334
- package/src/SchemaParser.ts +254 -148
- package/src/SchemaRepresentation.ts +732 -3414
- package/src/SchemaTransformation.ts +186 -97
- package/src/Scope.ts +123 -151
- package/src/ScopedCache.ts +1 -1
- package/src/ScopedRef.ts +6 -4
- package/src/Semaphore.ts +157 -54
- package/src/Sink.ts +129 -114
- package/src/Stdio.ts +24 -5
- package/src/Stream.ts +2745 -3173
- package/src/String.ts +275 -312
- package/src/Struct.ts +114 -118
- package/src/SubscriptionRef.ts +284 -252
- package/src/Symbol.ts +3 -3
- package/src/SynchronizedRef.ts +1 -1
- package/src/Terminal.ts +3 -3
- package/src/Tracer.ts +102 -55
- package/src/Trie.ts +287 -679
- package/src/Tuple.ts +99 -131
- package/src/TxChunk.ts +201 -121
- package/src/TxDeferred.ts +62 -46
- package/src/TxHashMap.ts +645 -799
- package/src/TxHashSet.ts +443 -356
- package/src/TxPriorityQueue.ts +130 -98
- package/src/TxPubSub.ts +107 -80
- package/src/TxQueue.ts +215 -184
- package/src/TxReentrantLock.ts +136 -101
- package/src/TxRef.ts +51 -32
- package/src/TxSemaphore.ts +129 -95
- package/src/TxSubscriptionRef.ts +97 -70
- package/src/Types.ts +127 -70
- package/src/Unify.ts +45 -65
- package/src/Utils.ts +23 -16
- package/src/index.ts +0 -10
- package/src/internal/core.ts +6 -5
- package/src/internal/dateTime.ts +7 -1
- package/src/internal/effect.ts +304 -134
- package/src/internal/executionPlan.ts +106 -10
- package/src/internal/hashMap.ts +20 -14
- package/src/internal/matcher.ts +3 -3
- package/src/internal/persistence.ts +2 -0
- package/src/internal/rcRef.ts +24 -16
- package/src/internal/record.ts +11 -7
- package/src/internal/references.ts +3 -7
- package/src/internal/schedule.ts +4 -4
- package/src/internal/schema/annotations.ts +48 -1
- package/src/internal/schema/fromJsonSchemaDocument.ts +977 -0
- package/src/internal/schema/fromRepresentation.ts +339 -0
- package/src/internal/schema/parser.ts +22 -0
- package/src/internal/schema/schema.ts +46 -63
- package/src/internal/schema/{arbitrary.ts → toArbitrary.ts} +9 -81
- package/src/internal/schema/toCodeDocument.ts +572 -0
- package/src/internal/schema/{equivalence.ts → toEquivalence.ts} +12 -7
- package/src/internal/schema/toJsonSchemaDocument.ts +549 -0
- package/src/internal/schema/toRepresentation.ts +404 -0
- package/src/internal/stackTraceLimit.ts +3 -7
- package/src/internal/trie.ts +21 -12
- package/src/testing/FastCheck.ts +8 -7
- package/src/testing/TestClock.ts +86 -32
- package/src/testing/TestConsole.ts +32 -31
- package/src/testing/TestSchema.ts +40 -40
- package/src/unstable/ai/AiError.ts +119 -141
- package/src/unstable/ai/AnthropicStructuredOutput.ts +103 -334
- package/src/unstable/ai/Chat.ts +133 -98
- package/src/unstable/ai/EmbeddingModel.ts +1 -1
- package/src/unstable/ai/IdGenerator.ts +32 -28
- package/src/unstable/ai/LanguageModel.ts +141 -97
- package/src/unstable/ai/McpProtocol.ts +48 -0
- package/src/unstable/ai/McpSchema.ts +92 -81
- package/src/unstable/ai/McpServer.ts +1057 -303
- package/src/unstable/ai/Model.ts +9 -20
- package/src/unstable/ai/OpenAiStructuredOutput.ts +231 -396
- package/src/unstable/ai/Prompt.ts +212 -63
- package/src/unstable/ai/Response.ts +52 -38
- package/src/unstable/ai/Telemetry.ts +46 -13
- package/src/unstable/ai/Tokenizer.ts +14 -3
- package/src/unstable/ai/Tool.ts +81 -48
- package/src/unstable/ai/Toolkit.ts +45 -15
- package/src/unstable/ai/index.ts +5 -0
- package/src/unstable/ai/internal/codec-transformer.ts +13 -7
- package/src/unstable/ai/internal/mcpProtocol.ts +85 -0
- package/src/unstable/ai/internal/mcpProtocolRegistry.ts +70 -0
- package/src/unstable/ai/internal/structured-output.ts +453 -0
- package/src/unstable/cli/Argument.ts +279 -72
- package/src/unstable/cli/CliError.ts +159 -91
- package/src/unstable/cli/CliOutput.ts +44 -58
- package/src/unstable/cli/Command.ts +764 -124
- package/src/unstable/cli/Flag.ts +418 -138
- package/src/unstable/cli/GlobalFlag.ts +1 -1
- package/src/unstable/cli/HelpDoc.ts +12 -4
- package/src/unstable/cli/Param.ts +336 -100
- package/src/unstable/cli/Primitive.ts +383 -156
- package/src/unstable/cli/Prompt.ts +64 -34
- package/src/unstable/cli/internal/ansi.ts +2 -2
- package/src/unstable/cli/internal/command.ts +28 -15
- package/src/unstable/cli/internal/completions/bash.ts +59 -9
- package/src/unstable/cli/internal/completions/descriptor.ts +14 -20
- package/src/unstable/cli/internal/completions/fish.ts +5 -7
- package/src/unstable/cli/internal/config.ts +8 -10
- package/src/unstable/cli/internal/help.ts +4 -2
- package/src/unstable/cli/internal/lexer.ts +8 -2
- package/src/unstable/cli/internal/parser.ts +5 -5
- package/src/unstable/cli/internal/wizard.ts +2 -2
- package/src/unstable/cluster/ClusterError.ts +7 -7
- package/src/unstable/cluster/ClusterSchema.ts +8 -8
- package/src/unstable/cluster/ClusterWorkflowEngine.ts +36 -20
- package/src/unstable/cluster/Entity.ts +23 -19
- package/src/unstable/cluster/EntityProxy.ts +16 -7
- package/src/unstable/cluster/EntityResource.ts +2 -2
- package/src/unstable/cluster/Envelope.ts +5 -4
- package/src/unstable/cluster/HttpRunner.ts +6 -4
- package/src/unstable/cluster/Message.ts +9 -9
- package/src/unstable/cluster/MessageStorage.ts +24 -20
- package/src/unstable/cluster/Reply.ts +26 -7
- package/src/unstable/cluster/Runner.ts +1 -1
- package/src/unstable/cluster/RunnerAddress.ts +1 -1
- package/src/unstable/cluster/RunnerHealth.ts +1 -1
- package/src/unstable/cluster/RunnerServer.ts +45 -18
- package/src/unstable/cluster/RunnerStorage.ts +11 -9
- package/src/unstable/cluster/Runners.ts +48 -26
- package/src/unstable/cluster/ShardId.ts +1 -1
- package/src/unstable/cluster/Sharding.ts +223 -55
- package/src/unstable/cluster/ShardingConfig.ts +8 -4
- package/src/unstable/cluster/SingleRunner.ts +4 -2
- package/src/unstable/cluster/SingletonAddress.ts +1 -1
- package/src/unstable/cluster/Snowflake.ts +8 -8
- package/src/unstable/cluster/SqlMessageStorage.ts +84 -36
- package/src/unstable/cluster/SqlRunnerStorage.ts +223 -133
- package/src/unstable/cluster/internal/entityManager.ts +43 -26
- package/src/unstable/cluster/internal/resourceMap.ts +5 -2
- package/src/unstable/cluster/internal/resourceRef.ts +27 -5
- package/src/unstable/cluster/internal/shardLock.ts +9 -0
- package/src/unstable/devtools/DevToolsClient.ts +3 -2
- package/src/unstable/devtools/DevToolsSchema.ts +10 -5
- package/src/unstable/encoding/Ini.ts +174 -0
- package/src/unstable/encoding/Msgpack.ts +61 -40
- package/src/unstable/encoding/Ndjson.ts +9 -1
- package/src/unstable/encoding/Sse.ts +109 -37
- package/src/unstable/encoding/Toml.ts +504 -0
- package/src/unstable/encoding/Yaml.ts +541 -0
- package/src/unstable/encoding/index.ts +15 -0
- package/src/unstable/eventlog/Event.ts +20 -20
- package/src/unstable/eventlog/EventGroup.ts +4 -4
- package/src/unstable/eventlog/EventJournal.ts +30 -22
- package/src/unstable/eventlog/EventLog.ts +24 -14
- package/src/unstable/eventlog/EventLogEncryption.ts +17 -18
- package/src/unstable/eventlog/EventLogMessage.ts +15 -9
- package/src/unstable/eventlog/EventLogRemote.ts +5 -5
- package/src/unstable/eventlog/EventLogServer.ts +41 -7
- package/src/unstable/eventlog/EventLogServerEncrypted.ts +15 -7
- package/src/unstable/eventlog/EventLogServerUnencrypted.ts +15 -7
- package/src/unstable/eventlog/EventLogSessionAuth.ts +1 -1
- package/src/unstable/eventlog/SqlEventJournal.ts +8 -6
- package/src/unstable/eventlog/SqlEventLogServerEncrypted.ts +1 -1
- package/src/unstable/eventlog/SqlEventLogServerUnencrypted.ts +6 -3
- package/src/unstable/http/Cookies.ts +64 -45
- package/src/unstable/http/Etag.ts +1 -1
- package/src/unstable/http/FetchHttpClient.ts +3 -1
- package/src/unstable/http/FindMyWay/internal/queryString.ts +420 -0
- package/src/unstable/http/FindMyWay/internal/router.ts +950 -0
- package/src/unstable/http/FindMyWay.ts +65 -6
- package/src/unstable/http/Headers.ts +10 -10
- package/src/unstable/http/HttpBody.ts +20 -5
- package/src/unstable/http/HttpClient.ts +215 -78
- package/src/unstable/http/HttpClientError.ts +1 -1
- package/src/unstable/http/HttpClientRequest.ts +59 -12
- package/src/unstable/http/HttpClientResponse.ts +5 -21
- package/src/unstable/http/HttpEffect.ts +20 -19
- package/src/unstable/http/HttpMethod.ts +6 -9
- package/src/unstable/http/HttpMiddleware.ts +202 -39
- package/src/unstable/http/HttpPlatform.ts +129 -6
- package/src/unstable/http/HttpRouter.ts +109 -101
- package/src/unstable/http/HttpServer.ts +13 -13
- package/src/unstable/http/HttpServerError.ts +2 -2
- package/src/unstable/http/HttpServerRequest.ts +31 -17
- package/src/unstable/http/HttpServerResponse.ts +38 -6
- package/src/unstable/http/HttpStaticServer.ts +35 -7
- package/src/unstable/http/Multipart.ts +67 -36
- package/src/unstable/http/MultipartParser/HeadersParser.ts +68 -0
- package/src/unstable/http/MultipartParser/Search.ts +17 -0
- package/src/unstable/http/MultipartParser/internal/contentType.ts +103 -0
- package/src/unstable/http/MultipartParser/internal/headers.ts +244 -0
- package/src/unstable/http/MultipartParser/internal/multipart.ts +279 -0
- package/src/unstable/http/MultipartParser/internal/search.ts +167 -0
- package/src/unstable/http/MultipartParser.ts +115 -0
- package/src/unstable/http/Template.ts +7 -6
- package/src/unstable/http/Url.ts +33 -63
- package/src/unstable/http/UrlParams.ts +27 -32
- package/src/unstable/http/index.ts +1 -1
- package/src/unstable/http/internal/compression.ts +196 -0
- package/src/unstable/http/internal/httpBody.ts +15 -0
- package/src/unstable/httpapi/HttpApi.ts +10 -11
- package/src/unstable/httpapi/HttpApiBuilder.ts +154 -33
- package/src/unstable/httpapi/HttpApiClient.ts +142 -61
- package/src/unstable/httpapi/HttpApiEndpoint.ts +159 -71
- package/src/unstable/httpapi/HttpApiError.ts +46 -52
- package/src/unstable/httpapi/HttpApiGroup.ts +17 -17
- package/src/unstable/httpapi/HttpApiMiddleware.ts +71 -24
- package/src/unstable/httpapi/HttpApiScalar.ts +0 -12
- package/src/unstable/httpapi/HttpApiSchema.ts +359 -6
- package/src/unstable/httpapi/OpenApi.ts +153 -62
- package/src/unstable/observability/OtlpExporter.ts +130 -12
- package/src/unstable/observability/OtlpLogger.ts +8 -6
- package/src/unstable/observability/OtlpMetrics.ts +42 -21
- package/src/unstable/observability/OtlpResource.ts +26 -17
- package/src/unstable/observability/OtlpTracer.ts +9 -5
- package/src/unstable/observability/PrometheusMetrics.ts +13 -4
- package/src/unstable/observability/internal/otlpEnv.ts +1 -1
- package/src/unstable/observability/internal/protobuf.ts +3 -0
- package/src/unstable/persistence/KeyValueStore.ts +72 -49
- package/src/unstable/persistence/Persistable.ts +11 -10
- package/src/unstable/persistence/PersistedQueue.ts +18 -15
- package/src/unstable/persistence/Persistence.ts +153 -26
- package/src/unstable/persistence/RateLimiter.ts +79 -45
- package/src/unstable/persistence/Redis.ts +5 -5
- package/src/unstable/process/ChildProcess.ts +72 -21
- package/src/unstable/process/ChildProcessSpawner.ts +22 -11
- package/src/unstable/reactivity/AsyncResult.ts +23 -18
- package/src/unstable/reactivity/Atom.ts +161 -47
- package/src/unstable/reactivity/AtomHttpApi.ts +5 -4
- package/src/unstable/reactivity/AtomRegistry.ts +25 -4
- package/src/unstable/reactivity/AtomRpc.ts +5 -4
- package/src/unstable/reactivity/Hydration.ts +1 -1
- package/src/unstable/rpc/Rpc.ts +35 -33
- package/src/unstable/rpc/RpcClient.ts +65 -29
- package/src/unstable/rpc/RpcClientError.ts +2 -2
- package/src/unstable/rpc/RpcGroup.ts +8 -8
- package/src/unstable/rpc/RpcMessage.ts +31 -30
- package/src/unstable/rpc/RpcMiddleware.ts +10 -10
- package/src/unstable/rpc/RpcSchema.ts +4 -4
- package/src/unstable/rpc/RpcSerialization.ts +167 -68
- package/src/unstable/rpc/RpcServer.ts +22 -17
- package/src/unstable/rpc/RpcWorker.ts +5 -5
- package/src/unstable/schema/Model.ts +52 -50
- package/src/unstable/schema/VariantSchema.ts +51 -43
- package/src/unstable/socket/Socket.ts +42 -19
- package/src/unstable/sql/Migrator.ts +22 -9
- package/src/unstable/sql/SqlClient.ts +64 -56
- package/src/unstable/sql/SqlError.ts +15 -15
- package/src/unstable/sql/SqlModel.ts +2 -2
- package/src/unstable/sql/SqlResolver.ts +41 -31
- package/src/unstable/sql/Statement.ts +44 -37
- package/src/unstable/workers/Transferable.ts +1 -1
- package/src/unstable/workers/Worker.ts +15 -16
- package/src/unstable/workers/WorkerError.ts +12 -12
- package/src/unstable/workers/WorkerRunner.ts +1 -1
- package/src/unstable/workflow/Activity.ts +2 -2
- package/src/unstable/workflow/DurableClock.ts +1 -1
- package/src/unstable/workflow/DurableDeferred.ts +18 -13
- package/src/unstable/workflow/DurableQueue.ts +22 -20
- package/src/unstable/workflow/Workflow.ts +23 -26
- package/src/unstable/workflow/WorkflowEngine.ts +111 -8
- package/src/unstable/workflow/WorkflowProxy.ts +4 -2
- package/dist/SchemaError.d.ts +0 -53
- package/dist/SchemaError.d.ts.map +0 -1
- package/dist/SchemaError.js +0 -61
- package/dist/SchemaError.js.map +0 -1
- package/dist/SchemaUtils.d.ts +0 -28
- package/dist/SchemaUtils.d.ts.map +0 -1
- package/dist/SchemaUtils.js +0 -45
- package/dist/SchemaUtils.js.map +0 -1
- package/dist/internal/schema/arbitrary.d.ts +0 -5
- package/dist/internal/schema/arbitrary.d.ts.map +0 -1
- package/dist/internal/schema/arbitrary.js.map +0 -1
- package/dist/internal/schema/equivalence.d.ts +0 -2
- package/dist/internal/schema/equivalence.d.ts.map +0 -1
- package/dist/internal/schema/equivalence.js.map +0 -1
- package/dist/internal/schema/representation.d.ts +0 -2
- package/dist/internal/schema/representation.d.ts.map +0 -1
- package/dist/internal/schema/representation.js +0 -865
- package/dist/internal/schema/representation.js.map +0 -1
- package/dist/internal/version.d.ts +0 -3
- package/dist/internal/version.d.ts.map +0 -1
- package/dist/internal/version.js +0 -2
- package/dist/internal/version.js.map +0 -1
- package/dist/unstable/http/Multipasta/HeadersParser.d.ts +0 -14
- package/dist/unstable/http/Multipasta/HeadersParser.d.ts.map +0 -1
- package/dist/unstable/http/Multipasta/HeadersParser.js +0 -14
- package/dist/unstable/http/Multipasta/HeadersParser.js.map +0 -1
- package/dist/unstable/http/Multipasta/Node.d.ts +0 -14
- package/dist/unstable/http/Multipasta/Node.d.ts.map +0 -1
- package/dist/unstable/http/Multipasta/Node.js +0 -14
- package/dist/unstable/http/Multipasta/Node.js.map +0 -1
- package/dist/unstable/http/Multipasta/Search.d.ts +0 -14
- package/dist/unstable/http/Multipasta/Search.d.ts.map +0 -1
- package/dist/unstable/http/Multipasta/Search.js +0 -14
- package/dist/unstable/http/Multipasta/Search.js.map +0 -1
- package/dist/unstable/http/Multipasta/Web.d.ts +0 -14
- package/dist/unstable/http/Multipasta/Web.d.ts.map +0 -1
- package/dist/unstable/http/Multipasta/Web.js +0 -14
- package/dist/unstable/http/Multipasta/Web.js.map +0 -1
- package/dist/unstable/http/Multipasta.d.ts +0 -15
- package/dist/unstable/http/Multipasta.d.ts.map +0 -1
- package/dist/unstable/http/Multipasta.js +0 -15
- package/dist/unstable/http/Multipasta.js.map +0 -1
- package/src/SchemaError.ts +0 -64
- package/src/SchemaUtils.ts +0 -51
- package/src/internal/schema/representation.ts +0 -795
- package/src/internal/version.ts +0 -2
- package/src/unstable/http/Multipasta/HeadersParser.ts +0 -14
- package/src/unstable/http/Multipasta/Node.ts +0 -14
- package/src/unstable/http/Multipasta/Search.ts +0 -14
- package/src/unstable/http/Multipasta/Web.ts +0 -14
- package/src/unstable/http/Multipasta.ts +0 -15
package/src/SchemaAST.ts
CHANGED
|
@@ -13,16 +13,15 @@
|
|
|
13
13
|
|
|
14
14
|
import * as Arr from "./Array.ts"
|
|
15
15
|
import * as Cause from "./Cause.ts"
|
|
16
|
-
import type * as Combiner from "./Combiner.ts"
|
|
17
16
|
import * as Effect from "./Effect.ts"
|
|
18
17
|
import * as Exit from "./Exit.ts"
|
|
19
18
|
import { format, formatPropertyKey } from "./Formatter.ts"
|
|
20
|
-
import { memoize } from "./Function.ts"
|
|
19
|
+
import { identity, memoize, memoizeIdempotent } from "./Function.ts"
|
|
21
20
|
import { effectIsExit, iterateEager } from "./internal/effect.ts"
|
|
22
|
-
import * as
|
|
21
|
+
import * as InternalRecord from "./internal/record.ts"
|
|
23
22
|
import * as InternalAnnotations from "./internal/schema/annotations.ts"
|
|
24
23
|
import * as InternalSchemaCause from "./internal/schema/cause.ts"
|
|
25
|
-
import * as
|
|
24
|
+
import * as InternalParser from "./internal/schema/parser.ts"
|
|
26
25
|
import * as Pipeable from "./Pipeable.ts"
|
|
27
26
|
import * as Predicate from "./Predicate.ts"
|
|
28
27
|
import * as Result from "./Result.ts"
|
|
@@ -451,6 +450,8 @@ export type Encoding = readonly [Link, ...Array<Link>]
|
|
|
451
450
|
* transformations.
|
|
452
451
|
* - `concurrency` — maximum number of async parse effects to run concurrently;
|
|
453
452
|
* defaults to `1`, or use `"unbounded"`.
|
|
453
|
+
* - `reportInput` — includes rejected input values in value-bearing schema
|
|
454
|
+
* issues.
|
|
454
455
|
*
|
|
455
456
|
* @category options
|
|
456
457
|
* @since 3.10.0
|
|
@@ -517,6 +518,35 @@ export interface ParseOptions {
|
|
|
517
518
|
* @default 1
|
|
518
519
|
*/
|
|
519
520
|
readonly concurrency?: number | "unbounded" | undefined
|
|
521
|
+
|
|
522
|
+
/**
|
|
523
|
+
* Whether schema issues should retain and report rejected input values.
|
|
524
|
+
*
|
|
525
|
+
* **Details**
|
|
526
|
+
*
|
|
527
|
+
* When enabled, value-bearing issues created by the parser expose an `input`
|
|
528
|
+
* field. Built-in formatters may include reported input in default messages.
|
|
529
|
+
* The input is retained by reference rather than copied.
|
|
530
|
+
*
|
|
531
|
+
* **Gotchas**
|
|
532
|
+
*
|
|
533
|
+
* Enabling this option can retain or disclose secrets, personally
|
|
534
|
+
* identifiable information, and large object graphs. The `input` field is
|
|
535
|
+
* enumerable and may be included by object enumeration, spread, or
|
|
536
|
+
* serialization. Disabling it on a nested schema does not redact that value
|
|
537
|
+
* from an ancestor issue whose input reporting remains enabled. Issues
|
|
538
|
+
* returned directly by user-defined declarations, checks, transformations,
|
|
539
|
+
* and middleware are not modified; their authors decide whether to retain an
|
|
540
|
+
* input. To respect this option, pass the callback's input and parse options
|
|
541
|
+
* directly to a value-bearing issue constructor. Custom messages and
|
|
542
|
+
* annotations remain the caller's responsibility regardless of this option.
|
|
543
|
+
* Formatting an issue with `SchemaIssue.makeFormatterDefault()`, reading
|
|
544
|
+
* `SchemaError.message`, or formatting a Standard Schema failure can disclose
|
|
545
|
+
* retained input.
|
|
546
|
+
*
|
|
547
|
+
* @default false
|
|
548
|
+
*/
|
|
549
|
+
readonly reportInput?: boolean | undefined
|
|
520
550
|
}
|
|
521
551
|
|
|
522
552
|
/** @internal */
|
|
@@ -533,7 +563,7 @@ export const defaultParseOptions: ParseOptions = {}
|
|
|
533
563
|
*
|
|
534
564
|
* - `isOptional` — the property key may be absent from the input.
|
|
535
565
|
* - `isMutable` — the property is `readonly` when `false`.
|
|
536
|
-
* - `
|
|
566
|
+
* - `constructorDefault` — a {@link Link} applied during construction to
|
|
537
567
|
* supply missing values.
|
|
538
568
|
* - `annotations` — key-level annotations (e.g. description of the key
|
|
539
569
|
* itself).
|
|
@@ -547,19 +577,19 @@ export class Context {
|
|
|
547
577
|
readonly isOptional: boolean
|
|
548
578
|
readonly isMutable: boolean
|
|
549
579
|
/** Used for constructor default values (e.g. `withConstructorDefault` API) */
|
|
550
|
-
readonly
|
|
580
|
+
readonly constructorDefault: Link | undefined
|
|
551
581
|
readonly annotations: Schema.Annotations.Key<unknown> | undefined
|
|
552
582
|
|
|
553
583
|
constructor(
|
|
554
584
|
isOptional: boolean,
|
|
555
585
|
isMutable: boolean,
|
|
556
586
|
/** Used for constructor default values (e.g. `withConstructorDefault` API) */
|
|
557
|
-
|
|
587
|
+
constructorDefault: Link | undefined = undefined,
|
|
558
588
|
annotations: Schema.Annotations.Key<unknown> | undefined = undefined
|
|
559
589
|
) {
|
|
560
590
|
this.isOptional = isOptional
|
|
561
591
|
this.isMutable = isMutable
|
|
562
|
-
this.
|
|
592
|
+
this.constructorDefault = constructorDefault
|
|
563
593
|
this.annotations = annotations
|
|
564
594
|
}
|
|
565
595
|
}
|
|
@@ -672,10 +702,10 @@ export class Declaration extends Base {
|
|
|
672
702
|
}
|
|
673
703
|
/** @internal */
|
|
674
704
|
getParser(): SchemaParser.Parser {
|
|
675
|
-
|
|
676
|
-
return (
|
|
677
|
-
if (
|
|
678
|
-
return
|
|
705
|
+
let run: ReturnType<typeof this.run>
|
|
706
|
+
return (input, options) => {
|
|
707
|
+
if (input === InternalParser.missing) return InternalParser.missingExit
|
|
708
|
+
return (run ??= this.run(this.typeParameters))(input, this, options)
|
|
679
709
|
}
|
|
680
710
|
}
|
|
681
711
|
private _rebuild(recur: (ast: AST) => AST, checks: Checks | undefined, encodingChecks: Checks | undefined) {
|
|
@@ -816,7 +846,8 @@ export class Void extends Base {
|
|
|
816
846
|
readonly _tag = "Void"
|
|
817
847
|
/** @internal */
|
|
818
848
|
getParser() {
|
|
819
|
-
|
|
849
|
+
const succeed = InternalParser.succeed(undefined)
|
|
850
|
+
return (input: unknown) => input === InternalParser.missing ? InternalParser.missingExit : succeed
|
|
820
851
|
}
|
|
821
852
|
/** @internal */
|
|
822
853
|
toCodecJson(): AST {
|
|
@@ -1080,9 +1111,9 @@ function isTemplateLiteralPart(ast: AST): ast is TemplateLiteralPart {
|
|
|
1080
1111
|
return true
|
|
1081
1112
|
case "Literal":
|
|
1082
1113
|
case "TemplateLiteral":
|
|
1083
|
-
return ast.checks
|
|
1114
|
+
return !ast.checks
|
|
1084
1115
|
case "Union":
|
|
1085
|
-
return ast.checks
|
|
1116
|
+
return !ast.checks && ast.types.every(isTemplateLiteralPart)
|
|
1086
1117
|
default:
|
|
1087
1118
|
return false
|
|
1088
1119
|
}
|
|
@@ -1106,6 +1137,10 @@ export class TemplateLiteral extends Base {
|
|
|
1106
1137
|
readonly parts: ReadonlyArray<AST>
|
|
1107
1138
|
/** @internal */
|
|
1108
1139
|
readonly encodedParts: ReadonlyArray<TemplateLiteralPart>
|
|
1140
|
+
/** @internal */
|
|
1141
|
+
readonly literals: ReadonlyArray<string | undefined>
|
|
1142
|
+
/** @internal */
|
|
1143
|
+
readonly suffixLengths: ReadonlyArray<number>
|
|
1109
1144
|
|
|
1110
1145
|
constructor(
|
|
1111
1146
|
parts: ReadonlyArray<AST>,
|
|
@@ -1116,25 +1151,40 @@ export class TemplateLiteral extends Base {
|
|
|
1116
1151
|
) {
|
|
1117
1152
|
super(annotations, checks, encoding, context)
|
|
1118
1153
|
const encodedParts: Array<TemplateLiteralPart> = []
|
|
1154
|
+
const literals: Array<string | undefined> = []
|
|
1119
1155
|
for (const part of parts) {
|
|
1120
1156
|
const encoded = toEncoded(part)
|
|
1121
1157
|
if (isTemplateLiteralPart(encoded)) {
|
|
1122
1158
|
encodedParts.push(encoded)
|
|
1159
|
+
literals.push(encoded._tag === "Literal" ? globalThis.String(encoded.literal) : undefined)
|
|
1123
1160
|
} else {
|
|
1124
1161
|
throw new Error(`Invalid TemplateLiteral part ${encoded._tag}`)
|
|
1125
1162
|
}
|
|
1126
1163
|
}
|
|
1164
|
+
const suffixLengths = new Array<number>(encodedParts.length + 1)
|
|
1165
|
+
suffixLengths[encodedParts.length] = 0
|
|
1166
|
+
for (let i = encodedParts.length - 1; i >= 0; i--) {
|
|
1167
|
+
suffixLengths[i] = suffixLengths[i + 1] + (literals[i]?.length ?? 0)
|
|
1168
|
+
}
|
|
1127
1169
|
this.parts = parts
|
|
1128
1170
|
this.encodedParts = encodedParts
|
|
1171
|
+
this.literals = literals
|
|
1172
|
+
this.suffixLengths = suffixLengths
|
|
1129
1173
|
}
|
|
1130
1174
|
/** @internal */
|
|
1131
|
-
getParser(
|
|
1132
|
-
const parser =
|
|
1133
|
-
return (
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1175
|
+
getParser(compile: SchemaParser.Compiler): SchemaParser.Parser {
|
|
1176
|
+
const parser = compile(this.asTemplateLiteralParser())
|
|
1177
|
+
return (input, options) => {
|
|
1178
|
+
if (input === InternalParser.missing) return InternalParser.missingExit
|
|
1179
|
+
const result = parser(input, options)
|
|
1180
|
+
if ((result as Exit.Exit<unknown, unknown>)._tag === "Success") {
|
|
1181
|
+
return InternalParser.sameExit
|
|
1182
|
+
}
|
|
1183
|
+
return Effect.mapBothEager(result, {
|
|
1184
|
+
onSuccess: () => input,
|
|
1185
|
+
onFailure: (issue) => new SchemaIssue.Composite(this, [issue], input, options)
|
|
1137
1186
|
})
|
|
1187
|
+
}
|
|
1138
1188
|
}
|
|
1139
1189
|
/** @internal */
|
|
1140
1190
|
getExpected(): string {
|
|
@@ -1142,7 +1192,7 @@ export class TemplateLiteral extends Base {
|
|
|
1142
1192
|
}
|
|
1143
1193
|
/** @internal */
|
|
1144
1194
|
matchPart(s: string, options: ParseOptions): string | undefined {
|
|
1145
|
-
return segmentTemplateLiteralParts(this
|
|
1195
|
+
return segmentTemplateLiteralParts(this, s, options) === undefined ? undefined : s
|
|
1146
1196
|
}
|
|
1147
1197
|
/** @internal */
|
|
1148
1198
|
asTemplateLiteralParser(): Arrays {
|
|
@@ -1152,12 +1202,14 @@ export class TemplateLiteral extends Base {
|
|
|
1152
1202
|
tuple,
|
|
1153
1203
|
new SchemaTransformation.Transformation(
|
|
1154
1204
|
SchemaGetter.transformOrFail((s: string, options) => {
|
|
1155
|
-
const segments = segmentTemplateLiteralParts(this
|
|
1156
|
-
if (segments
|
|
1205
|
+
const segments = segmentTemplateLiteralParts(this, s, options)
|
|
1206
|
+
if (segments) return Effect.succeed(segments)
|
|
1157
1207
|
return Effect.fail(
|
|
1158
|
-
new SchemaIssue.InvalidValue(
|
|
1159
|
-
|
|
1160
|
-
|
|
1208
|
+
new SchemaIssue.InvalidValue(
|
|
1209
|
+
{ expected: "a string matching template literal parts" },
|
|
1210
|
+
s,
|
|
1211
|
+
options
|
|
1212
|
+
)
|
|
1161
1213
|
)
|
|
1162
1214
|
}),
|
|
1163
1215
|
SchemaGetter.transform((parts) => parts.join(""))
|
|
@@ -1228,11 +1280,11 @@ export type LiteralValue = string | number | boolean | bigint
|
|
|
1228
1280
|
*
|
|
1229
1281
|
* **Example** (Creating a literal AST)
|
|
1230
1282
|
*
|
|
1231
|
-
* ```ts
|
|
1283
|
+
* ```ts import.meta.vitest
|
|
1232
1284
|
* import { SchemaAST } from "effect"
|
|
1233
1285
|
*
|
|
1234
1286
|
* const ast = new SchemaAST.Literal("active")
|
|
1235
|
-
*
|
|
1287
|
+
* ast.literal // => "active"
|
|
1236
1288
|
* ```
|
|
1237
1289
|
*
|
|
1238
1290
|
* @see {@link LiteralValue}
|
|
@@ -1309,7 +1361,8 @@ export class String extends Base {
|
|
|
1309
1361
|
}
|
|
1310
1362
|
/** @internal */
|
|
1311
1363
|
matchPart(s: string, options: ParseOptions): string | undefined {
|
|
1312
|
-
|
|
1364
|
+
const checks = this.checks
|
|
1365
|
+
return checks && !options.disableChecks && collectIssues(checks, s, undefined, this, options) ? undefined : s
|
|
1313
1366
|
}
|
|
1314
1367
|
/** @internal */
|
|
1315
1368
|
getExpected(): string {
|
|
@@ -1366,20 +1419,24 @@ export class Number extends Base {
|
|
|
1366
1419
|
return this._match(isStringFiniteRegExp, s, options)
|
|
1367
1420
|
}
|
|
1368
1421
|
private _match(regexp: RegExp, s: string, options: ParseOptions): number | undefined {
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1422
|
+
if (!regexp.test(s)) return undefined
|
|
1423
|
+
const value = globalThis.Number(s)
|
|
1424
|
+
if (options.disableChecks || !this.checks) return value
|
|
1425
|
+
return collectIssues(this.checks, value, undefined, this, options) ? undefined : value
|
|
1372
1426
|
}
|
|
1373
1427
|
/** @internal */
|
|
1374
1428
|
toCodecJson(): AST {
|
|
1375
|
-
if (
|
|
1429
|
+
if (
|
|
1430
|
+
this.checks &&
|
|
1431
|
+
(hasCheck(this.checks, "effect/schema/isFinite") || hasCheck(this.checks, "effect/schema/isInt"))
|
|
1432
|
+
) {
|
|
1376
1433
|
return this
|
|
1377
1434
|
}
|
|
1378
|
-
return replaceEncoding(this, [numberToJson])
|
|
1435
|
+
return replaceEncoding(this, [numberToJson(this.checks)])
|
|
1379
1436
|
}
|
|
1380
1437
|
/** @internal */
|
|
1381
1438
|
toCodecStringTree(): AST {
|
|
1382
|
-
if (this.
|
|
1439
|
+
if (this.toCodecJson() === this) {
|
|
1383
1440
|
return replaceEncoding(this, [finiteToString])
|
|
1384
1441
|
}
|
|
1385
1442
|
return replaceEncoding(this, [numberToString])
|
|
@@ -1390,16 +1447,25 @@ export class Number extends Base {
|
|
|
1390
1447
|
}
|
|
1391
1448
|
}
|
|
1392
1449
|
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1450
|
+
function hasCheck(checks: ReadonlyArray<Check<unknown>>, id: string): boolean {
|
|
1451
|
+
return checks.some((check) =>
|
|
1452
|
+
check.annotations?.representation?.id === id ||
|
|
1453
|
+
(check._tag === "FilterGroup" && hasCheck(check.checks, id))
|
|
1454
|
+
)
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1457
|
+
function numberToJson(checks: Checks | undefined): Link {
|
|
1458
|
+
const encodedFinite = !checks
|
|
1459
|
+
? finite
|
|
1460
|
+
: appendChecks(finite, checks)
|
|
1461
|
+
|
|
1462
|
+
return new Link(
|
|
1463
|
+
new Union([encodedFinite, nonFiniteLiterals], "anyOf"),
|
|
1464
|
+
new SchemaTransformation.Transformation(
|
|
1465
|
+
SchemaGetter.Number(),
|
|
1466
|
+
SchemaGetter.transform((n) => globalThis.Number.isFinite(n) ? n : globalThis.String(n))
|
|
1467
|
+
)
|
|
1468
|
+
)
|
|
1403
1469
|
}
|
|
1404
1470
|
|
|
1405
1471
|
/**
|
|
@@ -1481,7 +1547,8 @@ export class Symbol extends Base {
|
|
|
1481
1547
|
}
|
|
1482
1548
|
/** @internal */
|
|
1483
1549
|
matchKey(s: symbol, options: ParseOptions): symbol | undefined {
|
|
1484
|
-
|
|
1550
|
+
if (options.disableChecks || !this.checks) return s
|
|
1551
|
+
return collectIssues(this.checks, s, undefined, this, options) ? undefined : s
|
|
1485
1552
|
}
|
|
1486
1553
|
/** @internal */
|
|
1487
1554
|
toCodecStringTree(): AST {
|
|
@@ -1534,9 +1601,10 @@ export class BigInt extends Base {
|
|
|
1534
1601
|
}
|
|
1535
1602
|
/** @internal */
|
|
1536
1603
|
matchPart(s: string, options: ParseOptions): bigint | undefined {
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1604
|
+
if (!isStringBigIntRegExp.test(s)) return undefined
|
|
1605
|
+
const value = globalThis.BigInt(s)
|
|
1606
|
+
if (options.disableChecks || !this.checks) return value
|
|
1607
|
+
return collectIssues(this.checks, value, undefined, this, options) ? undefined : value
|
|
1540
1608
|
}
|
|
1541
1609
|
/** @internal */
|
|
1542
1610
|
toCodecStringTree(): AST {
|
|
@@ -1590,15 +1658,14 @@ export const bigInt = new BigInt()
|
|
|
1590
1658
|
*
|
|
1591
1659
|
* **Example** (Inspecting a tuple AST)
|
|
1592
1660
|
*
|
|
1593
|
-
* ```ts
|
|
1661
|
+
* ```ts import.meta.vitest
|
|
1594
1662
|
* import { Schema, SchemaAST } from "effect"
|
|
1595
1663
|
*
|
|
1596
1664
|
* const schema = Schema.Tuple([Schema.String, Schema.Number])
|
|
1597
1665
|
* const ast = schema.ast
|
|
1598
1666
|
*
|
|
1599
1667
|
* if (SchemaAST.isArrays(ast)) {
|
|
1600
|
-
*
|
|
1601
|
-
* console.log(ast.rest.length) // 0
|
|
1668
|
+
* [ast.elements.length, ast.rest.length] // => [2, 0]
|
|
1602
1669
|
* }
|
|
1603
1670
|
* ```
|
|
1604
1671
|
*
|
|
@@ -1630,58 +1697,71 @@ export class Arrays extends Base {
|
|
|
1630
1697
|
this.rest = rest
|
|
1631
1698
|
this.encodingChecks = encodingChecks
|
|
1632
1699
|
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1700
|
+
let hasOptional = false
|
|
1701
|
+
for (let i = 0; i < elements.length; i++) {
|
|
1702
|
+
if (isOptional(elements[i])) {
|
|
1703
|
+
hasOptional = true
|
|
1704
|
+
} else if (hasOptional) {
|
|
1705
|
+
throw new Error("A required element cannot follow an optional element. ts(1257)")
|
|
1706
|
+
}
|
|
1707
|
+
}
|
|
1708
|
+
if (hasOptional && rest.length > 1) {
|
|
1636
1709
|
throw new Error("A required element cannot follow an optional element. ts(1257)")
|
|
1637
1710
|
}
|
|
1638
1711
|
|
|
1639
1712
|
// An optional element cannot follow a rest element.ts(1266)
|
|
1640
|
-
|
|
1641
|
-
|
|
1713
|
+
for (let i = 1; i < rest.length; i++) {
|
|
1714
|
+
if (isOptional(rest[i])) {
|
|
1715
|
+
throw new Error("An optional element cannot follow a rest element. ts(1266)")
|
|
1716
|
+
}
|
|
1642
1717
|
}
|
|
1643
1718
|
}
|
|
1644
1719
|
/** @internal */
|
|
1645
|
-
getParser(
|
|
1720
|
+
getParser(
|
|
1721
|
+
compile: SchemaParser.Compiler,
|
|
1722
|
+
compileConstructorDefault: SchemaParser.Compiler = compile
|
|
1723
|
+
): SchemaParser.Parser {
|
|
1646
1724
|
// oxlint-disable-next-line @typescript-eslint/no-this-alias
|
|
1647
1725
|
const ast = this
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
const
|
|
1653
|
-
const tailLen = tail.length
|
|
1726
|
+
type ElementParser = { readonly ast: AST; readonly parser: SchemaParser.Parser }
|
|
1727
|
+
let elements: Array<ElementParser> | undefined
|
|
1728
|
+
let rest: Array<ElementParser> | undefined
|
|
1729
|
+
const elementLen = ast.elements.length
|
|
1730
|
+
const tailLen = Math.max(0, ast.rest.length - 1)
|
|
1654
1731
|
|
|
1655
1732
|
function getParser(
|
|
1656
1733
|
tailThreshold: number,
|
|
1657
1734
|
index: number
|
|
1658
1735
|
): { readonly ast: AST; readonly parser: SchemaParser.Parser } {
|
|
1659
1736
|
if (index < elementLen) {
|
|
1660
|
-
return elements[index]
|
|
1737
|
+
return elements![index]
|
|
1661
1738
|
} else if (index >= tailThreshold) {
|
|
1662
|
-
return
|
|
1739
|
+
return rest![index - tailThreshold + 1]
|
|
1663
1740
|
}
|
|
1664
|
-
return
|
|
1741
|
+
return rest![0]
|
|
1665
1742
|
}
|
|
1666
1743
|
|
|
1667
|
-
return Effect.fnUntracedEager(function*(
|
|
1668
|
-
if (
|
|
1669
|
-
return
|
|
1744
|
+
return Effect.fnUntracedEager(function*(input, options) {
|
|
1745
|
+
if (input === InternalParser.missing) {
|
|
1746
|
+
return InternalParser.missing
|
|
1670
1747
|
}
|
|
1671
|
-
const input = oinput.value
|
|
1672
1748
|
|
|
1673
1749
|
// If the input is not an array, return early with an error
|
|
1674
1750
|
if (!Array.isArray(input)) {
|
|
1675
|
-
return yield* Effect.fail(new SchemaIssue.InvalidType(ast,
|
|
1751
|
+
return yield* Effect.fail(new SchemaIssue.InvalidType(ast, input, options))
|
|
1752
|
+
}
|
|
1753
|
+
if (!elements) {
|
|
1754
|
+
elements = ast.elements.map((ast) => ({ ast, parser: compileConstructorDefault(ast) }))
|
|
1755
|
+
rest = ast.rest.map((ast) => ({ ast, parser: compileConstructorDefault(ast) }))
|
|
1676
1756
|
}
|
|
1677
1757
|
|
|
1678
1758
|
const len = input.length
|
|
1679
1759
|
const state = {
|
|
1680
1760
|
ast,
|
|
1681
1761
|
getParser,
|
|
1682
|
-
|
|
1762
|
+
input,
|
|
1683
1763
|
len,
|
|
1684
|
-
tailThreshold:
|
|
1764
|
+
tailThreshold: Math.max(elementLen, len - tailLen),
|
|
1685
1765
|
output: new globalThis.Array(len),
|
|
1686
1766
|
issues: undefined as Arr.NonEmptyArray<SchemaIssue.Issue> | undefined,
|
|
1687
1767
|
options
|
|
@@ -1698,19 +1778,24 @@ export class Arrays extends Base {
|
|
|
1698
1778
|
// ---------------------------------------------
|
|
1699
1779
|
if (ast.rest.length === 0 && len > elementLen) {
|
|
1700
1780
|
for (let i = elementLen; i <= len - 1; i++) {
|
|
1701
|
-
const
|
|
1781
|
+
const unexpected = new SchemaIssue.UnexpectedKey(ast, input[i], options)
|
|
1782
|
+
const issue = new SchemaIssue.Pointer([i], unexpected)
|
|
1702
1783
|
if (options.errors === "all") {
|
|
1703
1784
|
if (state.issues) state.issues.push(issue)
|
|
1704
1785
|
else state.issues = [issue]
|
|
1705
1786
|
} else {
|
|
1706
|
-
return yield* Effect.fail(
|
|
1787
|
+
return yield* Effect.fail(
|
|
1788
|
+
new SchemaIssue.Composite(ast, [issue], input, options)
|
|
1789
|
+
)
|
|
1707
1790
|
}
|
|
1708
1791
|
}
|
|
1709
1792
|
}
|
|
1710
1793
|
if (state.issues) {
|
|
1711
|
-
return yield* Effect.fail(
|
|
1794
|
+
return yield* Effect.fail(
|
|
1795
|
+
new SchemaIssue.Composite(ast, state.issues, input, options)
|
|
1796
|
+
)
|
|
1712
1797
|
}
|
|
1713
|
-
return
|
|
1798
|
+
return state.output
|
|
1714
1799
|
})
|
|
1715
1800
|
}
|
|
1716
1801
|
private _rebuild(recur: (ast: AST) => AST, checks: Checks | undefined, encodingChecks: Checks | undefined) {
|
|
@@ -1745,7 +1830,7 @@ export class Arrays extends Base {
|
|
|
1745
1830
|
}
|
|
1746
1831
|
const parseArray = iterateEager<{
|
|
1747
1832
|
readonly ast: AST
|
|
1748
|
-
readonly
|
|
1833
|
+
readonly input: unknown
|
|
1749
1834
|
readonly len: number
|
|
1750
1835
|
readonly getParser: (
|
|
1751
1836
|
tailThreshold: number,
|
|
@@ -1757,14 +1842,18 @@ const parseArray = iterateEager<{
|
|
|
1757
1842
|
issues: Array<SchemaIssue.Issue> | undefined
|
|
1758
1843
|
}, unknown>()({
|
|
1759
1844
|
onItem(s, item, i) {
|
|
1760
|
-
const value = i < s.len ?
|
|
1845
|
+
const value = i < s.len ? item : InternalParser.missing
|
|
1761
1846
|
return s.getParser(s.tailThreshold, i).parser(value, s.options)
|
|
1762
1847
|
},
|
|
1763
|
-
step(s,
|
|
1848
|
+
step(s, item, exit, i) {
|
|
1764
1849
|
if (exit._tag === "Failure") {
|
|
1765
1850
|
return wrapPropertyKeyIssue(s, s.ast, i, exit)
|
|
1766
|
-
}
|
|
1767
|
-
|
|
1851
|
+
}
|
|
1852
|
+
const value = exit === InternalParser.sameExit
|
|
1853
|
+
? item
|
|
1854
|
+
: (exit as InternalParser.Success<unknown, SchemaIssue.Issue>)[InternalParser.args]
|
|
1855
|
+
if (value !== InternalParser.missing) {
|
|
1856
|
+
s.output[i] = value
|
|
1768
1857
|
} else {
|
|
1769
1858
|
const p = s.getParser(s.tailThreshold, i)
|
|
1770
1859
|
if (isOptional(p.ast)) return
|
|
@@ -1773,20 +1862,14 @@ const parseArray = iterateEager<{
|
|
|
1773
1862
|
if (s.issues) s.issues.push(issue)
|
|
1774
1863
|
else s.issues = [issue]
|
|
1775
1864
|
} else {
|
|
1776
|
-
return Exit.fail(
|
|
1865
|
+
return Exit.fail(
|
|
1866
|
+
new SchemaIssue.Composite(s.ast, [issue], s.input, s.options)
|
|
1867
|
+
)
|
|
1777
1868
|
}
|
|
1778
1869
|
}
|
|
1779
1870
|
}
|
|
1780
1871
|
})
|
|
1781
1872
|
|
|
1782
|
-
function resolveTailThreshold(
|
|
1783
|
-
inputLen: number,
|
|
1784
|
-
elementLen: number,
|
|
1785
|
-
tailLen: number
|
|
1786
|
-
) {
|
|
1787
|
-
return Math.max(elementLen, inputLen - tailLen)
|
|
1788
|
-
}
|
|
1789
|
-
|
|
1790
1873
|
const resolveConcurrency = (value: number | "unbounded" | undefined) => {
|
|
1791
1874
|
value = value === "unbounded" ? Infinity : value ?? 1
|
|
1792
1875
|
return value > 1 ? { concurrency: value } : undefined
|
|
@@ -1794,7 +1877,7 @@ const resolveConcurrency = (value: number | "unbounded" | undefined) => {
|
|
|
1794
1877
|
|
|
1795
1878
|
const wrapPropertyKeyIssue = (
|
|
1796
1879
|
s: {
|
|
1797
|
-
readonly
|
|
1880
|
+
readonly input: unknown
|
|
1798
1881
|
readonly options: ParseOptions
|
|
1799
1882
|
issues: Array<SchemaIssue.Issue> | undefined
|
|
1800
1883
|
},
|
|
@@ -1810,7 +1893,13 @@ const wrapPropertyKeyIssue = (
|
|
|
1810
1893
|
return Exit.failCause(
|
|
1811
1894
|
Cause.map(
|
|
1812
1895
|
exit.cause,
|
|
1813
|
-
(issue) =>
|
|
1896
|
+
(issue) =>
|
|
1897
|
+
new SchemaIssue.Composite(
|
|
1898
|
+
ast,
|
|
1899
|
+
[new SchemaIssue.Pointer([key], issue)],
|
|
1900
|
+
s.input,
|
|
1901
|
+
s.options
|
|
1902
|
+
)
|
|
1814
1903
|
)
|
|
1815
1904
|
)
|
|
1816
1905
|
}
|
|
@@ -1819,7 +1908,9 @@ const wrapPropertyKeyIssue = (
|
|
|
1819
1908
|
if (s.issues) s.issues.push(pointer)
|
|
1820
1909
|
else s.issues = [pointer]
|
|
1821
1910
|
} else {
|
|
1822
|
-
return Exit.fail(
|
|
1911
|
+
return Exit.fail(
|
|
1912
|
+
new SchemaIssue.Composite(ast, [pointer], s.input, s.options)
|
|
1913
|
+
)
|
|
1823
1914
|
}
|
|
1824
1915
|
}
|
|
1825
1916
|
|
|
@@ -1887,37 +1978,6 @@ export class PropertySignature {
|
|
|
1887
1978
|
}
|
|
1888
1979
|
}
|
|
1889
1980
|
|
|
1890
|
-
/**
|
|
1891
|
-
* Represents a bidirectional merge strategy for index signature key-value pairs.
|
|
1892
|
-
*
|
|
1893
|
-
* **Details**
|
|
1894
|
-
*
|
|
1895
|
-
* Used by {@link IndexSignature} when the same key appears multiple times
|
|
1896
|
-
* (e.g. from `Schema.extend` or overlapping records). Provides separate
|
|
1897
|
-
* `decode` and `encode` combiners that determine how duplicate entries are
|
|
1898
|
-
* merged.
|
|
1899
|
-
*
|
|
1900
|
-
* @see {@link IndexSignature}
|
|
1901
|
-
* @category models
|
|
1902
|
-
* @since 4.0.0
|
|
1903
|
-
*/
|
|
1904
|
-
export class KeyValueCombiner {
|
|
1905
|
-
readonly decode: Combiner.Combiner<readonly [key: PropertyKey, value: any]> | undefined
|
|
1906
|
-
readonly encode: Combiner.Combiner<readonly [key: PropertyKey, value: any]> | undefined
|
|
1907
|
-
|
|
1908
|
-
constructor(
|
|
1909
|
-
decode: Combiner.Combiner<readonly [key: PropertyKey, value: any]> | undefined,
|
|
1910
|
-
encode: Combiner.Combiner<readonly [key: PropertyKey, value: any]> | undefined
|
|
1911
|
-
) {
|
|
1912
|
-
this.decode = decode
|
|
1913
|
-
this.encode = encode
|
|
1914
|
-
}
|
|
1915
|
-
/** @internal */
|
|
1916
|
-
flip(): KeyValueCombiner {
|
|
1917
|
-
return new KeyValueCombiner(this.encode, this.decode)
|
|
1918
|
-
}
|
|
1919
|
-
}
|
|
1920
|
-
|
|
1921
1981
|
type IndexSignatureParameter =
|
|
1922
1982
|
| String
|
|
1923
1983
|
| Number
|
|
@@ -1956,7 +2016,6 @@ function isIndexSignatureParameter(ast: AST): ast is IndexSignatureParameter {
|
|
|
1956
2016
|
* - `parameter` — the key type AST (e.g. {@link String} for `string` keys,
|
|
1957
2017
|
* {@link TemplateLiteral} for patterned keys).
|
|
1958
2018
|
* - `type` — the value type SchemaAST.
|
|
1959
|
-
* - `merge` — optional {@link KeyValueCombiner} for handling duplicate keys.
|
|
1960
2019
|
*
|
|
1961
2020
|
* **Gotchas**
|
|
1962
2021
|
*
|
|
@@ -1971,19 +2030,16 @@ function isIndexSignatureParameter(ast: AST): ast is IndexSignatureParameter {
|
|
|
1971
2030
|
export class IndexSignature {
|
|
1972
2031
|
readonly parameter: IndexSignatureParameter
|
|
1973
2032
|
readonly type: AST
|
|
1974
|
-
readonly merge: KeyValueCombiner | undefined
|
|
1975
2033
|
|
|
1976
2034
|
constructor(
|
|
1977
2035
|
parameter: AST,
|
|
1978
|
-
type: AST
|
|
1979
|
-
merge: KeyValueCombiner | undefined
|
|
2036
|
+
type: AST
|
|
1980
2037
|
) {
|
|
1981
2038
|
if (!isIndexSignatureParameter(parameter)) {
|
|
1982
2039
|
throw new Error(`Invalid index signature parameter ${parameter._tag}`)
|
|
1983
2040
|
}
|
|
1984
2041
|
this.parameter = parameter
|
|
1985
2042
|
this.type = type
|
|
1986
|
-
this.merge = merge
|
|
1987
2043
|
if (isOptional(type) && !containsUndefined(type)) {
|
|
1988
2044
|
throw new Error("Cannot use `Schema.optionalKey` with index signatures, use `Schema.optional` instead.")
|
|
1989
2045
|
}
|
|
@@ -2014,17 +2070,14 @@ export class IndexSignature {
|
|
|
2014
2070
|
*
|
|
2015
2071
|
* **Example** (Inspecting a struct AST)
|
|
2016
2072
|
*
|
|
2017
|
-
* ```ts
|
|
2073
|
+
* ```ts import.meta.vitest
|
|
2018
2074
|
* import { Schema, SchemaAST } from "effect"
|
|
2019
2075
|
*
|
|
2020
2076
|
* const schema = Schema.Struct({ name: Schema.String })
|
|
2021
2077
|
* const ast = schema.ast
|
|
2022
2078
|
*
|
|
2023
2079
|
* if (SchemaAST.isObjects(ast)) {
|
|
2024
|
-
*
|
|
2025
|
-
* console.log(ps.name, ps.type._tag)
|
|
2026
|
-
* }
|
|
2027
|
-
* // "name" "String"
|
|
2080
|
+
* ast.propertySignatures.map((ps) => [ps.name, ps.type._tag]) // => [["name", "String"]]
|
|
2028
2081
|
* }
|
|
2029
2082
|
* ```
|
|
2030
2083
|
*
|
|
@@ -2062,101 +2115,126 @@ export class Objects extends Base {
|
|
|
2062
2115
|
}
|
|
2063
2116
|
}
|
|
2064
2117
|
/** @internal */
|
|
2065
|
-
getParser(
|
|
2118
|
+
getParser(
|
|
2119
|
+
compile: SchemaParser.Compiler,
|
|
2120
|
+
compileConstructorDefault: SchemaParser.Compiler = compile
|
|
2121
|
+
): SchemaParser.Parser {
|
|
2066
2122
|
// oxlint-disable-next-line @typescript-eslint/no-this-alias
|
|
2067
2123
|
const ast = this
|
|
2068
2124
|
const expectedKeys: Array<PropertyKey> = []
|
|
2069
|
-
const expectedKeysSet = new Set<PropertyKey>()
|
|
2070
|
-
const properties: Array<{
|
|
2071
|
-
readonly ps: PropertySignature | IndexSignature
|
|
2072
|
-
readonly parser: SchemaParser.Parser
|
|
2073
|
-
readonly name: PropertyKey
|
|
2074
|
-
readonly type: AST
|
|
2075
|
-
}> = []
|
|
2076
2125
|
for (const ps of ast.propertySignatures) {
|
|
2077
2126
|
expectedKeys.push(ps.name)
|
|
2078
|
-
expectedKeysSet.add(ps.name)
|
|
2079
|
-
properties.push({
|
|
2080
|
-
ps,
|
|
2081
|
-
parser: recur(ps.type),
|
|
2082
|
-
name: ps.name,
|
|
2083
|
-
type: ps.type
|
|
2084
|
-
})
|
|
2085
2127
|
}
|
|
2128
|
+
const hasProperties = expectedKeys.length
|
|
2086
2129
|
const indexCount = ast.indexSignatures.length
|
|
2130
|
+
let expectedKeysSet = hasProperties && indexCount ? new Set(expectedKeys) : undefined
|
|
2087
2131
|
// ---------------------------------------------
|
|
2088
2132
|
// handle empty struct
|
|
2089
2133
|
// ---------------------------------------------
|
|
2090
|
-
if (
|
|
2134
|
+
if (!hasProperties && !indexCount) {
|
|
2091
2135
|
return fromRefinement(ast, Predicate.isNotNullish)
|
|
2092
2136
|
}
|
|
2093
2137
|
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
readonly
|
|
2098
|
-
readonly
|
|
2099
|
-
readonly
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2138
|
+
let properties: Array<ParsedProperty> | undefined
|
|
2139
|
+
let indexes:
|
|
2140
|
+
| Array<{
|
|
2141
|
+
readonly is: IndexSignature
|
|
2142
|
+
readonly parserKey: SchemaParser.Parser
|
|
2143
|
+
readonly parserValue: SchemaParser.Parser
|
|
2144
|
+
}>
|
|
2145
|
+
| undefined
|
|
2146
|
+
type Index = NonNullable<typeof indexes>[number]
|
|
2147
|
+
const finishIndex = (
|
|
2148
|
+
s: ObjectParserState,
|
|
2149
|
+
key: PropertyKey,
|
|
2150
|
+
k2: PropertyKey | typeof InternalParser.missing,
|
|
2151
|
+
inputValue: unknown,
|
|
2152
|
+
exitValue: Exit.Exit<unknown, SchemaIssue.Issue>
|
|
2153
|
+
): Effect.Effect<void, SchemaIssue.Issue, any> => {
|
|
2154
|
+
if (exitValue._tag === "Failure") {
|
|
2155
|
+
return wrapPropertyKeyIssue(s, ast, key, exitValue) ?? Exit.void
|
|
2156
|
+
}
|
|
2157
|
+
const value = exitValue === InternalParser.sameExit
|
|
2158
|
+
? inputValue
|
|
2159
|
+
: (exitValue as InternalParser.Success<unknown, SchemaIssue.Issue>)[InternalParser.args]
|
|
2160
|
+
if (k2 !== InternalParser.missing && value !== InternalParser.missing) {
|
|
2161
|
+
if (hasProperties && (expectedKeysSet!.has(key) || expectedKeysSet!.has(k2))) return Exit.void
|
|
2162
|
+
InternalRecord.assignProperty(s.out, k2, value)
|
|
2163
|
+
}
|
|
2164
|
+
return Exit.void
|
|
2165
|
+
}
|
|
2166
|
+
const parseIndex = (
|
|
2167
|
+
s: ObjectParserState,
|
|
2168
|
+
key: PropertyKey,
|
|
2169
|
+
index: Index,
|
|
2170
|
+
exitKey?: Exit.Exit<unknown, SchemaIssue.Issue>
|
|
2171
|
+
): Effect.Effect<void, SchemaIssue.Issue, any> => {
|
|
2172
|
+
if (!exitKey) {
|
|
2173
|
+
const eff = index.parserKey(key, s.options)
|
|
2174
|
+
if (!effectIsExit(eff)) {
|
|
2175
|
+
return Effect.flatMap(Effect.exit(eff), (exit) => parseIndex(s, key, index, exit))
|
|
2176
|
+
}
|
|
2177
|
+
exitKey = eff
|
|
2178
|
+
}
|
|
2179
|
+
if (exitKey._tag === "Failure") {
|
|
2180
|
+
return wrapPropertyKeyIssue(s, ast, key, exitKey) ?? Exit.void
|
|
2181
|
+
}
|
|
2182
|
+
const k2 = exitKey === InternalParser.sameExit
|
|
2183
|
+
? key
|
|
2184
|
+
: (exitKey as InternalParser.Success<PropertyKey, SchemaIssue.Issue>)[InternalParser.args]
|
|
2185
|
+
const inputValue = s.input[key]
|
|
2186
|
+
const result = index.parserValue(inputValue, s.options)
|
|
2187
|
+
return effectIsExit(result)
|
|
2188
|
+
? finishIndex(s, key, k2, inputValue, result)
|
|
2189
|
+
: Effect.flatMap(Effect.exit(result), (exit) => finishIndex(s, key, k2, inputValue, exit))
|
|
2190
|
+
}
|
|
2191
|
+
const parseStringIndex = (
|
|
2192
|
+
s: ObjectParserState,
|
|
2193
|
+
key: PropertyKey,
|
|
2194
|
+
index: Index
|
|
2195
|
+
): Effect.Effect<void, SchemaIssue.Issue, any> => {
|
|
2196
|
+
const inputValue = s.input[key]
|
|
2197
|
+
const result = index.parserValue(inputValue, s.options)
|
|
2198
|
+
return effectIsExit(result)
|
|
2199
|
+
? finishIndex(s, key, key, inputValue, result)
|
|
2200
|
+
: Effect.flatMap(Effect.exit(result), (exit) => finishIndex(s, key, key, inputValue, exit))
|
|
2201
|
+
}
|
|
2202
|
+
const parseIndexes = indexCount ?
|
|
2203
|
+
iterateEager<ObjectParserState, [key: PropertyKey, index: Index]>()({
|
|
2204
|
+
onItem: (s, [key, index]) => parseIndex(s, key, index),
|
|
2140
2205
|
step: (_s, _, exit: Exit.Exit<void, SchemaIssue.Issue>) => exit._tag === "Failure" ? exit : undefined
|
|
2141
2206
|
}) :
|
|
2142
2207
|
undefined
|
|
2143
2208
|
|
|
2144
|
-
return Effect.fnUntracedEager(function*(
|
|
2145
|
-
if (
|
|
2146
|
-
return
|
|
2209
|
+
return Effect.fnUntracedEager(function*(input, options) {
|
|
2210
|
+
if (input === InternalParser.missing) {
|
|
2211
|
+
return InternalParser.missing
|
|
2147
2212
|
}
|
|
2148
|
-
const input = oinput.value as Record<PropertyKey, unknown>
|
|
2149
2213
|
|
|
2150
2214
|
// If the input is not a record, return early with an error
|
|
2151
2215
|
if (!(typeof input === "object" && input !== null && !Array.isArray(input))) {
|
|
2152
|
-
return yield* Effect.fail(new SchemaIssue.InvalidType(ast,
|
|
2216
|
+
return yield* Effect.fail(new SchemaIssue.InvalidType(ast, input, options))
|
|
2217
|
+
}
|
|
2218
|
+
if (!properties) {
|
|
2219
|
+
properties = ast.propertySignatures.map((ps) => ({
|
|
2220
|
+
parser: compileConstructorDefault(ps.type),
|
|
2221
|
+
name: ps.name,
|
|
2222
|
+
type: ps.type
|
|
2223
|
+
}))
|
|
2224
|
+
indexes = indexCount
|
|
2225
|
+
? ast.indexSignatures.map((is) => ({
|
|
2226
|
+
is,
|
|
2227
|
+
parserKey: compile(parameterFromPropertyKey(is.parameter)),
|
|
2228
|
+
parserValue: compileConstructorDefault(is.type)
|
|
2229
|
+
}))
|
|
2230
|
+
: undefined
|
|
2153
2231
|
}
|
|
2154
2232
|
|
|
2233
|
+
const record = input as Record<PropertyKey, unknown>
|
|
2155
2234
|
const out: Record<PropertyKey, unknown> = {}
|
|
2156
2235
|
const state = {
|
|
2157
2236
|
ast,
|
|
2158
|
-
|
|
2159
|
-
input,
|
|
2237
|
+
input: record,
|
|
2160
2238
|
out,
|
|
2161
2239
|
issues: undefined as Arr.NonEmptyArray<SchemaIssue.Issue> | undefined,
|
|
2162
2240
|
options
|
|
@@ -2169,14 +2247,16 @@ export class Objects extends Base {
|
|
|
2169
2247
|
// handle excess properties
|
|
2170
2248
|
// ---------------------------------------------
|
|
2171
2249
|
let inputKeys: Array<PropertyKey> | undefined
|
|
2172
|
-
if (
|
|
2173
|
-
|
|
2250
|
+
if (!indexCount && (onExcessPropertyError || onExcessPropertyPreserve)) {
|
|
2251
|
+
expectedKeysSet ??= new Set(expectedKeys)
|
|
2252
|
+
inputKeys = Reflect.ownKeys(record)
|
|
2174
2253
|
for (let i = 0; i < inputKeys.length; i++) {
|
|
2175
2254
|
const key = inputKeys[i]
|
|
2176
2255
|
if (!expectedKeysSet.has(key)) {
|
|
2177
2256
|
// key is unexpected
|
|
2178
2257
|
if (onExcessPropertyError) {
|
|
2179
|
-
const
|
|
2258
|
+
const unexpected = new SchemaIssue.UnexpectedKey(ast, record[key], options)
|
|
2259
|
+
const issue = new SchemaIssue.Pointer([key], unexpected)
|
|
2180
2260
|
if (errorsAllOption) {
|
|
2181
2261
|
if (state.issues) {
|
|
2182
2262
|
state.issues.push(issue)
|
|
@@ -2185,11 +2265,13 @@ export class Objects extends Base {
|
|
|
2185
2265
|
}
|
|
2186
2266
|
continue
|
|
2187
2267
|
} else {
|
|
2188
|
-
return yield* Effect.fail(
|
|
2268
|
+
return yield* Effect.fail(
|
|
2269
|
+
new SchemaIssue.Composite(ast, [issue], input, options)
|
|
2270
|
+
)
|
|
2189
2271
|
}
|
|
2190
2272
|
} else {
|
|
2191
2273
|
// preserve key
|
|
2192
|
-
|
|
2274
|
+
InternalRecord.assignProperty(out, key, record[key])
|
|
2193
2275
|
}
|
|
2194
2276
|
}
|
|
2195
2277
|
}
|
|
@@ -2200,20 +2282,34 @@ export class Objects extends Base {
|
|
|
2200
2282
|
// ---------------------------------------------
|
|
2201
2283
|
// handle property signatures
|
|
2202
2284
|
// ---------------------------------------------
|
|
2203
|
-
|
|
2204
|
-
|
|
2285
|
+
if (hasProperties) {
|
|
2286
|
+
const eff = parseProperties(state, properties!, concurrency)
|
|
2287
|
+
if (eff) yield* eff
|
|
2288
|
+
}
|
|
2205
2289
|
|
|
2206
2290
|
// ---------------------------------------------
|
|
2207
2291
|
// handle index signatures
|
|
2208
2292
|
// ---------------------------------------------
|
|
2209
|
-
if (
|
|
2210
|
-
|
|
2293
|
+
if (indexCount && !concurrency) {
|
|
2294
|
+
for (let i = 0; i < indexCount; i++) {
|
|
2295
|
+
const index = indexes![i]
|
|
2296
|
+
const parse = index.is.parameter === string ? parseStringIndex : parseIndex
|
|
2297
|
+
const keys = index.is.parameter === string
|
|
2298
|
+
? Object.keys(record)
|
|
2299
|
+
: getIndexSignatureKeys(record, index.is.parameter, options)
|
|
2300
|
+
for (let j = 0; j < keys.length; j++) {
|
|
2301
|
+
const eff = parse(state, keys[j], index)
|
|
2302
|
+
if (!effectIsExit(eff)) yield* eff
|
|
2303
|
+
else if (eff._tag === "Failure") return yield* eff as Exit.Exit<never, SchemaIssue.Issue>
|
|
2304
|
+
}
|
|
2305
|
+
}
|
|
2306
|
+
} else if (parseIndexes) {
|
|
2307
|
+
const keyPairs = Arr.empty<[PropertyKey, Index]>()
|
|
2211
2308
|
for (let i = 0; i < indexCount; i++) {
|
|
2212
|
-
const
|
|
2213
|
-
const keys = getIndexSignatureKeys(
|
|
2309
|
+
const index = indexes![i]
|
|
2310
|
+
const keys = getIndexSignatureKeys(record, index.is.parameter, options)
|
|
2214
2311
|
for (let j = 0; j < keys.length; j++) {
|
|
2215
|
-
|
|
2216
|
-
keyPairs.push([key, is])
|
|
2312
|
+
keyPairs.push([keys[j], index])
|
|
2217
2313
|
}
|
|
2218
2314
|
}
|
|
2219
2315
|
const eff = parseIndexes(state, keyPairs, concurrency)
|
|
@@ -2221,26 +2317,27 @@ export class Objects extends Base {
|
|
|
2221
2317
|
}
|
|
2222
2318
|
|
|
2223
2319
|
if (state.issues) {
|
|
2224
|
-
return yield* Effect.fail(
|
|
2320
|
+
return yield* Effect.fail(
|
|
2321
|
+
new SchemaIssue.Composite(ast, state.issues, input, options)
|
|
2322
|
+
)
|
|
2225
2323
|
}
|
|
2226
2324
|
if (options.propertyOrder === "original") {
|
|
2227
2325
|
// preserve input keys order
|
|
2228
|
-
const keys = (inputKeys ?? Reflect.ownKeys(
|
|
2326
|
+
const keys = (inputKeys ?? Reflect.ownKeys(record)).concat(expectedKeys)
|
|
2229
2327
|
const preserved: Record<PropertyKey, unknown> = {}
|
|
2230
2328
|
for (const key of keys) {
|
|
2231
2329
|
if (Object.hasOwn(out, key)) {
|
|
2232
|
-
|
|
2330
|
+
InternalRecord.assignProperty(preserved, key, out[key])
|
|
2233
2331
|
}
|
|
2234
2332
|
}
|
|
2235
|
-
return
|
|
2333
|
+
return preserved
|
|
2236
2334
|
}
|
|
2237
|
-
return
|
|
2335
|
+
return out
|
|
2238
2336
|
})
|
|
2239
2337
|
}
|
|
2240
2338
|
private _rebuild(
|
|
2241
2339
|
recur: (ast: AST) => AST,
|
|
2242
2340
|
recurParameter: (ast: AST) => AST,
|
|
2243
|
-
flipMerge: boolean,
|
|
2244
2341
|
checks: Checks | undefined,
|
|
2245
2342
|
encodingChecks: Checks | undefined
|
|
2246
2343
|
): Objects {
|
|
@@ -2252,10 +2349,9 @@ export class Objects extends Base {
|
|
|
2252
2349
|
const indexes = mapOrSame(this.indexSignatures, (is) => {
|
|
2253
2350
|
const p = recurParameter(is.parameter)
|
|
2254
2351
|
const t = recur(is.type)
|
|
2255
|
-
|
|
2256
|
-
return p === is.parameter && t === is.type && merge === is.merge
|
|
2352
|
+
return p === is.parameter && t === is.type
|
|
2257
2353
|
? is
|
|
2258
|
-
: new IndexSignature(p, t
|
|
2354
|
+
: new IndexSignature(p, t)
|
|
2259
2355
|
})
|
|
2260
2356
|
|
|
2261
2357
|
return props === this.propertySignatures && indexes === this.indexSignatures && checks === this.checks &&
|
|
@@ -2273,11 +2369,11 @@ export class Objects extends Base {
|
|
|
2273
2369
|
}
|
|
2274
2370
|
/** @internal */
|
|
2275
2371
|
flip(recur: (ast: AST) => AST): AST {
|
|
2276
|
-
return this._rebuild(recur, recur,
|
|
2372
|
+
return this._rebuild(recur, recur, this.encodingChecks, this.checks)
|
|
2277
2373
|
}
|
|
2278
2374
|
/** @internal */
|
|
2279
2375
|
recur(recur: (ast: AST) => AST, recurParameter: (ast: AST) => AST = recur): AST {
|
|
2280
|
-
return this._rebuild(recur, recurParameter,
|
|
2376
|
+
return this._rebuild(recur, recurParameter, this.checks, this.encodingChecks)
|
|
2281
2377
|
}
|
|
2282
2378
|
/** @internal */
|
|
2283
2379
|
getExpected(): string {
|
|
@@ -2286,42 +2382,41 @@ export class Objects extends Base {
|
|
|
2286
2382
|
}
|
|
2287
2383
|
}
|
|
2288
2384
|
|
|
2385
|
+
type ObjectParserState = {
|
|
2386
|
+
readonly ast: Objects
|
|
2387
|
+
readonly input: Record<PropertyKey, unknown>
|
|
2388
|
+
readonly options: ParseOptions
|
|
2389
|
+
readonly out: Record<PropertyKey, unknown>
|
|
2390
|
+
issues: Array<SchemaIssue.Issue> | undefined
|
|
2391
|
+
}
|
|
2392
|
+
|
|
2289
2393
|
type ParsedProperty = {
|
|
2290
|
-
readonly ps: PropertySignature | IndexSignature
|
|
2291
2394
|
readonly parser: SchemaParser.Parser
|
|
2292
2395
|
readonly name: PropertyKey
|
|
2293
2396
|
readonly type: AST
|
|
2294
2397
|
}
|
|
2295
2398
|
|
|
2296
|
-
const parseProperties = iterateEager<{
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
}, ParsedProperty>()({
|
|
2304
|
-
onItem(
|
|
2305
|
-
s: {
|
|
2306
|
-
readonly oinput: Option.Option<unknown>
|
|
2307
|
-
readonly input: Record<PropertyKey, unknown>
|
|
2308
|
-
readonly options: ParseOptions
|
|
2309
|
-
readonly out: Record<PropertyKey, unknown>
|
|
2310
|
-
issues: Array<SchemaIssue.Issue> | undefined
|
|
2311
|
-
},
|
|
2312
|
-
p
|
|
2313
|
-
) {
|
|
2314
|
-
const value: Option.Option<unknown> = Object.hasOwn(s.input, p.name)
|
|
2315
|
-
? Option.some(s.input[p.name])
|
|
2316
|
-
: Option.none()
|
|
2399
|
+
const parseProperties = iterateEager<ObjectParserState, ParsedProperty>()({
|
|
2400
|
+
onItem(s, p) {
|
|
2401
|
+
if (!Object.hasOwn(s.input, p.name)) {
|
|
2402
|
+
return p.parser(InternalParser.missing, s.options)
|
|
2403
|
+
}
|
|
2404
|
+
const value = s.input[p.name]
|
|
2405
|
+
InternalRecord.assignProperty(s.out, p.name, value)
|
|
2317
2406
|
return p.parser(value, s.options)
|
|
2318
2407
|
},
|
|
2319
2408
|
step(s, p, exit) {
|
|
2320
2409
|
if (exit._tag === "Failure") {
|
|
2321
2410
|
return wrapPropertyKeyIssue(s, s.ast, p.name, exit)
|
|
2322
|
-
}
|
|
2323
|
-
|
|
2324
|
-
|
|
2411
|
+
}
|
|
2412
|
+
if (exit === InternalParser.sameExit) return
|
|
2413
|
+
const value = (exit as InternalParser.Success<unknown, SchemaIssue.Issue>)[InternalParser.args]
|
|
2414
|
+
if (value !== InternalParser.missing) {
|
|
2415
|
+
InternalRecord.assignProperty(s.out, p.name, value)
|
|
2416
|
+
return
|
|
2417
|
+
}
|
|
2418
|
+
delete s.out[p.name]
|
|
2419
|
+
if (!isOptional(p.type)) {
|
|
2325
2420
|
const issue = new SchemaIssue.Pointer([p.name], new SchemaIssue.MissingKey(p.type.context?.annotations))
|
|
2326
2421
|
if (s.options.errors === "all") {
|
|
2327
2422
|
if (s.issues) s.issues.push(issue)
|
|
@@ -2329,7 +2424,7 @@ const parseProperties = iterateEager<{
|
|
|
2329
2424
|
return
|
|
2330
2425
|
} else {
|
|
2331
2426
|
return Exit.fail(
|
|
2332
|
-
new SchemaIssue.Composite(s.ast, s.
|
|
2427
|
+
new SchemaIssue.Composite(s.ast, [issue], s.input, s.options)
|
|
2333
2428
|
)
|
|
2334
2429
|
}
|
|
2335
2430
|
}
|
|
@@ -2422,6 +2517,21 @@ export type Sentinel = {
|
|
|
2422
2517
|
readonly literal: LiteralValue | symbol
|
|
2423
2518
|
}
|
|
2424
2519
|
|
|
2520
|
+
const toCandidate = memoizeIdempotent((ast: AST): AST => {
|
|
2521
|
+
while (true) {
|
|
2522
|
+
if (isSuspend(ast)) return unknown
|
|
2523
|
+
const encoding = ast.encoding
|
|
2524
|
+
if (!encoding) {
|
|
2525
|
+
// Index signature parameters do not participate in union selection.
|
|
2526
|
+
return (ast as any).recur?.(toCandidate, identity) ?? ast
|
|
2527
|
+
}
|
|
2528
|
+
if (
|
|
2529
|
+
encoding.some((link) => link.transformation._tag === "Middleware" && link.transformation.decode !== identity)
|
|
2530
|
+
) return unknown
|
|
2531
|
+
ast = encoding[encoding.length - 1].to
|
|
2532
|
+
}
|
|
2533
|
+
})
|
|
2534
|
+
|
|
2425
2535
|
function getCandidateTypes(ast: AST): ReadonlyArray<Type> {
|
|
2426
2536
|
switch (ast._tag) {
|
|
2427
2537
|
case "Null":
|
|
@@ -2447,7 +2557,7 @@ function getCandidateTypes(ast: AST): ReadonlyArray<Type> {
|
|
|
2447
2557
|
case "Objects":
|
|
2448
2558
|
return ast.propertySignatures.length || ast.indexSignatures.length
|
|
2449
2559
|
? ["object"]
|
|
2450
|
-
: ["object", "array"]
|
|
2560
|
+
: ["string", "number", "boolean", "symbol", "bigint", "object", "array", "function"]
|
|
2451
2561
|
case "Enum":
|
|
2452
2562
|
return Array.from(new Set(ast.enums.map(([, v]) => typeof v)))
|
|
2453
2563
|
case "Literal":
|
|
@@ -2471,12 +2581,12 @@ function getCandidateTypes(ast: AST): ReadonlyArray<Type> {
|
|
|
2471
2581
|
}
|
|
2472
2582
|
|
|
2473
2583
|
/** @internal */
|
|
2474
|
-
export function collectSentinels(ast: AST):
|
|
2584
|
+
export function collectSentinels(ast: AST): ReadonlyArray<Sentinel> {
|
|
2475
2585
|
switch (ast._tag) {
|
|
2476
2586
|
default:
|
|
2477
2587
|
return []
|
|
2478
2588
|
case "Declaration": {
|
|
2479
|
-
const s = ast.annotations?.[
|
|
2589
|
+
const s = ast.annotations?.[InternalAnnotations.SENTINELS_ANNOTATION_KEY]
|
|
2480
2590
|
return Array.isArray(s) ? s : []
|
|
2481
2591
|
}
|
|
2482
2592
|
case "Objects":
|
|
@@ -2493,63 +2603,182 @@ export function collectSentinels(ast: AST): Array<Sentinel> {
|
|
|
2493
2603
|
return []
|
|
2494
2604
|
})
|
|
2495
2605
|
case "Arrays":
|
|
2496
|
-
return ast.elements.flatMap((e, i) => {
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2606
|
+
return ast.elements.flatMap((e, i): Array<Sentinel> => {
|
|
2607
|
+
if (!isOptional(e)) {
|
|
2608
|
+
if (isLiteral(e)) {
|
|
2609
|
+
return [{ key: i, literal: e.literal }]
|
|
2610
|
+
}
|
|
2611
|
+
if (isUniqueSymbol(e)) {
|
|
2612
|
+
return [{ key: i, literal: e.symbol }]
|
|
2613
|
+
}
|
|
2614
|
+
}
|
|
2615
|
+
return []
|
|
2500
2616
|
})
|
|
2617
|
+
case "Union": {
|
|
2618
|
+
if (ast.types.length === 0) return []
|
|
2619
|
+
const members = ast.types.map((type) => collectSentinels(toCandidate(type)))
|
|
2620
|
+
return members[0].filter((s) =>
|
|
2621
|
+
members.every((sentinels) => sentinels.some((o) => o.key === s.key && o.literal === s.literal))
|
|
2622
|
+
)
|
|
2623
|
+
}
|
|
2501
2624
|
case "Suspend":
|
|
2502
2625
|
return collectSentinels(ast.thunk())
|
|
2503
2626
|
}
|
|
2504
2627
|
}
|
|
2505
2628
|
|
|
2506
|
-
type CandidateIndex =
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2629
|
+
type CandidateIndex = (input: any, isConstructor: boolean) => ReadonlyArray<AST>
|
|
2630
|
+
type SentinelEntry = readonly [
|
|
2631
|
+
byValue: Map<LiteralValue | symbol, Set<number>>,
|
|
2632
|
+
all: Set<number>
|
|
2633
|
+
]
|
|
2634
|
+
type SentinelIndex = Map<PropertyKey, SentinelEntry>
|
|
2511
2635
|
|
|
2512
2636
|
const candidateIndexCache = new WeakMap<ReadonlyArray<AST>, CandidateIndex>()
|
|
2637
|
+
const emptyCandidates: ReadonlyArray<never> = Object.freeze([])
|
|
2513
2638
|
|
|
2514
2639
|
function getIndex(types: ReadonlyArray<AST>): CandidateIndex {
|
|
2515
|
-
let
|
|
2516
|
-
if (
|
|
2517
|
-
|
|
2518
|
-
|
|
2640
|
+
let index = candidateIndexCache.get(types)
|
|
2641
|
+
if (index) return index
|
|
2642
|
+
|
|
2643
|
+
let bySentinel: SentinelIndex | undefined
|
|
2644
|
+
let sentinelCandidateCount = 0
|
|
2645
|
+
let otherwise: { [K in Type]?: Array<number> } | undefined
|
|
2646
|
+
let literalCandidates: Map<LiteralValue | symbol, Array<AST>> | undefined
|
|
2647
|
+
let onlyLiterals = true
|
|
2519
2648
|
for (let i = 0; i < types.length; i++) {
|
|
2520
2649
|
const a = types[i]
|
|
2521
|
-
const encoded =
|
|
2650
|
+
const encoded = toCandidate(a)
|
|
2522
2651
|
if (isNever(encoded)) continue
|
|
2523
2652
|
|
|
2524
|
-
|
|
2525
|
-
|
|
2653
|
+
if (onlyLiterals) {
|
|
2654
|
+
if (isLiteral(encoded) || isUniqueSymbol(encoded)) {
|
|
2655
|
+
literalCandidates ??= new Map()
|
|
2656
|
+
const literal = isLiteral(encoded) ? encoded.literal : encoded.symbol
|
|
2657
|
+
let arr = literalCandidates.get(literal)
|
|
2658
|
+
if (!arr) literalCandidates.set(literal, arr = [])
|
|
2659
|
+
arr.push(a)
|
|
2660
|
+
} else {
|
|
2661
|
+
onlyLiterals = false
|
|
2662
|
+
}
|
|
2663
|
+
}
|
|
2526
2664
|
|
|
2527
|
-
|
|
2528
|
-
idx.byType ??= {}
|
|
2529
|
-
for (const t of candidateTypes) (idx.byType[t] ??= []).push(i)
|
|
2665
|
+
const sentinels = collectSentinels(encoded)
|
|
2530
2666
|
|
|
2531
|
-
if (sentinels.length
|
|
2532
|
-
|
|
2667
|
+
if (sentinels.length) { // discriminated variants
|
|
2668
|
+
bySentinel ??= new Map()
|
|
2669
|
+
sentinelCandidateCount++
|
|
2533
2670
|
for (const { key, literal } of sentinels) {
|
|
2534
|
-
let
|
|
2535
|
-
if (!
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2671
|
+
let entry = bySentinel.get(key)
|
|
2672
|
+
if (!entry) bySentinel.set(key, entry = [new Map(), new Set()])
|
|
2673
|
+
entry[1].add(i)
|
|
2674
|
+
let indexes = entry[0].get(literal)
|
|
2675
|
+
if (!indexes) entry[0].set(literal, indexes = new Set())
|
|
2676
|
+
indexes.add(i)
|
|
2539
2677
|
}
|
|
2540
2678
|
} else { // non-discriminated
|
|
2541
|
-
|
|
2542
|
-
|
|
2679
|
+
otherwise ??= {}
|
|
2680
|
+
const candidateTypes = getCandidateTypes(encoded)
|
|
2681
|
+
for (const t of candidateTypes) (otherwise[t] ??= []).push(i)
|
|
2543
2682
|
}
|
|
2544
2683
|
}
|
|
2545
2684
|
|
|
2546
|
-
|
|
2547
|
-
|
|
2685
|
+
if (onlyLiterals && literalCandidates) {
|
|
2686
|
+
literalCandidates.forEach(Object.freeze)
|
|
2687
|
+
index = (input) => literalCandidates.get(input) ?? emptyCandidates
|
|
2688
|
+
} else if (bySentinel?.size === 1 && !otherwise) {
|
|
2689
|
+
const [key, [byValue]] = bySentinel.entries().next().value!
|
|
2690
|
+
const candidates = byValue as unknown as Map<LiteralValue | symbol, ReadonlyArray<AST>>
|
|
2691
|
+
for (const [literal, indexes] of byValue) {
|
|
2692
|
+
candidates.set(literal, Object.freeze(Array.from(indexes, (index) => types[index])))
|
|
2693
|
+
}
|
|
2694
|
+
index = (input, isConstructor) => {
|
|
2695
|
+
if (Predicate.isObjectKeyword(input)) {
|
|
2696
|
+
const value = Object.hasOwn(input, key) ? (input as any)[key] : undefined
|
|
2697
|
+
if (value !== undefined) return candidates.get(value) ?? emptyCandidates
|
|
2698
|
+
if (isConstructor) return types
|
|
2699
|
+
}
|
|
2700
|
+
return emptyCandidates
|
|
2701
|
+
}
|
|
2702
|
+
} else if (bySentinel) {
|
|
2703
|
+
// A key owned by every discriminated candidate is safe to use as the initial selector: no candidate can
|
|
2704
|
+
// be excluded merely because it uses a different sentinel key. Prefer the key with the most distinct values
|
|
2705
|
+
// to minimize the matching bucket.
|
|
2706
|
+
let commonSentinel: [PropertyKey, SentinelEntry] | undefined
|
|
2707
|
+
for (const entry of bySentinel) {
|
|
2708
|
+
if (
|
|
2709
|
+
(!commonSentinel || entry[1][0].size > commonSentinel[1][0].size) &&
|
|
2710
|
+
entry[1][1].size === sentinelCandidateCount
|
|
2711
|
+
) {
|
|
2712
|
+
commonSentinel = entry
|
|
2713
|
+
}
|
|
2714
|
+
}
|
|
2715
|
+
|
|
2716
|
+
index = (input, isConstructor) => {
|
|
2717
|
+
const runtimeType: Type = input === null ? "null" : Array.isArray(input) ? "array" : typeof input
|
|
2718
|
+
const base = otherwise?.[runtimeType] ?? emptyCandidates
|
|
2719
|
+
if (!Predicate.isObjectKeyword(input)) return base.map((i) => types[i])
|
|
2720
|
+
|
|
2721
|
+
// Non-discriminated candidates are runtime-type fallbacks and are never removed by sentinel checks.
|
|
2722
|
+
const selected = new Set(base)
|
|
2723
|
+
let directKey: PropertyKey | undefined
|
|
2724
|
+
// An observed common key can seed the selection directly; an unknown value rules out every
|
|
2725
|
+
// discriminated candidate.
|
|
2726
|
+
if (commonSentinel) {
|
|
2727
|
+
const [key, [byValue]] = commonSentinel
|
|
2728
|
+
const hasKey = Object.hasOwn(input, key)
|
|
2729
|
+
const value = hasKey ? (input as any)[key] : undefined
|
|
2730
|
+
if (hasKey && (!isConstructor || value !== undefined)) {
|
|
2731
|
+
const match = byValue.get(value)
|
|
2732
|
+
if (!match) return base.map((i) => types[i])
|
|
2733
|
+
for (const i of match) selected.add(i)
|
|
2734
|
+
directKey = key
|
|
2735
|
+
}
|
|
2736
|
+
}
|
|
2737
|
+
|
|
2738
|
+
// Without an observed common key, collect positive matches from every sentinel. Constructor mode treats
|
|
2739
|
+
// absent and undefined keys as unconstrained and therefore selects every candidate that owns the key.
|
|
2740
|
+
if (directKey === undefined) {
|
|
2741
|
+
for (const [key, [byValue, all]] of bySentinel) {
|
|
2742
|
+
const hasKey = Object.hasOwn(input, key)
|
|
2743
|
+
const value = hasKey ? (input as any)[key] : undefined
|
|
2744
|
+
if (hasKey && (!isConstructor || value !== undefined)) {
|
|
2745
|
+
const match = byValue.get(value)
|
|
2746
|
+
if (match) {
|
|
2747
|
+
for (const i of match) selected.add(i)
|
|
2748
|
+
}
|
|
2749
|
+
} else if (isConstructor) {
|
|
2750
|
+
for (const i of all) selected.add(i)
|
|
2751
|
+
}
|
|
2752
|
+
}
|
|
2753
|
+
}
|
|
2754
|
+
// Missing keys are neutral. An observed key rejects only selected candidates that own it and do not match.
|
|
2755
|
+
for (const [key, [byValue, all]] of bySentinel) {
|
|
2756
|
+
if (key === directKey) continue
|
|
2757
|
+
const hasKey = Object.hasOwn(input, key)
|
|
2758
|
+
const value = hasKey ? (input as any)[key] : undefined
|
|
2759
|
+
if (hasKey && (!isConstructor || value !== undefined)) {
|
|
2760
|
+
const match = byValue.get(value)
|
|
2761
|
+
for (const i of selected) {
|
|
2762
|
+
if (all.has(i) && !match?.has(i)) selected.delete(i)
|
|
2763
|
+
}
|
|
2764
|
+
}
|
|
2765
|
+
}
|
|
2766
|
+
return Array.from(selected).sort((a, b) => a - b).map((i) => types[i])
|
|
2767
|
+
}
|
|
2768
|
+
} else {
|
|
2769
|
+
index = (input) => {
|
|
2770
|
+
const runtimeType: Type = input === null ? "null" : Array.isArray(input) ? "array" : typeof input
|
|
2771
|
+
return (otherwise?.[runtimeType] ?? emptyCandidates).map((i) => types[i]).filter(filterLiterals(input))
|
|
2772
|
+
}
|
|
2773
|
+
}
|
|
2774
|
+
|
|
2775
|
+
candidateIndexCache.set(types, index)
|
|
2776
|
+
return index
|
|
2548
2777
|
}
|
|
2549
2778
|
|
|
2550
2779
|
function filterLiterals(input: any) {
|
|
2551
2780
|
return (ast: AST) => {
|
|
2552
|
-
const encoded =
|
|
2781
|
+
const encoded = toCandidate(ast)
|
|
2553
2782
|
return encoded._tag === "Literal" ?
|
|
2554
2783
|
encoded.literal === input
|
|
2555
2784
|
: encoded._tag === "UniqueSymbol" ?
|
|
@@ -2564,30 +2793,12 @@ function filterLiterals(input: any) {
|
|
|
2564
2793
|
*
|
|
2565
2794
|
* @internal
|
|
2566
2795
|
*/
|
|
2567
|
-
export function getCandidates(
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
const base = idx.otherwise?.[runtimeType] ?? []
|
|
2574
|
-
if (runtimeType === "object" || runtimeType === "array") {
|
|
2575
|
-
const selected = new Set(base)
|
|
2576
|
-
for (const [k, m] of idx.bySentinel) {
|
|
2577
|
-
if (Object.hasOwn(input, k)) {
|
|
2578
|
-
const match = m.get((input as any)[k])
|
|
2579
|
-
if (match) {
|
|
2580
|
-
for (const candidate of match) selected.add(candidate)
|
|
2581
|
-
}
|
|
2582
|
-
}
|
|
2583
|
-
}
|
|
2584
|
-
return Array.from(selected).sort((a, b) => a - b).map((i) => types[i]).filter(filterLiterals(input))
|
|
2585
|
-
}
|
|
2586
|
-
return base.map((i) => types[i])
|
|
2587
|
-
}
|
|
2588
|
-
|
|
2589
|
-
// 2. Fallback: runtime-type dispatch only
|
|
2590
|
-
return (idx.byType?.[runtimeType] ?? []).map((i) => types[i]).filter(filterLiterals(input))
|
|
2796
|
+
export function getCandidates(
|
|
2797
|
+
input: any,
|
|
2798
|
+
types: ReadonlyArray<AST>,
|
|
2799
|
+
isConstructor = false
|
|
2800
|
+
): ReadonlyArray<AST> {
|
|
2801
|
+
return getIndex(types)(input, isConstructor)
|
|
2591
2802
|
}
|
|
2592
2803
|
|
|
2593
2804
|
/**
|
|
@@ -2605,15 +2816,14 @@ export function getCandidates(input: any, types: ReadonlyArray<AST>): ReadonlyAr
|
|
|
2605
2816
|
*
|
|
2606
2817
|
* **Example** (Inspecting a union AST)
|
|
2607
2818
|
*
|
|
2608
|
-
* ```ts
|
|
2819
|
+
* ```ts import.meta.vitest
|
|
2609
2820
|
* import { Schema, SchemaAST } from "effect"
|
|
2610
2821
|
*
|
|
2611
2822
|
* const schema = Schema.Union([Schema.String, Schema.Number])
|
|
2612
2823
|
* const ast = schema.ast
|
|
2613
2824
|
*
|
|
2614
2825
|
* if (SchemaAST.isUnion(ast)) {
|
|
2615
|
-
*
|
|
2616
|
-
* console.log(ast.mode) // "anyOf"
|
|
2826
|
+
* [ast.types.length, ast.mode] // => [2, "anyOf"]
|
|
2617
2827
|
* }
|
|
2618
2828
|
* ```
|
|
2619
2829
|
*
|
|
@@ -2642,38 +2852,46 @@ export class Union<A extends AST = AST> extends Base {
|
|
|
2642
2852
|
this.encodingChecks = encodingChecks
|
|
2643
2853
|
}
|
|
2644
2854
|
/** @internal */
|
|
2645
|
-
getParser(
|
|
2855
|
+
getParser(
|
|
2856
|
+
compile: SchemaParser.Compiler,
|
|
2857
|
+
compileConstructorDefault?: SchemaParser.Compiler
|
|
2858
|
+
): SchemaParser.Parser {
|
|
2646
2859
|
// oxlint-disable-next-line @typescript-eslint/no-this-alias
|
|
2647
2860
|
const ast = this
|
|
2648
2861
|
|
|
2649
|
-
return (
|
|
2650
|
-
if (
|
|
2651
|
-
return
|
|
2862
|
+
return (input, options) => {
|
|
2863
|
+
if (input === InternalParser.missing) {
|
|
2864
|
+
return InternalParser.missingExit
|
|
2865
|
+
}
|
|
2866
|
+
const candidates = getCandidates(input, ast.types, compileConstructorDefault !== undefined)
|
|
2867
|
+
|
|
2868
|
+
if (candidates.length === 1) {
|
|
2869
|
+
const result = compile(candidates[0])(input, options)
|
|
2870
|
+
if ((result as Exit.Exit<unknown, SchemaIssue.Issue>)._tag === "Success") return result
|
|
2871
|
+
return effectIsExit(result)
|
|
2872
|
+
? failSingleUnionCandidate(ast, (result as Exit.Failure<unknown, SchemaIssue.Issue>).cause, input, options)
|
|
2873
|
+
: Effect.catchCause(result, (cause) => failSingleUnionCandidate(ast, cause, input, options))
|
|
2652
2874
|
}
|
|
2653
|
-
const input = oinput.value
|
|
2654
|
-
const candidates = getCandidates(input, ast.types)
|
|
2655
2875
|
|
|
2656
2876
|
const state = {
|
|
2657
2877
|
ast,
|
|
2658
|
-
|
|
2659
|
-
oinput,
|
|
2878
|
+
compile,
|
|
2660
2879
|
input,
|
|
2661
2880
|
out: undefined,
|
|
2662
|
-
successes: [],
|
|
2881
|
+
successes: ast.mode === "oneOf" ? [] : undefined,
|
|
2663
2882
|
issues: undefined as Arr.NonEmptyArray<SchemaIssue.Issue> | undefined,
|
|
2664
2883
|
options
|
|
2665
2884
|
}
|
|
2666
2885
|
const concurrency = resolveConcurrency(options?.concurrency)
|
|
2667
2886
|
const eff = parseUnion(state, candidates, concurrency ? { ...concurrency, orderedStep: true } : undefined)
|
|
2668
2887
|
if (!eff) {
|
|
2669
|
-
return state.out
|
|
2670
|
-
|
|
2671
|
-
: Effect.fail(new SchemaIssue.AnyOf(ast, input, state.issues ?? []))
|
|
2888
|
+
if (state.out) return state.out
|
|
2889
|
+
return Effect.fail(new SchemaIssue.AnyOf(ast, state.issues ?? [], input, options))
|
|
2672
2890
|
}
|
|
2673
|
-
return Effect.
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
|
|
2891
|
+
return Effect.flatMapEager(eff, (_) => {
|
|
2892
|
+
if (state.out === InternalParser.sameExit) return Effect.succeed(input)
|
|
2893
|
+
if (state.out) return state.out
|
|
2894
|
+
return Effect.fail(new SchemaIssue.AnyOf(ast, state.issues ?? [], input, options))
|
|
2677
2895
|
})
|
|
2678
2896
|
}
|
|
2679
2897
|
}
|
|
@@ -2738,19 +2956,29 @@ export class Union<A extends AST = AST> extends Base {
|
|
|
2738
2956
|
}
|
|
2739
2957
|
}
|
|
2740
2958
|
|
|
2959
|
+
function failSingleUnionCandidate(
|
|
2960
|
+
ast: Union,
|
|
2961
|
+
cause: Cause.Cause<SchemaIssue.Issue>,
|
|
2962
|
+
input: unknown,
|
|
2963
|
+
options: ParseOptions
|
|
2964
|
+
) {
|
|
2965
|
+
const issue = InternalSchemaCause.getSchemaIssue(cause)
|
|
2966
|
+
if (!issue) return Exit.failCause(cause)
|
|
2967
|
+
return Exit.fail(new SchemaIssue.AnyOf(ast, [issue], input, options))
|
|
2968
|
+
}
|
|
2969
|
+
|
|
2741
2970
|
const parseUnion = iterateEager<{
|
|
2742
|
-
readonly
|
|
2971
|
+
readonly compile: (ast: AST) => SchemaParser.Parser
|
|
2743
2972
|
readonly ast: Union
|
|
2744
|
-
readonly oinput: Option.Option<unknown>
|
|
2745
2973
|
readonly input: unknown
|
|
2746
2974
|
readonly options: ParseOptions
|
|
2747
|
-
out:
|
|
2748
|
-
successes: Array<AST>
|
|
2975
|
+
out: Exit.Success<unknown, SchemaIssue.Issue> | undefined
|
|
2976
|
+
readonly successes: Array<AST> | undefined
|
|
2749
2977
|
issues: Array<SchemaIssue.Issue> | undefined
|
|
2750
2978
|
}, AST>()({
|
|
2751
2979
|
onItem(s, ast) {
|
|
2752
|
-
const parser = s.
|
|
2753
|
-
return parser(s.
|
|
2980
|
+
const parser = s.compile(ast)
|
|
2981
|
+
return parser(s.input, s.options)
|
|
2754
2982
|
},
|
|
2755
2983
|
step(s, candidate, exit) {
|
|
2756
2984
|
if (exit._tag === "Failure") {
|
|
@@ -2761,13 +2989,14 @@ const parseUnion = iterateEager<{
|
|
|
2761
2989
|
if (s.issues) s.issues.push(issue)
|
|
2762
2990
|
else s.issues = [issue]
|
|
2763
2991
|
} else {
|
|
2764
|
-
if (s.out && s.
|
|
2992
|
+
if (s.out && s.successes) {
|
|
2765
2993
|
s.successes.push(candidate)
|
|
2766
|
-
return Exit.fail(new SchemaIssue.OneOf(s.ast, s.input, s.
|
|
2994
|
+
return Exit.fail(new SchemaIssue.OneOf(s.ast, s.successes, s.input, s.options))
|
|
2767
2995
|
}
|
|
2768
|
-
s.out = exit
|
|
2769
|
-
s.successes
|
|
2770
|
-
|
|
2996
|
+
s.out = exit
|
|
2997
|
+
if (s.successes) {
|
|
2998
|
+
s.successes.push(candidate)
|
|
2999
|
+
} else {
|
|
2771
3000
|
return Exit.void
|
|
2772
3001
|
}
|
|
2773
3002
|
}
|
|
@@ -2780,14 +3009,6 @@ const nonFiniteLiterals = new Union([
|
|
|
2780
3009
|
new Literal("NaN")
|
|
2781
3010
|
], "anyOf")
|
|
2782
3011
|
|
|
2783
|
-
const numberToJson = new Link(
|
|
2784
|
-
new Union([number, nonFiniteLiterals], "anyOf"),
|
|
2785
|
-
new SchemaTransformation.Transformation(
|
|
2786
|
-
SchemaGetter.Number(),
|
|
2787
|
-
SchemaGetter.transform((n) => globalThis.Number.isFinite(n) ? n : globalThis.String(n))
|
|
2788
|
-
)
|
|
2789
|
-
)
|
|
2790
|
-
|
|
2791
3012
|
function formatIsMutable(isMutable: boolean | undefined): string {
|
|
2792
3013
|
return isMutable ? "" : "readonly "
|
|
2793
3014
|
}
|
|
@@ -2821,7 +3042,7 @@ export function memoizeThunk<A>(f: () => A): () => A {
|
|
|
2821
3042
|
*
|
|
2822
3043
|
* **Example** (Defining recursive schema ASTs)
|
|
2823
3044
|
*
|
|
2824
|
-
* ```ts
|
|
3045
|
+
* ```ts import.meta.vitest
|
|
2825
3046
|
* import { Schema, SchemaAST } from "effect"
|
|
2826
3047
|
*
|
|
2827
3048
|
* interface Category {
|
|
@@ -2834,7 +3055,7 @@ export function memoizeThunk<A>(f: () => A): () => A {
|
|
|
2834
3055
|
* children: Schema.Array(Schema.suspend((): Schema.Codec<Category> => Category))
|
|
2835
3056
|
* })
|
|
2836
3057
|
*
|
|
2837
|
-
* //
|
|
3058
|
+
* SchemaAST.isObjects(Category.ast) // => true
|
|
2838
3059
|
* ```
|
|
2839
3060
|
*
|
|
2840
3061
|
* @see {@link isSuspend}
|
|
@@ -2852,15 +3073,16 @@ export class Suspend extends Base {
|
|
|
2852
3073
|
encoding?: Encoding,
|
|
2853
3074
|
context?: Context
|
|
2854
3075
|
) {
|
|
2855
|
-
if (checks
|
|
3076
|
+
if (checks) {
|
|
2856
3077
|
throw new Error("Cannot add checks to Suspend")
|
|
2857
3078
|
}
|
|
2858
3079
|
super(annotations, undefined, encoding, context)
|
|
2859
3080
|
this.thunk = memoizeThunk(thunk)
|
|
2860
3081
|
}
|
|
2861
3082
|
/** @internal */
|
|
2862
|
-
getParser(
|
|
2863
|
-
|
|
3083
|
+
getParser(compile: SchemaParser.Compiler): SchemaParser.Parser {
|
|
3084
|
+
let parser: SchemaParser.Parser
|
|
3085
|
+
return (input, options) => (parser ??= compile(this.thunk()))(input, options)
|
|
2864
3086
|
}
|
|
2865
3087
|
/** @internal */
|
|
2866
3088
|
recur(recur: (ast: AST) => AST) {
|
|
@@ -2889,8 +3111,8 @@ export class Suspend extends Base {
|
|
|
2889
3111
|
*
|
|
2890
3112
|
* - `run` — the validation function. Returns `undefined` on success, or an
|
|
2891
3113
|
* `Issue` on failure.
|
|
2892
|
-
* - `annotations` — optional filter-level
|
|
2893
|
-
*
|
|
3114
|
+
* - `annotations` — optional filter-level annotations (expected message,
|
|
3115
|
+
* representation, arbitrary constraint hints).
|
|
2894
3116
|
* - `aborted` — when `true`, parsing stops immediately after this filter
|
|
2895
3117
|
* fails (no further checks run).
|
|
2896
3118
|
*
|
|
@@ -2995,7 +3217,7 @@ export function makeFilter<T>(
|
|
|
2995
3217
|
aborted: boolean = false
|
|
2996
3218
|
): Filter<T> {
|
|
2997
3219
|
return new Filter(
|
|
2998
|
-
(input, ast, options) => SchemaIssue.
|
|
3220
|
+
(input, ast, options) => SchemaIssue.normalizeFilterOutput(ast, filter(input, ast, options), input, options),
|
|
2999
3221
|
annotations,
|
|
3000
3222
|
aborted
|
|
3001
3223
|
)
|
|
@@ -3007,12 +3229,38 @@ export function makeFilterByGuard<T extends E, E>(
|
|
|
3007
3229
|
annotations?: Schema.Annotations.Filter
|
|
3008
3230
|
): Filter<any> {
|
|
3009
3231
|
return new Filter(
|
|
3010
|
-
(input: E) => is(input) ? undefined : new SchemaIssue.InvalidValue(
|
|
3232
|
+
(input: E, _ast, options) => is(input) ? undefined : new SchemaIssue.InvalidValue(undefined, input, options),
|
|
3011
3233
|
annotations,
|
|
3012
3234
|
true // after a guard, we always want to abort
|
|
3013
3235
|
)
|
|
3014
3236
|
}
|
|
3015
3237
|
|
|
3238
|
+
/** @internal */
|
|
3239
|
+
export function isFinite(annotations?: Schema.Annotations.Filter) {
|
|
3240
|
+
return makeFilter(
|
|
3241
|
+
(n: number) => globalThis.Number.isFinite(n),
|
|
3242
|
+
{
|
|
3243
|
+
expected: "a finite number",
|
|
3244
|
+
representation: {
|
|
3245
|
+
id: "effect/schema/isFinite",
|
|
3246
|
+
payload: null
|
|
3247
|
+
},
|
|
3248
|
+
toJsonSchema: () => ({ type: "number" }),
|
|
3249
|
+
toCode: () => ({ runtime: "Schema.isFinite()" }),
|
|
3250
|
+
arbitrary: {
|
|
3251
|
+
constraint: {
|
|
3252
|
+
noInfinity: true,
|
|
3253
|
+
noNaN: true
|
|
3254
|
+
}
|
|
3255
|
+
},
|
|
3256
|
+
...annotations
|
|
3257
|
+
}
|
|
3258
|
+
)
|
|
3259
|
+
}
|
|
3260
|
+
|
|
3261
|
+
/** @internal */
|
|
3262
|
+
export const finite = appendChecks(number, [isFinite()])
|
|
3263
|
+
|
|
3016
3264
|
/**
|
|
3017
3265
|
* Creates a {@link Filter} that validates strings by running `RegExp.test`.
|
|
3018
3266
|
*
|
|
@@ -3024,21 +3272,25 @@ export function makeFilterByGuard<T extends E, E>(
|
|
|
3024
3272
|
* **Details**
|
|
3025
3273
|
*
|
|
3026
3274
|
* The filter can be used with `Schema.filter` or attached directly to a
|
|
3027
|
-
* `String` AST node through checks. The regular expression
|
|
3028
|
-
*
|
|
3275
|
+
* `String` AST node through checks. The regular expression is cloned and its
|
|
3276
|
+
* `lastIndex` is reset before each test, so global and sticky expressions are
|
|
3277
|
+
* deterministic and the provided regular expression is not mutated. The
|
|
3278
|
+
* regular expression source is stored in annotations for serialization and
|
|
3279
|
+
* arbitrary generation.
|
|
3029
3280
|
*
|
|
3030
3281
|
* **Gotchas**
|
|
3031
3282
|
*
|
|
3032
|
-
*
|
|
3033
|
-
*
|
|
3034
|
-
* `y` flag.
|
|
3283
|
+
* When deriving an arbitrary, only `regExp.source` is used. Regular expression
|
|
3284
|
+
* flags are ignored because fast-check does not support them.
|
|
3035
3285
|
*
|
|
3036
3286
|
* **Example** (Validating an email pattern)
|
|
3037
3287
|
*
|
|
3038
|
-
* ```ts
|
|
3288
|
+
* ```ts import.meta.vitest
|
|
3039
3289
|
* import { SchemaAST } from "effect"
|
|
3040
3290
|
*
|
|
3041
3291
|
* const emailFilter = SchemaAST.isPattern(/^[^@]+@[^@]+$/)
|
|
3292
|
+
* emailFilter.run("alice@example.com", SchemaAST.string, {}) // => undefined
|
|
3293
|
+
* emailFilter.run("invalid", SchemaAST.string, {})?._tag // => "InvalidValue"
|
|
3042
3294
|
* ```
|
|
3043
3295
|
*
|
|
3044
3296
|
* @see {@link Filter}
|
|
@@ -3047,14 +3299,19 @@ export function makeFilterByGuard<T extends E, E>(
|
|
|
3047
3299
|
*/
|
|
3048
3300
|
export function isPattern(regExp: globalThis.RegExp, annotations?: Schema.Annotations.Filter) {
|
|
3049
3301
|
const source = regExp.source
|
|
3302
|
+
const pattern = new globalThis.RegExp(source, regExp.flags)
|
|
3050
3303
|
return makeFilter(
|
|
3051
|
-
(s: string) =>
|
|
3304
|
+
(s: string) => {
|
|
3305
|
+
pattern.lastIndex = 0
|
|
3306
|
+
return pattern.test(s)
|
|
3307
|
+
},
|
|
3052
3308
|
{
|
|
3053
3309
|
expected: `a string matching the RegExp ${source}`,
|
|
3054
|
-
|
|
3055
|
-
|
|
3056
|
-
regExp
|
|
3310
|
+
representation: {
|
|
3311
|
+
id: "effect/schema/isPattern",
|
|
3312
|
+
payload: { source, flags: regExp.flags }
|
|
3057
3313
|
},
|
|
3314
|
+
toJsonSchema: () => ({ pattern: source }),
|
|
3058
3315
|
arbitrary: {
|
|
3059
3316
|
constraint: {
|
|
3060
3317
|
patterns: [regExp.source]
|
|
@@ -3076,6 +3333,13 @@ function modifyOwnPropertyDescriptors<A extends AST>(
|
|
|
3076
3333
|
return Object.create(Object.getPrototypeOf(ast), d)
|
|
3077
3334
|
}
|
|
3078
3335
|
|
|
3336
|
+
const contextOwners = new WeakMap<AST, AST>()
|
|
3337
|
+
|
|
3338
|
+
/** @internal */
|
|
3339
|
+
export function getContextOwner(ast: AST): AST {
|
|
3340
|
+
return contextOwners.get(ast) ?? ast
|
|
3341
|
+
}
|
|
3342
|
+
|
|
3079
3343
|
/** @internal */
|
|
3080
3344
|
export function replaceEncoding<A extends AST>(ast: A, encoding: Encoding | undefined): A {
|
|
3081
3345
|
if (ast.encoding === encoding) {
|
|
@@ -3091,9 +3355,15 @@ export function replaceContext<A extends AST>(ast: A, context: Context | undefin
|
|
|
3091
3355
|
if (ast.context === context) {
|
|
3092
3356
|
return ast
|
|
3093
3357
|
}
|
|
3094
|
-
|
|
3358
|
+
const owner = getContextOwner(ast)
|
|
3359
|
+
if (owner.context === context) {
|
|
3360
|
+
return owner as A
|
|
3361
|
+
}
|
|
3362
|
+
const out = modifyOwnPropertyDescriptors(ast, (d) => {
|
|
3095
3363
|
d.context.value = context
|
|
3096
3364
|
})
|
|
3365
|
+
contextOwners.set(out, owner)
|
|
3366
|
+
return out
|
|
3097
3367
|
}
|
|
3098
3368
|
|
|
3099
3369
|
/** @internal */
|
|
@@ -3114,7 +3384,7 @@ export function annotate<A extends AST>(ast: A, annotations: Schema.Annotations.
|
|
|
3114
3384
|
|
|
3115
3385
|
/** @internal */
|
|
3116
3386
|
export function replaceChecks<A extends AST>(ast: A, checks: Checks | undefined): A {
|
|
3117
|
-
if (ast._tag === "Suspend" && checks
|
|
3387
|
+
if (ast._tag === "Suspend" && checks) {
|
|
3118
3388
|
throw new Error("Cannot add checks to Suspend")
|
|
3119
3389
|
}
|
|
3120
3390
|
if (ast.checks === checks) {
|
|
@@ -3130,14 +3400,17 @@ export function appendChecks<A extends AST>(ast: A, checks: Checks | undefined):
|
|
|
3130
3400
|
return replaceChecks(ast, combineChecks(ast.checks, checks))
|
|
3131
3401
|
}
|
|
3132
3402
|
|
|
3403
|
+
/** @internal */
|
|
3404
|
+
export function mapLink(link: Link, f: (ast: AST) => AST): Link {
|
|
3405
|
+
const to = f(link.to)
|
|
3406
|
+
return to === link.to ? link : new Link(to, link.transformation)
|
|
3407
|
+
}
|
|
3408
|
+
|
|
3133
3409
|
function updateLastLink(encoding: Encoding, f: (ast: AST) => AST): Encoding {
|
|
3134
3410
|
const links = encoding
|
|
3135
3411
|
const last = links[links.length - 1]
|
|
3136
|
-
const
|
|
3137
|
-
|
|
3138
|
-
return Arr.append(encoding.slice(0, encoding.length - 1), new Link(to, last.transformation))
|
|
3139
|
-
}
|
|
3140
|
-
return encoding
|
|
3412
|
+
const out = mapLink(last, f)
|
|
3413
|
+
return out === last ? encoding : Arr.append(encoding.slice(0, encoding.length - 1), out)
|
|
3141
3414
|
}
|
|
3142
3415
|
|
|
3143
3416
|
/** @internal */
|
|
@@ -3145,6 +3418,11 @@ export function applyToLastLink(f: (ast: AST) => AST) {
|
|
|
3145
3418
|
return <A extends AST>(ast: A): A => ast.encoding ? replaceEncoding(ast, updateLastLink(ast.encoding, f)) : ast
|
|
3146
3419
|
}
|
|
3147
3420
|
|
|
3421
|
+
/** @internal */
|
|
3422
|
+
export function replaceContextLastLink<A extends AST>(ast: A, context: Context): A {
|
|
3423
|
+
return applyToLastLink((ast) => replaceContext(ast, context))(ast)
|
|
3424
|
+
}
|
|
3425
|
+
|
|
3148
3426
|
/** @internal */
|
|
3149
3427
|
export function applyToSelfOrLastLinkEncoding(f: (ast: AST) => AST) {
|
|
3150
3428
|
function out(ast: AST): AST {
|
|
@@ -3153,6 +3431,21 @@ export function applyToSelfOrLastLinkEncoding(f: (ast: AST) => AST) {
|
|
|
3153
3431
|
return memoize(out)
|
|
3154
3432
|
}
|
|
3155
3433
|
|
|
3434
|
+
/** @internal */
|
|
3435
|
+
export function applyToSelfOrLastLinkEncodingIdempotent(
|
|
3436
|
+
f: (ast: AST) => AST,
|
|
3437
|
+
options?: { readonly stopAt?: (link: Link) => boolean }
|
|
3438
|
+
) {
|
|
3439
|
+
function out(ast: AST): AST {
|
|
3440
|
+
if (ast.encoding) {
|
|
3441
|
+
const last = ast.encoding[ast.encoding.length - 1]
|
|
3442
|
+
return options?.stopAt?.(last) ? ast : replaceEncoding(ast, updateLastLink(ast.encoding, out))
|
|
3443
|
+
}
|
|
3444
|
+
return f(ast)
|
|
3445
|
+
}
|
|
3446
|
+
return memoizeIdempotent(out)
|
|
3447
|
+
}
|
|
3448
|
+
|
|
3156
3449
|
/** @internal */
|
|
3157
3450
|
export function middlewareDecoding(
|
|
3158
3451
|
ast: AST,
|
|
@@ -3213,7 +3506,7 @@ export function annotateKey<A extends AST>(ast: A, annotations: Schema.Annotatio
|
|
|
3213
3506
|
new Context(
|
|
3214
3507
|
ast.context.isOptional,
|
|
3215
3508
|
ast.context.isMutable,
|
|
3216
|
-
ast.context.
|
|
3509
|
+
ast.context.constructorDefault,
|
|
3217
3510
|
{ ...ast.context.annotations, ...annotations }
|
|
3218
3511
|
) :
|
|
3219
3512
|
new Context(false, false, undefined, annotations)
|
|
@@ -3221,42 +3514,33 @@ export function annotateKey<A extends AST>(ast: A, annotations: Schema.Annotatio
|
|
|
3221
3514
|
}
|
|
3222
3515
|
|
|
3223
3516
|
/** @internal */
|
|
3224
|
-
export const
|
|
3225
|
-
|
|
3226
|
-
/**
|
|
3227
|
-
* Marks an AST node's property key as optional by setting
|
|
3228
|
-
* {@link Context.isOptional} to `true`.
|
|
3229
|
-
*
|
|
3230
|
-
* **Details**
|
|
3231
|
-
*
|
|
3232
|
-
* Also propagates the optional flag through the last link of the encoding
|
|
3233
|
-
* chain if present.
|
|
3234
|
-
*
|
|
3235
|
-
* @see {@link isOptional}
|
|
3236
|
-
* @see {@link Context}
|
|
3237
|
-
* @category transforming
|
|
3238
|
-
* @since 4.0.0
|
|
3239
|
-
*/
|
|
3240
|
-
export function optionalKey<A extends AST>(ast: A): A {
|
|
3517
|
+
export const optionalKey: <A extends AST>(ast: A) => A = memoizeIdempotent(<A extends AST>(ast: A): A => {
|
|
3241
3518
|
const context = ast.context ?
|
|
3242
3519
|
ast.context.isOptional === false ?
|
|
3243
|
-
new Context(true, ast.context.isMutable, ast.context.
|
|
3520
|
+
new Context(true, ast.context.isMutable, ast.context.constructorDefault, ast.context.annotations) :
|
|
3244
3521
|
ast.context :
|
|
3245
3522
|
new Context(true, false)
|
|
3246
3523
|
return optionalKeyLastLink(replaceContext(ast, context))
|
|
3247
|
-
}
|
|
3524
|
+
})
|
|
3248
3525
|
|
|
3249
|
-
const
|
|
3526
|
+
const optionalKeyLastLink = applyToLastLink(optionalKey)
|
|
3527
|
+
|
|
3528
|
+
/** @internal */
|
|
3529
|
+
export const optional = memoize(<A extends AST>(ast: A): Union<A | Undefined> =>
|
|
3530
|
+
optionalKey(new Union([ast, undefined_], "anyOf"))
|
|
3531
|
+
)
|
|
3250
3532
|
|
|
3251
3533
|
/** @internal */
|
|
3252
|
-
export
|
|
3534
|
+
export const mutableKey = memoizeIdempotent(<A extends AST>(ast: A): A => {
|
|
3253
3535
|
const context = ast.context ?
|
|
3254
3536
|
ast.context.isMutable === false ?
|
|
3255
|
-
new Context(ast.context.isOptional, true, ast.context.
|
|
3537
|
+
new Context(ast.context.isOptional, true, ast.context.constructorDefault, ast.context.annotations) :
|
|
3256
3538
|
ast.context :
|
|
3257
3539
|
new Context(false, true)
|
|
3258
3540
|
return mutableKeyLastLink(replaceContext(ast, context))
|
|
3259
|
-
}
|
|
3541
|
+
})
|
|
3542
|
+
|
|
3543
|
+
const mutableKeyLastLink = applyToLastLink(mutableKey)
|
|
3260
3544
|
|
|
3261
3545
|
/** @internal */
|
|
3262
3546
|
export function withConstructorDefault<A extends AST>(
|
|
@@ -3267,10 +3551,10 @@ export function withConstructorDefault<A extends AST>(
|
|
|
3267
3551
|
SchemaGetter.withDefault(defaultValue),
|
|
3268
3552
|
SchemaGetter.passthrough()
|
|
3269
3553
|
)
|
|
3270
|
-
const
|
|
3554
|
+
const constructorDefault = new Link(unknown, transformation)
|
|
3271
3555
|
const context = ast.context ?
|
|
3272
|
-
new Context(ast.context.isOptional, ast.context.isMutable,
|
|
3273
|
-
new Context(false, false,
|
|
3556
|
+
new Context(ast.context.isOptional, ast.context.isMutable, constructorDefault, ast.context.annotations) :
|
|
3557
|
+
new Context(false, false, constructorDefault)
|
|
3274
3558
|
return replaceContext(ast, context)
|
|
3275
3559
|
}
|
|
3276
3560
|
|
|
@@ -3332,11 +3616,11 @@ function parseParameter(ast: AST): {
|
|
|
3332
3616
|
}
|
|
3333
3617
|
|
|
3334
3618
|
/** @internal */
|
|
3335
|
-
export function record(key: AST, value: AST
|
|
3619
|
+
export function record(key: AST, value: AST): Objects {
|
|
3336
3620
|
const { literals, parameters: indexSignatures } = parseParameter(key)
|
|
3337
3621
|
return new Objects(
|
|
3338
3622
|
literals.map((literal) => new PropertySignature(literal, value)),
|
|
3339
|
-
indexSignatures.map((parameter) => new IndexSignature(parameter, value
|
|
3623
|
+
indexSignatures.map((parameter) => new IndexSignature(parameter, value))
|
|
3340
3624
|
)
|
|
3341
3625
|
}
|
|
3342
3626
|
|
|
@@ -3366,6 +3650,20 @@ export function isMutable(ast: AST): boolean {
|
|
|
3366
3650
|
return ast.context?.isMutable ?? false
|
|
3367
3651
|
}
|
|
3368
3652
|
|
|
3653
|
+
function isStructuralCheck(check: Check<any>): boolean {
|
|
3654
|
+
return check.annotations?.[InternalAnnotations.STRUCTURAL_ANNOTATION_KEY] === true ||
|
|
3655
|
+
check._tag === "FilterGroup" && check.checks.every(isStructuralCheck)
|
|
3656
|
+
}
|
|
3657
|
+
|
|
3658
|
+
function extractStructuralChecks(checks: Checks): Checks | undefined {
|
|
3659
|
+
function extract(check: Check<any>): Array<Check<any>> {
|
|
3660
|
+
if (isStructuralCheck(check)) return [check]
|
|
3661
|
+
return check._tag === "FilterGroup" ? check.checks.flatMap(extract) : []
|
|
3662
|
+
}
|
|
3663
|
+
const out = checks.flatMap(extract)
|
|
3664
|
+
return Arr.isArrayNonEmpty(out) ? out : undefined
|
|
3665
|
+
}
|
|
3666
|
+
|
|
3369
3667
|
/**
|
|
3370
3668
|
* Strips all encoding transformations from an AST, returning the decoded
|
|
3371
3669
|
* (type-level) representation.
|
|
@@ -3378,12 +3676,12 @@ export function isMutable(ast: AST): boolean {
|
|
|
3378
3676
|
*
|
|
3379
3677
|
* **Example** (Getting the type AST)
|
|
3380
3678
|
*
|
|
3381
|
-
* ```ts
|
|
3679
|
+
* ```ts import.meta.vitest
|
|
3382
3680
|
* import { Schema, SchemaAST } from "effect"
|
|
3383
3681
|
*
|
|
3384
3682
|
* const schema = Schema.NumberFromString
|
|
3385
3683
|
* const typeAst = SchemaAST.toType(schema.ast)
|
|
3386
|
-
*
|
|
3684
|
+
* typeAst._tag // => "Number"
|
|
3387
3685
|
* ```
|
|
3388
3686
|
*
|
|
3389
3687
|
* @see {@link toEncoded}
|
|
@@ -3391,19 +3689,22 @@ export function isMutable(ast: AST): boolean {
|
|
|
3391
3689
|
* @category transforming
|
|
3392
3690
|
* @since 4.0.0
|
|
3393
3691
|
*/
|
|
3394
|
-
export const toType =
|
|
3692
|
+
export const toType = memoizeIdempotent(<A extends AST>(ast: A): A => {
|
|
3395
3693
|
if (ast.encoding) {
|
|
3396
3694
|
return toType(replaceEncoding(ast, undefined))
|
|
3397
3695
|
}
|
|
3398
3696
|
const out: any = ast
|
|
3399
3697
|
const type = out.recur?.(toType) ?? out
|
|
3400
|
-
const encodingChecks = type.encodingChecks
|
|
3698
|
+
const encodingChecks: Checks | undefined = type.encodingChecks
|
|
3401
3699
|
if (encodingChecks) {
|
|
3700
|
+
const checks = type === ast
|
|
3701
|
+
? encodingChecks
|
|
3702
|
+
: isArrays(type) || isObjects(type) || isDeclaration(type) && type.typeParameters.length > 0
|
|
3703
|
+
? extractStructuralChecks(encodingChecks)
|
|
3704
|
+
: undefined
|
|
3402
3705
|
return modifyOwnPropertyDescriptors(type, (d) => {
|
|
3403
3706
|
d.encodingChecks.value = undefined
|
|
3404
|
-
|
|
3405
|
-
d.checks.value = combineChecks(type.checks, encodingChecks)
|
|
3406
|
-
}
|
|
3707
|
+
d.checks.value = combineChecks(type.checks, checks)
|
|
3407
3708
|
})
|
|
3408
3709
|
}
|
|
3409
3710
|
return type
|
|
@@ -3422,12 +3723,12 @@ export const toType = memoize(<A extends AST>(ast: A): A => {
|
|
|
3422
3723
|
*
|
|
3423
3724
|
* **Example** (Getting the encoded AST)
|
|
3424
3725
|
*
|
|
3425
|
-
* ```ts
|
|
3726
|
+
* ```ts import.meta.vitest
|
|
3426
3727
|
* import { Schema, SchemaAST } from "effect"
|
|
3427
3728
|
*
|
|
3428
3729
|
* const schema = Schema.NumberFromString
|
|
3429
3730
|
* const encodedAst = SchemaAST.toEncoded(schema.ast)
|
|
3430
|
-
*
|
|
3731
|
+
* encodedAst._tag // => "String"
|
|
3431
3732
|
* ```
|
|
3432
3733
|
*
|
|
3433
3734
|
* @see {@link toType}
|
|
@@ -3435,7 +3736,7 @@ export const toType = memoize(<A extends AST>(ast: A): A => {
|
|
|
3435
3736
|
* @category transforming
|
|
3436
3737
|
* @since 4.0.0
|
|
3437
3738
|
*/
|
|
3438
|
-
export const toEncoded =
|
|
3739
|
+
export const toEncoded = memoizeIdempotent((ast: AST): AST => {
|
|
3439
3740
|
return toType(flip(ast))
|
|
3440
3741
|
})
|
|
3441
3742
|
|
|
@@ -3498,54 +3799,44 @@ function fromConst<const T>(
|
|
|
3498
3799
|
ast: AST,
|
|
3499
3800
|
value: T
|
|
3500
3801
|
): SchemaParser.Parser {
|
|
3501
|
-
const succeed =
|
|
3502
|
-
return (
|
|
3503
|
-
if (
|
|
3504
|
-
|
|
3505
|
-
|
|
3506
|
-
return oinput.value === value
|
|
3507
|
-
? succeed
|
|
3508
|
-
: Effect.fail(new SchemaIssue.InvalidType(ast, oinput))
|
|
3802
|
+
const succeed = InternalParser.succeed(value)
|
|
3803
|
+
return (input, options) => {
|
|
3804
|
+
if (input === InternalParser.missing) return InternalParser.missingExit
|
|
3805
|
+
if (input === value) return succeed
|
|
3806
|
+
return Effect.fail(new SchemaIssue.InvalidType(ast, input, options))
|
|
3509
3807
|
}
|
|
3510
3808
|
}
|
|
3511
3809
|
|
|
3512
|
-
function fromAnyToConst<const T>(value: T): SchemaParser.Parser {
|
|
3513
|
-
const succeed = Effect.succeedSome(value)
|
|
3514
|
-
return (oinput) => oinput._tag === "None" ? Effect.succeedNone : succeed
|
|
3515
|
-
}
|
|
3516
|
-
|
|
3517
3810
|
function fromRefinement<T>(
|
|
3518
3811
|
ast: AST,
|
|
3519
3812
|
refinement: (input: unknown) => input is T
|
|
3520
3813
|
): SchemaParser.Parser {
|
|
3521
|
-
return (
|
|
3522
|
-
if (
|
|
3523
|
-
|
|
3524
|
-
|
|
3525
|
-
return refinement(oinput.value)
|
|
3526
|
-
? Effect.succeed(oinput)
|
|
3527
|
-
: Effect.fail(new SchemaIssue.InvalidType(ast, oinput))
|
|
3814
|
+
return (input, options) => {
|
|
3815
|
+
if (input === InternalParser.missing) return InternalParser.missingExit
|
|
3816
|
+
if (refinement(input)) return InternalParser.sameExit
|
|
3817
|
+
return Effect.fail(new SchemaIssue.InvalidType(ast, input, options))
|
|
3528
3818
|
}
|
|
3529
3819
|
}
|
|
3530
3820
|
|
|
3531
|
-
function applyTemplateLiteralPartChecks<A>(ast: AST, value: A, options: ParseOptions): A | undefined {
|
|
3532
|
-
if (options?.disableChecks || ast.checks === undefined) return value
|
|
3533
|
-
const issues: Array<SchemaIssue.Issue> = []
|
|
3534
|
-
collectIssues(ast.checks, value, issues, ast, options)
|
|
3535
|
-
return issues.length === 0 ? value : undefined
|
|
3536
|
-
}
|
|
3537
|
-
|
|
3538
3821
|
function segmentTemplateLiteralParts(
|
|
3539
|
-
|
|
3822
|
+
ast: TemplateLiteral,
|
|
3540
3823
|
input: string,
|
|
3541
3824
|
options: ParseOptions
|
|
3542
3825
|
): Array<string> | undefined {
|
|
3826
|
+
const parts = ast.encodedParts
|
|
3827
|
+
const literals = ast.literals
|
|
3828
|
+
const inputLength = input.length
|
|
3829
|
+
for (let i = 0; i < literals.length; i++) {
|
|
3830
|
+
const literal = literals[i]
|
|
3831
|
+
if (literal && !input.includes(literal)) return undefined
|
|
3832
|
+
}
|
|
3833
|
+
if (ast.suffixLengths[0] > inputLength) return undefined
|
|
3834
|
+
|
|
3543
3835
|
const out = new Array<string>(parts.length)
|
|
3544
|
-
|
|
3836
|
+
let failures: Set<number> | undefined
|
|
3545
3837
|
function go(i: number, pos: number): boolean {
|
|
3546
|
-
if (i === parts.length) return pos ===
|
|
3547
|
-
|
|
3548
|
-
if (failures.has(key)) return false
|
|
3838
|
+
if (i === parts.length) return pos === inputLength
|
|
3839
|
+
if (failures?.has(i * (inputLength + 1) + pos)) return false
|
|
3549
3840
|
const part = parts[i]
|
|
3550
3841
|
if (i === parts.length - 1) {
|
|
3551
3842
|
const s = input.slice(pos)
|
|
@@ -3554,21 +3845,28 @@ function segmentTemplateLiteralParts(
|
|
|
3554
3845
|
return true
|
|
3555
3846
|
}
|
|
3556
3847
|
} else if (part._tag === "Literal") {
|
|
3557
|
-
const s =
|
|
3848
|
+
const s = literals[i]!
|
|
3558
3849
|
if (input.startsWith(s, pos) && go(i + 1, pos + s.length)) {
|
|
3559
3850
|
out[i] = s
|
|
3560
3851
|
return true
|
|
3561
3852
|
}
|
|
3562
3853
|
} else {
|
|
3563
|
-
|
|
3854
|
+
const maximumEnd = inputLength - ast.suffixLengths[i + 1]
|
|
3855
|
+
// Splits preceding a literal only need to consider occurrences of that literal.
|
|
3856
|
+
const anchor = literals[i + 1]
|
|
3857
|
+
let end = anchor === undefined ? maximumEnd : input.lastIndexOf(anchor, maximumEnd)
|
|
3858
|
+
while (end >= pos) {
|
|
3564
3859
|
const s = input.slice(pos, end)
|
|
3565
3860
|
if (part.matchPart(s, options) !== undefined && go(i + 1, end)) {
|
|
3566
3861
|
out[i] = s
|
|
3567
3862
|
return true
|
|
3568
3863
|
}
|
|
3864
|
+
if (end === 0) break
|
|
3865
|
+
end = anchor === undefined ? end - 1 : input.lastIndexOf(anchor, end - 1)
|
|
3569
3866
|
}
|
|
3570
3867
|
}
|
|
3571
|
-
failures
|
|
3868
|
+
failures ??= new Set()
|
|
3869
|
+
failures.add(i * (inputLength + 1) + pos)
|
|
3572
3870
|
return false
|
|
3573
3871
|
}
|
|
3574
3872
|
return go(0, 0) ? out : undefined
|
|
@@ -3582,7 +3880,7 @@ export const enumsToLiterals = memoize((ast: Enum): Union<Literal> => {
|
|
|
3582
3880
|
)
|
|
3583
3881
|
})
|
|
3584
3882
|
|
|
3585
|
-
const parameterFromPropertyKey =
|
|
3883
|
+
const parameterFromPropertyKey = applyToSelfOrLastLinkEncodingIdempotent((ast) => {
|
|
3586
3884
|
switch (ast._tag) {
|
|
3587
3885
|
default:
|
|
3588
3886
|
return ast
|
|
@@ -3594,7 +3892,7 @@ const parameterFromPropertyKey = applyToSelfOrLastLinkEncoding((ast) => {
|
|
|
3594
3892
|
})
|
|
3595
3893
|
|
|
3596
3894
|
/** @internal */
|
|
3597
|
-
export const parameterFromString =
|
|
3895
|
+
export const parameterFromString = applyToSelfOrLastLinkEncodingIdempotent((ast) => {
|
|
3598
3896
|
switch (ast._tag) {
|
|
3599
3897
|
default:
|
|
3600
3898
|
return ast
|
|
@@ -3606,7 +3904,7 @@ export const parameterFromString = applyToSelfOrLastLinkEncoding((ast) => {
|
|
|
3606
3904
|
}
|
|
3607
3905
|
})
|
|
3608
3906
|
|
|
3609
|
-
const partFromString =
|
|
3907
|
+
const partFromString = applyToSelfOrLastLinkEncodingIdempotent((ast) => {
|
|
3610
3908
|
switch (ast._tag) {
|
|
3611
3909
|
default:
|
|
3612
3910
|
return ast
|
|
@@ -3627,7 +3925,7 @@ export const STRING_PATTERN = "[\\s\\S]*?"
|
|
|
3627
3925
|
|
|
3628
3926
|
const isStringFiniteRegExp = new globalThis.RegExp(`^${FINITE_PATTERN}$`)
|
|
3629
3927
|
|
|
3630
|
-
const isStringNumberRegExp = new globalThis.RegExp(
|
|
3928
|
+
const isStringNumberRegExp = new globalThis.RegExp(`^(?:${FINITE_PATTERN}|Infinity|-Infinity|NaN)$`)
|
|
3631
3929
|
|
|
3632
3930
|
/** @internal */
|
|
3633
3931
|
export function isStringFinite(annotations?: Schema.Annotations.Filter) {
|
|
@@ -3635,10 +3933,11 @@ export function isStringFinite(annotations?: Schema.Annotations.Filter) {
|
|
|
3635
3933
|
isStringFiniteRegExp,
|
|
3636
3934
|
{
|
|
3637
3935
|
expected: "a string representing a finite number",
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
|
|
3936
|
+
representation: {
|
|
3937
|
+
id: "effect/schema/isStringFinite",
|
|
3938
|
+
payload: null
|
|
3641
3939
|
},
|
|
3940
|
+
toJsonSchema: () => ({ pattern: isStringFiniteRegExp.source }),
|
|
3642
3941
|
...annotations
|
|
3643
3942
|
}
|
|
3644
3943
|
)
|
|
@@ -3669,10 +3968,11 @@ export function isStringBigInt(annotations?: Schema.Annotations.Filter) {
|
|
|
3669
3968
|
isStringBigIntRegExp,
|
|
3670
3969
|
{
|
|
3671
3970
|
expected: "a string representing a bigint",
|
|
3672
|
-
|
|
3673
|
-
|
|
3674
|
-
|
|
3971
|
+
representation: {
|
|
3972
|
+
id: "effect/schema/isStringBigInt",
|
|
3973
|
+
payload: null
|
|
3675
3974
|
},
|
|
3975
|
+
toJsonSchema: () => ({ pattern: isStringBigIntRegExp.source }),
|
|
3676
3976
|
...annotations
|
|
3677
3977
|
}
|
|
3678
3978
|
)
|
|
@@ -3702,13 +4002,17 @@ const symbolToString = new Link(
|
|
|
3702
4002
|
symbolString,
|
|
3703
4003
|
new SchemaTransformation.Transformation(
|
|
3704
4004
|
SchemaGetter.transform((description) => globalThis.Symbol.for(isStringSymbolRegExp.exec(description)![1])),
|
|
3705
|
-
SchemaGetter.transformOrFail((sym: symbol) => {
|
|
4005
|
+
SchemaGetter.transformOrFail((sym: symbol, options) => {
|
|
3706
4006
|
const key = globalThis.Symbol.keyFor(sym)
|
|
3707
4007
|
if (key !== undefined) {
|
|
3708
4008
|
return Effect.succeed(globalThis.String(sym))
|
|
3709
4009
|
}
|
|
3710
4010
|
return Effect.fail(
|
|
3711
|
-
new SchemaIssue.Forbidden(
|
|
4011
|
+
new SchemaIssue.Forbidden(
|
|
4012
|
+
{ message: "cannot serialize to string, Symbol is not registered" },
|
|
4013
|
+
sym,
|
|
4014
|
+
options
|
|
4015
|
+
)
|
|
3712
4016
|
)
|
|
3713
4017
|
})
|
|
3714
4018
|
)
|
|
@@ -3720,10 +4024,11 @@ export function isStringSymbol(annotations?: Schema.Annotations.Filter) {
|
|
|
3720
4024
|
isStringSymbolRegExp,
|
|
3721
4025
|
{
|
|
3722
4026
|
expected: "a string representing a symbol",
|
|
3723
|
-
|
|
3724
|
-
|
|
3725
|
-
|
|
4027
|
+
representation: {
|
|
4028
|
+
id: "effect/schema/isStringSymbol",
|
|
4029
|
+
payload: null
|
|
3726
4030
|
},
|
|
4031
|
+
toJsonSchema: () => ({ pattern: isStringSymbolRegExp.source }),
|
|
3727
4032
|
...annotations
|
|
3728
4033
|
}
|
|
3729
4034
|
)
|
|
@@ -3733,24 +4038,33 @@ export function isStringSymbol(annotations?: Schema.Annotations.Filter) {
|
|
|
3733
4038
|
export function collectIssues<T>(
|
|
3734
4039
|
checks: ReadonlyArray<Check<T>>,
|
|
3735
4040
|
value: T,
|
|
3736
|
-
issues:
|
|
4041
|
+
issues: Arr.NonEmptyArray<SchemaIssue.Issue> | undefined,
|
|
3737
4042
|
ast: AST,
|
|
3738
4043
|
options: ParseOptions
|
|
3739
|
-
) {
|
|
4044
|
+
): Arr.NonEmptyArray<SchemaIssue.Issue> | undefined {
|
|
3740
4045
|
for (let i = 0; i < checks.length; i++) {
|
|
3741
4046
|
const check = checks[i]
|
|
3742
4047
|
if (check._tag === "FilterGroup") {
|
|
3743
|
-
collectIssues(check.checks, value, issues, ast, options)
|
|
4048
|
+
issues = collectIssues(check.checks, value, issues, ast, options)
|
|
4049
|
+
if (
|
|
4050
|
+
issues &&
|
|
4051
|
+
(options.errors !== "all" || (issues[issues.length - 1] as SchemaIssue.Filter).filter.aborted)
|
|
4052
|
+
) {
|
|
4053
|
+
return issues
|
|
4054
|
+
}
|
|
3744
4055
|
} else {
|
|
3745
4056
|
const issue = check.run(value, ast, options)
|
|
3746
4057
|
if (issue) {
|
|
3747
|
-
|
|
3748
|
-
if (
|
|
3749
|
-
|
|
4058
|
+
const filter = new SchemaIssue.Filter(check, issue, value, options)
|
|
4059
|
+
if (issues) issues.push(filter)
|
|
4060
|
+
else issues = [filter]
|
|
4061
|
+
if (options.errors !== "all" || check.aborted) {
|
|
4062
|
+
return issues
|
|
3750
4063
|
}
|
|
3751
4064
|
}
|
|
3752
4065
|
}
|
|
3753
4066
|
}
|
|
4067
|
+
return issues
|
|
3754
4068
|
}
|
|
3755
4069
|
|
|
3756
4070
|
/** @internal */
|
|
@@ -3758,20 +4072,26 @@ export function runChecks<T>(
|
|
|
3758
4072
|
checks: readonly [Check<T>, ...Array<Check<T>>],
|
|
3759
4073
|
s: T
|
|
3760
4074
|
): Result.Result<T, SchemaIssue.Issue> {
|
|
3761
|
-
const issues:
|
|
3762
|
-
|
|
3763
|
-
|
|
3764
|
-
const issue = new SchemaIssue.Composite(unknown, Option.some(s), issues)
|
|
4075
|
+
const issues = collectIssues(checks, s, undefined, unknown, { errors: "all" })
|
|
4076
|
+
if (issues) {
|
|
4077
|
+
const issue = new SchemaIssue.Composite(unknown, issues)
|
|
3765
4078
|
return Result.fail(issue)
|
|
3766
4079
|
}
|
|
3767
4080
|
return Result.succeed(s)
|
|
3768
4081
|
}
|
|
3769
4082
|
|
|
3770
4083
|
/** @internal */
|
|
3771
|
-
export
|
|
4084
|
+
export interface ConstructorDescriptor {
|
|
4085
|
+
readonly isConstructed: Predicate.Predicate<unknown>
|
|
4086
|
+
readonly link: Link
|
|
4087
|
+
}
|
|
3772
4088
|
|
|
3773
4089
|
/** @internal */
|
|
3774
|
-
export
|
|
4090
|
+
export function getConstructorDescriptor(ast: AST): ConstructorDescriptor | undefined {
|
|
4091
|
+
if (!isDeclaration(ast)) return undefined
|
|
4092
|
+
const getDescriptor = ast.annotations?.[InternalAnnotations.CONSTRUCTOR_ANNOTATION_KEY]
|
|
4093
|
+
return Predicate.isFunction(getDescriptor) ? getDescriptor(ast.typeParameters) : undefined
|
|
4094
|
+
}
|
|
3775
4095
|
|
|
3776
4096
|
/**
|
|
3777
4097
|
* Returns all annotations from the AST node.
|
|
@@ -3784,12 +4104,12 @@ export const STRUCTURAL_ANNOTATION_KEY = "~structural"
|
|
|
3784
4104
|
*
|
|
3785
4105
|
* **Example** (Reading annotations)
|
|
3786
4106
|
*
|
|
3787
|
-
* ```ts
|
|
4107
|
+
* ```ts import.meta.vitest
|
|
3788
4108
|
* import { Schema, SchemaAST } from "effect"
|
|
3789
4109
|
*
|
|
3790
4110
|
* const schema = Schema.String.annotate({ title: "Name" })
|
|
3791
4111
|
* const annotations = SchemaAST.resolve(schema.ast)
|
|
3792
|
-
*
|
|
4112
|
+
* annotations?.title // => "Name"
|
|
3793
4113
|
* ```
|
|
3794
4114
|
*
|
|
3795
4115
|
* @see {@link resolveAt}
|
|
@@ -3854,6 +4174,82 @@ export const resolveTitle: (ast: AST) => string | undefined = InternalAnnotation
|
|
|
3854
4174
|
*/
|
|
3855
4175
|
export const resolveDescription: (ast: AST) => string | undefined = InternalAnnotations.resolveDescription
|
|
3856
4176
|
|
|
4177
|
+
type TreeFrame = {
|
|
4178
|
+
readonly value: object
|
|
4179
|
+
// Object keys or an array length snapshot.
|
|
4180
|
+
readonly keys: ReadonlyArray<string> | number
|
|
4181
|
+
index: number
|
|
4182
|
+
}
|
|
4183
|
+
|
|
4184
|
+
function isJsonLeaf(u: unknown): boolean {
|
|
4185
|
+
return u === null || typeof u === "string" || typeof u === "boolean" ||
|
|
4186
|
+
typeof u === "number" && globalThis.Number.isFinite(u)
|
|
4187
|
+
}
|
|
4188
|
+
|
|
4189
|
+
function isStringTreeLeaf(u: unknown): boolean {
|
|
4190
|
+
return u === undefined || typeof u === "string"
|
|
4191
|
+
}
|
|
4192
|
+
|
|
4193
|
+
function isTree(u: unknown, isLeaf: (u: unknown) => boolean): boolean {
|
|
4194
|
+
const cache = new WeakMap<object, boolean>()
|
|
4195
|
+
const stack: Array<TreeFrame> = []
|
|
4196
|
+
outer: while (true) {
|
|
4197
|
+
if (typeof u !== "object" || u === null) {
|
|
4198
|
+
if (!isLeaf(u)) {
|
|
4199
|
+
return false
|
|
4200
|
+
}
|
|
4201
|
+
} else {
|
|
4202
|
+
const value = u
|
|
4203
|
+
const cached = cache.get(value)
|
|
4204
|
+
// `false` marks a node on the current path, while `true` marks a fully
|
|
4205
|
+
// validated node that can be safely reused by a DAG.
|
|
4206
|
+
if (cached === false) {
|
|
4207
|
+
return false
|
|
4208
|
+
}
|
|
4209
|
+
if (cached === undefined) {
|
|
4210
|
+
const isArray = Array.isArray(value)
|
|
4211
|
+
if (!isArray) {
|
|
4212
|
+
const prototype = Object.getPrototypeOf(value)
|
|
4213
|
+
// A plain object from another realm has a different Object.prototype,
|
|
4214
|
+
// but that prototype still has a null prototype.
|
|
4215
|
+
if (
|
|
4216
|
+
prototype !== null &&
|
|
4217
|
+
prototype !== Object.prototype &&
|
|
4218
|
+
Object.getPrototypeOf(prototype) !== null
|
|
4219
|
+
) {
|
|
4220
|
+
return false
|
|
4221
|
+
}
|
|
4222
|
+
}
|
|
4223
|
+
cache.set(value, false)
|
|
4224
|
+
stack.push({
|
|
4225
|
+
value,
|
|
4226
|
+
keys: isArray ? value.length : Object.keys(value),
|
|
4227
|
+
index: 0
|
|
4228
|
+
})
|
|
4229
|
+
}
|
|
4230
|
+
}
|
|
4231
|
+
|
|
4232
|
+
while (stack.length > 0) {
|
|
4233
|
+
const frame = stack[stack.length - 1]
|
|
4234
|
+
const keys = frame.keys
|
|
4235
|
+
if (typeof keys === "number") {
|
|
4236
|
+
if (frame.index < keys) {
|
|
4237
|
+
// A sparse slot is read as `undefined`; the leaf predicate determines
|
|
4238
|
+
// whether that is valid for the current tree.
|
|
4239
|
+
u = (frame.value as ReadonlyArray<unknown>)[frame.index++]
|
|
4240
|
+
continue outer
|
|
4241
|
+
}
|
|
4242
|
+
} else if (frame.index < keys.length) {
|
|
4243
|
+
u = (frame.value as Record<string, unknown>)[keys[frame.index++]]
|
|
4244
|
+
continue outer
|
|
4245
|
+
}
|
|
4246
|
+
cache.set(frame.value, true)
|
|
4247
|
+
stack.pop()
|
|
4248
|
+
}
|
|
4249
|
+
return true
|
|
4250
|
+
}
|
|
4251
|
+
}
|
|
4252
|
+
|
|
3857
4253
|
/**
|
|
3858
4254
|
* Returns true if the value is a JSON value.
|
|
3859
4255
|
*
|
|
@@ -3862,97 +4258,48 @@ export const resolveDescription: (ast: AST) => string | undefined = InternalAnno
|
|
|
3862
4258
|
* @internal
|
|
3863
4259
|
*/
|
|
3864
4260
|
export function isJson(u: unknown): u is Schema.Json {
|
|
3865
|
-
|
|
3866
|
-
// one being visited. A hit here means we looped back to an ancestor — a
|
|
3867
|
-
// real cycle, not a DAG — so the value is not JSON.
|
|
3868
|
-
const onPath = new Set<unknown>()
|
|
3869
|
-
// `validated` memoizes subtrees we've already fully checked. Without it, a
|
|
3870
|
-
// diamond-shaped DAG (same node reached through multiple parents) would be
|
|
3871
|
-
// re-traversed once per parent, which is exponential in the nesting depth.
|
|
3872
|
-
const validated = new Set<unknown>()
|
|
3873
|
-
return recur(u)
|
|
3874
|
-
|
|
3875
|
-
function recur(u: unknown): boolean {
|
|
3876
|
-
if (u === null || typeof u === "string" || typeof u === "boolean") {
|
|
3877
|
-
return true
|
|
3878
|
-
}
|
|
3879
|
-
if (typeof u === "number") {
|
|
3880
|
-
return globalThis.Number.isFinite(u)
|
|
3881
|
-
}
|
|
3882
|
-
if (typeof u !== "object" || u === undefined) {
|
|
3883
|
-
return false
|
|
3884
|
-
}
|
|
3885
|
-
if (onPath.has(u)) {
|
|
3886
|
-
return false
|
|
3887
|
-
}
|
|
3888
|
-
if (validated.has(u)) {
|
|
3889
|
-
return true
|
|
3890
|
-
}
|
|
3891
|
-
const isArray = Array.isArray(u)
|
|
3892
|
-
if (!isArray) {
|
|
3893
|
-
const prototype = Object.getPrototypeOf(u)
|
|
3894
|
-
if (prototype !== null && Object.getPrototypeOf(prototype) !== null) {
|
|
3895
|
-
return false
|
|
3896
|
-
}
|
|
3897
|
-
}
|
|
3898
|
-
onPath.add(u)
|
|
3899
|
-
const ok = isArray
|
|
3900
|
-
? u.every(recur)
|
|
3901
|
-
: Object.keys(u).every((key) => recur((u as Record<string, unknown>)[key]))
|
|
3902
|
-
// Pop on exit so siblings reaching the same node via a different path
|
|
3903
|
-
// don't see it as an ancestor (that would reject valid DAGs).
|
|
3904
|
-
onPath.delete(u)
|
|
3905
|
-
if (ok) {
|
|
3906
|
-
validated.add(u)
|
|
3907
|
-
}
|
|
3908
|
-
return ok
|
|
3909
|
-
}
|
|
4261
|
+
return isTree(u, isJsonLeaf)
|
|
3910
4262
|
}
|
|
3911
4263
|
|
|
3912
4264
|
/** @internal */
|
|
3913
4265
|
export const Json = new Declaration(
|
|
3914
4266
|
[],
|
|
3915
|
-
() => (input, ast) =>
|
|
4267
|
+
() => (input, ast, options) =>
|
|
3916
4268
|
isJson(input) ?
|
|
3917
|
-
|
|
3918
|
-
Effect.fail(new SchemaIssue.InvalidType(ast,
|
|
4269
|
+
InternalParser.sameExit :
|
|
4270
|
+
Effect.fail(new SchemaIssue.InvalidType(ast, input, options)),
|
|
3919
4271
|
{
|
|
3920
|
-
|
|
3921
|
-
|
|
3922
|
-
|
|
3923
|
-
generation: {
|
|
3924
|
-
runtime: `Schema.Json`,
|
|
3925
|
-
Type: `Schema.Json`
|
|
4272
|
+
representation: {
|
|
4273
|
+
id: "effect/schema/Json",
|
|
4274
|
+
payload: null
|
|
3926
4275
|
},
|
|
3927
4276
|
expected: "JSON value",
|
|
3928
|
-
toCodecJson: () =>
|
|
4277
|
+
toCodecJson: () => undefined,
|
|
4278
|
+
toCodecStringTree: () => unknownToStringTree,
|
|
3929
4279
|
toArbitrary: () => (fc: typeof FastCheck) => fc.jsonValue()
|
|
3930
4280
|
}
|
|
3931
4281
|
)
|
|
3932
4282
|
|
|
3933
4283
|
/** @internal */
|
|
3934
4284
|
export const MutableJson = annotate(Json, {
|
|
3935
|
-
|
|
3936
|
-
|
|
3937
|
-
|
|
3938
|
-
generation: {
|
|
3939
|
-
runtime: `Schema.MutableJson`,
|
|
3940
|
-
Type: `Schema.MutableJson`
|
|
4285
|
+
representation: {
|
|
4286
|
+
id: "effect/schema/MutableJson",
|
|
4287
|
+
payload: null
|
|
3941
4288
|
}
|
|
3942
4289
|
})
|
|
3943
4290
|
|
|
3944
4291
|
/** @internal */
|
|
3945
|
-
export const
|
|
3946
|
-
|
|
3947
|
-
|
|
3948
|
-
SchemaGetter.passthrough(),
|
|
3949
|
-
SchemaGetter.transform(() => null)
|
|
3950
|
-
)
|
|
4292
|
+
export const unknownToJson = new Link(
|
|
4293
|
+
Json,
|
|
4294
|
+
SchemaTransformation.passthrough()
|
|
3951
4295
|
)
|
|
3952
4296
|
|
|
3953
4297
|
/** @internal */
|
|
3954
|
-
export const
|
|
3955
|
-
|
|
4298
|
+
export const objectKeywordToJson = new Link(
|
|
4299
|
+
new Union([
|
|
4300
|
+
new Arrays(false, [], [Json]),
|
|
4301
|
+
new Objects([], [new IndexSignature(string, Json)])
|
|
4302
|
+
], "anyOf"),
|
|
3956
4303
|
SchemaTransformation.passthrough()
|
|
3957
4304
|
)
|
|
3958
4305
|
|
|
@@ -3964,34 +4311,16 @@ export const unknownToJson = new Link(
|
|
|
3964
4311
|
* @internal
|
|
3965
4312
|
*/
|
|
3966
4313
|
export function isStringTree(u: unknown): u is Schema.StringTree {
|
|
3967
|
-
|
|
3968
|
-
return recur(u)
|
|
3969
|
-
|
|
3970
|
-
function recur(u: unknown): boolean {
|
|
3971
|
-
if (u === undefined || typeof u === "string") {
|
|
3972
|
-
return true
|
|
3973
|
-
}
|
|
3974
|
-
if (typeof u !== "object" || u === null) {
|
|
3975
|
-
return false
|
|
3976
|
-
}
|
|
3977
|
-
if (seen.has(u)) {
|
|
3978
|
-
return false
|
|
3979
|
-
}
|
|
3980
|
-
seen.add(u)
|
|
3981
|
-
if (Array.isArray(u)) {
|
|
3982
|
-
return u.every(recur)
|
|
3983
|
-
}
|
|
3984
|
-
return Object.keys(u).every((key) => recur((u as Record<string, unknown>)[key]))
|
|
3985
|
-
}
|
|
4314
|
+
return isTree(u, isStringTreeLeaf)
|
|
3986
4315
|
}
|
|
3987
4316
|
|
|
3988
4317
|
const StringTree = new Declaration(
|
|
3989
4318
|
[],
|
|
3990
|
-
() => (input, ast) =>
|
|
4319
|
+
() => (input, ast, options) =>
|
|
3991
4320
|
isStringTree(input) ?
|
|
3992
|
-
|
|
3993
|
-
Effect.fail(new SchemaIssue.InvalidType(ast,
|
|
3994
|
-
{ expected: "StringTree" }
|
|
4321
|
+
InternalParser.sameExit :
|
|
4322
|
+
Effect.fail(new SchemaIssue.InvalidType(ast, input, options)),
|
|
4323
|
+
{ expected: "StringTree", toCodecStringTree: () => undefined }
|
|
3995
4324
|
)
|
|
3996
4325
|
|
|
3997
4326
|
/** @internal */
|