effect 4.0.0-beta.101 → 4.0.0-beta.103
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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.js.map +1 -1
- package/dist/Cache.d.ts +405 -254
- package/dist/Cache.d.ts.map +1 -1
- package/dist/Cache.js +166 -101
- 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 +729 -768
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +541 -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 +339 -267
- package/dist/Config.js.map +1 -1
- package/dist/ConfigProvider.d.ts +194 -68
- package/dist/ConfigProvider.d.ts.map +1 -1
- package/dist/ConfigProvider.js +122 -87
- 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 +151 -274
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +171 -214
- package/dist/Context.js.map +1 -1
- package/dist/Cron.d.ts +68 -77
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +57 -66
- 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 +9 -10
- 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 +104 -96
- 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 +132 -186
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +2897 -3342
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +1383 -1580
- 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 +29 -21
- 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 +13 -55
- package/dist/ExecutionPlan.d.ts.map +1 -1
- package/dist/ExecutionPlan.js +7 -28
- 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 +82 -146
- 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 +85 -59
- package/dist/FiberSet.js.map +1 -1
- package/dist/FileSystem.d.ts +153 -264
- 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 +25 -33
- package/dist/Formatter.d.ts.map +1 -1
- package/dist/Formatter.js +48 -49
- package/dist/Formatter.js.map +1 -1
- package/dist/Function.d.ts +76 -145
- package/dist/Function.d.ts.map +1 -1
- package/dist/Function.js +40 -57
- 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 +12 -12
- package/dist/Inspectable.js +8 -8
- 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 +230 -307
- 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 +300 -239
- 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 +195 -175
- 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 +207 -452
- 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 +59 -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 +97 -189
- package/dist/Optic.d.ts.map +1 -1
- package/dist/Optic.js +190 -292
- 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 +162 -132
- 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 +290 -1636
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +162 -803
- 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 +1835 -1060
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +2708 -1050
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts +29 -52
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +537 -391
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaError.d.ts +7 -6
- package/dist/SchemaError.d.ts.map +1 -1
- package/dist/SchemaError.js +8 -7
- package/dist/SchemaError.js.map +1 -1
- package/dist/SchemaGetter.d.ts +230 -185
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +252 -209
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaIssue.d.ts +62 -190
- package/dist/SchemaIssue.d.ts.map +1 -1
- package/dist/SchemaIssue.js +74 -266
- package/dist/SchemaIssue.js.map +1 -1
- package/dist/SchemaParser.d.ts +2 -2
- package/dist/SchemaParser.d.ts.map +1 -1
- package/dist/SchemaParser.js +123 -86
- package/dist/SchemaParser.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +398 -1513
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +290 -2854
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +116 -76
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +123 -88
- 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.map +1 -1
- package/dist/ScopedRef.d.ts +3 -3
- 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 +117 -107
- 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 +1 -1
- package/dist/Stdio.js.map +1 -1
- package/dist/Stream.d.ts +2430 -2958
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +1124 -1397
- 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.map +1 -1
- package/dist/Take.js.map +1 -1
- package/dist/Terminal.d.ts +2 -2
- package/dist/Terminal.js +1 -1
- 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 +92 -127
- 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 +160 -136
- package/dist/TxQueue.js.map +1 -1
- package/dist/TxReentrantLock.d.ts +97 -66
- package/dist/TxReentrantLock.d.ts.map +1 -1
- package/dist/TxReentrantLock.js +67 -45
- 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 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/dist/internal/array.js.map +1 -1
- package/dist/internal/core.js +3 -2
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/dateTime.js +4 -0
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/doNotation.js.map +1 -1
- package/dist/internal/effect.js +141 -61
- 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.map +1 -1
- 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 +1 -1
- 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.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 +12 -0
- 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 +745 -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 +28 -40
- package/dist/internal/schema/schema.js.map +1 -1
- package/dist/internal/schema/{arbitrary.d.ts → toArbitrary.d.ts} +1 -1
- package/dist/internal/schema/toArbitrary.d.ts.map +1 -0
- package/dist/internal/schema/{arbitrary.js → toArbitrary.js} +8 -9
- 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 +508 -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 +349 -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 +13 -9
- 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 +54 -19
- 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 +29 -29
- package/dist/testing/TestSchema.js +25 -25
- 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 +99 -121
- 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 +55 -51
- 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 +123 -81
- 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 +316 -250
- package/dist/unstable/ai/McpSchema.d.ts.map +1 -1
- package/dist/unstable/ai/McpSchema.js +71 -63
- 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 +765 -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 +112 -38
- package/dist/unstable/ai/Prompt.d.ts.map +1 -1
- package/dist/unstable/ai/Prompt.js +53 -17
- 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 +273 -69
- package/dist/unstable/cli/Argument.d.ts.map +1 -1
- package/dist/unstable/cli/Argument.js +111 -33
- 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 +105 -74
- package/dist/unstable/cli/CliError.d.ts.map +1 -1
- package/dist/unstable/cli/CliError.js +98 -63
- 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 +705 -107
- package/dist/unstable/cli/Command.d.ts.map +1 -1
- package/dist/unstable/cli/Command.js +252 -47
- 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 +292 -78
- package/dist/unstable/cli/Param.d.ts.map +1 -1
- package/dist/unstable/cli/Param.js +131 -49
- 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 +345 -137
- 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 +23 -14
- 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.map +1 -1
- package/dist/unstable/cli/internal/auto-suggest.js.map +1 -1
- package/dist/unstable/cli/internal/command.d.ts +3 -1
- package/dist/unstable/cli/internal/command.d.ts.map +1 -1
- package/dist/unstable/cli/internal/command.js +11 -4
- package/dist/unstable/cli/internal/command.js.map +1 -1
- package/dist/unstable/cli/internal/completions/bash.js.map +1 -1
- package/dist/unstable/cli/internal/completions/descriptor.js.map +1 -1
- 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.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 +2 -2
- package/dist/unstable/cli/internal/parser.js.map +1 -1
- 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.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 +6 -2
- 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 +10 -10
- 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 +4 -2
- package/dist/unstable/cluster/EntityProxy.d.ts.map +1 -1
- package/dist/unstable/cluster/EntityProxy.js +4 -2
- 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.js +5 -5
- package/dist/unstable/cluster/MessageStorage.js.map +1 -1
- package/dist/unstable/cluster/Reply.d.ts.map +1 -1
- package/dist/unstable/cluster/Reply.js +5 -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 +16 -16
- package/dist/unstable/cluster/RunnerServer.js.map +1 -1
- package/dist/unstable/cluster/RunnerStorage.d.ts +2 -2
- package/dist/unstable/cluster/RunnerStorage.js +1 -1
- package/dist/unstable/cluster/RunnerStorage.js.map +1 -1
- package/dist/unstable/cluster/Runners.d.ts +6 -6
- package/dist/unstable/cluster/Runners.d.ts.map +1 -1
- package/dist/unstable/cluster/Runners.js +19 -10
- 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.map +1 -1
- package/dist/unstable/cluster/Sharding.js +128 -26
- 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 +127 -65
- 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 +24 -12
- 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.map +1 -1
- 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.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/Msgpack.d.ts.map +1 -1
- package/dist/unstable/encoding/Msgpack.js +6 -8
- package/dist/unstable/encoding/Msgpack.js.map +1 -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 +58 -8
- package/dist/unstable/encoding/Sse.js.map +1 -1
- 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 +16 -16
- package/dist/unstable/eventlog/EventJournal.js +14 -14
- 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 +2 -2
- package/dist/unstable/eventlog/EventLogEncryption.js +2 -2
- package/dist/unstable/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/unstable/eventlog/EventLogMessage.d.ts +6 -6
- package/dist/unstable/eventlog/EventLogMessage.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogMessage.js +9 -4
- package/dist/unstable/eventlog/EventLogMessage.js.map +1 -1
- package/dist/unstable/eventlog/EventLogRemote.d.ts +15 -15
- package/dist/unstable/eventlog/EventLogRemote.js +1 -1
- 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 +13 -5
- 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 +14 -6
- 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.js +2 -2
- 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/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 +51 -44
- package/dist/unstable/http/HttpClient.d.ts.map +1 -1
- package/dist/unstable/http/HttpClient.js +46 -17
- package/dist/unstable/http/HttpClient.js.map +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 -0
- package/dist/unstable/http/HttpClientRequest.js.map +1 -1
- package/dist/unstable/http/HttpClientResponse.d.ts +4 -4
- package/dist/unstable/http/HttpClientResponse.js +2 -2
- package/dist/unstable/http/HttpClientResponse.js.map +1 -1
- package/dist/unstable/http/HttpEffect.d.ts +6 -6
- package/dist/unstable/http/HttpEffect.js +3 -3
- 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 +32 -0
- package/dist/unstable/http/HttpPlatform.js.map +1 -1
- package/dist/unstable/http/HttpRouter.d.ts +88 -89
- 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 +9 -8
- 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 +10 -0
- 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 +6 -6
- package/dist/unstable/http/Multipart.d.ts.map +1 -1
- package/dist/unstable/http/Multipart.js +22 -20
- package/dist/unstable/http/Multipart.js.map +1 -1
- package/dist/unstable/http/Template.js +1 -1
- 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.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/preResponseHandler.js.map +1 -1
- package/dist/unstable/httpapi/HttpApi.js +3 -3
- 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 +10 -11
- 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 +16 -18
- package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +42 -42
- package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiError.d.ts +13 -13
- package/dist/unstable/httpapi/HttpApiError.js +13 -13
- package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiGroup.d.ts +15 -15
- package/dist/unstable/httpapi/HttpApiGroup.js +1 -1
- 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 +6 -6
- package/dist/unstable/httpapi/HttpApiSchema.js +4 -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 +13 -13
- package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
- package/dist/unstable/httpapi/OpenApi.js +50 -37
- 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 +70 -1
- package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpExporter.js +84 -6
- 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 +2 -2
- 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 +5 -2
- 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 +2 -2
- 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.js +6 -6
- 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 +91 -15
- package/dist/unstable/persistence/Persistence.js.map +1 -1
- package/dist/unstable/persistence/RateLimiter.d.ts +28 -17
- package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/unstable/persistence/RateLimiter.js +26 -15
- 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 +3 -3
- 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 +64 -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 +105 -19
- package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
- package/dist/unstable/reactivity/Atom.js +44 -12
- 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 +12 -12
- package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcClient.js +14 -12
- package/dist/unstable/rpc/RpcClient.js.map +1 -1
- 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 +175 -96
- package/dist/unstable/rpc/RpcSerialization.js.map +1 -1
- package/dist/unstable/rpc/RpcServer.d.ts +13 -13
- package/dist/unstable/rpc/RpcServer.js +17 -13
- 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 +52 -50
- 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 +6 -7
- package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
- package/dist/unstable/schema/VariantSchema.js +15 -12
- 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 +10 -5
- 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.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 +2 -2
- 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 +2 -2
- 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.js +2 -2
- 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 +22 -21
- 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.js +2 -2
- package/dist/unstable/workers/Worker.js.map +1 -1
- package/dist/unstable/workers/WorkerError.d.ts +7 -7
- package/dist/unstable/workers/WorkerError.js +6 -6
- 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.js +5 -5
- 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 +1 -1
- 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 +5 -6
- 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/Cache.ts +409 -255
- package/src/Cause.ts +167 -277
- package/src/Channel.ts +923 -830
- 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 +618 -334
- package/src/ConfigProvider.ts +221 -127
- package/src/Console.ts +289 -39
- package/src/Context.ts +319 -378
- package/src/Cron.ts +68 -77
- package/src/Crypto.ts +13 -15
- package/src/Data.ts +63 -82
- package/src/DateTime.ts +564 -660
- package/src/Deferred.ts +253 -256
- package/src/Duration.ts +216 -308
- package/src/Effect.ts +2958 -3390
- package/src/Encoding.ts +22 -40
- package/src/Equal.ts +49 -39
- package/src/Equivalence.ts +103 -105
- package/src/ErrorReporter.ts +51 -27
- package/src/ExecutionPlan.ts +13 -55
- package/src/Exit.ts +116 -192
- package/src/Fiber.ts +81 -148
- package/src/FiberHandle.ts +155 -107
- package/src/FiberMap.ts +225 -174
- package/src/FiberSet.ts +124 -82
- package/src/FileSystem.ts +155 -263
- package/src/Filter.ts +61 -33
- package/src/Formatter.ts +54 -56
- package/src/Function.ts +76 -145
- 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 +12 -12
- package/src/Iterable.ts +622 -787
- package/src/JsonPatch.ts +60 -113
- package/src/JsonPointer.ts +8 -8
- package/src/JsonSchema.ts +405 -249
- package/src/Latch.ts +23 -35
- package/src/Layer.ts +359 -260
- package/src/LayerMap.ts +49 -29
- package/src/LayerRef.ts +6 -2
- package/src/LogLevel.ts +114 -214
- package/src/Logger.ts +347 -699
- 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 +73 -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 +246 -385
- 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 +200 -159
- 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 +308 -1734
- package/src/Scheduler.ts +20 -7
- package/src/Schema.ts +3156 -1634
- package/src/SchemaAST.ts +676 -489
- package/src/SchemaError.ts +8 -7
- package/src/SchemaGetter.ts +277 -218
- package/src/SchemaIssue.ts +90 -276
- package/src/SchemaParser.ts +179 -116
- package/src/SchemaRepresentation.ts +698 -3417
- package/src/SchemaTransformation.ts +132 -91
- package/src/Scope.ts +123 -151
- package/src/ScopedRef.ts +4 -4
- package/src/Semaphore.ts +157 -54
- package/src/Sink.ts +128 -113
- package/src/Stdio.ts +1 -1
- package/src/Stream.ts +2665 -3142
- 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/Terminal.ts +2 -2
- package/src/Tracer.ts +102 -55
- package/src/Trie.ts +287 -679
- package/src/Tuple.ts +92 -127
- 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 +214 -183
- package/src/TxReentrantLock.ts +97 -66
- 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 -5
- package/src/internal/core.ts +5 -4
- package/src/internal/dateTime.ts +6 -0
- package/src/internal/effect.ts +160 -79
- package/src/internal/matcher.ts +1 -1
- package/src/internal/persistence.ts +2 -0
- package/src/internal/record.ts +11 -7
- package/src/internal/references.ts +3 -7
- package/src/internal/schema/annotations.ts +44 -0
- package/src/internal/schema/fromJsonSchemaDocument.ts +959 -0
- package/src/internal/schema/fromRepresentation.ts +339 -0
- package/src/internal/schema/parser.ts +22 -0
- package/src/internal/schema/schema.ts +45 -46
- package/src/internal/schema/{arbitrary.ts → toArbitrary.ts} +8 -10
- package/src/internal/schema/toCodeDocument.ts +572 -0
- package/src/internal/schema/{equivalence.ts → toEquivalence.ts} +12 -7
- package/src/internal/schema/toJsonSchemaDocument.ts +529 -0
- package/src/internal/schema/toRepresentation.ts +386 -0
- package/src/internal/stackTraceLimit.ts +3 -7
- package/src/internal/trie.ts +10 -11
- package/src/testing/FastCheck.ts +8 -7
- package/src/testing/TestClock.ts +73 -31
- package/src/testing/TestConsole.ts +32 -31
- package/src/testing/TestSchema.ts +29 -29
- package/src/unstable/ai/AiError.ts +100 -122
- package/src/unstable/ai/AnthropicStructuredOutput.ts +103 -334
- package/src/unstable/ai/Chat.ts +132 -97
- package/src/unstable/ai/EmbeddingModel.ts +1 -1
- package/src/unstable/ai/IdGenerator.ts +32 -28
- package/src/unstable/ai/LanguageModel.ts +137 -95
- package/src/unstable/ai/McpProtocol.ts +48 -0
- package/src/unstable/ai/McpSchema.ts +75 -65
- package/src/unstable/ai/McpServer.ts +1045 -303
- package/src/unstable/ai/Model.ts +9 -20
- package/src/unstable/ai/OpenAiStructuredOutput.ts +231 -396
- package/src/unstable/ai/Prompt.ts +145 -43
- 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 +273 -69
- package/src/unstable/cli/CliError.ts +116 -77
- package/src/unstable/cli/CliOutput.ts +44 -58
- package/src/unstable/cli/Command.ts +709 -111
- 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 +295 -81
- package/src/unstable/cli/Primitive.ts +371 -150
- package/src/unstable/cli/Prompt.ts +28 -14
- package/src/unstable/cli/internal/command.ts +13 -5
- package/src/unstable/cli/internal/config.ts +8 -10
- package/src/unstable/cli/internal/lexer.ts +8 -2
- package/src/unstable/cli/internal/parser.ts +2 -2
- package/src/unstable/cluster/ClusterSchema.ts +8 -8
- package/src/unstable/cluster/ClusterWorkflowEngine.ts +8 -4
- package/src/unstable/cluster/Entity.ts +16 -17
- package/src/unstable/cluster/EntityProxy.ts +4 -2
- 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 +15 -15
- package/src/unstable/cluster/Reply.ts +5 -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 +41 -8
- package/src/unstable/cluster/RunnerStorage.ts +2 -2
- package/src/unstable/cluster/Runners.ts +23 -12
- package/src/unstable/cluster/ShardId.ts +1 -1
- package/src/unstable/cluster/Sharding.ts +168 -42
- 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 +205 -119
- package/src/unstable/cluster/internal/entityManager.ts +42 -25
- package/src/unstable/cluster/internal/shardLock.ts +9 -0
- package/src/unstable/devtools/DevToolsSchema.ts +10 -5
- package/src/unstable/encoding/Msgpack.ts +6 -8
- package/src/unstable/encoding/Sse.ts +98 -16
- package/src/unstable/eventlog/Event.ts +20 -20
- package/src/unstable/eventlog/EventGroup.ts +4 -4
- package/src/unstable/eventlog/EventJournal.ts +16 -16
- package/src/unstable/eventlog/EventLog.ts +24 -14
- package/src/unstable/eventlog/EventLogEncryption.ts +2 -2
- package/src/unstable/eventlog/EventLogMessage.ts +12 -5
- package/src/unstable/eventlog/EventLogRemote.ts +1 -1
- package/src/unstable/eventlog/EventLogServer.ts +41 -7
- package/src/unstable/eventlog/EventLogServerEncrypted.ts +13 -5
- package/src/unstable/eventlog/EventLogServerUnencrypted.ts +14 -6
- package/src/unstable/eventlog/EventLogSessionAuth.ts +1 -1
- package/src/unstable/eventlog/SqlEventJournal.ts +2 -2
- 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/Headers.ts +10 -10
- package/src/unstable/http/HttpBody.ts +20 -5
- package/src/unstable/http/HttpClient.ts +83 -55
- package/src/unstable/http/HttpClientRequest.ts +59 -0
- package/src/unstable/http/HttpClientResponse.ts +4 -4
- package/src/unstable/http/HttpEffect.ts +8 -8
- package/src/unstable/http/HttpMethod.ts +6 -9
- package/src/unstable/http/HttpMiddleware.ts +202 -39
- package/src/unstable/http/HttpPlatform.ts +95 -0
- package/src/unstable/http/HttpRouter.ts +102 -98
- package/src/unstable/http/HttpServer.ts +13 -13
- package/src/unstable/http/HttpServerError.ts +2 -2
- package/src/unstable/http/HttpServerRequest.ts +9 -8
- package/src/unstable/http/HttpServerResponse.ts +30 -0
- package/src/unstable/http/HttpStaticServer.ts +35 -7
- package/src/unstable/http/Multipart.ts +22 -19
- package/src/unstable/http/Template.ts +1 -1
- package/src/unstable/http/Url.ts +33 -63
- package/src/unstable/http/UrlParams.ts +27 -32
- package/src/unstable/http/internal/compression.ts +196 -0
- package/src/unstable/httpapi/HttpApi.ts +3 -3
- package/src/unstable/httpapi/HttpApiBuilder.ts +10 -9
- package/src/unstable/httpapi/HttpApiClient.ts +19 -19
- package/src/unstable/httpapi/HttpApiEndpoint.ts +42 -42
- package/src/unstable/httpapi/HttpApiError.ts +13 -13
- package/src/unstable/httpapi/HttpApiGroup.ts +16 -16
- package/src/unstable/httpapi/HttpApiMiddleware.ts +71 -24
- package/src/unstable/httpapi/HttpApiScalar.ts +0 -12
- package/src/unstable/httpapi/HttpApiSchema.ts +6 -6
- package/src/unstable/httpapi/OpenApi.ts +65 -41
- package/src/unstable/observability/OtlpExporter.ts +126 -10
- package/src/unstable/observability/OtlpLogger.ts +5 -5
- package/src/unstable/observability/OtlpMetrics.ts +12 -5
- package/src/unstable/observability/OtlpResource.ts +26 -17
- package/src/unstable/observability/OtlpTracer.ts +8 -4
- 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 +6 -6
- package/src/unstable/persistence/Persistence.ts +126 -19
- package/src/unstable/persistence/RateLimiter.ts +28 -17
- package/src/unstable/persistence/Redis.ts +4 -4
- package/src/unstable/process/ChildProcess.ts +64 -21
- package/src/unstable/process/ChildProcessSpawner.ts +22 -11
- package/src/unstable/reactivity/AsyncResult.ts +16 -16
- package/src/unstable/reactivity/Atom.ts +117 -22
- 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 +18 -16
- 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 +18 -15
- package/src/unstable/rpc/RpcWorker.ts +5 -5
- package/src/unstable/schema/Model.ts +52 -50
- package/src/unstable/schema/VariantSchema.ts +19 -29
- package/src/unstable/socket/Socket.ts +18 -5
- package/src/unstable/sql/SqlClient.ts +5 -6
- package/src/unstable/sql/SqlError.ts +2 -2
- package/src/unstable/sql/SqlModel.ts +2 -2
- package/src/unstable/sql/SqlResolver.ts +5 -5
- package/src/unstable/sql/Statement.ts +31 -29
- package/src/unstable/workers/Transferable.ts +1 -1
- package/src/unstable/workers/Worker.ts +2 -2
- package/src/unstable/workers/WorkerError.ts +7 -7
- 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 +10 -10
- package/src/unstable/workflow/DurableQueue.ts +22 -20
- package/src/unstable/workflow/Workflow.ts +23 -23
- package/src/unstable/workflow/WorkflowEngine.ts +1 -1
- package/src/unstable/workflow/WorkflowProxy.ts +4 -2
- 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.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/src/SchemaUtils.ts +0 -51
- package/src/internal/schema/representation.ts +0 -795
- package/src/internal/version.ts +0 -2
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 } from "./Function.ts"
|
|
21
20
|
import { effectIsExit, iterateEager } from "./internal/effect.ts"
|
|
22
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"
|
|
@@ -672,10 +671,10 @@ export class Declaration extends Base {
|
|
|
672
671
|
}
|
|
673
672
|
/** @internal */
|
|
674
673
|
getParser(): SchemaParser.Parser {
|
|
675
|
-
|
|
676
|
-
return (
|
|
677
|
-
if (
|
|
678
|
-
return
|
|
674
|
+
let run: ReturnType<typeof this.run>
|
|
675
|
+
return (input, options) => {
|
|
676
|
+
if (input === InternalParser.missing) return InternalParser.missingExit
|
|
677
|
+
return (run ??= this.run(this.typeParameters))(input, this, options)
|
|
679
678
|
}
|
|
680
679
|
}
|
|
681
680
|
private _rebuild(recur: (ast: AST) => AST, checks: Checks | undefined, encodingChecks: Checks | undefined) {
|
|
@@ -816,7 +815,8 @@ export class Void extends Base {
|
|
|
816
815
|
readonly _tag = "Void"
|
|
817
816
|
/** @internal */
|
|
818
817
|
getParser() {
|
|
819
|
-
|
|
818
|
+
const succeed = InternalParser.succeed(undefined)
|
|
819
|
+
return (input: unknown) => input === InternalParser.missing ? InternalParser.missingExit : succeed
|
|
820
820
|
}
|
|
821
821
|
/** @internal */
|
|
822
822
|
toCodecJson(): AST {
|
|
@@ -1080,9 +1080,9 @@ function isTemplateLiteralPart(ast: AST): ast is TemplateLiteralPart {
|
|
|
1080
1080
|
return true
|
|
1081
1081
|
case "Literal":
|
|
1082
1082
|
case "TemplateLiteral":
|
|
1083
|
-
return ast.checks
|
|
1083
|
+
return !ast.checks
|
|
1084
1084
|
case "Union":
|
|
1085
|
-
return ast.checks
|
|
1085
|
+
return !ast.checks && ast.types.every(isTemplateLiteralPart)
|
|
1086
1086
|
default:
|
|
1087
1087
|
return false
|
|
1088
1088
|
}
|
|
@@ -1106,6 +1106,10 @@ export class TemplateLiteral extends Base {
|
|
|
1106
1106
|
readonly parts: ReadonlyArray<AST>
|
|
1107
1107
|
/** @internal */
|
|
1108
1108
|
readonly encodedParts: ReadonlyArray<TemplateLiteralPart>
|
|
1109
|
+
/** @internal */
|
|
1110
|
+
readonly literals: ReadonlyArray<string | undefined>
|
|
1111
|
+
/** @internal */
|
|
1112
|
+
readonly suffixLengths: ReadonlyArray<number>
|
|
1109
1113
|
|
|
1110
1114
|
constructor(
|
|
1111
1115
|
parts: ReadonlyArray<AST>,
|
|
@@ -1116,25 +1120,40 @@ export class TemplateLiteral extends Base {
|
|
|
1116
1120
|
) {
|
|
1117
1121
|
super(annotations, checks, encoding, context)
|
|
1118
1122
|
const encodedParts: Array<TemplateLiteralPart> = []
|
|
1123
|
+
const literals: Array<string | undefined> = []
|
|
1119
1124
|
for (const part of parts) {
|
|
1120
1125
|
const encoded = toEncoded(part)
|
|
1121
1126
|
if (isTemplateLiteralPart(encoded)) {
|
|
1122
1127
|
encodedParts.push(encoded)
|
|
1128
|
+
literals.push(encoded._tag === "Literal" ? globalThis.String(encoded.literal) : undefined)
|
|
1123
1129
|
} else {
|
|
1124
1130
|
throw new Error(`Invalid TemplateLiteral part ${encoded._tag}`)
|
|
1125
1131
|
}
|
|
1126
1132
|
}
|
|
1133
|
+
const suffixLengths = new Array<number>(encodedParts.length + 1)
|
|
1134
|
+
suffixLengths[encodedParts.length] = 0
|
|
1135
|
+
for (let i = encodedParts.length - 1; i >= 0; i--) {
|
|
1136
|
+
suffixLengths[i] = suffixLengths[i + 1] + (literals[i]?.length ?? 0)
|
|
1137
|
+
}
|
|
1127
1138
|
this.parts = parts
|
|
1128
1139
|
this.encodedParts = encodedParts
|
|
1140
|
+
this.literals = literals
|
|
1141
|
+
this.suffixLengths = suffixLengths
|
|
1129
1142
|
}
|
|
1130
1143
|
/** @internal */
|
|
1131
1144
|
getParser(recur: (ast: AST) => SchemaParser.Parser): SchemaParser.Parser {
|
|
1132
1145
|
const parser = recur(this.asTemplateLiteralParser())
|
|
1133
|
-
return (
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1146
|
+
return (input, options) => {
|
|
1147
|
+
if (input === InternalParser.missing) return InternalParser.missingExit
|
|
1148
|
+
const result = parser(input, options)
|
|
1149
|
+
if ((result as Exit.Exit<unknown, unknown>)._tag === "Success") {
|
|
1150
|
+
return InternalParser.sameExit
|
|
1151
|
+
}
|
|
1152
|
+
return Effect.mapBothEager(result, {
|
|
1153
|
+
onSuccess: () => input,
|
|
1154
|
+
onFailure: (issue) => new SchemaIssue.Composite(this, [issue])
|
|
1137
1155
|
})
|
|
1156
|
+
}
|
|
1138
1157
|
}
|
|
1139
1158
|
/** @internal */
|
|
1140
1159
|
getExpected(): string {
|
|
@@ -1142,7 +1161,7 @@ export class TemplateLiteral extends Base {
|
|
|
1142
1161
|
}
|
|
1143
1162
|
/** @internal */
|
|
1144
1163
|
matchPart(s: string, options: ParseOptions): string | undefined {
|
|
1145
|
-
return segmentTemplateLiteralParts(this
|
|
1164
|
+
return segmentTemplateLiteralParts(this, s, options) === undefined ? undefined : s
|
|
1146
1165
|
}
|
|
1147
1166
|
/** @internal */
|
|
1148
1167
|
asTemplateLiteralParser(): Arrays {
|
|
@@ -1152,11 +1171,11 @@ export class TemplateLiteral extends Base {
|
|
|
1152
1171
|
tuple,
|
|
1153
1172
|
new SchemaTransformation.Transformation(
|
|
1154
1173
|
SchemaGetter.transformOrFail((s: string, options) => {
|
|
1155
|
-
const segments = segmentTemplateLiteralParts(this
|
|
1156
|
-
if (segments
|
|
1174
|
+
const segments = segmentTemplateLiteralParts(this, s, options)
|
|
1175
|
+
if (segments) return Effect.succeed(segments)
|
|
1157
1176
|
return Effect.fail(
|
|
1158
|
-
new SchemaIssue.InvalidValue(
|
|
1159
|
-
message:
|
|
1177
|
+
new SchemaIssue.InvalidValue({
|
|
1178
|
+
message: "Expected a string matching template literal parts"
|
|
1160
1179
|
})
|
|
1161
1180
|
)
|
|
1162
1181
|
}),
|
|
@@ -1228,11 +1247,11 @@ export type LiteralValue = string | number | boolean | bigint
|
|
|
1228
1247
|
*
|
|
1229
1248
|
* **Example** (Creating a literal AST)
|
|
1230
1249
|
*
|
|
1231
|
-
* ```ts
|
|
1250
|
+
* ```ts import.meta.vitest
|
|
1232
1251
|
* import { SchemaAST } from "effect"
|
|
1233
1252
|
*
|
|
1234
1253
|
* const ast = new SchemaAST.Literal("active")
|
|
1235
|
-
*
|
|
1254
|
+
* ast.literal // => "active"
|
|
1236
1255
|
* ```
|
|
1237
1256
|
*
|
|
1238
1257
|
* @see {@link LiteralValue}
|
|
@@ -1309,7 +1328,8 @@ export class String extends Base {
|
|
|
1309
1328
|
}
|
|
1310
1329
|
/** @internal */
|
|
1311
1330
|
matchPart(s: string, options: ParseOptions): string | undefined {
|
|
1312
|
-
|
|
1331
|
+
const checks = this.checks
|
|
1332
|
+
return checks && !options.disableChecks && collectIssues(checks, s, undefined, this, options) ? undefined : s
|
|
1313
1333
|
}
|
|
1314
1334
|
/** @internal */
|
|
1315
1335
|
getExpected(): string {
|
|
@@ -1366,20 +1386,24 @@ export class Number extends Base {
|
|
|
1366
1386
|
return this._match(isStringFiniteRegExp, s, options)
|
|
1367
1387
|
}
|
|
1368
1388
|
private _match(regexp: RegExp, s: string, options: ParseOptions): number | undefined {
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1389
|
+
if (!regexp.test(s)) return undefined
|
|
1390
|
+
const value = globalThis.Number(s)
|
|
1391
|
+
if (options.disableChecks || !this.checks) return value
|
|
1392
|
+
return collectIssues(this.checks, value, undefined, this, options) ? undefined : value
|
|
1372
1393
|
}
|
|
1373
1394
|
/** @internal */
|
|
1374
1395
|
toCodecJson(): AST {
|
|
1375
|
-
if (
|
|
1396
|
+
if (
|
|
1397
|
+
this.checks &&
|
|
1398
|
+
(hasCheck(this.checks, "effect/schema/isFinite") || hasCheck(this.checks, "effect/schema/isInt"))
|
|
1399
|
+
) {
|
|
1376
1400
|
return this
|
|
1377
1401
|
}
|
|
1378
|
-
return replaceEncoding(this, [numberToJson])
|
|
1402
|
+
return replaceEncoding(this, [numberToJson(this.checks)])
|
|
1379
1403
|
}
|
|
1380
1404
|
/** @internal */
|
|
1381
1405
|
toCodecStringTree(): AST {
|
|
1382
|
-
if (this.
|
|
1406
|
+
if (this.toCodecJson() === this) {
|
|
1383
1407
|
return replaceEncoding(this, [finiteToString])
|
|
1384
1408
|
}
|
|
1385
1409
|
return replaceEncoding(this, [numberToString])
|
|
@@ -1390,16 +1414,25 @@ export class Number extends Base {
|
|
|
1390
1414
|
}
|
|
1391
1415
|
}
|
|
1392
1416
|
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1417
|
+
function hasCheck(checks: ReadonlyArray<Check<unknown>>, id: string): boolean {
|
|
1418
|
+
return checks.some((check) =>
|
|
1419
|
+
check.annotations?.representation?.id === id ||
|
|
1420
|
+
(check._tag === "FilterGroup" && hasCheck(check.checks, id))
|
|
1421
|
+
)
|
|
1422
|
+
}
|
|
1423
|
+
|
|
1424
|
+
function numberToJson(checks: Checks | undefined): Link {
|
|
1425
|
+
const encodedFinite = !checks
|
|
1426
|
+
? finite
|
|
1427
|
+
: appendChecks(finite, checks)
|
|
1428
|
+
|
|
1429
|
+
return new Link(
|
|
1430
|
+
new Union([encodedFinite, nonFiniteLiterals], "anyOf"),
|
|
1431
|
+
new SchemaTransformation.Transformation(
|
|
1432
|
+
SchemaGetter.Number(),
|
|
1433
|
+
SchemaGetter.transform((n) => globalThis.Number.isFinite(n) ? n : globalThis.String(n))
|
|
1434
|
+
)
|
|
1435
|
+
)
|
|
1403
1436
|
}
|
|
1404
1437
|
|
|
1405
1438
|
/**
|
|
@@ -1481,7 +1514,8 @@ export class Symbol extends Base {
|
|
|
1481
1514
|
}
|
|
1482
1515
|
/** @internal */
|
|
1483
1516
|
matchKey(s: symbol, options: ParseOptions): symbol | undefined {
|
|
1484
|
-
|
|
1517
|
+
if (options.disableChecks || !this.checks) return s
|
|
1518
|
+
return collectIssues(this.checks, s, undefined, this, options) ? undefined : s
|
|
1485
1519
|
}
|
|
1486
1520
|
/** @internal */
|
|
1487
1521
|
toCodecStringTree(): AST {
|
|
@@ -1534,9 +1568,10 @@ export class BigInt extends Base {
|
|
|
1534
1568
|
}
|
|
1535
1569
|
/** @internal */
|
|
1536
1570
|
matchPart(s: string, options: ParseOptions): bigint | undefined {
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1571
|
+
if (!isStringBigIntRegExp.test(s)) return undefined
|
|
1572
|
+
const value = globalThis.BigInt(s)
|
|
1573
|
+
if (options.disableChecks || !this.checks) return value
|
|
1574
|
+
return collectIssues(this.checks, value, undefined, this, options) ? undefined : value
|
|
1540
1575
|
}
|
|
1541
1576
|
/** @internal */
|
|
1542
1577
|
toCodecStringTree(): AST {
|
|
@@ -1590,15 +1625,14 @@ export const bigInt = new BigInt()
|
|
|
1590
1625
|
*
|
|
1591
1626
|
* **Example** (Inspecting a tuple AST)
|
|
1592
1627
|
*
|
|
1593
|
-
* ```ts
|
|
1628
|
+
* ```ts import.meta.vitest
|
|
1594
1629
|
* import { Schema, SchemaAST } from "effect"
|
|
1595
1630
|
*
|
|
1596
1631
|
* const schema = Schema.Tuple([Schema.String, Schema.Number])
|
|
1597
1632
|
* const ast = schema.ast
|
|
1598
1633
|
*
|
|
1599
1634
|
* if (SchemaAST.isArrays(ast)) {
|
|
1600
|
-
*
|
|
1601
|
-
* console.log(ast.rest.length) // 0
|
|
1635
|
+
* [ast.elements.length, ast.rest.length] // => [2, 0]
|
|
1602
1636
|
* }
|
|
1603
1637
|
* ```
|
|
1604
1638
|
*
|
|
@@ -1630,58 +1664,68 @@ export class Arrays extends Base {
|
|
|
1630
1664
|
this.rest = rest
|
|
1631
1665
|
this.encodingChecks = encodingChecks
|
|
1632
1666
|
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1667
|
+
let hasOptional = false
|
|
1668
|
+
for (let i = 0; i < elements.length; i++) {
|
|
1669
|
+
if (isOptional(elements[i])) {
|
|
1670
|
+
hasOptional = true
|
|
1671
|
+
} else if (hasOptional) {
|
|
1672
|
+
throw new Error("A required element cannot follow an optional element. ts(1257)")
|
|
1673
|
+
}
|
|
1674
|
+
}
|
|
1675
|
+
if (hasOptional && rest.length > 1) {
|
|
1636
1676
|
throw new Error("A required element cannot follow an optional element. ts(1257)")
|
|
1637
1677
|
}
|
|
1638
1678
|
|
|
1639
1679
|
// An optional element cannot follow a rest element.ts(1266)
|
|
1640
|
-
|
|
1641
|
-
|
|
1680
|
+
for (let i = 1; i < rest.length; i++) {
|
|
1681
|
+
if (isOptional(rest[i])) {
|
|
1682
|
+
throw new Error("An optional element cannot follow a rest element. ts(1266)")
|
|
1683
|
+
}
|
|
1642
1684
|
}
|
|
1643
1685
|
}
|
|
1644
1686
|
/** @internal */
|
|
1645
1687
|
getParser(recur: (ast: AST) => SchemaParser.Parser): SchemaParser.Parser {
|
|
1646
1688
|
// oxlint-disable-next-line @typescript-eslint/no-this-alias
|
|
1647
1689
|
const ast = this
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
const
|
|
1653
|
-
const tailLen = tail.length
|
|
1690
|
+
type ElementParser = { readonly ast: AST; readonly parser: SchemaParser.Parser }
|
|
1691
|
+
let elements: Array<ElementParser> | undefined
|
|
1692
|
+
let rest: Array<ElementParser> | undefined
|
|
1693
|
+
const elementLen = ast.elements.length
|
|
1694
|
+
const tailLen = Math.max(0, ast.rest.length - 1)
|
|
1654
1695
|
|
|
1655
1696
|
function getParser(
|
|
1656
1697
|
tailThreshold: number,
|
|
1657
1698
|
index: number
|
|
1658
1699
|
): { readonly ast: AST; readonly parser: SchemaParser.Parser } {
|
|
1659
1700
|
if (index < elementLen) {
|
|
1660
|
-
return elements[index]
|
|
1701
|
+
return elements![index]
|
|
1661
1702
|
} else if (index >= tailThreshold) {
|
|
1662
|
-
return
|
|
1703
|
+
return rest![index - tailThreshold + 1]
|
|
1663
1704
|
}
|
|
1664
|
-
return
|
|
1705
|
+
return rest![0]
|
|
1665
1706
|
}
|
|
1666
1707
|
|
|
1667
|
-
return Effect.fnUntracedEager(function*(
|
|
1668
|
-
if (
|
|
1669
|
-
return
|
|
1708
|
+
return Effect.fnUntracedEager(function*(input, options) {
|
|
1709
|
+
if (input === InternalParser.missing) {
|
|
1710
|
+
return InternalParser.missing
|
|
1670
1711
|
}
|
|
1671
|
-
const input = oinput.value
|
|
1672
1712
|
|
|
1673
1713
|
// If the input is not an array, return early with an error
|
|
1674
1714
|
if (!Array.isArray(input)) {
|
|
1675
|
-
return yield* Effect.fail(new SchemaIssue.InvalidType(ast
|
|
1715
|
+
return yield* Effect.fail(new SchemaIssue.InvalidType(ast))
|
|
1716
|
+
}
|
|
1717
|
+
if (!elements) {
|
|
1718
|
+
elements = ast.elements.map((ast) => ({ ast, parser: recur(ast) }))
|
|
1719
|
+
rest = ast.rest.map((ast) => ({ ast, parser: recur(ast) }))
|
|
1676
1720
|
}
|
|
1677
1721
|
|
|
1678
1722
|
const len = input.length
|
|
1679
1723
|
const state = {
|
|
1680
1724
|
ast,
|
|
1681
1725
|
getParser,
|
|
1682
|
-
|
|
1726
|
+
input,
|
|
1683
1727
|
len,
|
|
1684
|
-
tailThreshold:
|
|
1728
|
+
tailThreshold: Math.max(elementLen, len - tailLen),
|
|
1685
1729
|
output: new globalThis.Array(len),
|
|
1686
1730
|
issues: undefined as Arr.NonEmptyArray<SchemaIssue.Issue> | undefined,
|
|
1687
1731
|
options
|
|
@@ -1698,19 +1742,23 @@ export class Arrays extends Base {
|
|
|
1698
1742
|
// ---------------------------------------------
|
|
1699
1743
|
if (ast.rest.length === 0 && len > elementLen) {
|
|
1700
1744
|
for (let i = elementLen; i <= len - 1; i++) {
|
|
1701
|
-
const issue = new SchemaIssue.Pointer([i], new SchemaIssue.UnexpectedKey(ast
|
|
1745
|
+
const issue = new SchemaIssue.Pointer([i], new SchemaIssue.UnexpectedKey(ast))
|
|
1702
1746
|
if (options.errors === "all") {
|
|
1703
1747
|
if (state.issues) state.issues.push(issue)
|
|
1704
1748
|
else state.issues = [issue]
|
|
1705
1749
|
} else {
|
|
1706
|
-
return yield* Effect.fail(
|
|
1750
|
+
return yield* Effect.fail(
|
|
1751
|
+
new SchemaIssue.Composite(ast, [issue])
|
|
1752
|
+
)
|
|
1707
1753
|
}
|
|
1708
1754
|
}
|
|
1709
1755
|
}
|
|
1710
1756
|
if (state.issues) {
|
|
1711
|
-
return yield* Effect.fail(
|
|
1757
|
+
return yield* Effect.fail(
|
|
1758
|
+
new SchemaIssue.Composite(ast, state.issues)
|
|
1759
|
+
)
|
|
1712
1760
|
}
|
|
1713
|
-
return
|
|
1761
|
+
return state.output
|
|
1714
1762
|
})
|
|
1715
1763
|
}
|
|
1716
1764
|
private _rebuild(recur: (ast: AST) => AST, checks: Checks | undefined, encodingChecks: Checks | undefined) {
|
|
@@ -1745,7 +1793,7 @@ export class Arrays extends Base {
|
|
|
1745
1793
|
}
|
|
1746
1794
|
const parseArray = iterateEager<{
|
|
1747
1795
|
readonly ast: AST
|
|
1748
|
-
readonly
|
|
1796
|
+
readonly input: unknown
|
|
1749
1797
|
readonly len: number
|
|
1750
1798
|
readonly getParser: (
|
|
1751
1799
|
tailThreshold: number,
|
|
@@ -1757,14 +1805,18 @@ const parseArray = iterateEager<{
|
|
|
1757
1805
|
issues: Array<SchemaIssue.Issue> | undefined
|
|
1758
1806
|
}, unknown>()({
|
|
1759
1807
|
onItem(s, item, i) {
|
|
1760
|
-
const value = i < s.len ?
|
|
1808
|
+
const value = i < s.len ? item : InternalParser.missing
|
|
1761
1809
|
return s.getParser(s.tailThreshold, i).parser(value, s.options)
|
|
1762
1810
|
},
|
|
1763
|
-
step(s,
|
|
1811
|
+
step(s, item, exit, i) {
|
|
1764
1812
|
if (exit._tag === "Failure") {
|
|
1765
1813
|
return wrapPropertyKeyIssue(s, s.ast, i, exit)
|
|
1766
|
-
}
|
|
1767
|
-
|
|
1814
|
+
}
|
|
1815
|
+
const value = exit === InternalParser.sameExit
|
|
1816
|
+
? item
|
|
1817
|
+
: (exit as InternalParser.Success<unknown, SchemaIssue.Issue>)[InternalParser.args]
|
|
1818
|
+
if (value !== InternalParser.missing) {
|
|
1819
|
+
s.output[i] = value
|
|
1768
1820
|
} else {
|
|
1769
1821
|
const p = s.getParser(s.tailThreshold, i)
|
|
1770
1822
|
if (isOptional(p.ast)) return
|
|
@@ -1773,20 +1825,14 @@ const parseArray = iterateEager<{
|
|
|
1773
1825
|
if (s.issues) s.issues.push(issue)
|
|
1774
1826
|
else s.issues = [issue]
|
|
1775
1827
|
} else {
|
|
1776
|
-
return Exit.fail(
|
|
1828
|
+
return Exit.fail(
|
|
1829
|
+
new SchemaIssue.Composite(s.ast, [issue])
|
|
1830
|
+
)
|
|
1777
1831
|
}
|
|
1778
1832
|
}
|
|
1779
1833
|
}
|
|
1780
1834
|
})
|
|
1781
1835
|
|
|
1782
|
-
function resolveTailThreshold(
|
|
1783
|
-
inputLen: number,
|
|
1784
|
-
elementLen: number,
|
|
1785
|
-
tailLen: number
|
|
1786
|
-
) {
|
|
1787
|
-
return Math.max(elementLen, inputLen - tailLen)
|
|
1788
|
-
}
|
|
1789
|
-
|
|
1790
1836
|
const resolveConcurrency = (value: number | "unbounded" | undefined) => {
|
|
1791
1837
|
value = value === "unbounded" ? Infinity : value ?? 1
|
|
1792
1838
|
return value > 1 ? { concurrency: value } : undefined
|
|
@@ -1794,7 +1840,7 @@ const resolveConcurrency = (value: number | "unbounded" | undefined) => {
|
|
|
1794
1840
|
|
|
1795
1841
|
const wrapPropertyKeyIssue = (
|
|
1796
1842
|
s: {
|
|
1797
|
-
readonly
|
|
1843
|
+
readonly input: unknown
|
|
1798
1844
|
readonly options: ParseOptions
|
|
1799
1845
|
issues: Array<SchemaIssue.Issue> | undefined
|
|
1800
1846
|
},
|
|
@@ -1810,7 +1856,11 @@ const wrapPropertyKeyIssue = (
|
|
|
1810
1856
|
return Exit.failCause(
|
|
1811
1857
|
Cause.map(
|
|
1812
1858
|
exit.cause,
|
|
1813
|
-
(issue) =>
|
|
1859
|
+
(issue) =>
|
|
1860
|
+
new SchemaIssue.Composite(
|
|
1861
|
+
ast,
|
|
1862
|
+
[new SchemaIssue.Pointer([key], issue)]
|
|
1863
|
+
)
|
|
1814
1864
|
)
|
|
1815
1865
|
)
|
|
1816
1866
|
}
|
|
@@ -1819,7 +1869,9 @@ const wrapPropertyKeyIssue = (
|
|
|
1819
1869
|
if (s.issues) s.issues.push(pointer)
|
|
1820
1870
|
else s.issues = [pointer]
|
|
1821
1871
|
} else {
|
|
1822
|
-
return Exit.fail(
|
|
1872
|
+
return Exit.fail(
|
|
1873
|
+
new SchemaIssue.Composite(ast, [pointer])
|
|
1874
|
+
)
|
|
1823
1875
|
}
|
|
1824
1876
|
}
|
|
1825
1877
|
|
|
@@ -1887,37 +1939,6 @@ export class PropertySignature {
|
|
|
1887
1939
|
}
|
|
1888
1940
|
}
|
|
1889
1941
|
|
|
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
1942
|
type IndexSignatureParameter =
|
|
1922
1943
|
| String
|
|
1923
1944
|
| Number
|
|
@@ -1956,7 +1977,6 @@ function isIndexSignatureParameter(ast: AST): ast is IndexSignatureParameter {
|
|
|
1956
1977
|
* - `parameter` — the key type AST (e.g. {@link String} for `string` keys,
|
|
1957
1978
|
* {@link TemplateLiteral} for patterned keys).
|
|
1958
1979
|
* - `type` — the value type SchemaAST.
|
|
1959
|
-
* - `merge` — optional {@link KeyValueCombiner} for handling duplicate keys.
|
|
1960
1980
|
*
|
|
1961
1981
|
* **Gotchas**
|
|
1962
1982
|
*
|
|
@@ -1971,19 +1991,16 @@ function isIndexSignatureParameter(ast: AST): ast is IndexSignatureParameter {
|
|
|
1971
1991
|
export class IndexSignature {
|
|
1972
1992
|
readonly parameter: IndexSignatureParameter
|
|
1973
1993
|
readonly type: AST
|
|
1974
|
-
readonly merge: KeyValueCombiner | undefined
|
|
1975
1994
|
|
|
1976
1995
|
constructor(
|
|
1977
1996
|
parameter: AST,
|
|
1978
|
-
type: AST
|
|
1979
|
-
merge: KeyValueCombiner | undefined
|
|
1997
|
+
type: AST
|
|
1980
1998
|
) {
|
|
1981
1999
|
if (!isIndexSignatureParameter(parameter)) {
|
|
1982
2000
|
throw new Error(`Invalid index signature parameter ${parameter._tag}`)
|
|
1983
2001
|
}
|
|
1984
2002
|
this.parameter = parameter
|
|
1985
2003
|
this.type = type
|
|
1986
|
-
this.merge = merge
|
|
1987
2004
|
if (isOptional(type) && !containsUndefined(type)) {
|
|
1988
2005
|
throw new Error("Cannot use `Schema.optionalKey` with index signatures, use `Schema.optional` instead.")
|
|
1989
2006
|
}
|
|
@@ -2014,17 +2031,14 @@ export class IndexSignature {
|
|
|
2014
2031
|
*
|
|
2015
2032
|
* **Example** (Inspecting a struct AST)
|
|
2016
2033
|
*
|
|
2017
|
-
* ```ts
|
|
2034
|
+
* ```ts import.meta.vitest
|
|
2018
2035
|
* import { Schema, SchemaAST } from "effect"
|
|
2019
2036
|
*
|
|
2020
2037
|
* const schema = Schema.Struct({ name: Schema.String })
|
|
2021
2038
|
* const ast = schema.ast
|
|
2022
2039
|
*
|
|
2023
2040
|
* if (SchemaAST.isObjects(ast)) {
|
|
2024
|
-
*
|
|
2025
|
-
* console.log(ps.name, ps.type._tag)
|
|
2026
|
-
* }
|
|
2027
|
-
* // "name" "String"
|
|
2041
|
+
* ast.propertySignatures.map((ps) => [ps.name, ps.type._tag]) // => [["name", "String"]]
|
|
2028
2042
|
* }
|
|
2029
2043
|
* ```
|
|
2030
2044
|
*
|
|
@@ -2066,97 +2080,119 @@ export class Objects extends Base {
|
|
|
2066
2080
|
// oxlint-disable-next-line @typescript-eslint/no-this-alias
|
|
2067
2081
|
const ast = this
|
|
2068
2082
|
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
2083
|
for (const ps of ast.propertySignatures) {
|
|
2077
2084
|
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
2085
|
}
|
|
2086
|
+
const hasProperties = expectedKeys.length
|
|
2086
2087
|
const indexCount = ast.indexSignatures.length
|
|
2088
|
+
let expectedKeysSet = hasProperties && indexCount ? new Set(expectedKeys) : undefined
|
|
2087
2089
|
// ---------------------------------------------
|
|
2088
2090
|
// handle empty struct
|
|
2089
2091
|
// ---------------------------------------------
|
|
2090
|
-
if (
|
|
2092
|
+
if (!hasProperties && !indexCount) {
|
|
2091
2093
|
return fromRefinement(ast, Predicate.isNotNullish)
|
|
2092
2094
|
}
|
|
2093
2095
|
|
|
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
|
-
|
|
2096
|
+
let properties: Array<ParsedProperty> | undefined
|
|
2097
|
+
let indexes:
|
|
2098
|
+
| Array<{
|
|
2099
|
+
readonly is: IndexSignature
|
|
2100
|
+
readonly parserKey: SchemaParser.Parser
|
|
2101
|
+
readonly parserValue: SchemaParser.Parser
|
|
2102
|
+
}>
|
|
2103
|
+
| undefined
|
|
2104
|
+
type Index = NonNullable<typeof indexes>[number]
|
|
2105
|
+
const finishIndex = (
|
|
2106
|
+
s: ObjectParserState,
|
|
2107
|
+
key: PropertyKey,
|
|
2108
|
+
k2: PropertyKey | typeof InternalParser.missing,
|
|
2109
|
+
inputValue: unknown,
|
|
2110
|
+
exitValue: Exit.Exit<unknown, SchemaIssue.Issue>
|
|
2111
|
+
): Effect.Effect<void, SchemaIssue.Issue, any> => {
|
|
2112
|
+
if (exitValue._tag === "Failure") {
|
|
2113
|
+
return wrapPropertyKeyIssue(s, ast, key, exitValue) ?? Exit.void
|
|
2114
|
+
}
|
|
2115
|
+
const value = exitValue === InternalParser.sameExit
|
|
2116
|
+
? inputValue
|
|
2117
|
+
: (exitValue as InternalParser.Success<unknown, SchemaIssue.Issue>)[InternalParser.args]
|
|
2118
|
+
if (k2 !== InternalParser.missing && value !== InternalParser.missing) {
|
|
2119
|
+
if (hasProperties && (expectedKeysSet!.has(key) || expectedKeysSet!.has(k2))) return Exit.void
|
|
2120
|
+
InternalRecord.assignProperty(s.out, k2, value)
|
|
2121
|
+
}
|
|
2122
|
+
return Exit.void
|
|
2123
|
+
}
|
|
2124
|
+
const parseIndex = (
|
|
2125
|
+
s: ObjectParserState,
|
|
2126
|
+
key: PropertyKey,
|
|
2127
|
+
index: Index,
|
|
2128
|
+
exitKey?: Exit.Exit<unknown, SchemaIssue.Issue>
|
|
2129
|
+
): Effect.Effect<void, SchemaIssue.Issue, any> => {
|
|
2130
|
+
if (!exitKey) {
|
|
2131
|
+
const eff = index.parserKey(key, s.options)
|
|
2132
|
+
if (!effectIsExit(eff)) {
|
|
2133
|
+
return Effect.flatMap(Effect.exit(eff), (exit) => parseIndex(s, key, index, exit))
|
|
2134
|
+
}
|
|
2135
|
+
exitKey = eff
|
|
2136
|
+
}
|
|
2137
|
+
if (exitKey._tag === "Failure") {
|
|
2138
|
+
return wrapPropertyKeyIssue(s, ast, key, exitKey) ?? Exit.void
|
|
2139
|
+
}
|
|
2140
|
+
const k2 = exitKey === InternalParser.sameExit
|
|
2141
|
+
? key
|
|
2142
|
+
: (exitKey as InternalParser.Success<PropertyKey, SchemaIssue.Issue>)[InternalParser.args]
|
|
2143
|
+
const inputValue = s.input[key]
|
|
2144
|
+
const result = index.parserValue(inputValue, s.options)
|
|
2145
|
+
return effectIsExit(result)
|
|
2146
|
+
? finishIndex(s, key, k2, inputValue, result)
|
|
2147
|
+
: Effect.flatMap(Effect.exit(result), (exit) => finishIndex(s, key, k2, inputValue, exit))
|
|
2148
|
+
}
|
|
2149
|
+
const parseStringIndex = (
|
|
2150
|
+
s: ObjectParserState,
|
|
2151
|
+
key: PropertyKey,
|
|
2152
|
+
index: Index
|
|
2153
|
+
): Effect.Effect<void, SchemaIssue.Issue, any> => {
|
|
2154
|
+
const inputValue = s.input[key]
|
|
2155
|
+
const result = index.parserValue(inputValue, s.options)
|
|
2156
|
+
return effectIsExit(result)
|
|
2157
|
+
? finishIndex(s, key, key, inputValue, result)
|
|
2158
|
+
: Effect.flatMap(Effect.exit(result), (exit) => finishIndex(s, key, key, inputValue, exit))
|
|
2159
|
+
}
|
|
2160
|
+
const parseIndexes = indexCount ?
|
|
2161
|
+
iterateEager<ObjectParserState, [key: PropertyKey, index: Index]>()({
|
|
2162
|
+
onItem: (s, [key, index]) => parseIndex(s, key, index),
|
|
2140
2163
|
step: (_s, _, exit: Exit.Exit<void, SchemaIssue.Issue>) => exit._tag === "Failure" ? exit : undefined
|
|
2141
2164
|
}) :
|
|
2142
2165
|
undefined
|
|
2143
2166
|
|
|
2144
|
-
return Effect.fnUntracedEager(function*(
|
|
2145
|
-
if (
|
|
2146
|
-
return
|
|
2167
|
+
return Effect.fnUntracedEager(function*(input, options) {
|
|
2168
|
+
if (input === InternalParser.missing) {
|
|
2169
|
+
return InternalParser.missing
|
|
2147
2170
|
}
|
|
2148
|
-
const input = oinput.value as Record<PropertyKey, unknown>
|
|
2149
2171
|
|
|
2150
2172
|
// If the input is not a record, return early with an error
|
|
2151
2173
|
if (!(typeof input === "object" && input !== null && !Array.isArray(input))) {
|
|
2152
|
-
return yield* Effect.fail(new SchemaIssue.InvalidType(ast
|
|
2174
|
+
return yield* Effect.fail(new SchemaIssue.InvalidType(ast))
|
|
2175
|
+
}
|
|
2176
|
+
if (!properties) {
|
|
2177
|
+
properties = ast.propertySignatures.map((ps) => ({
|
|
2178
|
+
parser: recur(ps.type),
|
|
2179
|
+
name: ps.name,
|
|
2180
|
+
type: ps.type
|
|
2181
|
+
}))
|
|
2182
|
+
indexes = indexCount
|
|
2183
|
+
? ast.indexSignatures.map((is) => ({
|
|
2184
|
+
is,
|
|
2185
|
+
parserKey: recur(parameterFromPropertyKey(is.parameter)),
|
|
2186
|
+
parserValue: recur(is.type)
|
|
2187
|
+
}))
|
|
2188
|
+
: undefined
|
|
2153
2189
|
}
|
|
2154
2190
|
|
|
2191
|
+
const record = input as Record<PropertyKey, unknown>
|
|
2155
2192
|
const out: Record<PropertyKey, unknown> = {}
|
|
2156
2193
|
const state = {
|
|
2157
2194
|
ast,
|
|
2158
|
-
|
|
2159
|
-
input,
|
|
2195
|
+
input: record,
|
|
2160
2196
|
out,
|
|
2161
2197
|
issues: undefined as Arr.NonEmptyArray<SchemaIssue.Issue> | undefined,
|
|
2162
2198
|
options
|
|
@@ -2169,14 +2205,15 @@ export class Objects extends Base {
|
|
|
2169
2205
|
// handle excess properties
|
|
2170
2206
|
// ---------------------------------------------
|
|
2171
2207
|
let inputKeys: Array<PropertyKey> | undefined
|
|
2172
|
-
if (
|
|
2173
|
-
|
|
2208
|
+
if (!indexCount && (onExcessPropertyError || onExcessPropertyPreserve)) {
|
|
2209
|
+
expectedKeysSet ??= new Set(expectedKeys)
|
|
2210
|
+
inputKeys = Reflect.ownKeys(record)
|
|
2174
2211
|
for (let i = 0; i < inputKeys.length; i++) {
|
|
2175
2212
|
const key = inputKeys[i]
|
|
2176
2213
|
if (!expectedKeysSet.has(key)) {
|
|
2177
2214
|
// key is unexpected
|
|
2178
2215
|
if (onExcessPropertyError) {
|
|
2179
|
-
const issue = new SchemaIssue.Pointer([key], new SchemaIssue.UnexpectedKey(ast
|
|
2216
|
+
const issue = new SchemaIssue.Pointer([key], new SchemaIssue.UnexpectedKey(ast))
|
|
2180
2217
|
if (errorsAllOption) {
|
|
2181
2218
|
if (state.issues) {
|
|
2182
2219
|
state.issues.push(issue)
|
|
@@ -2185,11 +2222,13 @@ export class Objects extends Base {
|
|
|
2185
2222
|
}
|
|
2186
2223
|
continue
|
|
2187
2224
|
} else {
|
|
2188
|
-
return yield* Effect.fail(
|
|
2225
|
+
return yield* Effect.fail(
|
|
2226
|
+
new SchemaIssue.Composite(ast, [issue])
|
|
2227
|
+
)
|
|
2189
2228
|
}
|
|
2190
2229
|
} else {
|
|
2191
2230
|
// preserve key
|
|
2192
|
-
InternalRecord.
|
|
2231
|
+
InternalRecord.assignProperty(out, key, record[key])
|
|
2193
2232
|
}
|
|
2194
2233
|
}
|
|
2195
2234
|
}
|
|
@@ -2200,20 +2239,34 @@ export class Objects extends Base {
|
|
|
2200
2239
|
// ---------------------------------------------
|
|
2201
2240
|
// handle property signatures
|
|
2202
2241
|
// ---------------------------------------------
|
|
2203
|
-
|
|
2204
|
-
|
|
2242
|
+
if (hasProperties) {
|
|
2243
|
+
const eff = parseProperties(state, properties!, concurrency)
|
|
2244
|
+
if (eff) yield* eff
|
|
2245
|
+
}
|
|
2205
2246
|
|
|
2206
2247
|
// ---------------------------------------------
|
|
2207
2248
|
// handle index signatures
|
|
2208
2249
|
// ---------------------------------------------
|
|
2209
|
-
if (
|
|
2210
|
-
|
|
2250
|
+
if (indexCount && !concurrency) {
|
|
2251
|
+
for (let i = 0; i < indexCount; i++) {
|
|
2252
|
+
const index = indexes![i]
|
|
2253
|
+
const parse = index.is.parameter === string ? parseStringIndex : parseIndex
|
|
2254
|
+
const keys = index.is.parameter === string
|
|
2255
|
+
? Object.keys(record)
|
|
2256
|
+
: getIndexSignatureKeys(record, index.is.parameter, options)
|
|
2257
|
+
for (let j = 0; j < keys.length; j++) {
|
|
2258
|
+
const eff = parse(state, keys[j], index)
|
|
2259
|
+
if (!effectIsExit(eff)) yield* eff
|
|
2260
|
+
else if (eff._tag === "Failure") return yield* eff as Exit.Exit<never, SchemaIssue.Issue>
|
|
2261
|
+
}
|
|
2262
|
+
}
|
|
2263
|
+
} else if (parseIndexes) {
|
|
2264
|
+
const keyPairs = Arr.empty<[PropertyKey, Index]>()
|
|
2211
2265
|
for (let i = 0; i < indexCount; i++) {
|
|
2212
|
-
const
|
|
2213
|
-
const keys = getIndexSignatureKeys(
|
|
2266
|
+
const index = indexes![i]
|
|
2267
|
+
const keys = getIndexSignatureKeys(record, index.is.parameter, options)
|
|
2214
2268
|
for (let j = 0; j < keys.length; j++) {
|
|
2215
|
-
|
|
2216
|
-
keyPairs.push([key, is])
|
|
2269
|
+
keyPairs.push([keys[j], index])
|
|
2217
2270
|
}
|
|
2218
2271
|
}
|
|
2219
2272
|
const eff = parseIndexes(state, keyPairs, concurrency)
|
|
@@ -2221,26 +2274,27 @@ export class Objects extends Base {
|
|
|
2221
2274
|
}
|
|
2222
2275
|
|
|
2223
2276
|
if (state.issues) {
|
|
2224
|
-
return yield* Effect.fail(
|
|
2277
|
+
return yield* Effect.fail(
|
|
2278
|
+
new SchemaIssue.Composite(ast, state.issues)
|
|
2279
|
+
)
|
|
2225
2280
|
}
|
|
2226
2281
|
if (options.propertyOrder === "original") {
|
|
2227
2282
|
// preserve input keys order
|
|
2228
|
-
const keys = (inputKeys ?? Reflect.ownKeys(
|
|
2283
|
+
const keys = (inputKeys ?? Reflect.ownKeys(record)).concat(expectedKeys)
|
|
2229
2284
|
const preserved: Record<PropertyKey, unknown> = {}
|
|
2230
2285
|
for (const key of keys) {
|
|
2231
2286
|
if (Object.hasOwn(out, key)) {
|
|
2232
|
-
InternalRecord.
|
|
2287
|
+
InternalRecord.assignProperty(preserved, key, out[key])
|
|
2233
2288
|
}
|
|
2234
2289
|
}
|
|
2235
|
-
return
|
|
2290
|
+
return preserved
|
|
2236
2291
|
}
|
|
2237
|
-
return
|
|
2292
|
+
return out
|
|
2238
2293
|
})
|
|
2239
2294
|
}
|
|
2240
2295
|
private _rebuild(
|
|
2241
2296
|
recur: (ast: AST) => AST,
|
|
2242
2297
|
recurParameter: (ast: AST) => AST,
|
|
2243
|
-
flipMerge: boolean,
|
|
2244
2298
|
checks: Checks | undefined,
|
|
2245
2299
|
encodingChecks: Checks | undefined
|
|
2246
2300
|
): Objects {
|
|
@@ -2252,10 +2306,9 @@ export class Objects extends Base {
|
|
|
2252
2306
|
const indexes = mapOrSame(this.indexSignatures, (is) => {
|
|
2253
2307
|
const p = recurParameter(is.parameter)
|
|
2254
2308
|
const t = recur(is.type)
|
|
2255
|
-
|
|
2256
|
-
return p === is.parameter && t === is.type && merge === is.merge
|
|
2309
|
+
return p === is.parameter && t === is.type
|
|
2257
2310
|
? is
|
|
2258
|
-
: new IndexSignature(p, t
|
|
2311
|
+
: new IndexSignature(p, t)
|
|
2259
2312
|
})
|
|
2260
2313
|
|
|
2261
2314
|
return props === this.propertySignatures && indexes === this.indexSignatures && checks === this.checks &&
|
|
@@ -2273,11 +2326,11 @@ export class Objects extends Base {
|
|
|
2273
2326
|
}
|
|
2274
2327
|
/** @internal */
|
|
2275
2328
|
flip(recur: (ast: AST) => AST): AST {
|
|
2276
|
-
return this._rebuild(recur, recur,
|
|
2329
|
+
return this._rebuild(recur, recur, this.encodingChecks, this.checks)
|
|
2277
2330
|
}
|
|
2278
2331
|
/** @internal */
|
|
2279
2332
|
recur(recur: (ast: AST) => AST, recurParameter: (ast: AST) => AST = recur): AST {
|
|
2280
|
-
return this._rebuild(recur, recurParameter,
|
|
2333
|
+
return this._rebuild(recur, recurParameter, this.checks, this.encodingChecks)
|
|
2281
2334
|
}
|
|
2282
2335
|
/** @internal */
|
|
2283
2336
|
getExpected(): string {
|
|
@@ -2286,42 +2339,41 @@ export class Objects extends Base {
|
|
|
2286
2339
|
}
|
|
2287
2340
|
}
|
|
2288
2341
|
|
|
2342
|
+
type ObjectParserState = {
|
|
2343
|
+
readonly ast: Objects
|
|
2344
|
+
readonly input: Record<PropertyKey, unknown>
|
|
2345
|
+
readonly options: ParseOptions
|
|
2346
|
+
readonly out: Record<PropertyKey, unknown>
|
|
2347
|
+
issues: Array<SchemaIssue.Issue> | undefined
|
|
2348
|
+
}
|
|
2349
|
+
|
|
2289
2350
|
type ParsedProperty = {
|
|
2290
|
-
readonly ps: PropertySignature | IndexSignature
|
|
2291
2351
|
readonly parser: SchemaParser.Parser
|
|
2292
2352
|
readonly name: PropertyKey
|
|
2293
2353
|
readonly type: AST
|
|
2294
2354
|
}
|
|
2295
2355
|
|
|
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()
|
|
2356
|
+
const parseProperties = iterateEager<ObjectParserState, ParsedProperty>()({
|
|
2357
|
+
onItem(s, p) {
|
|
2358
|
+
if (!Object.hasOwn(s.input, p.name)) {
|
|
2359
|
+
return p.parser(InternalParser.missing, s.options)
|
|
2360
|
+
}
|
|
2361
|
+
const value = s.input[p.name]
|
|
2362
|
+
InternalRecord.assignProperty(s.out, p.name, value)
|
|
2317
2363
|
return p.parser(value, s.options)
|
|
2318
2364
|
},
|
|
2319
2365
|
step(s, p, exit) {
|
|
2320
2366
|
if (exit._tag === "Failure") {
|
|
2321
2367
|
return wrapPropertyKeyIssue(s, s.ast, p.name, exit)
|
|
2322
|
-
}
|
|
2323
|
-
|
|
2324
|
-
|
|
2368
|
+
}
|
|
2369
|
+
if (exit === InternalParser.sameExit) return
|
|
2370
|
+
const value = (exit as InternalParser.Success<unknown, SchemaIssue.Issue>)[InternalParser.args]
|
|
2371
|
+
if (value !== InternalParser.missing) {
|
|
2372
|
+
InternalRecord.assignProperty(s.out, p.name, value)
|
|
2373
|
+
return
|
|
2374
|
+
}
|
|
2375
|
+
delete s.out[p.name]
|
|
2376
|
+
if (!isOptional(p.type)) {
|
|
2325
2377
|
const issue = new SchemaIssue.Pointer([p.name], new SchemaIssue.MissingKey(p.type.context?.annotations))
|
|
2326
2378
|
if (s.options.errors === "all") {
|
|
2327
2379
|
if (s.issues) s.issues.push(issue)
|
|
@@ -2329,7 +2381,7 @@ const parseProperties = iterateEager<{
|
|
|
2329
2381
|
return
|
|
2330
2382
|
} else {
|
|
2331
2383
|
return Exit.fail(
|
|
2332
|
-
new SchemaIssue.Composite(s.ast,
|
|
2384
|
+
new SchemaIssue.Composite(s.ast, [issue])
|
|
2333
2385
|
)
|
|
2334
2386
|
}
|
|
2335
2387
|
}
|
|
@@ -2422,6 +2474,21 @@ export type Sentinel = {
|
|
|
2422
2474
|
readonly literal: LiteralValue | symbol
|
|
2423
2475
|
}
|
|
2424
2476
|
|
|
2477
|
+
const toCandidate = memoize((ast: AST): AST => {
|
|
2478
|
+
while (true) {
|
|
2479
|
+
if (isSuspend(ast)) return unknown
|
|
2480
|
+
const encoding = ast.encoding
|
|
2481
|
+
if (!encoding) {
|
|
2482
|
+
// Index signature parameters do not participate in union selection.
|
|
2483
|
+
return (ast as any).recur?.(toCandidate, identity) ?? ast
|
|
2484
|
+
}
|
|
2485
|
+
if (
|
|
2486
|
+
encoding.some((link) => link.transformation._tag === "Middleware" && link.transformation.decode !== identity)
|
|
2487
|
+
) return unknown
|
|
2488
|
+
ast = encoding[encoding.length - 1].to
|
|
2489
|
+
}
|
|
2490
|
+
})
|
|
2491
|
+
|
|
2425
2492
|
function getCandidateTypes(ast: AST): ReadonlyArray<Type> {
|
|
2426
2493
|
switch (ast._tag) {
|
|
2427
2494
|
case "Null":
|
|
@@ -2447,7 +2514,7 @@ function getCandidateTypes(ast: AST): ReadonlyArray<Type> {
|
|
|
2447
2514
|
case "Objects":
|
|
2448
2515
|
return ast.propertySignatures.length || ast.indexSignatures.length
|
|
2449
2516
|
? ["object"]
|
|
2450
|
-
: ["object", "array"]
|
|
2517
|
+
: ["string", "number", "boolean", "symbol", "bigint", "object", "array", "function"]
|
|
2451
2518
|
case "Enum":
|
|
2452
2519
|
return Array.from(new Set(ast.enums.map(([, v]) => typeof v)))
|
|
2453
2520
|
case "Literal":
|
|
@@ -2476,7 +2543,7 @@ export function collectSentinels(ast: AST): Array<Sentinel> {
|
|
|
2476
2543
|
default:
|
|
2477
2544
|
return []
|
|
2478
2545
|
case "Declaration": {
|
|
2479
|
-
const s = ast.annotations?.[
|
|
2546
|
+
const s = ast.annotations?.[InternalAnnotations.SENTINELS_ANNOTATION_KEY]
|
|
2480
2547
|
return Array.isArray(s) ? s : []
|
|
2481
2548
|
}
|
|
2482
2549
|
case "Objects":
|
|
@@ -2493,63 +2560,96 @@ export function collectSentinels(ast: AST): Array<Sentinel> {
|
|
|
2493
2560
|
return []
|
|
2494
2561
|
})
|
|
2495
2562
|
case "Arrays":
|
|
2496
|
-
return ast.elements.flatMap((e, i) => {
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2563
|
+
return ast.elements.flatMap((e, i): Array<Sentinel> => {
|
|
2564
|
+
if (!isOptional(e)) {
|
|
2565
|
+
if (isLiteral(e)) {
|
|
2566
|
+
return [{ key: i, literal: e.literal }]
|
|
2567
|
+
}
|
|
2568
|
+
if (isUniqueSymbol(e)) {
|
|
2569
|
+
return [{ key: i, literal: e.symbol }]
|
|
2570
|
+
}
|
|
2571
|
+
}
|
|
2572
|
+
return []
|
|
2500
2573
|
})
|
|
2501
2574
|
case "Suspend":
|
|
2502
2575
|
return collectSentinels(ast.thunk())
|
|
2503
2576
|
}
|
|
2504
2577
|
}
|
|
2505
2578
|
|
|
2506
|
-
type CandidateIndex =
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
}
|
|
2579
|
+
type CandidateIndex =
|
|
2580
|
+
| ((input: any) => ReadonlyArray<AST>)
|
|
2581
|
+
| {
|
|
2582
|
+
bySentinel?: Map<PropertyKey, Map<LiteralValue | symbol, Array<number>>>
|
|
2583
|
+
otherwise?: { [K in Type]?: Array<number> }
|
|
2584
|
+
}
|
|
2511
2585
|
|
|
2512
2586
|
const candidateIndexCache = new WeakMap<ReadonlyArray<AST>, CandidateIndex>()
|
|
2587
|
+
const emptyCandidates: ReadonlyArray<never> = Object.freeze([])
|
|
2513
2588
|
|
|
2514
2589
|
function getIndex(types: ReadonlyArray<AST>): CandidateIndex {
|
|
2515
2590
|
let idx = candidateIndexCache.get(types)
|
|
2516
2591
|
if (idx) return idx
|
|
2517
2592
|
|
|
2518
2593
|
idx = {}
|
|
2594
|
+
let literalCandidates: Map<LiteralValue | symbol, Array<AST>> | null | undefined
|
|
2519
2595
|
for (let i = 0; i < types.length; i++) {
|
|
2520
2596
|
const a = types[i]
|
|
2521
|
-
const encoded =
|
|
2597
|
+
const encoded = toCandidate(a)
|
|
2522
2598
|
if (isNever(encoded)) continue
|
|
2523
2599
|
|
|
2524
|
-
|
|
2525
|
-
|
|
2600
|
+
if (literalCandidates !== null) {
|
|
2601
|
+
if (isLiteral(encoded) || isUniqueSymbol(encoded)) {
|
|
2602
|
+
literalCandidates ??= new Map()
|
|
2603
|
+
const literal = isLiteral(encoded) ? encoded.literal : encoded.symbol
|
|
2604
|
+
let arr = literalCandidates.get(literal)
|
|
2605
|
+
if (!arr) literalCandidates.set(literal, arr = [])
|
|
2606
|
+
arr.push(a)
|
|
2607
|
+
} else {
|
|
2608
|
+
literalCandidates = null
|
|
2609
|
+
}
|
|
2610
|
+
}
|
|
2526
2611
|
|
|
2527
|
-
|
|
2528
|
-
idx.byType ??= {}
|
|
2529
|
-
for (const t of candidateTypes) (idx.byType[t] ??= []).push(i)
|
|
2612
|
+
const sentinels = collectSentinels(encoded)
|
|
2530
2613
|
|
|
2531
|
-
if (sentinels.length
|
|
2614
|
+
if (sentinels.length) { // discriminated variants
|
|
2532
2615
|
idx.bySentinel ??= new Map()
|
|
2533
2616
|
for (const { key, literal } of sentinels) {
|
|
2534
2617
|
let m = idx.bySentinel.get(key)
|
|
2535
2618
|
if (!m) idx.bySentinel.set(key, m = new Map())
|
|
2536
2619
|
let arr = m.get(literal)
|
|
2537
2620
|
if (!arr) m.set(literal, arr = [])
|
|
2538
|
-
arr.push(i)
|
|
2621
|
+
if (arr[arr.length - 1] !== i) arr.push(i)
|
|
2539
2622
|
}
|
|
2540
2623
|
} else { // non-discriminated
|
|
2541
2624
|
idx.otherwise ??= {}
|
|
2625
|
+
const candidateTypes = getCandidateTypes(encoded)
|
|
2542
2626
|
for (const t of candidateTypes) (idx.otherwise[t] ??= []).push(i)
|
|
2543
2627
|
}
|
|
2544
2628
|
}
|
|
2545
2629
|
|
|
2630
|
+
if (literalCandidates) {
|
|
2631
|
+
literalCandidates.forEach(Object.freeze)
|
|
2632
|
+
idx = (input) => literalCandidates.get(input) ?? emptyCandidates
|
|
2633
|
+
} else if (idx.bySentinel?.size === 1 && !idx.otherwise) {
|
|
2634
|
+
for (const [key, byValue] of idx.bySentinel) {
|
|
2635
|
+
const candidates = byValue as unknown as Map<LiteralValue | symbol, ReadonlyArray<AST>>
|
|
2636
|
+
for (const [literal, indexes] of byValue) {
|
|
2637
|
+
candidates.set(literal, Object.freeze(indexes.map((index) => types[index])))
|
|
2638
|
+
}
|
|
2639
|
+
idx = (input) =>
|
|
2640
|
+
Predicate.isObjectKeyword(input) && Object.hasOwn(input, key)
|
|
2641
|
+
? candidates.get((input as any)[key]) ?? emptyCandidates
|
|
2642
|
+
: emptyCandidates
|
|
2643
|
+
}
|
|
2644
|
+
}
|
|
2645
|
+
|
|
2546
2646
|
candidateIndexCache.set(types, idx)
|
|
2547
2647
|
return idx
|
|
2548
2648
|
}
|
|
2549
2649
|
|
|
2550
2650
|
function filterLiterals(input: any) {
|
|
2551
2651
|
return (ast: AST) => {
|
|
2552
|
-
const encoded =
|
|
2652
|
+
const encoded = toCandidate(ast)
|
|
2553
2653
|
return encoded._tag === "Literal" ?
|
|
2554
2654
|
encoded.literal === input
|
|
2555
2655
|
: encoded._tag === "UniqueSymbol" ?
|
|
@@ -2566,12 +2666,14 @@ function filterLiterals(input: any) {
|
|
|
2566
2666
|
*/
|
|
2567
2667
|
export function getCandidates(input: any, types: ReadonlyArray<AST>): ReadonlyArray<AST> {
|
|
2568
2668
|
const idx = getIndex(types)
|
|
2669
|
+
if (typeof idx === "function") return idx(input)
|
|
2670
|
+
|
|
2569
2671
|
const runtimeType: Type = input === null ? "null" : Array.isArray(input) ? "array" : typeof input
|
|
2570
2672
|
|
|
2571
2673
|
// 1. Try sentinel-based dispatch (most selective)
|
|
2572
2674
|
if (idx.bySentinel) {
|
|
2573
|
-
const base = idx.otherwise?.[runtimeType] ??
|
|
2574
|
-
if (
|
|
2675
|
+
const base = idx.otherwise?.[runtimeType] ?? emptyCandidates
|
|
2676
|
+
if (Predicate.isObjectKeyword(input)) {
|
|
2575
2677
|
const selected = new Set(base)
|
|
2576
2678
|
for (const [k, m] of idx.bySentinel) {
|
|
2577
2679
|
if (Object.hasOwn(input, k)) {
|
|
@@ -2581,13 +2683,13 @@ export function getCandidates(input: any, types: ReadonlyArray<AST>): ReadonlyAr
|
|
|
2581
2683
|
}
|
|
2582
2684
|
}
|
|
2583
2685
|
}
|
|
2584
|
-
return Array.from(selected).sort((a, b) => a - b).map((i) => types[i])
|
|
2686
|
+
return Array.from(selected).sort((a, b) => a - b).map((i) => types[i])
|
|
2585
2687
|
}
|
|
2586
2688
|
return base.map((i) => types[i])
|
|
2587
2689
|
}
|
|
2588
2690
|
|
|
2589
2691
|
// 2. Fallback: runtime-type dispatch only
|
|
2590
|
-
return (idx.
|
|
2692
|
+
return (idx.otherwise?.[runtimeType] ?? emptyCandidates).map((i) => types[i]).filter(filterLiterals(input))
|
|
2591
2693
|
}
|
|
2592
2694
|
|
|
2593
2695
|
/**
|
|
@@ -2605,15 +2707,14 @@ export function getCandidates(input: any, types: ReadonlyArray<AST>): ReadonlyAr
|
|
|
2605
2707
|
*
|
|
2606
2708
|
* **Example** (Inspecting a union AST)
|
|
2607
2709
|
*
|
|
2608
|
-
* ```ts
|
|
2710
|
+
* ```ts import.meta.vitest
|
|
2609
2711
|
* import { Schema, SchemaAST } from "effect"
|
|
2610
2712
|
*
|
|
2611
2713
|
* const schema = Schema.Union([Schema.String, Schema.Number])
|
|
2612
2714
|
* const ast = schema.ast
|
|
2613
2715
|
*
|
|
2614
2716
|
* if (SchemaAST.isUnion(ast)) {
|
|
2615
|
-
*
|
|
2616
|
-
* console.log(ast.mode) // "anyOf"
|
|
2717
|
+
* [ast.types.length, ast.mode] // => [2, "anyOf"]
|
|
2617
2718
|
* }
|
|
2618
2719
|
* ```
|
|
2619
2720
|
*
|
|
@@ -2646,34 +2747,38 @@ export class Union<A extends AST = AST> extends Base {
|
|
|
2646
2747
|
// oxlint-disable-next-line @typescript-eslint/no-this-alias
|
|
2647
2748
|
const ast = this
|
|
2648
2749
|
|
|
2649
|
-
return (
|
|
2650
|
-
if (
|
|
2651
|
-
return
|
|
2750
|
+
return (input, options) => {
|
|
2751
|
+
if (input === InternalParser.missing) {
|
|
2752
|
+
return InternalParser.missingExit
|
|
2652
2753
|
}
|
|
2653
|
-
const input = oinput.value
|
|
2654
2754
|
const candidates = getCandidates(input, ast.types)
|
|
2655
2755
|
|
|
2756
|
+
if (candidates.length === 1) {
|
|
2757
|
+
const result = recur(candidates[0])(input, options)
|
|
2758
|
+
if ((result as Exit.Exit<unknown, SchemaIssue.Issue>)._tag === "Success") return result
|
|
2759
|
+
return effectIsExit(result)
|
|
2760
|
+
? failSingleUnionCandidate(ast, (result as Exit.Failure<unknown, SchemaIssue.Issue>).cause)
|
|
2761
|
+
: Effect.catchCause(result, (cause) => failSingleUnionCandidate(ast, cause))
|
|
2762
|
+
}
|
|
2763
|
+
|
|
2656
2764
|
const state = {
|
|
2657
2765
|
ast,
|
|
2658
2766
|
recur,
|
|
2659
|
-
oinput,
|
|
2660
2767
|
input,
|
|
2661
2768
|
out: undefined,
|
|
2662
|
-
successes: [],
|
|
2769
|
+
successes: ast.mode === "oneOf" ? [] : undefined,
|
|
2663
2770
|
issues: undefined as Arr.NonEmptyArray<SchemaIssue.Issue> | undefined,
|
|
2664
2771
|
options
|
|
2665
2772
|
}
|
|
2666
2773
|
const concurrency = resolveConcurrency(options?.concurrency)
|
|
2667
2774
|
const eff = parseUnion(state, candidates, concurrency ? { ...concurrency, orderedStep: true } : undefined)
|
|
2668
2775
|
if (!eff) {
|
|
2669
|
-
return state.out
|
|
2670
|
-
? Effect.succeed(state.out)
|
|
2671
|
-
: Effect.fail(new SchemaIssue.AnyOf(ast, input, state.issues ?? []))
|
|
2776
|
+
return state.out ?? Effect.fail(new SchemaIssue.AnyOf(ast, state.issues ?? []))
|
|
2672
2777
|
}
|
|
2673
|
-
return Effect.
|
|
2674
|
-
return state.out
|
|
2675
|
-
? Effect.succeed(
|
|
2676
|
-
: Effect.fail(new SchemaIssue.AnyOf(ast,
|
|
2778
|
+
return Effect.flatMapEager(eff, (_) => {
|
|
2779
|
+
return state.out === InternalParser.sameExit
|
|
2780
|
+
? Effect.succeed(input)
|
|
2781
|
+
: state.out ?? Effect.fail(new SchemaIssue.AnyOf(ast, state.issues ?? []))
|
|
2677
2782
|
})
|
|
2678
2783
|
}
|
|
2679
2784
|
}
|
|
@@ -2738,19 +2843,28 @@ export class Union<A extends AST = AST> extends Base {
|
|
|
2738
2843
|
}
|
|
2739
2844
|
}
|
|
2740
2845
|
|
|
2846
|
+
function failSingleUnionCandidate(
|
|
2847
|
+
ast: Union,
|
|
2848
|
+
cause: Cause.Cause<SchemaIssue.Issue>
|
|
2849
|
+
) {
|
|
2850
|
+
const issue = InternalSchemaCause.getSchemaIssue(cause)
|
|
2851
|
+
return issue
|
|
2852
|
+
? Exit.fail(new SchemaIssue.AnyOf(ast, [issue]))
|
|
2853
|
+
: Exit.failCause(cause)
|
|
2854
|
+
}
|
|
2855
|
+
|
|
2741
2856
|
const parseUnion = iterateEager<{
|
|
2742
2857
|
readonly recur: (ast: AST) => SchemaParser.Parser
|
|
2743
2858
|
readonly ast: Union
|
|
2744
|
-
readonly oinput: Option.Option<unknown>
|
|
2745
2859
|
readonly input: unknown
|
|
2746
2860
|
readonly options: ParseOptions
|
|
2747
|
-
out:
|
|
2748
|
-
successes: Array<AST>
|
|
2861
|
+
out: Exit.Success<unknown, SchemaIssue.Issue> | undefined
|
|
2862
|
+
readonly successes: Array<AST> | undefined
|
|
2749
2863
|
issues: Array<SchemaIssue.Issue> | undefined
|
|
2750
2864
|
}, AST>()({
|
|
2751
2865
|
onItem(s, ast) {
|
|
2752
2866
|
const parser = s.recur(ast)
|
|
2753
|
-
return parser(s.
|
|
2867
|
+
return parser(s.input, s.options)
|
|
2754
2868
|
},
|
|
2755
2869
|
step(s, candidate, exit) {
|
|
2756
2870
|
if (exit._tag === "Failure") {
|
|
@@ -2761,13 +2875,14 @@ const parseUnion = iterateEager<{
|
|
|
2761
2875
|
if (s.issues) s.issues.push(issue)
|
|
2762
2876
|
else s.issues = [issue]
|
|
2763
2877
|
} else {
|
|
2764
|
-
if (s.out && s.
|
|
2878
|
+
if (s.out && s.successes) {
|
|
2765
2879
|
s.successes.push(candidate)
|
|
2766
|
-
return Exit.fail(new SchemaIssue.OneOf(s.ast, s.
|
|
2880
|
+
return Exit.fail(new SchemaIssue.OneOf(s.ast, s.successes))
|
|
2767
2881
|
}
|
|
2768
|
-
s.out = exit
|
|
2769
|
-
s.successes
|
|
2770
|
-
|
|
2882
|
+
s.out = exit
|
|
2883
|
+
if (s.successes) {
|
|
2884
|
+
s.successes.push(candidate)
|
|
2885
|
+
} else {
|
|
2771
2886
|
return Exit.void
|
|
2772
2887
|
}
|
|
2773
2888
|
}
|
|
@@ -2780,14 +2895,6 @@ const nonFiniteLiterals = new Union([
|
|
|
2780
2895
|
new Literal("NaN")
|
|
2781
2896
|
], "anyOf")
|
|
2782
2897
|
|
|
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
2898
|
function formatIsMutable(isMutable: boolean | undefined): string {
|
|
2792
2899
|
return isMutable ? "" : "readonly "
|
|
2793
2900
|
}
|
|
@@ -2821,7 +2928,7 @@ export function memoizeThunk<A>(f: () => A): () => A {
|
|
|
2821
2928
|
*
|
|
2822
2929
|
* **Example** (Defining recursive schema ASTs)
|
|
2823
2930
|
*
|
|
2824
|
-
* ```ts
|
|
2931
|
+
* ```ts import.meta.vitest
|
|
2825
2932
|
* import { Schema, SchemaAST } from "effect"
|
|
2826
2933
|
*
|
|
2827
2934
|
* interface Category {
|
|
@@ -2834,7 +2941,7 @@ export function memoizeThunk<A>(f: () => A): () => A {
|
|
|
2834
2941
|
* children: Schema.Array(Schema.suspend((): Schema.Codec<Category> => Category))
|
|
2835
2942
|
* })
|
|
2836
2943
|
*
|
|
2837
|
-
* //
|
|
2944
|
+
* SchemaAST.isObjects(Category.ast) // => true
|
|
2838
2945
|
* ```
|
|
2839
2946
|
*
|
|
2840
2947
|
* @see {@link isSuspend}
|
|
@@ -2852,7 +2959,7 @@ export class Suspend extends Base {
|
|
|
2852
2959
|
encoding?: Encoding,
|
|
2853
2960
|
context?: Context
|
|
2854
2961
|
) {
|
|
2855
|
-
if (checks
|
|
2962
|
+
if (checks) {
|
|
2856
2963
|
throw new Error("Cannot add checks to Suspend")
|
|
2857
2964
|
}
|
|
2858
2965
|
super(annotations, undefined, encoding, context)
|
|
@@ -2860,7 +2967,8 @@ export class Suspend extends Base {
|
|
|
2860
2967
|
}
|
|
2861
2968
|
/** @internal */
|
|
2862
2969
|
getParser(recur: (ast: AST) => SchemaParser.Parser): SchemaParser.Parser {
|
|
2863
|
-
|
|
2970
|
+
let parser: SchemaParser.Parser
|
|
2971
|
+
return (input, options) => (parser ??= recur(this.thunk()))(input, options)
|
|
2864
2972
|
}
|
|
2865
2973
|
/** @internal */
|
|
2866
2974
|
recur(recur: (ast: AST) => AST) {
|
|
@@ -2889,8 +2997,8 @@ export class Suspend extends Base {
|
|
|
2889
2997
|
*
|
|
2890
2998
|
* - `run` — the validation function. Returns `undefined` on success, or an
|
|
2891
2999
|
* `Issue` on failure.
|
|
2892
|
-
* - `annotations` — optional filter-level
|
|
2893
|
-
*
|
|
3000
|
+
* - `annotations` — optional filter-level annotations (expected message,
|
|
3001
|
+
* representation, arbitrary constraint hints).
|
|
2894
3002
|
* - `aborted` — when `true`, parsing stops immediately after this filter
|
|
2895
3003
|
* fails (no further checks run).
|
|
2896
3004
|
*
|
|
@@ -2995,7 +3103,7 @@ export function makeFilter<T>(
|
|
|
2995
3103
|
aborted: boolean = false
|
|
2996
3104
|
): Filter<T> {
|
|
2997
3105
|
return new Filter(
|
|
2998
|
-
(input, ast, options) => SchemaIssue.
|
|
3106
|
+
(input, ast, options) => SchemaIssue.normalizeFilterOutput(ast, filter(input, ast, options)),
|
|
2999
3107
|
annotations,
|
|
3000
3108
|
aborted
|
|
3001
3109
|
)
|
|
@@ -3007,12 +3115,38 @@ export function makeFilterByGuard<T extends E, E>(
|
|
|
3007
3115
|
annotations?: Schema.Annotations.Filter
|
|
3008
3116
|
): Filter<any> {
|
|
3009
3117
|
return new Filter(
|
|
3010
|
-
(input: E) => is(input) ? undefined : new SchemaIssue.InvalidValue(
|
|
3118
|
+
(input: E) => is(input) ? undefined : new SchemaIssue.InvalidValue(),
|
|
3011
3119
|
annotations,
|
|
3012
3120
|
true // after a guard, we always want to abort
|
|
3013
3121
|
)
|
|
3014
3122
|
}
|
|
3015
3123
|
|
|
3124
|
+
/** @internal */
|
|
3125
|
+
export function isFinite(annotations?: Schema.Annotations.Filter) {
|
|
3126
|
+
return makeFilter(
|
|
3127
|
+
(n: number) => globalThis.Number.isFinite(n),
|
|
3128
|
+
{
|
|
3129
|
+
expected: "a finite number",
|
|
3130
|
+
representation: {
|
|
3131
|
+
id: "effect/schema/isFinite",
|
|
3132
|
+
payload: null
|
|
3133
|
+
},
|
|
3134
|
+
toJsonSchema: () => ({ type: "number" }),
|
|
3135
|
+
toCode: () => ({ runtime: "Schema.isFinite()" }),
|
|
3136
|
+
arbitrary: {
|
|
3137
|
+
constraint: {
|
|
3138
|
+
noInfinity: true,
|
|
3139
|
+
noNaN: true
|
|
3140
|
+
}
|
|
3141
|
+
},
|
|
3142
|
+
...annotations
|
|
3143
|
+
}
|
|
3144
|
+
)
|
|
3145
|
+
}
|
|
3146
|
+
|
|
3147
|
+
/** @internal */
|
|
3148
|
+
export const finite = appendChecks(number, [isFinite()])
|
|
3149
|
+
|
|
3016
3150
|
/**
|
|
3017
3151
|
* Creates a {@link Filter} that validates strings by running `RegExp.test`.
|
|
3018
3152
|
*
|
|
@@ -3024,21 +3158,25 @@ export function makeFilterByGuard<T extends E, E>(
|
|
|
3024
3158
|
* **Details**
|
|
3025
3159
|
*
|
|
3026
3160
|
* The filter can be used with `Schema.filter` or attached directly to a
|
|
3027
|
-
* `String` AST node through checks. The regular expression
|
|
3028
|
-
*
|
|
3161
|
+
* `String` AST node through checks. The regular expression is cloned and its
|
|
3162
|
+
* `lastIndex` is reset before each test, so global and sticky expressions are
|
|
3163
|
+
* deterministic and the provided regular expression is not mutated. The
|
|
3164
|
+
* regular expression source is stored in annotations for serialization and
|
|
3165
|
+
* arbitrary generation.
|
|
3029
3166
|
*
|
|
3030
3167
|
* **Gotchas**
|
|
3031
3168
|
*
|
|
3032
|
-
*
|
|
3033
|
-
*
|
|
3034
|
-
* `y` flag.
|
|
3169
|
+
* When deriving an arbitrary, only `regExp.source` is used. Regular expression
|
|
3170
|
+
* flags are ignored because fast-check does not support them.
|
|
3035
3171
|
*
|
|
3036
3172
|
* **Example** (Validating an email pattern)
|
|
3037
3173
|
*
|
|
3038
|
-
* ```ts
|
|
3174
|
+
* ```ts import.meta.vitest
|
|
3039
3175
|
* import { SchemaAST } from "effect"
|
|
3040
3176
|
*
|
|
3041
3177
|
* const emailFilter = SchemaAST.isPattern(/^[^@]+@[^@]+$/)
|
|
3178
|
+
* emailFilter.run("alice@example.com", SchemaAST.string, {}) // => undefined
|
|
3179
|
+
* emailFilter.run("invalid", SchemaAST.string, {})?._tag // => "InvalidValue"
|
|
3042
3180
|
* ```
|
|
3043
3181
|
*
|
|
3044
3182
|
* @see {@link Filter}
|
|
@@ -3047,14 +3185,19 @@ export function makeFilterByGuard<T extends E, E>(
|
|
|
3047
3185
|
*/
|
|
3048
3186
|
export function isPattern(regExp: globalThis.RegExp, annotations?: Schema.Annotations.Filter) {
|
|
3049
3187
|
const source = regExp.source
|
|
3188
|
+
const pattern = new globalThis.RegExp(source, regExp.flags)
|
|
3050
3189
|
return makeFilter(
|
|
3051
|
-
(s: string) =>
|
|
3190
|
+
(s: string) => {
|
|
3191
|
+
pattern.lastIndex = 0
|
|
3192
|
+
return pattern.test(s)
|
|
3193
|
+
},
|
|
3052
3194
|
{
|
|
3053
3195
|
expected: `a string matching the RegExp ${source}`,
|
|
3054
|
-
|
|
3055
|
-
|
|
3056
|
-
regExp
|
|
3196
|
+
representation: {
|
|
3197
|
+
id: "effect/schema/isPattern",
|
|
3198
|
+
payload: { source, flags: regExp.flags }
|
|
3057
3199
|
},
|
|
3200
|
+
toJsonSchema: () => ({ pattern: source }),
|
|
3058
3201
|
arbitrary: {
|
|
3059
3202
|
constraint: {
|
|
3060
3203
|
patterns: [regExp.source]
|
|
@@ -3114,7 +3257,7 @@ export function annotate<A extends AST>(ast: A, annotations: Schema.Annotations.
|
|
|
3114
3257
|
|
|
3115
3258
|
/** @internal */
|
|
3116
3259
|
export function replaceChecks<A extends AST>(ast: A, checks: Checks | undefined): A {
|
|
3117
|
-
if (ast._tag === "Suspend" && checks
|
|
3260
|
+
if (ast._tag === "Suspend" && checks) {
|
|
3118
3261
|
throw new Error("Cannot add checks to Suspend")
|
|
3119
3262
|
}
|
|
3120
3263
|
if (ast.checks === checks) {
|
|
@@ -3130,14 +3273,17 @@ export function appendChecks<A extends AST>(ast: A, checks: Checks | undefined):
|
|
|
3130
3273
|
return replaceChecks(ast, combineChecks(ast.checks, checks))
|
|
3131
3274
|
}
|
|
3132
3275
|
|
|
3276
|
+
/** @internal */
|
|
3277
|
+
export function mapLink(link: Link, f: (ast: AST) => AST): Link {
|
|
3278
|
+
const to = f(link.to)
|
|
3279
|
+
return to === link.to ? link : new Link(to, link.transformation)
|
|
3280
|
+
}
|
|
3281
|
+
|
|
3133
3282
|
function updateLastLink(encoding: Encoding, f: (ast: AST) => AST): Encoding {
|
|
3134
3283
|
const links = encoding
|
|
3135
3284
|
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
|
|
3285
|
+
const out = mapLink(last, f)
|
|
3286
|
+
return out === last ? encoding : Arr.append(encoding.slice(0, encoding.length - 1), out)
|
|
3141
3287
|
}
|
|
3142
3288
|
|
|
3143
3289
|
/** @internal */
|
|
@@ -3145,6 +3291,11 @@ export function applyToLastLink(f: (ast: AST) => AST) {
|
|
|
3145
3291
|
return <A extends AST>(ast: A): A => ast.encoding ? replaceEncoding(ast, updateLastLink(ast.encoding, f)) : ast
|
|
3146
3292
|
}
|
|
3147
3293
|
|
|
3294
|
+
/** @internal */
|
|
3295
|
+
export function replaceContextLastLink<A extends AST>(ast: A, context: Context): A {
|
|
3296
|
+
return applyToLastLink((ast) => replaceContext(ast, context))(ast)
|
|
3297
|
+
}
|
|
3298
|
+
|
|
3148
3299
|
/** @internal */
|
|
3149
3300
|
export function applyToSelfOrLastLinkEncoding(f: (ast: AST) => AST) {
|
|
3150
3301
|
function out(ast: AST): AST {
|
|
@@ -3220,8 +3371,7 @@ export function annotateKey<A extends AST>(ast: A, annotations: Schema.Annotatio
|
|
|
3220
3371
|
return replaceContext(ast, context)
|
|
3221
3372
|
}
|
|
3222
3373
|
|
|
3223
|
-
|
|
3224
|
-
export const optionalKeyLastLink = applyToLastLink(optionalKey)
|
|
3374
|
+
const optionalKeyLastLink = applyToLastLink(optionalKey)
|
|
3225
3375
|
|
|
3226
3376
|
/**
|
|
3227
3377
|
* Marks an AST node's property key as optional by setting
|
|
@@ -3332,11 +3482,11 @@ function parseParameter(ast: AST): {
|
|
|
3332
3482
|
}
|
|
3333
3483
|
|
|
3334
3484
|
/** @internal */
|
|
3335
|
-
export function record(key: AST, value: AST
|
|
3485
|
+
export function record(key: AST, value: AST): Objects {
|
|
3336
3486
|
const { literals, parameters: indexSignatures } = parseParameter(key)
|
|
3337
3487
|
return new Objects(
|
|
3338
3488
|
literals.map((literal) => new PropertySignature(literal, value)),
|
|
3339
|
-
indexSignatures.map((parameter) => new IndexSignature(parameter, value
|
|
3489
|
+
indexSignatures.map((parameter) => new IndexSignature(parameter, value))
|
|
3340
3490
|
)
|
|
3341
3491
|
}
|
|
3342
3492
|
|
|
@@ -3366,6 +3516,20 @@ export function isMutable(ast: AST): boolean {
|
|
|
3366
3516
|
return ast.context?.isMutable ?? false
|
|
3367
3517
|
}
|
|
3368
3518
|
|
|
3519
|
+
function isStructuralCheck(check: Check<any>): boolean {
|
|
3520
|
+
return check.annotations?.[InternalAnnotations.STRUCTURAL_ANNOTATION_KEY] === true ||
|
|
3521
|
+
check._tag === "FilterGroup" && check.checks.every(isStructuralCheck)
|
|
3522
|
+
}
|
|
3523
|
+
|
|
3524
|
+
function extractStructuralChecks(checks: Checks): Checks | undefined {
|
|
3525
|
+
function extract(check: Check<any>): Array<Check<any>> {
|
|
3526
|
+
if (isStructuralCheck(check)) return [check]
|
|
3527
|
+
return check._tag === "FilterGroup" ? check.checks.flatMap(extract) : []
|
|
3528
|
+
}
|
|
3529
|
+
const out = checks.flatMap(extract)
|
|
3530
|
+
return Arr.isArrayNonEmpty(out) ? out : undefined
|
|
3531
|
+
}
|
|
3532
|
+
|
|
3369
3533
|
/**
|
|
3370
3534
|
* Strips all encoding transformations from an AST, returning the decoded
|
|
3371
3535
|
* (type-level) representation.
|
|
@@ -3378,12 +3542,12 @@ export function isMutable(ast: AST): boolean {
|
|
|
3378
3542
|
*
|
|
3379
3543
|
* **Example** (Getting the type AST)
|
|
3380
3544
|
*
|
|
3381
|
-
* ```ts
|
|
3545
|
+
* ```ts import.meta.vitest
|
|
3382
3546
|
* import { Schema, SchemaAST } from "effect"
|
|
3383
3547
|
*
|
|
3384
3548
|
* const schema = Schema.NumberFromString
|
|
3385
3549
|
* const typeAst = SchemaAST.toType(schema.ast)
|
|
3386
|
-
*
|
|
3550
|
+
* typeAst._tag // => "Number"
|
|
3387
3551
|
* ```
|
|
3388
3552
|
*
|
|
3389
3553
|
* @see {@link toEncoded}
|
|
@@ -3397,13 +3561,16 @@ export const toType = memoize(<A extends AST>(ast: A): A => {
|
|
|
3397
3561
|
}
|
|
3398
3562
|
const out: any = ast
|
|
3399
3563
|
const type = out.recur?.(toType) ?? out
|
|
3400
|
-
const encodingChecks = type.encodingChecks
|
|
3564
|
+
const encodingChecks: Checks | undefined = type.encodingChecks
|
|
3401
3565
|
if (encodingChecks) {
|
|
3566
|
+
const checks = type === ast
|
|
3567
|
+
? encodingChecks
|
|
3568
|
+
: isArrays(type) || isObjects(type) || isDeclaration(type) && type.typeParameters.length > 0
|
|
3569
|
+
? extractStructuralChecks(encodingChecks)
|
|
3570
|
+
: undefined
|
|
3402
3571
|
return modifyOwnPropertyDescriptors(type, (d) => {
|
|
3403
3572
|
d.encodingChecks.value = undefined
|
|
3404
|
-
|
|
3405
|
-
d.checks.value = combineChecks(type.checks, encodingChecks)
|
|
3406
|
-
}
|
|
3573
|
+
d.checks.value = combineChecks(type.checks, checks)
|
|
3407
3574
|
})
|
|
3408
3575
|
}
|
|
3409
3576
|
return type
|
|
@@ -3422,12 +3589,12 @@ export const toType = memoize(<A extends AST>(ast: A): A => {
|
|
|
3422
3589
|
*
|
|
3423
3590
|
* **Example** (Getting the encoded AST)
|
|
3424
3591
|
*
|
|
3425
|
-
* ```ts
|
|
3592
|
+
* ```ts import.meta.vitest
|
|
3426
3593
|
* import { Schema, SchemaAST } from "effect"
|
|
3427
3594
|
*
|
|
3428
3595
|
* const schema = Schema.NumberFromString
|
|
3429
3596
|
* const encodedAst = SchemaAST.toEncoded(schema.ast)
|
|
3430
|
-
*
|
|
3597
|
+
* encodedAst._tag // => "String"
|
|
3431
3598
|
* ```
|
|
3432
3599
|
*
|
|
3433
3600
|
* @see {@link toType}
|
|
@@ -3498,54 +3665,50 @@ function fromConst<const T>(
|
|
|
3498
3665
|
ast: AST,
|
|
3499
3666
|
value: T
|
|
3500
3667
|
): SchemaParser.Parser {
|
|
3501
|
-
const succeed =
|
|
3502
|
-
return (
|
|
3503
|
-
if (
|
|
3504
|
-
|
|
3505
|
-
}
|
|
3506
|
-
return oinput.value === value
|
|
3668
|
+
const succeed = InternalParser.succeed(value)
|
|
3669
|
+
return (input) => {
|
|
3670
|
+
if (input === InternalParser.missing) return InternalParser.missingExit
|
|
3671
|
+
return input === value
|
|
3507
3672
|
? succeed
|
|
3508
|
-
: Effect.fail(
|
|
3673
|
+
: Effect.fail(
|
|
3674
|
+
new SchemaIssue.InvalidType(ast)
|
|
3675
|
+
)
|
|
3509
3676
|
}
|
|
3510
3677
|
}
|
|
3511
3678
|
|
|
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
3679
|
function fromRefinement<T>(
|
|
3518
3680
|
ast: AST,
|
|
3519
3681
|
refinement: (input: unknown) => input is T
|
|
3520
3682
|
): SchemaParser.Parser {
|
|
3521
|
-
return (
|
|
3522
|
-
if (
|
|
3523
|
-
|
|
3524
|
-
|
|
3525
|
-
|
|
3526
|
-
|
|
3527
|
-
|
|
3683
|
+
return (input) => {
|
|
3684
|
+
if (input === InternalParser.missing) return InternalParser.missingExit
|
|
3685
|
+
return refinement(input)
|
|
3686
|
+
? InternalParser.sameExit
|
|
3687
|
+
: Effect.fail(
|
|
3688
|
+
new SchemaIssue.InvalidType(ast)
|
|
3689
|
+
)
|
|
3528
3690
|
}
|
|
3529
3691
|
}
|
|
3530
3692
|
|
|
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
3693
|
function segmentTemplateLiteralParts(
|
|
3539
|
-
|
|
3694
|
+
ast: TemplateLiteral,
|
|
3540
3695
|
input: string,
|
|
3541
3696
|
options: ParseOptions
|
|
3542
3697
|
): Array<string> | undefined {
|
|
3698
|
+
const parts = ast.encodedParts
|
|
3699
|
+
const literals = ast.literals
|
|
3700
|
+
const inputLength = input.length
|
|
3701
|
+
for (let i = 0; i < literals.length; i++) {
|
|
3702
|
+
const literal = literals[i]
|
|
3703
|
+
if (literal && !input.includes(literal)) return undefined
|
|
3704
|
+
}
|
|
3705
|
+
if (ast.suffixLengths[0] > inputLength) return undefined
|
|
3706
|
+
|
|
3543
3707
|
const out = new Array<string>(parts.length)
|
|
3544
|
-
|
|
3708
|
+
let failures: Set<number> | undefined
|
|
3545
3709
|
function go(i: number, pos: number): boolean {
|
|
3546
|
-
if (i === parts.length) return pos ===
|
|
3547
|
-
|
|
3548
|
-
if (failures.has(key)) return false
|
|
3710
|
+
if (i === parts.length) return pos === inputLength
|
|
3711
|
+
if (failures?.has(i * (inputLength + 1) + pos)) return false
|
|
3549
3712
|
const part = parts[i]
|
|
3550
3713
|
if (i === parts.length - 1) {
|
|
3551
3714
|
const s = input.slice(pos)
|
|
@@ -3554,21 +3717,28 @@ function segmentTemplateLiteralParts(
|
|
|
3554
3717
|
return true
|
|
3555
3718
|
}
|
|
3556
3719
|
} else if (part._tag === "Literal") {
|
|
3557
|
-
const s =
|
|
3720
|
+
const s = literals[i]!
|
|
3558
3721
|
if (input.startsWith(s, pos) && go(i + 1, pos + s.length)) {
|
|
3559
3722
|
out[i] = s
|
|
3560
3723
|
return true
|
|
3561
3724
|
}
|
|
3562
3725
|
} else {
|
|
3563
|
-
|
|
3726
|
+
const maximumEnd = inputLength - ast.suffixLengths[i + 1]
|
|
3727
|
+
// Splits preceding a literal only need to consider occurrences of that literal.
|
|
3728
|
+
const anchor = literals[i + 1]
|
|
3729
|
+
let end = anchor === undefined ? maximumEnd : input.lastIndexOf(anchor, maximumEnd)
|
|
3730
|
+
while (end >= pos) {
|
|
3564
3731
|
const s = input.slice(pos, end)
|
|
3565
3732
|
if (part.matchPart(s, options) !== undefined && go(i + 1, end)) {
|
|
3566
3733
|
out[i] = s
|
|
3567
3734
|
return true
|
|
3568
3735
|
}
|
|
3736
|
+
if (end === 0) break
|
|
3737
|
+
end = anchor === undefined ? end - 1 : input.lastIndexOf(anchor, end - 1)
|
|
3569
3738
|
}
|
|
3570
3739
|
}
|
|
3571
|
-
failures
|
|
3740
|
+
failures ??= new Set()
|
|
3741
|
+
failures.add(i * (inputLength + 1) + pos)
|
|
3572
3742
|
return false
|
|
3573
3743
|
}
|
|
3574
3744
|
return go(0, 0) ? out : undefined
|
|
@@ -3627,7 +3797,7 @@ export const STRING_PATTERN = "[\\s\\S]*?"
|
|
|
3627
3797
|
|
|
3628
3798
|
const isStringFiniteRegExp = new globalThis.RegExp(`^${FINITE_PATTERN}$`)
|
|
3629
3799
|
|
|
3630
|
-
const isStringNumberRegExp = new globalThis.RegExp(
|
|
3800
|
+
const isStringNumberRegExp = new globalThis.RegExp(`^(?:${FINITE_PATTERN}|Infinity|-Infinity|NaN)$`)
|
|
3631
3801
|
|
|
3632
3802
|
/** @internal */
|
|
3633
3803
|
export function isStringFinite(annotations?: Schema.Annotations.Filter) {
|
|
@@ -3635,10 +3805,11 @@ export function isStringFinite(annotations?: Schema.Annotations.Filter) {
|
|
|
3635
3805
|
isStringFiniteRegExp,
|
|
3636
3806
|
{
|
|
3637
3807
|
expected: "a string representing a finite number",
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
|
|
3808
|
+
representation: {
|
|
3809
|
+
id: "effect/schema/isStringFinite",
|
|
3810
|
+
payload: null
|
|
3641
3811
|
},
|
|
3812
|
+
toJsonSchema: () => ({ pattern: isStringFiniteRegExp.source }),
|
|
3642
3813
|
...annotations
|
|
3643
3814
|
}
|
|
3644
3815
|
)
|
|
@@ -3669,10 +3840,11 @@ export function isStringBigInt(annotations?: Schema.Annotations.Filter) {
|
|
|
3669
3840
|
isStringBigIntRegExp,
|
|
3670
3841
|
{
|
|
3671
3842
|
expected: "a string representing a bigint",
|
|
3672
|
-
|
|
3673
|
-
|
|
3674
|
-
|
|
3843
|
+
representation: {
|
|
3844
|
+
id: "effect/schema/isStringBigInt",
|
|
3845
|
+
payload: null
|
|
3675
3846
|
},
|
|
3847
|
+
toJsonSchema: () => ({ pattern: isStringBigIntRegExp.source }),
|
|
3676
3848
|
...annotations
|
|
3677
3849
|
}
|
|
3678
3850
|
)
|
|
@@ -3708,7 +3880,7 @@ const symbolToString = new Link(
|
|
|
3708
3880
|
return Effect.succeed(globalThis.String(sym))
|
|
3709
3881
|
}
|
|
3710
3882
|
return Effect.fail(
|
|
3711
|
-
new SchemaIssue.Forbidden(
|
|
3883
|
+
new SchemaIssue.Forbidden({ message: "cannot serialize to string, Symbol is not registered" })
|
|
3712
3884
|
)
|
|
3713
3885
|
})
|
|
3714
3886
|
)
|
|
@@ -3720,10 +3892,11 @@ export function isStringSymbol(annotations?: Schema.Annotations.Filter) {
|
|
|
3720
3892
|
isStringSymbolRegExp,
|
|
3721
3893
|
{
|
|
3722
3894
|
expected: "a string representing a symbol",
|
|
3723
|
-
|
|
3724
|
-
|
|
3725
|
-
|
|
3895
|
+
representation: {
|
|
3896
|
+
id: "effect/schema/isStringSymbol",
|
|
3897
|
+
payload: null
|
|
3726
3898
|
},
|
|
3899
|
+
toJsonSchema: () => ({ pattern: isStringSymbolRegExp.source }),
|
|
3727
3900
|
...annotations
|
|
3728
3901
|
}
|
|
3729
3902
|
)
|
|
@@ -3733,24 +3906,33 @@ export function isStringSymbol(annotations?: Schema.Annotations.Filter) {
|
|
|
3733
3906
|
export function collectIssues<T>(
|
|
3734
3907
|
checks: ReadonlyArray<Check<T>>,
|
|
3735
3908
|
value: T,
|
|
3736
|
-
issues:
|
|
3909
|
+
issues: Arr.NonEmptyArray<SchemaIssue.Issue> | undefined,
|
|
3737
3910
|
ast: AST,
|
|
3738
3911
|
options: ParseOptions
|
|
3739
|
-
) {
|
|
3912
|
+
): Arr.NonEmptyArray<SchemaIssue.Issue> | undefined {
|
|
3740
3913
|
for (let i = 0; i < checks.length; i++) {
|
|
3741
3914
|
const check = checks[i]
|
|
3742
3915
|
if (check._tag === "FilterGroup") {
|
|
3743
|
-
collectIssues(check.checks, value, issues, ast, options)
|
|
3916
|
+
issues = collectIssues(check.checks, value, issues, ast, options)
|
|
3917
|
+
if (
|
|
3918
|
+
issues &&
|
|
3919
|
+
(options.errors !== "all" || (issues[issues.length - 1] as SchemaIssue.Filter).filter.aborted)
|
|
3920
|
+
) {
|
|
3921
|
+
return issues
|
|
3922
|
+
}
|
|
3744
3923
|
} else {
|
|
3745
3924
|
const issue = check.run(value, ast, options)
|
|
3746
3925
|
if (issue) {
|
|
3747
|
-
|
|
3748
|
-
if (
|
|
3749
|
-
|
|
3926
|
+
const filter = new SchemaIssue.Filter(check, issue)
|
|
3927
|
+
if (issues) issues.push(filter)
|
|
3928
|
+
else issues = [filter]
|
|
3929
|
+
if (options.errors !== "all" || check.aborted) {
|
|
3930
|
+
return issues
|
|
3750
3931
|
}
|
|
3751
3932
|
}
|
|
3752
3933
|
}
|
|
3753
3934
|
}
|
|
3935
|
+
return issues
|
|
3754
3936
|
}
|
|
3755
3937
|
|
|
3756
3938
|
/** @internal */
|
|
@@ -3758,10 +3940,9 @@ export function runChecks<T>(
|
|
|
3758
3940
|
checks: readonly [Check<T>, ...Array<Check<T>>],
|
|
3759
3941
|
s: T
|
|
3760
3942
|
): Result.Result<T, SchemaIssue.Issue> {
|
|
3761
|
-
const issues:
|
|
3762
|
-
|
|
3763
|
-
|
|
3764
|
-
const issue = new SchemaIssue.Composite(unknown, Option.some(s), issues)
|
|
3943
|
+
const issues = collectIssues(checks, s, undefined, unknown, { errors: "all" })
|
|
3944
|
+
if (issues) {
|
|
3945
|
+
const issue = new SchemaIssue.Composite(unknown, issues)
|
|
3765
3946
|
return Result.fail(issue)
|
|
3766
3947
|
}
|
|
3767
3948
|
return Result.succeed(s)
|
|
@@ -3770,9 +3951,6 @@ export function runChecks<T>(
|
|
|
3770
3951
|
/** @internal */
|
|
3771
3952
|
export const ClassTypeId = "~effect/Schema/Class"
|
|
3772
3953
|
|
|
3773
|
-
/** @internal */
|
|
3774
|
-
export const STRUCTURAL_ANNOTATION_KEY = "~structural"
|
|
3775
|
-
|
|
3776
3954
|
/**
|
|
3777
3955
|
* Returns all annotations from the AST node.
|
|
3778
3956
|
*
|
|
@@ -3784,12 +3962,12 @@ export const STRUCTURAL_ANNOTATION_KEY = "~structural"
|
|
|
3784
3962
|
*
|
|
3785
3963
|
* **Example** (Reading annotations)
|
|
3786
3964
|
*
|
|
3787
|
-
* ```ts
|
|
3965
|
+
* ```ts import.meta.vitest
|
|
3788
3966
|
* import { Schema, SchemaAST } from "effect"
|
|
3789
3967
|
*
|
|
3790
3968
|
* const schema = Schema.String.annotate({ title: "Name" })
|
|
3791
3969
|
* const annotations = SchemaAST.resolve(schema.ast)
|
|
3792
|
-
*
|
|
3970
|
+
* annotations?.title // => "Name"
|
|
3793
3971
|
* ```
|
|
3794
3972
|
*
|
|
3795
3973
|
* @see {@link resolveAt}
|
|
@@ -3854,6 +4032,82 @@ export const resolveTitle: (ast: AST) => string | undefined = InternalAnnotation
|
|
|
3854
4032
|
*/
|
|
3855
4033
|
export const resolveDescription: (ast: AST) => string | undefined = InternalAnnotations.resolveDescription
|
|
3856
4034
|
|
|
4035
|
+
type TreeFrame = {
|
|
4036
|
+
readonly value: object
|
|
4037
|
+
// Object keys or an array length snapshot.
|
|
4038
|
+
readonly keys: ReadonlyArray<string> | number
|
|
4039
|
+
index: number
|
|
4040
|
+
}
|
|
4041
|
+
|
|
4042
|
+
function isJsonLeaf(u: unknown): boolean {
|
|
4043
|
+
return u === null || typeof u === "string" || typeof u === "boolean" ||
|
|
4044
|
+
typeof u === "number" && globalThis.Number.isFinite(u)
|
|
4045
|
+
}
|
|
4046
|
+
|
|
4047
|
+
function isStringTreeLeaf(u: unknown): boolean {
|
|
4048
|
+
return u === undefined || typeof u === "string"
|
|
4049
|
+
}
|
|
4050
|
+
|
|
4051
|
+
function isTree(u: unknown, isLeaf: (u: unknown) => boolean): boolean {
|
|
4052
|
+
const cache = new WeakMap<object, boolean>()
|
|
4053
|
+
const stack: Array<TreeFrame> = []
|
|
4054
|
+
outer: while (true) {
|
|
4055
|
+
if (typeof u !== "object" || u === null) {
|
|
4056
|
+
if (!isLeaf(u)) {
|
|
4057
|
+
return false
|
|
4058
|
+
}
|
|
4059
|
+
} else {
|
|
4060
|
+
const value = u
|
|
4061
|
+
const cached = cache.get(value)
|
|
4062
|
+
// `false` marks a node on the current path, while `true` marks a fully
|
|
4063
|
+
// validated node that can be safely reused by a DAG.
|
|
4064
|
+
if (cached === false) {
|
|
4065
|
+
return false
|
|
4066
|
+
}
|
|
4067
|
+
if (cached === undefined) {
|
|
4068
|
+
const isArray = Array.isArray(value)
|
|
4069
|
+
if (!isArray) {
|
|
4070
|
+
const prototype = Object.getPrototypeOf(value)
|
|
4071
|
+
// A plain object from another realm has a different Object.prototype,
|
|
4072
|
+
// but that prototype still has a null prototype.
|
|
4073
|
+
if (
|
|
4074
|
+
prototype !== null &&
|
|
4075
|
+
prototype !== Object.prototype &&
|
|
4076
|
+
Object.getPrototypeOf(prototype) !== null
|
|
4077
|
+
) {
|
|
4078
|
+
return false
|
|
4079
|
+
}
|
|
4080
|
+
}
|
|
4081
|
+
cache.set(value, false)
|
|
4082
|
+
stack.push({
|
|
4083
|
+
value,
|
|
4084
|
+
keys: isArray ? value.length : Object.keys(value),
|
|
4085
|
+
index: 0
|
|
4086
|
+
})
|
|
4087
|
+
}
|
|
4088
|
+
}
|
|
4089
|
+
|
|
4090
|
+
while (stack.length > 0) {
|
|
4091
|
+
const frame = stack[stack.length - 1]
|
|
4092
|
+
const keys = frame.keys
|
|
4093
|
+
if (typeof keys === "number") {
|
|
4094
|
+
if (frame.index < keys) {
|
|
4095
|
+
// A sparse slot is read as `undefined`; the leaf predicate determines
|
|
4096
|
+
// whether that is valid for the current tree.
|
|
4097
|
+
u = (frame.value as ReadonlyArray<unknown>)[frame.index++]
|
|
4098
|
+
continue outer
|
|
4099
|
+
}
|
|
4100
|
+
} else if (frame.index < keys.length) {
|
|
4101
|
+
u = (frame.value as Record<string, unknown>)[keys[frame.index++]]
|
|
4102
|
+
continue outer
|
|
4103
|
+
}
|
|
4104
|
+
cache.set(frame.value, true)
|
|
4105
|
+
stack.pop()
|
|
4106
|
+
}
|
|
4107
|
+
return true
|
|
4108
|
+
}
|
|
4109
|
+
}
|
|
4110
|
+
|
|
3857
4111
|
/**
|
|
3858
4112
|
* Returns true if the value is a JSON value.
|
|
3859
4113
|
*
|
|
@@ -3862,51 +4116,7 @@ export const resolveDescription: (ast: AST) => string | undefined = InternalAnno
|
|
|
3862
4116
|
* @internal
|
|
3863
4117
|
*/
|
|
3864
4118
|
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
|
-
}
|
|
4119
|
+
return isTree(u, isJsonLeaf)
|
|
3910
4120
|
}
|
|
3911
4121
|
|
|
3912
4122
|
/** @internal */
|
|
@@ -3914,45 +4124,40 @@ export const Json = new Declaration(
|
|
|
3914
4124
|
[],
|
|
3915
4125
|
() => (input, ast) =>
|
|
3916
4126
|
isJson(input) ?
|
|
3917
|
-
|
|
3918
|
-
Effect.fail(new SchemaIssue.InvalidType(ast
|
|
4127
|
+
InternalParser.sameExit :
|
|
4128
|
+
Effect.fail(new SchemaIssue.InvalidType(ast)),
|
|
3919
4129
|
{
|
|
3920
|
-
|
|
3921
|
-
|
|
3922
|
-
|
|
3923
|
-
generation: {
|
|
3924
|
-
runtime: `Schema.Json`,
|
|
3925
|
-
Type: `Schema.Json`
|
|
4130
|
+
representation: {
|
|
4131
|
+
id: "effect/schema/Json",
|
|
4132
|
+
payload: null
|
|
3926
4133
|
},
|
|
3927
4134
|
expected: "JSON value",
|
|
3928
|
-
toCodecJson: () =>
|
|
4135
|
+
toCodecJson: () => undefined,
|
|
4136
|
+
toCodecStringTree: () => unknownToStringTree,
|
|
3929
4137
|
toArbitrary: () => (fc: typeof FastCheck) => fc.jsonValue()
|
|
3930
4138
|
}
|
|
3931
4139
|
)
|
|
3932
4140
|
|
|
3933
4141
|
/** @internal */
|
|
3934
4142
|
export const MutableJson = annotate(Json, {
|
|
3935
|
-
|
|
3936
|
-
|
|
3937
|
-
|
|
3938
|
-
generation: {
|
|
3939
|
-
runtime: `Schema.MutableJson`,
|
|
3940
|
-
Type: `Schema.MutableJson`
|
|
4143
|
+
representation: {
|
|
4144
|
+
id: "effect/schema/MutableJson",
|
|
4145
|
+
payload: null
|
|
3941
4146
|
}
|
|
3942
4147
|
})
|
|
3943
4148
|
|
|
3944
4149
|
/** @internal */
|
|
3945
|
-
export const
|
|
3946
|
-
|
|
3947
|
-
|
|
3948
|
-
SchemaGetter.passthrough(),
|
|
3949
|
-
SchemaGetter.transform(() => null)
|
|
3950
|
-
)
|
|
4150
|
+
export const unknownToJson = new Link(
|
|
4151
|
+
Json,
|
|
4152
|
+
SchemaTransformation.passthrough()
|
|
3951
4153
|
)
|
|
3952
4154
|
|
|
3953
4155
|
/** @internal */
|
|
3954
|
-
export const
|
|
3955
|
-
|
|
4156
|
+
export const objectKeywordToJson = new Link(
|
|
4157
|
+
new Union([
|
|
4158
|
+
new Arrays(false, [], [Json]),
|
|
4159
|
+
new Objects([], [new IndexSignature(string, Json)])
|
|
4160
|
+
], "anyOf"),
|
|
3956
4161
|
SchemaTransformation.passthrough()
|
|
3957
4162
|
)
|
|
3958
4163
|
|
|
@@ -3964,34 +4169,16 @@ export const unknownToJson = new Link(
|
|
|
3964
4169
|
* @internal
|
|
3965
4170
|
*/
|
|
3966
4171
|
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
|
-
}
|
|
4172
|
+
return isTree(u, isStringTreeLeaf)
|
|
3986
4173
|
}
|
|
3987
4174
|
|
|
3988
4175
|
const StringTree = new Declaration(
|
|
3989
4176
|
[],
|
|
3990
4177
|
() => (input, ast) =>
|
|
3991
4178
|
isStringTree(input) ?
|
|
3992
|
-
|
|
3993
|
-
Effect.fail(new SchemaIssue.InvalidType(ast
|
|
3994
|
-
{ expected: "StringTree" }
|
|
4179
|
+
InternalParser.sameExit :
|
|
4180
|
+
Effect.fail(new SchemaIssue.InvalidType(ast)),
|
|
4181
|
+
{ expected: "StringTree", toCodecStringTree: () => undefined }
|
|
3995
4182
|
)
|
|
3996
4183
|
|
|
3997
4184
|
/** @internal */
|