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.
Files changed (1580) hide show
  1. package/dist/Array.d.ts +971 -1037
  2. package/dist/Array.d.ts.map +1 -1
  3. package/dist/Array.js +462 -412
  4. package/dist/Array.js.map +1 -1
  5. package/dist/BigDecimal.d.ts +433 -756
  6. package/dist/BigDecimal.d.ts.map +1 -1
  7. package/dist/BigDecimal.js +200 -325
  8. package/dist/BigDecimal.js.map +1 -1
  9. package/dist/BigInt.d.ts +207 -267
  10. package/dist/BigInt.d.ts.map +1 -1
  11. package/dist/BigInt.js +107 -135
  12. package/dist/BigInt.js.map +1 -1
  13. package/dist/Boolean.d.ts +146 -188
  14. package/dist/Boolean.d.ts.map +1 -1
  15. package/dist/Boolean.js +64 -84
  16. package/dist/Boolean.js.map +1 -1
  17. package/dist/Brand.js.map +1 -1
  18. package/dist/Cache.d.ts +405 -254
  19. package/dist/Cache.d.ts.map +1 -1
  20. package/dist/Cache.js +166 -101
  21. package/dist/Cache.js.map +1 -1
  22. package/dist/Cause.d.ts +167 -277
  23. package/dist/Cause.d.ts.map +1 -1
  24. package/dist/Cause.js +122 -176
  25. package/dist/Cause.js.map +1 -1
  26. package/dist/Channel.d.ts +729 -768
  27. package/dist/Channel.d.ts.map +1 -1
  28. package/dist/Channel.js +541 -449
  29. package/dist/Channel.js.map +1 -1
  30. package/dist/ChannelSchema.d.ts +1 -1
  31. package/dist/ChannelSchema.d.ts.map +1 -1
  32. package/dist/ChannelSchema.js.map +1 -1
  33. package/dist/Chunk.d.ts +834 -1173
  34. package/dist/Chunk.d.ts.map +1 -1
  35. package/dist/Chunk.js +326 -439
  36. package/dist/Chunk.js.map +1 -1
  37. package/dist/Clock.d.ts +180 -49
  38. package/dist/Clock.d.ts.map +1 -1
  39. package/dist/Clock.js +96 -31
  40. package/dist/Clock.js.map +1 -1
  41. package/dist/Combiner.d.ts +20 -33
  42. package/dist/Combiner.d.ts.map +1 -1
  43. package/dist/Combiner.js +18 -30
  44. package/dist/Combiner.js.map +1 -1
  45. package/dist/Config.d.ts +226 -174
  46. package/dist/Config.d.ts.map +1 -1
  47. package/dist/Config.js +339 -267
  48. package/dist/Config.js.map +1 -1
  49. package/dist/ConfigProvider.d.ts +194 -68
  50. package/dist/ConfigProvider.d.ts.map +1 -1
  51. package/dist/ConfigProvider.js +122 -87
  52. package/dist/ConfigProvider.js.map +1 -1
  53. package/dist/Console.d.ts +233 -33
  54. package/dist/Console.d.ts.map +1 -1
  55. package/dist/Console.js +232 -32
  56. package/dist/Console.js.map +1 -1
  57. package/dist/Context.d.ts +151 -274
  58. package/dist/Context.d.ts.map +1 -1
  59. package/dist/Context.js +171 -214
  60. package/dist/Context.js.map +1 -1
  61. package/dist/Cron.d.ts +68 -77
  62. package/dist/Cron.d.ts.map +1 -1
  63. package/dist/Cron.js +57 -66
  64. package/dist/Cron.js.map +1 -1
  65. package/dist/Crypto.d.ts +13 -15
  66. package/dist/Crypto.d.ts.map +1 -1
  67. package/dist/Crypto.js +9 -10
  68. package/dist/Crypto.js.map +1 -1
  69. package/dist/Data.d.ts +60 -80
  70. package/dist/Data.d.ts.map +1 -1
  71. package/dist/Data.js +18 -24
  72. package/dist/Data.js.map +1 -1
  73. package/dist/DateTime.d.ts +562 -660
  74. package/dist/DateTime.d.ts.map +1 -1
  75. package/dist/DateTime.js +307 -362
  76. package/dist/DateTime.js.map +1 -1
  77. package/dist/Deferred.d.ts +253 -256
  78. package/dist/Deferred.d.ts.map +1 -1
  79. package/dist/Deferred.js +104 -96
  80. package/dist/Deferred.js.map +1 -1
  81. package/dist/Duration.d.ts +216 -308
  82. package/dist/Duration.d.ts.map +1 -1
  83. package/dist/Duration.js +132 -186
  84. package/dist/Duration.js.map +1 -1
  85. package/dist/Effect.d.ts +2897 -3342
  86. package/dist/Effect.d.ts.map +1 -1
  87. package/dist/Effect.js +1383 -1580
  88. package/dist/Effect.js.map +1 -1
  89. package/dist/Effectable.js.map +1 -1
  90. package/dist/Encoding.d.ts +22 -40
  91. package/dist/Encoding.d.ts.map +1 -1
  92. package/dist/Encoding.js +22 -40
  93. package/dist/Encoding.js.map +1 -1
  94. package/dist/Equal.d.ts +33 -37
  95. package/dist/Equal.d.ts.map +1 -1
  96. package/dist/Equal.js +29 -21
  97. package/dist/Equal.js.map +1 -1
  98. package/dist/Equivalence.d.ts +103 -105
  99. package/dist/Equivalence.d.ts.map +1 -1
  100. package/dist/Equivalence.js +77 -79
  101. package/dist/Equivalence.js.map +1 -1
  102. package/dist/ErrorReporter.d.ts +51 -27
  103. package/dist/ErrorReporter.d.ts.map +1 -1
  104. package/dist/ErrorReporter.js +50 -26
  105. package/dist/ErrorReporter.js.map +1 -1
  106. package/dist/ExecutionPlan.d.ts +13 -55
  107. package/dist/ExecutionPlan.d.ts.map +1 -1
  108. package/dist/ExecutionPlan.js +7 -28
  109. package/dist/ExecutionPlan.js.map +1 -1
  110. package/dist/Exit.d.ts +116 -192
  111. package/dist/Exit.d.ts.map +1 -1
  112. package/dist/Exit.js +82 -130
  113. package/dist/Exit.js.map +1 -1
  114. package/dist/Fiber.d.ts +82 -146
  115. package/dist/Fiber.d.ts.map +1 -1
  116. package/dist/Fiber.js +48 -87
  117. package/dist/Fiber.js.map +1 -1
  118. package/dist/FiberHandle.d.ts +152 -105
  119. package/dist/FiberHandle.d.ts.map +1 -1
  120. package/dist/FiberHandle.js +109 -75
  121. package/dist/FiberHandle.js.map +1 -1
  122. package/dist/FiberMap.d.ts +213 -168
  123. package/dist/FiberMap.d.ts.map +1 -1
  124. package/dist/FiberMap.js +114 -89
  125. package/dist/FiberMap.js.map +1 -1
  126. package/dist/FiberSet.d.ts +123 -81
  127. package/dist/FiberSet.d.ts.map +1 -1
  128. package/dist/FiberSet.js +85 -59
  129. package/dist/FiberSet.js.map +1 -1
  130. package/dist/FileSystem.d.ts +153 -264
  131. package/dist/FileSystem.d.ts.map +1 -1
  132. package/dist/FileSystem.js +42 -147
  133. package/dist/FileSystem.js.map +1 -1
  134. package/dist/Filter.d.ts +61 -33
  135. package/dist/Filter.d.ts.map +1 -1
  136. package/dist/Filter.js +26 -15
  137. package/dist/Filter.js.map +1 -1
  138. package/dist/Formatter.d.ts +25 -33
  139. package/dist/Formatter.d.ts.map +1 -1
  140. package/dist/Formatter.js +48 -49
  141. package/dist/Formatter.js.map +1 -1
  142. package/dist/Function.d.ts +76 -145
  143. package/dist/Function.d.ts.map +1 -1
  144. package/dist/Function.js +40 -57
  145. package/dist/Function.js.map +1 -1
  146. package/dist/Graph.d.ts +360 -714
  147. package/dist/Graph.d.ts.map +1 -1
  148. package/dist/Graph.js +168 -297
  149. package/dist/Graph.js.map +1 -1
  150. package/dist/HKT.d.ts +12 -6
  151. package/dist/HKT.d.ts.map +1 -1
  152. package/dist/Hash.d.ts +47 -83
  153. package/dist/Hash.d.ts.map +1 -1
  154. package/dist/Hash.js +46 -68
  155. package/dist/Hash.js.map +1 -1
  156. package/dist/HashMap.d.ts +319 -411
  157. package/dist/HashMap.d.ts.map +1 -1
  158. package/dist/HashMap.js +122 -166
  159. package/dist/HashMap.js.map +1 -1
  160. package/dist/HashRing.d.ts.map +1 -1
  161. package/dist/HashRing.js +1 -0
  162. package/dist/HashRing.js.map +1 -1
  163. package/dist/HashSet.d.ts +177 -284
  164. package/dist/HashSet.d.ts.map +1 -1
  165. package/dist/HashSet.js +68 -109
  166. package/dist/HashSet.js.map +1 -1
  167. package/dist/Inspectable.d.ts +12 -12
  168. package/dist/Inspectable.js +8 -8
  169. package/dist/Inspectable.js.map +1 -1
  170. package/dist/Iterable.d.ts +620 -786
  171. package/dist/Iterable.d.ts.map +1 -1
  172. package/dist/Iterable.js +230 -307
  173. package/dist/Iterable.js.map +1 -1
  174. package/dist/JsonPatch.d.ts +11 -13
  175. package/dist/JsonPatch.d.ts.map +1 -1
  176. package/dist/JsonPatch.js +46 -103
  177. package/dist/JsonPatch.js.map +1 -1
  178. package/dist/JsonPointer.d.ts +8 -8
  179. package/dist/JsonPointer.js +8 -8
  180. package/dist/JsonPointer.js.map +1 -1
  181. package/dist/JsonSchema.d.ts +98 -44
  182. package/dist/JsonSchema.d.ts.map +1 -1
  183. package/dist/JsonSchema.js +300 -239
  184. package/dist/JsonSchema.js.map +1 -1
  185. package/dist/Latch.d.ts +23 -35
  186. package/dist/Latch.d.ts.map +1 -1
  187. package/dist/Latch.js +16 -28
  188. package/dist/Latch.js.map +1 -1
  189. package/dist/Layer.d.ts +359 -260
  190. package/dist/Layer.d.ts.map +1 -1
  191. package/dist/Layer.js +195 -175
  192. package/dist/Layer.js.map +1 -1
  193. package/dist/LayerMap.d.ts +42 -29
  194. package/dist/LayerMap.d.ts.map +1 -1
  195. package/dist/LayerMap.js +31 -21
  196. package/dist/LayerMap.js.map +1 -1
  197. package/dist/LayerRef.d.ts +6 -2
  198. package/dist/LayerRef.d.ts.map +1 -1
  199. package/dist/LayerRef.js +6 -2
  200. package/dist/LayerRef.js.map +1 -1
  201. package/dist/LogLevel.d.ts +114 -214
  202. package/dist/LogLevel.d.ts.map +1 -1
  203. package/dist/LogLevel.js +41 -76
  204. package/dist/LogLevel.js.map +1 -1
  205. package/dist/Logger.d.ts +218 -467
  206. package/dist/Logger.d.ts.map +1 -1
  207. package/dist/Logger.js +207 -452
  208. package/dist/Logger.js.map +1 -1
  209. package/dist/ManagedRuntime.d.ts +16 -5
  210. package/dist/ManagedRuntime.d.ts.map +1 -1
  211. package/dist/ManagedRuntime.js +10 -5
  212. package/dist/ManagedRuntime.js.map +1 -1
  213. package/dist/Match.d.ts +217 -252
  214. package/dist/Match.d.ts.map +1 -1
  215. package/dist/Match.js +150 -183
  216. package/dist/Match.js.map +1 -1
  217. package/dist/Metric.d.ts +442 -993
  218. package/dist/Metric.d.ts.map +1 -1
  219. package/dist/Metric.js +202 -645
  220. package/dist/Metric.js.map +1 -1
  221. package/dist/MutableHashMap.d.ts +144 -173
  222. package/dist/MutableHashMap.d.ts.map +1 -1
  223. package/dist/MutableHashMap.js +68 -79
  224. package/dist/MutableHashMap.js.map +1 -1
  225. package/dist/MutableHashSet.d.ts +84 -89
  226. package/dist/MutableHashSet.d.ts.map +1 -1
  227. package/dist/MutableHashSet.js +44 -47
  228. package/dist/MutableHashSet.js.map +1 -1
  229. package/dist/MutableList.d.ts +71 -370
  230. package/dist/MutableList.d.ts.map +1 -1
  231. package/dist/MutableList.js +59 -284
  232. package/dist/MutableList.js.map +1 -1
  233. package/dist/MutableRef.d.ts +420 -243
  234. package/dist/MutableRef.d.ts.map +1 -1
  235. package/dist/MutableRef.js +209 -120
  236. package/dist/MutableRef.js.map +1 -1
  237. package/dist/Newtype.d.ts +21 -14
  238. package/dist/Newtype.d.ts.map +1 -1
  239. package/dist/Newtype.js +15 -13
  240. package/dist/Newtype.js.map +1 -1
  241. package/dist/NonEmptyIterable.d.ts +7 -137
  242. package/dist/NonEmptyIterable.d.ts.map +1 -1
  243. package/dist/NonEmptyIterable.js +5 -93
  244. package/dist/NonEmptyIterable.js.map +1 -1
  245. package/dist/Number.d.ts +196 -233
  246. package/dist/Number.d.ts.map +1 -1
  247. package/dist/Number.js +90 -109
  248. package/dist/Number.js.map +1 -1
  249. package/dist/Optic.d.ts +97 -189
  250. package/dist/Optic.d.ts.map +1 -1
  251. package/dist/Optic.js +190 -292
  252. package/dist/Optic.js.map +1 -1
  253. package/dist/Option.d.ts +447 -812
  254. package/dist/Option.d.ts.map +1 -1
  255. package/dist/Option.js +213 -393
  256. package/dist/Option.js.map +1 -1
  257. package/dist/Order.d.ts +109 -109
  258. package/dist/Order.js +91 -91
  259. package/dist/Order.js.map +1 -1
  260. package/dist/Ordering.d.ts +20 -23
  261. package/dist/Ordering.d.ts.map +1 -1
  262. package/dist/Ordering.js +8 -9
  263. package/dist/Ordering.js.map +1 -1
  264. package/dist/PartitionedSemaphore.d.ts.map +1 -1
  265. package/dist/PartitionedSemaphore.js +1 -4
  266. package/dist/PartitionedSemaphore.js.map +1 -1
  267. package/dist/Path.d.ts +38 -41
  268. package/dist/Path.d.ts.map +1 -1
  269. package/dist/Path.js +3 -4
  270. package/dist/Path.js.map +1 -1
  271. package/dist/Pipeable.d.ts +6 -5
  272. package/dist/Pipeable.d.ts.map +1 -1
  273. package/dist/Pipeable.js +2 -2
  274. package/dist/Pipeable.js.map +1 -1
  275. package/dist/PlatformError.d.ts +4 -4
  276. package/dist/PlatformError.js +3 -3
  277. package/dist/PlatformError.js.map +1 -1
  278. package/dist/Pool.d.ts +4 -2
  279. package/dist/Pool.d.ts.map +1 -1
  280. package/dist/Pool.js +4 -2
  281. package/dist/Pool.js.map +1 -1
  282. package/dist/Predicate.d.ts +200 -181
  283. package/dist/Predicate.d.ts.map +1 -1
  284. package/dist/Predicate.js +100 -108
  285. package/dist/Predicate.js.map +1 -1
  286. package/dist/PrimaryKey.d.ts +7 -7
  287. package/dist/PrimaryKey.js +5 -5
  288. package/dist/PrimaryKey.js.map +1 -1
  289. package/dist/PubSub.d.ts +425 -494
  290. package/dist/PubSub.d.ts.map +1 -1
  291. package/dist/PubSub.js +373 -362
  292. package/dist/PubSub.js.map +1 -1
  293. package/dist/Pull.d.ts +24 -18
  294. package/dist/Pull.d.ts.map +1 -1
  295. package/dist/Pull.js +11 -9
  296. package/dist/Pull.js.map +1 -1
  297. package/dist/Queue.d.ts +200 -159
  298. package/dist/Queue.d.ts.map +1 -1
  299. package/dist/Queue.js +162 -132
  300. package/dist/Queue.js.map +1 -1
  301. package/dist/Random.d.ts +49 -74
  302. package/dist/Random.d.ts.map +1 -1
  303. package/dist/Random.js +35 -54
  304. package/dist/Random.js.map +1 -1
  305. package/dist/RcMap.d.ts +121 -63
  306. package/dist/RcMap.d.ts.map +1 -1
  307. package/dist/RcMap.js +42 -21
  308. package/dist/RcMap.js.map +1 -1
  309. package/dist/RcRef.d.ts +24 -13
  310. package/dist/RcRef.d.ts.map +1 -1
  311. package/dist/RcRef.js +15 -9
  312. package/dist/RcRef.js.map +1 -1
  313. package/dist/Record.d.ts +361 -466
  314. package/dist/Record.d.ts.map +1 -1
  315. package/dist/Record.js +163 -216
  316. package/dist/Record.js.map +1 -1
  317. package/dist/Redactable.d.ts +6 -2
  318. package/dist/Redactable.d.ts.map +1 -1
  319. package/dist/Redactable.js +7 -2
  320. package/dist/Redactable.js.map +1 -1
  321. package/dist/Redacted.d.ts +25 -25
  322. package/dist/Redacted.d.ts.map +1 -1
  323. package/dist/Redacted.js +19 -20
  324. package/dist/Redacted.js.map +1 -1
  325. package/dist/Reducer.d.ts +8 -15
  326. package/dist/Reducer.d.ts.map +1 -1
  327. package/dist/Reducer.js +6 -12
  328. package/dist/Reducer.js.map +1 -1
  329. package/dist/Ref.d.ts +95 -165
  330. package/dist/Ref.d.ts.map +1 -1
  331. package/dist/Ref.js +75 -122
  332. package/dist/Ref.js.map +1 -1
  333. package/dist/References.d.ts +102 -213
  334. package/dist/References.d.ts.map +1 -1
  335. package/dist/References.js +102 -213
  336. package/dist/References.js.map +1 -1
  337. package/dist/RegExp.d.ts +10 -14
  338. package/dist/RegExp.d.ts.map +1 -1
  339. package/dist/RegExp.js +10 -14
  340. package/dist/RegExp.js.map +1 -1
  341. package/dist/Request.d.ts +31 -21
  342. package/dist/Request.d.ts.map +1 -1
  343. package/dist/Request.js +25 -19
  344. package/dist/Request.js.map +1 -1
  345. package/dist/RequestResolver.d.ts +201 -90
  346. package/dist/RequestResolver.d.ts.map +1 -1
  347. package/dist/RequestResolver.js +87 -41
  348. package/dist/RequestResolver.js.map +1 -1
  349. package/dist/Resource.js.map +1 -1
  350. package/dist/Result.d.ts +302 -470
  351. package/dist/Result.d.ts.map +1 -1
  352. package/dist/Result.js +135 -218
  353. package/dist/Result.js.map +1 -1
  354. package/dist/Runtime.d.ts +50 -75
  355. package/dist/Runtime.d.ts.map +1 -1
  356. package/dist/Runtime.js +39 -60
  357. package/dist/Runtime.js.map +1 -1
  358. package/dist/Schedule.d.ts +290 -1636
  359. package/dist/Schedule.d.ts.map +1 -1
  360. package/dist/Schedule.js +162 -803
  361. package/dist/Schedule.js.map +1 -1
  362. package/dist/Scheduler.d.ts +5 -5
  363. package/dist/Scheduler.d.ts.map +1 -1
  364. package/dist/Scheduler.js +18 -6
  365. package/dist/Scheduler.js.map +1 -1
  366. package/dist/Schema.d.ts +1835 -1060
  367. package/dist/Schema.d.ts.map +1 -1
  368. package/dist/Schema.js +2708 -1050
  369. package/dist/Schema.js.map +1 -1
  370. package/dist/SchemaAST.d.ts +29 -52
  371. package/dist/SchemaAST.d.ts.map +1 -1
  372. package/dist/SchemaAST.js +537 -391
  373. package/dist/SchemaAST.js.map +1 -1
  374. package/dist/SchemaError.d.ts +7 -6
  375. package/dist/SchemaError.d.ts.map +1 -1
  376. package/dist/SchemaError.js +8 -7
  377. package/dist/SchemaError.js.map +1 -1
  378. package/dist/SchemaGetter.d.ts +230 -185
  379. package/dist/SchemaGetter.d.ts.map +1 -1
  380. package/dist/SchemaGetter.js +252 -209
  381. package/dist/SchemaGetter.js.map +1 -1
  382. package/dist/SchemaIssue.d.ts +62 -190
  383. package/dist/SchemaIssue.d.ts.map +1 -1
  384. package/dist/SchemaIssue.js +74 -266
  385. package/dist/SchemaIssue.js.map +1 -1
  386. package/dist/SchemaParser.d.ts +2 -2
  387. package/dist/SchemaParser.d.ts.map +1 -1
  388. package/dist/SchemaParser.js +123 -86
  389. package/dist/SchemaParser.js.map +1 -1
  390. package/dist/SchemaRepresentation.d.ts +398 -1513
  391. package/dist/SchemaRepresentation.d.ts.map +1 -1
  392. package/dist/SchemaRepresentation.js +290 -2854
  393. package/dist/SchemaRepresentation.js.map +1 -1
  394. package/dist/SchemaTransformation.d.ts +116 -76
  395. package/dist/SchemaTransformation.d.ts.map +1 -1
  396. package/dist/SchemaTransformation.js +123 -88
  397. package/dist/SchemaTransformation.js.map +1 -1
  398. package/dist/Scope.d.ts +123 -151
  399. package/dist/Scope.d.ts.map +1 -1
  400. package/dist/Scope.js +72 -92
  401. package/dist/Scope.js.map +1 -1
  402. package/dist/ScopedCache.js.map +1 -1
  403. package/dist/ScopedRef.d.ts +3 -3
  404. package/dist/ScopedRef.js +2 -2
  405. package/dist/ScopedRef.js.map +1 -1
  406. package/dist/Semaphore.d.ts +101 -13
  407. package/dist/Semaphore.d.ts.map +1 -1
  408. package/dist/Semaphore.js +78 -39
  409. package/dist/Semaphore.js.map +1 -1
  410. package/dist/Sink.d.ts +117 -107
  411. package/dist/Sink.d.ts.map +1 -1
  412. package/dist/Sink.js +107 -100
  413. package/dist/Sink.js.map +1 -1
  414. package/dist/Stdio.d.ts +1 -1
  415. package/dist/Stdio.js.map +1 -1
  416. package/dist/Stream.d.ts +2430 -2958
  417. package/dist/Stream.d.ts.map +1 -1
  418. package/dist/Stream.js +1124 -1397
  419. package/dist/Stream.js.map +1 -1
  420. package/dist/String.d.ts +262 -308
  421. package/dist/String.d.ts.map +1 -1
  422. package/dist/String.js +184 -215
  423. package/dist/String.js.map +1 -1
  424. package/dist/Struct.d.ts +109 -114
  425. package/dist/Struct.d.ts.map +1 -1
  426. package/dist/Struct.js +46 -54
  427. package/dist/Struct.js.map +1 -1
  428. package/dist/SubscriptionRef.d.ts +282 -250
  429. package/dist/SubscriptionRef.d.ts.map +1 -1
  430. package/dist/SubscriptionRef.js +104 -92
  431. package/dist/SubscriptionRef.js.map +1 -1
  432. package/dist/Symbol.d.ts +3 -3
  433. package/dist/Symbol.js +3 -3
  434. package/dist/Symbol.js.map +1 -1
  435. package/dist/SynchronizedRef.js.map +1 -1
  436. package/dist/Take.js.map +1 -1
  437. package/dist/Terminal.d.ts +2 -2
  438. package/dist/Terminal.js +1 -1
  439. package/dist/Terminal.js.map +1 -1
  440. package/dist/Tracer.d.ts +100 -54
  441. package/dist/Tracer.d.ts.map +1 -1
  442. package/dist/Tracer.js +41 -24
  443. package/dist/Tracer.js.map +1 -1
  444. package/dist/Trie.d.ts +287 -679
  445. package/dist/Trie.d.ts.map +1 -1
  446. package/dist/Trie.js +109 -251
  447. package/dist/Trie.js.map +1 -1
  448. package/dist/Tuple.d.ts +92 -127
  449. package/dist/Tuple.d.ts.map +1 -1
  450. package/dist/Tuple.js +42 -57
  451. package/dist/Tuple.js.map +1 -1
  452. package/dist/TxChunk.d.ts +201 -121
  453. package/dist/TxChunk.d.ts.map +1 -1
  454. package/dist/TxChunk.js +85 -56
  455. package/dist/TxChunk.js.map +1 -1
  456. package/dist/TxDeferred.d.ts +62 -46
  457. package/dist/TxDeferred.d.ts.map +1 -1
  458. package/dist/TxDeferred.js +30 -22
  459. package/dist/TxDeferred.js.map +1 -1
  460. package/dist/TxHashMap.d.ts +631 -779
  461. package/dist/TxHashMap.d.ts.map +1 -1
  462. package/dist/TxHashMap.js +268 -330
  463. package/dist/TxHashMap.js.map +1 -1
  464. package/dist/TxHashSet.d.ts +297 -236
  465. package/dist/TxHashSet.d.ts.map +1 -1
  466. package/dist/TxHashSet.js +130 -100
  467. package/dist/TxHashSet.js.map +1 -1
  468. package/dist/TxPriorityQueue.d.ts +126 -95
  469. package/dist/TxPriorityQueue.d.ts.map +1 -1
  470. package/dist/TxPriorityQueue.js +74 -56
  471. package/dist/TxPriorityQueue.js.map +1 -1
  472. package/dist/TxPubSub.d.ts +101 -88
  473. package/dist/TxPubSub.d.ts.map +1 -1
  474. package/dist/TxPubSub.js +87 -66
  475. package/dist/TxPubSub.js.map +1 -1
  476. package/dist/TxQueue.d.ts +200 -180
  477. package/dist/TxQueue.d.ts.map +1 -1
  478. package/dist/TxQueue.js +160 -136
  479. package/dist/TxQueue.js.map +1 -1
  480. package/dist/TxReentrantLock.d.ts +97 -66
  481. package/dist/TxReentrantLock.d.ts.map +1 -1
  482. package/dist/TxReentrantLock.js +67 -45
  483. package/dist/TxReentrantLock.js.map +1 -1
  484. package/dist/TxRef.d.ts +51 -32
  485. package/dist/TxRef.d.ts.map +1 -1
  486. package/dist/TxRef.js +23 -15
  487. package/dist/TxRef.js.map +1 -1
  488. package/dist/TxSemaphore.d.ts +129 -95
  489. package/dist/TxSemaphore.d.ts.map +1 -1
  490. package/dist/TxSemaphore.js +85 -70
  491. package/dist/TxSemaphore.js.map +1 -1
  492. package/dist/TxSubscriptionRef.d.ts +97 -70
  493. package/dist/TxSubscriptionRef.d.ts.map +1 -1
  494. package/dist/TxSubscriptionRef.js +44 -34
  495. package/dist/TxSubscriptionRef.js.map +1 -1
  496. package/dist/Types.d.ts +127 -70
  497. package/dist/Types.d.ts.map +1 -1
  498. package/dist/UndefinedOr.js.map +1 -1
  499. package/dist/Unify.d.ts +45 -65
  500. package/dist/Unify.d.ts.map +1 -1
  501. package/dist/Unify.js +6 -9
  502. package/dist/Unify.js.map +1 -1
  503. package/dist/Utils.d.ts +23 -16
  504. package/dist/Utils.d.ts.map +1 -1
  505. package/dist/Utils.js +3 -7
  506. package/dist/Utils.js.map +1 -1
  507. package/dist/index.d.ts +0 -4
  508. package/dist/index.d.ts.map +1 -1
  509. package/dist/index.js +0 -4
  510. package/dist/index.js.map +1 -1
  511. package/dist/internal/array.js.map +1 -1
  512. package/dist/internal/core.js +3 -2
  513. package/dist/internal/core.js.map +1 -1
  514. package/dist/internal/dateTime.js +4 -0
  515. package/dist/internal/dateTime.js.map +1 -1
  516. package/dist/internal/doNotation.js.map +1 -1
  517. package/dist/internal/effect.js +141 -61
  518. package/dist/internal/effect.js.map +1 -1
  519. package/dist/internal/equal.js.map +1 -1
  520. package/dist/internal/errors.js.map +1 -1
  521. package/dist/internal/executionPlan.js.map +1 -1
  522. package/dist/internal/hashMap.js.map +1 -1
  523. package/dist/internal/hashSet.js.map +1 -1
  524. package/dist/internal/layer.js.map +1 -1
  525. package/dist/internal/matcher.js +1 -1
  526. package/dist/internal/matcher.js.map +1 -1
  527. package/dist/internal/metric.js.map +1 -1
  528. package/dist/internal/option.js.map +1 -1
  529. package/dist/internal/persistence.d.ts +2 -0
  530. package/dist/internal/persistence.d.ts.map +1 -0
  531. package/dist/internal/persistence.js +3 -0
  532. package/dist/internal/persistence.js.map +1 -0
  533. package/dist/internal/random.js.map +1 -1
  534. package/dist/internal/rcRef.js.map +1 -1
  535. package/dist/internal/record.d.ts +0 -3
  536. package/dist/internal/record.d.ts.map +1 -1
  537. package/dist/internal/record.js +10 -5
  538. package/dist/internal/record.js.map +1 -1
  539. package/dist/internal/redacted.js.map +1 -1
  540. package/dist/internal/references.js +3 -4
  541. package/dist/internal/references.js.map +1 -1
  542. package/dist/internal/request.js.map +1 -1
  543. package/dist/internal/result.js.map +1 -1
  544. package/dist/internal/schedule.js.map +1 -1
  545. package/dist/internal/schema/annotations.js +12 -0
  546. package/dist/internal/schema/annotations.js.map +1 -1
  547. package/dist/internal/schema/cause.js.map +1 -1
  548. package/dist/internal/schema/fromJsonSchemaDocument.d.ts +2 -0
  549. package/dist/internal/schema/fromJsonSchemaDocument.d.ts.map +1 -0
  550. package/dist/internal/schema/fromJsonSchemaDocument.js +745 -0
  551. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -0
  552. package/dist/internal/schema/fromRepresentation.d.ts +2 -0
  553. package/dist/internal/schema/fromRepresentation.d.ts.map +1 -0
  554. package/dist/internal/schema/fromRepresentation.js +245 -0
  555. package/dist/internal/schema/fromRepresentation.js.map +1 -0
  556. package/dist/internal/schema/parser.d.ts +14 -0
  557. package/dist/internal/schema/parser.d.ts.map +1 -0
  558. package/dist/internal/schema/parser.js +13 -0
  559. package/dist/internal/schema/parser.js.map +1 -0
  560. package/dist/internal/schema/schema.js +28 -40
  561. package/dist/internal/schema/schema.js.map +1 -1
  562. package/dist/internal/schema/{arbitrary.d.ts → toArbitrary.d.ts} +1 -1
  563. package/dist/internal/schema/toArbitrary.d.ts.map +1 -0
  564. package/dist/internal/schema/{arbitrary.js → toArbitrary.js} +8 -9
  565. package/dist/internal/schema/toArbitrary.js.map +1 -0
  566. package/dist/internal/schema/toCodeDocument.d.ts +2 -0
  567. package/dist/internal/schema/toCodeDocument.d.ts.map +1 -0
  568. package/dist/internal/schema/toCodeDocument.js +438 -0
  569. package/dist/internal/schema/toCodeDocument.js.map +1 -0
  570. package/dist/internal/schema/toEquivalence.d.ts +2 -0
  571. package/dist/internal/schema/toEquivalence.d.ts.map +1 -0
  572. package/dist/internal/schema/{equivalence.js → toEquivalence.js} +15 -13
  573. package/dist/internal/schema/toEquivalence.js.map +1 -0
  574. package/dist/internal/schema/toJsonSchemaDocument.d.ts +2 -0
  575. package/dist/internal/schema/toJsonSchemaDocument.d.ts.map +1 -0
  576. package/dist/internal/schema/toJsonSchemaDocument.js +508 -0
  577. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -0
  578. package/dist/internal/schema/toRepresentation.d.ts +2 -0
  579. package/dist/internal/schema/toRepresentation.d.ts.map +1 -0
  580. package/dist/internal/schema/toRepresentation.js +349 -0
  581. package/dist/internal/schema/toRepresentation.js.map +1 -0
  582. package/dist/internal/stackTraceLimit.js +3 -6
  583. package/dist/internal/stackTraceLimit.js.map +1 -1
  584. package/dist/internal/stream.js.map +1 -1
  585. package/dist/internal/tracer.js.map +1 -1
  586. package/dist/internal/trie.js +13 -9
  587. package/dist/internal/trie.js.map +1 -1
  588. package/dist/testing/FastCheck.d.ts +8 -7
  589. package/dist/testing/FastCheck.d.ts.map +1 -1
  590. package/dist/testing/FastCheck.js +8 -7
  591. package/dist/testing/FastCheck.js.map +1 -1
  592. package/dist/testing/TestClock.d.ts +57 -28
  593. package/dist/testing/TestClock.d.ts.map +1 -1
  594. package/dist/testing/TestClock.js +54 -19
  595. package/dist/testing/TestClock.js.map +1 -1
  596. package/dist/testing/TestConsole.d.ts +32 -31
  597. package/dist/testing/TestConsole.d.ts.map +1 -1
  598. package/dist/testing/TestConsole.js +24 -22
  599. package/dist/testing/TestConsole.js.map +1 -1
  600. package/dist/testing/TestSchema.d.ts +29 -29
  601. package/dist/testing/TestSchema.js +25 -25
  602. package/dist/testing/TestSchema.js.map +1 -1
  603. package/dist/testing/index.js.map +1 -1
  604. package/dist/unstable/ai/AiError.d.ts +121 -144
  605. package/dist/unstable/ai/AiError.d.ts.map +1 -1
  606. package/dist/unstable/ai/AiError.js +99 -121
  607. package/dist/unstable/ai/AiError.js.map +1 -1
  608. package/dist/unstable/ai/AnthropicStructuredOutput.d.ts +22 -7
  609. package/dist/unstable/ai/AnthropicStructuredOutput.d.ts.map +1 -1
  610. package/dist/unstable/ai/AnthropicStructuredOutput.js +87 -317
  611. package/dist/unstable/ai/AnthropicStructuredOutput.js.map +1 -1
  612. package/dist/unstable/ai/Chat.d.ts +132 -97
  613. package/dist/unstable/ai/Chat.d.ts.map +1 -1
  614. package/dist/unstable/ai/Chat.js +55 -51
  615. package/dist/unstable/ai/Chat.js.map +1 -1
  616. package/dist/unstable/ai/EmbeddingModel.d.ts +1 -1
  617. package/dist/unstable/ai/EmbeddingModel.js +1 -1
  618. package/dist/unstable/ai/EmbeddingModel.js.map +1 -1
  619. package/dist/unstable/ai/IdGenerator.d.ts +32 -28
  620. package/dist/unstable/ai/IdGenerator.d.ts.map +1 -1
  621. package/dist/unstable/ai/IdGenerator.js +26 -21
  622. package/dist/unstable/ai/IdGenerator.js.map +1 -1
  623. package/dist/unstable/ai/LanguageModel.d.ts +111 -68
  624. package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
  625. package/dist/unstable/ai/LanguageModel.js +123 -81
  626. package/dist/unstable/ai/LanguageModel.js.map +1 -1
  627. package/dist/unstable/ai/McpProtocol.d.ts +30 -0
  628. package/dist/unstable/ai/McpProtocol.d.ts.map +1 -0
  629. package/dist/unstable/ai/McpProtocol.js +20 -0
  630. package/dist/unstable/ai/McpProtocol.js.map +1 -0
  631. package/dist/unstable/ai/McpSchema.d.ts +316 -250
  632. package/dist/unstable/ai/McpSchema.d.ts.map +1 -1
  633. package/dist/unstable/ai/McpSchema.js +71 -63
  634. package/dist/unstable/ai/McpSchema.js.map +1 -1
  635. package/dist/unstable/ai/McpServer.d.ts +71 -62
  636. package/dist/unstable/ai/McpServer.d.ts.map +1 -1
  637. package/dist/unstable/ai/McpServer.js +765 -245
  638. package/dist/unstable/ai/McpServer.js.map +1 -1
  639. package/dist/unstable/ai/Model.d.ts +8 -19
  640. package/dist/unstable/ai/Model.d.ts.map +1 -1
  641. package/dist/unstable/ai/Model.js +9 -20
  642. package/dist/unstable/ai/Model.js.map +1 -1
  643. package/dist/unstable/ai/OpenAiStructuredOutput.d.ts +33 -11
  644. package/dist/unstable/ai/OpenAiStructuredOutput.d.ts.map +1 -1
  645. package/dist/unstable/ai/OpenAiStructuredOutput.js +194 -378
  646. package/dist/unstable/ai/OpenAiStructuredOutput.js.map +1 -1
  647. package/dist/unstable/ai/Prompt.d.ts +112 -38
  648. package/dist/unstable/ai/Prompt.d.ts.map +1 -1
  649. package/dist/unstable/ai/Prompt.js +53 -17
  650. package/dist/unstable/ai/Prompt.js.map +1 -1
  651. package/dist/unstable/ai/Response.d.ts +47 -33
  652. package/dist/unstable/ai/Response.d.ts.map +1 -1
  653. package/dist/unstable/ai/Response.js +23 -18
  654. package/dist/unstable/ai/Response.js.map +1 -1
  655. package/dist/unstable/ai/ResponseIdTracker.js.map +1 -1
  656. package/dist/unstable/ai/Telemetry.d.ts +46 -13
  657. package/dist/unstable/ai/Telemetry.d.ts.map +1 -1
  658. package/dist/unstable/ai/Telemetry.js +18 -7
  659. package/dist/unstable/ai/Telemetry.js.map +1 -1
  660. package/dist/unstable/ai/Tokenizer.d.ts +14 -3
  661. package/dist/unstable/ai/Tokenizer.d.ts.map +1 -1
  662. package/dist/unstable/ai/Tokenizer.js +10 -2
  663. package/dist/unstable/ai/Tokenizer.js.map +1 -1
  664. package/dist/unstable/ai/Tool.d.ts +63 -44
  665. package/dist/unstable/ai/Tool.d.ts.map +1 -1
  666. package/dist/unstable/ai/Tool.js +59 -42
  667. package/dist/unstable/ai/Tool.js.map +1 -1
  668. package/dist/unstable/ai/Toolkit.d.ts +35 -9
  669. package/dist/unstable/ai/Toolkit.d.ts.map +1 -1
  670. package/dist/unstable/ai/Toolkit.js +32 -14
  671. package/dist/unstable/ai/Toolkit.js.map +1 -1
  672. package/dist/unstable/ai/index.d.ts +4 -0
  673. package/dist/unstable/ai/index.d.ts.map +1 -1
  674. package/dist/unstable/ai/index.js +4 -0
  675. package/dist/unstable/ai/index.js.map +1 -1
  676. package/dist/unstable/ai/internal/codec-transformer.js +15 -12
  677. package/dist/unstable/ai/internal/codec-transformer.js.map +1 -1
  678. package/dist/unstable/ai/internal/mcpProtocol.d.ts +21 -0
  679. package/dist/unstable/ai/internal/mcpProtocol.d.ts.map +1 -0
  680. package/dist/unstable/ai/internal/mcpProtocol.js +22 -0
  681. package/dist/unstable/ai/internal/mcpProtocol.js.map +1 -0
  682. package/dist/unstable/ai/internal/mcpProtocolRegistry.d.ts +2 -0
  683. package/dist/unstable/ai/internal/mcpProtocolRegistry.d.ts.map +1 -0
  684. package/dist/unstable/ai/internal/mcpProtocolRegistry.js +32 -0
  685. package/dist/unstable/ai/internal/mcpProtocolRegistry.js.map +1 -0
  686. package/dist/unstable/ai/internal/structured-output.d.ts +2 -0
  687. package/dist/unstable/ai/internal/structured-output.d.ts.map +1 -0
  688. package/dist/unstable/ai/internal/structured-output.js +315 -0
  689. package/dist/unstable/ai/internal/structured-output.js.map +1 -0
  690. package/dist/unstable/cli/Argument.d.ts +273 -69
  691. package/dist/unstable/cli/Argument.d.ts.map +1 -1
  692. package/dist/unstable/cli/Argument.js +111 -33
  693. package/dist/unstable/cli/Argument.js.map +1 -1
  694. package/dist/unstable/cli/CliConfig.js.map +1 -1
  695. package/dist/unstable/cli/CliError.d.ts +105 -74
  696. package/dist/unstable/cli/CliError.d.ts.map +1 -1
  697. package/dist/unstable/cli/CliError.js +98 -63
  698. package/dist/unstable/cli/CliError.js.map +1 -1
  699. package/dist/unstable/cli/CliOutput.d.ts +35 -54
  700. package/dist/unstable/cli/CliOutput.d.ts.map +1 -1
  701. package/dist/unstable/cli/CliOutput.js +26 -42
  702. package/dist/unstable/cli/CliOutput.js.map +1 -1
  703. package/dist/unstable/cli/Command.d.ts +705 -107
  704. package/dist/unstable/cli/Command.d.ts.map +1 -1
  705. package/dist/unstable/cli/Command.js +252 -47
  706. package/dist/unstable/cli/Command.js.map +1 -1
  707. package/dist/unstable/cli/Completions.js.map +1 -1
  708. package/dist/unstable/cli/Flag.d.ts +418 -138
  709. package/dist/unstable/cli/Flag.d.ts.map +1 -1
  710. package/dist/unstable/cli/Flag.js +197 -71
  711. package/dist/unstable/cli/Flag.js.map +1 -1
  712. package/dist/unstable/cli/GlobalFlag.d.ts +1 -1
  713. package/dist/unstable/cli/GlobalFlag.js.map +1 -1
  714. package/dist/unstable/cli/HelpDoc.d.ts +12 -4
  715. package/dist/unstable/cli/HelpDoc.d.ts.map +1 -1
  716. package/dist/unstable/cli/Param.d.ts +292 -78
  717. package/dist/unstable/cli/Param.d.ts.map +1 -1
  718. package/dist/unstable/cli/Param.js +131 -49
  719. package/dist/unstable/cli/Param.js.map +1 -1
  720. package/dist/unstable/cli/Primitive.d.ts +370 -149
  721. package/dist/unstable/cli/Primitive.d.ts.map +1 -1
  722. package/dist/unstable/cli/Primitive.js +345 -137
  723. package/dist/unstable/cli/Primitive.js.map +1 -1
  724. package/dist/unstable/cli/Prompt.d.ts +23 -14
  725. package/dist/unstable/cli/Prompt.d.ts.map +1 -1
  726. package/dist/unstable/cli/Prompt.js +23 -14
  727. package/dist/unstable/cli/Prompt.js.map +1 -1
  728. package/dist/unstable/cli/index.js.map +1 -1
  729. package/dist/unstable/cli/internal/ansi.js.map +1 -1
  730. package/dist/unstable/cli/internal/auto-suggest.js.map +1 -1
  731. package/dist/unstable/cli/internal/command.d.ts +3 -1
  732. package/dist/unstable/cli/internal/command.d.ts.map +1 -1
  733. package/dist/unstable/cli/internal/command.js +11 -4
  734. package/dist/unstable/cli/internal/command.js.map +1 -1
  735. package/dist/unstable/cli/internal/completions/bash.js.map +1 -1
  736. package/dist/unstable/cli/internal/completions/descriptor.js.map +1 -1
  737. package/dist/unstable/cli/internal/completions/fish.js.map +1 -1
  738. package/dist/unstable/cli/internal/completions/zsh.js.map +1 -1
  739. package/dist/unstable/cli/internal/config.d.ts +0 -48
  740. package/dist/unstable/cli/internal/config.d.ts.map +1 -1
  741. package/dist/unstable/cli/internal/config.js +8 -10
  742. package/dist/unstable/cli/internal/config.js.map +1 -1
  743. package/dist/unstable/cli/internal/help.js.map +1 -1
  744. package/dist/unstable/cli/internal/lexer.js +17 -7
  745. package/dist/unstable/cli/internal/lexer.js.map +1 -1
  746. package/dist/unstable/cli/internal/parser.js +2 -2
  747. package/dist/unstable/cli/internal/parser.js.map +1 -1
  748. package/dist/unstable/cli/internal/wizard.js.map +1 -1
  749. package/dist/unstable/cluster/ClusterCron.js.map +1 -1
  750. package/dist/unstable/cluster/ClusterError.js.map +1 -1
  751. package/dist/unstable/cluster/ClusterMetrics.js.map +1 -1
  752. package/dist/unstable/cluster/ClusterSchema.d.ts +8 -8
  753. package/dist/unstable/cluster/ClusterSchema.js +8 -8
  754. package/dist/unstable/cluster/ClusterSchema.js.map +1 -1
  755. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  756. package/dist/unstable/cluster/ClusterWorkflowEngine.js +6 -2
  757. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  758. package/dist/unstable/cluster/DeliverAt.js.map +1 -1
  759. package/dist/unstable/cluster/Entity.d.ts +10 -10
  760. package/dist/unstable/cluster/Entity.d.ts.map +1 -1
  761. package/dist/unstable/cluster/Entity.js +9 -9
  762. package/dist/unstable/cluster/Entity.js.map +1 -1
  763. package/dist/unstable/cluster/EntityAddress.js.map +1 -1
  764. package/dist/unstable/cluster/EntityId.js.map +1 -1
  765. package/dist/unstable/cluster/EntityProxy.d.ts +4 -2
  766. package/dist/unstable/cluster/EntityProxy.d.ts.map +1 -1
  767. package/dist/unstable/cluster/EntityProxy.js +4 -2
  768. package/dist/unstable/cluster/EntityProxy.js.map +1 -1
  769. package/dist/unstable/cluster/EntityProxyServer.js.map +1 -1
  770. package/dist/unstable/cluster/EntityResource.d.ts +2 -2
  771. package/dist/unstable/cluster/EntityResource.js +2 -2
  772. package/dist/unstable/cluster/EntityResource.js.map +1 -1
  773. package/dist/unstable/cluster/EntityType.js.map +1 -1
  774. package/dist/unstable/cluster/Envelope.d.ts +3 -3
  775. package/dist/unstable/cluster/Envelope.d.ts.map +1 -1
  776. package/dist/unstable/cluster/Envelope.js +5 -4
  777. package/dist/unstable/cluster/Envelope.js.map +1 -1
  778. package/dist/unstable/cluster/HttpRunner.d.ts +2 -2
  779. package/dist/unstable/cluster/HttpRunner.d.ts.map +1 -1
  780. package/dist/unstable/cluster/HttpRunner.js +6 -4
  781. package/dist/unstable/cluster/HttpRunner.js.map +1 -1
  782. package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
  783. package/dist/unstable/cluster/MachineId.js.map +1 -1
  784. package/dist/unstable/cluster/Message.d.ts +9 -9
  785. package/dist/unstable/cluster/Message.js +6 -6
  786. package/dist/unstable/cluster/Message.js.map +1 -1
  787. package/dist/unstable/cluster/MessageStorage.d.ts +15 -15
  788. package/dist/unstable/cluster/MessageStorage.js +5 -5
  789. package/dist/unstable/cluster/MessageStorage.js.map +1 -1
  790. package/dist/unstable/cluster/Reply.d.ts.map +1 -1
  791. package/dist/unstable/cluster/Reply.js +5 -5
  792. package/dist/unstable/cluster/Reply.js.map +1 -1
  793. package/dist/unstable/cluster/Runner.d.ts +1 -1
  794. package/dist/unstable/cluster/Runner.js +1 -1
  795. package/dist/unstable/cluster/Runner.js.map +1 -1
  796. package/dist/unstable/cluster/RunnerAddress.d.ts +1 -1
  797. package/dist/unstable/cluster/RunnerAddress.js +1 -1
  798. package/dist/unstable/cluster/RunnerAddress.js.map +1 -1
  799. package/dist/unstable/cluster/RunnerHealth.d.ts +1 -1
  800. package/dist/unstable/cluster/RunnerHealth.js +1 -1
  801. package/dist/unstable/cluster/RunnerHealth.js.map +1 -1
  802. package/dist/unstable/cluster/RunnerServer.d.ts +2 -1
  803. package/dist/unstable/cluster/RunnerServer.d.ts.map +1 -1
  804. package/dist/unstable/cluster/RunnerServer.js +16 -16
  805. package/dist/unstable/cluster/RunnerServer.js.map +1 -1
  806. package/dist/unstable/cluster/RunnerStorage.d.ts +2 -2
  807. package/dist/unstable/cluster/RunnerStorage.js +1 -1
  808. package/dist/unstable/cluster/RunnerStorage.js.map +1 -1
  809. package/dist/unstable/cluster/Runners.d.ts +6 -6
  810. package/dist/unstable/cluster/Runners.d.ts.map +1 -1
  811. package/dist/unstable/cluster/Runners.js +19 -10
  812. package/dist/unstable/cluster/Runners.js.map +1 -1
  813. package/dist/unstable/cluster/ShardId.js +1 -1
  814. package/dist/unstable/cluster/ShardId.js.map +1 -1
  815. package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
  816. package/dist/unstable/cluster/Sharding.js +128 -26
  817. package/dist/unstable/cluster/Sharding.js.map +1 -1
  818. package/dist/unstable/cluster/ShardingConfig.d.ts +13 -5
  819. package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
  820. package/dist/unstable/cluster/ShardingConfig.js +3 -3
  821. package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
  822. package/dist/unstable/cluster/ShardingRegistrationEvent.js.map +1 -1
  823. package/dist/unstable/cluster/SingleRunner.d.ts +4 -2
  824. package/dist/unstable/cluster/SingleRunner.d.ts.map +1 -1
  825. package/dist/unstable/cluster/SingleRunner.js +2 -1
  826. package/dist/unstable/cluster/SingleRunner.js.map +1 -1
  827. package/dist/unstable/cluster/Singleton.js.map +1 -1
  828. package/dist/unstable/cluster/SingletonAddress.d.ts +1 -1
  829. package/dist/unstable/cluster/SingletonAddress.js +1 -1
  830. package/dist/unstable/cluster/SingletonAddress.js.map +1 -1
  831. package/dist/unstable/cluster/Snowflake.d.ts +8 -8
  832. package/dist/unstable/cluster/Snowflake.js +8 -8
  833. package/dist/unstable/cluster/Snowflake.js.map +1 -1
  834. package/dist/unstable/cluster/SocketRunner.js.map +1 -1
  835. package/dist/unstable/cluster/SqlMessageStorage.d.ts +7 -4
  836. package/dist/unstable/cluster/SqlMessageStorage.d.ts.map +1 -1
  837. package/dist/unstable/cluster/SqlMessageStorage.js +56 -25
  838. package/dist/unstable/cluster/SqlMessageStorage.js.map +1 -1
  839. package/dist/unstable/cluster/SqlRunnerStorage.d.ts.map +1 -1
  840. package/dist/unstable/cluster/SqlRunnerStorage.js +127 -65
  841. package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
  842. package/dist/unstable/cluster/TestRunner.js.map +1 -1
  843. package/dist/unstable/cluster/index.js.map +1 -1
  844. package/dist/unstable/cluster/internal/entityManager.js +24 -12
  845. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  846. package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
  847. package/dist/unstable/cluster/internal/hash.js.map +1 -1
  848. package/dist/unstable/cluster/internal/interruptors.js.map +1 -1
  849. package/dist/unstable/cluster/internal/resourceMap.js.map +1 -1
  850. package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
  851. package/dist/unstable/cluster/internal/shardLock.d.ts +2 -0
  852. package/dist/unstable/cluster/internal/shardLock.d.ts.map +1 -0
  853. package/dist/unstable/cluster/internal/shardLock.js +4 -0
  854. package/dist/unstable/cluster/internal/shardLock.js.map +1 -0
  855. package/dist/unstable/devtools/DevTools.js.map +1 -1
  856. package/dist/unstable/devtools/DevToolsClient.js.map +1 -1
  857. package/dist/unstable/devtools/DevToolsSchema.d.ts +20 -20
  858. package/dist/unstable/devtools/DevToolsSchema.d.ts.map +1 -1
  859. package/dist/unstable/devtools/DevToolsSchema.js +8 -5
  860. package/dist/unstable/devtools/DevToolsSchema.js.map +1 -1
  861. package/dist/unstable/devtools/DevToolsServer.js.map +1 -1
  862. package/dist/unstable/devtools/index.js.map +1 -1
  863. package/dist/unstable/encoding/Msgpack.d.ts.map +1 -1
  864. package/dist/unstable/encoding/Msgpack.js +6 -8
  865. package/dist/unstable/encoding/Msgpack.js.map +1 -1
  866. package/dist/unstable/encoding/Ndjson.js.map +1 -1
  867. package/dist/unstable/encoding/Sse.d.ts +72 -8
  868. package/dist/unstable/encoding/Sse.d.ts.map +1 -1
  869. package/dist/unstable/encoding/Sse.js +58 -8
  870. package/dist/unstable/encoding/Sse.js.map +1 -1
  871. package/dist/unstable/encoding/index.js.map +1 -1
  872. package/dist/unstable/eventlog/Event.d.ts +20 -20
  873. package/dist/unstable/eventlog/Event.js.map +1 -1
  874. package/dist/unstable/eventlog/EventGroup.d.ts +4 -4
  875. package/dist/unstable/eventlog/EventGroup.js.map +1 -1
  876. package/dist/unstable/eventlog/EventJournal.d.ts +16 -16
  877. package/dist/unstable/eventlog/EventJournal.js +14 -14
  878. package/dist/unstable/eventlog/EventJournal.js.map +1 -1
  879. package/dist/unstable/eventlog/EventLog.d.ts +3 -3
  880. package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
  881. package/dist/unstable/eventlog/EventLog.js +18 -14
  882. package/dist/unstable/eventlog/EventLog.js.map +1 -1
  883. package/dist/unstable/eventlog/EventLogEncryption.d.ts +2 -2
  884. package/dist/unstable/eventlog/EventLogEncryption.js +2 -2
  885. package/dist/unstable/eventlog/EventLogEncryption.js.map +1 -1
  886. package/dist/unstable/eventlog/EventLogMessage.d.ts +6 -6
  887. package/dist/unstable/eventlog/EventLogMessage.d.ts.map +1 -1
  888. package/dist/unstable/eventlog/EventLogMessage.js +9 -4
  889. package/dist/unstable/eventlog/EventLogMessage.js.map +1 -1
  890. package/dist/unstable/eventlog/EventLogRemote.d.ts +15 -15
  891. package/dist/unstable/eventlog/EventLogRemote.js +1 -1
  892. package/dist/unstable/eventlog/EventLogRemote.js.map +1 -1
  893. package/dist/unstable/eventlog/EventLogServer.d.ts +11 -2
  894. package/dist/unstable/eventlog/EventLogServer.d.ts.map +1 -1
  895. package/dist/unstable/eventlog/EventLogServer.js +45 -21
  896. package/dist/unstable/eventlog/EventLogServer.js.map +1 -1
  897. package/dist/unstable/eventlog/EventLogServerEncrypted.d.ts +4 -4
  898. package/dist/unstable/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  899. package/dist/unstable/eventlog/EventLogServerEncrypted.js +13 -5
  900. package/dist/unstable/eventlog/EventLogServerEncrypted.js.map +1 -1
  901. package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts +5 -5
  902. package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
  903. package/dist/unstable/eventlog/EventLogServerUnencrypted.js +14 -6
  904. package/dist/unstable/eventlog/EventLogServerUnencrypted.js.map +1 -1
  905. package/dist/unstable/eventlog/EventLogSessionAuth.d.ts +1 -1
  906. package/dist/unstable/eventlog/EventLogSessionAuth.js +1 -1
  907. package/dist/unstable/eventlog/EventLogSessionAuth.js.map +1 -1
  908. package/dist/unstable/eventlog/SqlEventJournal.js +2 -2
  909. package/dist/unstable/eventlog/SqlEventJournal.js.map +1 -1
  910. package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js +1 -1
  911. package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  912. package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js +3 -3
  913. package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  914. package/dist/unstable/eventlog/index.js.map +1 -1
  915. package/dist/unstable/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
  916. package/dist/unstable/http/Cookies.d.ts +2 -2
  917. package/dist/unstable/http/Cookies.d.ts.map +1 -1
  918. package/dist/unstable/http/Cookies.js +54 -40
  919. package/dist/unstable/http/Cookies.js.map +1 -1
  920. package/dist/unstable/http/Etag.d.ts +1 -1
  921. package/dist/unstable/http/Etag.js +1 -1
  922. package/dist/unstable/http/Etag.js.map +1 -1
  923. package/dist/unstable/http/FetchHttpClient.d.ts.map +1 -1
  924. package/dist/unstable/http/FetchHttpClient.js.map +1 -1
  925. package/dist/unstable/http/Headers.d.ts +2 -2
  926. package/dist/unstable/http/Headers.js +10 -10
  927. package/dist/unstable/http/Headers.js.map +1 -1
  928. package/dist/unstable/http/HttpBody.d.ts +5 -3
  929. package/dist/unstable/http/HttpBody.d.ts.map +1 -1
  930. package/dist/unstable/http/HttpBody.js +11 -5
  931. package/dist/unstable/http/HttpBody.js.map +1 -1
  932. package/dist/unstable/http/HttpClient.d.ts +51 -44
  933. package/dist/unstable/http/HttpClient.d.ts.map +1 -1
  934. package/dist/unstable/http/HttpClient.js +46 -17
  935. package/dist/unstable/http/HttpClient.js.map +1 -1
  936. package/dist/unstable/http/HttpClientError.js.map +1 -1
  937. package/dist/unstable/http/HttpClientRequest.d.ts +44 -0
  938. package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
  939. package/dist/unstable/http/HttpClientRequest.js +16 -0
  940. package/dist/unstable/http/HttpClientRequest.js.map +1 -1
  941. package/dist/unstable/http/HttpClientResponse.d.ts +4 -4
  942. package/dist/unstable/http/HttpClientResponse.js +2 -2
  943. package/dist/unstable/http/HttpClientResponse.js.map +1 -1
  944. package/dist/unstable/http/HttpEffect.d.ts +6 -6
  945. package/dist/unstable/http/HttpEffect.js +3 -3
  946. package/dist/unstable/http/HttpEffect.js.map +1 -1
  947. package/dist/unstable/http/HttpIncomingMessage.js.map +1 -1
  948. package/dist/unstable/http/HttpMethod.d.ts +6 -9
  949. package/dist/unstable/http/HttpMethod.d.ts.map +1 -1
  950. package/dist/unstable/http/HttpMethod.js +6 -9
  951. package/dist/unstable/http/HttpMethod.js.map +1 -1
  952. package/dist/unstable/http/HttpMiddleware.d.ts +75 -9
  953. package/dist/unstable/http/HttpMiddleware.d.ts.map +1 -1
  954. package/dist/unstable/http/HttpMiddleware.js +164 -39
  955. package/dist/unstable/http/HttpMiddleware.js.map +1 -1
  956. package/dist/unstable/http/HttpPlatform.d.ts +76 -0
  957. package/dist/unstable/http/HttpPlatform.d.ts.map +1 -1
  958. package/dist/unstable/http/HttpPlatform.js +32 -0
  959. package/dist/unstable/http/HttpPlatform.js.map +1 -1
  960. package/dist/unstable/http/HttpRouter.d.ts +88 -89
  961. package/dist/unstable/http/HttpRouter.d.ts.map +1 -1
  962. package/dist/unstable/http/HttpRouter.js +78 -79
  963. package/dist/unstable/http/HttpRouter.js.map +1 -1
  964. package/dist/unstable/http/HttpServer.d.ts +13 -13
  965. package/dist/unstable/http/HttpServer.js +6 -6
  966. package/dist/unstable/http/HttpServer.js.map +1 -1
  967. package/dist/unstable/http/HttpServerError.d.ts +2 -2
  968. package/dist/unstable/http/HttpServerError.js +2 -2
  969. package/dist/unstable/http/HttpServerError.js.map +1 -1
  970. package/dist/unstable/http/HttpServerRequest.d.ts +4 -4
  971. package/dist/unstable/http/HttpServerRequest.d.ts.map +1 -1
  972. package/dist/unstable/http/HttpServerRequest.js +9 -8
  973. package/dist/unstable/http/HttpServerRequest.js.map +1 -1
  974. package/dist/unstable/http/HttpServerRespondable.js.map +1 -1
  975. package/dist/unstable/http/HttpServerResponse.d.ts +22 -0
  976. package/dist/unstable/http/HttpServerResponse.d.ts.map +1 -1
  977. package/dist/unstable/http/HttpServerResponse.js +10 -0
  978. package/dist/unstable/http/HttpServerResponse.js.map +1 -1
  979. package/dist/unstable/http/HttpStaticServer.d.ts +35 -7
  980. package/dist/unstable/http/HttpStaticServer.d.ts.map +1 -1
  981. package/dist/unstable/http/HttpStaticServer.js +35 -7
  982. package/dist/unstable/http/HttpStaticServer.js.map +1 -1
  983. package/dist/unstable/http/HttpTraceContext.js.map +1 -1
  984. package/dist/unstable/http/Multipart.d.ts +6 -6
  985. package/dist/unstable/http/Multipart.d.ts.map +1 -1
  986. package/dist/unstable/http/Multipart.js +22 -20
  987. package/dist/unstable/http/Multipart.js.map +1 -1
  988. package/dist/unstable/http/Template.js +1 -1
  989. package/dist/unstable/http/Template.js.map +1 -1
  990. package/dist/unstable/http/Url.d.ts +33 -63
  991. package/dist/unstable/http/Url.d.ts.map +1 -1
  992. package/dist/unstable/http/Url.js +14 -28
  993. package/dist/unstable/http/Url.js.map +1 -1
  994. package/dist/unstable/http/UrlParams.d.ts +10 -18
  995. package/dist/unstable/http/UrlParams.d.ts.map +1 -1
  996. package/dist/unstable/http/UrlParams.js +26 -31
  997. package/dist/unstable/http/UrlParams.js.map +1 -1
  998. package/dist/unstable/http/index.js.map +1 -1
  999. package/dist/unstable/http/internal/compression.d.ts +2 -0
  1000. package/dist/unstable/http/internal/compression.d.ts.map +1 -0
  1001. package/dist/unstable/http/internal/compression.js +155 -0
  1002. package/dist/unstable/http/internal/compression.js.map +1 -0
  1003. package/dist/unstable/http/internal/preResponseHandler.js.map +1 -1
  1004. package/dist/unstable/httpapi/HttpApi.js +3 -3
  1005. package/dist/unstable/httpapi/HttpApi.js.map +1 -1
  1006. package/dist/unstable/httpapi/HttpApiBuilder.d.ts +1 -1
  1007. package/dist/unstable/httpapi/HttpApiBuilder.d.ts.map +1 -1
  1008. package/dist/unstable/httpapi/HttpApiBuilder.js +10 -11
  1009. package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
  1010. package/dist/unstable/httpapi/HttpApiClient.d.ts +4 -5
  1011. package/dist/unstable/httpapi/HttpApiClient.d.ts.map +1 -1
  1012. package/dist/unstable/httpapi/HttpApiClient.js +16 -18
  1013. package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
  1014. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +42 -42
  1015. package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
  1016. package/dist/unstable/httpapi/HttpApiError.d.ts +13 -13
  1017. package/dist/unstable/httpapi/HttpApiError.js +13 -13
  1018. package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
  1019. package/dist/unstable/httpapi/HttpApiGroup.d.ts +15 -15
  1020. package/dist/unstable/httpapi/HttpApiGroup.js +1 -1
  1021. package/dist/unstable/httpapi/HttpApiGroup.js.map +1 -1
  1022. package/dist/unstable/httpapi/HttpApiMiddleware.d.ts +71 -24
  1023. package/dist/unstable/httpapi/HttpApiMiddleware.d.ts.map +1 -1
  1024. package/dist/unstable/httpapi/HttpApiMiddleware.js +57 -10
  1025. package/dist/unstable/httpapi/HttpApiMiddleware.js.map +1 -1
  1026. package/dist/unstable/httpapi/HttpApiScalar.d.ts +0 -12
  1027. package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
  1028. package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
  1029. package/dist/unstable/httpapi/HttpApiSchema.d.ts +6 -6
  1030. package/dist/unstable/httpapi/HttpApiSchema.js +4 -4
  1031. package/dist/unstable/httpapi/HttpApiSchema.js.map +1 -1
  1032. package/dist/unstable/httpapi/HttpApiSecurity.js.map +1 -1
  1033. package/dist/unstable/httpapi/HttpApiSwagger.js.map +1 -1
  1034. package/dist/unstable/httpapi/HttpApiTest.js.map +1 -1
  1035. package/dist/unstable/httpapi/OpenApi.d.ts +13 -13
  1036. package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
  1037. package/dist/unstable/httpapi/OpenApi.js +50 -37
  1038. package/dist/unstable/httpapi/OpenApi.js.map +1 -1
  1039. package/dist/unstable/httpapi/index.js.map +1 -1
  1040. package/dist/unstable/httpapi/internal/html.js.map +1 -1
  1041. package/dist/unstable/httpapi/internal/httpApiScalar.js.map +1 -1
  1042. package/dist/unstable/httpapi/internal/httpApiSwagger.js.map +1 -1
  1043. package/dist/unstable/httpapi/internal/mediaType.js.map +1 -1
  1044. package/dist/unstable/observability/Otlp.js.map +1 -1
  1045. package/dist/unstable/observability/OtlpExporter.d.ts +70 -1
  1046. package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
  1047. package/dist/unstable/observability/OtlpExporter.js +84 -6
  1048. package/dist/unstable/observability/OtlpExporter.js.map +1 -1
  1049. package/dist/unstable/observability/OtlpLogger.d.ts +4 -3
  1050. package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
  1051. package/dist/unstable/observability/OtlpLogger.js +2 -2
  1052. package/dist/unstable/observability/OtlpLogger.js.map +1 -1
  1053. package/dist/unstable/observability/OtlpMetrics.d.ts +11 -4
  1054. package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
  1055. package/dist/unstable/observability/OtlpMetrics.js +5 -2
  1056. package/dist/unstable/observability/OtlpMetrics.js.map +1 -1
  1057. package/dist/unstable/observability/OtlpResource.d.ts +16 -7
  1058. package/dist/unstable/observability/OtlpResource.d.ts.map +1 -1
  1059. package/dist/unstable/observability/OtlpResource.js +21 -12
  1060. package/dist/unstable/observability/OtlpResource.js.map +1 -1
  1061. package/dist/unstable/observability/OtlpSerialization.js.map +1 -1
  1062. package/dist/unstable/observability/OtlpTracer.d.ts +4 -3
  1063. package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
  1064. package/dist/unstable/observability/OtlpTracer.js +2 -2
  1065. package/dist/unstable/observability/OtlpTracer.js.map +1 -1
  1066. package/dist/unstable/observability/PrometheusMetrics.d.ts +13 -4
  1067. package/dist/unstable/observability/PrometheusMetrics.d.ts.map +1 -1
  1068. package/dist/unstable/observability/PrometheusMetrics.js +10 -3
  1069. package/dist/unstable/observability/PrometheusMetrics.js.map +1 -1
  1070. package/dist/unstable/observability/index.js.map +1 -1
  1071. package/dist/unstable/observability/internal/otlpEnv.js +1 -1
  1072. package/dist/unstable/observability/internal/otlpEnv.js.map +1 -1
  1073. package/dist/unstable/observability/internal/otlpProtobuf.js.map +1 -1
  1074. package/dist/unstable/observability/internal/protobuf.js +3 -0
  1075. package/dist/unstable/observability/internal/protobuf.js.map +1 -1
  1076. package/dist/unstable/persistence/KeyValueStore.d.ts +8 -3
  1077. package/dist/unstable/persistence/KeyValueStore.d.ts.map +1 -1
  1078. package/dist/unstable/persistence/KeyValueStore.js +22 -13
  1079. package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
  1080. package/dist/unstable/persistence/Persistable.d.ts +8 -8
  1081. package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
  1082. package/dist/unstable/persistence/Persistable.js +2 -1
  1083. package/dist/unstable/persistence/Persistable.js.map +1 -1
  1084. package/dist/unstable/persistence/PersistedCache.js.map +1 -1
  1085. package/dist/unstable/persistence/PersistedQueue.d.ts +6 -6
  1086. package/dist/unstable/persistence/PersistedQueue.js +6 -6
  1087. package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
  1088. package/dist/unstable/persistence/Persistence.d.ts +3 -3
  1089. package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
  1090. package/dist/unstable/persistence/Persistence.js +91 -15
  1091. package/dist/unstable/persistence/Persistence.js.map +1 -1
  1092. package/dist/unstable/persistence/RateLimiter.d.ts +28 -17
  1093. package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
  1094. package/dist/unstable/persistence/RateLimiter.js +26 -15
  1095. package/dist/unstable/persistence/RateLimiter.js.map +1 -1
  1096. package/dist/unstable/persistence/Redis.d.ts +2 -2
  1097. package/dist/unstable/persistence/Redis.d.ts.map +1 -1
  1098. package/dist/unstable/persistence/Redis.js +3 -3
  1099. package/dist/unstable/persistence/Redis.js.map +1 -1
  1100. package/dist/unstable/persistence/index.js.map +1 -1
  1101. package/dist/unstable/process/ChildProcess.d.ts +64 -21
  1102. package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
  1103. package/dist/unstable/process/ChildProcess.js +14 -5
  1104. package/dist/unstable/process/ChildProcess.js.map +1 -1
  1105. package/dist/unstable/process/ChildProcessSpawner.d.ts +21 -10
  1106. package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
  1107. package/dist/unstable/process/ChildProcessSpawner.js +4 -2
  1108. package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
  1109. package/dist/unstable/process/index.js.map +1 -1
  1110. package/dist/unstable/reactivity/AsyncResult.d.ts +8 -8
  1111. package/dist/unstable/reactivity/AsyncResult.d.ts.map +1 -1
  1112. package/dist/unstable/reactivity/AsyncResult.js +14 -13
  1113. package/dist/unstable/reactivity/AsyncResult.js.map +1 -1
  1114. package/dist/unstable/reactivity/Atom.d.ts +105 -19
  1115. package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
  1116. package/dist/unstable/reactivity/Atom.js +44 -12
  1117. package/dist/unstable/reactivity/Atom.js.map +1 -1
  1118. package/dist/unstable/reactivity/AtomHttpApi.d.ts +1 -1
  1119. package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
  1120. package/dist/unstable/reactivity/AtomHttpApi.js +4 -1
  1121. package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
  1122. package/dist/unstable/reactivity/AtomRef.js.map +1 -1
  1123. package/dist/unstable/reactivity/AtomRegistry.js +25 -4
  1124. package/dist/unstable/reactivity/AtomRegistry.js.map +1 -1
  1125. package/dist/unstable/reactivity/AtomRpc.d.ts +1 -1
  1126. package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
  1127. package/dist/unstable/reactivity/AtomRpc.js +4 -1
  1128. package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
  1129. package/dist/unstable/reactivity/Hydration.d.ts +1 -1
  1130. package/dist/unstable/reactivity/Hydration.js +1 -1
  1131. package/dist/unstable/reactivity/Hydration.js.map +1 -1
  1132. package/dist/unstable/reactivity/Reactivity.js.map +1 -1
  1133. package/dist/unstable/reactivity/index.js.map +1 -1
  1134. package/dist/unstable/rpc/Rpc.d.ts +35 -33
  1135. package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
  1136. package/dist/unstable/rpc/Rpc.js +4 -2
  1137. package/dist/unstable/rpc/Rpc.js.map +1 -1
  1138. package/dist/unstable/rpc/RpcClient.d.ts +12 -12
  1139. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  1140. package/dist/unstable/rpc/RpcClient.js +14 -12
  1141. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  1142. package/dist/unstable/rpc/RpcClientError.js.map +1 -1
  1143. package/dist/unstable/rpc/RpcGroup.d.ts +8 -8
  1144. package/dist/unstable/rpc/RpcGroup.js +1 -1
  1145. package/dist/unstable/rpc/RpcGroup.js.map +1 -1
  1146. package/dist/unstable/rpc/RpcMessage.d.ts +31 -30
  1147. package/dist/unstable/rpc/RpcMessage.d.ts.map +1 -1
  1148. package/dist/unstable/rpc/RpcMessage.js +6 -6
  1149. package/dist/unstable/rpc/RpcMessage.js.map +1 -1
  1150. package/dist/unstable/rpc/RpcMiddleware.d.ts +10 -10
  1151. package/dist/unstable/rpc/RpcMiddleware.js +1 -1
  1152. package/dist/unstable/rpc/RpcMiddleware.js.map +1 -1
  1153. package/dist/unstable/rpc/RpcSchema.d.ts +4 -4
  1154. package/dist/unstable/rpc/RpcSchema.js +3 -3
  1155. package/dist/unstable/rpc/RpcSchema.js.map +1 -1
  1156. package/dist/unstable/rpc/RpcSerialization.d.ts +58 -7
  1157. package/dist/unstable/rpc/RpcSerialization.d.ts.map +1 -1
  1158. package/dist/unstable/rpc/RpcSerialization.js +175 -96
  1159. package/dist/unstable/rpc/RpcSerialization.js.map +1 -1
  1160. package/dist/unstable/rpc/RpcServer.d.ts +13 -13
  1161. package/dist/unstable/rpc/RpcServer.js +17 -13
  1162. package/dist/unstable/rpc/RpcServer.js.map +1 -1
  1163. package/dist/unstable/rpc/RpcTest.js.map +1 -1
  1164. package/dist/unstable/rpc/RpcWorker.d.ts +5 -5
  1165. package/dist/unstable/rpc/RpcWorker.js +4 -4
  1166. package/dist/unstable/rpc/RpcWorker.js.map +1 -1
  1167. package/dist/unstable/rpc/Utils.js.map +1 -1
  1168. package/dist/unstable/rpc/index.js.map +1 -1
  1169. package/dist/unstable/schema/Model.d.ts +52 -50
  1170. package/dist/unstable/schema/Model.d.ts.map +1 -1
  1171. package/dist/unstable/schema/Model.js +35 -33
  1172. package/dist/unstable/schema/Model.js.map +1 -1
  1173. package/dist/unstable/schema/VariantSchema.d.ts +6 -7
  1174. package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
  1175. package/dist/unstable/schema/VariantSchema.js +15 -12
  1176. package/dist/unstable/schema/VariantSchema.js.map +1 -1
  1177. package/dist/unstable/schema/index.js.map +1 -1
  1178. package/dist/unstable/socket/Socket.d.ts +12 -4
  1179. package/dist/unstable/socket/Socket.d.ts.map +1 -1
  1180. package/dist/unstable/socket/Socket.js +10 -5
  1181. package/dist/unstable/socket/Socket.js.map +1 -1
  1182. package/dist/unstable/socket/SocketServer.js.map +1 -1
  1183. package/dist/unstable/socket/index.js.map +1 -1
  1184. package/dist/unstable/sql/Migrator.js.map +1 -1
  1185. package/dist/unstable/sql/SqlClient.d.ts +1 -1
  1186. package/dist/unstable/sql/SqlClient.d.ts.map +1 -1
  1187. package/dist/unstable/sql/SqlClient.js +2 -2
  1188. package/dist/unstable/sql/SqlClient.js.map +1 -1
  1189. package/dist/unstable/sql/SqlConnection.js.map +1 -1
  1190. package/dist/unstable/sql/SqlError.d.ts +2 -2
  1191. package/dist/unstable/sql/SqlError.js +2 -2
  1192. package/dist/unstable/sql/SqlError.js.map +1 -1
  1193. package/dist/unstable/sql/SqlModel.d.ts +2 -2
  1194. package/dist/unstable/sql/SqlModel.js +2 -2
  1195. package/dist/unstable/sql/SqlModel.js.map +1 -1
  1196. package/dist/unstable/sql/SqlResolver.d.ts +5 -5
  1197. package/dist/unstable/sql/SqlResolver.js +2 -2
  1198. package/dist/unstable/sql/SqlResolver.js.map +1 -1
  1199. package/dist/unstable/sql/SqlSchema.js.map +1 -1
  1200. package/dist/unstable/sql/SqlStream.js.map +1 -1
  1201. package/dist/unstable/sql/Statement.d.ts +6 -6
  1202. package/dist/unstable/sql/Statement.d.ts.map +1 -1
  1203. package/dist/unstable/sql/Statement.js +22 -21
  1204. package/dist/unstable/sql/Statement.js.map +1 -1
  1205. package/dist/unstable/sql/index.js.map +1 -1
  1206. package/dist/unstable/workers/Transferable.d.ts +1 -1
  1207. package/dist/unstable/workers/Transferable.js +1 -1
  1208. package/dist/unstable/workers/Transferable.js.map +1 -1
  1209. package/dist/unstable/workers/Worker.d.ts +2 -2
  1210. package/dist/unstable/workers/Worker.js +2 -2
  1211. package/dist/unstable/workers/Worker.js.map +1 -1
  1212. package/dist/unstable/workers/WorkerError.d.ts +7 -7
  1213. package/dist/unstable/workers/WorkerError.js +6 -6
  1214. package/dist/unstable/workers/WorkerError.js.map +1 -1
  1215. package/dist/unstable/workers/WorkerRunner.d.ts +1 -1
  1216. package/dist/unstable/workers/WorkerRunner.js +1 -1
  1217. package/dist/unstable/workers/WorkerRunner.js.map +1 -1
  1218. package/dist/unstable/workers/index.js.map +1 -1
  1219. package/dist/unstable/workflow/Activity.d.ts +2 -2
  1220. package/dist/unstable/workflow/Activity.js +2 -2
  1221. package/dist/unstable/workflow/Activity.js.map +1 -1
  1222. package/dist/unstable/workflow/DurableClock.d.ts +1 -1
  1223. package/dist/unstable/workflow/DurableClock.js +1 -1
  1224. package/dist/unstable/workflow/DurableClock.js.map +1 -1
  1225. package/dist/unstable/workflow/DurableDeferred.d.ts +10 -10
  1226. package/dist/unstable/workflow/DurableDeferred.js +5 -5
  1227. package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
  1228. package/dist/unstable/workflow/DurableQueue.d.ts +22 -20
  1229. package/dist/unstable/workflow/DurableQueue.d.ts.map +1 -1
  1230. package/dist/unstable/workflow/DurableQueue.js +22 -20
  1231. package/dist/unstable/workflow/DurableQueue.js.map +1 -1
  1232. package/dist/unstable/workflow/Workflow.d.ts +21 -21
  1233. package/dist/unstable/workflow/Workflow.d.ts.map +1 -1
  1234. package/dist/unstable/workflow/Workflow.js +13 -14
  1235. package/dist/unstable/workflow/Workflow.js.map +1 -1
  1236. package/dist/unstable/workflow/WorkflowEngine.d.ts +1 -1
  1237. package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
  1238. package/dist/unstable/workflow/WorkflowProxy.d.ts +4 -2
  1239. package/dist/unstable/workflow/WorkflowProxy.d.ts.map +1 -1
  1240. package/dist/unstable/workflow/WorkflowProxy.js +4 -2
  1241. package/dist/unstable/workflow/WorkflowProxy.js.map +1 -1
  1242. package/dist/unstable/workflow/WorkflowProxyServer.js.map +1 -1
  1243. package/dist/unstable/workflow/index.js.map +1 -1
  1244. package/dist/unstable/workflow/internal/crypto.js.map +1 -1
  1245. package/package.json +5 -6
  1246. package/src/Array.ts +1068 -1070
  1247. package/src/BigDecimal.ts +433 -756
  1248. package/src/BigInt.ts +213 -269
  1249. package/src/Boolean.ts +146 -188
  1250. package/src/Cache.ts +409 -255
  1251. package/src/Cause.ts +167 -277
  1252. package/src/Channel.ts +923 -830
  1253. package/src/ChannelSchema.ts +1 -1
  1254. package/src/Chunk.ts +841 -1181
  1255. package/src/Clock.ts +181 -49
  1256. package/src/Combiner.ts +20 -33
  1257. package/src/Config.ts +618 -334
  1258. package/src/ConfigProvider.ts +221 -127
  1259. package/src/Console.ts +289 -39
  1260. package/src/Context.ts +319 -378
  1261. package/src/Cron.ts +68 -77
  1262. package/src/Crypto.ts +13 -15
  1263. package/src/Data.ts +63 -82
  1264. package/src/DateTime.ts +564 -660
  1265. package/src/Deferred.ts +253 -256
  1266. package/src/Duration.ts +216 -308
  1267. package/src/Effect.ts +2958 -3390
  1268. package/src/Encoding.ts +22 -40
  1269. package/src/Equal.ts +49 -39
  1270. package/src/Equivalence.ts +103 -105
  1271. package/src/ErrorReporter.ts +51 -27
  1272. package/src/ExecutionPlan.ts +13 -55
  1273. package/src/Exit.ts +116 -192
  1274. package/src/Fiber.ts +81 -148
  1275. package/src/FiberHandle.ts +155 -107
  1276. package/src/FiberMap.ts +225 -174
  1277. package/src/FiberSet.ts +124 -82
  1278. package/src/FileSystem.ts +155 -263
  1279. package/src/Filter.ts +61 -33
  1280. package/src/Formatter.ts +54 -56
  1281. package/src/Function.ts +76 -145
  1282. package/src/Graph.ts +416 -770
  1283. package/src/HKT.ts +12 -6
  1284. package/src/Hash.ts +52 -83
  1285. package/src/HashMap.ts +319 -411
  1286. package/src/HashRing.ts +1 -0
  1287. package/src/HashSet.ts +177 -284
  1288. package/src/Inspectable.ts +12 -12
  1289. package/src/Iterable.ts +622 -787
  1290. package/src/JsonPatch.ts +60 -113
  1291. package/src/JsonPointer.ts +8 -8
  1292. package/src/JsonSchema.ts +405 -249
  1293. package/src/Latch.ts +23 -35
  1294. package/src/Layer.ts +359 -260
  1295. package/src/LayerMap.ts +49 -29
  1296. package/src/LayerRef.ts +6 -2
  1297. package/src/LogLevel.ts +114 -214
  1298. package/src/Logger.ts +347 -699
  1299. package/src/ManagedRuntime.ts +20 -5
  1300. package/src/Match.ts +217 -252
  1301. package/src/Metric.ts +520 -1092
  1302. package/src/MutableHashMap.ts +218 -255
  1303. package/src/MutableHashSet.ts +84 -89
  1304. package/src/MutableList.ts +73 -370
  1305. package/src/MutableRef.ts +420 -243
  1306. package/src/Newtype.ts +21 -14
  1307. package/src/NonEmptyIterable.ts +7 -137
  1308. package/src/Number.ts +196 -233
  1309. package/src/Optic.ts +246 -385
  1310. package/src/Option.ts +449 -813
  1311. package/src/Order.ts +109 -109
  1312. package/src/Ordering.ts +20 -23
  1313. package/src/PartitionedSemaphore.ts +1 -4
  1314. package/src/Path.ts +38 -41
  1315. package/src/Pipeable.ts +6 -5
  1316. package/src/PlatformError.ts +4 -4
  1317. package/src/Pool.ts +4 -2
  1318. package/src/Predicate.ts +200 -181
  1319. package/src/PrimaryKey.ts +7 -7
  1320. package/src/PubSub.ts +526 -552
  1321. package/src/Pull.ts +24 -18
  1322. package/src/Queue.ts +200 -159
  1323. package/src/Random.ts +49 -74
  1324. package/src/RcMap.ts +121 -63
  1325. package/src/RcRef.ts +24 -13
  1326. package/src/Record.ts +387 -487
  1327. package/src/Redactable.ts +10 -3
  1328. package/src/Redacted.ts +25 -25
  1329. package/src/Reducer.ts +8 -15
  1330. package/src/Ref.ts +221 -361
  1331. package/src/References.ts +102 -214
  1332. package/src/RegExp.ts +10 -14
  1333. package/src/Request.ts +36 -28
  1334. package/src/RequestResolver.ts +202 -91
  1335. package/src/Result.ts +314 -485
  1336. package/src/Runtime.ts +50 -75
  1337. package/src/Schedule.ts +308 -1734
  1338. package/src/Scheduler.ts +20 -7
  1339. package/src/Schema.ts +3156 -1634
  1340. package/src/SchemaAST.ts +676 -489
  1341. package/src/SchemaError.ts +8 -7
  1342. package/src/SchemaGetter.ts +277 -218
  1343. package/src/SchemaIssue.ts +90 -276
  1344. package/src/SchemaParser.ts +179 -116
  1345. package/src/SchemaRepresentation.ts +698 -3417
  1346. package/src/SchemaTransformation.ts +132 -91
  1347. package/src/Scope.ts +123 -151
  1348. package/src/ScopedRef.ts +4 -4
  1349. package/src/Semaphore.ts +157 -54
  1350. package/src/Sink.ts +128 -113
  1351. package/src/Stdio.ts +1 -1
  1352. package/src/Stream.ts +2665 -3142
  1353. package/src/String.ts +275 -312
  1354. package/src/Struct.ts +114 -118
  1355. package/src/SubscriptionRef.ts +284 -252
  1356. package/src/Symbol.ts +3 -3
  1357. package/src/Terminal.ts +2 -2
  1358. package/src/Tracer.ts +102 -55
  1359. package/src/Trie.ts +287 -679
  1360. package/src/Tuple.ts +92 -127
  1361. package/src/TxChunk.ts +201 -121
  1362. package/src/TxDeferred.ts +62 -46
  1363. package/src/TxHashMap.ts +645 -799
  1364. package/src/TxHashSet.ts +443 -356
  1365. package/src/TxPriorityQueue.ts +130 -98
  1366. package/src/TxPubSub.ts +107 -80
  1367. package/src/TxQueue.ts +214 -183
  1368. package/src/TxReentrantLock.ts +97 -66
  1369. package/src/TxRef.ts +51 -32
  1370. package/src/TxSemaphore.ts +129 -95
  1371. package/src/TxSubscriptionRef.ts +97 -70
  1372. package/src/Types.ts +127 -70
  1373. package/src/Unify.ts +45 -65
  1374. package/src/Utils.ts +23 -16
  1375. package/src/index.ts +0 -5
  1376. package/src/internal/core.ts +5 -4
  1377. package/src/internal/dateTime.ts +6 -0
  1378. package/src/internal/effect.ts +160 -79
  1379. package/src/internal/matcher.ts +1 -1
  1380. package/src/internal/persistence.ts +2 -0
  1381. package/src/internal/record.ts +11 -7
  1382. package/src/internal/references.ts +3 -7
  1383. package/src/internal/schema/annotations.ts +44 -0
  1384. package/src/internal/schema/fromJsonSchemaDocument.ts +959 -0
  1385. package/src/internal/schema/fromRepresentation.ts +339 -0
  1386. package/src/internal/schema/parser.ts +22 -0
  1387. package/src/internal/schema/schema.ts +45 -46
  1388. package/src/internal/schema/{arbitrary.ts → toArbitrary.ts} +8 -10
  1389. package/src/internal/schema/toCodeDocument.ts +572 -0
  1390. package/src/internal/schema/{equivalence.ts → toEquivalence.ts} +12 -7
  1391. package/src/internal/schema/toJsonSchemaDocument.ts +529 -0
  1392. package/src/internal/schema/toRepresentation.ts +386 -0
  1393. package/src/internal/stackTraceLimit.ts +3 -7
  1394. package/src/internal/trie.ts +10 -11
  1395. package/src/testing/FastCheck.ts +8 -7
  1396. package/src/testing/TestClock.ts +73 -31
  1397. package/src/testing/TestConsole.ts +32 -31
  1398. package/src/testing/TestSchema.ts +29 -29
  1399. package/src/unstable/ai/AiError.ts +100 -122
  1400. package/src/unstable/ai/AnthropicStructuredOutput.ts +103 -334
  1401. package/src/unstable/ai/Chat.ts +132 -97
  1402. package/src/unstable/ai/EmbeddingModel.ts +1 -1
  1403. package/src/unstable/ai/IdGenerator.ts +32 -28
  1404. package/src/unstable/ai/LanguageModel.ts +137 -95
  1405. package/src/unstable/ai/McpProtocol.ts +48 -0
  1406. package/src/unstable/ai/McpSchema.ts +75 -65
  1407. package/src/unstable/ai/McpServer.ts +1045 -303
  1408. package/src/unstable/ai/Model.ts +9 -20
  1409. package/src/unstable/ai/OpenAiStructuredOutput.ts +231 -396
  1410. package/src/unstable/ai/Prompt.ts +145 -43
  1411. package/src/unstable/ai/Response.ts +52 -38
  1412. package/src/unstable/ai/Telemetry.ts +46 -13
  1413. package/src/unstable/ai/Tokenizer.ts +14 -3
  1414. package/src/unstable/ai/Tool.ts +81 -48
  1415. package/src/unstable/ai/Toolkit.ts +45 -15
  1416. package/src/unstable/ai/index.ts +5 -0
  1417. package/src/unstable/ai/internal/codec-transformer.ts +13 -7
  1418. package/src/unstable/ai/internal/mcpProtocol.ts +85 -0
  1419. package/src/unstable/ai/internal/mcpProtocolRegistry.ts +70 -0
  1420. package/src/unstable/ai/internal/structured-output.ts +453 -0
  1421. package/src/unstable/cli/Argument.ts +273 -69
  1422. package/src/unstable/cli/CliError.ts +116 -77
  1423. package/src/unstable/cli/CliOutput.ts +44 -58
  1424. package/src/unstable/cli/Command.ts +709 -111
  1425. package/src/unstable/cli/Flag.ts +418 -138
  1426. package/src/unstable/cli/GlobalFlag.ts +1 -1
  1427. package/src/unstable/cli/HelpDoc.ts +12 -4
  1428. package/src/unstable/cli/Param.ts +295 -81
  1429. package/src/unstable/cli/Primitive.ts +371 -150
  1430. package/src/unstable/cli/Prompt.ts +28 -14
  1431. package/src/unstable/cli/internal/command.ts +13 -5
  1432. package/src/unstable/cli/internal/config.ts +8 -10
  1433. package/src/unstable/cli/internal/lexer.ts +8 -2
  1434. package/src/unstable/cli/internal/parser.ts +2 -2
  1435. package/src/unstable/cluster/ClusterSchema.ts +8 -8
  1436. package/src/unstable/cluster/ClusterWorkflowEngine.ts +8 -4
  1437. package/src/unstable/cluster/Entity.ts +16 -17
  1438. package/src/unstable/cluster/EntityProxy.ts +4 -2
  1439. package/src/unstable/cluster/EntityResource.ts +2 -2
  1440. package/src/unstable/cluster/Envelope.ts +5 -4
  1441. package/src/unstable/cluster/HttpRunner.ts +6 -4
  1442. package/src/unstable/cluster/Message.ts +9 -9
  1443. package/src/unstable/cluster/MessageStorage.ts +15 -15
  1444. package/src/unstable/cluster/Reply.ts +5 -7
  1445. package/src/unstable/cluster/Runner.ts +1 -1
  1446. package/src/unstable/cluster/RunnerAddress.ts +1 -1
  1447. package/src/unstable/cluster/RunnerHealth.ts +1 -1
  1448. package/src/unstable/cluster/RunnerServer.ts +41 -8
  1449. package/src/unstable/cluster/RunnerStorage.ts +2 -2
  1450. package/src/unstable/cluster/Runners.ts +23 -12
  1451. package/src/unstable/cluster/ShardId.ts +1 -1
  1452. package/src/unstable/cluster/Sharding.ts +168 -42
  1453. package/src/unstable/cluster/ShardingConfig.ts +8 -4
  1454. package/src/unstable/cluster/SingleRunner.ts +4 -2
  1455. package/src/unstable/cluster/SingletonAddress.ts +1 -1
  1456. package/src/unstable/cluster/Snowflake.ts +8 -8
  1457. package/src/unstable/cluster/SqlMessageStorage.ts +84 -36
  1458. package/src/unstable/cluster/SqlRunnerStorage.ts +205 -119
  1459. package/src/unstable/cluster/internal/entityManager.ts +42 -25
  1460. package/src/unstable/cluster/internal/shardLock.ts +9 -0
  1461. package/src/unstable/devtools/DevToolsSchema.ts +10 -5
  1462. package/src/unstable/encoding/Msgpack.ts +6 -8
  1463. package/src/unstable/encoding/Sse.ts +98 -16
  1464. package/src/unstable/eventlog/Event.ts +20 -20
  1465. package/src/unstable/eventlog/EventGroup.ts +4 -4
  1466. package/src/unstable/eventlog/EventJournal.ts +16 -16
  1467. package/src/unstable/eventlog/EventLog.ts +24 -14
  1468. package/src/unstable/eventlog/EventLogEncryption.ts +2 -2
  1469. package/src/unstable/eventlog/EventLogMessage.ts +12 -5
  1470. package/src/unstable/eventlog/EventLogRemote.ts +1 -1
  1471. package/src/unstable/eventlog/EventLogServer.ts +41 -7
  1472. package/src/unstable/eventlog/EventLogServerEncrypted.ts +13 -5
  1473. package/src/unstable/eventlog/EventLogServerUnencrypted.ts +14 -6
  1474. package/src/unstable/eventlog/EventLogSessionAuth.ts +1 -1
  1475. package/src/unstable/eventlog/SqlEventJournal.ts +2 -2
  1476. package/src/unstable/eventlog/SqlEventLogServerEncrypted.ts +1 -1
  1477. package/src/unstable/eventlog/SqlEventLogServerUnencrypted.ts +6 -3
  1478. package/src/unstable/http/Cookies.ts +64 -45
  1479. package/src/unstable/http/Etag.ts +1 -1
  1480. package/src/unstable/http/FetchHttpClient.ts +3 -1
  1481. package/src/unstable/http/Headers.ts +10 -10
  1482. package/src/unstable/http/HttpBody.ts +20 -5
  1483. package/src/unstable/http/HttpClient.ts +83 -55
  1484. package/src/unstable/http/HttpClientRequest.ts +59 -0
  1485. package/src/unstable/http/HttpClientResponse.ts +4 -4
  1486. package/src/unstable/http/HttpEffect.ts +8 -8
  1487. package/src/unstable/http/HttpMethod.ts +6 -9
  1488. package/src/unstable/http/HttpMiddleware.ts +202 -39
  1489. package/src/unstable/http/HttpPlatform.ts +95 -0
  1490. package/src/unstable/http/HttpRouter.ts +102 -98
  1491. package/src/unstable/http/HttpServer.ts +13 -13
  1492. package/src/unstable/http/HttpServerError.ts +2 -2
  1493. package/src/unstable/http/HttpServerRequest.ts +9 -8
  1494. package/src/unstable/http/HttpServerResponse.ts +30 -0
  1495. package/src/unstable/http/HttpStaticServer.ts +35 -7
  1496. package/src/unstable/http/Multipart.ts +22 -19
  1497. package/src/unstable/http/Template.ts +1 -1
  1498. package/src/unstable/http/Url.ts +33 -63
  1499. package/src/unstable/http/UrlParams.ts +27 -32
  1500. package/src/unstable/http/internal/compression.ts +196 -0
  1501. package/src/unstable/httpapi/HttpApi.ts +3 -3
  1502. package/src/unstable/httpapi/HttpApiBuilder.ts +10 -9
  1503. package/src/unstable/httpapi/HttpApiClient.ts +19 -19
  1504. package/src/unstable/httpapi/HttpApiEndpoint.ts +42 -42
  1505. package/src/unstable/httpapi/HttpApiError.ts +13 -13
  1506. package/src/unstable/httpapi/HttpApiGroup.ts +16 -16
  1507. package/src/unstable/httpapi/HttpApiMiddleware.ts +71 -24
  1508. package/src/unstable/httpapi/HttpApiScalar.ts +0 -12
  1509. package/src/unstable/httpapi/HttpApiSchema.ts +6 -6
  1510. package/src/unstable/httpapi/OpenApi.ts +65 -41
  1511. package/src/unstable/observability/OtlpExporter.ts +126 -10
  1512. package/src/unstable/observability/OtlpLogger.ts +5 -5
  1513. package/src/unstable/observability/OtlpMetrics.ts +12 -5
  1514. package/src/unstable/observability/OtlpResource.ts +26 -17
  1515. package/src/unstable/observability/OtlpTracer.ts +8 -4
  1516. package/src/unstable/observability/PrometheusMetrics.ts +13 -4
  1517. package/src/unstable/observability/internal/otlpEnv.ts +1 -1
  1518. package/src/unstable/observability/internal/protobuf.ts +3 -0
  1519. package/src/unstable/persistence/KeyValueStore.ts +72 -49
  1520. package/src/unstable/persistence/Persistable.ts +11 -10
  1521. package/src/unstable/persistence/PersistedQueue.ts +6 -6
  1522. package/src/unstable/persistence/Persistence.ts +126 -19
  1523. package/src/unstable/persistence/RateLimiter.ts +28 -17
  1524. package/src/unstable/persistence/Redis.ts +4 -4
  1525. package/src/unstable/process/ChildProcess.ts +64 -21
  1526. package/src/unstable/process/ChildProcessSpawner.ts +22 -11
  1527. package/src/unstable/reactivity/AsyncResult.ts +16 -16
  1528. package/src/unstable/reactivity/Atom.ts +117 -22
  1529. package/src/unstable/reactivity/AtomHttpApi.ts +5 -4
  1530. package/src/unstable/reactivity/AtomRegistry.ts +25 -4
  1531. package/src/unstable/reactivity/AtomRpc.ts +5 -4
  1532. package/src/unstable/reactivity/Hydration.ts +1 -1
  1533. package/src/unstable/rpc/Rpc.ts +35 -33
  1534. package/src/unstable/rpc/RpcClient.ts +18 -16
  1535. package/src/unstable/rpc/RpcGroup.ts +8 -8
  1536. package/src/unstable/rpc/RpcMessage.ts +31 -30
  1537. package/src/unstable/rpc/RpcMiddleware.ts +10 -10
  1538. package/src/unstable/rpc/RpcSchema.ts +4 -4
  1539. package/src/unstable/rpc/RpcSerialization.ts +167 -68
  1540. package/src/unstable/rpc/RpcServer.ts +18 -15
  1541. package/src/unstable/rpc/RpcWorker.ts +5 -5
  1542. package/src/unstable/schema/Model.ts +52 -50
  1543. package/src/unstable/schema/VariantSchema.ts +19 -29
  1544. package/src/unstable/socket/Socket.ts +18 -5
  1545. package/src/unstable/sql/SqlClient.ts +5 -6
  1546. package/src/unstable/sql/SqlError.ts +2 -2
  1547. package/src/unstable/sql/SqlModel.ts +2 -2
  1548. package/src/unstable/sql/SqlResolver.ts +5 -5
  1549. package/src/unstable/sql/Statement.ts +31 -29
  1550. package/src/unstable/workers/Transferable.ts +1 -1
  1551. package/src/unstable/workers/Worker.ts +2 -2
  1552. package/src/unstable/workers/WorkerError.ts +7 -7
  1553. package/src/unstable/workers/WorkerRunner.ts +1 -1
  1554. package/src/unstable/workflow/Activity.ts +2 -2
  1555. package/src/unstable/workflow/DurableClock.ts +1 -1
  1556. package/src/unstable/workflow/DurableDeferred.ts +10 -10
  1557. package/src/unstable/workflow/DurableQueue.ts +22 -20
  1558. package/src/unstable/workflow/Workflow.ts +23 -23
  1559. package/src/unstable/workflow/WorkflowEngine.ts +1 -1
  1560. package/src/unstable/workflow/WorkflowProxy.ts +4 -2
  1561. package/dist/SchemaUtils.d.ts +0 -28
  1562. package/dist/SchemaUtils.d.ts.map +0 -1
  1563. package/dist/SchemaUtils.js +0 -45
  1564. package/dist/SchemaUtils.js.map +0 -1
  1565. package/dist/internal/schema/arbitrary.d.ts.map +0 -1
  1566. package/dist/internal/schema/arbitrary.js.map +0 -1
  1567. package/dist/internal/schema/equivalence.d.ts +0 -2
  1568. package/dist/internal/schema/equivalence.d.ts.map +0 -1
  1569. package/dist/internal/schema/equivalence.js.map +0 -1
  1570. package/dist/internal/schema/representation.d.ts +0 -2
  1571. package/dist/internal/schema/representation.d.ts.map +0 -1
  1572. package/dist/internal/schema/representation.js +0 -865
  1573. package/dist/internal/schema/representation.js.map +0 -1
  1574. package/dist/internal/version.d.ts +0 -3
  1575. package/dist/internal/version.d.ts.map +0 -1
  1576. package/dist/internal/version.js +0 -2
  1577. package/dist/internal/version.js.map +0 -1
  1578. package/src/SchemaUtils.ts +0 -51
  1579. package/src/internal/schema/representation.ts +0 -795
  1580. 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 Option from "./Option.ts"
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
- const run = this.run(this.typeParameters)
676
- return (oinput, options) => {
677
- if (Option.isNone(oinput)) return Effect.succeedNone
678
- return Effect.mapEager(run(oinput.value, this, options), Option.some)
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
- return fromAnyToConst(undefined)
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 === undefined
1083
+ return !ast.checks
1084
1084
  case "Union":
1085
- return ast.checks === undefined && ast.types.every(isTemplateLiteralPart)
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 (oinput: Option.Option<unknown>, options: ParseOptions) =>
1134
- Effect.mapBothEager(parser(oinput, options), {
1135
- onSuccess: () => oinput,
1136
- onFailure: (issue) => new SchemaIssue.Composite(this, oinput, [issue])
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.encodedParts, s, options) === undefined ? undefined : s
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.encodedParts, s, options)
1156
- if (segments !== undefined) return Effect.succeed(segments)
1174
+ const segments = segmentTemplateLiteralParts(this, s, options)
1175
+ if (segments) return Effect.succeed(segments)
1157
1176
  return Effect.fail(
1158
- new SchemaIssue.InvalidValue(Option.some(s), {
1159
- message: `Expected a string matching template literal parts, got ${format(s)}`
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
- * console.log(ast.literal) // "active"
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
- return applyTemplateLiteralPartChecks(this, s, options)
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
- return regexp.test(s)
1370
- ? applyTemplateLiteralPartChecks(this, globalThis.Number(s), options)
1371
- : undefined
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 (this.checks && (hasCheck(this.checks, "isFinite") || hasCheck(this.checks, "isInt"))) {
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.checks && (hasCheck(this.checks, "isFinite") || hasCheck(this.checks, "isInt"))) {
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
- // oxlint-disable-next-line only-used-in-recursion - @gcanti what's this? :-)
1394
- function hasCheck(checks: ReadonlyArray<Check<unknown>>, tag: string): boolean {
1395
- return checks.some((c) => {
1396
- switch (c._tag) {
1397
- case "Filter":
1398
- return c.annotations?.meta?._tag === tag
1399
- case "FilterGroup":
1400
- return hasCheck(c.checks, tag)
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
- return applyTemplateLiteralPartChecks(this, s, options)
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
- return isStringBigIntRegExp.test(s)
1538
- ? applyTemplateLiteralPartChecks(this, globalThis.BigInt(s), options)
1539
- : undefined
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
- * console.log(ast.elements.length) // 2
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
- // A required element cannot follow an optional element. ts(1257)
1634
- const i = elements.findIndex(isOptional)
1635
- if (i !== -1 && (elements.slice(i + 1).some((e) => !isOptional(e)) || rest.length > 1)) {
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
- if (rest.length > 1 && rest.slice(1).some(isOptional)) {
1641
- throw new Error("An optional element cannot follow a rest element. ts(1266)")
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
- const elements = ast.elements.map((ast) => ({ ast, parser: recur(ast) }))
1649
- const rest = ast.rest.map((ast) => ({ ast, parser: recur(ast) }))
1650
- const elementLen = elements.length
1651
-
1652
- const [head, ...tail] = rest
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 tail[index - tailThreshold]
1703
+ return rest![index - tailThreshold + 1]
1663
1704
  }
1664
- return head
1705
+ return rest![0]
1665
1706
  }
1666
1707
 
1667
- return Effect.fnUntracedEager(function*(oinput, options) {
1668
- if (oinput._tag === "None") {
1669
- return oinput
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, oinput))
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
- oinput,
1726
+ input,
1683
1727
  len,
1684
- tailThreshold: resolveTailThreshold(len, elementLen, tailLen),
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, input[i]))
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(new SchemaIssue.Composite(ast, oinput, [issue]))
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(new SchemaIssue.Composite(ast, oinput, state.issues))
1757
+ return yield* Effect.fail(
1758
+ new SchemaIssue.Composite(ast, state.issues)
1759
+ )
1712
1760
  }
1713
- return Option.some(state.output)
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 oinput: Option.Option<unknown>
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 ? Option.some(item) : Option.none()
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, _, exit, i) {
1811
+ step(s, item, exit, i) {
1764
1812
  if (exit._tag === "Failure") {
1765
1813
  return wrapPropertyKeyIssue(s, s.ast, i, exit)
1766
- } else if (exit.value._tag === "Some") {
1767
- s.output[i] = exit.value.value
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(new SchemaIssue.Composite(s.ast, s.oinput, [issue]))
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 oinput: Option.Option<unknown>
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) => new SchemaIssue.Composite(ast, s.oinput, [new SchemaIssue.Pointer([key], 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(new SchemaIssue.Composite(ast, s.oinput, [pointer]))
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
- * for (const ps of ast.propertySignatures) {
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 (ast.propertySignatures.length === 0 && ast.indexSignatures.length === 0) {
2092
+ if (!hasProperties && !indexCount) {
2091
2093
  return fromRefinement(ast, Predicate.isNotNullish)
2092
2094
  }
2093
2095
 
2094
- const parseIndexes = indexCount > 0 ?
2095
- iterateEager<{
2096
- readonly oinput: Option.Option<unknown>
2097
- readonly input: Record<PropertyKey, unknown>
2098
- readonly options: ParseOptions
2099
- readonly out: Record<PropertyKey, unknown>
2100
- issues: Array<SchemaIssue.Issue> | undefined
2101
- }, [key: PropertyKey, is: IndexSignature]>()({
2102
- onItem: Effect.fnUntracedEager(function*(
2103
- s,
2104
- [key, is]
2105
- ) {
2106
- const parserKey = recur(parameterFromPropertyKey(is.parameter))
2107
- const effKey = parserKey(Option.some(key), s.options)
2108
- const exitKey = (effectIsExit(effKey) ? effKey : yield* Effect.exit(effKey)) as Exit.Exit<
2109
- Option.Option<PropertyKey>,
2110
- SchemaIssue.Issue
2111
- >
2112
- if (exitKey._tag === "Failure") {
2113
- const eff = wrapPropertyKeyIssue(s, ast, key, exitKey)
2114
- if (eff) yield* eff
2115
- return
2116
- }
2117
-
2118
- const value: Option.Option<unknown> = Option.some(s.input[key])
2119
- const parserValue = recur(is.type)
2120
- const effValue = parserValue(value, s.options)
2121
- const exitValue = effectIsExit(effValue) ? effValue : yield* Effect.exit(effValue)
2122
- if (exitValue._tag === "Failure") {
2123
- const eff = wrapPropertyKeyIssue(s, ast, key, exitValue)
2124
- if (eff) yield* eff
2125
- return
2126
- } else if (exitKey.value._tag === "Some" && exitValue.value._tag === "Some") {
2127
- const k2 = exitKey.value.value
2128
- if (expectedKeysSet.has(key) || expectedKeysSet.has(k2)) {
2129
- return
2130
- }
2131
- const v2 = exitValue.value.value
2132
- if (is.merge && is.merge.decode && Object.hasOwn(s.out, k2)) {
2133
- const [k, v] = is.merge.decode.combine([k2, s.out[k2]], [k2, v2])
2134
- InternalRecord.set(s.out, k, v)
2135
- } else {
2136
- InternalRecord.set(s.out, k2, v2)
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*(oinput, options) {
2145
- if (oinput._tag === "None") {
2146
- return oinput
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, oinput))
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
- oinput,
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 (ast.indexSignatures.length === 0 && (onExcessPropertyError || onExcessPropertyPreserve)) {
2173
- inputKeys = Reflect.ownKeys(input)
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, input[key]))
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(new SchemaIssue.Composite(ast, oinput, [issue]))
2225
+ return yield* Effect.fail(
2226
+ new SchemaIssue.Composite(ast, [issue])
2227
+ )
2189
2228
  }
2190
2229
  } else {
2191
2230
  // preserve key
2192
- InternalRecord.set(out, key, input[key])
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
- const eff = parseProperties(state, properties, concurrency)
2204
- if (eff) yield* eff
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 (parseIndexes) {
2210
- const keyPairs = Arr.empty<[PropertyKey, IndexSignature]>()
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 is = ast.indexSignatures[i]
2213
- const keys = getIndexSignatureKeys(input, is.parameter, options)
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
- const key = keys[j]
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(new SchemaIssue.Composite(ast, oinput, state.issues))
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(input)).concat(expectedKeys)
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.set(preserved, key, out[key])
2287
+ InternalRecord.assignProperty(preserved, key, out[key])
2233
2288
  }
2234
2289
  }
2235
- return Option.some(preserved)
2290
+ return preserved
2236
2291
  }
2237
- return Option.some(out)
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
- const merge = flipMerge ? is.merge?.flip() : is.merge
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, merge)
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, true, this.encodingChecks, this.checks)
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, false, this.checks, this.encodingChecks)
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
- readonly ast: AST
2298
- readonly oinput: Option.Option<unknown>
2299
- readonly input: Record<PropertyKey, unknown>
2300
- readonly options: ParseOptions
2301
- readonly out: Record<PropertyKey, unknown>
2302
- issues: Array<SchemaIssue.Issue> | undefined
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
- } else if (exit.value._tag === "Some") {
2323
- InternalRecord.set(s.out, p.name, exit.value.value)
2324
- } else if (!isOptional(p.type)) {
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, s.oinput, [issue])
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?.["~sentinels"]
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
- return isLiteral(e) && !isOptional(e)
2498
- ? [{ key: i, literal: e.literal }]
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
- byType?: { [K in Type]?: Array<number> }
2508
- bySentinel?: Map<PropertyKey, Map<LiteralValue | symbol, Array<number>>>
2509
- otherwise?: { [K in Type]?: Array<number> }
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 = toEncoded(a)
2597
+ const encoded = toCandidate(a)
2522
2598
  if (isNever(encoded)) continue
2523
2599
 
2524
- const candidateTypes = getCandidateTypes(encoded)
2525
- const sentinels = collectSentinels(encoded)
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
- // by-type (always filled – cheap primary filter)
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 > 0) { // discriminated variants
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 = toEncoded(ast)
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 (runtimeType === "object" || runtimeType === "array") {
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]).filter(filterLiterals(input))
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.byType?.[runtimeType] ?? []).map((i) => types[i]).filter(filterLiterals(input))
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
- * console.log(ast.types.length) // 2
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 (oinput, options) => {
2650
- if (oinput._tag === "None") {
2651
- return Effect.succeed(oinput)
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.flatMap(eff, (_) => {
2674
- return state.out
2675
- ? Effect.succeed(state.out)
2676
- : Effect.fail(new SchemaIssue.AnyOf(ast, input, state.issues ?? []))
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: Option.Option<unknown> | undefined
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.oinput, s.options)
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.ast.mode === "oneOf") {
2878
+ if (s.out && s.successes) {
2765
2879
  s.successes.push(candidate)
2766
- return Exit.fail(new SchemaIssue.OneOf(s.ast, s.input, s.successes))
2880
+ return Exit.fail(new SchemaIssue.OneOf(s.ast, s.successes))
2767
2881
  }
2768
- s.out = exit.value
2769
- s.successes.push(candidate)
2770
- if (s.ast.mode === "anyOf") {
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
- * // The recursive branch is a Suspend node
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 !== undefined) {
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
- return recur(this.thunk())
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 metadata (expected message, meta
2893
- * tags, arbitrary constraint hints).
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.make(input, ast, filter(input, ast, options)),
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(Option.some(input)),
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 source is stored in
3028
- * annotations for serialization and arbitrary generation.
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
- * Use a non-global, non-sticky regular expression, or reset `lastIndex`
3033
- * yourself, because `RegExp.test` is stateful for expressions with the `g` or
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) => regExp.test(s),
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
- meta: {
3055
- _tag: "isPattern",
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 !== undefined) {
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 to = f(last.to)
3137
- if (to !== last.to) {
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
- /** @internal */
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, keyValueCombiner: KeyValueCombiner | undefined): Objects {
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, keyValueCombiner))
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
- * console.log(typeAst._tag) // "Number"
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
- if (type === ast) {
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
- * console.log(encodedAst._tag) // "String"
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 = Effect.succeedSome(value)
3502
- return (oinput) => {
3503
- if (oinput._tag === "None") {
3504
- return Effect.succeedNone
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(new SchemaIssue.InvalidType(ast, oinput))
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 (oinput) => {
3522
- if (oinput._tag === "None") {
3523
- return Effect.succeedNone
3524
- }
3525
- return refinement(oinput.value)
3526
- ? Effect.succeed(oinput)
3527
- : Effect.fail(new SchemaIssue.InvalidType(ast, oinput))
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
- parts: ReadonlyArray<TemplateLiteralPart>,
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
- const failures = new Set<string>()
3708
+ let failures: Set<number> | undefined
3545
3709
  function go(i: number, pos: number): boolean {
3546
- if (i === parts.length) return pos === input.length
3547
- const key = `${i}/${pos}`
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 = globalThis.String(part.literal)
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
- for (let end = input.length; end >= pos; end--) {
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.add(key)
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(`(?:${FINITE_PATTERN}|Infinity|-Infinity|NaN)`)
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
- meta: {
3639
- _tag: "isStringFinite",
3640
- regExp: isStringFiniteRegExp
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
- meta: {
3673
- _tag: "isStringBigInt",
3674
- regExp: isStringBigIntRegExp
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(Option.some(sym), { message: "cannot serialize to string, Symbol is not registered" })
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
- meta: {
3724
- _tag: "isStringSymbol",
3725
- regExp: isStringSymbolRegExp
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: Array<SchemaIssue.Issue>,
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
- issues.push(new SchemaIssue.Filter(value, check, issue))
3748
- if (check.aborted || options?.errors !== "all") {
3749
- return
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: Array<SchemaIssue.Issue> = []
3762
- collectIssues(checks, s, issues, unknown, { errors: "all" })
3763
- if (Arr.isArrayNonEmpty(issues)) {
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
- * console.log(annotations?.title) // "Name"
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
- // `onPath` is the current recursion stack: nodes between the root and the
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
- Effect.succeed(input) :
3918
- Effect.fail(new SchemaIssue.InvalidType(ast, Option.some(input))),
4127
+ InternalParser.sameExit :
4128
+ Effect.fail(new SchemaIssue.InvalidType(ast)),
3919
4129
  {
3920
- typeConstructor: {
3921
- _tag: "effect/Json"
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: () => new Link(unknown, SchemaTransformation.passthrough()),
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
- typeConstructor: {
3936
- _tag: "effect/MutableJson"
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 unknownToNull = new Link(
3946
- null_,
3947
- new SchemaTransformation.Transformation(
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 unknownToJson = new Link(
3955
- Json,
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
- const seen = new Set<unknown>()
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
- Effect.succeed(input) :
3993
- Effect.fail(new SchemaIssue.InvalidType(ast, Option.some(input))),
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 */