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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (482) hide show
  1. package/dist/Cache.d.ts +2 -2
  2. package/dist/Cache.d.ts.map +1 -1
  3. package/dist/Cache.js +1 -1
  4. package/dist/Cache.js.map +1 -1
  5. package/dist/Cause.d.ts +1 -1
  6. package/dist/Cause.d.ts.map +1 -1
  7. package/dist/Channel.d.ts.map +1 -1
  8. package/dist/Channel.js +6 -4
  9. package/dist/Channel.js.map +1 -1
  10. package/dist/Config.d.ts +3 -3
  11. package/dist/Config.js +3 -3
  12. package/dist/Config.js.map +1 -1
  13. package/dist/Data.d.ts +3 -2
  14. package/dist/Data.d.ts.map +1 -1
  15. package/dist/Data.js +9 -8
  16. package/dist/Data.js.map +1 -1
  17. package/dist/DateTime.d.ts +23 -161
  18. package/dist/DateTime.d.ts.map +1 -1
  19. package/dist/DateTime.js +6 -51
  20. package/dist/DateTime.js.map +1 -1
  21. package/dist/Duration.d.ts +12 -12
  22. package/dist/Duration.d.ts.map +1 -1
  23. package/dist/Duration.js +12 -12
  24. package/dist/Duration.js.map +1 -1
  25. package/dist/Effect.d.ts +13 -239
  26. package/dist/Effect.d.ts.map +1 -1
  27. package/dist/Effect.js +1 -119
  28. package/dist/Effect.js.map +1 -1
  29. package/dist/Encoding.d.ts +194 -0
  30. package/dist/Encoding.d.ts.map +1 -0
  31. package/dist/Encoding.js +352 -0
  32. package/dist/Encoding.js.map +1 -0
  33. package/dist/Equal.js.map +1 -1
  34. package/dist/FileSystem.js +2 -2
  35. package/dist/FileSystem.js.map +1 -1
  36. package/dist/Formatter.d.ts +131 -47
  37. package/dist/Formatter.d.ts.map +1 -1
  38. package/dist/Formatter.js +229 -51
  39. package/dist/Formatter.js.map +1 -1
  40. package/dist/Graph.d.ts.map +1 -1
  41. package/dist/Graph.js +2 -2
  42. package/dist/Graph.js.map +1 -1
  43. package/dist/JsonSchema.d.ts +299 -10
  44. package/dist/JsonSchema.d.ts.map +1 -1
  45. package/dist/JsonSchema.js +323 -4
  46. package/dist/JsonSchema.js.map +1 -1
  47. package/dist/Latch.d.ts +109 -0
  48. package/dist/Latch.d.ts.map +1 -0
  49. package/dist/Latch.js +72 -0
  50. package/dist/Latch.js.map +1 -0
  51. package/dist/LayerMap.d.ts +4 -4
  52. package/dist/LayerMap.d.ts.map +1 -1
  53. package/dist/LogLevel.d.ts +27 -0
  54. package/dist/LogLevel.d.ts.map +1 -1
  55. package/dist/LogLevel.js +28 -100
  56. package/dist/LogLevel.js.map +1 -1
  57. package/dist/Logger.d.ts +4 -4
  58. package/dist/Logger.d.ts.map +1 -1
  59. package/dist/Metric.d.ts +2 -2
  60. package/dist/Metric.d.ts.map +1 -1
  61. package/dist/Metric.js +1 -1
  62. package/dist/Metric.js.map +1 -1
  63. package/dist/Pipeable.d.ts +17 -0
  64. package/dist/Pipeable.d.ts.map +1 -1
  65. package/dist/Pipeable.js +19 -1
  66. package/dist/Pipeable.js.map +1 -1
  67. package/dist/Pool.d.ts +6 -4
  68. package/dist/Pool.d.ts.map +1 -1
  69. package/dist/Pool.js +7 -5
  70. package/dist/Pool.js.map +1 -1
  71. package/dist/PubSub.d.ts +3 -2
  72. package/dist/PubSub.d.ts.map +1 -1
  73. package/dist/PubSub.js +3 -2
  74. package/dist/PubSub.js.map +1 -1
  75. package/dist/Random.d.ts +1 -1
  76. package/dist/Random.d.ts.map +1 -1
  77. package/dist/Random.js +3 -12
  78. package/dist/Random.js.map +1 -1
  79. package/dist/RcMap.d.ts +2 -2
  80. package/dist/RcMap.d.ts.map +1 -1
  81. package/dist/RcMap.js +1 -1
  82. package/dist/RcMap.js.map +1 -1
  83. package/dist/RcRef.d.ts +1 -1
  84. package/dist/RcRef.d.ts.map +1 -1
  85. package/dist/Request.d.ts +1 -1
  86. package/dist/Request.d.ts.map +1 -1
  87. package/dist/Request.js +2 -1
  88. package/dist/Request.js.map +1 -1
  89. package/dist/RequestResolver.d.ts +6 -26
  90. package/dist/RequestResolver.d.ts.map +1 -1
  91. package/dist/RequestResolver.js +0 -20
  92. package/dist/RequestResolver.js.map +1 -1
  93. package/dist/Schedule.d.ts +22 -13
  94. package/dist/Schedule.d.ts.map +1 -1
  95. package/dist/Schedule.js +53 -25
  96. package/dist/Schedule.js.map +1 -1
  97. package/dist/Schema.d.ts +196 -46
  98. package/dist/Schema.d.ts.map +1 -1
  99. package/dist/Schema.js +385 -71
  100. package/dist/Schema.js.map +1 -1
  101. package/dist/SchemaGetter.d.ts +2 -2
  102. package/dist/SchemaGetter.d.ts.map +1 -1
  103. package/dist/SchemaGetter.js +12 -14
  104. package/dist/SchemaGetter.js.map +1 -1
  105. package/dist/SchemaRepresentation.d.ts +44 -43
  106. package/dist/SchemaRepresentation.d.ts.map +1 -1
  107. package/dist/SchemaRepresentation.js +5 -2
  108. package/dist/SchemaRepresentation.js.map +1 -1
  109. package/dist/SchemaTransformation.d.ts +37 -0
  110. package/dist/SchemaTransformation.d.ts.map +1 -1
  111. package/dist/SchemaTransformation.js +80 -0
  112. package/dist/SchemaTransformation.js.map +1 -1
  113. package/dist/ScopedCache.d.ts +2 -2
  114. package/dist/ScopedCache.d.ts.map +1 -1
  115. package/dist/ScopedCache.js +1 -1
  116. package/dist/ScopedCache.js.map +1 -1
  117. package/dist/Semaphore.d.ts +211 -0
  118. package/dist/Semaphore.d.ts.map +1 -0
  119. package/dist/{PartitionedSemaphore.js → Semaphore.js} +97 -13
  120. package/dist/Semaphore.js.map +1 -0
  121. package/dist/Stream.d.ts +19 -19
  122. package/dist/Stream.d.ts.map +1 -1
  123. package/dist/Stream.js +12 -11
  124. package/dist/Stream.js.map +1 -1
  125. package/dist/Struct.d.ts +16 -0
  126. package/dist/Struct.d.ts.map +1 -1
  127. package/dist/Struct.js +22 -0
  128. package/dist/Struct.js.map +1 -1
  129. package/dist/SubscriptionRef.d.ts +2 -1
  130. package/dist/SubscriptionRef.d.ts.map +1 -1
  131. package/dist/SubscriptionRef.js +2 -1
  132. package/dist/SubscriptionRef.js.map +1 -1
  133. package/dist/SynchronizedRef.d.ts +2 -1
  134. package/dist/SynchronizedRef.d.ts.map +1 -1
  135. package/dist/SynchronizedRef.js +2 -1
  136. package/dist/SynchronizedRef.js.map +1 -1
  137. package/dist/Types.d.ts +8 -0
  138. package/dist/Types.d.ts.map +1 -1
  139. package/dist/index.d.ts +148 -5
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +148 -5
  142. package/dist/index.js.map +1 -1
  143. package/dist/internal/core.js +11 -3
  144. package/dist/internal/core.js.map +1 -1
  145. package/dist/internal/dateTime.js +3 -11
  146. package/dist/internal/dateTime.js.map +1 -1
  147. package/dist/internal/effect.js +2 -2
  148. package/dist/internal/effect.js.map +1 -1
  149. package/dist/internal/random.d.ts +2 -0
  150. package/dist/internal/random.d.ts.map +1 -0
  151. package/dist/internal/random.js +13 -0
  152. package/dist/internal/random.js.map +1 -0
  153. package/dist/internal/rcRef.js +3 -2
  154. package/dist/internal/rcRef.js.map +1 -1
  155. package/dist/testing/TestClock.d.ts +7 -6
  156. package/dist/testing/TestClock.d.ts.map +1 -1
  157. package/dist/testing/TestClock.js +6 -4
  158. package/dist/testing/TestClock.js.map +1 -1
  159. package/dist/testing/TestSchema.d.ts +6 -6
  160. package/dist/testing/TestSchema.d.ts.map +1 -1
  161. package/dist/unstable/ai/AiError.d.ts +48 -48
  162. package/dist/unstable/ai/AiError.d.ts.map +1 -1
  163. package/dist/unstable/ai/Chat.d.ts +3 -3
  164. package/dist/unstable/ai/Chat.d.ts.map +1 -1
  165. package/dist/unstable/ai/Chat.js +4 -3
  166. package/dist/unstable/ai/Chat.js.map +1 -1
  167. package/dist/unstable/ai/LanguageModel.d.ts +2 -2
  168. package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
  169. package/dist/unstable/ai/McpSchema.d.ts +51 -51
  170. package/dist/unstable/ai/McpServer.d.ts +1 -1
  171. package/dist/unstable/ai/McpServer.d.ts.map +1 -1
  172. package/dist/unstable/ai/McpServer.js.map +1 -1
  173. package/dist/unstable/ai/Prompt.d.ts +20 -20
  174. package/dist/unstable/ai/Prompt.d.ts.map +1 -1
  175. package/dist/unstable/ai/Response.d.ts +26 -26
  176. package/dist/unstable/ai/Response.d.ts.map +1 -1
  177. package/dist/unstable/ai/Response.js +1 -1
  178. package/dist/unstable/ai/Response.js.map +1 -1
  179. package/dist/unstable/cli/CliError.d.ts +5 -5
  180. package/dist/unstable/cluster/ClusterCron.d.ts +1 -1
  181. package/dist/unstable/cluster/ClusterCron.d.ts.map +1 -1
  182. package/dist/unstable/cluster/ClusterCron.js +1 -1
  183. package/dist/unstable/cluster/ClusterCron.js.map +1 -1
  184. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  185. package/dist/unstable/cluster/ClusterWorkflowEngine.js +2 -1
  186. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  187. package/dist/unstable/cluster/Entity.d.ts +5 -4
  188. package/dist/unstable/cluster/Entity.d.ts.map +1 -1
  189. package/dist/unstable/cluster/Entity.js.map +1 -1
  190. package/dist/unstable/cluster/EntityResource.d.ts +2 -2
  191. package/dist/unstable/cluster/EntityResource.d.ts.map +1 -1
  192. package/dist/unstable/cluster/Envelope.d.ts +1 -1
  193. package/dist/unstable/cluster/K8sHttpClient.d.ts +1 -1
  194. package/dist/unstable/cluster/K8sHttpClient.js +1 -1
  195. package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
  196. package/dist/unstable/cluster/Message.d.ts +5 -5
  197. package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
  198. package/dist/unstable/cluster/MessageStorage.js +2 -1
  199. package/dist/unstable/cluster/MessageStorage.js.map +1 -1
  200. package/dist/unstable/cluster/Reply.d.ts +3 -3
  201. package/dist/unstable/cluster/Runner.d.ts +1 -1
  202. package/dist/unstable/cluster/Runners.d.ts.map +1 -1
  203. package/dist/unstable/cluster/Runners.js +4 -3
  204. package/dist/unstable/cluster/Runners.js.map +1 -1
  205. package/dist/unstable/cluster/Sharding.d.ts +2 -2
  206. package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
  207. package/dist/unstable/cluster/Sharding.js +8 -6
  208. package/dist/unstable/cluster/Sharding.js.map +1 -1
  209. package/dist/unstable/cluster/ShardingConfig.d.ts +21 -21
  210. package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
  211. package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
  212. package/dist/unstable/cluster/SqlRunnerStorage.js +1 -1
  213. package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
  214. package/dist/unstable/cluster/internal/entityManager.js +5 -4
  215. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  216. package/dist/unstable/cluster/internal/entityReaper.js +2 -1
  217. package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
  218. package/dist/unstable/cluster/internal/resourceRef.js +2 -1
  219. package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
  220. package/dist/unstable/devtools/DevToolsSchema.d.ts +36 -36
  221. package/dist/unstable/encoding/Sse.d.ts +3 -3
  222. package/dist/unstable/encoding/Sse.d.ts.map +1 -1
  223. package/dist/unstable/encoding/Sse.js.map +1 -1
  224. package/dist/unstable/eventlog/EventJournal.d.ts +1 -1
  225. package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
  226. package/dist/unstable/eventlog/EventLog.js +2 -1
  227. package/dist/unstable/eventlog/EventLog.js.map +1 -1
  228. package/dist/unstable/eventlog/EventLogRemote.d.ts +5 -5
  229. package/dist/unstable/http/Cookies.d.ts +2 -2
  230. package/dist/unstable/http/Cookies.d.ts.map +1 -1
  231. package/dist/unstable/http/Cookies.js +2 -2
  232. package/dist/unstable/http/Cookies.js.map +1 -1
  233. package/dist/unstable/http/HttpClient.d.ts +4 -4
  234. package/dist/unstable/http/HttpClient.d.ts.map +1 -1
  235. package/dist/unstable/http/HttpClientRequest.d.ts +11 -11
  236. package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
  237. package/dist/unstable/http/HttpClientRequest.js +8 -1
  238. package/dist/unstable/http/HttpClientRequest.js.map +1 -1
  239. package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
  240. package/dist/unstable/http/HttpEffect.js +18 -26
  241. package/dist/unstable/http/HttpEffect.js.map +1 -1
  242. package/dist/unstable/http/HttpMethod.d.ts +4 -4
  243. package/dist/unstable/http/HttpMethod.d.ts.map +1 -1
  244. package/dist/unstable/http/HttpMethod.js +3 -3
  245. package/dist/unstable/http/HttpMethod.js.map +1 -1
  246. package/dist/unstable/http/Multipart.d.ts +2 -2
  247. package/dist/unstable/http/UrlParams.d.ts +1 -1
  248. package/dist/unstable/httpapi/HttpApiBuilder.js +2 -2
  249. package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
  250. package/dist/unstable/httpapi/HttpApiScalar.d.ts +6 -0
  251. package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
  252. package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
  253. package/dist/unstable/observability/Otlp.d.ts +12 -12
  254. package/dist/unstable/observability/Otlp.d.ts.map +1 -1
  255. package/dist/unstable/observability/OtlpExporter.d.ts +2 -2
  256. package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
  257. package/dist/unstable/observability/OtlpExporter.js +1 -1
  258. package/dist/unstable/observability/OtlpExporter.js.map +1 -1
  259. package/dist/unstable/observability/OtlpLogger.d.ts +4 -4
  260. package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
  261. package/dist/unstable/observability/OtlpMetrics.d.ts +4 -4
  262. package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
  263. package/dist/unstable/observability/OtlpTracer.d.ts +4 -4
  264. package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
  265. package/dist/unstable/persistence/KeyValueStore.js +4 -4
  266. package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
  267. package/dist/unstable/persistence/Persistable.d.ts +2 -2
  268. package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
  269. package/dist/unstable/persistence/PersistedCache.d.ts +6 -5
  270. package/dist/unstable/persistence/PersistedCache.d.ts.map +1 -1
  271. package/dist/unstable/persistence/PersistedCache.js +2 -1
  272. package/dist/unstable/persistence/PersistedCache.js.map +1 -1
  273. package/dist/unstable/persistence/PersistedQueue.d.ts +12 -12
  274. package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
  275. package/dist/unstable/persistence/PersistedQueue.js +12 -11
  276. package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
  277. package/dist/unstable/persistence/Persistence.d.ts +1 -1
  278. package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
  279. package/dist/unstable/persistence/Persistence.js +2 -2
  280. package/dist/unstable/persistence/Persistence.js.map +1 -1
  281. package/dist/unstable/persistence/RateLimiter.d.ts +3 -3
  282. package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
  283. package/dist/unstable/persistence/RateLimiter.js +1 -1
  284. package/dist/unstable/persistence/RateLimiter.js.map +1 -1
  285. package/dist/unstable/process/ChildProcess.d.ts +1 -1
  286. package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
  287. package/dist/unstable/process/ChildProcessSpawner.d.ts +6 -0
  288. package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
  289. package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
  290. package/dist/unstable/reactivity/Atom.d.ts +6 -6
  291. package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
  292. package/dist/unstable/reactivity/Atom.js +3 -3
  293. package/dist/unstable/reactivity/Atom.js.map +1 -1
  294. package/dist/unstable/reactivity/AtomHttpApi.d.ts +1 -1
  295. package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
  296. package/dist/unstable/reactivity/AtomHttpApi.js +1 -1
  297. package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
  298. package/dist/unstable/reactivity/AtomRpc.d.ts +1 -1
  299. package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
  300. package/dist/unstable/reactivity/AtomRpc.js +1 -1
  301. package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
  302. package/dist/unstable/reactivity/index.d.ts +2 -2
  303. package/dist/unstable/reactivity/index.d.ts.map +1 -1
  304. package/dist/unstable/reactivity/index.js +2 -2
  305. package/dist/unstable/reactivity/index.js.map +1 -1
  306. package/dist/unstable/rpc/Rpc.d.ts +2 -2
  307. package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
  308. package/dist/unstable/rpc/RpcClient.d.ts +5 -26
  309. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  310. package/dist/unstable/rpc/RpcClient.js +6 -13
  311. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  312. package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
  313. package/dist/unstable/rpc/RpcServer.js +5 -3
  314. package/dist/unstable/rpc/RpcServer.js.map +1 -1
  315. package/dist/unstable/rpc/Utils.d.ts.map +1 -1
  316. package/dist/unstable/rpc/Utils.js +2 -1
  317. package/dist/unstable/rpc/Utils.js.map +1 -1
  318. package/dist/unstable/socket/Socket.d.ts +4 -4
  319. package/dist/unstable/socket/Socket.d.ts.map +1 -1
  320. package/dist/unstable/socket/Socket.js +3 -2
  321. package/dist/unstable/socket/Socket.js.map +1 -1
  322. package/dist/unstable/sql/SqlModel.d.ts +2 -2
  323. package/dist/unstable/sql/SqlModel.d.ts.map +1 -1
  324. package/dist/unstable/sql/SqlModel.js +3 -3
  325. package/dist/unstable/sql/SqlModel.js.map +1 -1
  326. package/dist/unstable/sql/SqlSchema.d.ts +16 -5
  327. package/dist/unstable/sql/SqlSchema.d.ts.map +1 -1
  328. package/dist/unstable/sql/SqlSchema.js +17 -7
  329. package/dist/unstable/sql/SqlSchema.js.map +1 -1
  330. package/dist/unstable/sql/Statement.js +0 -1
  331. package/dist/unstable/sql/Statement.js.map +1 -1
  332. package/dist/unstable/workers/Worker.d.ts.map +1 -1
  333. package/dist/unstable/workers/Worker.js +2 -1
  334. package/dist/unstable/workers/Worker.js.map +1 -1
  335. package/dist/unstable/workflow/DurableClock.d.ts +3 -3
  336. package/dist/unstable/workflow/DurableClock.d.ts.map +1 -1
  337. package/dist/unstable/workflow/DurableClock.js +3 -3
  338. package/dist/unstable/workflow/DurableClock.js.map +1 -1
  339. package/dist/unstable/workflow/DurableDeferred.js +2 -2
  340. package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
  341. package/dist/unstable/workflow/Workflow.d.ts +1 -1
  342. package/dist/unstable/workflow/WorkflowEngine.d.ts +2 -1
  343. package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
  344. package/dist/unstable/workflow/WorkflowEngine.js +2 -1
  345. package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
  346. package/package.json +1 -2
  347. package/src/Cache.ts +3 -3
  348. package/src/Cause.ts +1 -1
  349. package/src/Channel.ts +6 -4
  350. package/src/Config.ts +3 -3
  351. package/src/Data.ts +10 -9
  352. package/src/DateTime.ts +24 -164
  353. package/src/Duration.ts +15 -15
  354. package/src/Effect.ts +15 -261
  355. package/src/Encoding.ts +879 -0
  356. package/src/Equal.ts +2 -2
  357. package/src/FileSystem.ts +4 -4
  358. package/src/Formatter.ts +253 -51
  359. package/src/Graph.ts +8 -5
  360. package/src/JsonSchema.ts +383 -10
  361. package/src/Latch.ts +112 -0
  362. package/src/LayerMap.ts +5 -5
  363. package/src/LogLevel.ts +31 -0
  364. package/src/Logger.ts +5 -5
  365. package/src/Metric.ts +4 -4
  366. package/src/Pipeable.ts +32 -1
  367. package/src/Pool.ts +13 -11
  368. package/src/PubSub.ts +10 -9
  369. package/src/Random.ts +5 -14
  370. package/src/RcMap.ts +5 -5
  371. package/src/RcRef.ts +1 -1
  372. package/src/Request.ts +3 -2
  373. package/src/RequestResolver.ts +9 -29
  374. package/src/Schedule.ts +261 -140
  375. package/src/Schema.ts +571 -109
  376. package/src/SchemaGetter.ts +12 -14
  377. package/src/SchemaRepresentation.ts +5 -2
  378. package/src/SchemaTransformation.ts +104 -0
  379. package/src/ScopedCache.ts +3 -3
  380. package/src/Semaphore.ts +356 -0
  381. package/src/Stream.ts +43 -42
  382. package/src/Struct.ts +26 -0
  383. package/src/SubscriptionRef.ts +3 -2
  384. package/src/SynchronizedRef.ts +3 -2
  385. package/src/Types.ts +9 -0
  386. package/src/index.ts +151 -6
  387. package/src/internal/core.ts +10 -2
  388. package/src/internal/dateTime.ts +9 -30
  389. package/src/internal/effect.ts +24 -23
  390. package/src/internal/random.ts +20 -0
  391. package/src/internal/rcRef.ts +4 -3
  392. package/src/testing/TestClock.ts +13 -11
  393. package/src/testing/TestSchema.ts +8 -8
  394. package/src/unstable/ai/AiError.ts +2 -2
  395. package/src/unstable/ai/Chat.ts +12 -11
  396. package/src/unstable/ai/LanguageModel.ts +3 -3
  397. package/src/unstable/ai/McpServer.ts +2 -2
  398. package/src/unstable/ai/Prompt.ts +37 -37
  399. package/src/unstable/ai/Response.ts +25 -25
  400. package/src/unstable/cluster/ClusterCron.ts +2 -2
  401. package/src/unstable/cluster/ClusterWorkflowEngine.ts +3 -2
  402. package/src/unstable/cluster/Entity.ts +7 -6
  403. package/src/unstable/cluster/EntityResource.ts +4 -4
  404. package/src/unstable/cluster/Envelope.ts +1 -1
  405. package/src/unstable/cluster/K8sHttpClient.ts +1 -1
  406. package/src/unstable/cluster/MessageStorage.ts +3 -5
  407. package/src/unstable/cluster/Runners.ts +6 -5
  408. package/src/unstable/cluster/Sharding.ts +11 -9
  409. package/src/unstable/cluster/ShardingConfig.ts +10 -11
  410. package/src/unstable/cluster/SqlRunnerStorage.ts +1 -1
  411. package/src/unstable/cluster/internal/entityManager.ts +9 -8
  412. package/src/unstable/cluster/internal/entityReaper.ts +2 -1
  413. package/src/unstable/cluster/internal/resourceRef.ts +2 -1
  414. package/src/unstable/encoding/Sse.ts +2 -4
  415. package/src/unstable/eventlog/EventLog.ts +2 -1
  416. package/src/unstable/http/Cookies.ts +3 -3
  417. package/src/unstable/http/HttpClient.ts +4 -4
  418. package/src/unstable/http/HttpClientRequest.ts +15 -11
  419. package/src/unstable/http/HttpEffect.ts +17 -25
  420. package/src/unstable/http/HttpMethod.ts +16 -4
  421. package/src/unstable/http/Multipart.ts +2 -2
  422. package/src/unstable/http/UrlParams.ts +1 -1
  423. package/src/unstable/httpapi/HttpApiBuilder.ts +2 -2
  424. package/src/unstable/httpapi/HttpApiScalar.ts +6 -0
  425. package/src/unstable/observability/Otlp.ts +12 -12
  426. package/src/unstable/observability/OtlpExporter.ts +3 -3
  427. package/src/unstable/observability/OtlpLogger.ts +4 -4
  428. package/src/unstable/observability/OtlpMetrics.ts +4 -4
  429. package/src/unstable/observability/OtlpTracer.ts +4 -4
  430. package/src/unstable/persistence/KeyValueStore.ts +4 -4
  431. package/src/unstable/persistence/Persistable.ts +2 -2
  432. package/src/unstable/persistence/PersistedCache.ts +20 -9
  433. package/src/unstable/persistence/PersistedQueue.ts +25 -24
  434. package/src/unstable/persistence/Persistence.ts +3 -3
  435. package/src/unstable/persistence/RateLimiter.ts +4 -4
  436. package/src/unstable/process/ChildProcess.ts +1 -1
  437. package/src/unstable/process/ChildProcessSpawner.ts +6 -0
  438. package/src/unstable/reactivity/Atom.ts +13 -13
  439. package/src/unstable/reactivity/AtomHttpApi.ts +3 -3
  440. package/src/unstable/reactivity/AtomRpc.ts +3 -3
  441. package/src/unstable/reactivity/index.ts +2 -2
  442. package/src/unstable/rpc/Rpc.ts +3 -3
  443. package/src/unstable/rpc/RpcClient.ts +12 -54
  444. package/src/unstable/rpc/RpcServer.ts +6 -4
  445. package/src/unstable/rpc/Utils.ts +2 -1
  446. package/src/unstable/socket/Socket.ts +7 -6
  447. package/src/unstable/sql/SqlModel.ts +5 -5
  448. package/src/unstable/sql/SqlSchema.ts +41 -25
  449. package/src/unstable/sql/Statement.ts +0 -1
  450. package/src/unstable/workers/Worker.ts +2 -1
  451. package/src/unstable/workflow/DurableClock.ts +8 -8
  452. package/src/unstable/workflow/DurableDeferred.ts +2 -2
  453. package/src/unstable/workflow/WorkflowEngine.ts +3 -2
  454. package/dist/PartitionedSemaphore.d.ts +0 -52
  455. package/dist/PartitionedSemaphore.d.ts.map +0 -1
  456. package/dist/PartitionedSemaphore.js.map +0 -1
  457. package/dist/encoding/Base64.d.ts +0 -67
  458. package/dist/encoding/Base64.d.ts.map +0 -1
  459. package/dist/encoding/Base64.js +0 -146
  460. package/dist/encoding/Base64.js.map +0 -1
  461. package/dist/encoding/Base64Url.d.ts +0 -60
  462. package/dist/encoding/Base64Url.d.ts.map +0 -1
  463. package/dist/encoding/Base64Url.js +0 -89
  464. package/dist/encoding/Base64Url.js.map +0 -1
  465. package/dist/encoding/EncodingError.d.ts +0 -31
  466. package/dist/encoding/EncodingError.d.ts.map +0 -1
  467. package/dist/encoding/EncodingError.js +0 -22
  468. package/dist/encoding/EncodingError.js.map +0 -1
  469. package/dist/encoding/Hex.d.ts +0 -61
  470. package/dist/encoding/Hex.d.ts.map +0 -1
  471. package/dist/encoding/Hex.js +0 -115
  472. package/dist/encoding/Hex.js.map +0 -1
  473. package/dist/encoding/index.d.ts +0 -26
  474. package/dist/encoding/index.d.ts.map +0 -1
  475. package/dist/encoding/index.js +0 -27
  476. package/dist/encoding/index.js.map +0 -1
  477. package/src/PartitionedSemaphore.ts +0 -182
  478. package/src/encoding/Base64.ts +0 -366
  479. package/src/encoding/Base64Url.ts +0 -104
  480. package/src/encoding/EncodingError.ts +0 -35
  481. package/src/encoding/Hex.ts +0 -390
  482. package/src/encoding/index.ts +0 -31
package/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
  *
@@ -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
@@ -2925,8 +3022,8 @@ export const delays = <Out, In, E, R>(self: Schedule<Out, In, E, R>): Schedule<D
2925
3022
  * @since 2.0.0
2926
3023
  * @category constructors
2927
3024
  */
2928
- export const duration = (durationInput: Duration.DurationInput): Schedule<Duration.Duration> => {
2929
- const duration = Duration.fromDurationInputUnsafe(durationInput)
3025
+ export const duration = (durationInput: Duration.Input): Schedule<Duration.Duration> => {
3026
+ const duration = Duration.fromInputUnsafe(durationInput)
2930
3027
  return fromStepWithMetadata(effect.succeed((meta) =>
2931
3028
  meta.attempt === 1
2932
3029
  ? effect.succeed([duration, duration])
@@ -3019,10 +3116,10 @@ export const duration = (durationInput: Duration.DurationInput): Schedule<Durati
3019
3116
  * @since 4.0.0
3020
3117
  * @category constructors
3021
3118
  */
3022
- export const during = (duration: Duration.DurationInput): Schedule<Duration.Duration> =>
3119
+ export const during = (duration: Duration.Input): Schedule<Duration.Duration> =>
3023
3120
  while_(
3024
3121
  elapsed,
3025
- ({ output }) => effect.succeed(Duration.isLessThanOrEqualTo(output, Duration.fromDurationInputUnsafe(duration)))
3122
+ ({ output }) => effect.succeed(Duration.isLessThanOrEqualTo(output, Duration.fromInputUnsafe(duration)))
3026
3123
  )
3027
3124
 
3028
3125
  /**
@@ -3762,10 +3859,10 @@ export const elapsed: Schedule<Duration.Duration> = fromStepWithMetadata(
3762
3859
  * @category constructors
3763
3860
  */
3764
3861
  export const exponential = (
3765
- base: Duration.DurationInput,
3862
+ base: Duration.Input,
3766
3863
  factor: number = 2
3767
3864
  ): Schedule<Duration.Duration> => {
3768
- const baseMillis = Duration.toMillis(Duration.fromDurationInputUnsafe(base))
3865
+ const baseMillis = Duration.toMillis(Duration.fromInputUnsafe(base))
3769
3866
  return fromStepWithMetadata(effect.succeed((meta) => {
3770
3867
  const duration = Duration.millis(baseMillis * Math.pow(factor, meta.attempt - 1))
3771
3868
  return effect.succeed([duration, duration])
@@ -3836,8 +3933,8 @@ export const exponential = (
3836
3933
  * @since 2.0.0
3837
3934
  * @category constructors
3838
3935
  */
3839
- export const fibonacci = (one: Duration.DurationInput): Schedule<Duration.Duration> => {
3840
- 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))
3841
3938
  return fromStep(effect.sync(() => {
3842
3939
  let a = 0
3843
3940
  let b = oneMillis
@@ -3913,8 +4010,8 @@ export const fibonacci = (one: Duration.DurationInput): Schedule<Duration.Durati
3913
4010
  * @since 2.0.0
3914
4011
  * @category constructors
3915
4012
  */
3916
- export const fixed = (interval: Duration.DurationInput): Schedule<number> => {
3917
- const window = Duration.toMillis(Duration.fromDurationInputUnsafe(interval))
4013
+ export const fixed = (interval: Duration.Input): Schedule<number> => {
4014
+ const window = Duration.toMillis(Duration.fromInputUnsafe(interval))
3918
4015
  return fromStepWithMetadata(effect.succeed((meta) =>
3919
4016
  effect.succeed([
3920
4017
  meta.attempt - 1,
@@ -4050,7 +4147,7 @@ export const map: {
4050
4147
  * @since 2.0.0
4051
4148
  * @category mapping
4052
4149
  */
4053
- <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>(
4054
4151
  self: Schedule<Output, Input, Error, Env>
4055
4152
  ) => Schedule<Output2, Input, Error | Error2, Env | Env2>
4056
4153
  /**
@@ -4117,17 +4214,24 @@ export const map: {
4117
4214
  */
4118
4215
  <Output, Input, Error, Env, Output2, Error2 = never, Env2 = never>(
4119
4216
  self: Schedule<Output, Input, Error, Env>,
4120
- f: (output: Output) => Effect<Output2, Error2, Env2>
4217
+ f: (output: Output) => Output2 | Effect<Output2, Error2, Env2>
4121
4218
  ): Schedule<Output2, Input, Error | Error2, Env | Env2>
4122
4219
  } = dual(2, <Output, Input, Error, Env, Output2, Error2 = never, Env2 = never>(
4123
4220
  self: Schedule<Output, Input, Error, Env>,
4124
- f: (output: Output) => Effect<Output2, Error2, Env2>
4221
+ f: (output: Output) => Output2 | Effect<Output2, Error2, Env2>
4125
4222
  ): Schedule<Output2, Input, Error | Error2, Env | Env2> => {
4126
4223
  const handle = Pull.matchEffect({
4127
- onSuccess: ([output, duration]: [Output, Duration.Duration]) =>
4128
- 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
+ },
4129
4229
  onFailure: effect.failCause<Error>,
4130
- 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
+ }
4131
4235
  })
4132
4236
  return fromStep(effect.map(toStep(self), (step) => (now, input) => handle(step(now, input))))
4133
4237
  })
@@ -4201,7 +4305,7 @@ export const modifyDelay: {
4201
4305
  f: (
4202
4306
  output: Output,
4203
4307
  delay: Duration.Duration
4204
- ) => Effect<Duration.DurationInput, Error2, Env2>
4308
+ ) => Effect<Duration.Input, Error2, Env2>
4205
4309
  ): <Input, Error, Env>(
4206
4310
  self: Schedule<Output, Input, Error, Env>
4207
4311
  ) => Schedule<Output, Input, Error | Error2, Env | Env2>
@@ -4241,22 +4345,39 @@ export const modifyDelay: {
4241
4345
  self: Schedule<Output, Input, Error, Env>,
4242
4346
  f: (
4243
4347
  output: Output,
4244
- delay: Duration.DurationInput
4245
- ) => Effect<Duration.DurationInput, Error2, Env2>
4348
+ delay: Duration.Input
4349
+ ) => Effect<Duration.Input, Error2, Env2>
4246
4350
  ): Schedule<Output, Input, Error | Error2, Env | Env2>
4247
4351
  } = dual(2, <Output, Input, Error, Env, Error2 = never, Env2 = never>(
4248
4352
  self: Schedule<Output, Input, Error, Env>,
4249
4353
  f: (
4250
4354
  output: Output,
4251
- delay: Duration.DurationInput
4252
- ) => Effect<Duration.DurationInput, Error2, Env2>
4355
+ delay: Duration.Input
4356
+ ) => Effect<Duration.Input, Error2, Env2>
4253
4357
  ): Schedule<Output, Input, Error | Error2, Env | Env2> =>
4254
4358
  fromStep(effect.map(toStep(self), (step) => (now, input) =>
4255
4359
  effect.flatMap(
4256
4360
  step(now, input),
4257
- ([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)])
4258
4362
  ))))
4259
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
+
4260
4381
  /**
4261
4382
  * Returns a new `Schedule` that outputs the inputs of the specified schedule.
4262
4383
  *
@@ -4765,8 +4886,8 @@ export const reduce: {
4765
4886
  * @since 2.0.0
4766
4887
  * @category constructors
4767
4888
  */
4768
- export const spaced = (duration: Duration.DurationInput): Schedule<number> => {
4769
- const decoded = Duration.fromDurationInputUnsafe(duration)
4889
+ export const spaced = (duration: Duration.Input): Schedule<number> => {
4890
+ const decoded = Duration.fromInputUnsafe(duration)
4770
4891
  return fromStepWithMetadata(effect.succeed((meta) => effect.succeed([meta.attempt - 1, decoded])))
4771
4892
  }
4772
4893
 
@@ -5856,8 +5977,8 @@ export {
5856
5977
  * @since 2.0.0
5857
5978
  * @category constructors
5858
5979
  */
5859
- export const windowed = (interval: Duration.DurationInput): Schedule<number> => {
5860
- const window = Duration.toMillis(Duration.fromDurationInputUnsafe(interval))
5980
+ export const windowed = (interval: Duration.Input): Schedule<number> => {
5981
+ const window = Duration.toMillis(Duration.fromInputUnsafe(interval))
5861
5982
  return fromStepWithMetadata(effect.succeed((meta) =>
5862
5983
  effect.sync(() => [
5863
5984
  meta.attempt - 1,