effect 4.0.0-beta.3 → 4.0.0-beta.30

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 (983) hide show
  1. package/dist/Array.d.ts +126 -299
  2. package/dist/Array.d.ts.map +1 -1
  3. package/dist/Array.js +102 -62
  4. package/dist/Array.js.map +1 -1
  5. package/dist/Brand.d.ts +1 -1
  6. package/dist/Brand.d.ts.map +1 -1
  7. package/dist/Brand.js +1 -1
  8. package/dist/Brand.js.map +1 -1
  9. package/dist/Cache.d.ts +2 -2
  10. package/dist/Cache.d.ts.map +1 -1
  11. package/dist/Cache.js +6 -5
  12. package/dist/Cache.js.map +1 -1
  13. package/dist/Cause.d.ts +2 -2
  14. package/dist/Cause.d.ts.map +1 -1
  15. package/dist/Channel.d.ts +116 -30
  16. package/dist/Channel.d.ts.map +1 -1
  17. package/dist/Channel.js +82 -37
  18. package/dist/Channel.js.map +1 -1
  19. package/dist/Chunk.d.ts +54 -247
  20. package/dist/Chunk.d.ts.map +1 -1
  21. package/dist/Chunk.js +36 -67
  22. package/dist/Chunk.js.map +1 -1
  23. package/dist/Combiner.d.ts +280 -13
  24. package/dist/Combiner.d.ts.map +1 -1
  25. package/dist/Combiner.js +198 -7
  26. package/dist/Combiner.js.map +1 -1
  27. package/dist/Config.d.ts +165 -9
  28. package/dist/Config.d.ts.map +1 -1
  29. package/dist/Config.js +65 -10
  30. package/dist/Config.js.map +1 -1
  31. package/dist/ConfigProvider.d.ts +1 -1
  32. package/dist/Cron.d.ts +1 -1
  33. package/dist/Data.d.ts +535 -366
  34. package/dist/Data.d.ts.map +1 -1
  35. package/dist/Data.js +132 -79
  36. package/dist/Data.js.map +1 -1
  37. package/dist/DateTime.d.ts +23 -161
  38. package/dist/DateTime.d.ts.map +1 -1
  39. package/dist/DateTime.js +6 -51
  40. package/dist/DateTime.js.map +1 -1
  41. package/dist/Duration.d.ts +11 -11
  42. package/dist/Duration.d.ts.map +1 -1
  43. package/dist/Duration.js +11 -11
  44. package/dist/Duration.js.map +1 -1
  45. package/dist/Effect.d.ts +1206 -924
  46. package/dist/Effect.d.ts.map +1 -1
  47. package/dist/Effect.js +390 -329
  48. package/dist/Effect.js.map +1 -1
  49. package/dist/Encoding.d.ts +194 -0
  50. package/dist/Encoding.d.ts.map +1 -0
  51. package/dist/Encoding.js +352 -0
  52. package/dist/Encoding.js.map +1 -0
  53. package/dist/Equal.d.ts +276 -109
  54. package/dist/Equal.d.ts.map +1 -1
  55. package/dist/Equal.js +124 -48
  56. package/dist/Equal.js.map +1 -1
  57. package/dist/ErrorReporter.d.ts +374 -0
  58. package/dist/ErrorReporter.d.ts.map +1 -0
  59. package/dist/ErrorReporter.js +244 -0
  60. package/dist/ErrorReporter.js.map +1 -0
  61. package/dist/Exit.d.ts +24 -12
  62. package/dist/Exit.d.ts.map +1 -1
  63. package/dist/Exit.js +8 -4
  64. package/dist/Exit.js.map +1 -1
  65. package/dist/Fiber.d.ts +3 -2
  66. package/dist/Fiber.d.ts.map +1 -1
  67. package/dist/Fiber.js.map +1 -1
  68. package/dist/FileSystem.d.ts +1 -1
  69. package/dist/FileSystem.d.ts.map +1 -1
  70. package/dist/FileSystem.js +5 -5
  71. package/dist/FileSystem.js.map +1 -1
  72. package/dist/Filter.d.ts +34 -38
  73. package/dist/Filter.d.ts.map +1 -1
  74. package/dist/Filter.js +15 -13
  75. package/dist/Filter.js.map +1 -1
  76. package/dist/Formatter.d.ts +131 -47
  77. package/dist/Formatter.d.ts.map +1 -1
  78. package/dist/Formatter.js +229 -51
  79. package/dist/Formatter.js.map +1 -1
  80. package/dist/Function.d.ts +1 -9
  81. package/dist/Function.d.ts.map +1 -1
  82. package/dist/Function.js +2 -10
  83. package/dist/Function.js.map +1 -1
  84. package/dist/Graph.d.ts +1 -1
  85. package/dist/Graph.d.ts.map +1 -1
  86. package/dist/Graph.js +5 -8
  87. package/dist/Graph.js.map +1 -1
  88. package/dist/HashMap.d.ts +15 -14
  89. package/dist/HashMap.d.ts.map +1 -1
  90. package/dist/HashMap.js +4 -4
  91. package/dist/HashMap.js.map +1 -1
  92. package/dist/Iterable.d.ts +39 -39
  93. package/dist/Iterable.d.ts.map +1 -1
  94. package/dist/Iterable.js +94 -22
  95. package/dist/Iterable.js.map +1 -1
  96. package/dist/JsonSchema.d.ts +299 -10
  97. package/dist/JsonSchema.d.ts.map +1 -1
  98. package/dist/JsonSchema.js +323 -4
  99. package/dist/JsonSchema.js.map +1 -1
  100. package/dist/Latch.d.ts +109 -0
  101. package/dist/Latch.d.ts.map +1 -0
  102. package/dist/Latch.js +72 -0
  103. package/dist/Latch.js.map +1 -0
  104. package/dist/Layer.d.ts +121 -126
  105. package/dist/Layer.d.ts.map +1 -1
  106. package/dist/Layer.js +43 -44
  107. package/dist/Layer.js.map +1 -1
  108. package/dist/LayerMap.d.ts +8 -8
  109. package/dist/LayerMap.d.ts.map +1 -1
  110. package/dist/LayerMap.js +3 -3
  111. package/dist/LogLevel.d.ts +32 -0
  112. package/dist/LogLevel.d.ts.map +1 -1
  113. package/dist/LogLevel.js +28 -100
  114. package/dist/LogLevel.js.map +1 -1
  115. package/dist/Logger.d.ts +29 -95
  116. package/dist/Logger.d.ts.map +1 -1
  117. package/dist/Logger.js +2 -3
  118. package/dist/Logger.js.map +1 -1
  119. package/dist/ManagedRuntime.d.ts +2 -2
  120. package/dist/ManagedRuntime.js +2 -2
  121. package/dist/Metric.d.ts +4 -6
  122. package/dist/Metric.d.ts.map +1 -1
  123. package/dist/Metric.js +3 -5
  124. package/dist/Metric.js.map +1 -1
  125. package/dist/Newtype.d.ts +291 -0
  126. package/dist/Newtype.d.ts.map +1 -0
  127. package/dist/Newtype.js +161 -0
  128. package/dist/Newtype.js.map +1 -0
  129. package/dist/Optic.d.ts +947 -18
  130. package/dist/Optic.d.ts.map +1 -1
  131. package/dist/Optic.js +454 -5
  132. package/dist/Optic.js.map +1 -1
  133. package/dist/Option.d.ts +23 -16
  134. package/dist/Option.d.ts.map +1 -1
  135. package/dist/Option.js +15 -9
  136. package/dist/Option.js.map +1 -1
  137. package/dist/Pipeable.d.ts +17 -0
  138. package/dist/Pipeable.d.ts.map +1 -1
  139. package/dist/Pipeable.js +19 -1
  140. package/dist/Pipeable.js.map +1 -1
  141. package/dist/PlatformError.d.ts +10 -9
  142. package/dist/PlatformError.d.ts.map +1 -1
  143. package/dist/PlatformError.js +2 -2
  144. package/dist/PlatformError.js.map +1 -1
  145. package/dist/Pool.d.ts +6 -4
  146. package/dist/Pool.d.ts.map +1 -1
  147. package/dist/Pool.js +7 -5
  148. package/dist/Pool.js.map +1 -1
  149. package/dist/PubSub.d.ts +3 -2
  150. package/dist/PubSub.d.ts.map +1 -1
  151. package/dist/PubSub.js +3 -2
  152. package/dist/PubSub.js.map +1 -1
  153. package/dist/Pull.d.ts.map +1 -1
  154. package/dist/Pull.js +1 -1
  155. package/dist/Pull.js.map +1 -1
  156. package/dist/Queue.d.ts.map +1 -1
  157. package/dist/Queue.js +0 -1
  158. package/dist/Queue.js.map +1 -1
  159. package/dist/Random.d.ts +35 -1
  160. package/dist/Random.d.ts.map +1 -1
  161. package/dist/Random.js +46 -12
  162. package/dist/Random.js.map +1 -1
  163. package/dist/RcMap.d.ts +2 -2
  164. package/dist/RcMap.d.ts.map +1 -1
  165. package/dist/RcMap.js +1 -1
  166. package/dist/RcMap.js.map +1 -1
  167. package/dist/RcRef.d.ts +1 -1
  168. package/dist/RcRef.d.ts.map +1 -1
  169. package/dist/Record.d.ts +23 -120
  170. package/dist/Record.d.ts.map +1 -1
  171. package/dist/Record.js +21 -41
  172. package/dist/Record.js.map +1 -1
  173. package/dist/Reducer.d.ts +166 -7
  174. package/dist/Reducer.d.ts.map +1 -1
  175. package/dist/Reducer.js +135 -1
  176. package/dist/Reducer.js.map +1 -1
  177. package/dist/References.d.ts +9 -4
  178. package/dist/References.d.ts.map +1 -1
  179. package/dist/References.js +6 -1
  180. package/dist/References.js.map +1 -1
  181. package/dist/Request.d.ts +1 -1
  182. package/dist/Request.d.ts.map +1 -1
  183. package/dist/Request.js +2 -1
  184. package/dist/Request.js.map +1 -1
  185. package/dist/RequestResolver.d.ts +25 -45
  186. package/dist/RequestResolver.d.ts.map +1 -1
  187. package/dist/RequestResolver.js +10 -30
  188. package/dist/RequestResolver.js.map +1 -1
  189. package/dist/Result.d.ts +1 -1
  190. package/dist/Result.d.ts.map +1 -1
  191. package/dist/Result.js +1 -2
  192. package/dist/Result.js.map +1 -1
  193. package/dist/Runtime.d.ts +66 -0
  194. package/dist/Runtime.d.ts.map +1 -1
  195. package/dist/Runtime.js +79 -6
  196. package/dist/Runtime.js.map +1 -1
  197. package/dist/Schedule.d.ts +191 -102
  198. package/dist/Schedule.d.ts.map +1 -1
  199. package/dist/Schedule.js +152 -66
  200. package/dist/Schedule.js.map +1 -1
  201. package/dist/Scheduler.d.ts +9 -0
  202. package/dist/Scheduler.d.ts.map +1 -1
  203. package/dist/Scheduler.js +11 -0
  204. package/dist/Scheduler.js.map +1 -1
  205. package/dist/Schema.d.ts +309 -88
  206. package/dist/Schema.d.ts.map +1 -1
  207. package/dist/Schema.js +499 -109
  208. package/dist/Schema.js.map +1 -1
  209. package/dist/SchemaAST.d.ts.map +1 -1
  210. package/dist/SchemaAST.js +129 -23
  211. package/dist/SchemaAST.js.map +1 -1
  212. package/dist/SchemaGetter.d.ts +5 -5
  213. package/dist/SchemaGetter.d.ts.map +1 -1
  214. package/dist/SchemaGetter.js +12 -14
  215. package/dist/SchemaGetter.js.map +1 -1
  216. package/dist/SchemaParser.d.ts +5 -0
  217. package/dist/SchemaParser.d.ts.map +1 -1
  218. package/dist/SchemaParser.js +10 -0
  219. package/dist/SchemaParser.js.map +1 -1
  220. package/dist/SchemaRepresentation.d.ts +44 -43
  221. package/dist/SchemaRepresentation.d.ts.map +1 -1
  222. package/dist/SchemaRepresentation.js +49 -24
  223. package/dist/SchemaRepresentation.js.map +1 -1
  224. package/dist/SchemaTransformation.d.ts +107 -3
  225. package/dist/SchemaTransformation.d.ts.map +1 -1
  226. package/dist/SchemaTransformation.js +159 -4
  227. package/dist/SchemaTransformation.js.map +1 -1
  228. package/dist/ScopedCache.d.ts +2 -2
  229. package/dist/ScopedCache.d.ts.map +1 -1
  230. package/dist/ScopedCache.js +1 -1
  231. package/dist/ScopedCache.js.map +1 -1
  232. package/dist/Semaphore.d.ts +211 -0
  233. package/dist/Semaphore.d.ts.map +1 -0
  234. package/dist/{PartitionedSemaphore.js → Semaphore.js} +97 -13
  235. package/dist/Semaphore.js.map +1 -0
  236. package/dist/ServiceMap.d.ts +41 -31
  237. package/dist/ServiceMap.d.ts.map +1 -1
  238. package/dist/ServiceMap.js +3 -3
  239. package/dist/ServiceMap.js.map +1 -1
  240. package/dist/Sink.d.ts +13 -13
  241. package/dist/Sink.d.ts.map +1 -1
  242. package/dist/Sink.js +53 -6
  243. package/dist/Sink.js.map +1 -1
  244. package/dist/Stdio.d.ts +16 -4
  245. package/dist/Stdio.d.ts.map +1 -1
  246. package/dist/Stdio.js +18 -0
  247. package/dist/Stdio.js.map +1 -1
  248. package/dist/Stream.d.ts +250 -428
  249. package/dist/Stream.d.ts.map +1 -1
  250. package/dist/Stream.js +137 -82
  251. package/dist/Stream.js.map +1 -1
  252. package/dist/Struct.d.ts +16 -0
  253. package/dist/Struct.d.ts.map +1 -1
  254. package/dist/Struct.js +22 -0
  255. package/dist/Struct.js.map +1 -1
  256. package/dist/SubscriptionRef.d.ts +2 -1
  257. package/dist/SubscriptionRef.d.ts.map +1 -1
  258. package/dist/SubscriptionRef.js +2 -1
  259. package/dist/SubscriptionRef.js.map +1 -1
  260. package/dist/SynchronizedRef.d.ts +2 -1
  261. package/dist/SynchronizedRef.d.ts.map +1 -1
  262. package/dist/SynchronizedRef.js +2 -1
  263. package/dist/SynchronizedRef.js.map +1 -1
  264. package/dist/Trie.d.ts +18 -17
  265. package/dist/Trie.d.ts.map +1 -1
  266. package/dist/Trie.js +5 -5
  267. package/dist/Trie.js.map +1 -1
  268. package/dist/TxChunk.d.ts +37 -37
  269. package/dist/TxChunk.d.ts.map +1 -1
  270. package/dist/TxChunk.js +3 -3
  271. package/dist/TxChunk.js.map +1 -1
  272. package/dist/TxDeferred.d.ts +328 -0
  273. package/dist/TxDeferred.d.ts.map +1 -0
  274. package/dist/TxDeferred.js +196 -0
  275. package/dist/TxDeferred.js.map +1 -0
  276. package/dist/TxHashMap.d.ts +84 -83
  277. package/dist/TxHashMap.d.ts.map +1 -1
  278. package/dist/TxHashMap.js +24 -24
  279. package/dist/TxHashMap.js.map +1 -1
  280. package/dist/TxHashSet.d.ts +35 -35
  281. package/dist/TxHashSet.d.ts.map +1 -1
  282. package/dist/TxHashSet.js +14 -14
  283. package/dist/TxHashSet.js.map +1 -1
  284. package/dist/TxPriorityQueue.d.ts +609 -0
  285. package/dist/TxPriorityQueue.d.ts.map +1 -0
  286. package/dist/TxPriorityQueue.js +415 -0
  287. package/dist/TxPriorityQueue.js.map +1 -0
  288. package/dist/TxPubSub.d.ts +585 -0
  289. package/dist/TxPubSub.d.ts.map +1 -0
  290. package/dist/TxPubSub.js +521 -0
  291. package/dist/TxPubSub.js.map +1 -0
  292. package/dist/TxQueue.d.ts +32 -32
  293. package/dist/TxQueue.d.ts.map +1 -1
  294. package/dist/TxQueue.js +26 -26
  295. package/dist/TxQueue.js.map +1 -1
  296. package/dist/TxReentrantLock.d.ts +523 -0
  297. package/dist/TxReentrantLock.d.ts.map +1 -0
  298. package/dist/TxReentrantLock.js +504 -0
  299. package/dist/TxReentrantLock.js.map +1 -0
  300. package/dist/TxRef.d.ts +34 -34
  301. package/dist/TxRef.d.ts.map +1 -1
  302. package/dist/TxRef.js +21 -14
  303. package/dist/TxRef.js.map +1 -1
  304. package/dist/TxSemaphore.d.ts +8 -8
  305. package/dist/TxSemaphore.d.ts.map +1 -1
  306. package/dist/TxSemaphore.js +7 -7
  307. package/dist/TxSemaphore.js.map +1 -1
  308. package/dist/TxSubscriptionRef.d.ts +508 -0
  309. package/dist/TxSubscriptionRef.d.ts.map +1 -0
  310. package/dist/TxSubscriptionRef.js +293 -0
  311. package/dist/TxSubscriptionRef.js.map +1 -0
  312. package/dist/Types.d.ts +80 -23
  313. package/dist/Types.d.ts.map +1 -1
  314. package/dist/Utils.d.ts +137 -65
  315. package/dist/Utils.d.ts.map +1 -1
  316. package/dist/Utils.js +38 -66
  317. package/dist/Utils.js.map +1 -1
  318. package/dist/index.d.ts +718 -23
  319. package/dist/index.d.ts.map +1 -1
  320. package/dist/index.js +718 -23
  321. package/dist/index.js.map +1 -1
  322. package/dist/internal/core.js +11 -3
  323. package/dist/internal/core.js.map +1 -1
  324. package/dist/internal/dateTime.js +3 -11
  325. package/dist/internal/dateTime.js.map +1 -1
  326. package/dist/internal/effect.js +264 -126
  327. package/dist/internal/effect.js.map +1 -1
  328. package/dist/internal/hashMap.js +5 -4
  329. package/dist/internal/hashMap.js.map +1 -1
  330. package/dist/internal/random.d.ts +2 -0
  331. package/dist/internal/random.d.ts.map +1 -0
  332. package/dist/internal/random.js +13 -0
  333. package/dist/internal/random.js.map +1 -0
  334. package/dist/internal/rcRef.js +3 -2
  335. package/dist/internal/rcRef.js.map +1 -1
  336. package/dist/internal/request.js +2 -2
  337. package/dist/internal/request.js.map +1 -1
  338. package/dist/internal/schema/annotations.js +2 -0
  339. package/dist/internal/schema/annotations.js.map +1 -1
  340. package/dist/internal/schema/representation.js +47 -106
  341. package/dist/internal/schema/representation.js.map +1 -1
  342. package/dist/internal/schema/schema.js +1 -0
  343. package/dist/internal/schema/schema.js.map +1 -1
  344. package/dist/internal/schema/to-codec.js +7 -10
  345. package/dist/internal/schema/to-codec.js.map +1 -1
  346. package/dist/internal/trie.js +5 -4
  347. package/dist/internal/trie.js.map +1 -1
  348. package/dist/testing/TestClock.d.ts +8 -7
  349. package/dist/testing/TestClock.d.ts.map +1 -1
  350. package/dist/testing/TestClock.js +6 -4
  351. package/dist/testing/TestClock.js.map +1 -1
  352. package/dist/testing/TestSchema.d.ts +266 -32
  353. package/dist/testing/TestSchema.d.ts.map +1 -1
  354. package/dist/testing/TestSchema.js +296 -23
  355. package/dist/testing/TestSchema.js.map +1 -1
  356. package/dist/testing/index.d.ts +64 -1
  357. package/dist/testing/index.d.ts.map +1 -1
  358. package/dist/testing/index.js +64 -1
  359. package/dist/testing/index.js.map +1 -1
  360. package/dist/unstable/ai/AiError.d.ts +134 -51
  361. package/dist/unstable/ai/AiError.d.ts.map +1 -1
  362. package/dist/unstable/ai/AiError.js +19 -16
  363. package/dist/unstable/ai/AiError.js.map +1 -1
  364. package/dist/unstable/ai/Chat.d.ts +5 -5
  365. package/dist/unstable/ai/Chat.d.ts.map +1 -1
  366. package/dist/unstable/ai/Chat.js +38 -44
  367. package/dist/unstable/ai/Chat.js.map +1 -1
  368. package/dist/unstable/ai/LanguageModel.d.ts +16 -30
  369. package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
  370. package/dist/unstable/ai/LanguageModel.js +97 -37
  371. package/dist/unstable/ai/LanguageModel.js.map +1 -1
  372. package/dist/unstable/ai/McpSchema.d.ts +183 -88
  373. package/dist/unstable/ai/McpSchema.d.ts.map +1 -1
  374. package/dist/unstable/ai/McpSchema.js +57 -12
  375. package/dist/unstable/ai/McpSchema.js.map +1 -1
  376. package/dist/unstable/ai/McpServer.d.ts +66 -13
  377. package/dist/unstable/ai/McpServer.d.ts.map +1 -1
  378. package/dist/unstable/ai/McpServer.js +193 -51
  379. package/dist/unstable/ai/McpServer.js.map +1 -1
  380. package/dist/unstable/ai/Model.d.ts +25 -7
  381. package/dist/unstable/ai/Model.d.ts.map +1 -1
  382. package/dist/unstable/ai/Model.js +22 -6
  383. package/dist/unstable/ai/Model.js.map +1 -1
  384. package/dist/unstable/ai/Prompt.d.ts +20 -20
  385. package/dist/unstable/ai/Prompt.d.ts.map +1 -1
  386. package/dist/unstable/ai/Response.d.ts +26 -26
  387. package/dist/unstable/ai/Response.d.ts.map +1 -1
  388. package/dist/unstable/ai/Response.js +1 -1
  389. package/dist/unstable/ai/Response.js.map +1 -1
  390. package/dist/unstable/ai/Tool.d.ts +20 -4
  391. package/dist/unstable/ai/Tool.d.ts.map +1 -1
  392. package/dist/unstable/ai/Tool.js +14 -9
  393. package/dist/unstable/ai/Tool.js.map +1 -1
  394. package/dist/unstable/ai/Toolkit.d.ts +1 -1
  395. package/dist/unstable/ai/Toolkit.d.ts.map +1 -1
  396. package/dist/unstable/ai/Toolkit.js +4 -11
  397. package/dist/unstable/ai/Toolkit.js.map +1 -1
  398. package/dist/unstable/ai/index.d.ts +1 -1
  399. package/dist/unstable/ai/index.js +1 -1
  400. package/dist/unstable/ai/internal/codec-transformer.js +0 -5
  401. package/dist/unstable/ai/internal/codec-transformer.js.map +1 -1
  402. package/dist/unstable/cli/CliError.d.ts +27 -60
  403. package/dist/unstable/cli/CliError.d.ts.map +1 -1
  404. package/dist/unstable/cli/CliError.js +25 -57
  405. package/dist/unstable/cli/CliError.js.map +1 -1
  406. package/dist/unstable/cli/CliOutput.js +59 -6
  407. package/dist/unstable/cli/CliOutput.js.map +1 -1
  408. package/dist/unstable/cli/Command.d.ts +368 -56
  409. package/dist/unstable/cli/Command.d.ts.map +1 -1
  410. package/dist/unstable/cli/Command.js +325 -64
  411. package/dist/unstable/cli/Command.js.map +1 -1
  412. package/dist/unstable/cli/GlobalFlag.d.ts +125 -0
  413. package/dist/unstable/cli/GlobalFlag.d.ts.map +1 -0
  414. package/dist/unstable/cli/GlobalFlag.js +118 -0
  415. package/dist/unstable/cli/GlobalFlag.js.map +1 -0
  416. package/dist/unstable/cli/HelpDoc.d.ts +70 -2
  417. package/dist/unstable/cli/HelpDoc.d.ts.map +1 -1
  418. package/dist/unstable/cli/Primitive.d.ts +1 -1
  419. package/dist/unstable/cli/Primitive.js +1 -1
  420. package/dist/unstable/cli/Prompt.js +35 -8
  421. package/dist/unstable/cli/Prompt.js.map +1 -1
  422. package/dist/unstable/cli/index.d.ts +4 -0
  423. package/dist/unstable/cli/index.d.ts.map +1 -1
  424. package/dist/unstable/cli/index.js +4 -0
  425. package/dist/unstable/cli/index.js.map +1 -1
  426. package/dist/unstable/cli/internal/command.d.ts +40 -14
  427. package/dist/unstable/cli/internal/command.d.ts.map +1 -1
  428. package/dist/unstable/cli/internal/command.js +72 -46
  429. package/dist/unstable/cli/internal/command.js.map +1 -1
  430. package/dist/unstable/cli/internal/completions/CommandDescriptor.js +7 -2
  431. package/dist/unstable/cli/internal/completions/CommandDescriptor.js.map +1 -1
  432. package/dist/unstable/cli/internal/config.js +42 -0
  433. package/dist/unstable/cli/internal/config.js.map +1 -1
  434. package/dist/unstable/cli/internal/help.d.ts +33 -0
  435. package/dist/unstable/cli/internal/help.d.ts.map +1 -0
  436. package/dist/unstable/cli/internal/help.js +125 -0
  437. package/dist/unstable/cli/internal/help.js.map +1 -0
  438. package/dist/unstable/cli/internal/parser.js +55 -42
  439. package/dist/unstable/cli/internal/parser.js.map +1 -1
  440. package/dist/unstable/cluster/ClusterCron.d.ts +1 -1
  441. package/dist/unstable/cluster/ClusterCron.d.ts.map +1 -1
  442. package/dist/unstable/cluster/ClusterCron.js +1 -1
  443. package/dist/unstable/cluster/ClusterCron.js.map +1 -1
  444. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  445. package/dist/unstable/cluster/ClusterWorkflowEngine.js +4 -3
  446. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  447. package/dist/unstable/cluster/Entity.d.ts +7 -6
  448. package/dist/unstable/cluster/Entity.d.ts.map +1 -1
  449. package/dist/unstable/cluster/Entity.js.map +1 -1
  450. package/dist/unstable/cluster/EntityResource.d.ts +2 -2
  451. package/dist/unstable/cluster/EntityResource.d.ts.map +1 -1
  452. package/dist/unstable/cluster/Envelope.d.ts +1 -1
  453. package/dist/unstable/cluster/K8sHttpClient.d.ts +1 -1
  454. package/dist/unstable/cluster/K8sHttpClient.js +4 -4
  455. package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
  456. package/dist/unstable/cluster/Message.d.ts +10 -10
  457. package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
  458. package/dist/unstable/cluster/MessageStorage.js +2 -1
  459. package/dist/unstable/cluster/MessageStorage.js.map +1 -1
  460. package/dist/unstable/cluster/Reply.d.ts +6 -6
  461. package/dist/unstable/cluster/Runner.d.ts +1 -1
  462. package/dist/unstable/cluster/Runners.d.ts.map +1 -1
  463. package/dist/unstable/cluster/Runners.js +4 -3
  464. package/dist/unstable/cluster/Runners.js.map +1 -1
  465. package/dist/unstable/cluster/Sharding.d.ts +2 -2
  466. package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
  467. package/dist/unstable/cluster/Sharding.js +9 -7
  468. package/dist/unstable/cluster/Sharding.js.map +1 -1
  469. package/dist/unstable/cluster/ShardingConfig.d.ts +21 -21
  470. package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
  471. package/dist/unstable/cluster/ShardingConfig.js +20 -20
  472. package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
  473. package/dist/unstable/cluster/SqlRunnerStorage.js +1 -1
  474. package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
  475. package/dist/unstable/cluster/internal/entityManager.js +5 -4
  476. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  477. package/dist/unstable/cluster/internal/entityReaper.js +2 -1
  478. package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
  479. package/dist/unstable/cluster/internal/resourceRef.js +2 -1
  480. package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
  481. package/dist/unstable/devtools/DevToolsSchema.d.ts +36 -36
  482. package/dist/unstable/encoding/Msgpack.d.ts +1 -1
  483. package/dist/unstable/encoding/Ndjson.d.ts +1 -1
  484. package/dist/unstable/encoding/Sse.d.ts +4 -4
  485. package/dist/unstable/encoding/Sse.d.ts.map +1 -1
  486. package/dist/unstable/encoding/Sse.js +1 -1
  487. package/dist/unstable/encoding/Sse.js.map +1 -1
  488. package/dist/unstable/eventlog/EventJournal.d.ts +2 -2
  489. package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
  490. package/dist/unstable/eventlog/EventLog.js +2 -1
  491. package/dist/unstable/eventlog/EventLog.js.map +1 -1
  492. package/dist/unstable/eventlog/EventLogRemote.d.ts +6 -6
  493. package/dist/unstable/http/Cookies.d.ts +47 -3
  494. package/dist/unstable/http/Cookies.d.ts.map +1 -1
  495. package/dist/unstable/http/Cookies.js +24 -2
  496. package/dist/unstable/http/Cookies.js.map +1 -1
  497. package/dist/unstable/http/Headers.d.ts +16 -0
  498. package/dist/unstable/http/Headers.d.ts.map +1 -1
  499. package/dist/unstable/http/Headers.js +38 -10
  500. package/dist/unstable/http/Headers.js.map +1 -1
  501. package/dist/unstable/http/HttpBody.d.ts +3 -3
  502. package/dist/unstable/http/HttpBody.d.ts.map +1 -1
  503. package/dist/unstable/http/HttpBody.js +6 -6
  504. package/dist/unstable/http/HttpBody.js.map +1 -1
  505. package/dist/unstable/http/HttpClient.d.ts +117 -15
  506. package/dist/unstable/http/HttpClient.d.ts.map +1 -1
  507. package/dist/unstable/http/HttpClient.js +189 -12
  508. package/dist/unstable/http/HttpClient.js.map +1 -1
  509. package/dist/unstable/http/HttpClientError.d.ts +7 -7
  510. package/dist/unstable/http/HttpClientRequest.d.ts +16 -11
  511. package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
  512. package/dist/unstable/http/HttpClientRequest.js +31 -20
  513. package/dist/unstable/http/HttpClientRequest.js.map +1 -1
  514. package/dist/unstable/http/HttpClientResponse.d.ts +2 -1
  515. package/dist/unstable/http/HttpClientResponse.d.ts.map +1 -1
  516. package/dist/unstable/http/HttpClientResponse.js +4 -0
  517. package/dist/unstable/http/HttpClientResponse.js.map +1 -1
  518. package/dist/unstable/http/HttpEffect.d.ts +7 -5
  519. package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
  520. package/dist/unstable/http/HttpEffect.js +46 -54
  521. package/dist/unstable/http/HttpEffect.js.map +1 -1
  522. package/dist/unstable/http/HttpMethod.d.ts +4 -4
  523. package/dist/unstable/http/HttpMethod.d.ts.map +1 -1
  524. package/dist/unstable/http/HttpMethod.js +3 -3
  525. package/dist/unstable/http/HttpMethod.js.map +1 -1
  526. package/dist/unstable/http/HttpMiddleware.d.ts +1 -6
  527. package/dist/unstable/http/HttpMiddleware.d.ts.map +1 -1
  528. package/dist/unstable/http/HttpMiddleware.js +8 -17
  529. package/dist/unstable/http/HttpMiddleware.js.map +1 -1
  530. package/dist/unstable/http/HttpServerError.d.ts +20 -33
  531. package/dist/unstable/http/HttpServerError.d.ts.map +1 -1
  532. package/dist/unstable/http/HttpServerError.js +37 -44
  533. package/dist/unstable/http/HttpServerError.js.map +1 -1
  534. package/dist/unstable/http/HttpServerRequest.d.ts +12 -1
  535. package/dist/unstable/http/HttpServerRequest.d.ts.map +1 -1
  536. package/dist/unstable/http/HttpServerRequest.js +291 -1
  537. package/dist/unstable/http/HttpServerRequest.js.map +1 -1
  538. package/dist/unstable/http/HttpServerRespondable.d.ts +2 -2
  539. package/dist/unstable/http/HttpServerRespondable.d.ts.map +1 -1
  540. package/dist/unstable/http/HttpServerRespondable.js +5 -5
  541. package/dist/unstable/http/HttpServerRespondable.js.map +1 -1
  542. package/dist/unstable/http/HttpServerResponse.d.ts +50 -3
  543. package/dist/unstable/http/HttpServerResponse.d.ts.map +1 -1
  544. package/dist/unstable/http/HttpServerResponse.js +234 -1
  545. package/dist/unstable/http/HttpServerResponse.js.map +1 -1
  546. package/dist/unstable/http/HttpStaticServer.d.ts +69 -0
  547. package/dist/unstable/http/HttpStaticServer.d.ts.map +1 -0
  548. package/dist/unstable/http/HttpStaticServer.js +353 -0
  549. package/dist/unstable/http/HttpStaticServer.js.map +1 -0
  550. package/dist/unstable/http/Multipart.d.ts +3 -3
  551. package/dist/unstable/http/UrlParams.d.ts +14 -6
  552. package/dist/unstable/http/UrlParams.d.ts.map +1 -1
  553. package/dist/unstable/http/UrlParams.js +1 -1
  554. package/dist/unstable/http/UrlParams.js.map +1 -1
  555. package/dist/unstable/http/index.d.ts +4 -0
  556. package/dist/unstable/http/index.d.ts.map +1 -1
  557. package/dist/unstable/http/index.js +4 -0
  558. package/dist/unstable/http/index.js.map +1 -1
  559. package/dist/unstable/http/internal/preResponseHandler.d.ts +2 -0
  560. package/dist/unstable/http/internal/preResponseHandler.d.ts.map +1 -0
  561. package/dist/unstable/http/internal/preResponseHandler.js +10 -0
  562. package/dist/unstable/http/internal/preResponseHandler.js.map +1 -0
  563. package/dist/unstable/httpapi/HttpApi.d.ts +4 -4
  564. package/dist/unstable/httpapi/HttpApi.d.ts.map +1 -1
  565. package/dist/unstable/httpapi/HttpApi.js.map +1 -1
  566. package/dist/unstable/httpapi/HttpApiBuilder.d.ts +11 -5
  567. package/dist/unstable/httpapi/HttpApiBuilder.d.ts.map +1 -1
  568. package/dist/unstable/httpapi/HttpApiBuilder.js +28 -18
  569. package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
  570. package/dist/unstable/httpapi/HttpApiClient.d.ts +66 -6
  571. package/dist/unstable/httpapi/HttpApiClient.d.ts.map +1 -1
  572. package/dist/unstable/httpapi/HttpApiClient.js +40 -3
  573. package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
  574. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +41 -54
  575. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts.map +1 -1
  576. package/dist/unstable/httpapi/HttpApiEndpoint.js +17 -26
  577. package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
  578. package/dist/unstable/httpapi/HttpApiError.d.ts +16 -14
  579. package/dist/unstable/httpapi/HttpApiError.d.ts.map +1 -1
  580. package/dist/unstable/httpapi/HttpApiError.js +44 -29
  581. package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
  582. package/dist/unstable/httpapi/HttpApiGroup.d.ts +4 -3
  583. package/dist/unstable/httpapi/HttpApiGroup.d.ts.map +1 -1
  584. package/dist/unstable/httpapi/HttpApiGroup.js.map +1 -1
  585. package/dist/unstable/httpapi/HttpApiMiddleware.d.ts +4 -4
  586. package/dist/unstable/httpapi/HttpApiMiddleware.d.ts.map +1 -1
  587. package/dist/unstable/httpapi/HttpApiMiddleware.js.map +1 -1
  588. package/dist/unstable/httpapi/HttpApiScalar.d.ts +6 -0
  589. package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
  590. package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
  591. package/dist/unstable/httpapi/HttpApiSecurity.d.ts +2 -2
  592. package/dist/unstable/httpapi/HttpApiSecurity.d.ts.map +1 -1
  593. package/dist/unstable/httpapi/HttpApiSecurity.js.map +1 -1
  594. package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
  595. package/dist/unstable/httpapi/OpenApi.js +32 -21
  596. package/dist/unstable/httpapi/OpenApi.js.map +1 -1
  597. package/dist/unstable/observability/Otlp.d.ts +12 -12
  598. package/dist/unstable/observability/Otlp.d.ts.map +1 -1
  599. package/dist/unstable/observability/OtlpExporter.d.ts +2 -2
  600. package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
  601. package/dist/unstable/observability/OtlpExporter.js +1 -1
  602. package/dist/unstable/observability/OtlpExporter.js.map +1 -1
  603. package/dist/unstable/observability/OtlpLogger.d.ts +4 -4
  604. package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
  605. package/dist/unstable/observability/OtlpLogger.js +7 -4
  606. package/dist/unstable/observability/OtlpLogger.js.map +1 -1
  607. package/dist/unstable/observability/OtlpMetrics.d.ts +4 -4
  608. package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
  609. package/dist/unstable/observability/OtlpTracer.d.ts +4 -4
  610. package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
  611. package/dist/unstable/persistence/KeyValueStore.d.ts +1 -1
  612. package/dist/unstable/persistence/KeyValueStore.js +6 -6
  613. package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
  614. package/dist/unstable/persistence/Persistable.d.ts +2 -2
  615. package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
  616. package/dist/unstable/persistence/PersistedCache.d.ts +6 -5
  617. package/dist/unstable/persistence/PersistedCache.d.ts.map +1 -1
  618. package/dist/unstable/persistence/PersistedCache.js +2 -1
  619. package/dist/unstable/persistence/PersistedCache.js.map +1 -1
  620. package/dist/unstable/persistence/PersistedQueue.d.ts +12 -12
  621. package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
  622. package/dist/unstable/persistence/PersistedQueue.js +12 -11
  623. package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
  624. package/dist/unstable/persistence/Persistence.d.ts +1 -1
  625. package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
  626. package/dist/unstable/persistence/Persistence.js +2 -2
  627. package/dist/unstable/persistence/Persistence.js.map +1 -1
  628. package/dist/unstable/persistence/RateLimiter.d.ts +3 -3
  629. package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
  630. package/dist/unstable/persistence/RateLimiter.js +1 -1
  631. package/dist/unstable/persistence/RateLimiter.js.map +1 -1
  632. package/dist/unstable/process/ChildProcess.d.ts +5 -128
  633. package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
  634. package/dist/unstable/process/ChildProcess.js +1 -65
  635. package/dist/unstable/process/ChildProcess.js.map +1 -1
  636. package/dist/unstable/process/ChildProcessSpawner.d.ts +45 -7
  637. package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
  638. package/dist/unstable/process/ChildProcessSpawner.js +21 -1
  639. package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
  640. package/dist/unstable/reactivity/Atom.d.ts +73 -12
  641. package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
  642. package/dist/unstable/reactivity/Atom.js +107 -20
  643. package/dist/unstable/reactivity/Atom.js.map +1 -1
  644. package/dist/unstable/reactivity/AtomHttpApi.d.ts +10 -12
  645. package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
  646. package/dist/unstable/reactivity/AtomHttpApi.js +42 -12
  647. package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
  648. package/dist/unstable/reactivity/AtomRegistry.d.ts +6 -0
  649. package/dist/unstable/reactivity/AtomRegistry.d.ts.map +1 -1
  650. package/dist/unstable/reactivity/AtomRegistry.js +50 -9
  651. package/dist/unstable/reactivity/AtomRegistry.js.map +1 -1
  652. package/dist/unstable/reactivity/AtomRpc.d.ts +9 -9
  653. package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
  654. package/dist/unstable/reactivity/AtomRpc.js +47 -21
  655. package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
  656. package/dist/unstable/reactivity/Hydration.d.ts +39 -0
  657. package/dist/unstable/reactivity/Hydration.d.ts.map +1 -0
  658. package/dist/unstable/reactivity/Hydration.js +76 -0
  659. package/dist/unstable/reactivity/Hydration.js.map +1 -0
  660. package/dist/unstable/reactivity/index.d.ts +4 -0
  661. package/dist/unstable/reactivity/index.d.ts.map +1 -1
  662. package/dist/unstable/reactivity/index.js +4 -0
  663. package/dist/unstable/reactivity/index.js.map +1 -1
  664. package/dist/unstable/rpc/Rpc.d.ts +5 -5
  665. package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
  666. package/dist/unstable/rpc/Rpc.js.map +1 -1
  667. package/dist/unstable/rpc/RpcClient.d.ts +5 -26
  668. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  669. package/dist/unstable/rpc/RpcClient.js +6 -13
  670. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  671. package/dist/unstable/rpc/RpcGroup.d.ts +2 -2
  672. package/dist/unstable/rpc/RpcGroup.d.ts.map +1 -1
  673. package/dist/unstable/rpc/RpcGroup.js.map +1 -1
  674. package/dist/unstable/rpc/RpcMiddleware.d.ts +8 -8
  675. package/dist/unstable/rpc/RpcMiddleware.d.ts.map +1 -1
  676. package/dist/unstable/rpc/RpcMiddleware.js.map +1 -1
  677. package/dist/unstable/rpc/RpcSchema.d.ts +13 -0
  678. package/dist/unstable/rpc/RpcSchema.d.ts.map +1 -1
  679. package/dist/unstable/rpc/RpcSchema.js +14 -0
  680. package/dist/unstable/rpc/RpcSchema.js.map +1 -1
  681. package/dist/unstable/rpc/RpcSerialization.d.ts.map +1 -1
  682. package/dist/unstable/rpc/RpcSerialization.js +34 -9
  683. package/dist/unstable/rpc/RpcSerialization.js.map +1 -1
  684. package/dist/unstable/rpc/RpcServer.d.ts +5 -9
  685. package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
  686. package/dist/unstable/rpc/RpcServer.js +17 -17
  687. package/dist/unstable/rpc/RpcServer.js.map +1 -1
  688. package/dist/unstable/rpc/Utils.d.ts.map +1 -1
  689. package/dist/unstable/rpc/Utils.js +3 -2
  690. package/dist/unstable/rpc/Utils.js.map +1 -1
  691. package/dist/unstable/schema/Model.d.ts +22 -1
  692. package/dist/unstable/schema/Model.d.ts.map +1 -1
  693. package/dist/unstable/schema/Model.js +15 -0
  694. package/dist/unstable/schema/Model.js.map +1 -1
  695. package/dist/unstable/schema/VariantSchema.d.ts +5 -5
  696. package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
  697. package/dist/unstable/schema/VariantSchema.js +6 -6
  698. package/dist/unstable/schema/VariantSchema.js.map +1 -1
  699. package/dist/unstable/socket/Socket.d.ts +4 -4
  700. package/dist/unstable/socket/Socket.d.ts.map +1 -1
  701. package/dist/unstable/socket/Socket.js +6 -5
  702. package/dist/unstable/socket/Socket.js.map +1 -1
  703. package/dist/unstable/socket/SocketServer.d.ts +3 -3
  704. package/dist/unstable/sql/Migrator.d.ts +1 -1
  705. package/dist/unstable/sql/SqlClient.d.ts +1 -1
  706. package/dist/unstable/sql/SqlClient.d.ts.map +1 -1
  707. package/dist/unstable/sql/SqlError.d.ts +14 -14
  708. package/dist/unstable/sql/SqlError.d.ts.map +1 -1
  709. package/dist/unstable/sql/SqlError.js +9 -3
  710. package/dist/unstable/sql/SqlError.js.map +1 -1
  711. package/dist/unstable/sql/SqlModel.d.ts +2 -2
  712. package/dist/unstable/sql/SqlModel.d.ts.map +1 -1
  713. package/dist/unstable/sql/SqlModel.js +3 -3
  714. package/dist/unstable/sql/SqlModel.js.map +1 -1
  715. package/dist/unstable/sql/SqlResolver.d.ts.map +1 -1
  716. package/dist/unstable/sql/SqlResolver.js +17 -8
  717. package/dist/unstable/sql/SqlResolver.js.map +1 -1
  718. package/dist/unstable/sql/SqlSchema.d.ts +17 -6
  719. package/dist/unstable/sql/SqlSchema.d.ts.map +1 -1
  720. package/dist/unstable/sql/SqlSchema.js +17 -7
  721. package/dist/unstable/sql/SqlSchema.js.map +1 -1
  722. package/dist/unstable/sql/Statement.js +0 -1
  723. package/dist/unstable/sql/Statement.js.map +1 -1
  724. package/dist/unstable/workers/Worker.d.ts.map +1 -1
  725. package/dist/unstable/workers/Worker.js +2 -1
  726. package/dist/unstable/workers/Worker.js.map +1 -1
  727. package/dist/unstable/workflow/DurableClock.d.ts +3 -3
  728. package/dist/unstable/workflow/DurableClock.d.ts.map +1 -1
  729. package/dist/unstable/workflow/DurableClock.js +3 -3
  730. package/dist/unstable/workflow/DurableClock.js.map +1 -1
  731. package/dist/unstable/workflow/DurableDeferred.js +2 -2
  732. package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
  733. package/dist/unstable/workflow/Workflow.d.ts +3 -3
  734. package/dist/unstable/workflow/Workflow.d.ts.map +1 -1
  735. package/dist/unstable/workflow/Workflow.js +1 -1
  736. package/dist/unstable/workflow/Workflow.js.map +1 -1
  737. package/dist/unstable/workflow/WorkflowEngine.d.ts +12 -1
  738. package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
  739. package/dist/unstable/workflow/WorkflowEngine.js +137 -1
  740. package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
  741. package/package.json +2 -2
  742. package/src/Array.ts +192 -342
  743. package/src/Brand.ts +1 -1
  744. package/src/Cache.ts +9 -8
  745. package/src/Cause.ts +2 -2
  746. package/src/Channel.ts +554 -138
  747. package/src/Chunk.ts +81 -268
  748. package/src/Combiner.ts +280 -13
  749. package/src/Config.ts +186 -24
  750. package/src/Data.ts +539 -376
  751. package/src/DateTime.ts +24 -164
  752. package/src/Duration.ts +13 -13
  753. package/src/Effect.ts +1477 -1126
  754. package/src/Encoding.ts +879 -0
  755. package/src/Equal.ts +278 -111
  756. package/src/ErrorReporter.ts +457 -0
  757. package/src/Exit.ts +24 -12
  758. package/src/Fiber.ts +10 -2
  759. package/src/FileSystem.ts +7 -8
  760. package/src/Filter.ts +52 -63
  761. package/src/Formatter.ts +253 -51
  762. package/src/Function.ts +2 -10
  763. package/src/Graph.ts +24 -11
  764. package/src/HashMap.ts +15 -14
  765. package/src/Iterable.ts +104 -50
  766. package/src/JsonSchema.ts +383 -10
  767. package/src/Latch.ts +112 -0
  768. package/src/Layer.ts +123 -132
  769. package/src/LayerMap.ts +9 -9
  770. package/src/LogLevel.ts +37 -0
  771. package/src/Logger.ts +33 -100
  772. package/src/ManagedRuntime.ts +2 -2
  773. package/src/Metric.ts +6 -8
  774. package/src/Newtype.ts +308 -0
  775. package/src/Optic.ts +948 -19
  776. package/src/Option.ts +32 -24
  777. package/src/Pipeable.ts +32 -1
  778. package/src/PlatformError.ts +5 -5
  779. package/src/Pool.ts +13 -11
  780. package/src/PubSub.ts +10 -9
  781. package/src/Pull.ts +1 -1
  782. package/src/Queue.ts +0 -1
  783. package/src/Random.ts +51 -14
  784. package/src/RcMap.ts +5 -5
  785. package/src/RcRef.ts +1 -1
  786. package/src/Record.ts +42 -152
  787. package/src/Reducer.ts +166 -7
  788. package/src/References.ts +10 -5
  789. package/src/Request.ts +3 -2
  790. package/src/RequestResolver.ts +29 -49
  791. package/src/Result.ts +2 -4
  792. package/src/Runtime.ts +102 -6
  793. package/src/Schedule.ts +462 -242
  794. package/src/Scheduler.ts +12 -0
  795. package/src/Schema.ts +796 -194
  796. package/src/SchemaAST.ts +164 -31
  797. package/src/SchemaGetter.ts +15 -17
  798. package/src/SchemaParser.ts +11 -0
  799. package/src/SchemaRepresentation.ts +49 -24
  800. package/src/SchemaTransformation.ts +189 -4
  801. package/src/ScopedCache.ts +3 -3
  802. package/src/Semaphore.ts +356 -0
  803. package/src/ServiceMap.ts +50 -40
  804. package/src/Sink.ts +78 -26
  805. package/src/Stdio.ts +27 -4
  806. package/src/Stream.ts +586 -608
  807. package/src/Struct.ts +26 -0
  808. package/src/SubscriptionRef.ts +3 -2
  809. package/src/SynchronizedRef.ts +3 -2
  810. package/src/Trie.ts +18 -17
  811. package/src/TxChunk.ts +72 -53
  812. package/src/TxDeferred.ts +394 -0
  813. package/src/TxHashMap.ts +332 -285
  814. package/src/TxHashSet.ts +111 -116
  815. package/src/TxPriorityQueue.ts +767 -0
  816. package/src/TxPubSub.ts +789 -0
  817. package/src/TxQueue.ts +241 -251
  818. package/src/TxReentrantLock.ts +753 -0
  819. package/src/TxRef.ts +50 -38
  820. package/src/TxSemaphore.ts +29 -32
  821. package/src/TxSubscriptionRef.ts +639 -0
  822. package/src/Types.ts +73 -19
  823. package/src/Utils.ts +137 -111
  824. package/src/index.ts +728 -24
  825. package/src/internal/core.ts +12 -5
  826. package/src/internal/dateTime.ts +9 -30
  827. package/src/internal/effect.ts +774 -301
  828. package/src/internal/hashMap.ts +8 -7
  829. package/src/internal/random.ts +20 -0
  830. package/src/internal/rcRef.ts +4 -3
  831. package/src/internal/request.ts +2 -2
  832. package/src/internal/schema/annotations.ts +2 -0
  833. package/src/internal/schema/representation.ts +45 -94
  834. package/src/internal/schema/schema.ts +1 -0
  835. package/src/internal/schema/to-codec.ts +7 -17
  836. package/src/internal/trie.ts +15 -9
  837. package/src/testing/TestClock.ts +13 -11
  838. package/src/testing/TestSchema.ts +332 -35
  839. package/src/testing/index.ts +64 -1
  840. package/src/unstable/ai/AiError.ts +105 -48
  841. package/src/unstable/ai/Chat.ts +47 -61
  842. package/src/unstable/ai/LanguageModel.ts +153 -68
  843. package/src/unstable/ai/McpSchema.ts +73 -13
  844. package/src/unstable/ai/McpServer.ts +271 -61
  845. package/src/unstable/ai/Model.ts +40 -9
  846. package/src/unstable/ai/Prompt.ts +37 -37
  847. package/src/unstable/ai/Response.ts +25 -25
  848. package/src/unstable/ai/Tool.ts +20 -14
  849. package/src/unstable/ai/Toolkit.ts +5 -14
  850. package/src/unstable/ai/index.ts +1 -1
  851. package/src/unstable/ai/internal/codec-transformer.ts +0 -7
  852. package/src/unstable/cli/CliError.ts +47 -59
  853. package/src/unstable/cli/CliOutput.ts +75 -6
  854. package/src/unstable/cli/Command.ts +796 -187
  855. package/src/unstable/cli/GlobalFlag.ts +243 -0
  856. package/src/unstable/cli/HelpDoc.ts +80 -2
  857. package/src/unstable/cli/Primitive.ts +1 -1
  858. package/src/unstable/cli/Prompt.ts +31 -9
  859. package/src/unstable/cli/index.ts +5 -0
  860. package/src/unstable/cli/internal/command.ts +109 -63
  861. package/src/unstable/cli/internal/completions/CommandDescriptor.ts +7 -2
  862. package/src/unstable/cli/internal/config.ts +49 -0
  863. package/src/unstable/cli/internal/help.ts +171 -0
  864. package/src/unstable/cli/internal/parser.ts +66 -61
  865. package/src/unstable/cluster/ClusterCron.ts +2 -2
  866. package/src/unstable/cluster/ClusterWorkflowEngine.ts +5 -4
  867. package/src/unstable/cluster/Entity.ts +11 -10
  868. package/src/unstable/cluster/EntityResource.ts +4 -4
  869. package/src/unstable/cluster/Envelope.ts +1 -1
  870. package/src/unstable/cluster/K8sHttpClient.ts +5 -5
  871. package/src/unstable/cluster/MessageStorage.ts +3 -5
  872. package/src/unstable/cluster/Runners.ts +6 -5
  873. package/src/unstable/cluster/Sharding.ts +12 -10
  874. package/src/unstable/cluster/ShardingConfig.ts +30 -31
  875. package/src/unstable/cluster/SqlRunnerStorage.ts +1 -1
  876. package/src/unstable/cluster/internal/entityManager.ts +9 -8
  877. package/src/unstable/cluster/internal/entityReaper.ts +2 -1
  878. package/src/unstable/cluster/internal/resourceRef.ts +2 -1
  879. package/src/unstable/encoding/Sse.ts +3 -5
  880. package/src/unstable/eventlog/EventLog.ts +2 -1
  881. package/src/unstable/http/Cookies.ts +87 -3
  882. package/src/unstable/http/Headers.ts +62 -13
  883. package/src/unstable/http/HttpBody.ts +6 -6
  884. package/src/unstable/http/HttpClient.ts +374 -33
  885. package/src/unstable/http/HttpClientRequest.ts +38 -30
  886. package/src/unstable/http/HttpClientResponse.ts +7 -2
  887. package/src/unstable/http/HttpEffect.ts +54 -68
  888. package/src/unstable/http/HttpMethod.ts +16 -4
  889. package/src/unstable/http/HttpMiddleware.ts +9 -24
  890. package/src/unstable/http/HttpServerError.ts +42 -45
  891. package/src/unstable/http/HttpServerRequest.ts +389 -2
  892. package/src/unstable/http/HttpServerRespondable.ts +6 -6
  893. package/src/unstable/http/HttpServerResponse.ts +337 -4
  894. package/src/unstable/http/HttpStaticServer.ts +456 -0
  895. package/src/unstable/http/Multipart.ts +2 -2
  896. package/src/unstable/http/UrlParams.ts +20 -5
  897. package/src/unstable/http/index.ts +5 -0
  898. package/src/unstable/http/internal/preResponseHandler.ts +15 -0
  899. package/src/unstable/httpapi/HttpApi.ts +6 -6
  900. package/src/unstable/httpapi/HttpApiBuilder.ts +81 -28
  901. package/src/unstable/httpapi/HttpApiClient.ts +100 -11
  902. package/src/unstable/httpapi/HttpApiEndpoint.ts +71 -87
  903. package/src/unstable/httpapi/HttpApiError.ts +51 -28
  904. package/src/unstable/httpapi/HttpApiGroup.ts +7 -6
  905. package/src/unstable/httpapi/HttpApiMiddleware.ts +4 -4
  906. package/src/unstable/httpapi/HttpApiScalar.ts +6 -0
  907. package/src/unstable/httpapi/HttpApiSecurity.ts +3 -3
  908. package/src/unstable/httpapi/OpenApi.ts +41 -23
  909. package/src/unstable/observability/Otlp.ts +12 -12
  910. package/src/unstable/observability/OtlpExporter.ts +3 -3
  911. package/src/unstable/observability/OtlpLogger.ts +13 -9
  912. package/src/unstable/observability/OtlpMetrics.ts +4 -4
  913. package/src/unstable/observability/OtlpTracer.ts +4 -4
  914. package/src/unstable/persistence/KeyValueStore.ts +6 -6
  915. package/src/unstable/persistence/Persistable.ts +2 -2
  916. package/src/unstable/persistence/PersistedCache.ts +20 -9
  917. package/src/unstable/persistence/PersistedQueue.ts +25 -24
  918. package/src/unstable/persistence/Persistence.ts +3 -3
  919. package/src/unstable/persistence/RateLimiter.ts +4 -4
  920. package/src/unstable/process/ChildProcess.ts +6 -208
  921. package/src/unstable/process/ChildProcessSpawner.ts +75 -14
  922. package/src/unstable/reactivity/Atom.ts +211 -50
  923. package/src/unstable/reactivity/AtomHttpApi.ts +66 -31
  924. package/src/unstable/reactivity/AtomRegistry.ts +61 -9
  925. package/src/unstable/reactivity/AtomRpc.ts +51 -20
  926. package/src/unstable/reactivity/Hydration.ts +112 -0
  927. package/src/unstable/reactivity/index.ts +5 -0
  928. package/src/unstable/rpc/Rpc.ts +7 -9
  929. package/src/unstable/rpc/RpcClient.ts +12 -54
  930. package/src/unstable/rpc/RpcGroup.ts +4 -4
  931. package/src/unstable/rpc/RpcMiddleware.ts +15 -9
  932. package/src/unstable/rpc/RpcSchema.ts +17 -0
  933. package/src/unstable/rpc/RpcSerialization.ts +44 -9
  934. package/src/unstable/rpc/RpcServer.ts +28 -32
  935. package/src/unstable/rpc/Utils.ts +3 -2
  936. package/src/unstable/schema/Model.ts +31 -0
  937. package/src/unstable/schema/VariantSchema.ts +9 -9
  938. package/src/unstable/socket/Socket.ts +16 -17
  939. package/src/unstable/sql/SqlClient.ts +1 -1
  940. package/src/unstable/sql/SqlError.ts +11 -9
  941. package/src/unstable/sql/SqlModel.ts +5 -5
  942. package/src/unstable/sql/SqlResolver.ts +17 -7
  943. package/src/unstable/sql/SqlSchema.ts +42 -26
  944. package/src/unstable/sql/Statement.ts +0 -1
  945. package/src/unstable/workers/Worker.ts +2 -1
  946. package/src/unstable/workflow/DurableClock.ts +8 -8
  947. package/src/unstable/workflow/DurableDeferred.ts +2 -2
  948. package/src/unstable/workflow/Workflow.ts +6 -2
  949. package/src/unstable/workflow/WorkflowEngine.ts +185 -2
  950. package/dist/PartitionedSemaphore.d.ts +0 -52
  951. package/dist/PartitionedSemaphore.d.ts.map +0 -1
  952. package/dist/PartitionedSemaphore.js.map +0 -1
  953. package/dist/encoding/Base64.d.ts +0 -67
  954. package/dist/encoding/Base64.d.ts.map +0 -1
  955. package/dist/encoding/Base64.js +0 -146
  956. package/dist/encoding/Base64.js.map +0 -1
  957. package/dist/encoding/Base64Url.d.ts +0 -60
  958. package/dist/encoding/Base64Url.d.ts.map +0 -1
  959. package/dist/encoding/Base64Url.js +0 -89
  960. package/dist/encoding/Base64Url.js.map +0 -1
  961. package/dist/encoding/EncodingError.d.ts +0 -31
  962. package/dist/encoding/EncodingError.d.ts.map +0 -1
  963. package/dist/encoding/EncodingError.js +0 -22
  964. package/dist/encoding/EncodingError.js.map +0 -1
  965. package/dist/encoding/Hex.d.ts +0 -61
  966. package/dist/encoding/Hex.d.ts.map +0 -1
  967. package/dist/encoding/Hex.js +0 -115
  968. package/dist/encoding/Hex.js.map +0 -1
  969. package/dist/encoding/index.d.ts +0 -26
  970. package/dist/encoding/index.d.ts.map +0 -1
  971. package/dist/encoding/index.js +0 -27
  972. package/dist/encoding/index.js.map +0 -1
  973. package/dist/unstable/cli/internal/builtInFlags.d.ts +0 -7
  974. package/dist/unstable/cli/internal/builtInFlags.d.ts.map +0 -1
  975. package/dist/unstable/cli/internal/builtInFlags.js +0 -44
  976. package/dist/unstable/cli/internal/builtInFlags.js.map +0 -1
  977. package/src/PartitionedSemaphore.ts +0 -182
  978. package/src/encoding/Base64.ts +0 -366
  979. package/src/encoding/Base64Url.ts +0 -104
  980. package/src/encoding/EncodingError.ts +0 -35
  981. package/src/encoding/Hex.ts +0 -390
  982. package/src/encoding/index.ts +0 -31
  983. package/src/unstable/cli/internal/builtInFlags.ts +0 -78
package/src/Schedule.ts CHANGED
@@ -36,8 +36,9 @@ import * as Duration from "./Duration.ts"
36
36
  import type { Effect } from "./Effect.ts"
37
37
  import type { LazyArg } from "./Function.ts"
38
38
  import { constant, dual, identity } from "./Function.ts"
39
-
39
+ import { isEffect } from "./internal/core.ts"
40
40
  import * as effect from "./internal/effect.ts"
41
+ import * as random from "./internal/random.ts"
41
42
  import { type Pipeable, pipeArguments } from "./Pipeable.ts"
42
43
  import { hasProperty } from "./Predicate.ts"
43
44
  import * as Pull from "./Pull.ts"
@@ -47,6 +48,8 @@ import type { Contravariant, Covariant, Mutable } from "./Types.ts"
47
48
 
48
49
  const TypeId = "~effect/Schedule"
49
50
 
51
+ const randomNext: Effect<number> = random.Random.useSync((random) => random.nextDoubleUnsafe())
52
+
50
53
  /**
51
54
  * A Schedule defines a strategy for repeating or retrying effects based on some policy.
52
55
  *
@@ -69,7 +72,7 @@ const TypeId = "~effect/Schedule"
69
72
  * const program = Effect.gen(function*() {
70
73
  * // Using retry schedule
71
74
  * const result1 = yield* Effect.retry(
72
- * Effect.fail("temporary error"),
75
+ * Effect.suspend(() => Math.random() > 0.5 ? Effect.fail("temporary error") : Effect.succeed("Success")),
73
76
  * retrySchedule
74
77
  * )
75
78
  *
@@ -197,7 +200,7 @@ export const CurrentMetadata = ServiceMap.Reference<Metadata>("effect/Schedule/C
197
200
  * Effect.gen(function*() {
198
201
  * attempt++
199
202
  * if (attempt < 3) {
200
- * yield* Effect.fail(`Attempt ${attempt} failed`)
203
+ * return yield* Effect.fail(`Attempt ${attempt} failed`)
201
204
  * }
202
205
  * return `Success on attempt ${attempt}`
203
206
  * }),
@@ -346,7 +349,7 @@ export const fromStep = <Input, Output, EnvX, Error, ErrorX, Env>(
346
349
  Error,
347
350
  Env
348
351
  >
349
- ): Schedule<Output, Input, Error | ErrorX, Env | EnvX> => {
352
+ ): Schedule<Output, Input, Error | Pull.ExcludeDone<ErrorX>, Env | EnvX> => {
350
353
  const self = Object.create(ScheduleProto)
351
354
  self.step = step
352
355
  return self
@@ -395,7 +398,7 @@ export const fromStepWithMetadata = <Input, Output, EnvX, ErrorX, Error, Env>(
395
398
  Error,
396
399
  Env
397
400
  >
398
- ): Schedule<Output, Input, Error | ErrorX, Env | EnvX> =>
401
+ ): Schedule<Output, Input, Error | Pull.ExcludeDone<ErrorX>, Env | EnvX> =>
399
402
  fromStep(effect.map(step, (f) => {
400
403
  const meta = metadataFn()
401
404
  return (now, input) => f(meta(now, input))
@@ -520,7 +523,9 @@ export const toStepWithSleep = <Output, Input, Error, Env>(
520
523
  *
521
524
  * @example
522
525
  * ```ts
523
- * import { Console, Duration, Effect, Schedule } from "effect"
526
+ * import { Console, Data, Duration, Effect, Schedule } from "effect"
527
+ *
528
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
524
529
  *
525
530
  * // Add random jitter to schedule delays
526
531
  * const jitteredSchedule = Schedule.addDelay(
@@ -616,7 +621,7 @@ export const toStepWithSleep = <Output, Input, Error, Env>(
616
621
  * Effect.gen(function*() {
617
622
  * attempt++
618
623
  * if (attempt < 5) {
619
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
624
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
620
625
  * }
621
626
  * return `Success on attempt ${attempt}`
622
627
  * }),
@@ -637,7 +642,9 @@ export const addDelay: {
637
642
  *
638
643
  * @example
639
644
  * ```ts
640
- * import { Console, Duration, Effect, Schedule } from "effect"
645
+ * import { Console, Data, Duration, Effect, Schedule } from "effect"
646
+ *
647
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
641
648
  *
642
649
  * // Add random jitter to schedule delays
643
650
  * const jitteredSchedule = Schedule.addDelay(
@@ -733,7 +740,7 @@ export const addDelay: {
733
740
  * Effect.gen(function*() {
734
741
  * attempt++
735
742
  * if (attempt < 5) {
736
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
743
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
737
744
  * }
738
745
  * return `Success on attempt ${attempt}`
739
746
  * }),
@@ -747,7 +754,7 @@ export const addDelay: {
747
754
  * @since 2.0.0
748
755
  * @category utils
749
756
  */
750
- <Output, Error2 = never, Env2 = never>(f: (output: Output) => Effect<Duration.DurationInput, Error2, Env2>): <Input, Error, Env>(
757
+ <Output, Error2 = never, Env2 = never>(f: (output: Output) => Effect<Duration.Input, Error2, Env2>): <Input, Error, Env>(
751
758
  self: Schedule<Output, Input, Error, Env>
752
759
  ) => Schedule<Output, Input, Error | Error2, Env | Env2>
753
760
  /**
@@ -756,7 +763,9 @@ export const addDelay: {
756
763
  *
757
764
  * @example
758
765
  * ```ts
759
- * import { Console, Duration, Effect, Schedule } from "effect"
766
+ * import { Console, Data, Duration, Effect, Schedule } from "effect"
767
+ *
768
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
760
769
  *
761
770
  * // Add random jitter to schedule delays
762
771
  * const jitteredSchedule = Schedule.addDelay(
@@ -852,7 +861,7 @@ export const addDelay: {
852
861
  * Effect.gen(function*() {
853
862
  * attempt++
854
863
  * if (attempt < 5) {
855
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
864
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
856
865
  * }
857
866
  * return `Success on attempt ${attempt}`
858
867
  * }),
@@ -868,17 +877,16 @@ export const addDelay: {
868
877
  */
869
878
  <Output, Input, Error, Env, Error2 = never, Env2 = never>(
870
879
  self: Schedule<Output, Input, Error, Env>,
871
- f: (output: Output) => Effect<Duration.DurationInput, Error2, Env2>
880
+ f: (output: Output) => Effect<Duration.Input, Error2, Env2>
872
881
  ): Schedule<Output, Input, Error | Error2, Env | Env2>
873
882
  } = dual(2, <Output, Input, Error, Env, Error2 = never, Env2 = never>(
874
883
  self: Schedule<Output, Input, Error, Env>,
875
- f: (output: Output) => Effect<Duration.DurationInput, Error2, Env2>
884
+ f: (output: Output) => Effect<Duration.Input, Error2, Env2>
876
885
  ): Schedule<Output, Input, Error | Error2, Env | Env2> =>
877
886
  modifyDelay(
878
887
  self,
879
888
  (output, delay) =>
880
- effect.map(f(output), (d) =>
881
- Duration.sum(Duration.fromDurationInputUnsafe(d), Duration.fromDurationInputUnsafe(delay)))
889
+ effect.map(f(output), (d) => Duration.sum(Duration.fromInputUnsafe(d), Duration.fromInputUnsafe(delay)))
882
890
  ))
883
891
 
884
892
  /**
@@ -888,7 +896,9 @@ export const addDelay: {
888
896
  *
889
897
  * @example
890
898
  * ```ts
891
- * import { Console, Effect, Schedule } from "effect"
899
+ * import { Console, Data, Effect, Schedule } from "effect"
900
+ *
901
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
892
902
  *
893
903
  * // First retry 3 times quickly, then switch to slower retries
894
904
  * const quickRetries = Schedule.exponential("100 millis").pipe(
@@ -907,7 +917,7 @@ export const addDelay: {
907
917
  * attempt++
908
918
  * yield* Console.log(`Attempt ${attempt}`)
909
919
  * if (attempt < 6) {
910
- * yield* Effect.fail(new Error(`Failure ${attempt}`))
920
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Failure ${attempt}` }))
911
921
  * }
912
922
  * return `Success on attempt ${attempt}`
913
923
  * }),
@@ -927,7 +937,9 @@ export const andThen: {
927
937
  *
928
938
  * @example
929
939
  * ```ts
930
- * import { Console, Effect, Schedule } from "effect"
940
+ * import { Console, Data, Effect, Schedule } from "effect"
941
+ *
942
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
931
943
  *
932
944
  * // First retry 3 times quickly, then switch to slower retries
933
945
  * const quickRetries = Schedule.exponential("100 millis").pipe(
@@ -946,7 +958,7 @@ export const andThen: {
946
958
  * attempt++
947
959
  * yield* Console.log(`Attempt ${attempt}`)
948
960
  * if (attempt < 6) {
949
- * yield* Effect.fail(new Error(`Failure ${attempt}`))
961
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Failure ${attempt}` }))
950
962
  * }
951
963
  * return `Success on attempt ${attempt}`
952
964
  * }),
@@ -968,7 +980,9 @@ export const andThen: {
968
980
  *
969
981
  * @example
970
982
  * ```ts
971
- * import { Console, Effect, Schedule } from "effect"
983
+ * import { Console, Data, Effect, Schedule } from "effect"
984
+ *
985
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
972
986
  *
973
987
  * // First retry 3 times quickly, then switch to slower retries
974
988
  * const quickRetries = Schedule.exponential("100 millis").pipe(
@@ -987,7 +1001,7 @@ export const andThen: {
987
1001
  * attempt++
988
1002
  * yield* Console.log(`Attempt ${attempt}`)
989
1003
  * if (attempt < 6) {
990
- * yield* Effect.fail(new Error(`Failure ${attempt}`))
1004
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Failure ${attempt}` }))
991
1005
  * }
992
1006
  * return `Success on attempt ${attempt}`
993
1007
  * }),
@@ -1140,116 +1154,211 @@ export const andThenResult: {
1140
1154
  } = dual(2, <Output, Input, Error, Env, Output2, Input2, Error2, Env2>(
1141
1155
  self: Schedule<Output, Input, Error, Env>,
1142
1156
  other: Schedule<Output2, Input2, Error2, Env2>
1143
- ): Schedule<Result.Result<Output2, Output>, Input & Input2, Error | Error2, Env | Env2> =>
1144
- fromStep(effect.map(
1145
- effect.zip(toStep(self), toStep(other)),
1146
- ([leftStep, rightStep]) => {
1147
- let currentStep: (now: number, input: Input & Input2) => Pull.Pull<
1148
- [Output | Output2, Duration.Duration],
1157
+ ): Schedule<Result.Result<Output, Output2>, Input & Input2, Error | Error2, Env | Env2> =>
1158
+ fromStep(effect.sync(() => {
1159
+ let currentSide = 0
1160
+ let currentStep:
1161
+ | undefined
1162
+ | ((now: number, input: Input & Input2) => Pull.Pull<
1163
+ [Result.Result<Output, Output2>, Duration.Duration],
1149
1164
  Error | Error2,
1150
- Output | Output2,
1165
+ Result.Result<Output, Output2>,
1151
1166
  Env | Env2
1152
- > = leftStep
1153
- let toResult: (output: Output | Output2) => Result.Result<Output2, Output> = Result.fail as any
1154
- return (now, input) =>
1155
- Pull.matchEffect(currentStep(now, input), {
1156
- onSuccess: ([output, duration]) =>
1157
- effect.succeed</**
1158
- * Returns a new `Schedule` that will first execute the left (i.e. `self`)
1159
- * schedule to completion. Once the left schedule is complete, the right (i.e.
1160
- * `other`) schedule will be executed to completion.
1161
- *
1162
- * The output of the resulting schedule is a `Result` where outputs of the
1163
- * left schedule are emitted as `Result.Err<Output>` and outputs of the right
1164
- * schedule are emitted as `Result.Ok<Output>`.
1165
- *
1166
- * @example
1167
- * ```ts
1168
- * import { Console, Effect, Result, Schedule } from "effect"
1169
- *
1170
- * // Track which phase of the schedule we're in
1171
- * const phaseTracker = Schedule.andThenResult(
1172
- * Schedule.exponential("100 millis").pipe(Schedule.take(2)),
1173
- * Schedule.spaced("500 millis").pipe(Schedule.take(2))
1174
- * )
1175
- *
1176
- * const program = Effect.gen(function*() {
1177
- * yield* Effect.repeat(
1178
- * Effect.gen(function*() {
1179
- * yield* Console.log("Task executed")
1180
- * return "task-result"
1181
- * }),
1182
- * phaseTracker.pipe(
1183
- * Schedule.tapOutput((result) =>
1184
- * Result.match(result, {
1185
- * onFailure: (phase1Output) => Console.log(`Phase 1: ${phase1Output}`),
1186
- * onSuccess: (phase2Output) => Console.log(`Phase 2: ${phase2Output}`)
1187
- * })
1188
- * )
1189
- * )
1190
- * )
1191
- * })
1192
- * ```
1193
- *
1194
- * @since 2.0.0
1195
- * @category sequencing
1196
- */
1197
- [Result.Result<Output2, Output>, Duration.Duration]>([toResult(output), duration]),
1198
- onFailure: effect.failCause,
1199
- onDone: (output) =>
1200
- effect.suspend(() => {
1201
- const pull = effect.succeed</**
1202
- * Returns a new `Schedule` that will first execute the left (i.e. `self`)
1203
- * schedule to completion. Once the left schedule is complete, the right (i.e.
1204
- * `other`) schedule will be executed to completion.
1205
- *
1206
- * The output of the resulting schedule is a `Result` where outputs of the
1207
- * left schedule are emitted as `Result.Err<Output>` and outputs of the right
1208
- * schedule are emitted as `Result.Ok<Output>`.
1209
- *
1210
- * @example
1211
- * ```ts
1212
- * import { Console, Effect, Result, Schedule } from "effect"
1213
- *
1214
- * // Track which phase of the schedule we're in
1215
- * const phaseTracker = Schedule.andThenResult(
1216
- * Schedule.exponential("100 millis").pipe(Schedule.take(2)),
1217
- * Schedule.spaced("500 millis").pipe(Schedule.take(2))
1218
- * )
1219
- *
1220
- * const program = Effect.gen(function*() {
1221
- * yield* Effect.repeat(
1222
- * Effect.gen(function*() {
1223
- * yield* Console.log("Task executed")
1224
- * return "task-result"
1225
- * }),
1226
- * phaseTracker.pipe(
1227
- * Schedule.tapOutput((result) =>
1228
- * Result.match(result, {
1229
- * onFailure: (phase1Output) => Console.log(`Phase 1: ${phase1Output}`),
1230
- * onSuccess: (phase2Output) => Console.log(`Phase 2: ${phase2Output}`)
1231
- * })
1232
- * )
1233
- * )
1234
- * )
1235
- * })
1236
- * ```
1237
- *
1238
- * @since 2.0.0
1239
- * @category sequencing
1240
- */
1241
- [Result.Result<Output2, Output>, Duration.Duration]>(
1242
- [toResult(output), Duration.zero]
1243
- )
1244
- if (currentStep === leftStep) {
1245
- currentStep = rightStep
1246
- toResult = Result.succeed as any
1247
- }
1248
- return pull
1249
- })
1250
- });
1251
- }
1252
- )))
1167
+ >)
1168
+ const left = map(self, Result.succeed)
1169
+ const right = map(other, Result.fail)
1170
+ return function recur(
1171
+ now,
1172
+ input
1173
+ ): Pull.Pull<
1174
+ [Result.Result<Output, Output2>, Duration.Duration],
1175
+ Error | Error2,
1176
+ Result.Result<Output, Output2>,
1177
+ Env | Env2
1178
+ > {
1179
+ if (currentStep) return currentStep(now, input)
1180
+ return toStep<
1181
+ /**
1182
+ * Returns a new `Schedule` that will first execute the left (i.e. `self`)
1183
+ * schedule to completion. Once the left schedule is complete, the right (i.e.
1184
+ * `other`) schedule will be executed to completion.
1185
+ *
1186
+ * The output of the resulting schedule is a `Result` where outputs of the
1187
+ * left schedule are emitted as `Result.Err<Output>` and outputs of the right
1188
+ * schedule are emitted as `Result.Ok<Output>`.
1189
+ *
1190
+ * @example
1191
+ * ```ts
1192
+ * import { Console, Effect, Result, Schedule } from "effect"
1193
+ *
1194
+ * // Track which phase of the schedule we're in
1195
+ * const phaseTracker = Schedule.andThenResult(
1196
+ * Schedule.exponential("100 millis").pipe(Schedule.take(2)),
1197
+ * Schedule.spaced("500 millis").pipe(Schedule.take(2))
1198
+ * )
1199
+ *
1200
+ * const program = Effect.gen(function*() {
1201
+ * yield* Effect.repeat(
1202
+ * Effect.gen(function*() {
1203
+ * yield* Console.log("Task executed")
1204
+ * return "task-result"
1205
+ * }),
1206
+ * phaseTracker.pipe(
1207
+ * Schedule.tapOutput((result) =>
1208
+ * Result.match(result, {
1209
+ * onFailure: (phase1Output) => Console.log(`Phase 1: ${phase1Output}`),
1210
+ * onSuccess: (phase2Output) => Console.log(`Phase 2: ${phase2Output}`)
1211
+ * })
1212
+ * )
1213
+ * )
1214
+ * )
1215
+ * })
1216
+ * ```
1217
+ *
1218
+ * @since 2.0.0
1219
+ * @category sequencing
1220
+ */
1221
+ Result.Result<Output, Output2>,
1222
+ /**
1223
+ * Returns a new `Schedule` that will first execute the left (i.e. `self`)
1224
+ * schedule to completion. Once the left schedule is complete, the right (i.e.
1225
+ * `other`) schedule will be executed to completion.
1226
+ *
1227
+ * The output of the resulting schedule is a `Result` where outputs of the
1228
+ * left schedule are emitted as `Result.Err<Output>` and outputs of the right
1229
+ * schedule are emitted as `Result.Ok<Output>`.
1230
+ *
1231
+ * @example
1232
+ * ```ts
1233
+ * import { Console, Effect, Result, Schedule } from "effect"
1234
+ *
1235
+ * // Track which phase of the schedule we're in
1236
+ * const phaseTracker = Schedule.andThenResult(
1237
+ * Schedule.exponential("100 millis").pipe(Schedule.take(2)),
1238
+ * Schedule.spaced("500 millis").pipe(Schedule.take(2))
1239
+ * )
1240
+ *
1241
+ * const program = Effect.gen(function*() {
1242
+ * yield* Effect.repeat(
1243
+ * Effect.gen(function*() {
1244
+ * yield* Console.log("Task executed")
1245
+ * return "task-result"
1246
+ * }),
1247
+ * phaseTracker.pipe(
1248
+ * Schedule.tapOutput((result) =>
1249
+ * Result.match(result, {
1250
+ * onFailure: (phase1Output) => Console.log(`Phase 1: ${phase1Output}`),
1251
+ * onSuccess: (phase2Output) => Console.log(`Phase 2: ${phase2Output}`)
1252
+ * })
1253
+ * )
1254
+ * )
1255
+ * )
1256
+ * })
1257
+ * ```
1258
+ *
1259
+ * @since 2.0.0
1260
+ * @category sequencing
1261
+ */
1262
+ Input & Input2,
1263
+ /**
1264
+ * Returns a new `Schedule` that will first execute the left (i.e. `self`)
1265
+ * schedule to completion. Once the left schedule is complete, the right (i.e.
1266
+ * `other`) schedule will be executed to completion.
1267
+ *
1268
+ * The output of the resulting schedule is a `Result` where outputs of the
1269
+ * left schedule are emitted as `Result.Err<Output>` and outputs of the right
1270
+ * schedule are emitted as `Result.Ok<Output>`.
1271
+ *
1272
+ * @example
1273
+ * ```ts
1274
+ * import { Console, Effect, Result, Schedule } from "effect"
1275
+ *
1276
+ * // Track which phase of the schedule we're in
1277
+ * const phaseTracker = Schedule.andThenResult(
1278
+ * Schedule.exponential("100 millis").pipe(Schedule.take(2)),
1279
+ * Schedule.spaced("500 millis").pipe(Schedule.take(2))
1280
+ * )
1281
+ *
1282
+ * const program = Effect.gen(function*() {
1283
+ * yield* Effect.repeat(
1284
+ * Effect.gen(function*() {
1285
+ * yield* Console.log("Task executed")
1286
+ * return "task-result"
1287
+ * }),
1288
+ * phaseTracker.pipe(
1289
+ * Schedule.tapOutput((result) =>
1290
+ * Result.match(result, {
1291
+ * onFailure: (phase1Output) => Console.log(`Phase 1: ${phase1Output}`),
1292
+ * onSuccess: (phase2Output) => Console.log(`Phase 2: ${phase2Output}`)
1293
+ * })
1294
+ * )
1295
+ * )
1296
+ * )
1297
+ * })
1298
+ * ```
1299
+ *
1300
+ * @since 2.0.0
1301
+ * @category sequencing
1302
+ */
1303
+ Error | Error2,
1304
+ /**
1305
+ * Returns a new `Schedule` that will first execute the left (i.e. `self`)
1306
+ * schedule to completion. Once the left schedule is complete, the right (i.e.
1307
+ * `other`) schedule will be executed to completion.
1308
+ *
1309
+ * The output of the resulting schedule is a `Result` where outputs of the
1310
+ * left schedule are emitted as `Result.Err<Output>` and outputs of the right
1311
+ * schedule are emitted as `Result.Ok<Output>`.
1312
+ *
1313
+ * @example
1314
+ * ```ts
1315
+ * import { Console, Effect, Result, Schedule } from "effect"
1316
+ *
1317
+ * // Track which phase of the schedule we're in
1318
+ * const phaseTracker = Schedule.andThenResult(
1319
+ * Schedule.exponential("100 millis").pipe(Schedule.take(2)),
1320
+ * Schedule.spaced("500 millis").pipe(Schedule.take(2))
1321
+ * )
1322
+ *
1323
+ * const program = Effect.gen(function*() {
1324
+ * yield* Effect.repeat(
1325
+ * Effect.gen(function*() {
1326
+ * yield* Console.log("Task executed")
1327
+ * return "task-result"
1328
+ * }),
1329
+ * phaseTracker.pipe(
1330
+ * Schedule.tapOutput((result) =>
1331
+ * Result.match(result, {
1332
+ * onFailure: (phase1Output) => Console.log(`Phase 1: ${phase1Output}`),
1333
+ * onSuccess: (phase2Output) => Console.log(`Phase 2: ${phase2Output}`)
1334
+ * })
1335
+ * )
1336
+ * )
1337
+ * )
1338
+ * })
1339
+ * ```
1340
+ *
1341
+ * @since 2.0.0
1342
+ * @category sequencing
1343
+ */
1344
+ Env | Env2
1345
+ >(currentSide === 0 ? left : right).pipe(
1346
+ effect.flatMap((step) => {
1347
+ currentSide++
1348
+ if (currentSide === 1) {
1349
+ currentStep = (now, input) =>
1350
+ Pull.catchDone(step(now, input), (_) => {
1351
+ currentStep = undefined
1352
+ return recur(now, input)
1353
+ })
1354
+ return currentStep(now, input)
1355
+ }
1356
+ currentStep = step
1357
+ return currentStep(now, input)
1358
+ })
1359
+ );
1360
+ };
1361
+ })))
1253
1362
 
1254
1363
  /**
1255
1364
  * Combines two `Schedule`s by recurring if both of the two schedules want
@@ -1258,7 +1367,9 @@ export const andThenResult: {
1258
1367
  *
1259
1368
  * @example
1260
1369
  * ```ts
1261
- * import { Console, Effect, Schedule } from "effect"
1370
+ * import { Console, Data, Effect, Schedule } from "effect"
1371
+ *
1372
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
1262
1373
  *
1263
1374
  * // Both schedules must want to continue for the combined schedule to continue
1264
1375
  * const timeLimit = Schedule.spaced("1 second").pipe(Schedule.take(5)) // max 5 times
@@ -1300,7 +1411,7 @@ export const andThenResult: {
1300
1411
  * yield* Console.log(`Retry attempt ${attempt}`)
1301
1412
  *
1302
1413
  * if (attempt < 3) {
1303
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
1414
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
1304
1415
  * }
1305
1416
  *
1306
1417
  * return `Success on attempt ${attempt}`
@@ -1326,7 +1437,9 @@ export const both: {
1326
1437
  *
1327
1438
  * @example
1328
1439
  * ```ts
1329
- * import { Console, Effect, Schedule } from "effect"
1440
+ * import { Console, Data, Effect, Schedule } from "effect"
1441
+ *
1442
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
1330
1443
  *
1331
1444
  * // Both schedules must want to continue for the combined schedule to continue
1332
1445
  * const timeLimit = Schedule.spaced("1 second").pipe(Schedule.take(5)) // max 5 times
@@ -1368,7 +1481,7 @@ export const both: {
1368
1481
  * yield* Console.log(`Retry attempt ${attempt}`)
1369
1482
  *
1370
1483
  * if (attempt < 3) {
1371
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
1484
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
1372
1485
  * }
1373
1486
  *
1374
1487
  * return `Success on attempt ${attempt}`
@@ -1396,7 +1509,9 @@ export const both: {
1396
1509
  *
1397
1510
  * @example
1398
1511
  * ```ts
1399
- * import { Console, Effect, Schedule } from "effect"
1512
+ * import { Console, Data, Effect, Schedule } from "effect"
1513
+ *
1514
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
1400
1515
  *
1401
1516
  * // Both schedules must want to continue for the combined schedule to continue
1402
1517
  * const timeLimit = Schedule.spaced("1 second").pipe(Schedule.take(5)) // max 5 times
@@ -1438,7 +1553,7 @@ export const both: {
1438
1553
  * yield* Console.log(`Retry attempt ${attempt}`)
1439
1554
  *
1440
1555
  * if (attempt < 3) {
1441
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
1556
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
1442
1557
  * }
1443
1558
  *
1444
1559
  * return `Success on attempt ${attempt}`
@@ -1845,7 +1960,9 @@ export const bothWith: {
1845
1960
  *
1846
1961
  * @example
1847
1962
  * ```ts
1848
- * import { Console, Effect, Schedule } from "effect"
1963
+ * import { Console, Data, Effect, Schedule } from "effect"
1964
+ *
1965
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
1849
1966
  *
1850
1967
  * // Compose a quick retry phase followed by slower retry phase
1851
1968
  * const fastRetries = Schedule.exponential("100 millis").pipe(
@@ -1869,7 +1986,7 @@ export const bothWith: {
1869
1986
  * yield* Console.log(`Attempt ${attempt}`)
1870
1987
  *
1871
1988
  * if (attempt < 7) { // Needs both phases to succeed
1872
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
1989
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
1873
1990
  * }
1874
1991
  *
1875
1992
  * return `Success on attempt ${attempt}`
@@ -1908,7 +2025,9 @@ export const compose: {
1908
2025
  *
1909
2026
  * @example
1910
2027
  * ```ts
1911
- * import { Console, Effect, Schedule } from "effect"
2028
+ * import { Console, Data, Effect, Schedule } from "effect"
2029
+ *
2030
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
1912
2031
  *
1913
2032
  * // Compose a quick retry phase followed by slower retry phase
1914
2033
  * const fastRetries = Schedule.exponential("100 millis").pipe(
@@ -1932,7 +2051,7 @@ export const compose: {
1932
2051
  * yield* Console.log(`Attempt ${attempt}`)
1933
2052
  *
1934
2053
  * if (attempt < 7) { // Needs both phases to succeed
1935
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
2054
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
1936
2055
  * }
1937
2056
  *
1938
2057
  * return `Success on attempt ${attempt}`
@@ -1973,7 +2092,9 @@ export const compose: {
1973
2092
  *
1974
2093
  * @example
1975
2094
  * ```ts
1976
- * import { Console, Effect, Schedule } from "effect"
2095
+ * import { Console, Data, Effect, Schedule } from "effect"
2096
+ *
2097
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
1977
2098
  *
1978
2099
  * // Compose a quick retry phase followed by slower retry phase
1979
2100
  * const fastRetries = Schedule.exponential("100 millis").pipe(
@@ -1997,7 +2118,7 @@ export const compose: {
1997
2118
  * yield* Console.log(`Attempt ${attempt}`)
1998
2119
  *
1999
2120
  * if (attempt < 7) { // Needs both phases to succeed
2000
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
2121
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
2001
2122
  * }
2002
2123
  *
2003
2124
  * return `Success on attempt ${attempt}`
@@ -2313,7 +2434,7 @@ export const collectWhile: {
2313
2434
  <Input, Output, Error2 = never, Env2 = never>(
2314
2435
  predicate: (
2315
2436
  metadata: Metadata<Output, Input>
2316
- ) => Effect<boolean, Error2, Env2>
2437
+ ) => boolean | Effect<boolean, Error2, Env2>
2317
2438
  ): <Error, Env>(
2318
2439
  self: Schedule<Output, Input, Error, Env>
2319
2440
  ) => Schedule<Array<Output>, Input, Error | Error2, Env | Env2>
@@ -2425,19 +2546,18 @@ export const collectWhile: {
2425
2546
  self: Schedule<Output, Input, Error, Env>,
2426
2547
  predicate: (
2427
2548
  metadata: Metadata<Output, Input>
2428
- ) => Effect<boolean, Error2, Env2>
2549
+ ) => boolean | Effect<boolean, Error2, Env2>
2429
2550
  ): Schedule<Array<Output>, Input, Error | Error2, Env | Env2>
2430
2551
  } = dual(2, <Output, Input, Error, Env, Error2 = never, Env2 = never>(
2431
2552
  self: Schedule<Output, Input, Error, Env>,
2432
2553
  predicate: (
2433
2554
  metadata: Metadata<Output, Input>
2434
- ) => Effect<boolean, Error2, Env2>
2555
+ ) => boolean | Effect<boolean, Error2, Env2>
2435
2556
  ): Schedule<Array<Output>, Input, Error | Error2, Env | Env2> =>
2436
- reduce(while_(self, predicate), () => [] as Array<Output>, (outputs, output) =>
2437
- effect.succeed((() => {
2438
- outputs.push(output)
2439
- return outputs
2440
- })())))
2557
+ reduce(while_(self, predicate), () => [] as Array<Output>, (outputs, output) => {
2558
+ outputs.push(output)
2559
+ return outputs
2560
+ }))
2441
2561
 
2442
2562
  /**
2443
2563
  * Returns a new `Schedule` that recurs on the specified `Cron` schedule and
@@ -2445,7 +2565,9 @@ export const collectWhile: {
2445
2565
  *
2446
2566
  * @example
2447
2567
  * ```ts
2448
- * import { Console, Effect, Schedule } from "effect"
2568
+ * import { Console, Data, Effect, Schedule } from "effect"
2569
+ *
2570
+ * class ScheduledTaskError extends Data.TaggedError("ScheduledTaskError")<{ readonly message: string }> {}
2449
2571
  *
2450
2572
  * // Run every minute
2451
2573
  * const everyMinute = Schedule.cron("* * * * *")
@@ -2546,7 +2668,7 @@ export const collectWhile: {
2546
2668
  * yield* Console.log("Complex scheduled task...")
2547
2669
  * // Simulate occasional failures
2548
2670
  * if (Math.random() < 0.3) {
2549
- * yield* Effect.fail(new Error("Scheduled task failed"))
2671
+ * return yield* Effect.fail(new ScheduledTaskError({ message: "Scheduled task failed" }))
2550
2672
  * }
2551
2673
  * return "success"
2552
2674
  * }),
@@ -2569,7 +2691,9 @@ export const cron: {
2569
2691
  *
2570
2692
  * @example
2571
2693
  * ```ts
2572
- * import { Console, Effect, Schedule } from "effect"
2694
+ * import { Console, Data, Effect, Schedule } from "effect"
2695
+ *
2696
+ * class ScheduledTaskError extends Data.TaggedError("ScheduledTaskError")<{ readonly message: string }> {}
2573
2697
  *
2574
2698
  * // Run every minute
2575
2699
  * const everyMinute = Schedule.cron("* * * * *")
@@ -2670,7 +2794,7 @@ export const cron: {
2670
2794
  * yield* Console.log("Complex scheduled task...")
2671
2795
  * // Simulate occasional failures
2672
2796
  * if (Math.random() < 0.3) {
2673
- * yield* Effect.fail(new Error("Scheduled task failed"))
2797
+ * return yield* Effect.fail(new ScheduledTaskError({ message: "Scheduled task failed" }))
2674
2798
  * }
2675
2799
  * return "success"
2676
2800
  * }),
@@ -2693,7 +2817,9 @@ export const cron: {
2693
2817
  *
2694
2818
  * @example
2695
2819
  * ```ts
2696
- * import { Console, Effect, Schedule } from "effect"
2820
+ * import { Console, Data, Effect, Schedule } from "effect"
2821
+ *
2822
+ * class ScheduledTaskError extends Data.TaggedError("ScheduledTaskError")<{ readonly message: string }> {}
2697
2823
  *
2698
2824
  * // Run every minute
2699
2825
  * const everyMinute = Schedule.cron("* * * * *")
@@ -2794,7 +2920,7 @@ export const cron: {
2794
2920
  * yield* Console.log("Complex scheduled task...")
2795
2921
  * // Simulate occasional failures
2796
2922
  * if (Math.random() < 0.3) {
2797
- * yield* Effect.fail(new Error("Scheduled task failed"))
2923
+ * return yield* Effect.fail(new ScheduledTaskError({ message: "Scheduled task failed" }))
2798
2924
  * }
2799
2925
  * return "success"
2800
2926
  * }),
@@ -2916,13 +3042,33 @@ export const delays = <Out, In, E, R>(self: Schedule<Out, In, E, R>): Schedule<D
2916
3042
  )
2917
3043
  )
2918
3044
 
3045
+ /**
3046
+ * Returns a schedule that recurs once after the specified duration.
3047
+ *
3048
+ * The schedule outputs the configured duration for its first recurrence and
3049
+ * then completes.
3050
+ *
3051
+ * @since 2.0.0
3052
+ * @category constructors
3053
+ */
3054
+ export const duration = (durationInput: Duration.Input): Schedule<Duration.Duration> => {
3055
+ const duration = Duration.fromInputUnsafe(durationInput)
3056
+ return fromStepWithMetadata(effect.succeed((meta) =>
3057
+ meta.attempt === 1
3058
+ ? effect.succeed([duration, duration])
3059
+ : Cause.done(Duration.zero)
3060
+ ))
3061
+ }
3062
+
2919
3063
  /**
2920
3064
  * Returns a new `Schedule` that will always recur, but only during the
2921
3065
  * specified `duration` of time.
2922
3066
  *
2923
3067
  * @example
2924
3068
  * ```ts
2925
- * import { Console, Effect, Schedule } from "effect"
3069
+ * import { Console, Data, Effect, Schedule } from "effect"
3070
+ *
3071
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
2926
3072
  *
2927
3073
  * // Run a task for exactly 5 seconds, regardless of how many iterations
2928
3074
  * const fiveSecondSchedule = Schedule.during("5 seconds")
@@ -2984,7 +3130,7 @@ export const delays = <Out, In, E, R>(self: Schedule<Out, In, E, R>): Schedule<D
2984
3130
  * yield* Console.log(`Retry attempt ${attempt}`)
2985
3131
  *
2986
3132
  * if (Math.random() < 0.8) { // 80% failure rate
2987
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
3133
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
2988
3134
  * }
2989
3135
  *
2990
3136
  * return `Success on attempt ${attempt}`
@@ -3001,10 +3147,10 @@ export const delays = <Out, In, E, R>(self: Schedule<Out, In, E, R>): Schedule<D
3001
3147
  * @since 4.0.0
3002
3148
  * @category constructors
3003
3149
  */
3004
- export const during = (duration: Duration.DurationInput): Schedule<Duration.Duration> =>
3150
+ export const during = (duration: Duration.Input): Schedule<Duration.Duration> =>
3005
3151
  while_(
3006
3152
  elapsed,
3007
- ({ output }) => effect.succeed(Duration.isLessThanOrEqualTo(output, Duration.fromDurationInputUnsafe(duration)))
3153
+ ({ output }) => effect.succeed(Duration.isLessThanOrEqualTo(output, Duration.fromInputUnsafe(duration)))
3008
3154
  )
3009
3155
 
3010
3156
  /**
@@ -3014,7 +3160,9 @@ export const during = (duration: Duration.DurationInput): Schedule<Duration.Dura
3014
3160
  *
3015
3161
  * @example
3016
3162
  * ```ts
3017
- * import { Console, Effect, Schedule } from "effect"
3163
+ * import { Console, Data, Effect, Schedule } from "effect"
3164
+ *
3165
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
3018
3166
  *
3019
3167
  * // Either continues as long as at least one schedule wants to continue
3020
3168
  * const timeBasedSchedule = Schedule.spaced("2 seconds").pipe(Schedule.take(3))
@@ -3058,7 +3206,7 @@ export const during = (duration: Duration.DurationInput): Schedule<Duration.Dura
3058
3206
  * yield* Console.log(`Retry attempt ${attempt}`)
3059
3207
  *
3060
3208
  * if (attempt < 6) {
3061
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
3209
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
3062
3210
  * }
3063
3211
  *
3064
3212
  * return `Success on attempt ${attempt}`
@@ -3084,7 +3232,9 @@ export const either: {
3084
3232
  *
3085
3233
  * @example
3086
3234
  * ```ts
3087
- * import { Console, Effect, Schedule } from "effect"
3235
+ * import { Console, Data, Effect, Schedule } from "effect"
3236
+ *
3237
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
3088
3238
  *
3089
3239
  * // Either continues as long as at least one schedule wants to continue
3090
3240
  * const timeBasedSchedule = Schedule.spaced("2 seconds").pipe(Schedule.take(3))
@@ -3128,7 +3278,7 @@ export const either: {
3128
3278
  * yield* Console.log(`Retry attempt ${attempt}`)
3129
3279
  *
3130
3280
  * if (attempt < 6) {
3131
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
3281
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
3132
3282
  * }
3133
3283
  *
3134
3284
  * return `Success on attempt ${attempt}`
@@ -3156,7 +3306,9 @@ export const either: {
3156
3306
  *
3157
3307
  * @example
3158
3308
  * ```ts
3159
- * import { Console, Effect, Schedule } from "effect"
3309
+ * import { Console, Data, Effect, Schedule } from "effect"
3310
+ *
3311
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
3160
3312
  *
3161
3313
  * // Either continues as long as at least one schedule wants to continue
3162
3314
  * const timeBasedSchedule = Schedule.spaced("2 seconds").pipe(Schedule.take(3))
@@ -3200,7 +3352,7 @@ export const either: {
3200
3352
  * yield* Console.log(`Retry attempt ${attempt}`)
3201
3353
  *
3202
3354
  * if (attempt < 6) {
3203
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
3355
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
3204
3356
  * }
3205
3357
  *
3206
3358
  * return `Success on attempt ${attempt}`
@@ -3704,7 +3856,9 @@ export const elapsed: Schedule<Duration.Duration> = fromStepWithMetadata(
3704
3856
  *
3705
3857
  * @example
3706
3858
  * ```ts
3707
- * import { Console, Effect, Schedule } from "effect"
3859
+ * import { Console, Data, Effect, Schedule } from "effect"
3860
+ *
3861
+ * class RetryFailure extends Data.TaggedError("RetryFailure")<{ readonly message: string }> {}
3708
3862
  *
3709
3863
  * // Basic exponential backoff with default factor of 2
3710
3864
  * const basicExponential = Schedule.exponential("100 millis")
@@ -3727,7 +3881,7 @@ export const elapsed: Schedule<Duration.Duration> = fromStepWithMetadata(
3727
3881
  * attempt++
3728
3882
  * if (attempt < 4) {
3729
3883
  * yield* Console.log(`Attempt ${attempt} failed, retrying...`)
3730
- * yield* Effect.fail(new Error(`Failure ${attempt}`))
3884
+ * return yield* Effect.fail(new RetryFailure({ message: `Failure ${attempt}` }))
3731
3885
  * }
3732
3886
  * return `Success on attempt ${attempt}`
3733
3887
  * }),
@@ -3744,10 +3898,10 @@ export const elapsed: Schedule<Duration.Duration> = fromStepWithMetadata(
3744
3898
  * @category constructors
3745
3899
  */
3746
3900
  export const exponential = (
3747
- base: Duration.DurationInput,
3901
+ base: Duration.Input,
3748
3902
  factor: number = 2
3749
3903
  ): Schedule<Duration.Duration> => {
3750
- const baseMillis = Duration.toMillis(Duration.fromDurationInputUnsafe(base))
3904
+ const baseMillis = Duration.toMillis(Duration.fromInputUnsafe(base))
3751
3905
  return fromStepWithMetadata(effect.succeed((meta) => {
3752
3906
  const duration = Duration.millis(baseMillis * Math.pow(factor, meta.attempt - 1))
3753
3907
  return effect.succeed([duration, duration])
@@ -3761,7 +3915,9 @@ export const exponential = (
3761
3915
  *
3762
3916
  * @example
3763
3917
  * ```ts
3764
- * import { Console, Effect, Schedule } from "effect"
3918
+ * import { Console, Data, Effect, Schedule } from "effect"
3919
+ *
3920
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
3765
3921
  *
3766
3922
  * // Basic fibonacci schedule starting with 100ms
3767
3923
  * const fibSchedule = Schedule.fibonacci("100 millis")
@@ -3777,7 +3933,7 @@ export const exponential = (
3777
3933
  * yield* Console.log(`Attempt ${attempt}`)
3778
3934
  *
3779
3935
  * if (attempt < 5) {
3780
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
3936
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
3781
3937
  * }
3782
3938
  *
3783
3939
  * return `Success on attempt ${attempt}`
@@ -3818,8 +3974,8 @@ export const exponential = (
3818
3974
  * @since 2.0.0
3819
3975
  * @category constructors
3820
3976
  */
3821
- export const fibonacci = (one: Duration.DurationInput): Schedule<Duration.Duration> => {
3822
- const oneMillis = Duration.toMillis(Duration.fromDurationInputUnsafe(one))
3977
+ export const fibonacci = (one: Duration.Input): Schedule<Duration.Duration> => {
3978
+ const oneMillis = Duration.toMillis(Duration.fromInputUnsafe(one))
3823
3979
  return fromStep(effect.sync(() => {
3824
3980
  let a = 0
3825
3981
  let b = oneMillis
@@ -3895,12 +4051,12 @@ export const fibonacci = (one: Duration.DurationInput): Schedule<Duration.Durati
3895
4051
  * @since 2.0.0
3896
4052
  * @category constructors
3897
4053
  */
3898
- export const fixed = (interval: Duration.DurationInput): Schedule<number> => {
3899
- const window = Duration.toMillis(Duration.fromDurationInputUnsafe(interval))
4054
+ export const fixed = (interval: Duration.Input): Schedule<number> => {
4055
+ const window = Duration.toMillis(Duration.fromInputUnsafe(interval))
3900
4056
  return fromStepWithMetadata(effect.succeed((meta) =>
3901
4057
  effect.succeed([
3902
4058
  meta.attempt - 1,
3903
- window === 0 || meta.elapsedSincePrevious > window
4059
+ window === 0
3904
4060
  ? Duration.zero
3905
4061
  : Duration.millis(window - (meta.elapsed % window))
3906
4062
  ])
@@ -4032,7 +4188,7 @@ export const map: {
4032
4188
  * @since 2.0.0
4033
4189
  * @category mapping
4034
4190
  */
4035
- <Output, Output2, Error2 = never, Env2 = never>(f: (output: Output) => Effect<Output2, Error2, Env2>): <Input, Error, Env>(
4191
+ <Output, Output2, Error2 = never, Env2 = never>(f: (output: Output) => Output2 | Effect<Output2, Error2, Env2>): <Input, Error, Env>(
4036
4192
  self: Schedule<Output, Input, Error, Env>
4037
4193
  ) => Schedule<Output2, Input, Error | Error2, Env | Env2>
4038
4194
  /**
@@ -4099,17 +4255,24 @@ export const map: {
4099
4255
  */
4100
4256
  <Output, Input, Error, Env, Output2, Error2 = never, Env2 = never>(
4101
4257
  self: Schedule<Output, Input, Error, Env>,
4102
- f: (output: Output) => Effect<Output2, Error2, Env2>
4258
+ f: (output: Output) => Output2 | Effect<Output2, Error2, Env2>
4103
4259
  ): Schedule<Output2, Input, Error | Error2, Env | Env2>
4104
4260
  } = dual(2, <Output, Input, Error, Env, Output2, Error2 = never, Env2 = never>(
4105
4261
  self: Schedule<Output, Input, Error, Env>,
4106
- f: (output: Output) => Effect<Output2, Error2, Env2>
4262
+ f: (output: Output) => Output2 | Effect<Output2, Error2, Env2>
4107
4263
  ): Schedule<Output2, Input, Error | Error2, Env | Env2> => {
4108
4264
  const handle = Pull.matchEffect({
4109
- onSuccess: ([output, duration]: [Output, Duration.Duration]) =>
4110
- effect.map(f(output), (output) => [output, duration] as [Output2, Duration.Duration]),
4265
+ onSuccess: ([output, duration]: [Output, Duration.Duration]) => {
4266
+ const result = f(output)
4267
+ if (!isEffect(result)) return effect.succeed([result, duration] as [Output2, Duration.Duration])
4268
+ return effect.map(result, (output) => [output, duration] as [Output2, Duration.Duration])
4269
+ },
4111
4270
  onFailure: effect.failCause<Error>,
4112
- onDone: (output: Output) => effect.flatMap(f(output), Cause.done)
4271
+ onDone: (output: Output) => {
4272
+ const result = f(output)
4273
+ if (!isEffect(result)) return Cause.done(result as Output2)
4274
+ return effect.flatMap(result, Cause.done)
4275
+ }
4113
4276
  })
4114
4277
  return fromStep(effect.map(toStep(self), (step) => (now, input) => handle(step(now, input))))
4115
4278
  })
@@ -4183,7 +4346,7 @@ export const modifyDelay: {
4183
4346
  f: (
4184
4347
  output: Output,
4185
4348
  delay: Duration.Duration
4186
- ) => Effect<Duration.DurationInput, Error2, Env2>
4349
+ ) => Effect<Duration.Input, Error2, Env2>
4187
4350
  ): <Input, Error, Env>(
4188
4351
  self: Schedule<Output, Input, Error, Env>
4189
4352
  ) => Schedule<Output, Input, Error | Error2, Env | Env2>
@@ -4223,22 +4386,39 @@ export const modifyDelay: {
4223
4386
  self: Schedule<Output, Input, Error, Env>,
4224
4387
  f: (
4225
4388
  output: Output,
4226
- delay: Duration.DurationInput
4227
- ) => Effect<Duration.DurationInput, Error2, Env2>
4389
+ delay: Duration.Input
4390
+ ) => Effect<Duration.Input, Error2, Env2>
4228
4391
  ): Schedule<Output, Input, Error | Error2, Env | Env2>
4229
4392
  } = dual(2, <Output, Input, Error, Env, Error2 = never, Env2 = never>(
4230
4393
  self: Schedule<Output, Input, Error, Env>,
4231
4394
  f: (
4232
4395
  output: Output,
4233
- delay: Duration.DurationInput
4234
- ) => Effect<Duration.DurationInput, Error2, Env2>
4396
+ delay: Duration.Input
4397
+ ) => Effect<Duration.Input, Error2, Env2>
4235
4398
  ): Schedule<Output, Input, Error | Error2, Env | Env2> =>
4236
4399
  fromStep(effect.map(toStep(self), (step) => (now, input) =>
4237
4400
  effect.flatMap(
4238
4401
  step(now, input),
4239
- ([output, delay]) => effect.map(f(output, delay), (delay) => [output, Duration.fromDurationInputUnsafe(delay)])
4402
+ ([output, delay]) => effect.map(f(output, delay), (delay) => [output, Duration.fromInputUnsafe(delay)])
4240
4403
  ))))
4241
4404
 
4405
+ /**
4406
+ * Returns a new `Schedule` that randomly adjusts each recurrence delay.
4407
+ *
4408
+ * Delays are jittered between `80%` and `120%` of the original delay.
4409
+ *
4410
+ * @since 2.0.0
4411
+ * @category utilities
4412
+ */
4413
+ export const jittered = <Output, Input, Error, Env>(
4414
+ self: Schedule<Output, Input, Error, Env>
4415
+ ): Schedule<Output, Input, Error, Env> =>
4416
+ modifyDelay(self, (_, delay) =>
4417
+ effect.map(randomNext, (random) => {
4418
+ const millis = Duration.toMillis(Duration.fromInputUnsafe(delay))
4419
+ return Duration.millis(millis * 0.8 * (1 - random) + millis * 1.2 * random)
4420
+ }))
4421
+
4242
4422
  /**
4243
4423
  * Returns a new `Schedule` that outputs the inputs of the specified schedule.
4244
4424
  *
@@ -4283,7 +4463,9 @@ export const passthrough = <Output, Input, Error, Env>(
4283
4463
  *
4284
4464
  * @example
4285
4465
  * ```ts
4286
- * import { Console, Effect, Schedule } from "effect"
4466
+ * import { Console, Data, Effect, Schedule } from "effect"
4467
+ *
4468
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
4287
4469
  *
4288
4470
  * // Basic recurs - retry at most 3 times
4289
4471
  * const maxThreeAttempts = Schedule.recurs(3)
@@ -4298,7 +4480,7 @@ export const passthrough = <Output, Input, Error, Env>(
4298
4480
  * yield* Console.log(`Attempt ${attempt}`)
4299
4481
  *
4300
4482
  * if (attempt < 4) {
4301
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
4483
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
4302
4484
  * }
4303
4485
  *
4304
4486
  * return `Success on attempt ${attempt}`
@@ -4559,7 +4741,7 @@ export const reduce: {
4559
4741
  */
4560
4742
  <State, Output, Error2 = never, Env2 = never>(
4561
4743
  initial: LazyArg<State>,
4562
- combine: (state: State, output: Output) => Effect<State, Error2, Env2>
4744
+ combine: (state: State, output: Output) => State | Effect<State, Error2, Env2>
4563
4745
  ): <Input, Error, Env>(
4564
4746
  self: Schedule<Output, Input, Error, Env>
4565
4747
  ) => Schedule<State, Input, Error | Error2, Env | Env2>
@@ -4677,24 +4859,33 @@ export const reduce: {
4677
4859
  <Output, Input, Error, Env, State, Error2 = never, Env2 = never>(
4678
4860
  self: Schedule<Output, Input, Error, Env>,
4679
4861
  initial: LazyArg<State>,
4680
- combine: (state: State, output: Output) => Effect<State, Error2, Env2>
4862
+ combine: (state: State, output: Output) => State | Effect<State, Error2, Env2>
4681
4863
  ): Schedule<State, Input, Error | Error2, Env | Env2>
4682
4864
  } = dual(3, <Output, Input, Error, Env, State, Error2 = never, Env2 = never>(
4683
4865
  self: Schedule<Output, Input, Error, Env>,
4684
4866
  initial: LazyArg<State>,
4685
- combine: (state: State, output: Output) => Effect<State, Error2, Env2>
4867
+ combine: (state: State, output: Output) => State | Effect<State, Error2, Env2>
4686
4868
  ): Schedule<State, Input, Error | Error2, Env | Env2> =>
4687
4869
  fromStep(effect.map(toStep(self), (step) => {
4688
4870
  let state = initial()
4689
4871
  return (now, input) =>
4690
4872
  Pull.matchEffect(step(now, input), {
4691
- onSuccess: ([output, delay]) =>
4692
- effect.map(combine(state, output), (nextState) => {
4873
+ onSuccess([output, delay]) {
4874
+ const next = combine(state, output)
4875
+ if (!isEffect(next)) {
4876
+ state = next
4877
+ return effect.succeed([next, delay] as [State, Duration.Duration])
4878
+ }
4879
+ return effect.map(next, (nextState) => {
4693
4880
  state = nextState
4694
4881
  return [nextState, delay]
4695
- }),
4882
+ })
4883
+ },
4696
4884
  onFailure: effect.failCause,
4697
- onDone: (output) => effect.flatMap(combine(state, output), Cause.done)
4885
+ onDone(output) {
4886
+ const next = combine(state, output)
4887
+ return isEffect(next) ? effect.flatMap(next, Cause.done) : Cause.done(next)
4888
+ }
4698
4889
  })
4699
4890
  })))
4700
4891
 
@@ -4747,8 +4938,8 @@ export const reduce: {
4747
4938
  * @since 2.0.0
4748
4939
  * @category constructors
4749
4940
  */
4750
- export const spaced = (duration: Duration.DurationInput): Schedule<number> => {
4751
- const decoded = Duration.fromDurationInputUnsafe(duration)
4941
+ export const spaced = (duration: Duration.Input): Schedule<number> => {
4942
+ const decoded = Duration.fromInputUnsafe(duration)
4752
4943
  return fromStepWithMetadata(effect.succeed((meta) => effect.succeed([meta.attempt - 1, decoded])))
4753
4944
  }
4754
4945
 
@@ -4759,12 +4950,14 @@ export const spaced = (duration: Duration.DurationInput): Schedule<number> => {
4759
4950
  *
4760
4951
  * @example
4761
4952
  * ```ts
4762
- * import { Console, Effect, Schedule } from "effect"
4953
+ * import { Console, Data, Effect, Schedule } from "effect"
4954
+ *
4955
+ * class RetryError extends Data.TaggedError("RetryError")<{ readonly message: string }> {}
4763
4956
  *
4764
4957
  * // Log retry errors for debugging
4765
4958
  * const errorLoggingSchedule = Schedule.exponential("100 millis").pipe(
4766
4959
  * Schedule.take(3),
4767
- * Schedule.tapInput((error: Error) =>
4960
+ * Schedule.tapInput((error: RetryError) =>
4768
4961
  * Console.log(`Retry triggered by error: ${String(error)}`)
4769
4962
  * )
4770
4963
  * )
@@ -4776,7 +4969,7 @@ export const spaced = (duration: Duration.DurationInput): Schedule<number> => {
4776
4969
  * Effect.gen(function*() {
4777
4970
  * attempt++
4778
4971
  * if (attempt < 4) {
4779
- * yield* Effect.fail(new Error(`Network timeout on attempt ${attempt}`))
4972
+ * return yield* Effect.fail(new RetryError({ message: `Network timeout on attempt ${attempt}` }))
4780
4973
  * }
4781
4974
  * return `Success on attempt ${attempt}`
4782
4975
  * }),
@@ -4825,7 +5018,7 @@ export const spaced = (duration: Duration.DurationInput): Schedule<number> => {
4825
5018
  * // Conditional alerting based on input
4826
5019
  * const alertingSchedule = Schedule.exponential("200 millis").pipe(
4827
5020
  * Schedule.take(6),
4828
- * Schedule.tapInput((error: Error) =>
5021
+ * Schedule.tapInput((error: RetryError) =>
4829
5022
  * Effect.gen(function*() {
4830
5023
  * if (String(error).includes("critical")) {
4831
5024
  * yield* Console.log(`🚨 CRITICAL ERROR: ${String(error)}`)
@@ -4847,7 +5040,7 @@ export const spaced = (duration: Duration.DurationInput): Schedule<number> => {
4847
5040
  * const errorType = isCritical
4848
5041
  * ? "critical database failure"
4849
5042
  * : "temporary network issue"
4850
- * yield* Effect.fail(new Error(errorType))
5043
+ * return yield* Effect.fail(new RetryError({ message: errorType }))
4851
5044
  * }),
4852
5045
  * alertingSchedule
4853
5046
  * ).pipe(
@@ -4860,10 +5053,10 @@ export const spaced = (duration: Duration.DurationInput): Schedule<number> => {
4860
5053
  * // Chain multiple input taps for different purposes
4861
5054
  * const comprehensiveSchedule = Schedule.fibonacci("100 millis").pipe(
4862
5055
  * Schedule.take(5),
4863
- * Schedule.tapInput((error: Error) =>
4864
- * Console.log(`Error occurred: ${error.name}`)
5056
+ * Schedule.tapInput((error: RetryError) =>
5057
+ * Console.log(`Error occurred: ${error._tag}`)
4865
5058
  * ),
4866
- * Schedule.tapInput((error: Error) =>
5059
+ * Schedule.tapInput((error: RetryError) =>
4867
5060
  * String(error).length > 20
4868
5061
  * ? Console.log("📝 Long error message detected")
4869
5062
  * : Effect.void
@@ -4882,12 +5075,14 @@ export const tapInput: {
4882
5075
  *
4883
5076
  * @example
4884
5077
  * ```ts
4885
- * import { Console, Effect, Schedule } from "effect"
5078
+ * import { Console, Data, Effect, Schedule } from "effect"
5079
+ *
5080
+ * class RetryError extends Data.TaggedError("RetryError")<{ readonly message: string }> {}
4886
5081
  *
4887
5082
  * // Log retry errors for debugging
4888
5083
  * const errorLoggingSchedule = Schedule.exponential("100 millis").pipe(
4889
5084
  * Schedule.take(3),
4890
- * Schedule.tapInput((error: Error) =>
5085
+ * Schedule.tapInput((error: RetryError) =>
4891
5086
  * Console.log(`Retry triggered by error: ${String(error)}`)
4892
5087
  * )
4893
5088
  * )
@@ -4899,7 +5094,7 @@ export const tapInput: {
4899
5094
  * Effect.gen(function*() {
4900
5095
  * attempt++
4901
5096
  * if (attempt < 4) {
4902
- * yield* Effect.fail(new Error(`Network timeout on attempt ${attempt}`))
5097
+ * return yield* Effect.fail(new RetryError({ message: `Network timeout on attempt ${attempt}` }))
4903
5098
  * }
4904
5099
  * return `Success on attempt ${attempt}`
4905
5100
  * }),
@@ -4948,7 +5143,7 @@ export const tapInput: {
4948
5143
  * // Conditional alerting based on input
4949
5144
  * const alertingSchedule = Schedule.exponential("200 millis").pipe(
4950
5145
  * Schedule.take(6),
4951
- * Schedule.tapInput((error: Error) =>
5146
+ * Schedule.tapInput((error: RetryError) =>
4952
5147
  * Effect.gen(function*() {
4953
5148
  * if (String(error).includes("critical")) {
4954
5149
  * yield* Console.log(`🚨 CRITICAL ERROR: ${String(error)}`)
@@ -4970,7 +5165,7 @@ export const tapInput: {
4970
5165
  * const errorType = isCritical
4971
5166
  * ? "critical database failure"
4972
5167
  * : "temporary network issue"
4973
- * yield* Effect.fail(new Error(errorType))
5168
+ * return yield* Effect.fail(new RetryError({ message: errorType }))
4974
5169
  * }),
4975
5170
  * alertingSchedule
4976
5171
  * ).pipe(
@@ -4983,10 +5178,10 @@ export const tapInput: {
4983
5178
  * // Chain multiple input taps for different purposes
4984
5179
  * const comprehensiveSchedule = Schedule.fibonacci("100 millis").pipe(
4985
5180
  * Schedule.take(5),
4986
- * Schedule.tapInput((error: Error) =>
4987
- * Console.log(`Error occurred: ${error.name}`)
5181
+ * Schedule.tapInput((error: RetryError) =>
5182
+ * Console.log(`Error occurred: ${error._tag}`)
4988
5183
  * ),
4989
- * Schedule.tapInput((error: Error) =>
5184
+ * Schedule.tapInput((error: RetryError) =>
4990
5185
  * String(error).length > 20
4991
5186
  * ? Console.log("📝 Long error message detected")
4992
5187
  * : Effect.void
@@ -5007,12 +5202,14 @@ export const tapInput: {
5007
5202
  *
5008
5203
  * @example
5009
5204
  * ```ts
5010
- * import { Console, Effect, Schedule } from "effect"
5205
+ * import { Console, Data, Effect, Schedule } from "effect"
5206
+ *
5207
+ * class RetryError extends Data.TaggedError("RetryError")<{ readonly message: string }> {}
5011
5208
  *
5012
5209
  * // Log retry errors for debugging
5013
5210
  * const errorLoggingSchedule = Schedule.exponential("100 millis").pipe(
5014
5211
  * Schedule.take(3),
5015
- * Schedule.tapInput((error: Error) =>
5212
+ * Schedule.tapInput((error: RetryError) =>
5016
5213
  * Console.log(`Retry triggered by error: ${String(error)}`)
5017
5214
  * )
5018
5215
  * )
@@ -5024,7 +5221,7 @@ export const tapInput: {
5024
5221
  * Effect.gen(function*() {
5025
5222
  * attempt++
5026
5223
  * if (attempt < 4) {
5027
- * yield* Effect.fail(new Error(`Network timeout on attempt ${attempt}`))
5224
+ * return yield* Effect.fail(new RetryError({ message: `Network timeout on attempt ${attempt}` }))
5028
5225
  * }
5029
5226
  * return `Success on attempt ${attempt}`
5030
5227
  * }),
@@ -5073,7 +5270,7 @@ export const tapInput: {
5073
5270
  * // Conditional alerting based on input
5074
5271
  * const alertingSchedule = Schedule.exponential("200 millis").pipe(
5075
5272
  * Schedule.take(6),
5076
- * Schedule.tapInput((error: Error) =>
5273
+ * Schedule.tapInput((error: RetryError) =>
5077
5274
  * Effect.gen(function*() {
5078
5275
  * if (String(error).includes("critical")) {
5079
5276
  * yield* Console.log(`🚨 CRITICAL ERROR: ${String(error)}`)
@@ -5095,7 +5292,7 @@ export const tapInput: {
5095
5292
  * const errorType = isCritical
5096
5293
  * ? "critical database failure"
5097
5294
  * : "temporary network issue"
5098
- * yield* Effect.fail(new Error(errorType))
5295
+ * return yield* Effect.fail(new RetryError({ message: errorType }))
5099
5296
  * }),
5100
5297
  * alertingSchedule
5101
5298
  * ).pipe(
@@ -5108,10 +5305,10 @@ export const tapInput: {
5108
5305
  * // Chain multiple input taps for different purposes
5109
5306
  * const comprehensiveSchedule = Schedule.fibonacci("100 millis").pipe(
5110
5307
  * Schedule.take(5),
5111
- * Schedule.tapInput((error: Error) =>
5112
- * Console.log(`Error occurred: ${error.name}`)
5308
+ * Schedule.tapInput((error: RetryError) =>
5309
+ * Console.log(`Error occurred: ${error._tag}`)
5113
5310
  * ),
5114
- * Schedule.tapInput((error: Error) =>
5311
+ * Schedule.tapInput((error: RetryError) =>
5115
5312
  * String(error).length > 20
5116
5313
  * ? Console.log("📝 Long error message detected")
5117
5314
  * : Effect.void
@@ -5142,7 +5339,9 @@ export const tapInput: {
5142
5339
  *
5143
5340
  * @example
5144
5341
  * ```ts
5145
- * import { Console, Effect, Schedule } from "effect"
5342
+ * import { Console, Data, Effect, Schedule } from "effect"
5343
+ *
5344
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
5146
5345
  *
5147
5346
  * // Log schedule outputs for debugging/monitoring
5148
5347
  * const monitoredSchedule = Schedule.exponential("100 millis").pipe(
@@ -5157,7 +5356,7 @@ export const tapInput: {
5157
5356
  * Effect.gen(function*() {
5158
5357
  * attempt++
5159
5358
  * if (attempt < 4) {
5160
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
5359
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
5161
5360
  * }
5162
5361
  * return `Success on attempt ${attempt}`
5163
5362
  * }),
@@ -5226,7 +5425,9 @@ export const tapOutput: {
5226
5425
  *
5227
5426
  * @example
5228
5427
  * ```ts
5229
- * import { Console, Effect, Schedule } from "effect"
5428
+ * import { Console, Data, Effect, Schedule } from "effect"
5429
+ *
5430
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
5230
5431
  *
5231
5432
  * // Log schedule outputs for debugging/monitoring
5232
5433
  * const monitoredSchedule = Schedule.exponential("100 millis").pipe(
@@ -5241,7 +5442,7 @@ export const tapOutput: {
5241
5442
  * Effect.gen(function*() {
5242
5443
  * attempt++
5243
5444
  * if (attempt < 4) {
5244
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
5445
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
5245
5446
  * }
5246
5447
  * return `Success on attempt ${attempt}`
5247
5448
  * }),
@@ -5312,7 +5513,9 @@ export const tapOutput: {
5312
5513
  *
5313
5514
  * @example
5314
5515
  * ```ts
5315
- * import { Console, Effect, Schedule } from "effect"
5516
+ * import { Console, Data, Effect, Schedule } from "effect"
5517
+ *
5518
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
5316
5519
  *
5317
5520
  * // Log schedule outputs for debugging/monitoring
5318
5521
  * const monitoredSchedule = Schedule.exponential("100 millis").pipe(
@@ -5327,7 +5530,7 @@ export const tapOutput: {
5327
5530
  * Effect.gen(function*() {
5328
5531
  * attempt++
5329
5532
  * if (attempt < 4) {
5330
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
5533
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
5331
5534
  * }
5332
5535
  * return `Success on attempt ${attempt}`
5333
5536
  * }),
@@ -5408,7 +5611,9 @@ export const tapOutput: {
5408
5611
  *
5409
5612
  * @example
5410
5613
  * ```ts
5411
- * import { Console, Effect, Schedule } from "effect"
5614
+ * import { Console, Data, Effect, Schedule } from "effect"
5615
+ *
5616
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
5412
5617
  *
5413
5618
  * // Limit an infinite schedule to run only 5 times
5414
5619
  * const limitedHeartbeat = Schedule.spaced("1 second").pipe(
@@ -5441,7 +5646,7 @@ export const tapOutput: {
5441
5646
  * yield* Console.log(`Attempt ${attempt}`)
5442
5647
  *
5443
5648
  * if (attempt < 5) { // Will fail more than 3 times
5444
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
5649
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
5445
5650
  * }
5446
5651
  *
5447
5652
  * return `Success on attempt ${attempt}`
@@ -5487,7 +5692,9 @@ export const take: {
5487
5692
  *
5488
5693
  * @example
5489
5694
  * ```ts
5490
- * import { Console, Effect, Schedule } from "effect"
5695
+ * import { Console, Data, Effect, Schedule } from "effect"
5696
+ *
5697
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
5491
5698
  *
5492
5699
  * // Limit an infinite schedule to run only 5 times
5493
5700
  * const limitedHeartbeat = Schedule.spaced("1 second").pipe(
@@ -5520,7 +5727,7 @@ export const take: {
5520
5727
  * yield* Console.log(`Attempt ${attempt}`)
5521
5728
  *
5522
5729
  * if (attempt < 5) { // Will fail more than 3 times
5523
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
5730
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
5524
5731
  * }
5525
5732
  *
5526
5733
  * return `Success on attempt ${attempt}`
@@ -5568,7 +5775,9 @@ export const take: {
5568
5775
  *
5569
5776
  * @example
5570
5777
  * ```ts
5571
- * import { Console, Effect, Schedule } from "effect"
5778
+ * import { Console, Data, Effect, Schedule } from "effect"
5779
+ *
5780
+ * class RetryAttemptError extends Data.TaggedError("RetryAttemptError")<{ readonly message: string }> {}
5572
5781
  *
5573
5782
  * // Limit an infinite schedule to run only 5 times
5574
5783
  * const limitedHeartbeat = Schedule.spaced("1 second").pipe(
@@ -5601,7 +5810,7 @@ export const take: {
5601
5810
  * yield* Console.log(`Attempt ${attempt}`)
5602
5811
  *
5603
5812
  * if (attempt < 5) { // Will fail more than 3 times
5604
- * yield* Effect.fail(new Error(`Attempt ${attempt} failed`))
5813
+ * return yield* Effect.fail(new RetryAttemptError({ message: `Attempt ${attempt} failed` }))
5605
5814
  * }
5606
5815
  *
5607
5816
  * return `Success on attempt ${attempt}`
@@ -5761,7 +5970,7 @@ const while_: {
5761
5970
  <Input, Output, Error2 = never, Env2 = never>(
5762
5971
  predicate: (
5763
5972
  metadata: Metadata<Output, Input>
5764
- ) => Effect<boolean, Error2, Env2>
5973
+ ) => boolean | Effect<boolean, Error2, Env2>
5765
5974
  ): <Error, Env>(
5766
5975
  self: Schedule<Output, Input, Error, Env>
5767
5976
  ) => Schedule<Output, Input, Error | Error2, Env | Env2>
@@ -5769,21 +5978,22 @@ const while_: {
5769
5978
  self: Schedule<Output, Input, Error, Env>,
5770
5979
  predicate: (
5771
5980
  metadata: Metadata<Output, Input>
5772
- ) => Effect<boolean, Error2, Env2>
5981
+ ) => boolean | Effect<boolean, Error2, Env2>
5773
5982
  ): Schedule<Output, Input, Error | Error2, Env | Env2>
5774
5983
  } = dual(2, <Output, Input, Error, Env, Error2 = never, Env2 = never>(
5775
5984
  self: Schedule<Output, Input, Error, Env>,
5776
5985
  predicate: (
5777
5986
  metadata: Metadata<Output, Input>
5778
- ) => Effect<boolean, Error2, Env2>
5987
+ ) => boolean | Effect<boolean, Error2, Env2>
5779
5988
  ): Schedule<Output, Input, Error | Error2, Env | Env2> =>
5780
5989
  fromStep(effect.map(toStep(self), (step) => {
5781
5990
  const meta = metadataFn()
5782
5991
  return (now, input) =>
5783
5992
  effect.flatMap(step(now, input), (result) => {
5784
5993
  const [output, duration] = result
5994
+ const eff = predicate({ ...meta(now, input), output, duration })
5785
5995
  return effect.flatMap(
5786
- predicate({ ...meta(now, input), output, duration }),
5996
+ isEffect(eff) ? eff : effect.succeed(eff),
5787
5997
  (check) => (check ? effect.succeed(result) : Cause.done(output))
5788
5998
  )
5789
5999
  })
@@ -5838,8 +6048,8 @@ export {
5838
6048
  * @since 2.0.0
5839
6049
  * @category constructors
5840
6050
  */
5841
- export const windowed = (interval: Duration.DurationInput): Schedule<number> => {
5842
- const window = Duration.toMillis(Duration.fromDurationInputUnsafe(interval))
6051
+ export const windowed = (interval: Duration.Input): Schedule<number> => {
6052
+ const window = Duration.toMillis(Duration.fromInputUnsafe(interval))
5843
6053
  return fromStepWithMetadata(effect.succeed((meta) =>
5844
6054
  effect.sync(() => [
5845
6055
  meta.attempt - 1,
@@ -5929,6 +6139,16 @@ export const satisfiesInputType = <T>() =>
5929
6139
  self: Schedule<Output, Input, Error, Env>
5930
6140
  ): Schedule<Output, Input, Error, Env> => self
5931
6141
 
6142
+ /**
6143
+ * Sets the input type of the provided schedule to a specified type, without
6144
+ * altering the schedule's behavior.
6145
+ *
6146
+ * @since 2.0.0
6147
+ * @category ensuring types
6148
+ */
6149
+ export const setInputType =
6150
+ <T>() => <Output, Error, Env>(self: Schedule<Output, T, Error, Env>): Schedule<Output, T, Error, Env> => self
6151
+
5932
6152
  /**
5933
6153
  * Ensures that the provided schedule respects a specified output type.
5934
6154
  *