effect 4.0.0-beta.0 → 4.0.0-beta.10

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 (571) hide show
  1. package/dist/Cache.d.ts +2 -2
  2. package/dist/Cache.d.ts.map +1 -1
  3. package/dist/Cache.js +1 -1
  4. package/dist/Cache.js.map +1 -1
  5. package/dist/Cause.d.ts +1 -1
  6. package/dist/Cause.d.ts.map +1 -1
  7. package/dist/Channel.d.ts.map +1 -1
  8. package/dist/Channel.js +6 -4
  9. package/dist/Channel.js.map +1 -1
  10. package/dist/Combiner.d.ts +280 -13
  11. package/dist/Combiner.d.ts.map +1 -1
  12. package/dist/Combiner.js +198 -7
  13. package/dist/Combiner.js.map +1 -1
  14. package/dist/Config.d.ts +3 -3
  15. package/dist/Config.js +3 -3
  16. package/dist/Config.js.map +1 -1
  17. package/dist/ConfigProvider.d.ts +1 -1
  18. package/dist/Cron.d.ts +1 -1
  19. package/dist/Data.d.ts +534 -365
  20. package/dist/Data.d.ts.map +1 -1
  21. package/dist/Data.js +132 -79
  22. package/dist/Data.js.map +1 -1
  23. package/dist/DateTime.d.ts +23 -161
  24. package/dist/DateTime.d.ts.map +1 -1
  25. package/dist/DateTime.js +6 -51
  26. package/dist/DateTime.js.map +1 -1
  27. package/dist/Duration.d.ts +12 -12
  28. package/dist/Duration.d.ts.map +1 -1
  29. package/dist/Duration.js +12 -12
  30. package/dist/Duration.js.map +1 -1
  31. package/dist/Effect.d.ts +175 -240
  32. package/dist/Effect.d.ts.map +1 -1
  33. package/dist/Effect.js +73 -119
  34. package/dist/Effect.js.map +1 -1
  35. package/dist/Encoding.d.ts +194 -0
  36. package/dist/Encoding.d.ts.map +1 -0
  37. package/dist/Encoding.js +352 -0
  38. package/dist/Encoding.js.map +1 -0
  39. package/dist/Equal.d.ts +276 -109
  40. package/dist/Equal.d.ts.map +1 -1
  41. package/dist/Equal.js +124 -48
  42. package/dist/Equal.js.map +1 -1
  43. package/dist/FileSystem.d.ts +1 -1
  44. package/dist/FileSystem.d.ts.map +1 -1
  45. package/dist/FileSystem.js +5 -5
  46. package/dist/FileSystem.js.map +1 -1
  47. package/dist/Filter.d.ts +30 -1
  48. package/dist/Filter.d.ts.map +1 -1
  49. package/dist/Filter.js +15 -0
  50. package/dist/Filter.js.map +1 -1
  51. package/dist/Formatter.d.ts +131 -47
  52. package/dist/Formatter.d.ts.map +1 -1
  53. package/dist/Formatter.js +229 -51
  54. package/dist/Formatter.js.map +1 -1
  55. package/dist/Graph.d.ts +1 -1
  56. package/dist/Graph.d.ts.map +1 -1
  57. package/dist/Graph.js +2 -2
  58. package/dist/Graph.js.map +1 -1
  59. package/dist/JsonSchema.d.ts +299 -10
  60. package/dist/JsonSchema.d.ts.map +1 -1
  61. package/dist/JsonSchema.js +323 -4
  62. package/dist/JsonSchema.js.map +1 -1
  63. package/dist/Latch.d.ts +109 -0
  64. package/dist/Latch.d.ts.map +1 -0
  65. package/dist/Latch.js +72 -0
  66. package/dist/Latch.js.map +1 -0
  67. package/dist/LayerMap.d.ts +4 -4
  68. package/dist/LayerMap.d.ts.map +1 -1
  69. package/dist/LogLevel.d.ts +27 -0
  70. package/dist/LogLevel.d.ts.map +1 -1
  71. package/dist/LogLevel.js +28 -100
  72. package/dist/LogLevel.js.map +1 -1
  73. package/dist/Logger.d.ts +4 -4
  74. package/dist/Logger.d.ts.map +1 -1
  75. package/dist/Metric.d.ts +2 -2
  76. package/dist/Metric.d.ts.map +1 -1
  77. package/dist/Metric.js +1 -1
  78. package/dist/Metric.js.map +1 -1
  79. package/dist/Optic.d.ts +947 -18
  80. package/dist/Optic.d.ts.map +1 -1
  81. package/dist/Optic.js +454 -5
  82. package/dist/Optic.js.map +1 -1
  83. package/dist/Pipeable.d.ts +17 -0
  84. package/dist/Pipeable.d.ts.map +1 -1
  85. package/dist/Pipeable.js +19 -1
  86. package/dist/Pipeable.js.map +1 -1
  87. package/dist/PlatformError.d.ts +10 -9
  88. package/dist/PlatformError.d.ts.map +1 -1
  89. package/dist/PlatformError.js +2 -2
  90. package/dist/PlatformError.js.map +1 -1
  91. package/dist/Pool.d.ts +6 -4
  92. package/dist/Pool.d.ts.map +1 -1
  93. package/dist/Pool.js +7 -5
  94. package/dist/Pool.js.map +1 -1
  95. package/dist/PubSub.d.ts +3 -2
  96. package/dist/PubSub.d.ts.map +1 -1
  97. package/dist/PubSub.js +3 -2
  98. package/dist/PubSub.js.map +1 -1
  99. package/dist/Random.d.ts +18 -1
  100. package/dist/Random.d.ts.map +1 -1
  101. package/dist/Random.js +29 -12
  102. package/dist/Random.js.map +1 -1
  103. package/dist/RcMap.d.ts +2 -2
  104. package/dist/RcMap.d.ts.map +1 -1
  105. package/dist/RcMap.js +1 -1
  106. package/dist/RcMap.js.map +1 -1
  107. package/dist/RcRef.d.ts +1 -1
  108. package/dist/RcRef.d.ts.map +1 -1
  109. package/dist/Reducer.d.ts +166 -7
  110. package/dist/Reducer.d.ts.map +1 -1
  111. package/dist/Reducer.js +135 -1
  112. package/dist/Reducer.js.map +1 -1
  113. package/dist/Request.d.ts +1 -1
  114. package/dist/Request.d.ts.map +1 -1
  115. package/dist/Request.js +2 -1
  116. package/dist/Request.js.map +1 -1
  117. package/dist/RequestResolver.d.ts +6 -26
  118. package/dist/RequestResolver.d.ts.map +1 -1
  119. package/dist/RequestResolver.js +0 -20
  120. package/dist/RequestResolver.js.map +1 -1
  121. package/dist/Result.d.ts +12 -0
  122. package/dist/Result.d.ts.map +1 -1
  123. package/dist/Result.js +12 -0
  124. package/dist/Result.js.map +1 -1
  125. package/dist/Schedule.d.ts +33 -14
  126. package/dist/Schedule.d.ts.map +1 -1
  127. package/dist/Schedule.js +65 -24
  128. package/dist/Schedule.js.map +1 -1
  129. package/dist/Schema.d.ts +199 -49
  130. package/dist/Schema.d.ts.map +1 -1
  131. package/dist/Schema.js +386 -72
  132. package/dist/Schema.js.map +1 -1
  133. package/dist/SchemaGetter.d.ts +2 -2
  134. package/dist/SchemaGetter.d.ts.map +1 -1
  135. package/dist/SchemaGetter.js +12 -14
  136. package/dist/SchemaGetter.js.map +1 -1
  137. package/dist/SchemaRepresentation.d.ts +44 -43
  138. package/dist/SchemaRepresentation.d.ts.map +1 -1
  139. package/dist/SchemaRepresentation.js +43 -24
  140. package/dist/SchemaRepresentation.js.map +1 -1
  141. package/dist/SchemaTransformation.d.ts +37 -0
  142. package/dist/SchemaTransformation.d.ts.map +1 -1
  143. package/dist/SchemaTransformation.js +80 -0
  144. package/dist/SchemaTransformation.js.map +1 -1
  145. package/dist/ScopedCache.d.ts +2 -2
  146. package/dist/ScopedCache.d.ts.map +1 -1
  147. package/dist/ScopedCache.js +1 -1
  148. package/dist/ScopedCache.js.map +1 -1
  149. package/dist/Semaphore.d.ts +211 -0
  150. package/dist/Semaphore.d.ts.map +1 -0
  151. package/dist/{PartitionedSemaphore.js → Semaphore.js} +97 -13
  152. package/dist/Semaphore.js.map +1 -0
  153. package/dist/Stream.d.ts +19 -19
  154. package/dist/Stream.d.ts.map +1 -1
  155. package/dist/Stream.js +12 -11
  156. package/dist/Stream.js.map +1 -1
  157. package/dist/Struct.d.ts +16 -0
  158. package/dist/Struct.d.ts.map +1 -1
  159. package/dist/Struct.js +22 -0
  160. package/dist/Struct.js.map +1 -1
  161. package/dist/SubscriptionRef.d.ts +2 -1
  162. package/dist/SubscriptionRef.d.ts.map +1 -1
  163. package/dist/SubscriptionRef.js +2 -1
  164. package/dist/SubscriptionRef.js.map +1 -1
  165. package/dist/SynchronizedRef.d.ts +2 -1
  166. package/dist/SynchronizedRef.d.ts.map +1 -1
  167. package/dist/SynchronizedRef.js +2 -1
  168. package/dist/SynchronizedRef.js.map +1 -1
  169. package/dist/Types.d.ts +14 -6
  170. package/dist/Types.d.ts.map +1 -1
  171. package/dist/index.d.ts +499 -19
  172. package/dist/index.d.ts.map +1 -1
  173. package/dist/index.js +499 -19
  174. package/dist/index.js.map +1 -1
  175. package/dist/internal/core.js +11 -3
  176. package/dist/internal/core.js.map +1 -1
  177. package/dist/internal/dateTime.js +3 -11
  178. package/dist/internal/dateTime.js.map +1 -1
  179. package/dist/internal/effect.js +37 -22
  180. package/dist/internal/effect.js.map +1 -1
  181. package/dist/internal/random.d.ts +2 -0
  182. package/dist/internal/random.d.ts.map +1 -0
  183. package/dist/internal/random.js +13 -0
  184. package/dist/internal/random.js.map +1 -0
  185. package/dist/internal/rcRef.js +3 -2
  186. package/dist/internal/rcRef.js.map +1 -1
  187. package/dist/testing/TestClock.d.ts +7 -6
  188. package/dist/testing/TestClock.d.ts.map +1 -1
  189. package/dist/testing/TestClock.js +6 -4
  190. package/dist/testing/TestClock.js.map +1 -1
  191. package/dist/testing/TestSchema.d.ts +6 -6
  192. package/dist/testing/TestSchema.d.ts.map +1 -1
  193. package/dist/unstable/ai/AiError.d.ts +48 -48
  194. package/dist/unstable/ai/AiError.d.ts.map +1 -1
  195. package/dist/unstable/ai/Chat.d.ts +3 -3
  196. package/dist/unstable/ai/Chat.d.ts.map +1 -1
  197. package/dist/unstable/ai/Chat.js +4 -3
  198. package/dist/unstable/ai/Chat.js.map +1 -1
  199. package/dist/unstable/ai/LanguageModel.d.ts +2 -2
  200. package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
  201. package/dist/unstable/ai/McpSchema.d.ts +51 -51
  202. package/dist/unstable/ai/McpServer.d.ts +1 -1
  203. package/dist/unstable/ai/McpServer.d.ts.map +1 -1
  204. package/dist/unstable/ai/McpServer.js.map +1 -1
  205. package/dist/unstable/ai/Prompt.d.ts +20 -20
  206. package/dist/unstable/ai/Prompt.d.ts.map +1 -1
  207. package/dist/unstable/ai/Response.d.ts +26 -26
  208. package/dist/unstable/ai/Response.d.ts.map +1 -1
  209. package/dist/unstable/ai/Response.js +1 -1
  210. package/dist/unstable/ai/Response.js.map +1 -1
  211. package/dist/unstable/cli/CliError.d.ts +5 -5
  212. package/dist/unstable/cli/Prompt.js +2 -2
  213. package/dist/unstable/cli/Prompt.js.map +1 -1
  214. package/dist/unstable/cluster/ClusterCron.d.ts +1 -1
  215. package/dist/unstable/cluster/ClusterCron.d.ts.map +1 -1
  216. package/dist/unstable/cluster/ClusterCron.js +1 -1
  217. package/dist/unstable/cluster/ClusterCron.js.map +1 -1
  218. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  219. package/dist/unstable/cluster/ClusterWorkflowEngine.js +2 -1
  220. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  221. package/dist/unstable/cluster/Entity.d.ts +5 -4
  222. package/dist/unstable/cluster/Entity.d.ts.map +1 -1
  223. package/dist/unstable/cluster/Entity.js.map +1 -1
  224. package/dist/unstable/cluster/EntityResource.d.ts +2 -2
  225. package/dist/unstable/cluster/EntityResource.d.ts.map +1 -1
  226. package/dist/unstable/cluster/Envelope.d.ts +1 -1
  227. package/dist/unstable/cluster/K8sHttpClient.d.ts +1 -1
  228. package/dist/unstable/cluster/K8sHttpClient.js +1 -1
  229. package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
  230. package/dist/unstable/cluster/Message.d.ts +10 -10
  231. package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
  232. package/dist/unstable/cluster/MessageStorage.js +2 -1
  233. package/dist/unstable/cluster/MessageStorage.js.map +1 -1
  234. package/dist/unstable/cluster/Reply.d.ts +6 -6
  235. package/dist/unstable/cluster/Runner.d.ts +1 -1
  236. package/dist/unstable/cluster/Runners.d.ts.map +1 -1
  237. package/dist/unstable/cluster/Runners.js +4 -3
  238. package/dist/unstable/cluster/Runners.js.map +1 -1
  239. package/dist/unstable/cluster/Sharding.d.ts +2 -2
  240. package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
  241. package/dist/unstable/cluster/Sharding.js +8 -6
  242. package/dist/unstable/cluster/Sharding.js.map +1 -1
  243. package/dist/unstable/cluster/ShardingConfig.d.ts +21 -21
  244. package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
  245. package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
  246. package/dist/unstable/cluster/SqlRunnerStorage.js +1 -1
  247. package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
  248. package/dist/unstable/cluster/internal/entityManager.js +5 -4
  249. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  250. package/dist/unstable/cluster/internal/entityReaper.js +2 -1
  251. package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
  252. package/dist/unstable/cluster/internal/resourceRef.js +2 -1
  253. package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
  254. package/dist/unstable/devtools/DevToolsSchema.d.ts +36 -36
  255. package/dist/unstable/encoding/Msgpack.d.ts +1 -1
  256. package/dist/unstable/encoding/Ndjson.d.ts +1 -1
  257. package/dist/unstable/encoding/Sse.d.ts +4 -4
  258. package/dist/unstable/encoding/Sse.d.ts.map +1 -1
  259. package/dist/unstable/encoding/Sse.js.map +1 -1
  260. package/dist/unstable/eventlog/EventJournal.d.ts +2 -2
  261. package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
  262. package/dist/unstable/eventlog/EventLog.js +2 -1
  263. package/dist/unstable/eventlog/EventLog.js.map +1 -1
  264. package/dist/unstable/eventlog/EventLogRemote.d.ts +6 -6
  265. package/dist/unstable/http/Cookies.d.ts +3 -3
  266. package/dist/unstable/http/Cookies.d.ts.map +1 -1
  267. package/dist/unstable/http/Cookies.js +2 -2
  268. package/dist/unstable/http/Cookies.js.map +1 -1
  269. package/dist/unstable/http/HttpBody.d.ts +17 -2
  270. package/dist/unstable/http/HttpBody.d.ts.map +1 -1
  271. package/dist/unstable/http/HttpBody.js +28 -1
  272. package/dist/unstable/http/HttpBody.js.map +1 -1
  273. package/dist/unstable/http/HttpClient.d.ts +11 -11
  274. package/dist/unstable/http/HttpClient.d.ts.map +1 -1
  275. package/dist/unstable/http/HttpClient.js +4 -4
  276. package/dist/unstable/http/HttpClient.js.map +1 -1
  277. package/dist/unstable/http/HttpClientError.d.ts +7 -7
  278. package/dist/unstable/http/HttpClientRequest.d.ts +27 -11
  279. package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
  280. package/dist/unstable/http/HttpClientRequest.js +15 -3
  281. package/dist/unstable/http/HttpClientRequest.js.map +1 -1
  282. package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
  283. package/dist/unstable/http/HttpEffect.js +18 -26
  284. package/dist/unstable/http/HttpEffect.js.map +1 -1
  285. package/dist/unstable/http/HttpMethod.d.ts +4 -4
  286. package/dist/unstable/http/HttpMethod.d.ts.map +1 -1
  287. package/dist/unstable/http/HttpMethod.js +3 -3
  288. package/dist/unstable/http/HttpMethod.js.map +1 -1
  289. package/dist/unstable/http/HttpMiddleware.d.ts +1 -6
  290. package/dist/unstable/http/HttpMiddleware.d.ts.map +1 -1
  291. package/dist/unstable/http/HttpMiddleware.js +4 -9
  292. package/dist/unstable/http/HttpMiddleware.js.map +1 -1
  293. package/dist/unstable/http/HttpServerError.d.ts +6 -6
  294. package/dist/unstable/http/HttpServerResponse.js +1 -1
  295. package/dist/unstable/http/HttpServerResponse.js.map +1 -1
  296. package/dist/unstable/http/Multipart.d.ts +3 -3
  297. package/dist/unstable/http/UrlParams.d.ts +14 -6
  298. package/dist/unstable/http/UrlParams.d.ts.map +1 -1
  299. package/dist/unstable/http/UrlParams.js +1 -1
  300. package/dist/unstable/http/UrlParams.js.map +1 -1
  301. package/dist/unstable/httpapi/HttpApiBuilder.js +5 -5
  302. package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
  303. package/dist/unstable/httpapi/HttpApiClient.js +3 -3
  304. package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
  305. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +21 -39
  306. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts.map +1 -1
  307. package/dist/unstable/httpapi/HttpApiEndpoint.js +15 -24
  308. package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
  309. package/dist/unstable/httpapi/HttpApiScalar.d.ts +6 -0
  310. package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
  311. package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
  312. package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
  313. package/dist/unstable/httpapi/OpenApi.js +18 -16
  314. package/dist/unstable/httpapi/OpenApi.js.map +1 -1
  315. package/dist/unstable/observability/Otlp.d.ts +12 -12
  316. package/dist/unstable/observability/Otlp.d.ts.map +1 -1
  317. package/dist/unstable/observability/OtlpExporter.d.ts +2 -2
  318. package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
  319. package/dist/unstable/observability/OtlpExporter.js +1 -1
  320. package/dist/unstable/observability/OtlpExporter.js.map +1 -1
  321. package/dist/unstable/observability/OtlpLogger.d.ts +4 -4
  322. package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
  323. package/dist/unstable/observability/OtlpMetrics.d.ts +4 -4
  324. package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
  325. package/dist/unstable/observability/OtlpTracer.d.ts +4 -4
  326. package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
  327. package/dist/unstable/persistence/KeyValueStore.d.ts +1 -1
  328. package/dist/unstable/persistence/KeyValueStore.js +6 -6
  329. package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
  330. package/dist/unstable/persistence/Persistable.d.ts +2 -2
  331. package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
  332. package/dist/unstable/persistence/PersistedCache.d.ts +6 -5
  333. package/dist/unstable/persistence/PersistedCache.d.ts.map +1 -1
  334. package/dist/unstable/persistence/PersistedCache.js +2 -1
  335. package/dist/unstable/persistence/PersistedCache.js.map +1 -1
  336. package/dist/unstable/persistence/PersistedQueue.d.ts +12 -12
  337. package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
  338. package/dist/unstable/persistence/PersistedQueue.js +12 -11
  339. package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
  340. package/dist/unstable/persistence/Persistence.d.ts +1 -1
  341. package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
  342. package/dist/unstable/persistence/Persistence.js +2 -2
  343. package/dist/unstable/persistence/Persistence.js.map +1 -1
  344. package/dist/unstable/persistence/RateLimiter.d.ts +3 -3
  345. package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
  346. package/dist/unstable/persistence/RateLimiter.js +1 -1
  347. package/dist/unstable/persistence/RateLimiter.js.map +1 -1
  348. package/dist/unstable/process/ChildProcess.d.ts +2 -2
  349. package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
  350. package/dist/unstable/process/ChildProcessSpawner.d.ts +6 -0
  351. package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
  352. package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
  353. package/dist/unstable/reactivity/Atom.d.ts +6 -6
  354. package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
  355. package/dist/unstable/reactivity/Atom.js +15 -12
  356. package/dist/unstable/reactivity/Atom.js.map +1 -1
  357. package/dist/unstable/reactivity/AtomHttpApi.d.ts +6 -6
  358. package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
  359. package/dist/unstable/reactivity/AtomHttpApi.js +3 -3
  360. package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
  361. package/dist/unstable/reactivity/AtomRpc.d.ts +1 -1
  362. package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
  363. package/dist/unstable/reactivity/AtomRpc.js +1 -1
  364. package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
  365. package/dist/unstable/reactivity/Hydration.d.ts +39 -0
  366. package/dist/unstable/reactivity/Hydration.d.ts.map +1 -0
  367. package/dist/unstable/reactivity/Hydration.js +76 -0
  368. package/dist/unstable/reactivity/Hydration.js.map +1 -0
  369. package/dist/unstable/reactivity/index.d.ts +4 -0
  370. package/dist/unstable/reactivity/index.d.ts.map +1 -1
  371. package/dist/unstable/reactivity/index.js +4 -0
  372. package/dist/unstable/reactivity/index.js.map +1 -1
  373. package/dist/unstable/rpc/Rpc.d.ts +2 -2
  374. package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
  375. package/dist/unstable/rpc/RpcClient.d.ts +5 -26
  376. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  377. package/dist/unstable/rpc/RpcClient.js +6 -13
  378. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  379. package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
  380. package/dist/unstable/rpc/RpcServer.js +5 -3
  381. package/dist/unstable/rpc/RpcServer.js.map +1 -1
  382. package/dist/unstable/rpc/Utils.d.ts.map +1 -1
  383. package/dist/unstable/rpc/Utils.js +2 -1
  384. package/dist/unstable/rpc/Utils.js.map +1 -1
  385. package/dist/unstable/schema/Model.d.ts +4 -4
  386. package/dist/unstable/schema/Model.d.ts.map +1 -1
  387. package/dist/unstable/schema/VariantSchema.d.ts +2 -2
  388. package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
  389. package/dist/unstable/schema/VariantSchema.js +13 -2
  390. package/dist/unstable/schema/VariantSchema.js.map +1 -1
  391. package/dist/unstable/socket/Socket.d.ts +4 -4
  392. package/dist/unstable/socket/Socket.d.ts.map +1 -1
  393. package/dist/unstable/socket/Socket.js +3 -2
  394. package/dist/unstable/socket/Socket.js.map +1 -1
  395. package/dist/unstable/socket/SocketServer.d.ts +3 -3
  396. package/dist/unstable/sql/Migrator.d.ts +1 -1
  397. package/dist/unstable/sql/SqlError.d.ts +2 -2
  398. package/dist/unstable/sql/SqlModel.d.ts +2 -2
  399. package/dist/unstable/sql/SqlModel.d.ts.map +1 -1
  400. package/dist/unstable/sql/SqlSchema.d.ts +24 -1
  401. package/dist/unstable/sql/SqlSchema.d.ts.map +1 -1
  402. package/dist/unstable/sql/SqlSchema.js +24 -3
  403. package/dist/unstable/sql/SqlSchema.js.map +1 -1
  404. package/dist/unstable/sql/Statement.js +0 -1
  405. package/dist/unstable/sql/Statement.js.map +1 -1
  406. package/dist/unstable/workers/Worker.d.ts.map +1 -1
  407. package/dist/unstable/workers/Worker.js +2 -1
  408. package/dist/unstable/workers/Worker.js.map +1 -1
  409. package/dist/unstable/workflow/DurableClock.d.ts +3 -3
  410. package/dist/unstable/workflow/DurableClock.d.ts.map +1 -1
  411. package/dist/unstable/workflow/DurableClock.js +3 -3
  412. package/dist/unstable/workflow/DurableClock.js.map +1 -1
  413. package/dist/unstable/workflow/DurableDeferred.js +2 -2
  414. package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
  415. package/dist/unstable/workflow/Workflow.d.ts +2 -2
  416. package/dist/unstable/workflow/WorkflowEngine.d.ts +2 -1
  417. package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
  418. package/dist/unstable/workflow/WorkflowEngine.js +2 -1
  419. package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
  420. package/package.json +2 -2
  421. package/src/Cache.ts +3 -3
  422. package/src/Cause.ts +1 -1
  423. package/src/Channel.ts +6 -4
  424. package/src/Combiner.ts +280 -13
  425. package/src/Config.ts +3 -3
  426. package/src/Data.ts +538 -374
  427. package/src/DateTime.ts +24 -164
  428. package/src/Duration.ts +15 -15
  429. package/src/Effect.ts +202 -261
  430. package/src/Encoding.ts +879 -0
  431. package/src/Equal.ts +278 -111
  432. package/src/FileSystem.ts +7 -8
  433. package/src/Filter.ts +48 -1
  434. package/src/Formatter.ts +253 -51
  435. package/src/Graph.ts +8 -5
  436. package/src/JsonSchema.ts +383 -10
  437. package/src/Latch.ts +112 -0
  438. package/src/LayerMap.ts +5 -5
  439. package/src/LogLevel.ts +31 -0
  440. package/src/Logger.ts +5 -5
  441. package/src/Metric.ts +4 -4
  442. package/src/Optic.ts +948 -19
  443. package/src/Pipeable.ts +32 -1
  444. package/src/PlatformError.ts +5 -5
  445. package/src/Pool.ts +13 -11
  446. package/src/PubSub.ts +10 -9
  447. package/src/Random.ts +33 -14
  448. package/src/RcMap.ts +5 -5
  449. package/src/RcRef.ts +1 -1
  450. package/src/Reducer.ts +166 -7
  451. package/src/Request.ts +3 -2
  452. package/src/RequestResolver.ts +9 -29
  453. package/src/Result.ts +13 -0
  454. package/src/Schedule.ts +279 -140
  455. package/src/Schema.ts +575 -113
  456. package/src/SchemaGetter.ts +12 -14
  457. package/src/SchemaRepresentation.ts +43 -24
  458. package/src/SchemaTransformation.ts +104 -0
  459. package/src/ScopedCache.ts +3 -3
  460. package/src/Semaphore.ts +356 -0
  461. package/src/Stream.ts +43 -42
  462. package/src/Struct.ts +26 -0
  463. package/src/SubscriptionRef.ts +3 -2
  464. package/src/SynchronizedRef.ts +3 -2
  465. package/src/Types.ts +12 -2
  466. package/src/index.ts +502 -20
  467. package/src/internal/core.ts +12 -5
  468. package/src/internal/dateTime.ts +9 -30
  469. package/src/internal/effect.ts +70 -37
  470. package/src/internal/random.ts +20 -0
  471. package/src/internal/rcRef.ts +4 -3
  472. package/src/testing/TestClock.ts +13 -11
  473. package/src/testing/TestSchema.ts +8 -8
  474. package/src/unstable/ai/AiError.ts +2 -2
  475. package/src/unstable/ai/Chat.ts +12 -11
  476. package/src/unstable/ai/LanguageModel.ts +3 -3
  477. package/src/unstable/ai/McpServer.ts +2 -2
  478. package/src/unstable/ai/Prompt.ts +37 -37
  479. package/src/unstable/ai/Response.ts +25 -25
  480. package/src/unstable/cli/Prompt.ts +2 -2
  481. package/src/unstable/cluster/ClusterCron.ts +2 -2
  482. package/src/unstable/cluster/ClusterWorkflowEngine.ts +3 -2
  483. package/src/unstable/cluster/Entity.ts +7 -6
  484. package/src/unstable/cluster/EntityResource.ts +4 -4
  485. package/src/unstable/cluster/Envelope.ts +1 -1
  486. package/src/unstable/cluster/K8sHttpClient.ts +1 -1
  487. package/src/unstable/cluster/MessageStorage.ts +3 -5
  488. package/src/unstable/cluster/Runners.ts +6 -5
  489. package/src/unstable/cluster/Sharding.ts +11 -9
  490. package/src/unstable/cluster/ShardingConfig.ts +10 -11
  491. package/src/unstable/cluster/SqlRunnerStorage.ts +1 -1
  492. package/src/unstable/cluster/internal/entityManager.ts +9 -8
  493. package/src/unstable/cluster/internal/entityReaper.ts +2 -1
  494. package/src/unstable/cluster/internal/resourceRef.ts +2 -1
  495. package/src/unstable/encoding/Sse.ts +2 -4
  496. package/src/unstable/eventlog/EventLog.ts +2 -1
  497. package/src/unstable/http/Cookies.ts +3 -3
  498. package/src/unstable/http/HttpBody.ts +42 -1
  499. package/src/unstable/http/HttpClient.ts +19 -19
  500. package/src/unstable/http/HttpClientRequest.ts +38 -13
  501. package/src/unstable/http/HttpEffect.ts +17 -25
  502. package/src/unstable/http/HttpMethod.ts +16 -4
  503. package/src/unstable/http/HttpMiddleware.ts +5 -10
  504. package/src/unstable/http/HttpServerResponse.ts +1 -1
  505. package/src/unstable/http/Multipart.ts +2 -2
  506. package/src/unstable/http/UrlParams.ts +20 -5
  507. package/src/unstable/httpapi/HttpApiBuilder.ts +5 -5
  508. package/src/unstable/httpapi/HttpApiClient.ts +3 -3
  509. package/src/unstable/httpapi/HttpApiEndpoint.ts +47 -72
  510. package/src/unstable/httpapi/HttpApiScalar.ts +6 -0
  511. package/src/unstable/httpapi/OpenApi.ts +18 -16
  512. package/src/unstable/observability/Otlp.ts +12 -12
  513. package/src/unstable/observability/OtlpExporter.ts +3 -3
  514. package/src/unstable/observability/OtlpLogger.ts +4 -4
  515. package/src/unstable/observability/OtlpMetrics.ts +4 -4
  516. package/src/unstable/observability/OtlpTracer.ts +4 -4
  517. package/src/unstable/persistence/KeyValueStore.ts +6 -6
  518. package/src/unstable/persistence/Persistable.ts +2 -2
  519. package/src/unstable/persistence/PersistedCache.ts +20 -9
  520. package/src/unstable/persistence/PersistedQueue.ts +25 -24
  521. package/src/unstable/persistence/Persistence.ts +3 -3
  522. package/src/unstable/persistence/RateLimiter.ts +4 -4
  523. package/src/unstable/process/ChildProcess.ts +2 -2
  524. package/src/unstable/process/ChildProcessSpawner.ts +6 -0
  525. package/src/unstable/reactivity/Atom.ts +20 -18
  526. package/src/unstable/reactivity/AtomHttpApi.ts +19 -18
  527. package/src/unstable/reactivity/AtomRpc.ts +3 -3
  528. package/src/unstable/reactivity/Hydration.ts +112 -0
  529. package/src/unstable/reactivity/index.ts +5 -0
  530. package/src/unstable/rpc/Rpc.ts +3 -3
  531. package/src/unstable/rpc/RpcClient.ts +12 -54
  532. package/src/unstable/rpc/RpcServer.ts +6 -4
  533. package/src/unstable/rpc/Utils.ts +2 -1
  534. package/src/unstable/schema/VariantSchema.ts +36 -7
  535. package/src/unstable/socket/Socket.ts +7 -6
  536. package/src/unstable/sql/SqlModel.ts +2 -2
  537. package/src/unstable/sql/SqlSchema.ts +62 -13
  538. package/src/unstable/sql/Statement.ts +0 -1
  539. package/src/unstable/workers/Worker.ts +2 -1
  540. package/src/unstable/workflow/DurableClock.ts +8 -8
  541. package/src/unstable/workflow/DurableDeferred.ts +2 -2
  542. package/src/unstable/workflow/WorkflowEngine.ts +3 -2
  543. package/dist/PartitionedSemaphore.d.ts +0 -52
  544. package/dist/PartitionedSemaphore.d.ts.map +0 -1
  545. package/dist/PartitionedSemaphore.js.map +0 -1
  546. package/dist/encoding/Base64.d.ts +0 -67
  547. package/dist/encoding/Base64.d.ts.map +0 -1
  548. package/dist/encoding/Base64.js +0 -146
  549. package/dist/encoding/Base64.js.map +0 -1
  550. package/dist/encoding/Base64Url.d.ts +0 -60
  551. package/dist/encoding/Base64Url.d.ts.map +0 -1
  552. package/dist/encoding/Base64Url.js +0 -89
  553. package/dist/encoding/Base64Url.js.map +0 -1
  554. package/dist/encoding/EncodingError.d.ts +0 -31
  555. package/dist/encoding/EncodingError.d.ts.map +0 -1
  556. package/dist/encoding/EncodingError.js +0 -22
  557. package/dist/encoding/EncodingError.js.map +0 -1
  558. package/dist/encoding/Hex.d.ts +0 -61
  559. package/dist/encoding/Hex.d.ts.map +0 -1
  560. package/dist/encoding/Hex.js +0 -115
  561. package/dist/encoding/Hex.js.map +0 -1
  562. package/dist/encoding/index.d.ts +0 -26
  563. package/dist/encoding/index.d.ts.map +0 -1
  564. package/dist/encoding/index.js +0 -27
  565. package/dist/encoding/index.js.map +0 -1
  566. package/src/PartitionedSemaphore.ts +0 -182
  567. package/src/encoding/Base64.ts +0 -366
  568. package/src/encoding/Base64Url.ts +0 -104
  569. package/src/encoding/EncodingError.ts +0 -35
  570. package/src/encoding/Hex.ts +0 -390
  571. package/src/encoding/index.ts +0 -31
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
  *
@@ -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))
@@ -747,7 +750,7 @@ export const addDelay: {
747
750
  * @since 2.0.0
748
751
  * @category utils
749
752
  */
750
- <Output, Error2 = never, Env2 = never>(f: (output: Output) => Effect<Duration.DurationInput, Error2, Env2>): <Input, Error, Env>(
753
+ <Output, Error2 = never, Env2 = never>(f: (output: Output) => Effect<Duration.Input, Error2, Env2>): <Input, Error, Env>(
751
754
  self: Schedule<Output, Input, Error, Env>
752
755
  ) => Schedule<Output, Input, Error | Error2, Env | Env2>
753
756
  /**
@@ -868,17 +871,16 @@ export const addDelay: {
868
871
  */
869
872
  <Output, Input, Error, Env, Error2 = never, Env2 = never>(
870
873
  self: Schedule<Output, Input, Error, Env>,
871
- f: (output: Output) => Effect<Duration.DurationInput, Error2, Env2>
874
+ f: (output: Output) => Effect<Duration.Input, Error2, Env2>
872
875
  ): Schedule<Output, Input, Error | Error2, Env | Env2>
873
876
  } = dual(2, <Output, Input, Error, Env, Error2 = never, Env2 = never>(
874
877
  self: Schedule<Output, Input, Error, Env>,
875
- f: (output: Output) => Effect<Duration.DurationInput, Error2, Env2>
878
+ f: (output: Output) => Effect<Duration.Input, Error2, Env2>
876
879
  ): Schedule<Output, Input, Error | Error2, Env | Env2> =>
877
880
  modifyDelay(
878
881
  self,
879
882
  (output, delay) =>
880
- effect.map(f(output), (d) =>
881
- Duration.sum(Duration.fromDurationInputUnsafe(d), Duration.fromDurationInputUnsafe(delay)))
883
+ effect.map(f(output), (d) => Duration.sum(Duration.fromInputUnsafe(d), Duration.fromInputUnsafe(delay)))
882
884
  ))
883
885
 
884
886
  /**
@@ -1140,116 +1142,211 @@ export const andThenResult: {
1140
1142
  } = dual(2, <Output, Input, Error, Env, Output2, Input2, Error2, Env2>(
1141
1143
  self: Schedule<Output, Input, Error, Env>,
1142
1144
  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],
1145
+ ): Schedule<Result.Result<Output, Output2>, Input & Input2, Error | Error2, Env | Env2> =>
1146
+ fromStep(effect.sync(() => {
1147
+ let currentSide = 0
1148
+ let currentStep:
1149
+ | undefined
1150
+ | ((now: number, input: Input & Input2) => Pull.Pull<
1151
+ [Result.Result<Output, Output2>, Duration.Duration],
1149
1152
  Error | Error2,
1150
- Output | Output2,
1153
+ Result.Result<Output, Output2>,
1151
1154
  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
- )))
1155
+ >)
1156
+ const left = map(self, Result.succeed)
1157
+ const right = map(other, Result.fail)
1158
+ return function recur(
1159
+ now,
1160
+ input
1161
+ ): Pull.Pull<
1162
+ [Result.Result<Output, Output2>, Duration.Duration],
1163
+ Error | Error2,
1164
+ Result.Result<Output, Output2>,
1165
+ Env | Env2
1166
+ > {
1167
+ if (currentStep) return currentStep(now, input)
1168
+ return toStep<
1169
+ /**
1170
+ * Returns a new `Schedule` that will first execute the left (i.e. `self`)
1171
+ * schedule to completion. Once the left schedule is complete, the right (i.e.
1172
+ * `other`) schedule will be executed to completion.
1173
+ *
1174
+ * The output of the resulting schedule is a `Result` where outputs of the
1175
+ * left schedule are emitted as `Result.Err<Output>` and outputs of the right
1176
+ * schedule are emitted as `Result.Ok<Output>`.
1177
+ *
1178
+ * @example
1179
+ * ```ts
1180
+ * import { Console, Effect, Result, Schedule } from "effect"
1181
+ *
1182
+ * // Track which phase of the schedule we're in
1183
+ * const phaseTracker = Schedule.andThenResult(
1184
+ * Schedule.exponential("100 millis").pipe(Schedule.take(2)),
1185
+ * Schedule.spaced("500 millis").pipe(Schedule.take(2))
1186
+ * )
1187
+ *
1188
+ * const program = Effect.gen(function*() {
1189
+ * yield* Effect.repeat(
1190
+ * Effect.gen(function*() {
1191
+ * yield* Console.log("Task executed")
1192
+ * return "task-result"
1193
+ * }),
1194
+ * phaseTracker.pipe(
1195
+ * Schedule.tapOutput((result) =>
1196
+ * Result.match(result, {
1197
+ * onFailure: (phase1Output) => Console.log(`Phase 1: ${phase1Output}`),
1198
+ * onSuccess: (phase2Output) => Console.log(`Phase 2: ${phase2Output}`)
1199
+ * })
1200
+ * )
1201
+ * )
1202
+ * )
1203
+ * })
1204
+ * ```
1205
+ *
1206
+ * @since 2.0.0
1207
+ * @category sequencing
1208
+ */
1209
+ Result.Result<Output, Output2>,
1210
+ /**
1211
+ * Returns a new `Schedule` that will first execute the left (i.e. `self`)
1212
+ * schedule to completion. Once the left schedule is complete, the right (i.e.
1213
+ * `other`) schedule will be executed to completion.
1214
+ *
1215
+ * The output of the resulting schedule is a `Result` where outputs of the
1216
+ * left schedule are emitted as `Result.Err<Output>` and outputs of the right
1217
+ * schedule are emitted as `Result.Ok<Output>`.
1218
+ *
1219
+ * @example
1220
+ * ```ts
1221
+ * import { Console, Effect, Result, Schedule } from "effect"
1222
+ *
1223
+ * // Track which phase of the schedule we're in
1224
+ * const phaseTracker = Schedule.andThenResult(
1225
+ * Schedule.exponential("100 millis").pipe(Schedule.take(2)),
1226
+ * Schedule.spaced("500 millis").pipe(Schedule.take(2))
1227
+ * )
1228
+ *
1229
+ * const program = Effect.gen(function*() {
1230
+ * yield* Effect.repeat(
1231
+ * Effect.gen(function*() {
1232
+ * yield* Console.log("Task executed")
1233
+ * return "task-result"
1234
+ * }),
1235
+ * phaseTracker.pipe(
1236
+ * Schedule.tapOutput((result) =>
1237
+ * Result.match(result, {
1238
+ * onFailure: (phase1Output) => Console.log(`Phase 1: ${phase1Output}`),
1239
+ * onSuccess: (phase2Output) => Console.log(`Phase 2: ${phase2Output}`)
1240
+ * })
1241
+ * )
1242
+ * )
1243
+ * )
1244
+ * })
1245
+ * ```
1246
+ *
1247
+ * @since 2.0.0
1248
+ * @category sequencing
1249
+ */
1250
+ Input & Input2,
1251
+ /**
1252
+ * Returns a new `Schedule` that will first execute the left (i.e. `self`)
1253
+ * schedule to completion. Once the left schedule is complete, the right (i.e.
1254
+ * `other`) schedule will be executed to completion.
1255
+ *
1256
+ * The output of the resulting schedule is a `Result` where outputs of the
1257
+ * left schedule are emitted as `Result.Err<Output>` and outputs of the right
1258
+ * schedule are emitted as `Result.Ok<Output>`.
1259
+ *
1260
+ * @example
1261
+ * ```ts
1262
+ * import { Console, Effect, Result, Schedule } from "effect"
1263
+ *
1264
+ * // Track which phase of the schedule we're in
1265
+ * const phaseTracker = Schedule.andThenResult(
1266
+ * Schedule.exponential("100 millis").pipe(Schedule.take(2)),
1267
+ * Schedule.spaced("500 millis").pipe(Schedule.take(2))
1268
+ * )
1269
+ *
1270
+ * const program = Effect.gen(function*() {
1271
+ * yield* Effect.repeat(
1272
+ * Effect.gen(function*() {
1273
+ * yield* Console.log("Task executed")
1274
+ * return "task-result"
1275
+ * }),
1276
+ * phaseTracker.pipe(
1277
+ * Schedule.tapOutput((result) =>
1278
+ * Result.match(result, {
1279
+ * onFailure: (phase1Output) => Console.log(`Phase 1: ${phase1Output}`),
1280
+ * onSuccess: (phase2Output) => Console.log(`Phase 2: ${phase2Output}`)
1281
+ * })
1282
+ * )
1283
+ * )
1284
+ * )
1285
+ * })
1286
+ * ```
1287
+ *
1288
+ * @since 2.0.0
1289
+ * @category sequencing
1290
+ */
1291
+ Error | Error2,
1292
+ /**
1293
+ * Returns a new `Schedule` that will first execute the left (i.e. `self`)
1294
+ * schedule to completion. Once the left schedule is complete, the right (i.e.
1295
+ * `other`) schedule will be executed to completion.
1296
+ *
1297
+ * The output of the resulting schedule is a `Result` where outputs of the
1298
+ * left schedule are emitted as `Result.Err<Output>` and outputs of the right
1299
+ * schedule are emitted as `Result.Ok<Output>`.
1300
+ *
1301
+ * @example
1302
+ * ```ts
1303
+ * import { Console, Effect, Result, Schedule } from "effect"
1304
+ *
1305
+ * // Track which phase of the schedule we're in
1306
+ * const phaseTracker = Schedule.andThenResult(
1307
+ * Schedule.exponential("100 millis").pipe(Schedule.take(2)),
1308
+ * Schedule.spaced("500 millis").pipe(Schedule.take(2))
1309
+ * )
1310
+ *
1311
+ * const program = Effect.gen(function*() {
1312
+ * yield* Effect.repeat(
1313
+ * Effect.gen(function*() {
1314
+ * yield* Console.log("Task executed")
1315
+ * return "task-result"
1316
+ * }),
1317
+ * phaseTracker.pipe(
1318
+ * Schedule.tapOutput((result) =>
1319
+ * Result.match(result, {
1320
+ * onFailure: (phase1Output) => Console.log(`Phase 1: ${phase1Output}`),
1321
+ * onSuccess: (phase2Output) => Console.log(`Phase 2: ${phase2Output}`)
1322
+ * })
1323
+ * )
1324
+ * )
1325
+ * )
1326
+ * })
1327
+ * ```
1328
+ *
1329
+ * @since 2.0.0
1330
+ * @category sequencing
1331
+ */
1332
+ Env | Env2
1333
+ >(currentSide === 0 ? left : right).pipe(
1334
+ effect.flatMap((step) => {
1335
+ currentSide++
1336
+ if (currentSide === 1) {
1337
+ currentStep = (now, input) =>
1338
+ Pull.catchDone(step(now, input), (_) => {
1339
+ currentStep = undefined
1340
+ return recur(now, input)
1341
+ })
1342
+ return currentStep(now, input)
1343
+ }
1344
+ currentStep = step
1345
+ return currentStep(now, input)
1346
+ })
1347
+ );
1348
+ };
1349
+ })))
1253
1350
 
1254
1351
  /**
1255
1352
  * Combines two `Schedule`s by recurring if both of the two schedules want
@@ -2916,6 +3013,24 @@ export const delays = <Out, In, E, R>(self: Schedule<Out, In, E, R>): Schedule<D
2916
3013
  )
2917
3014
  )
2918
3015
 
3016
+ /**
3017
+ * Returns a schedule that recurs once after the specified duration.
3018
+ *
3019
+ * The schedule outputs the configured duration for its first recurrence and
3020
+ * then completes.
3021
+ *
3022
+ * @since 2.0.0
3023
+ * @category constructors
3024
+ */
3025
+ export const duration = (durationInput: Duration.Input): Schedule<Duration.Duration> => {
3026
+ const duration = Duration.fromInputUnsafe(durationInput)
3027
+ return fromStepWithMetadata(effect.succeed((meta) =>
3028
+ meta.attempt === 1
3029
+ ? effect.succeed([duration, duration])
3030
+ : Cause.done(Duration.zero)
3031
+ ))
3032
+ }
3033
+
2919
3034
  /**
2920
3035
  * Returns a new `Schedule` that will always recur, but only during the
2921
3036
  * specified `duration` of time.
@@ -3001,10 +3116,10 @@ export const delays = <Out, In, E, R>(self: Schedule<Out, In, E, R>): Schedule<D
3001
3116
  * @since 4.0.0
3002
3117
  * @category constructors
3003
3118
  */
3004
- export const during = (duration: Duration.DurationInput): Schedule<Duration.Duration> =>
3119
+ export const during = (duration: Duration.Input): Schedule<Duration.Duration> =>
3005
3120
  while_(
3006
3121
  elapsed,
3007
- ({ output }) => effect.succeed(Duration.isLessThanOrEqualTo(output, Duration.fromDurationInputUnsafe(duration)))
3122
+ ({ output }) => effect.succeed(Duration.isLessThanOrEqualTo(output, Duration.fromInputUnsafe(duration)))
3008
3123
  )
3009
3124
 
3010
3125
  /**
@@ -3744,10 +3859,10 @@ export const elapsed: Schedule<Duration.Duration> = fromStepWithMetadata(
3744
3859
  * @category constructors
3745
3860
  */
3746
3861
  export const exponential = (
3747
- base: Duration.DurationInput,
3862
+ base: Duration.Input,
3748
3863
  factor: number = 2
3749
3864
  ): Schedule<Duration.Duration> => {
3750
- const baseMillis = Duration.toMillis(Duration.fromDurationInputUnsafe(base))
3865
+ const baseMillis = Duration.toMillis(Duration.fromInputUnsafe(base))
3751
3866
  return fromStepWithMetadata(effect.succeed((meta) => {
3752
3867
  const duration = Duration.millis(baseMillis * Math.pow(factor, meta.attempt - 1))
3753
3868
  return effect.succeed([duration, duration])
@@ -3818,8 +3933,8 @@ export const exponential = (
3818
3933
  * @since 2.0.0
3819
3934
  * @category constructors
3820
3935
  */
3821
- export const fibonacci = (one: Duration.DurationInput): Schedule<Duration.Duration> => {
3822
- const oneMillis = Duration.toMillis(Duration.fromDurationInputUnsafe(one))
3936
+ export const fibonacci = (one: Duration.Input): Schedule<Duration.Duration> => {
3937
+ const oneMillis = Duration.toMillis(Duration.fromInputUnsafe(one))
3823
3938
  return fromStep(effect.sync(() => {
3824
3939
  let a = 0
3825
3940
  let b = oneMillis
@@ -3895,8 +4010,8 @@ export const fibonacci = (one: Duration.DurationInput): Schedule<Duration.Durati
3895
4010
  * @since 2.0.0
3896
4011
  * @category constructors
3897
4012
  */
3898
- export const fixed = (interval: Duration.DurationInput): Schedule<number> => {
3899
- const window = Duration.toMillis(Duration.fromDurationInputUnsafe(interval))
4013
+ export const fixed = (interval: Duration.Input): Schedule<number> => {
4014
+ const window = Duration.toMillis(Duration.fromInputUnsafe(interval))
3900
4015
  return fromStepWithMetadata(effect.succeed((meta) =>
3901
4016
  effect.succeed([
3902
4017
  meta.attempt - 1,
@@ -4032,7 +4147,7 @@ export const map: {
4032
4147
  * @since 2.0.0
4033
4148
  * @category mapping
4034
4149
  */
4035
- <Output, Output2, Error2 = never, Env2 = never>(f: (output: Output) => Effect<Output2, Error2, Env2>): <Input, Error, Env>(
4150
+ <Output, Output2, Error2 = never, Env2 = never>(f: (output: Output) => Output2 | Effect<Output2, Error2, Env2>): <Input, Error, Env>(
4036
4151
  self: Schedule<Output, Input, Error, Env>
4037
4152
  ) => Schedule<Output2, Input, Error | Error2, Env | Env2>
4038
4153
  /**
@@ -4099,17 +4214,24 @@ export const map: {
4099
4214
  */
4100
4215
  <Output, Input, Error, Env, Output2, Error2 = never, Env2 = never>(
4101
4216
  self: Schedule<Output, Input, Error, Env>,
4102
- f: (output: Output) => Effect<Output2, Error2, Env2>
4217
+ f: (output: Output) => Output2 | Effect<Output2, Error2, Env2>
4103
4218
  ): Schedule<Output2, Input, Error | Error2, Env | Env2>
4104
4219
  } = dual(2, <Output, Input, Error, Env, Output2, Error2 = never, Env2 = never>(
4105
4220
  self: Schedule<Output, Input, Error, Env>,
4106
- f: (output: Output) => Effect<Output2, Error2, Env2>
4221
+ f: (output: Output) => Output2 | Effect<Output2, Error2, Env2>
4107
4222
  ): Schedule<Output2, Input, Error | Error2, Env | Env2> => {
4108
4223
  const handle = Pull.matchEffect({
4109
- onSuccess: ([output, duration]: [Output, Duration.Duration]) =>
4110
- effect.map(f(output), (output) => [output, duration] as [Output2, Duration.Duration]),
4224
+ onSuccess: ([output, duration]: [Output, Duration.Duration]) => {
4225
+ const result = f(output)
4226
+ if (!isEffect(result)) return effect.succeed([result, duration] as [Output2, Duration.Duration])
4227
+ return effect.map(result, (output) => [output, duration] as [Output2, Duration.Duration])
4228
+ },
4111
4229
  onFailure: effect.failCause<Error>,
4112
- onDone: (output: Output) => effect.flatMap(f(output), Cause.done)
4230
+ onDone: (output: Output) => {
4231
+ const result = f(output)
4232
+ if (!isEffect(result)) return Cause.done(result as Output2)
4233
+ return effect.flatMap(result, Cause.done)
4234
+ }
4113
4235
  })
4114
4236
  return fromStep(effect.map(toStep(self), (step) => (now, input) => handle(step(now, input))))
4115
4237
  })
@@ -4183,7 +4305,7 @@ export const modifyDelay: {
4183
4305
  f: (
4184
4306
  output: Output,
4185
4307
  delay: Duration.Duration
4186
- ) => Effect<Duration.DurationInput, Error2, Env2>
4308
+ ) => Effect<Duration.Input, Error2, Env2>
4187
4309
  ): <Input, Error, Env>(
4188
4310
  self: Schedule<Output, Input, Error, Env>
4189
4311
  ) => Schedule<Output, Input, Error | Error2, Env | Env2>
@@ -4223,22 +4345,39 @@ export const modifyDelay: {
4223
4345
  self: Schedule<Output, Input, Error, Env>,
4224
4346
  f: (
4225
4347
  output: Output,
4226
- delay: Duration.DurationInput
4227
- ) => Effect<Duration.DurationInput, Error2, Env2>
4348
+ delay: Duration.Input
4349
+ ) => Effect<Duration.Input, Error2, Env2>
4228
4350
  ): Schedule<Output, Input, Error | Error2, Env | Env2>
4229
4351
  } = dual(2, <Output, Input, Error, Env, Error2 = never, Env2 = never>(
4230
4352
  self: Schedule<Output, Input, Error, Env>,
4231
4353
  f: (
4232
4354
  output: Output,
4233
- delay: Duration.DurationInput
4234
- ) => Effect<Duration.DurationInput, Error2, Env2>
4355
+ delay: Duration.Input
4356
+ ) => Effect<Duration.Input, Error2, Env2>
4235
4357
  ): Schedule<Output, Input, Error | Error2, Env | Env2> =>
4236
4358
  fromStep(effect.map(toStep(self), (step) => (now, input) =>
4237
4359
  effect.flatMap(
4238
4360
  step(now, input),
4239
- ([output, delay]) => effect.map(f(output, delay), (delay) => [output, Duration.fromDurationInputUnsafe(delay)])
4361
+ ([output, delay]) => effect.map(f(output, delay), (delay) => [output, Duration.fromInputUnsafe(delay)])
4240
4362
  ))))
4241
4363
 
4364
+ /**
4365
+ * Returns a new `Schedule` that randomly adjusts each recurrence delay.
4366
+ *
4367
+ * Delays are jittered between `80%` and `120%` of the original delay.
4368
+ *
4369
+ * @since 2.0.0
4370
+ * @category utilities
4371
+ */
4372
+ export const jittered = <Output, Input, Error, Env>(
4373
+ self: Schedule<Output, Input, Error, Env>
4374
+ ): Schedule<Output, Input, Error, Env> =>
4375
+ modifyDelay(self, (_, delay) =>
4376
+ effect.map(randomNext, (random) => {
4377
+ const millis = Duration.toMillis(Duration.fromInputUnsafe(delay))
4378
+ return Duration.millis(millis * 0.8 * (1 - random) + millis * 1.2 * random)
4379
+ }))
4380
+
4242
4381
  /**
4243
4382
  * Returns a new `Schedule` that outputs the inputs of the specified schedule.
4244
4383
  *
@@ -4747,8 +4886,8 @@ export const reduce: {
4747
4886
  * @since 2.0.0
4748
4887
  * @category constructors
4749
4888
  */
4750
- export const spaced = (duration: Duration.DurationInput): Schedule<number> => {
4751
- const decoded = Duration.fromDurationInputUnsafe(duration)
4889
+ export const spaced = (duration: Duration.Input): Schedule<number> => {
4890
+ const decoded = Duration.fromInputUnsafe(duration)
4752
4891
  return fromStepWithMetadata(effect.succeed((meta) => effect.succeed([meta.attempt - 1, decoded])))
4753
4892
  }
4754
4893
 
@@ -5838,8 +5977,8 @@ export {
5838
5977
  * @since 2.0.0
5839
5978
  * @category constructors
5840
5979
  */
5841
- export const windowed = (interval: Duration.DurationInput): Schedule<number> => {
5842
- const window = Duration.toMillis(Duration.fromDurationInputUnsafe(interval))
5980
+ export const windowed = (interval: Duration.Input): Schedule<number> => {
5981
+ const window = Duration.toMillis(Duration.fromInputUnsafe(interval))
5843
5982
  return fromStepWithMetadata(effect.succeed((meta) =>
5844
5983
  effect.sync(() => [
5845
5984
  meta.attempt - 1,