effect 4.0.0-beta.5 → 4.0.0-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (482) hide show
  1. package/dist/Cache.d.ts +2 -2
  2. package/dist/Cache.d.ts.map +1 -1
  3. package/dist/Cache.js +1 -1
  4. package/dist/Cache.js.map +1 -1
  5. package/dist/Cause.d.ts +1 -1
  6. package/dist/Cause.d.ts.map +1 -1
  7. package/dist/Channel.d.ts.map +1 -1
  8. package/dist/Channel.js +6 -4
  9. package/dist/Channel.js.map +1 -1
  10. package/dist/Config.d.ts +3 -3
  11. package/dist/Config.js +3 -3
  12. package/dist/Config.js.map +1 -1
  13. package/dist/Data.d.ts +3 -2
  14. package/dist/Data.d.ts.map +1 -1
  15. package/dist/Data.js +9 -8
  16. package/dist/Data.js.map +1 -1
  17. package/dist/DateTime.d.ts +23 -161
  18. package/dist/DateTime.d.ts.map +1 -1
  19. package/dist/DateTime.js +6 -51
  20. package/dist/DateTime.js.map +1 -1
  21. package/dist/Duration.d.ts +12 -12
  22. package/dist/Duration.d.ts.map +1 -1
  23. package/dist/Duration.js +12 -12
  24. package/dist/Duration.js.map +1 -1
  25. package/dist/Effect.d.ts +13 -239
  26. package/dist/Effect.d.ts.map +1 -1
  27. package/dist/Effect.js +1 -119
  28. package/dist/Effect.js.map +1 -1
  29. package/dist/Encoding.d.ts +194 -0
  30. package/dist/Encoding.d.ts.map +1 -0
  31. package/dist/Encoding.js +352 -0
  32. package/dist/Encoding.js.map +1 -0
  33. package/dist/Equal.js.map +1 -1
  34. package/dist/FileSystem.js +2 -2
  35. package/dist/FileSystem.js.map +1 -1
  36. package/dist/Formatter.d.ts +131 -47
  37. package/dist/Formatter.d.ts.map +1 -1
  38. package/dist/Formatter.js +229 -51
  39. package/dist/Formatter.js.map +1 -1
  40. package/dist/Graph.d.ts.map +1 -1
  41. package/dist/Graph.js +2 -2
  42. package/dist/Graph.js.map +1 -1
  43. package/dist/JsonSchema.d.ts +299 -10
  44. package/dist/JsonSchema.d.ts.map +1 -1
  45. package/dist/JsonSchema.js +323 -4
  46. package/dist/JsonSchema.js.map +1 -1
  47. package/dist/Latch.d.ts +109 -0
  48. package/dist/Latch.d.ts.map +1 -0
  49. package/dist/Latch.js +72 -0
  50. package/dist/Latch.js.map +1 -0
  51. package/dist/LayerMap.d.ts +4 -4
  52. package/dist/LayerMap.d.ts.map +1 -1
  53. package/dist/LogLevel.d.ts +27 -0
  54. package/dist/LogLevel.d.ts.map +1 -1
  55. package/dist/LogLevel.js +28 -100
  56. package/dist/LogLevel.js.map +1 -1
  57. package/dist/Logger.d.ts +4 -4
  58. package/dist/Logger.d.ts.map +1 -1
  59. package/dist/Metric.d.ts +2 -2
  60. package/dist/Metric.d.ts.map +1 -1
  61. package/dist/Metric.js +1 -1
  62. package/dist/Metric.js.map +1 -1
  63. package/dist/Pipeable.d.ts +17 -0
  64. package/dist/Pipeable.d.ts.map +1 -1
  65. package/dist/Pipeable.js +19 -1
  66. package/dist/Pipeable.js.map +1 -1
  67. package/dist/Pool.d.ts +6 -4
  68. package/dist/Pool.d.ts.map +1 -1
  69. package/dist/Pool.js +7 -5
  70. package/dist/Pool.js.map +1 -1
  71. package/dist/PubSub.d.ts +3 -2
  72. package/dist/PubSub.d.ts.map +1 -1
  73. package/dist/PubSub.js +3 -2
  74. package/dist/PubSub.js.map +1 -1
  75. package/dist/Random.d.ts +1 -1
  76. package/dist/Random.d.ts.map +1 -1
  77. package/dist/Random.js +3 -12
  78. package/dist/Random.js.map +1 -1
  79. package/dist/RcMap.d.ts +2 -2
  80. package/dist/RcMap.d.ts.map +1 -1
  81. package/dist/RcMap.js +1 -1
  82. package/dist/RcMap.js.map +1 -1
  83. package/dist/RcRef.d.ts +1 -1
  84. package/dist/RcRef.d.ts.map +1 -1
  85. package/dist/Request.d.ts +1 -1
  86. package/dist/Request.d.ts.map +1 -1
  87. package/dist/Request.js +2 -1
  88. package/dist/Request.js.map +1 -1
  89. package/dist/RequestResolver.d.ts +6 -26
  90. package/dist/RequestResolver.d.ts.map +1 -1
  91. package/dist/RequestResolver.js +0 -20
  92. package/dist/RequestResolver.js.map +1 -1
  93. package/dist/Schedule.d.ts +22 -13
  94. package/dist/Schedule.d.ts.map +1 -1
  95. package/dist/Schedule.js +53 -25
  96. package/dist/Schedule.js.map +1 -1
  97. package/dist/Schema.d.ts +196 -46
  98. package/dist/Schema.d.ts.map +1 -1
  99. package/dist/Schema.js +385 -71
  100. package/dist/Schema.js.map +1 -1
  101. package/dist/SchemaGetter.d.ts +2 -2
  102. package/dist/SchemaGetter.d.ts.map +1 -1
  103. package/dist/SchemaGetter.js +12 -14
  104. package/dist/SchemaGetter.js.map +1 -1
  105. package/dist/SchemaRepresentation.d.ts +44 -43
  106. package/dist/SchemaRepresentation.d.ts.map +1 -1
  107. package/dist/SchemaRepresentation.js +5 -2
  108. package/dist/SchemaRepresentation.js.map +1 -1
  109. package/dist/SchemaTransformation.d.ts +37 -0
  110. package/dist/SchemaTransformation.d.ts.map +1 -1
  111. package/dist/SchemaTransformation.js +80 -0
  112. package/dist/SchemaTransformation.js.map +1 -1
  113. package/dist/ScopedCache.d.ts +2 -2
  114. package/dist/ScopedCache.d.ts.map +1 -1
  115. package/dist/ScopedCache.js +1 -1
  116. package/dist/ScopedCache.js.map +1 -1
  117. package/dist/Semaphore.d.ts +211 -0
  118. package/dist/Semaphore.d.ts.map +1 -0
  119. package/dist/{PartitionedSemaphore.js → Semaphore.js} +97 -13
  120. package/dist/Semaphore.js.map +1 -0
  121. package/dist/Stream.d.ts +19 -19
  122. package/dist/Stream.d.ts.map +1 -1
  123. package/dist/Stream.js +12 -11
  124. package/dist/Stream.js.map +1 -1
  125. package/dist/Struct.d.ts +16 -0
  126. package/dist/Struct.d.ts.map +1 -1
  127. package/dist/Struct.js +22 -0
  128. package/dist/Struct.js.map +1 -1
  129. package/dist/SubscriptionRef.d.ts +2 -1
  130. package/dist/SubscriptionRef.d.ts.map +1 -1
  131. package/dist/SubscriptionRef.js +2 -1
  132. package/dist/SubscriptionRef.js.map +1 -1
  133. package/dist/SynchronizedRef.d.ts +2 -1
  134. package/dist/SynchronizedRef.d.ts.map +1 -1
  135. package/dist/SynchronizedRef.js +2 -1
  136. package/dist/SynchronizedRef.js.map +1 -1
  137. package/dist/Types.d.ts +8 -0
  138. package/dist/Types.d.ts.map +1 -1
  139. package/dist/index.d.ts +148 -5
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +148 -5
  142. package/dist/index.js.map +1 -1
  143. package/dist/internal/core.js +11 -3
  144. package/dist/internal/core.js.map +1 -1
  145. package/dist/internal/dateTime.js +3 -11
  146. package/dist/internal/dateTime.js.map +1 -1
  147. package/dist/internal/effect.js +2 -2
  148. package/dist/internal/effect.js.map +1 -1
  149. package/dist/internal/random.d.ts +2 -0
  150. package/dist/internal/random.d.ts.map +1 -0
  151. package/dist/internal/random.js +13 -0
  152. package/dist/internal/random.js.map +1 -0
  153. package/dist/internal/rcRef.js +3 -2
  154. package/dist/internal/rcRef.js.map +1 -1
  155. package/dist/testing/TestClock.d.ts +7 -6
  156. package/dist/testing/TestClock.d.ts.map +1 -1
  157. package/dist/testing/TestClock.js +6 -4
  158. package/dist/testing/TestClock.js.map +1 -1
  159. package/dist/testing/TestSchema.d.ts +6 -6
  160. package/dist/testing/TestSchema.d.ts.map +1 -1
  161. package/dist/unstable/ai/AiError.d.ts +48 -48
  162. package/dist/unstable/ai/AiError.d.ts.map +1 -1
  163. package/dist/unstable/ai/Chat.d.ts +3 -3
  164. package/dist/unstable/ai/Chat.d.ts.map +1 -1
  165. package/dist/unstable/ai/Chat.js +4 -3
  166. package/dist/unstable/ai/Chat.js.map +1 -1
  167. package/dist/unstable/ai/LanguageModel.d.ts +2 -2
  168. package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
  169. package/dist/unstable/ai/McpSchema.d.ts +51 -51
  170. package/dist/unstable/ai/McpServer.d.ts +1 -1
  171. package/dist/unstable/ai/McpServer.d.ts.map +1 -1
  172. package/dist/unstable/ai/McpServer.js.map +1 -1
  173. package/dist/unstable/ai/Prompt.d.ts +20 -20
  174. package/dist/unstable/ai/Prompt.d.ts.map +1 -1
  175. package/dist/unstable/ai/Response.d.ts +26 -26
  176. package/dist/unstable/ai/Response.d.ts.map +1 -1
  177. package/dist/unstable/ai/Response.js +1 -1
  178. package/dist/unstable/ai/Response.js.map +1 -1
  179. package/dist/unstable/cli/CliError.d.ts +5 -5
  180. package/dist/unstable/cluster/ClusterCron.d.ts +1 -1
  181. package/dist/unstable/cluster/ClusterCron.d.ts.map +1 -1
  182. package/dist/unstable/cluster/ClusterCron.js +1 -1
  183. package/dist/unstable/cluster/ClusterCron.js.map +1 -1
  184. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  185. package/dist/unstable/cluster/ClusterWorkflowEngine.js +2 -1
  186. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  187. package/dist/unstable/cluster/Entity.d.ts +5 -4
  188. package/dist/unstable/cluster/Entity.d.ts.map +1 -1
  189. package/dist/unstable/cluster/Entity.js.map +1 -1
  190. package/dist/unstable/cluster/EntityResource.d.ts +2 -2
  191. package/dist/unstable/cluster/EntityResource.d.ts.map +1 -1
  192. package/dist/unstable/cluster/Envelope.d.ts +1 -1
  193. package/dist/unstable/cluster/K8sHttpClient.d.ts +1 -1
  194. package/dist/unstable/cluster/K8sHttpClient.js +1 -1
  195. package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
  196. package/dist/unstable/cluster/Message.d.ts +5 -5
  197. package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
  198. package/dist/unstable/cluster/MessageStorage.js +2 -1
  199. package/dist/unstable/cluster/MessageStorage.js.map +1 -1
  200. package/dist/unstable/cluster/Reply.d.ts +3 -3
  201. package/dist/unstable/cluster/Runner.d.ts +1 -1
  202. package/dist/unstable/cluster/Runners.d.ts.map +1 -1
  203. package/dist/unstable/cluster/Runners.js +4 -3
  204. package/dist/unstable/cluster/Runners.js.map +1 -1
  205. package/dist/unstable/cluster/Sharding.d.ts +2 -2
  206. package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
  207. package/dist/unstable/cluster/Sharding.js +8 -6
  208. package/dist/unstable/cluster/Sharding.js.map +1 -1
  209. package/dist/unstable/cluster/ShardingConfig.d.ts +21 -21
  210. package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
  211. package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
  212. package/dist/unstable/cluster/SqlRunnerStorage.js +1 -1
  213. package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
  214. package/dist/unstable/cluster/internal/entityManager.js +5 -4
  215. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  216. package/dist/unstable/cluster/internal/entityReaper.js +2 -1
  217. package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
  218. package/dist/unstable/cluster/internal/resourceRef.js +2 -1
  219. package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
  220. package/dist/unstable/devtools/DevToolsSchema.d.ts +36 -36
  221. package/dist/unstable/encoding/Sse.d.ts +3 -3
  222. package/dist/unstable/encoding/Sse.d.ts.map +1 -1
  223. package/dist/unstable/encoding/Sse.js.map +1 -1
  224. package/dist/unstable/eventlog/EventJournal.d.ts +1 -1
  225. package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
  226. package/dist/unstable/eventlog/EventLog.js +2 -1
  227. package/dist/unstable/eventlog/EventLog.js.map +1 -1
  228. package/dist/unstable/eventlog/EventLogRemote.d.ts +5 -5
  229. package/dist/unstable/http/Cookies.d.ts +2 -2
  230. package/dist/unstable/http/Cookies.d.ts.map +1 -1
  231. package/dist/unstable/http/Cookies.js +2 -2
  232. package/dist/unstable/http/Cookies.js.map +1 -1
  233. package/dist/unstable/http/HttpClient.d.ts +4 -4
  234. package/dist/unstable/http/HttpClient.d.ts.map +1 -1
  235. package/dist/unstable/http/HttpClientRequest.d.ts +11 -11
  236. package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
  237. package/dist/unstable/http/HttpClientRequest.js +8 -1
  238. package/dist/unstable/http/HttpClientRequest.js.map +1 -1
  239. package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
  240. package/dist/unstable/http/HttpEffect.js +18 -26
  241. package/dist/unstable/http/HttpEffect.js.map +1 -1
  242. package/dist/unstable/http/HttpMethod.d.ts +4 -4
  243. package/dist/unstable/http/HttpMethod.d.ts.map +1 -1
  244. package/dist/unstable/http/HttpMethod.js +3 -3
  245. package/dist/unstable/http/HttpMethod.js.map +1 -1
  246. package/dist/unstable/http/Multipart.d.ts +2 -2
  247. package/dist/unstable/http/UrlParams.d.ts +1 -1
  248. package/dist/unstable/httpapi/HttpApiBuilder.js +2 -2
  249. package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
  250. package/dist/unstable/httpapi/HttpApiScalar.d.ts +6 -0
  251. package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
  252. package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
  253. package/dist/unstable/observability/Otlp.d.ts +12 -12
  254. package/dist/unstable/observability/Otlp.d.ts.map +1 -1
  255. package/dist/unstable/observability/OtlpExporter.d.ts +2 -2
  256. package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
  257. package/dist/unstable/observability/OtlpExporter.js +1 -1
  258. package/dist/unstable/observability/OtlpExporter.js.map +1 -1
  259. package/dist/unstable/observability/OtlpLogger.d.ts +4 -4
  260. package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
  261. package/dist/unstable/observability/OtlpMetrics.d.ts +4 -4
  262. package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
  263. package/dist/unstable/observability/OtlpTracer.d.ts +4 -4
  264. package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
  265. package/dist/unstable/persistence/KeyValueStore.js +4 -4
  266. package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
  267. package/dist/unstable/persistence/Persistable.d.ts +2 -2
  268. package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
  269. package/dist/unstable/persistence/PersistedCache.d.ts +6 -5
  270. package/dist/unstable/persistence/PersistedCache.d.ts.map +1 -1
  271. package/dist/unstable/persistence/PersistedCache.js +2 -1
  272. package/dist/unstable/persistence/PersistedCache.js.map +1 -1
  273. package/dist/unstable/persistence/PersistedQueue.d.ts +12 -12
  274. package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
  275. package/dist/unstable/persistence/PersistedQueue.js +12 -11
  276. package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
  277. package/dist/unstable/persistence/Persistence.d.ts +1 -1
  278. package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
  279. package/dist/unstable/persistence/Persistence.js +2 -2
  280. package/dist/unstable/persistence/Persistence.js.map +1 -1
  281. package/dist/unstable/persistence/RateLimiter.d.ts +3 -3
  282. package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
  283. package/dist/unstable/persistence/RateLimiter.js +1 -1
  284. package/dist/unstable/persistence/RateLimiter.js.map +1 -1
  285. package/dist/unstable/process/ChildProcess.d.ts +1 -1
  286. package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
  287. package/dist/unstable/process/ChildProcessSpawner.d.ts +6 -0
  288. package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
  289. package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
  290. package/dist/unstable/reactivity/Atom.d.ts +6 -6
  291. package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
  292. package/dist/unstable/reactivity/Atom.js +3 -3
  293. package/dist/unstable/reactivity/Atom.js.map +1 -1
  294. package/dist/unstable/reactivity/AtomHttpApi.d.ts +1 -1
  295. package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
  296. package/dist/unstable/reactivity/AtomHttpApi.js +1 -1
  297. package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
  298. package/dist/unstable/reactivity/AtomRpc.d.ts +1 -1
  299. package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
  300. package/dist/unstable/reactivity/AtomRpc.js +1 -1
  301. package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
  302. package/dist/unstable/reactivity/index.d.ts +2 -2
  303. package/dist/unstable/reactivity/index.d.ts.map +1 -1
  304. package/dist/unstable/reactivity/index.js +2 -2
  305. package/dist/unstable/reactivity/index.js.map +1 -1
  306. package/dist/unstable/rpc/Rpc.d.ts +2 -2
  307. package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
  308. package/dist/unstable/rpc/RpcClient.d.ts +5 -26
  309. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  310. package/dist/unstable/rpc/RpcClient.js +6 -13
  311. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  312. package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
  313. package/dist/unstable/rpc/RpcServer.js +5 -3
  314. package/dist/unstable/rpc/RpcServer.js.map +1 -1
  315. package/dist/unstable/rpc/Utils.d.ts.map +1 -1
  316. package/dist/unstable/rpc/Utils.js +2 -1
  317. package/dist/unstable/rpc/Utils.js.map +1 -1
  318. package/dist/unstable/socket/Socket.d.ts +4 -4
  319. package/dist/unstable/socket/Socket.d.ts.map +1 -1
  320. package/dist/unstable/socket/Socket.js +3 -2
  321. package/dist/unstable/socket/Socket.js.map +1 -1
  322. package/dist/unstable/sql/SqlModel.d.ts +2 -2
  323. package/dist/unstable/sql/SqlModel.d.ts.map +1 -1
  324. package/dist/unstable/sql/SqlModel.js +3 -3
  325. package/dist/unstable/sql/SqlModel.js.map +1 -1
  326. package/dist/unstable/sql/SqlSchema.d.ts +16 -5
  327. package/dist/unstable/sql/SqlSchema.d.ts.map +1 -1
  328. package/dist/unstable/sql/SqlSchema.js +17 -7
  329. package/dist/unstable/sql/SqlSchema.js.map +1 -1
  330. package/dist/unstable/sql/Statement.js +0 -1
  331. package/dist/unstable/sql/Statement.js.map +1 -1
  332. package/dist/unstable/workers/Worker.d.ts.map +1 -1
  333. package/dist/unstable/workers/Worker.js +2 -1
  334. package/dist/unstable/workers/Worker.js.map +1 -1
  335. package/dist/unstable/workflow/DurableClock.d.ts +3 -3
  336. package/dist/unstable/workflow/DurableClock.d.ts.map +1 -1
  337. package/dist/unstable/workflow/DurableClock.js +3 -3
  338. package/dist/unstable/workflow/DurableClock.js.map +1 -1
  339. package/dist/unstable/workflow/DurableDeferred.js +2 -2
  340. package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
  341. package/dist/unstable/workflow/Workflow.d.ts +1 -1
  342. package/dist/unstable/workflow/WorkflowEngine.d.ts +2 -1
  343. package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
  344. package/dist/unstable/workflow/WorkflowEngine.js +2 -1
  345. package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
  346. package/package.json +1 -2
  347. package/src/Cache.ts +3 -3
  348. package/src/Cause.ts +1 -1
  349. package/src/Channel.ts +6 -4
  350. package/src/Config.ts +3 -3
  351. package/src/Data.ts +10 -9
  352. package/src/DateTime.ts +24 -164
  353. package/src/Duration.ts +15 -15
  354. package/src/Effect.ts +15 -261
  355. package/src/Encoding.ts +879 -0
  356. package/src/Equal.ts +2 -2
  357. package/src/FileSystem.ts +4 -4
  358. package/src/Formatter.ts +253 -51
  359. package/src/Graph.ts +8 -5
  360. package/src/JsonSchema.ts +383 -10
  361. package/src/Latch.ts +112 -0
  362. package/src/LayerMap.ts +5 -5
  363. package/src/LogLevel.ts +31 -0
  364. package/src/Logger.ts +5 -5
  365. package/src/Metric.ts +4 -4
  366. package/src/Pipeable.ts +32 -1
  367. package/src/Pool.ts +13 -11
  368. package/src/PubSub.ts +10 -9
  369. package/src/Random.ts +5 -14
  370. package/src/RcMap.ts +5 -5
  371. package/src/RcRef.ts +1 -1
  372. package/src/Request.ts +3 -2
  373. package/src/RequestResolver.ts +9 -29
  374. package/src/Schedule.ts +261 -140
  375. package/src/Schema.ts +571 -109
  376. package/src/SchemaGetter.ts +12 -14
  377. package/src/SchemaRepresentation.ts +5 -2
  378. package/src/SchemaTransformation.ts +104 -0
  379. package/src/ScopedCache.ts +3 -3
  380. package/src/Semaphore.ts +356 -0
  381. package/src/Stream.ts +43 -42
  382. package/src/Struct.ts +26 -0
  383. package/src/SubscriptionRef.ts +3 -2
  384. package/src/SynchronizedRef.ts +3 -2
  385. package/src/Types.ts +9 -0
  386. package/src/index.ts +151 -6
  387. package/src/internal/core.ts +10 -2
  388. package/src/internal/dateTime.ts +9 -30
  389. package/src/internal/effect.ts +24 -23
  390. package/src/internal/random.ts +20 -0
  391. package/src/internal/rcRef.ts +4 -3
  392. package/src/testing/TestClock.ts +13 -11
  393. package/src/testing/TestSchema.ts +8 -8
  394. package/src/unstable/ai/AiError.ts +2 -2
  395. package/src/unstable/ai/Chat.ts +12 -11
  396. package/src/unstable/ai/LanguageModel.ts +3 -3
  397. package/src/unstable/ai/McpServer.ts +2 -2
  398. package/src/unstable/ai/Prompt.ts +37 -37
  399. package/src/unstable/ai/Response.ts +25 -25
  400. package/src/unstable/cluster/ClusterCron.ts +2 -2
  401. package/src/unstable/cluster/ClusterWorkflowEngine.ts +3 -2
  402. package/src/unstable/cluster/Entity.ts +7 -6
  403. package/src/unstable/cluster/EntityResource.ts +4 -4
  404. package/src/unstable/cluster/Envelope.ts +1 -1
  405. package/src/unstable/cluster/K8sHttpClient.ts +1 -1
  406. package/src/unstable/cluster/MessageStorage.ts +3 -5
  407. package/src/unstable/cluster/Runners.ts +6 -5
  408. package/src/unstable/cluster/Sharding.ts +11 -9
  409. package/src/unstable/cluster/ShardingConfig.ts +10 -11
  410. package/src/unstable/cluster/SqlRunnerStorage.ts +1 -1
  411. package/src/unstable/cluster/internal/entityManager.ts +9 -8
  412. package/src/unstable/cluster/internal/entityReaper.ts +2 -1
  413. package/src/unstable/cluster/internal/resourceRef.ts +2 -1
  414. package/src/unstable/encoding/Sse.ts +2 -4
  415. package/src/unstable/eventlog/EventLog.ts +2 -1
  416. package/src/unstable/http/Cookies.ts +3 -3
  417. package/src/unstable/http/HttpClient.ts +4 -4
  418. package/src/unstable/http/HttpClientRequest.ts +15 -11
  419. package/src/unstable/http/HttpEffect.ts +17 -25
  420. package/src/unstable/http/HttpMethod.ts +16 -4
  421. package/src/unstable/http/Multipart.ts +2 -2
  422. package/src/unstable/http/UrlParams.ts +1 -1
  423. package/src/unstable/httpapi/HttpApiBuilder.ts +2 -2
  424. package/src/unstable/httpapi/HttpApiScalar.ts +6 -0
  425. package/src/unstable/observability/Otlp.ts +12 -12
  426. package/src/unstable/observability/OtlpExporter.ts +3 -3
  427. package/src/unstable/observability/OtlpLogger.ts +4 -4
  428. package/src/unstable/observability/OtlpMetrics.ts +4 -4
  429. package/src/unstable/observability/OtlpTracer.ts +4 -4
  430. package/src/unstable/persistence/KeyValueStore.ts +4 -4
  431. package/src/unstable/persistence/Persistable.ts +2 -2
  432. package/src/unstable/persistence/PersistedCache.ts +20 -9
  433. package/src/unstable/persistence/PersistedQueue.ts +25 -24
  434. package/src/unstable/persistence/Persistence.ts +3 -3
  435. package/src/unstable/persistence/RateLimiter.ts +4 -4
  436. package/src/unstable/process/ChildProcess.ts +1 -1
  437. package/src/unstable/process/ChildProcessSpawner.ts +6 -0
  438. package/src/unstable/reactivity/Atom.ts +13 -13
  439. package/src/unstable/reactivity/AtomHttpApi.ts +3 -3
  440. package/src/unstable/reactivity/AtomRpc.ts +3 -3
  441. package/src/unstable/reactivity/index.ts +2 -2
  442. package/src/unstable/rpc/Rpc.ts +3 -3
  443. package/src/unstable/rpc/RpcClient.ts +12 -54
  444. package/src/unstable/rpc/RpcServer.ts +6 -4
  445. package/src/unstable/rpc/Utils.ts +2 -1
  446. package/src/unstable/socket/Socket.ts +7 -6
  447. package/src/unstable/sql/SqlModel.ts +5 -5
  448. package/src/unstable/sql/SqlSchema.ts +41 -25
  449. package/src/unstable/sql/Statement.ts +0 -1
  450. package/src/unstable/workers/Worker.ts +2 -1
  451. package/src/unstable/workflow/DurableClock.ts +8 -8
  452. package/src/unstable/workflow/DurableDeferred.ts +2 -2
  453. package/src/unstable/workflow/WorkflowEngine.ts +3 -2
  454. package/dist/PartitionedSemaphore.d.ts +0 -52
  455. package/dist/PartitionedSemaphore.d.ts.map +0 -1
  456. package/dist/PartitionedSemaphore.js.map +0 -1
  457. package/dist/encoding/Base64.d.ts +0 -67
  458. package/dist/encoding/Base64.d.ts.map +0 -1
  459. package/dist/encoding/Base64.js +0 -146
  460. package/dist/encoding/Base64.js.map +0 -1
  461. package/dist/encoding/Base64Url.d.ts +0 -60
  462. package/dist/encoding/Base64Url.d.ts.map +0 -1
  463. package/dist/encoding/Base64Url.js +0 -89
  464. package/dist/encoding/Base64Url.js.map +0 -1
  465. package/dist/encoding/EncodingError.d.ts +0 -31
  466. package/dist/encoding/EncodingError.d.ts.map +0 -1
  467. package/dist/encoding/EncodingError.js +0 -22
  468. package/dist/encoding/EncodingError.js.map +0 -1
  469. package/dist/encoding/Hex.d.ts +0 -61
  470. package/dist/encoding/Hex.d.ts.map +0 -1
  471. package/dist/encoding/Hex.js +0 -115
  472. package/dist/encoding/Hex.js.map +0 -1
  473. package/dist/encoding/index.d.ts +0 -26
  474. package/dist/encoding/index.d.ts.map +0 -1
  475. package/dist/encoding/index.js +0 -27
  476. package/dist/encoding/index.js.map +0 -1
  477. package/src/PartitionedSemaphore.ts +0 -182
  478. package/src/encoding/Base64.ts +0 -366
  479. package/src/encoding/Base64Url.ts +0 -104
  480. package/src/encoding/EncodingError.ts +0 -35
  481. package/src/encoding/Hex.ts +0 -390
  482. package/src/encoding/index.ts +0 -31
package/dist/Schema.js CHANGED
@@ -2,17 +2,20 @@
2
2
  * @since 4.0.0
3
3
  */
4
4
  import * as Arr from "./Array.js";
5
+ import * as BigDecimal_ from "./BigDecimal.js";
5
6
  import * as Cause_ from "./Cause.js";
6
7
  import * as Data from "./Data.js";
7
8
  import * as DateTime from "./DateTime.js";
8
9
  import * as Duration_ from "./Duration.js";
9
10
  import * as Effect from "./Effect.js";
10
- import * as Base64 from "./encoding/Base64.js";
11
+ import * as Encoding from "./Encoding.js";
11
12
  import * as Equal from "./Equal.js";
12
13
  import * as Equivalence from "./Equivalence.js";
13
14
  import * as Exit_ from "./Exit.js";
14
15
  import { format, formatDate, formatPropertyKey } from "./Formatter.js";
15
16
  import { identity } from "./Function.js";
17
+ import * as HashMap_ from "./HashMap.js";
18
+ import * as HashSet_ from "./HashSet.js";
16
19
  import * as core from "./internal/core.js";
17
20
  import * as InternalAnnotations from "./internal/schema/annotations.js";
18
21
  import * as InternalArbitrary from "./internal/schema/arbitrary.js";
@@ -2528,6 +2531,58 @@ export const isBetweenBigInt = /*#__PURE__*/makeIsBetween({
2528
2531
  }
2529
2532
  })
2530
2533
  });
2534
+ /**
2535
+ * Validates that a BigDecimal is greater than the specified value (exclusive).
2536
+ *
2537
+ * @category BigDecimal checks
2538
+ * @since 4.0.0
2539
+ */
2540
+ export const isGreaterThanBigDecimal = /*#__PURE__*/makeIsGreaterThan({
2541
+ order: BigDecimal_.Order,
2542
+ formatter: bd => BigDecimal_.format(bd)
2543
+ });
2544
+ /**
2545
+ * Validates that a BigDecimal is greater than or equal to the specified value
2546
+ * (inclusive).
2547
+ *
2548
+ * @category BigDecimal checks
2549
+ * @since 4.0.0
2550
+ */
2551
+ export const isGreaterThanOrEqualToBigDecimal = /*#__PURE__*/makeIsGreaterThanOrEqualTo({
2552
+ order: BigDecimal_.Order,
2553
+ formatter: bd => BigDecimal_.format(bd)
2554
+ });
2555
+ /**
2556
+ * Validates that a BigDecimal is less than the specified value (exclusive).
2557
+ *
2558
+ * @category BigDecimal checks
2559
+ * @since 4.0.0
2560
+ */
2561
+ export const isLessThanBigDecimal = /*#__PURE__*/makeIsLessThan({
2562
+ order: BigDecimal_.Order,
2563
+ formatter: bd => BigDecimal_.format(bd)
2564
+ });
2565
+ /**
2566
+ * Validates that a BigDecimal is less than or equal to the specified value
2567
+ * (inclusive).
2568
+ *
2569
+ * @category BigDecimal checks
2570
+ * @since 4.0.0
2571
+ */
2572
+ export const isLessThanOrEqualToBigDecimal = /*#__PURE__*/makeIsLessThanOrEqualTo({
2573
+ order: BigDecimal_.Order,
2574
+ formatter: bd => BigDecimal_.format(bd)
2575
+ });
2576
+ /**
2577
+ * Validates that a BigDecimal is within a specified range.
2578
+ *
2579
+ * @category BigDecimal checks
2580
+ * @since 4.0.0
2581
+ */
2582
+ export const isBetweenBigDecimal = /*#__PURE__*/makeIsBetween({
2583
+ order: BigDecimal_.Order,
2584
+ formatter: bd => BigDecimal_.format(bd)
2585
+ });
2531
2586
  /**
2532
2587
  * Validates that a value has at least the specified length. Works with strings
2533
2588
  * and arrays.
@@ -3225,10 +3280,10 @@ export function RedactedFromValue(value, options) {
3225
3280
  }));
3226
3281
  }
3227
3282
  /**
3228
- * @category CauseFailure
3283
+ * @category CauseReason
3229
3284
  * @since 4.0.0
3230
3285
  */
3231
- export function CauseFailure(error, defect) {
3286
+ export function CauseReason(error, defect) {
3232
3287
  const schema = declareConstructor()([error, defect], ([error, defect]) => (input, ast, options) => {
3233
3288
  if (!Cause_.isReason(input)) {
3234
3289
  return Effect.fail(new Issue.InvalidType(ast, Option_.some(input)));
@@ -3252,7 +3307,7 @@ export function CauseFailure(error, defect) {
3252
3307
  _tag: "effect/Cause/Failure"
3253
3308
  },
3254
3309
  generation: {
3255
- runtime: `Schema.CauseFailure(?, ?)`,
3310
+ runtime: `Schema.CauseReason(?, ?)`,
3256
3311
  Type: `Cause.Failure<?, ?>`,
3257
3312
  importDeclaration: `import * as Cause from "effect/Cause"`
3258
3313
  },
@@ -3279,16 +3334,16 @@ export function CauseFailure(error, defect) {
3279
3334
  },
3280
3335
  encode: identity
3281
3336
  })),
3282
- toArbitrary: ([error, defect]) => causeFailureToArbitrary(error, defect),
3283
- toEquivalence: ([error, defect]) => causeFailureToEquivalence(error, defect),
3284
- toFormatter: ([error, defect]) => causeFailureToFormatter(error, defect)
3337
+ toArbitrary: ([error, defect]) => causeReasonToArbitrary(error, defect),
3338
+ toEquivalence: ([error, defect]) => causeReasonToEquivalence(error, defect),
3339
+ toFormatter: ([error, defect]) => causeReasonToFormatter(error, defect)
3285
3340
  });
3286
3341
  return make(schema.ast, {
3287
3342
  error,
3288
3343
  defect
3289
3344
  });
3290
3345
  }
3291
- function causeFailureToArbitrary(error, defect) {
3346
+ function causeReasonToArbitrary(error, defect) {
3292
3347
  return (fc, ctx) => {
3293
3348
  return fc.oneof(ctx?.isSuspend ? {
3294
3349
  maxDepth: 2,
@@ -3298,7 +3353,7 @@ function causeFailureToArbitrary(error, defect) {
3298
3353
  }).map(Cause_.makeInterruptReason), error.map(e => Cause_.makeFailReason(e)), defect.map(d => Cause_.makeDieReason(d)));
3299
3354
  };
3300
3355
  }
3301
- function causeFailureToEquivalence(error, defect) {
3356
+ function causeReasonToEquivalence(error, defect) {
3302
3357
  return (a, b) => {
3303
3358
  if (a._tag !== b._tag) return false;
3304
3359
  switch (a._tag) {
@@ -3311,7 +3366,7 @@ function causeFailureToEquivalence(error, defect) {
3311
3366
  }
3312
3367
  };
3313
3368
  }
3314
- function causeFailureToFormatter(error, defect) {
3369
+ function causeReasonToFormatter(error, defect) {
3315
3370
  return t => {
3316
3371
  switch (t._tag) {
3317
3372
  case "Fail":
@@ -3328,15 +3383,17 @@ function causeFailureToFormatter(error, defect) {
3328
3383
  * @since 4.0.0
3329
3384
  */
3330
3385
  export function Cause(error, defect) {
3331
- const schema = declareConstructor()([error, defect], ([error, defect]) => (input, ast, options) => {
3332
- if (!Cause_.isCause(input)) {
3333
- return Effect.fail(new Issue.InvalidType(ast, Option_.some(input)));
3334
- }
3335
- const failures = Array(CauseFailure(error, defect));
3336
- return Effect.mapBothEager(Parser.decodeUnknownEffect(failures)(input.reasons, options), {
3337
- onSuccess: Cause_.fromReasons,
3338
- onFailure: issue => new Issue.Composite(ast, Option_.some(input), [new Issue.Pointer(["failures"], issue)])
3339
- });
3386
+ const schema = declareConstructor()([error, defect], ([error, defect]) => {
3387
+ const failures = Array(CauseReason(error, defect));
3388
+ return (input, ast, options) => {
3389
+ if (!Cause_.isCause(input)) {
3390
+ return Effect.fail(new Issue.InvalidType(ast, Option_.some(input)));
3391
+ }
3392
+ return Effect.mapBothEager(Parser.decodeUnknownEffect(failures)(input.reasons, options), {
3393
+ onSuccess: Cause_.fromReasons,
3394
+ onFailure: issue => new Issue.Composite(ast, Option_.some(input), [new Issue.Pointer(["failures"], issue)])
3395
+ });
3396
+ };
3340
3397
  }, {
3341
3398
  typeConstructor: {
3342
3399
  _tag: "effect/Cause"
@@ -3347,7 +3404,7 @@ export function Cause(error, defect) {
3347
3404
  importDeclaration: `import * as Cause from "effect/Cause"`
3348
3405
  },
3349
3406
  expected: "Cause",
3350
- toCodec: ([error, defect]) => link()(Array(CauseFailure(error, defect)), Transformation.transform({
3407
+ toCodec: ([error, defect]) => link()(Array(CauseReason(error, defect)), Transformation.transform({
3351
3408
  decode: Cause_.fromReasons,
3352
3409
  encode: ({
3353
3410
  reasons: failures
@@ -3364,16 +3421,16 @@ export function Cause(error, defect) {
3364
3421
  }
3365
3422
  function causeToArbitrary(error, defect) {
3366
3423
  return (fc, ctx) => {
3367
- return fc.array(causeFailureToArbitrary(error, defect)(fc, ctx)).map(Cause_.fromReasons);
3424
+ return fc.array(causeReasonToArbitrary(error, defect)(fc, ctx)).map(Cause_.fromReasons);
3368
3425
  };
3369
3426
  }
3370
3427
  function causeToEquivalence(error, defect) {
3371
- const failures = Equivalence.Array(causeFailureToEquivalence(error, defect));
3428
+ const failures = Equivalence.Array(causeReasonToEquivalence(error, defect));
3372
3429
  return (a, b) => failures(a.reasons, b.reasons);
3373
3430
  }
3374
3431
  function causeToFormatter(error, defect) {
3375
- const causeFailure = causeFailureToFormatter(error, defect);
3376
- return t => `Cause([${t.reasons.map(causeFailure).join(", ")}])`;
3432
+ const causeReason = causeReasonToFormatter(error, defect);
3433
+ return t => `Cause([${t.reasons.map(causeReason).join(", ")}])`;
3377
3434
  }
3378
3435
  const ErrorJsonEncoded = /*#__PURE__*/Struct({
3379
3436
  message: String,
@@ -3459,23 +3516,25 @@ export const DefectWithStack = /*#__PURE__*/Union([/*#__PURE__*/ErrorJsonEncoded
3459
3516
  * @since 4.0.0
3460
3517
  */
3461
3518
  export function Exit(value, error, defect) {
3462
- const schema = declareConstructor()([value, error, defect], ([value, error, defect]) => (input, ast, options) => {
3463
- if (!Exit_.isExit(input)) {
3464
- return Effect.fail(new Issue.InvalidType(ast, Option_.some(input)));
3465
- }
3519
+ const schema = declareConstructor()([value, error, defect], ([value, error, defect]) => {
3466
3520
  const cause = Cause(error, defect);
3467
- switch (input._tag) {
3468
- case "Success":
3469
- return Effect.mapBothEager(Parser.decodeUnknownEffect(value)(input.value, options), {
3470
- onSuccess: Exit_.succeed,
3471
- onFailure: issue => new Issue.Composite(ast, Option_.some(input), [new Issue.Pointer(["value"], issue)])
3472
- });
3473
- case "Failure":
3474
- return Effect.mapBothEager(Parser.decodeUnknownEffect(cause)(input.cause, options), {
3475
- onSuccess: Exit_.failCause,
3476
- onFailure: issue => new Issue.Composite(ast, Option_.some(input), [new Issue.Pointer(["cause"], issue)])
3477
- });
3478
- }
3521
+ return (input, ast, options) => {
3522
+ if (!Exit_.isExit(input)) {
3523
+ return Effect.fail(new Issue.InvalidType(ast, Option_.some(input)));
3524
+ }
3525
+ switch (input._tag) {
3526
+ case "Success":
3527
+ return Effect.mapBothEager(Parser.decodeUnknownEffect(value)(input.value, options), {
3528
+ onSuccess: Exit_.succeed,
3529
+ onFailure: issue => new Issue.Composite(ast, Option_.some(input), [new Issue.Pointer(["value"], issue)])
3530
+ });
3531
+ case "Failure":
3532
+ return Effect.mapBothEager(Parser.decodeUnknownEffect(cause)(input.cause, options), {
3533
+ onSuccess: Exit_.failCause,
3534
+ onFailure: issue => new Issue.Composite(ast, Option_.some(input), [new Issue.Pointer(["cause"], issue)])
3535
+ });
3536
+ }
3537
+ };
3479
3538
  }, {
3480
3539
  typeConstructor: {
3481
3540
  _tag: "effect/Exit"
@@ -3544,15 +3603,17 @@ export function Exit(value, error, defect) {
3544
3603
  * @since 4.0.0
3545
3604
  */
3546
3605
  export function ReadonlyMap(key, value) {
3547
- const schema = declareConstructor()([key, value], ([key, value]) => (input, ast, options) => {
3548
- if (input instanceof globalThis.Map) {
3549
- const array = Array(Tuple([key, value]));
3550
- return Effect.mapBothEager(Parser.decodeUnknownEffect(array)([...input], options), {
3551
- onSuccess: array => new globalThis.Map(array),
3552
- onFailure: issue => new Issue.Composite(ast, Option_.some(input), [new Issue.Pointer(["entries"], issue)])
3553
- });
3554
- }
3555
- return Effect.fail(new Issue.InvalidType(ast, Option_.some(input)));
3606
+ const schema = declareConstructor()([key, value], ([key, value]) => {
3607
+ const array = Array(Tuple([key, value]));
3608
+ return (input, ast, options) => {
3609
+ if (input instanceof globalThis.Map) {
3610
+ return Effect.mapBothEager(Parser.decodeUnknownEffect(array)([...input], options), {
3611
+ onSuccess: array => new globalThis.Map(array),
3612
+ onFailure: issue => new Issue.Composite(ast, Option_.some(input), [new Issue.Pointer(["entries"], issue)])
3613
+ });
3614
+ }
3615
+ return Effect.fail(new Issue.InvalidType(ast, Option_.some(input)));
3616
+ };
3556
3617
  }, {
3557
3618
  typeConstructor: {
3558
3619
  _tag: "ReadonlyMap"
@@ -3587,20 +3648,76 @@ export function ReadonlyMap(key, value) {
3587
3648
  value
3588
3649
  });
3589
3650
  }
3651
+ /**
3652
+ * Creates a schema that validates a `HashMap` where keys and values must
3653
+ * conform to the provided schemas.
3654
+ *
3655
+ * @category HashMap
3656
+ * @since 4.0.0
3657
+ */
3658
+ export function HashMap(key, value) {
3659
+ const schema = declareConstructor()([key, value], ([key, value]) => {
3660
+ const entries = Array(Tuple([key, value]));
3661
+ return (input, ast, options) => {
3662
+ if (HashMap_.isHashMap(input)) {
3663
+ return Effect.mapBothEager(Parser.decodeUnknownEffect(entries)(HashMap_.toEntries(input), options), {
3664
+ onSuccess: HashMap_.fromIterable,
3665
+ onFailure: issue => new Issue.Composite(ast, Option_.some(input), [new Issue.Pointer(["entries"], issue)])
3666
+ });
3667
+ }
3668
+ return Effect.fail(new Issue.InvalidType(ast, Option_.some(input)));
3669
+ };
3670
+ }, {
3671
+ typeConstructor: {
3672
+ _tag: "effect/HashMap"
3673
+ },
3674
+ generation: {
3675
+ runtime: `Schema.HashMap(?, ?)`,
3676
+ Type: `HashMap.HashMap<?, ?>`,
3677
+ importDeclaration: `import * as HashMap from "effect/HashMap"`
3678
+ },
3679
+ expected: "HashMap",
3680
+ toCodec: ([key, value]) => link()(Array(Tuple([key, value])), Transformation.transform({
3681
+ decode: HashMap_.fromIterable,
3682
+ encode: HashMap_.toEntries
3683
+ })),
3684
+ toArbitrary: ([key, value]) => (fc, ctx) => {
3685
+ return fc.oneof(ctx?.isSuspend ? {
3686
+ maxDepth: 2,
3687
+ depthIdentifier: "HashMap"
3688
+ } : {}, fc.constant([]), fc.array(fc.tuple(key, value), ctx?.constraints?.array)).map(HashMap_.fromIterable);
3689
+ },
3690
+ toEquivalence: ([key, value]) => Equal.makeCompareMap(key, value),
3691
+ toFormatter: ([key, value]) => t => {
3692
+ const size = HashMap_.size(t);
3693
+ if (size === 0) {
3694
+ return "HashMap(0) {}";
3695
+ }
3696
+ const entries = HashMap_.toEntries(t).sort().map(([k, v]) => `${key(k)} => ${value(v)}`);
3697
+ return `HashMap(${size}) { ${entries.join(", ")} }`;
3698
+ }
3699
+ });
3700
+ return make(schema.ast, {
3701
+ key,
3702
+ value
3703
+ });
3704
+ }
3590
3705
  /**
3591
3706
  * @category ReadonlySet
3592
3707
  * @since 4.0.0
3593
3708
  */
3594
3709
  export function ReadonlySet(value) {
3595
- const schema = declareConstructor()([value], ([value]) => (input, ast, options) => {
3596
- if (input instanceof globalThis.Set) {
3597
- const array = Array(value);
3598
- return Effect.mapBothEager(Parser.decodeUnknownEffect(array)([...input], options), {
3599
- onSuccess: array => new globalThis.Set(array),
3600
- onFailure: issue => new Issue.Composite(ast, Option_.some(input), [new Issue.Pointer(["values"], issue)])
3601
- });
3602
- }
3603
- return Effect.fail(new Issue.InvalidType(ast, Option_.some(input)));
3710
+ const schema = declareConstructor()([value], ([value]) => {
3711
+ const array = Array(value);
3712
+ return (input, ast, options) => {
3713
+ if (input instanceof globalThis.Set) {
3714
+ return Effect.mapBothEager(Parser.decodeUnknownEffect(array)([...input], options), {
3715
+ onSuccess: array => new globalThis.Set(array),
3716
+ onFailure: issue => new Issue.Composite(ast, Option_.some(input), [new Issue.Pointer(["values"], issue)])
3717
+ });
3718
+ }
3719
+ return Effect.fail(new Issue.InvalidType(ast, Option_.some(input)));
3720
+ };
3604
3721
  }, {
3605
3722
  typeConstructor: {
3606
3723
  _tag: "ReadonlySet"
@@ -3634,6 +3751,58 @@ export function ReadonlySet(value) {
3634
3751
  value
3635
3752
  });
3636
3753
  }
3754
+ /**
3755
+ * Creates a schema that validates a `HashSet` where values must conform to the
3756
+ * provided schema.
3757
+ *
3758
+ * @category HashSet
3759
+ * @since 4.0.0
3760
+ */
3761
+ export function HashSet(value) {
3762
+ const schema = declareConstructor()([value], ([value]) => {
3763
+ const values = Array(value);
3764
+ return (input, ast, options) => {
3765
+ if (HashSet_.isHashSet(input)) {
3766
+ return Effect.mapBothEager(Parser.decodeUnknownEffect(values)(Arr.fromIterable(input), options), {
3767
+ onSuccess: HashSet_.fromIterable,
3768
+ onFailure: issue => new Issue.Composite(ast, Option_.some(input), [new Issue.Pointer(["values"], issue)])
3769
+ });
3770
+ }
3771
+ return Effect.fail(new Issue.InvalidType(ast, Option_.some(input)));
3772
+ };
3773
+ }, {
3774
+ typeConstructor: {
3775
+ _tag: "HashSet"
3776
+ },
3777
+ generation: {
3778
+ runtime: `Schema.HashSet(?)`,
3779
+ Type: `HashSet.HashSet<?>`
3780
+ },
3781
+ expected: "HashSet",
3782
+ toCodec: ([value]) => link()(Array(value), Transformation.transform({
3783
+ decode: HashSet_.fromIterable,
3784
+ encode: Arr.fromIterable
3785
+ })),
3786
+ toArbitrary: ([value]) => (fc, ctx) => {
3787
+ return fc.oneof(ctx?.isSuspend ? {
3788
+ maxDepth: 2,
3789
+ depthIdentifier: "HashSet"
3790
+ } : {}, fc.constant([]), fc.array(value, ctx?.constraints?.array)).map(HashSet_.fromIterable);
3791
+ },
3792
+ toEquivalence: ([value]) => Equal.makeCompareSet(value),
3793
+ toFormatter: ([value]) => t => {
3794
+ const size = HashSet_.size(t);
3795
+ if (size === 0) {
3796
+ return "HashSet(0) {}";
3797
+ }
3798
+ const values = globalThis.Array.from(t).sort().map(v => `${value(v)}`);
3799
+ return `HashSet(${size}) { ${values.join(", ")} }`;
3800
+ }
3801
+ });
3802
+ return make(schema.ast, {
3803
+ value
3804
+ });
3805
+ }
3637
3806
  /**
3638
3807
  * @since 4.0.0
3639
3808
  */
@@ -3842,6 +4011,35 @@ export const DurationFromNanos = /*#__PURE__*/BigInt.check(isGreaterThanOrEqualT
3842
4011
  * @since 4.0.0
3843
4012
  */
3844
4013
  export const DurationFromMillis = /*#__PURE__*/Number.check(isGreaterThanOrEqualTo(0)).pipe(/*#__PURE__*/decodeTo(Duration, Transformation.durationFromMillis));
4014
+ /**
4015
+ * A schema for `BigDecimal` values.
4016
+ *
4017
+ * **Default JSON serializer**
4018
+ *
4019
+ * - encodes `BigDecimal` as a `string`
4020
+ *
4021
+ * @since 4.0.0
4022
+ */
4023
+ export const BigDecimal = /*#__PURE__*/declare(BigDecimal_.isBigDecimal, {
4024
+ typeConstructor: {
4025
+ _tag: "effect/BigDecimal"
4026
+ },
4027
+ generation: {
4028
+ runtime: `Schema.BigDecimal`,
4029
+ Type: `BigDecimal.BigDecimal`,
4030
+ importDeclaration: `import * as BigDecimal from "effect/BigDecimal"`
4031
+ },
4032
+ expected: "BigDecimal",
4033
+ toCodecJson: () => link()(String.annotate({
4034
+ expected: "a string that will be decoded as a BigDecimal"
4035
+ }), Transformation.bigDecimalFromString),
4036
+ toArbitrary: () => fc => fc.tuple(fc.bigInt(), fc.integer({
4037
+ min: 0,
4038
+ max: 20
4039
+ })).map(([value, scale]) => BigDecimal_.make(value, scale)),
4040
+ toFormatter: () => bd => BigDecimal_.format(bd),
4041
+ toEquivalence: () => BigDecimal_.Equivalence
4042
+ });
3845
4043
  /**
3846
4044
  * A transformation schema that decodes a JSON-encoded string into an `unknown` value.
3847
4045
  *
@@ -3953,7 +4151,7 @@ export const File = /*#__PURE__*/instanceOf(globalThis.File, {
3953
4151
  name: String,
3954
4152
  lastModified: Number
3955
4153
  }), Transformation.transformOrFail({
3956
- decode: e => Result_.match(Base64.decode(e.data), {
4154
+ decode: e => Result_.match(Encoding.decodeBase64(e.data), {
3957
4155
  onFailure: error => Effect.fail(new Issue.InvalidValue(Option_.some(e.data), {
3958
4156
  message: error.message
3959
4157
  })),
@@ -3969,7 +4167,7 @@ export const File = /*#__PURE__*/instanceOf(globalThis.File, {
3969
4167
  try: async () => {
3970
4168
  const bytes = new globalThis.Uint8Array(await file.arrayBuffer());
3971
4169
  return {
3972
- data: Base64.encode(bytes),
4170
+ data: Encoding.encodeBase64(bytes),
3973
4171
  type: file.type,
3974
4172
  name: file.name,
3975
4173
  lastModified: file.lastModified
@@ -4391,10 +4589,7 @@ export const DateTimeUtc = /*#__PURE__*/declare(u => DateTime.isDateTime(u) && D
4391
4589
  importDeclaration: `import * as DateTime from "effect/DateTime"`
4392
4590
  },
4393
4591
  expected: "DateTime.Utc",
4394
- toCodecJson: () => link()(String, {
4395
- decode: Getter.dateTimeUtcFromInput(),
4396
- encode: Getter.transform(DateTime.formatIso)
4397
- }),
4592
+ toCodecJson: () => link()(String, Transformation.dateTimeUtcFromString),
4398
4593
  toArbitrary: () => (fc, ctx) => fc.date({
4399
4594
  noInvalidDate: true,
4400
4595
  ...ctx?.constraints?.date
@@ -4434,10 +4629,7 @@ export const DateTimeUtcFromDate = /*#__PURE__*/DateValid.pipe(/*#__PURE__*/deco
4434
4629
  */
4435
4630
  export const DateTimeUtcFromString = /*#__PURE__*/String.annotate({
4436
4631
  expected: "a string that will be decoded as a DateTime.Utc"
4437
- }).pipe(/*#__PURE__*/decodeTo(DateTimeUtc, /*#__PURE__*/Transformation.transform({
4438
- decode: DateTime.makeUnsafe,
4439
- encode: DateTime.formatIso
4440
- })));
4632
+ }).pipe(/*#__PURE__*/decodeTo(DateTimeUtc, Transformation.dateTimeUtcFromString));
4441
4633
  /**
4442
4634
  * A transformation schema that decodes a number into a `DateTime.Utc`.
4443
4635
  *
@@ -4454,18 +4646,140 @@ export const DateTimeUtcFromMillis = /*#__PURE__*/Number.pipe(/*#__PURE__*/decod
4454
4646
  decode: /*#__PURE__*/Getter.dateTimeUtcFromInput(),
4455
4647
  encode: /*#__PURE__*/Getter.transform(DateTime.toEpochMillis)
4456
4648
  }));
4649
+ /**
4650
+ * A schema for `DateTime.TimeZone.Offset` values.
4651
+ *
4652
+ * **Default JSON serializer**
4653
+ *
4654
+ * - encodes `DateTime.TimeZone.Offset` as a number (offset in milliseconds)
4655
+ *
4656
+ * @category DateTime
4657
+ * @since 4.0.0
4658
+ */
4659
+ export const TimeZoneOffset = /*#__PURE__*/declare(DateTime.isTimeZoneOffset, {
4660
+ typeConstructor: {
4661
+ _tag: "DateTime.TimeZone.Offset"
4662
+ },
4663
+ generation: {
4664
+ runtime: `Schema.TimeZoneOffset`,
4665
+ Type: `DateTime.TimeZone.Offset`,
4666
+ importDeclaration: `import * as DateTime from "effect/DateTime"`
4667
+ },
4668
+ expected: "DateTime.TimeZone.Offset",
4669
+ toCodecJson: () => link()(Number, Transformation.timeZoneOffsetFromNumber),
4670
+ toArbitrary: () => fc => fc.integer({
4671
+ min: -12 * 60 * 60 * 1000,
4672
+ max: 14 * 60 * 60 * 1000
4673
+ }).map(n => DateTime.zoneMakeOffset(n)),
4674
+ toFormatter: () => tz => DateTime.zoneToString(tz),
4675
+ toEquivalence: () => (a, b) => a.offset === b.offset
4676
+ });
4677
+ /**
4678
+ * A schema for `DateTime.TimeZone.Named` values.
4679
+ *
4680
+ * **Default JSON serializer**
4681
+ *
4682
+ * - encodes `DateTime.TimeZone.Named` as a string (IANA time zone identifier)
4683
+ *
4684
+ * @category DateTime
4685
+ * @since 4.0.0
4686
+ */
4687
+ export const TimeZoneNamed = /*#__PURE__*/declare(DateTime.isTimeZoneNamed, {
4688
+ typeConstructor: {
4689
+ _tag: "DateTime.TimeZone.Named"
4690
+ },
4691
+ generation: {
4692
+ runtime: `Schema.TimeZoneNamed`,
4693
+ Type: `DateTime.TimeZone.Named`,
4694
+ importDeclaration: `import * as DateTime from "effect/DateTime"`
4695
+ },
4696
+ expected: "DateTime.TimeZone.Named",
4697
+ toCodecJson: () => link()(String.annotate({
4698
+ expected: "an IANA time zone identifier"
4699
+ }), Transformation.timeZoneNamedFromString),
4700
+ toArbitrary: () => fc => fc.constantFrom(...["UTC", "Europe/London", "America/New_York", "Asia/Tokyo", "Australia/Sydney"].map(DateTime.zoneMakeNamedUnsafe)),
4701
+ toFormatter: () => tz => DateTime.zoneToString(tz),
4702
+ toEquivalence: () => (a, b) => a.id === b.id
4703
+ });
4704
+ /**
4705
+ * A schema for `DateTime.TimeZone` values.
4706
+ *
4707
+ * **Default JSON serializer**
4708
+ *
4709
+ * - encodes `DateTime.TimeZone` as a string (IANA identifier or offset like
4710
+ * `+03:00`)
4711
+ *
4712
+ * @category DateTime
4713
+ * @since 4.0.0
4714
+ */
4715
+ export const TimeZone = /*#__PURE__*/declare(DateTime.isTimeZone, {
4716
+ typeConstructor: {
4717
+ _tag: "DateTime.TimeZone"
4718
+ },
4719
+ generation: {
4720
+ runtime: `Schema.TimeZone`,
4721
+ Type: `DateTime.TimeZone`,
4722
+ importDeclaration: `import * as DateTime from "effect/DateTime"`
4723
+ },
4724
+ expected: "DateTime.TimeZone",
4725
+ toCodecJson: () => link()(String.annotate({
4726
+ expected: "a time zone string (IANA identifier or offset like +03:00)"
4727
+ }), Transformation.timeZoneFromString),
4728
+ toArbitrary: () => fc => fc.oneof(fc.integer({
4729
+ min: -12 * 60 * 60 * 1000,
4730
+ max: 14 * 60 * 60 * 1000
4731
+ }).map(n => DateTime.zoneMakeOffset(n)), fc.constantFrom(...["UTC", "Europe/London", "America/New_York", "Asia/Tokyo", "Australia/Sydney"].map(DateTime.zoneMakeNamedUnsafe))),
4732
+ toFormatter: () => tz => DateTime.zoneToString(tz),
4733
+ toEquivalence: () => (a, b) => DateTime.zoneToString(a) === DateTime.zoneToString(b)
4734
+ });
4735
+ /**
4736
+ * A schema for `DateTime.Zoned` values.
4737
+ *
4738
+ * **Default JSON serializer**
4739
+ *
4740
+ * - encodes `DateTime.Zoned` as a string in the format
4741
+ * `YYYY-MM-DDTHH:mm:ss.sss+HH:MM[Time/Zone]`
4742
+ *
4743
+ * @category DateTime
4744
+ * @since 4.0.0
4745
+ */
4746
+ export const DateTimeZoned = /*#__PURE__*/declare(u => DateTime.isDateTime(u) && DateTime.isZoned(u), {
4747
+ typeConstructor: {
4748
+ _tag: "DateTime.Zoned"
4749
+ },
4750
+ generation: {
4751
+ runtime: `Schema.DateTimeZoned`,
4752
+ Type: `DateTime.Zoned`,
4753
+ importDeclaration: `import * as DateTime from "effect/DateTime"`
4754
+ },
4755
+ expected: "DateTime.Zoned",
4756
+ toCodecJson: () => link()(String.annotate({
4757
+ expected: "a zoned DateTime string (e.g. 2024-01-01T00:00:00.000+00:00[Europe/London])"
4758
+ }), Transformation.dateTimeZonedFromString),
4759
+ toArbitrary: () => (fc, ctx) => fc.tuple(fc.date({
4760
+ noInvalidDate: true,
4761
+ min: new globalThis.Date(-8640000000000000 + 14 * 60 * 60 * 1000),
4762
+ max: new globalThis.Date(8640000000000000 - 14 * 60 * 60 * 1000),
4763
+ ...ctx?.constraints?.date
4764
+ }), fc.constantFrom("UTC", "Europe/London", "America/New_York", "Asia/Tokyo", "Australia/Sydney")).map(([date, zone]) => DateTime.makeZonedUnsafe(date, {
4765
+ timeZone: zone
4766
+ })),
4767
+ toFormatter: () => zoned => DateTime.formatIsoZoned(zoned),
4768
+ toEquivalence: () => DateTime.Equivalence
4769
+ });
4457
4770
  const immerable = /*#__PURE__*/globalThis.Symbol.for("immer-draftable");
4458
4771
  function makeClass(Inherited, identifier, struct, annotations) {
4459
4772
  const getClassSchema = getClassSchemaFactory(struct, identifier, annotations);
4460
4773
  const ClassTypeId = getClassTypeId(identifier); // HMR support
4461
4774
  return class extends Inherited {
4462
4775
  constructor(...[input, options]) {
4776
+ const props = input ?? {};
4463
4777
  if (options?.disableValidation) {
4464
- super(input, options);
4778
+ super(props, options);
4465
4779
  } else {
4466
- const validated = struct.makeUnsafe(input, options);
4780
+ const validated = struct.makeUnsafe(props, options);
4467
4781
  super({
4468
- ...input,
4782
+ ...props,
4469
4783
  ...validated
4470
4784
  }, {
4471
4785
  ...options,