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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (983) hide show
  1. package/dist/Array.d.ts +126 -299
  2. package/dist/Array.d.ts.map +1 -1
  3. package/dist/Array.js +102 -62
  4. package/dist/Array.js.map +1 -1
  5. package/dist/Brand.d.ts +1 -1
  6. package/dist/Brand.d.ts.map +1 -1
  7. package/dist/Brand.js +1 -1
  8. package/dist/Brand.js.map +1 -1
  9. package/dist/Cache.d.ts +2 -2
  10. package/dist/Cache.d.ts.map +1 -1
  11. package/dist/Cache.js +6 -5
  12. package/dist/Cache.js.map +1 -1
  13. package/dist/Cause.d.ts +2 -2
  14. package/dist/Cause.d.ts.map +1 -1
  15. package/dist/Channel.d.ts +116 -30
  16. package/dist/Channel.d.ts.map +1 -1
  17. package/dist/Channel.js +82 -37
  18. package/dist/Channel.js.map +1 -1
  19. package/dist/Chunk.d.ts +54 -247
  20. package/dist/Chunk.d.ts.map +1 -1
  21. package/dist/Chunk.js +36 -67
  22. package/dist/Chunk.js.map +1 -1
  23. package/dist/Combiner.d.ts +280 -13
  24. package/dist/Combiner.d.ts.map +1 -1
  25. package/dist/Combiner.js +198 -7
  26. package/dist/Combiner.js.map +1 -1
  27. package/dist/Config.d.ts +165 -9
  28. package/dist/Config.d.ts.map +1 -1
  29. package/dist/Config.js +65 -10
  30. package/dist/Config.js.map +1 -1
  31. package/dist/ConfigProvider.d.ts +1 -1
  32. package/dist/Cron.d.ts +1 -1
  33. package/dist/Data.d.ts +535 -366
  34. package/dist/Data.d.ts.map +1 -1
  35. package/dist/Data.js +132 -79
  36. package/dist/Data.js.map +1 -1
  37. package/dist/DateTime.d.ts +23 -161
  38. package/dist/DateTime.d.ts.map +1 -1
  39. package/dist/DateTime.js +6 -51
  40. package/dist/DateTime.js.map +1 -1
  41. package/dist/Duration.d.ts +11 -11
  42. package/dist/Duration.d.ts.map +1 -1
  43. package/dist/Duration.js +11 -11
  44. package/dist/Duration.js.map +1 -1
  45. package/dist/Effect.d.ts +1206 -924
  46. package/dist/Effect.d.ts.map +1 -1
  47. package/dist/Effect.js +390 -329
  48. package/dist/Effect.js.map +1 -1
  49. package/dist/Encoding.d.ts +194 -0
  50. package/dist/Encoding.d.ts.map +1 -0
  51. package/dist/Encoding.js +352 -0
  52. package/dist/Encoding.js.map +1 -0
  53. package/dist/Equal.d.ts +276 -109
  54. package/dist/Equal.d.ts.map +1 -1
  55. package/dist/Equal.js +124 -48
  56. package/dist/Equal.js.map +1 -1
  57. package/dist/ErrorReporter.d.ts +374 -0
  58. package/dist/ErrorReporter.d.ts.map +1 -0
  59. package/dist/ErrorReporter.js +244 -0
  60. package/dist/ErrorReporter.js.map +1 -0
  61. package/dist/Exit.d.ts +24 -12
  62. package/dist/Exit.d.ts.map +1 -1
  63. package/dist/Exit.js +8 -4
  64. package/dist/Exit.js.map +1 -1
  65. package/dist/Fiber.d.ts +3 -2
  66. package/dist/Fiber.d.ts.map +1 -1
  67. package/dist/Fiber.js.map +1 -1
  68. package/dist/FileSystem.d.ts +1 -1
  69. package/dist/FileSystem.d.ts.map +1 -1
  70. package/dist/FileSystem.js +5 -5
  71. package/dist/FileSystem.js.map +1 -1
  72. package/dist/Filter.d.ts +34 -38
  73. package/dist/Filter.d.ts.map +1 -1
  74. package/dist/Filter.js +15 -13
  75. package/dist/Filter.js.map +1 -1
  76. package/dist/Formatter.d.ts +131 -47
  77. package/dist/Formatter.d.ts.map +1 -1
  78. package/dist/Formatter.js +229 -51
  79. package/dist/Formatter.js.map +1 -1
  80. package/dist/Function.d.ts +1 -9
  81. package/dist/Function.d.ts.map +1 -1
  82. package/dist/Function.js +2 -10
  83. package/dist/Function.js.map +1 -1
  84. package/dist/Graph.d.ts +1 -1
  85. package/dist/Graph.d.ts.map +1 -1
  86. package/dist/Graph.js +5 -8
  87. package/dist/Graph.js.map +1 -1
  88. package/dist/HashMap.d.ts +15 -14
  89. package/dist/HashMap.d.ts.map +1 -1
  90. package/dist/HashMap.js +4 -4
  91. package/dist/HashMap.js.map +1 -1
  92. package/dist/Iterable.d.ts +39 -39
  93. package/dist/Iterable.d.ts.map +1 -1
  94. package/dist/Iterable.js +94 -22
  95. package/dist/Iterable.js.map +1 -1
  96. package/dist/JsonSchema.d.ts +299 -10
  97. package/dist/JsonSchema.d.ts.map +1 -1
  98. package/dist/JsonSchema.js +323 -4
  99. package/dist/JsonSchema.js.map +1 -1
  100. package/dist/Latch.d.ts +109 -0
  101. package/dist/Latch.d.ts.map +1 -0
  102. package/dist/Latch.js +72 -0
  103. package/dist/Latch.js.map +1 -0
  104. package/dist/Layer.d.ts +121 -126
  105. package/dist/Layer.d.ts.map +1 -1
  106. package/dist/Layer.js +43 -44
  107. package/dist/Layer.js.map +1 -1
  108. package/dist/LayerMap.d.ts +8 -8
  109. package/dist/LayerMap.d.ts.map +1 -1
  110. package/dist/LayerMap.js +3 -3
  111. package/dist/LogLevel.d.ts +32 -0
  112. package/dist/LogLevel.d.ts.map +1 -1
  113. package/dist/LogLevel.js +28 -100
  114. package/dist/LogLevel.js.map +1 -1
  115. package/dist/Logger.d.ts +29 -95
  116. package/dist/Logger.d.ts.map +1 -1
  117. package/dist/Logger.js +2 -3
  118. package/dist/Logger.js.map +1 -1
  119. package/dist/ManagedRuntime.d.ts +2 -2
  120. package/dist/ManagedRuntime.js +2 -2
  121. package/dist/Metric.d.ts +4 -6
  122. package/dist/Metric.d.ts.map +1 -1
  123. package/dist/Metric.js +3 -5
  124. package/dist/Metric.js.map +1 -1
  125. package/dist/Newtype.d.ts +291 -0
  126. package/dist/Newtype.d.ts.map +1 -0
  127. package/dist/Newtype.js +161 -0
  128. package/dist/Newtype.js.map +1 -0
  129. package/dist/Optic.d.ts +947 -18
  130. package/dist/Optic.d.ts.map +1 -1
  131. package/dist/Optic.js +454 -5
  132. package/dist/Optic.js.map +1 -1
  133. package/dist/Option.d.ts +23 -16
  134. package/dist/Option.d.ts.map +1 -1
  135. package/dist/Option.js +15 -9
  136. package/dist/Option.js.map +1 -1
  137. package/dist/Pipeable.d.ts +17 -0
  138. package/dist/Pipeable.d.ts.map +1 -1
  139. package/dist/Pipeable.js +19 -1
  140. package/dist/Pipeable.js.map +1 -1
  141. package/dist/PlatformError.d.ts +10 -9
  142. package/dist/PlatformError.d.ts.map +1 -1
  143. package/dist/PlatformError.js +2 -2
  144. package/dist/PlatformError.js.map +1 -1
  145. package/dist/Pool.d.ts +6 -4
  146. package/dist/Pool.d.ts.map +1 -1
  147. package/dist/Pool.js +7 -5
  148. package/dist/Pool.js.map +1 -1
  149. package/dist/PubSub.d.ts +3 -2
  150. package/dist/PubSub.d.ts.map +1 -1
  151. package/dist/PubSub.js +3 -2
  152. package/dist/PubSub.js.map +1 -1
  153. package/dist/Pull.d.ts.map +1 -1
  154. package/dist/Pull.js +1 -1
  155. package/dist/Pull.js.map +1 -1
  156. package/dist/Queue.d.ts.map +1 -1
  157. package/dist/Queue.js +0 -1
  158. package/dist/Queue.js.map +1 -1
  159. package/dist/Random.d.ts +35 -1
  160. package/dist/Random.d.ts.map +1 -1
  161. package/dist/Random.js +46 -12
  162. package/dist/Random.js.map +1 -1
  163. package/dist/RcMap.d.ts +2 -2
  164. package/dist/RcMap.d.ts.map +1 -1
  165. package/dist/RcMap.js +1 -1
  166. package/dist/RcMap.js.map +1 -1
  167. package/dist/RcRef.d.ts +1 -1
  168. package/dist/RcRef.d.ts.map +1 -1
  169. package/dist/Record.d.ts +23 -120
  170. package/dist/Record.d.ts.map +1 -1
  171. package/dist/Record.js +21 -41
  172. package/dist/Record.js.map +1 -1
  173. package/dist/Reducer.d.ts +166 -7
  174. package/dist/Reducer.d.ts.map +1 -1
  175. package/dist/Reducer.js +135 -1
  176. package/dist/Reducer.js.map +1 -1
  177. package/dist/References.d.ts +9 -4
  178. package/dist/References.d.ts.map +1 -1
  179. package/dist/References.js +6 -1
  180. package/dist/References.js.map +1 -1
  181. package/dist/Request.d.ts +1 -1
  182. package/dist/Request.d.ts.map +1 -1
  183. package/dist/Request.js +2 -1
  184. package/dist/Request.js.map +1 -1
  185. package/dist/RequestResolver.d.ts +25 -45
  186. package/dist/RequestResolver.d.ts.map +1 -1
  187. package/dist/RequestResolver.js +10 -30
  188. package/dist/RequestResolver.js.map +1 -1
  189. package/dist/Result.d.ts +1 -1
  190. package/dist/Result.d.ts.map +1 -1
  191. package/dist/Result.js +1 -2
  192. package/dist/Result.js.map +1 -1
  193. package/dist/Runtime.d.ts +66 -0
  194. package/dist/Runtime.d.ts.map +1 -1
  195. package/dist/Runtime.js +79 -6
  196. package/dist/Runtime.js.map +1 -1
  197. package/dist/Schedule.d.ts +191 -102
  198. package/dist/Schedule.d.ts.map +1 -1
  199. package/dist/Schedule.js +152 -66
  200. package/dist/Schedule.js.map +1 -1
  201. package/dist/Scheduler.d.ts +9 -0
  202. package/dist/Scheduler.d.ts.map +1 -1
  203. package/dist/Scheduler.js +11 -0
  204. package/dist/Scheduler.js.map +1 -1
  205. package/dist/Schema.d.ts +309 -88
  206. package/dist/Schema.d.ts.map +1 -1
  207. package/dist/Schema.js +499 -109
  208. package/dist/Schema.js.map +1 -1
  209. package/dist/SchemaAST.d.ts.map +1 -1
  210. package/dist/SchemaAST.js +129 -23
  211. package/dist/SchemaAST.js.map +1 -1
  212. package/dist/SchemaGetter.d.ts +5 -5
  213. package/dist/SchemaGetter.d.ts.map +1 -1
  214. package/dist/SchemaGetter.js +12 -14
  215. package/dist/SchemaGetter.js.map +1 -1
  216. package/dist/SchemaParser.d.ts +5 -0
  217. package/dist/SchemaParser.d.ts.map +1 -1
  218. package/dist/SchemaParser.js +10 -0
  219. package/dist/SchemaParser.js.map +1 -1
  220. package/dist/SchemaRepresentation.d.ts +44 -43
  221. package/dist/SchemaRepresentation.d.ts.map +1 -1
  222. package/dist/SchemaRepresentation.js +49 -24
  223. package/dist/SchemaRepresentation.js.map +1 -1
  224. package/dist/SchemaTransformation.d.ts +107 -3
  225. package/dist/SchemaTransformation.d.ts.map +1 -1
  226. package/dist/SchemaTransformation.js +159 -4
  227. package/dist/SchemaTransformation.js.map +1 -1
  228. package/dist/ScopedCache.d.ts +2 -2
  229. package/dist/ScopedCache.d.ts.map +1 -1
  230. package/dist/ScopedCache.js +1 -1
  231. package/dist/ScopedCache.js.map +1 -1
  232. package/dist/Semaphore.d.ts +211 -0
  233. package/dist/Semaphore.d.ts.map +1 -0
  234. package/dist/{PartitionedSemaphore.js → Semaphore.js} +97 -13
  235. package/dist/Semaphore.js.map +1 -0
  236. package/dist/ServiceMap.d.ts +41 -31
  237. package/dist/ServiceMap.d.ts.map +1 -1
  238. package/dist/ServiceMap.js +3 -3
  239. package/dist/ServiceMap.js.map +1 -1
  240. package/dist/Sink.d.ts +13 -13
  241. package/dist/Sink.d.ts.map +1 -1
  242. package/dist/Sink.js +53 -6
  243. package/dist/Sink.js.map +1 -1
  244. package/dist/Stdio.d.ts +16 -4
  245. package/dist/Stdio.d.ts.map +1 -1
  246. package/dist/Stdio.js +18 -0
  247. package/dist/Stdio.js.map +1 -1
  248. package/dist/Stream.d.ts +250 -428
  249. package/dist/Stream.d.ts.map +1 -1
  250. package/dist/Stream.js +137 -82
  251. package/dist/Stream.js.map +1 -1
  252. package/dist/Struct.d.ts +16 -0
  253. package/dist/Struct.d.ts.map +1 -1
  254. package/dist/Struct.js +22 -0
  255. package/dist/Struct.js.map +1 -1
  256. package/dist/SubscriptionRef.d.ts +2 -1
  257. package/dist/SubscriptionRef.d.ts.map +1 -1
  258. package/dist/SubscriptionRef.js +2 -1
  259. package/dist/SubscriptionRef.js.map +1 -1
  260. package/dist/SynchronizedRef.d.ts +2 -1
  261. package/dist/SynchronizedRef.d.ts.map +1 -1
  262. package/dist/SynchronizedRef.js +2 -1
  263. package/dist/SynchronizedRef.js.map +1 -1
  264. package/dist/Trie.d.ts +18 -17
  265. package/dist/Trie.d.ts.map +1 -1
  266. package/dist/Trie.js +5 -5
  267. package/dist/Trie.js.map +1 -1
  268. package/dist/TxChunk.d.ts +37 -37
  269. package/dist/TxChunk.d.ts.map +1 -1
  270. package/dist/TxChunk.js +3 -3
  271. package/dist/TxChunk.js.map +1 -1
  272. package/dist/TxDeferred.d.ts +328 -0
  273. package/dist/TxDeferred.d.ts.map +1 -0
  274. package/dist/TxDeferred.js +196 -0
  275. package/dist/TxDeferred.js.map +1 -0
  276. package/dist/TxHashMap.d.ts +84 -83
  277. package/dist/TxHashMap.d.ts.map +1 -1
  278. package/dist/TxHashMap.js +24 -24
  279. package/dist/TxHashMap.js.map +1 -1
  280. package/dist/TxHashSet.d.ts +35 -35
  281. package/dist/TxHashSet.d.ts.map +1 -1
  282. package/dist/TxHashSet.js +14 -14
  283. package/dist/TxHashSet.js.map +1 -1
  284. package/dist/TxPriorityQueue.d.ts +609 -0
  285. package/dist/TxPriorityQueue.d.ts.map +1 -0
  286. package/dist/TxPriorityQueue.js +415 -0
  287. package/dist/TxPriorityQueue.js.map +1 -0
  288. package/dist/TxPubSub.d.ts +585 -0
  289. package/dist/TxPubSub.d.ts.map +1 -0
  290. package/dist/TxPubSub.js +521 -0
  291. package/dist/TxPubSub.js.map +1 -0
  292. package/dist/TxQueue.d.ts +32 -32
  293. package/dist/TxQueue.d.ts.map +1 -1
  294. package/dist/TxQueue.js +26 -26
  295. package/dist/TxQueue.js.map +1 -1
  296. package/dist/TxReentrantLock.d.ts +523 -0
  297. package/dist/TxReentrantLock.d.ts.map +1 -0
  298. package/dist/TxReentrantLock.js +504 -0
  299. package/dist/TxReentrantLock.js.map +1 -0
  300. package/dist/TxRef.d.ts +34 -34
  301. package/dist/TxRef.d.ts.map +1 -1
  302. package/dist/TxRef.js +21 -14
  303. package/dist/TxRef.js.map +1 -1
  304. package/dist/TxSemaphore.d.ts +8 -8
  305. package/dist/TxSemaphore.d.ts.map +1 -1
  306. package/dist/TxSemaphore.js +7 -7
  307. package/dist/TxSemaphore.js.map +1 -1
  308. package/dist/TxSubscriptionRef.d.ts +508 -0
  309. package/dist/TxSubscriptionRef.d.ts.map +1 -0
  310. package/dist/TxSubscriptionRef.js +293 -0
  311. package/dist/TxSubscriptionRef.js.map +1 -0
  312. package/dist/Types.d.ts +80 -23
  313. package/dist/Types.d.ts.map +1 -1
  314. package/dist/Utils.d.ts +137 -65
  315. package/dist/Utils.d.ts.map +1 -1
  316. package/dist/Utils.js +38 -66
  317. package/dist/Utils.js.map +1 -1
  318. package/dist/index.d.ts +718 -23
  319. package/dist/index.d.ts.map +1 -1
  320. package/dist/index.js +718 -23
  321. package/dist/index.js.map +1 -1
  322. package/dist/internal/core.js +11 -3
  323. package/dist/internal/core.js.map +1 -1
  324. package/dist/internal/dateTime.js +3 -11
  325. package/dist/internal/dateTime.js.map +1 -1
  326. package/dist/internal/effect.js +264 -126
  327. package/dist/internal/effect.js.map +1 -1
  328. package/dist/internal/hashMap.js +5 -4
  329. package/dist/internal/hashMap.js.map +1 -1
  330. package/dist/internal/random.d.ts +2 -0
  331. package/dist/internal/random.d.ts.map +1 -0
  332. package/dist/internal/random.js +13 -0
  333. package/dist/internal/random.js.map +1 -0
  334. package/dist/internal/rcRef.js +3 -2
  335. package/dist/internal/rcRef.js.map +1 -1
  336. package/dist/internal/request.js +2 -2
  337. package/dist/internal/request.js.map +1 -1
  338. package/dist/internal/schema/annotations.js +2 -0
  339. package/dist/internal/schema/annotations.js.map +1 -1
  340. package/dist/internal/schema/representation.js +47 -106
  341. package/dist/internal/schema/representation.js.map +1 -1
  342. package/dist/internal/schema/schema.js +1 -0
  343. package/dist/internal/schema/schema.js.map +1 -1
  344. package/dist/internal/schema/to-codec.js +7 -10
  345. package/dist/internal/schema/to-codec.js.map +1 -1
  346. package/dist/internal/trie.js +5 -4
  347. package/dist/internal/trie.js.map +1 -1
  348. package/dist/testing/TestClock.d.ts +8 -7
  349. package/dist/testing/TestClock.d.ts.map +1 -1
  350. package/dist/testing/TestClock.js +6 -4
  351. package/dist/testing/TestClock.js.map +1 -1
  352. package/dist/testing/TestSchema.d.ts +266 -32
  353. package/dist/testing/TestSchema.d.ts.map +1 -1
  354. package/dist/testing/TestSchema.js +296 -23
  355. package/dist/testing/TestSchema.js.map +1 -1
  356. package/dist/testing/index.d.ts +64 -1
  357. package/dist/testing/index.d.ts.map +1 -1
  358. package/dist/testing/index.js +64 -1
  359. package/dist/testing/index.js.map +1 -1
  360. package/dist/unstable/ai/AiError.d.ts +134 -51
  361. package/dist/unstable/ai/AiError.d.ts.map +1 -1
  362. package/dist/unstable/ai/AiError.js +19 -16
  363. package/dist/unstable/ai/AiError.js.map +1 -1
  364. package/dist/unstable/ai/Chat.d.ts +5 -5
  365. package/dist/unstable/ai/Chat.d.ts.map +1 -1
  366. package/dist/unstable/ai/Chat.js +38 -44
  367. package/dist/unstable/ai/Chat.js.map +1 -1
  368. package/dist/unstable/ai/LanguageModel.d.ts +16 -30
  369. package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
  370. package/dist/unstable/ai/LanguageModel.js +97 -37
  371. package/dist/unstable/ai/LanguageModel.js.map +1 -1
  372. package/dist/unstable/ai/McpSchema.d.ts +183 -88
  373. package/dist/unstable/ai/McpSchema.d.ts.map +1 -1
  374. package/dist/unstable/ai/McpSchema.js +57 -12
  375. package/dist/unstable/ai/McpSchema.js.map +1 -1
  376. package/dist/unstable/ai/McpServer.d.ts +66 -13
  377. package/dist/unstable/ai/McpServer.d.ts.map +1 -1
  378. package/dist/unstable/ai/McpServer.js +193 -51
  379. package/dist/unstable/ai/McpServer.js.map +1 -1
  380. package/dist/unstable/ai/Model.d.ts +25 -7
  381. package/dist/unstable/ai/Model.d.ts.map +1 -1
  382. package/dist/unstable/ai/Model.js +22 -6
  383. package/dist/unstable/ai/Model.js.map +1 -1
  384. package/dist/unstable/ai/Prompt.d.ts +20 -20
  385. package/dist/unstable/ai/Prompt.d.ts.map +1 -1
  386. package/dist/unstable/ai/Response.d.ts +26 -26
  387. package/dist/unstable/ai/Response.d.ts.map +1 -1
  388. package/dist/unstable/ai/Response.js +1 -1
  389. package/dist/unstable/ai/Response.js.map +1 -1
  390. package/dist/unstable/ai/Tool.d.ts +20 -4
  391. package/dist/unstable/ai/Tool.d.ts.map +1 -1
  392. package/dist/unstable/ai/Tool.js +14 -9
  393. package/dist/unstable/ai/Tool.js.map +1 -1
  394. package/dist/unstable/ai/Toolkit.d.ts +1 -1
  395. package/dist/unstable/ai/Toolkit.d.ts.map +1 -1
  396. package/dist/unstable/ai/Toolkit.js +4 -11
  397. package/dist/unstable/ai/Toolkit.js.map +1 -1
  398. package/dist/unstable/ai/index.d.ts +1 -1
  399. package/dist/unstable/ai/index.js +1 -1
  400. package/dist/unstable/ai/internal/codec-transformer.js +0 -5
  401. package/dist/unstable/ai/internal/codec-transformer.js.map +1 -1
  402. package/dist/unstable/cli/CliError.d.ts +27 -60
  403. package/dist/unstable/cli/CliError.d.ts.map +1 -1
  404. package/dist/unstable/cli/CliError.js +25 -57
  405. package/dist/unstable/cli/CliError.js.map +1 -1
  406. package/dist/unstable/cli/CliOutput.js +59 -6
  407. package/dist/unstable/cli/CliOutput.js.map +1 -1
  408. package/dist/unstable/cli/Command.d.ts +368 -56
  409. package/dist/unstable/cli/Command.d.ts.map +1 -1
  410. package/dist/unstable/cli/Command.js +325 -64
  411. package/dist/unstable/cli/Command.js.map +1 -1
  412. package/dist/unstable/cli/GlobalFlag.d.ts +125 -0
  413. package/dist/unstable/cli/GlobalFlag.d.ts.map +1 -0
  414. package/dist/unstable/cli/GlobalFlag.js +118 -0
  415. package/dist/unstable/cli/GlobalFlag.js.map +1 -0
  416. package/dist/unstable/cli/HelpDoc.d.ts +70 -2
  417. package/dist/unstable/cli/HelpDoc.d.ts.map +1 -1
  418. package/dist/unstable/cli/Primitive.d.ts +1 -1
  419. package/dist/unstable/cli/Primitive.js +1 -1
  420. package/dist/unstable/cli/Prompt.js +35 -8
  421. package/dist/unstable/cli/Prompt.js.map +1 -1
  422. package/dist/unstable/cli/index.d.ts +4 -0
  423. package/dist/unstable/cli/index.d.ts.map +1 -1
  424. package/dist/unstable/cli/index.js +4 -0
  425. package/dist/unstable/cli/index.js.map +1 -1
  426. package/dist/unstable/cli/internal/command.d.ts +40 -14
  427. package/dist/unstable/cli/internal/command.d.ts.map +1 -1
  428. package/dist/unstable/cli/internal/command.js +72 -46
  429. package/dist/unstable/cli/internal/command.js.map +1 -1
  430. package/dist/unstable/cli/internal/completions/CommandDescriptor.js +7 -2
  431. package/dist/unstable/cli/internal/completions/CommandDescriptor.js.map +1 -1
  432. package/dist/unstable/cli/internal/config.js +42 -0
  433. package/dist/unstable/cli/internal/config.js.map +1 -1
  434. package/dist/unstable/cli/internal/help.d.ts +33 -0
  435. package/dist/unstable/cli/internal/help.d.ts.map +1 -0
  436. package/dist/unstable/cli/internal/help.js +125 -0
  437. package/dist/unstable/cli/internal/help.js.map +1 -0
  438. package/dist/unstable/cli/internal/parser.js +55 -42
  439. package/dist/unstable/cli/internal/parser.js.map +1 -1
  440. package/dist/unstable/cluster/ClusterCron.d.ts +1 -1
  441. package/dist/unstable/cluster/ClusterCron.d.ts.map +1 -1
  442. package/dist/unstable/cluster/ClusterCron.js +1 -1
  443. package/dist/unstable/cluster/ClusterCron.js.map +1 -1
  444. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  445. package/dist/unstable/cluster/ClusterWorkflowEngine.js +4 -3
  446. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  447. package/dist/unstable/cluster/Entity.d.ts +7 -6
  448. package/dist/unstable/cluster/Entity.d.ts.map +1 -1
  449. package/dist/unstable/cluster/Entity.js.map +1 -1
  450. package/dist/unstable/cluster/EntityResource.d.ts +2 -2
  451. package/dist/unstable/cluster/EntityResource.d.ts.map +1 -1
  452. package/dist/unstable/cluster/Envelope.d.ts +1 -1
  453. package/dist/unstable/cluster/K8sHttpClient.d.ts +1 -1
  454. package/dist/unstable/cluster/K8sHttpClient.js +4 -4
  455. package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
  456. package/dist/unstable/cluster/Message.d.ts +10 -10
  457. package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
  458. package/dist/unstable/cluster/MessageStorage.js +2 -1
  459. package/dist/unstable/cluster/MessageStorage.js.map +1 -1
  460. package/dist/unstable/cluster/Reply.d.ts +6 -6
  461. package/dist/unstable/cluster/Runner.d.ts +1 -1
  462. package/dist/unstable/cluster/Runners.d.ts.map +1 -1
  463. package/dist/unstable/cluster/Runners.js +4 -3
  464. package/dist/unstable/cluster/Runners.js.map +1 -1
  465. package/dist/unstable/cluster/Sharding.d.ts +2 -2
  466. package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
  467. package/dist/unstable/cluster/Sharding.js +9 -7
  468. package/dist/unstable/cluster/Sharding.js.map +1 -1
  469. package/dist/unstable/cluster/ShardingConfig.d.ts +21 -21
  470. package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
  471. package/dist/unstable/cluster/ShardingConfig.js +20 -20
  472. package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
  473. package/dist/unstable/cluster/SqlRunnerStorage.js +1 -1
  474. package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
  475. package/dist/unstable/cluster/internal/entityManager.js +5 -4
  476. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  477. package/dist/unstable/cluster/internal/entityReaper.js +2 -1
  478. package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
  479. package/dist/unstable/cluster/internal/resourceRef.js +2 -1
  480. package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
  481. package/dist/unstable/devtools/DevToolsSchema.d.ts +36 -36
  482. package/dist/unstable/encoding/Msgpack.d.ts +1 -1
  483. package/dist/unstable/encoding/Ndjson.d.ts +1 -1
  484. package/dist/unstable/encoding/Sse.d.ts +4 -4
  485. package/dist/unstable/encoding/Sse.d.ts.map +1 -1
  486. package/dist/unstable/encoding/Sse.js +1 -1
  487. package/dist/unstable/encoding/Sse.js.map +1 -1
  488. package/dist/unstable/eventlog/EventJournal.d.ts +2 -2
  489. package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
  490. package/dist/unstable/eventlog/EventLog.js +2 -1
  491. package/dist/unstable/eventlog/EventLog.js.map +1 -1
  492. package/dist/unstable/eventlog/EventLogRemote.d.ts +6 -6
  493. package/dist/unstable/http/Cookies.d.ts +47 -3
  494. package/dist/unstable/http/Cookies.d.ts.map +1 -1
  495. package/dist/unstable/http/Cookies.js +24 -2
  496. package/dist/unstable/http/Cookies.js.map +1 -1
  497. package/dist/unstable/http/Headers.d.ts +16 -0
  498. package/dist/unstable/http/Headers.d.ts.map +1 -1
  499. package/dist/unstable/http/Headers.js +38 -10
  500. package/dist/unstable/http/Headers.js.map +1 -1
  501. package/dist/unstable/http/HttpBody.d.ts +3 -3
  502. package/dist/unstable/http/HttpBody.d.ts.map +1 -1
  503. package/dist/unstable/http/HttpBody.js +6 -6
  504. package/dist/unstable/http/HttpBody.js.map +1 -1
  505. package/dist/unstable/http/HttpClient.d.ts +117 -15
  506. package/dist/unstable/http/HttpClient.d.ts.map +1 -1
  507. package/dist/unstable/http/HttpClient.js +189 -12
  508. package/dist/unstable/http/HttpClient.js.map +1 -1
  509. package/dist/unstable/http/HttpClientError.d.ts +7 -7
  510. package/dist/unstable/http/HttpClientRequest.d.ts +16 -11
  511. package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
  512. package/dist/unstable/http/HttpClientRequest.js +31 -20
  513. package/dist/unstable/http/HttpClientRequest.js.map +1 -1
  514. package/dist/unstable/http/HttpClientResponse.d.ts +2 -1
  515. package/dist/unstable/http/HttpClientResponse.d.ts.map +1 -1
  516. package/dist/unstable/http/HttpClientResponse.js +4 -0
  517. package/dist/unstable/http/HttpClientResponse.js.map +1 -1
  518. package/dist/unstable/http/HttpEffect.d.ts +7 -5
  519. package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
  520. package/dist/unstable/http/HttpEffect.js +46 -54
  521. package/dist/unstable/http/HttpEffect.js.map +1 -1
  522. package/dist/unstable/http/HttpMethod.d.ts +4 -4
  523. package/dist/unstable/http/HttpMethod.d.ts.map +1 -1
  524. package/dist/unstable/http/HttpMethod.js +3 -3
  525. package/dist/unstable/http/HttpMethod.js.map +1 -1
  526. package/dist/unstable/http/HttpMiddleware.d.ts +1 -6
  527. package/dist/unstable/http/HttpMiddleware.d.ts.map +1 -1
  528. package/dist/unstable/http/HttpMiddleware.js +8 -17
  529. package/dist/unstable/http/HttpMiddleware.js.map +1 -1
  530. package/dist/unstable/http/HttpServerError.d.ts +20 -33
  531. package/dist/unstable/http/HttpServerError.d.ts.map +1 -1
  532. package/dist/unstable/http/HttpServerError.js +37 -44
  533. package/dist/unstable/http/HttpServerError.js.map +1 -1
  534. package/dist/unstable/http/HttpServerRequest.d.ts +12 -1
  535. package/dist/unstable/http/HttpServerRequest.d.ts.map +1 -1
  536. package/dist/unstable/http/HttpServerRequest.js +291 -1
  537. package/dist/unstable/http/HttpServerRequest.js.map +1 -1
  538. package/dist/unstable/http/HttpServerRespondable.d.ts +2 -2
  539. package/dist/unstable/http/HttpServerRespondable.d.ts.map +1 -1
  540. package/dist/unstable/http/HttpServerRespondable.js +5 -5
  541. package/dist/unstable/http/HttpServerRespondable.js.map +1 -1
  542. package/dist/unstable/http/HttpServerResponse.d.ts +50 -3
  543. package/dist/unstable/http/HttpServerResponse.d.ts.map +1 -1
  544. package/dist/unstable/http/HttpServerResponse.js +234 -1
  545. package/dist/unstable/http/HttpServerResponse.js.map +1 -1
  546. package/dist/unstable/http/HttpStaticServer.d.ts +69 -0
  547. package/dist/unstable/http/HttpStaticServer.d.ts.map +1 -0
  548. package/dist/unstable/http/HttpStaticServer.js +353 -0
  549. package/dist/unstable/http/HttpStaticServer.js.map +1 -0
  550. package/dist/unstable/http/Multipart.d.ts +3 -3
  551. package/dist/unstable/http/UrlParams.d.ts +14 -6
  552. package/dist/unstable/http/UrlParams.d.ts.map +1 -1
  553. package/dist/unstable/http/UrlParams.js +1 -1
  554. package/dist/unstable/http/UrlParams.js.map +1 -1
  555. package/dist/unstable/http/index.d.ts +4 -0
  556. package/dist/unstable/http/index.d.ts.map +1 -1
  557. package/dist/unstable/http/index.js +4 -0
  558. package/dist/unstable/http/index.js.map +1 -1
  559. package/dist/unstable/http/internal/preResponseHandler.d.ts +2 -0
  560. package/dist/unstable/http/internal/preResponseHandler.d.ts.map +1 -0
  561. package/dist/unstable/http/internal/preResponseHandler.js +10 -0
  562. package/dist/unstable/http/internal/preResponseHandler.js.map +1 -0
  563. package/dist/unstable/httpapi/HttpApi.d.ts +4 -4
  564. package/dist/unstable/httpapi/HttpApi.d.ts.map +1 -1
  565. package/dist/unstable/httpapi/HttpApi.js.map +1 -1
  566. package/dist/unstable/httpapi/HttpApiBuilder.d.ts +11 -5
  567. package/dist/unstable/httpapi/HttpApiBuilder.d.ts.map +1 -1
  568. package/dist/unstable/httpapi/HttpApiBuilder.js +28 -18
  569. package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
  570. package/dist/unstable/httpapi/HttpApiClient.d.ts +66 -6
  571. package/dist/unstable/httpapi/HttpApiClient.d.ts.map +1 -1
  572. package/dist/unstable/httpapi/HttpApiClient.js +40 -3
  573. package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
  574. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +41 -54
  575. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts.map +1 -1
  576. package/dist/unstable/httpapi/HttpApiEndpoint.js +17 -26
  577. package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
  578. package/dist/unstable/httpapi/HttpApiError.d.ts +16 -14
  579. package/dist/unstable/httpapi/HttpApiError.d.ts.map +1 -1
  580. package/dist/unstable/httpapi/HttpApiError.js +44 -29
  581. package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
  582. package/dist/unstable/httpapi/HttpApiGroup.d.ts +4 -3
  583. package/dist/unstable/httpapi/HttpApiGroup.d.ts.map +1 -1
  584. package/dist/unstable/httpapi/HttpApiGroup.js.map +1 -1
  585. package/dist/unstable/httpapi/HttpApiMiddleware.d.ts +4 -4
  586. package/dist/unstable/httpapi/HttpApiMiddleware.d.ts.map +1 -1
  587. package/dist/unstable/httpapi/HttpApiMiddleware.js.map +1 -1
  588. package/dist/unstable/httpapi/HttpApiScalar.d.ts +6 -0
  589. package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
  590. package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
  591. package/dist/unstable/httpapi/HttpApiSecurity.d.ts +2 -2
  592. package/dist/unstable/httpapi/HttpApiSecurity.d.ts.map +1 -1
  593. package/dist/unstable/httpapi/HttpApiSecurity.js.map +1 -1
  594. package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
  595. package/dist/unstable/httpapi/OpenApi.js +32 -21
  596. package/dist/unstable/httpapi/OpenApi.js.map +1 -1
  597. package/dist/unstable/observability/Otlp.d.ts +12 -12
  598. package/dist/unstable/observability/Otlp.d.ts.map +1 -1
  599. package/dist/unstable/observability/OtlpExporter.d.ts +2 -2
  600. package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
  601. package/dist/unstable/observability/OtlpExporter.js +1 -1
  602. package/dist/unstable/observability/OtlpExporter.js.map +1 -1
  603. package/dist/unstable/observability/OtlpLogger.d.ts +4 -4
  604. package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
  605. package/dist/unstable/observability/OtlpLogger.js +7 -4
  606. package/dist/unstable/observability/OtlpLogger.js.map +1 -1
  607. package/dist/unstable/observability/OtlpMetrics.d.ts +4 -4
  608. package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
  609. package/dist/unstable/observability/OtlpTracer.d.ts +4 -4
  610. package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
  611. package/dist/unstable/persistence/KeyValueStore.d.ts +1 -1
  612. package/dist/unstable/persistence/KeyValueStore.js +6 -6
  613. package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
  614. package/dist/unstable/persistence/Persistable.d.ts +2 -2
  615. package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
  616. package/dist/unstable/persistence/PersistedCache.d.ts +6 -5
  617. package/dist/unstable/persistence/PersistedCache.d.ts.map +1 -1
  618. package/dist/unstable/persistence/PersistedCache.js +2 -1
  619. package/dist/unstable/persistence/PersistedCache.js.map +1 -1
  620. package/dist/unstable/persistence/PersistedQueue.d.ts +12 -12
  621. package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
  622. package/dist/unstable/persistence/PersistedQueue.js +12 -11
  623. package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
  624. package/dist/unstable/persistence/Persistence.d.ts +1 -1
  625. package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
  626. package/dist/unstable/persistence/Persistence.js +2 -2
  627. package/dist/unstable/persistence/Persistence.js.map +1 -1
  628. package/dist/unstable/persistence/RateLimiter.d.ts +3 -3
  629. package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
  630. package/dist/unstable/persistence/RateLimiter.js +1 -1
  631. package/dist/unstable/persistence/RateLimiter.js.map +1 -1
  632. package/dist/unstable/process/ChildProcess.d.ts +5 -128
  633. package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
  634. package/dist/unstable/process/ChildProcess.js +1 -65
  635. package/dist/unstable/process/ChildProcess.js.map +1 -1
  636. package/dist/unstable/process/ChildProcessSpawner.d.ts +45 -7
  637. package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
  638. package/dist/unstable/process/ChildProcessSpawner.js +21 -1
  639. package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
  640. package/dist/unstable/reactivity/Atom.d.ts +73 -12
  641. package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
  642. package/dist/unstable/reactivity/Atom.js +107 -20
  643. package/dist/unstable/reactivity/Atom.js.map +1 -1
  644. package/dist/unstable/reactivity/AtomHttpApi.d.ts +10 -12
  645. package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
  646. package/dist/unstable/reactivity/AtomHttpApi.js +42 -12
  647. package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
  648. package/dist/unstable/reactivity/AtomRegistry.d.ts +6 -0
  649. package/dist/unstable/reactivity/AtomRegistry.d.ts.map +1 -1
  650. package/dist/unstable/reactivity/AtomRegistry.js +50 -9
  651. package/dist/unstable/reactivity/AtomRegistry.js.map +1 -1
  652. package/dist/unstable/reactivity/AtomRpc.d.ts +9 -9
  653. package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
  654. package/dist/unstable/reactivity/AtomRpc.js +47 -21
  655. package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
  656. package/dist/unstable/reactivity/Hydration.d.ts +39 -0
  657. package/dist/unstable/reactivity/Hydration.d.ts.map +1 -0
  658. package/dist/unstable/reactivity/Hydration.js +76 -0
  659. package/dist/unstable/reactivity/Hydration.js.map +1 -0
  660. package/dist/unstable/reactivity/index.d.ts +4 -0
  661. package/dist/unstable/reactivity/index.d.ts.map +1 -1
  662. package/dist/unstable/reactivity/index.js +4 -0
  663. package/dist/unstable/reactivity/index.js.map +1 -1
  664. package/dist/unstable/rpc/Rpc.d.ts +5 -5
  665. package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
  666. package/dist/unstable/rpc/Rpc.js.map +1 -1
  667. package/dist/unstable/rpc/RpcClient.d.ts +5 -26
  668. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  669. package/dist/unstable/rpc/RpcClient.js +6 -13
  670. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  671. package/dist/unstable/rpc/RpcGroup.d.ts +2 -2
  672. package/dist/unstable/rpc/RpcGroup.d.ts.map +1 -1
  673. package/dist/unstable/rpc/RpcGroup.js.map +1 -1
  674. package/dist/unstable/rpc/RpcMiddleware.d.ts +8 -8
  675. package/dist/unstable/rpc/RpcMiddleware.d.ts.map +1 -1
  676. package/dist/unstable/rpc/RpcMiddleware.js.map +1 -1
  677. package/dist/unstable/rpc/RpcSchema.d.ts +13 -0
  678. package/dist/unstable/rpc/RpcSchema.d.ts.map +1 -1
  679. package/dist/unstable/rpc/RpcSchema.js +14 -0
  680. package/dist/unstable/rpc/RpcSchema.js.map +1 -1
  681. package/dist/unstable/rpc/RpcSerialization.d.ts.map +1 -1
  682. package/dist/unstable/rpc/RpcSerialization.js +34 -9
  683. package/dist/unstable/rpc/RpcSerialization.js.map +1 -1
  684. package/dist/unstable/rpc/RpcServer.d.ts +5 -9
  685. package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
  686. package/dist/unstable/rpc/RpcServer.js +17 -17
  687. package/dist/unstable/rpc/RpcServer.js.map +1 -1
  688. package/dist/unstable/rpc/Utils.d.ts.map +1 -1
  689. package/dist/unstable/rpc/Utils.js +3 -2
  690. package/dist/unstable/rpc/Utils.js.map +1 -1
  691. package/dist/unstable/schema/Model.d.ts +22 -1
  692. package/dist/unstable/schema/Model.d.ts.map +1 -1
  693. package/dist/unstable/schema/Model.js +15 -0
  694. package/dist/unstable/schema/Model.js.map +1 -1
  695. package/dist/unstable/schema/VariantSchema.d.ts +5 -5
  696. package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
  697. package/dist/unstable/schema/VariantSchema.js +6 -6
  698. package/dist/unstable/schema/VariantSchema.js.map +1 -1
  699. package/dist/unstable/socket/Socket.d.ts +4 -4
  700. package/dist/unstable/socket/Socket.d.ts.map +1 -1
  701. package/dist/unstable/socket/Socket.js +6 -5
  702. package/dist/unstable/socket/Socket.js.map +1 -1
  703. package/dist/unstable/socket/SocketServer.d.ts +3 -3
  704. package/dist/unstable/sql/Migrator.d.ts +1 -1
  705. package/dist/unstable/sql/SqlClient.d.ts +1 -1
  706. package/dist/unstable/sql/SqlClient.d.ts.map +1 -1
  707. package/dist/unstable/sql/SqlError.d.ts +14 -14
  708. package/dist/unstable/sql/SqlError.d.ts.map +1 -1
  709. package/dist/unstable/sql/SqlError.js +9 -3
  710. package/dist/unstable/sql/SqlError.js.map +1 -1
  711. package/dist/unstable/sql/SqlModel.d.ts +2 -2
  712. package/dist/unstable/sql/SqlModel.d.ts.map +1 -1
  713. package/dist/unstable/sql/SqlModel.js +3 -3
  714. package/dist/unstable/sql/SqlModel.js.map +1 -1
  715. package/dist/unstable/sql/SqlResolver.d.ts.map +1 -1
  716. package/dist/unstable/sql/SqlResolver.js +17 -8
  717. package/dist/unstable/sql/SqlResolver.js.map +1 -1
  718. package/dist/unstable/sql/SqlSchema.d.ts +17 -6
  719. package/dist/unstable/sql/SqlSchema.d.ts.map +1 -1
  720. package/dist/unstable/sql/SqlSchema.js +17 -7
  721. package/dist/unstable/sql/SqlSchema.js.map +1 -1
  722. package/dist/unstable/sql/Statement.js +0 -1
  723. package/dist/unstable/sql/Statement.js.map +1 -1
  724. package/dist/unstable/workers/Worker.d.ts.map +1 -1
  725. package/dist/unstable/workers/Worker.js +2 -1
  726. package/dist/unstable/workers/Worker.js.map +1 -1
  727. package/dist/unstable/workflow/DurableClock.d.ts +3 -3
  728. package/dist/unstable/workflow/DurableClock.d.ts.map +1 -1
  729. package/dist/unstable/workflow/DurableClock.js +3 -3
  730. package/dist/unstable/workflow/DurableClock.js.map +1 -1
  731. package/dist/unstable/workflow/DurableDeferred.js +2 -2
  732. package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
  733. package/dist/unstable/workflow/Workflow.d.ts +3 -3
  734. package/dist/unstable/workflow/Workflow.d.ts.map +1 -1
  735. package/dist/unstable/workflow/Workflow.js +1 -1
  736. package/dist/unstable/workflow/Workflow.js.map +1 -1
  737. package/dist/unstable/workflow/WorkflowEngine.d.ts +12 -1
  738. package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
  739. package/dist/unstable/workflow/WorkflowEngine.js +137 -1
  740. package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
  741. package/package.json +2 -2
  742. package/src/Array.ts +192 -342
  743. package/src/Brand.ts +1 -1
  744. package/src/Cache.ts +9 -8
  745. package/src/Cause.ts +2 -2
  746. package/src/Channel.ts +554 -138
  747. package/src/Chunk.ts +81 -268
  748. package/src/Combiner.ts +280 -13
  749. package/src/Config.ts +186 -24
  750. package/src/Data.ts +539 -376
  751. package/src/DateTime.ts +24 -164
  752. package/src/Duration.ts +13 -13
  753. package/src/Effect.ts +1477 -1126
  754. package/src/Encoding.ts +879 -0
  755. package/src/Equal.ts +278 -111
  756. package/src/ErrorReporter.ts +457 -0
  757. package/src/Exit.ts +24 -12
  758. package/src/Fiber.ts +10 -2
  759. package/src/FileSystem.ts +7 -8
  760. package/src/Filter.ts +52 -63
  761. package/src/Formatter.ts +253 -51
  762. package/src/Function.ts +2 -10
  763. package/src/Graph.ts +24 -11
  764. package/src/HashMap.ts +15 -14
  765. package/src/Iterable.ts +104 -50
  766. package/src/JsonSchema.ts +383 -10
  767. package/src/Latch.ts +112 -0
  768. package/src/Layer.ts +123 -132
  769. package/src/LayerMap.ts +9 -9
  770. package/src/LogLevel.ts +37 -0
  771. package/src/Logger.ts +33 -100
  772. package/src/ManagedRuntime.ts +2 -2
  773. package/src/Metric.ts +6 -8
  774. package/src/Newtype.ts +308 -0
  775. package/src/Optic.ts +948 -19
  776. package/src/Option.ts +32 -24
  777. package/src/Pipeable.ts +32 -1
  778. package/src/PlatformError.ts +5 -5
  779. package/src/Pool.ts +13 -11
  780. package/src/PubSub.ts +10 -9
  781. package/src/Pull.ts +1 -1
  782. package/src/Queue.ts +0 -1
  783. package/src/Random.ts +51 -14
  784. package/src/RcMap.ts +5 -5
  785. package/src/RcRef.ts +1 -1
  786. package/src/Record.ts +42 -152
  787. package/src/Reducer.ts +166 -7
  788. package/src/References.ts +10 -5
  789. package/src/Request.ts +3 -2
  790. package/src/RequestResolver.ts +29 -49
  791. package/src/Result.ts +2 -4
  792. package/src/Runtime.ts +102 -6
  793. package/src/Schedule.ts +462 -242
  794. package/src/Scheduler.ts +12 -0
  795. package/src/Schema.ts +796 -194
  796. package/src/SchemaAST.ts +164 -31
  797. package/src/SchemaGetter.ts +15 -17
  798. package/src/SchemaParser.ts +11 -0
  799. package/src/SchemaRepresentation.ts +49 -24
  800. package/src/SchemaTransformation.ts +189 -4
  801. package/src/ScopedCache.ts +3 -3
  802. package/src/Semaphore.ts +356 -0
  803. package/src/ServiceMap.ts +50 -40
  804. package/src/Sink.ts +78 -26
  805. package/src/Stdio.ts +27 -4
  806. package/src/Stream.ts +586 -608
  807. package/src/Struct.ts +26 -0
  808. package/src/SubscriptionRef.ts +3 -2
  809. package/src/SynchronizedRef.ts +3 -2
  810. package/src/Trie.ts +18 -17
  811. package/src/TxChunk.ts +72 -53
  812. package/src/TxDeferred.ts +394 -0
  813. package/src/TxHashMap.ts +332 -285
  814. package/src/TxHashSet.ts +111 -116
  815. package/src/TxPriorityQueue.ts +767 -0
  816. package/src/TxPubSub.ts +789 -0
  817. package/src/TxQueue.ts +241 -251
  818. package/src/TxReentrantLock.ts +753 -0
  819. package/src/TxRef.ts +50 -38
  820. package/src/TxSemaphore.ts +29 -32
  821. package/src/TxSubscriptionRef.ts +639 -0
  822. package/src/Types.ts +73 -19
  823. package/src/Utils.ts +137 -111
  824. package/src/index.ts +728 -24
  825. package/src/internal/core.ts +12 -5
  826. package/src/internal/dateTime.ts +9 -30
  827. package/src/internal/effect.ts +774 -301
  828. package/src/internal/hashMap.ts +8 -7
  829. package/src/internal/random.ts +20 -0
  830. package/src/internal/rcRef.ts +4 -3
  831. package/src/internal/request.ts +2 -2
  832. package/src/internal/schema/annotations.ts +2 -0
  833. package/src/internal/schema/representation.ts +45 -94
  834. package/src/internal/schema/schema.ts +1 -0
  835. package/src/internal/schema/to-codec.ts +7 -17
  836. package/src/internal/trie.ts +15 -9
  837. package/src/testing/TestClock.ts +13 -11
  838. package/src/testing/TestSchema.ts +332 -35
  839. package/src/testing/index.ts +64 -1
  840. package/src/unstable/ai/AiError.ts +105 -48
  841. package/src/unstable/ai/Chat.ts +47 -61
  842. package/src/unstable/ai/LanguageModel.ts +153 -68
  843. package/src/unstable/ai/McpSchema.ts +73 -13
  844. package/src/unstable/ai/McpServer.ts +271 -61
  845. package/src/unstable/ai/Model.ts +40 -9
  846. package/src/unstable/ai/Prompt.ts +37 -37
  847. package/src/unstable/ai/Response.ts +25 -25
  848. package/src/unstable/ai/Tool.ts +20 -14
  849. package/src/unstable/ai/Toolkit.ts +5 -14
  850. package/src/unstable/ai/index.ts +1 -1
  851. package/src/unstable/ai/internal/codec-transformer.ts +0 -7
  852. package/src/unstable/cli/CliError.ts +47 -59
  853. package/src/unstable/cli/CliOutput.ts +75 -6
  854. package/src/unstable/cli/Command.ts +796 -187
  855. package/src/unstable/cli/GlobalFlag.ts +243 -0
  856. package/src/unstable/cli/HelpDoc.ts +80 -2
  857. package/src/unstable/cli/Primitive.ts +1 -1
  858. package/src/unstable/cli/Prompt.ts +31 -9
  859. package/src/unstable/cli/index.ts +5 -0
  860. package/src/unstable/cli/internal/command.ts +109 -63
  861. package/src/unstable/cli/internal/completions/CommandDescriptor.ts +7 -2
  862. package/src/unstable/cli/internal/config.ts +49 -0
  863. package/src/unstable/cli/internal/help.ts +171 -0
  864. package/src/unstable/cli/internal/parser.ts +66 -61
  865. package/src/unstable/cluster/ClusterCron.ts +2 -2
  866. package/src/unstable/cluster/ClusterWorkflowEngine.ts +5 -4
  867. package/src/unstable/cluster/Entity.ts +11 -10
  868. package/src/unstable/cluster/EntityResource.ts +4 -4
  869. package/src/unstable/cluster/Envelope.ts +1 -1
  870. package/src/unstable/cluster/K8sHttpClient.ts +5 -5
  871. package/src/unstable/cluster/MessageStorage.ts +3 -5
  872. package/src/unstable/cluster/Runners.ts +6 -5
  873. package/src/unstable/cluster/Sharding.ts +12 -10
  874. package/src/unstable/cluster/ShardingConfig.ts +30 -31
  875. package/src/unstable/cluster/SqlRunnerStorage.ts +1 -1
  876. package/src/unstable/cluster/internal/entityManager.ts +9 -8
  877. package/src/unstable/cluster/internal/entityReaper.ts +2 -1
  878. package/src/unstable/cluster/internal/resourceRef.ts +2 -1
  879. package/src/unstable/encoding/Sse.ts +3 -5
  880. package/src/unstable/eventlog/EventLog.ts +2 -1
  881. package/src/unstable/http/Cookies.ts +87 -3
  882. package/src/unstable/http/Headers.ts +62 -13
  883. package/src/unstable/http/HttpBody.ts +6 -6
  884. package/src/unstable/http/HttpClient.ts +374 -33
  885. package/src/unstable/http/HttpClientRequest.ts +38 -30
  886. package/src/unstable/http/HttpClientResponse.ts +7 -2
  887. package/src/unstable/http/HttpEffect.ts +54 -68
  888. package/src/unstable/http/HttpMethod.ts +16 -4
  889. package/src/unstable/http/HttpMiddleware.ts +9 -24
  890. package/src/unstable/http/HttpServerError.ts +42 -45
  891. package/src/unstable/http/HttpServerRequest.ts +389 -2
  892. package/src/unstable/http/HttpServerRespondable.ts +6 -6
  893. package/src/unstable/http/HttpServerResponse.ts +337 -4
  894. package/src/unstable/http/HttpStaticServer.ts +456 -0
  895. package/src/unstable/http/Multipart.ts +2 -2
  896. package/src/unstable/http/UrlParams.ts +20 -5
  897. package/src/unstable/http/index.ts +5 -0
  898. package/src/unstable/http/internal/preResponseHandler.ts +15 -0
  899. package/src/unstable/httpapi/HttpApi.ts +6 -6
  900. package/src/unstable/httpapi/HttpApiBuilder.ts +81 -28
  901. package/src/unstable/httpapi/HttpApiClient.ts +100 -11
  902. package/src/unstable/httpapi/HttpApiEndpoint.ts +71 -87
  903. package/src/unstable/httpapi/HttpApiError.ts +51 -28
  904. package/src/unstable/httpapi/HttpApiGroup.ts +7 -6
  905. package/src/unstable/httpapi/HttpApiMiddleware.ts +4 -4
  906. package/src/unstable/httpapi/HttpApiScalar.ts +6 -0
  907. package/src/unstable/httpapi/HttpApiSecurity.ts +3 -3
  908. package/src/unstable/httpapi/OpenApi.ts +41 -23
  909. package/src/unstable/observability/Otlp.ts +12 -12
  910. package/src/unstable/observability/OtlpExporter.ts +3 -3
  911. package/src/unstable/observability/OtlpLogger.ts +13 -9
  912. package/src/unstable/observability/OtlpMetrics.ts +4 -4
  913. package/src/unstable/observability/OtlpTracer.ts +4 -4
  914. package/src/unstable/persistence/KeyValueStore.ts +6 -6
  915. package/src/unstable/persistence/Persistable.ts +2 -2
  916. package/src/unstable/persistence/PersistedCache.ts +20 -9
  917. package/src/unstable/persistence/PersistedQueue.ts +25 -24
  918. package/src/unstable/persistence/Persistence.ts +3 -3
  919. package/src/unstable/persistence/RateLimiter.ts +4 -4
  920. package/src/unstable/process/ChildProcess.ts +6 -208
  921. package/src/unstable/process/ChildProcessSpawner.ts +75 -14
  922. package/src/unstable/reactivity/Atom.ts +211 -50
  923. package/src/unstable/reactivity/AtomHttpApi.ts +66 -31
  924. package/src/unstable/reactivity/AtomRegistry.ts +61 -9
  925. package/src/unstable/reactivity/AtomRpc.ts +51 -20
  926. package/src/unstable/reactivity/Hydration.ts +112 -0
  927. package/src/unstable/reactivity/index.ts +5 -0
  928. package/src/unstable/rpc/Rpc.ts +7 -9
  929. package/src/unstable/rpc/RpcClient.ts +12 -54
  930. package/src/unstable/rpc/RpcGroup.ts +4 -4
  931. package/src/unstable/rpc/RpcMiddleware.ts +15 -9
  932. package/src/unstable/rpc/RpcSchema.ts +17 -0
  933. package/src/unstable/rpc/RpcSerialization.ts +44 -9
  934. package/src/unstable/rpc/RpcServer.ts +28 -32
  935. package/src/unstable/rpc/Utils.ts +3 -2
  936. package/src/unstable/schema/Model.ts +31 -0
  937. package/src/unstable/schema/VariantSchema.ts +9 -9
  938. package/src/unstable/socket/Socket.ts +16 -17
  939. package/src/unstable/sql/SqlClient.ts +1 -1
  940. package/src/unstable/sql/SqlError.ts +11 -9
  941. package/src/unstable/sql/SqlModel.ts +5 -5
  942. package/src/unstable/sql/SqlResolver.ts +17 -7
  943. package/src/unstable/sql/SqlSchema.ts +42 -26
  944. package/src/unstable/sql/Statement.ts +0 -1
  945. package/src/unstable/workers/Worker.ts +2 -1
  946. package/src/unstable/workflow/DurableClock.ts +8 -8
  947. package/src/unstable/workflow/DurableDeferred.ts +2 -2
  948. package/src/unstable/workflow/Workflow.ts +6 -2
  949. package/src/unstable/workflow/WorkflowEngine.ts +185 -2
  950. package/dist/PartitionedSemaphore.d.ts +0 -52
  951. package/dist/PartitionedSemaphore.d.ts.map +0 -1
  952. package/dist/PartitionedSemaphore.js.map +0 -1
  953. package/dist/encoding/Base64.d.ts +0 -67
  954. package/dist/encoding/Base64.d.ts.map +0 -1
  955. package/dist/encoding/Base64.js +0 -146
  956. package/dist/encoding/Base64.js.map +0 -1
  957. package/dist/encoding/Base64Url.d.ts +0 -60
  958. package/dist/encoding/Base64Url.d.ts.map +0 -1
  959. package/dist/encoding/Base64Url.js +0 -89
  960. package/dist/encoding/Base64Url.js.map +0 -1
  961. package/dist/encoding/EncodingError.d.ts +0 -31
  962. package/dist/encoding/EncodingError.d.ts.map +0 -1
  963. package/dist/encoding/EncodingError.js +0 -22
  964. package/dist/encoding/EncodingError.js.map +0 -1
  965. package/dist/encoding/Hex.d.ts +0 -61
  966. package/dist/encoding/Hex.d.ts.map +0 -1
  967. package/dist/encoding/Hex.js +0 -115
  968. package/dist/encoding/Hex.js.map +0 -1
  969. package/dist/encoding/index.d.ts +0 -26
  970. package/dist/encoding/index.d.ts.map +0 -1
  971. package/dist/encoding/index.js +0 -27
  972. package/dist/encoding/index.js.map +0 -1
  973. package/dist/unstable/cli/internal/builtInFlags.d.ts +0 -7
  974. package/dist/unstable/cli/internal/builtInFlags.d.ts.map +0 -1
  975. package/dist/unstable/cli/internal/builtInFlags.js +0 -44
  976. package/dist/unstable/cli/internal/builtInFlags.js.map +0 -1
  977. package/src/PartitionedSemaphore.ts +0 -182
  978. package/src/encoding/Base64.ts +0 -366
  979. package/src/encoding/Base64Url.ts +0 -104
  980. package/src/encoding/EncodingError.ts +0 -35
  981. package/src/encoding/Hex.ts +0 -390
  982. package/src/encoding/index.ts +0 -31
  983. package/src/unstable/cli/internal/builtInFlags.ts +0 -78
@@ -5,6 +5,7 @@ import type * as Console from "../Console.ts"
5
5
  import * as Duration from "../Duration.ts"
6
6
  import type * as Effect from "../Effect.ts"
7
7
  import * as Equal from "../Equal.ts"
8
+ import type { ErrorReporter } from "../ErrorReporter.ts"
8
9
  import type * as Exit from "../Exit.ts"
9
10
  import type * as Fiber from "../Fiber.ts"
10
11
  import * as Filter from "../Filter.ts"
@@ -14,6 +15,7 @@ import { constant, constFalse, constTrue, constUndefined, constVoid, dual, ident
14
15
  import * as Hash from "../Hash.ts"
15
16
  import { toJson, toStringUnknown } from "../Inspectable.ts"
16
17
  import * as Iterable from "../Iterable.ts"
18
+ import type * as _Latch from "../Latch.ts"
17
19
  import type * as Logger from "../Logger.ts"
18
20
  import type * as LogLevel from "../LogLevel.ts"
19
21
  import type * as Metric from "../Metric.ts"
@@ -48,7 +50,9 @@ import type {
48
50
  ExcludeTag,
49
51
  ExtractReason,
50
52
  ExtractTag,
53
+ NarrowReason,
51
54
  NoInfer,
55
+ OmitReason,
52
56
  ReasonOf,
53
57
  ReasonTags,
54
58
  Simplify,
@@ -212,7 +216,8 @@ export const causeInterruptors = <E>(self: Cause.Cause<E>): ReadonlySet<number>
212
216
  const emptySet = new Set<number>()
213
217
 
214
218
  /** @internal */
215
- export const hasInterruptsOnly = <E>(self: Cause.Cause<E>): boolean => self.reasons.every(isInterruptReason)
219
+ export const hasInterruptsOnly = <E>(self: Cause.Cause<E>): boolean =>
220
+ self.reasons.length > 0 && self.reasons.every(isInterruptReason)
216
221
 
217
222
  /** @internal */
218
223
  export const reasonAnnotations = <E>(
@@ -340,7 +345,8 @@ export const causePrettyErrors = <E>(self: Cause.Cause<E>): Array<Error> => {
340
345
  return errors
341
346
  }
342
347
 
343
- const causePrettyError = (
348
+ /** @internal */
349
+ export const causePrettyError = (
344
350
  original: Record<string, unknown> | Error,
345
351
  annotations?: ReadonlyMap<string, unknown>
346
352
  ): Error => {
@@ -488,24 +494,6 @@ const fiberIdStore = { id: 0 }
488
494
  /** @internal */
489
495
  export const getCurrentFiber = (): Fiber.Fiber<any, any> | undefined => (globalThis as any)[currentFiberTypeId]
490
496
 
491
- const keepAlive = (() => {
492
- let count = 0
493
- let running: ReturnType<typeof globalThis.setInterval> | undefined = undefined
494
- return ({
495
- increment() {
496
- count++
497
- running ??= globalThis.setInterval(constVoid, 2_147_483_647)
498
- },
499
- decrement() {
500
- count--
501
- if (count === 0 && running !== undefined) {
502
- globalThis.clearInterval(running)
503
- running = undefined
504
- }
505
- }
506
- })
507
- })()
508
-
509
497
  /** @internal */
510
498
  export class FiberImpl<A = any, E = any> implements Fiber.Fiber<A, E> {
511
499
  constructor(
@@ -550,6 +538,7 @@ export class FiberImpl<A = any, E = any> implements Fiber.Fiber<A, E> {
550
538
  currentStackFrame: StackFrame | undefined
551
539
  runtimeMetrics: Metric.FiberRuntimeMetricsService | undefined
552
540
  maxOpsBeforeYield!: number
541
+ currentPreventYield!: boolean
553
542
 
554
543
  getRef<X>(ref: ServiceMap.Reference<X>): X {
555
544
  return ServiceMap.getReferenceUnsafe(this.services, ref)
@@ -628,6 +617,7 @@ export class FiberImpl<A = any, E = any> implements Fiber.Fiber<A, E> {
628
617
  this.currentOpCount++
629
618
  if (
630
619
  !yielding &&
620
+ !this.currentPreventYield &&
631
621
  this.currentScheduler.shouldYield(this as any)
632
622
  ) {
633
623
  yielding = true
@@ -691,6 +681,7 @@ export class FiberImpl<A = any, E = any> implements Fiber.Fiber<A, E> {
691
681
  this.minimumLogLevel = this.getRef(MinimumLogLevel)
692
682
  this.currentStackFrame = services.mapUnsafe.get(CurrentStackFrame.key)
693
683
  this.maxOpsBeforeYield = this.getRef(Scheduler.MaxOpsBeforeYield)
684
+ this.currentPreventYield = this.getRef(Scheduler.PreventSchedulerYield)
694
685
  this.runtimeMetrics = services.mapUnsafe.get(InternalMetric.FiberRuntimeMetricsKey)
695
686
  const currentTracer = services.mapUnsafe.get(Tracer.TracerKey)
696
687
  this.currentTracerContext = currentTracer ? currentTracer["context"] : undefined
@@ -784,6 +775,7 @@ export const fiberJoinAll = <A extends Iterable<Fiber.Fiber<any, any>>>(self: A)
784
775
  > =>
785
776
  callback((resume) => {
786
777
  const fibers = Array.from(self)
778
+ if (fibers.length === 0) return resume(succeed(Arr.empty() as any))
787
779
  const out = new Array<any>(fibers.length) as Arr.NonEmptyArray<any>
788
780
  const cancels = Arr.empty<() => void>()
789
781
  let done = 0
@@ -812,13 +804,29 @@ export const fiberInterrupt = <A, E>(
812
804
 
813
805
  /** @internal */
814
806
  export const fiberInterruptAs: {
815
- (fiberId: number): <A, E>(self: Fiber.Fiber<A, E>) => Effect.Effect<void>
816
- <A, E>(self: Fiber.Fiber<A, E>, fiberId: number): Effect.Effect<void>
817
- } = dual(2, <A, E>(self: Fiber.Fiber<A, E>, fiberId: number): Effect.Effect<void> =>
818
- withFiber((parent) => {
819
- self.interruptUnsafe(fiberId, fiberStackAnnotations(parent))
820
- return asVoid(fiberAwait(self))
821
- }))
807
+ (
808
+ fiberId: number | undefined,
809
+ annotations?: ServiceMap.ServiceMap<never> | undefined
810
+ ): <A, E>(self: Fiber.Fiber<A, E>) => Effect.Effect<void>
811
+ <A, E>(
812
+ self: Fiber.Fiber<A, E>,
813
+ fiberId: number | undefined,
814
+ annotations?: ServiceMap.ServiceMap<never> | undefined
815
+ ): Effect.Effect<void>
816
+ } = dual(
817
+ (args) => hasProperty(args[0], FiberTypeId),
818
+ <A, E>(
819
+ self: Fiber.Fiber<A, E>,
820
+ fiberId: number | undefined,
821
+ annotations?: ServiceMap.ServiceMap<never> | undefined
822
+ ): Effect.Effect<void> =>
823
+ withFiber((parent) => {
824
+ let ann = fiberStackAnnotations(parent)
825
+ ann = ann && annotations ? ServiceMap.merge(ann, annotations) : ann ?? annotations
826
+ self.interruptUnsafe(fiberId, ann)
827
+ return asVoid(fiberAwait(self))
828
+ })
829
+ )
822
830
 
823
831
  /** @internal */
824
832
  export const fiberInterruptAll = <A extends Iterable<Fiber.Fiber<any, any>>>(
@@ -1018,10 +1026,8 @@ const callbackOptions: <A, E = never, R = never>(
1018
1026
  }, controller?.signal)
1019
1027
  if (yielded !== false) return yielded
1020
1028
  yielded = true
1021
- keepAlive.increment()
1022
1029
  fiber._yielded = () => {
1023
1030
  resumed = true
1024
- keepAlive.decrement()
1025
1031
  }
1026
1032
  if (controller === undefined && onCancel === undefined) {
1027
1033
  return Yield
@@ -1095,7 +1101,7 @@ export const fnUntraced: Effect.fn.Untraced = (
1095
1101
  body: Function,
1096
1102
  ...pipeables: Array<any>
1097
1103
  ) => {
1098
- return pipeables.length === 0
1104
+ const fn = pipeables.length === 0
1099
1105
  ? function(this: any) {
1100
1106
  return suspend(() => fromIteratorUnsafe(body.apply(this, arguments)))
1101
1107
  }
@@ -1106,8 +1112,15 @@ export const fnUntraced: Effect.fn.Untraced = (
1106
1112
  }
1107
1113
  return effect
1108
1114
  }
1115
+ return defineFunctionLength(body.length, fn)
1109
1116
  }
1110
1117
 
1118
+ const defineFunctionLength = <F extends Function>(length: number, fn: F): F =>
1119
+ Object.defineProperty(fn, "length", {
1120
+ value: length,
1121
+ configurable: true
1122
+ })
1123
+
1111
1124
  const fnStackCleaner = makeStackCleaner(2)
1112
1125
 
1113
1126
  /** @internal */
@@ -1148,7 +1161,7 @@ const makeFn = (
1148
1161
  ? bodyOrOptions
1149
1162
  : (pipeables.pop()!).bind(bodyOrOptions.self)
1150
1163
 
1151
- return function(this: any, ...args: Array<any>) {
1164
+ return defineFunctionLength(body.length, function(this: any, ...args: Array<any>) {
1152
1165
  let result = suspend(() => {
1153
1166
  const iter = body.apply(this, arguments)
1154
1167
  return isEffect(iter) ? iter : fromIteratorUnsafe(iter)
@@ -1178,7 +1191,7 @@ const makeFn = (
1178
1191
  }
1179
1192
  })
1180
1193
  )
1181
- }
1194
+ })
1182
1195
  }
1183
1196
 
1184
1197
  /** @internal */
@@ -1186,17 +1199,20 @@ export const fnUntracedEager: Effect.fn.Untraced = (
1186
1199
  body: Function,
1187
1200
  ...pipeables: Array<any>
1188
1201
  ) =>
1189
- pipeables.length === 0
1190
- ? function(this: any) {
1191
- return fromIteratorEagerUnsafe(() => body.apply(this, arguments))
1192
- }
1193
- : function(this: any) {
1194
- let effect = fromIteratorEagerUnsafe(() => body.apply(this, arguments))
1195
- for (const pipeable of pipeables) {
1196
- effect = pipeable(effect)
1202
+ defineFunctionLength(
1203
+ body.length,
1204
+ pipeables.length === 0
1205
+ ? function(this: any) {
1206
+ return fromIteratorEagerUnsafe(() => body.apply(this, arguments))
1197
1207
  }
1198
- return effect
1199
- }
1208
+ : function(this: any) {
1209
+ let effect = fromIteratorEagerUnsafe(() => body.apply(this, arguments))
1210
+ for (const pipeable of pipeables) {
1211
+ effect = pipeable(effect)
1212
+ }
1213
+ return effect
1214
+ }
1215
+ )
1200
1216
 
1201
1217
  const fromIteratorEagerUnsafe = (
1202
1218
  evaluate: () => Iterator<Effect.Yieldable<any, any, any, any>>
@@ -1945,17 +1961,17 @@ export const exitFindErrorOption = <A, E>(self: Exit.Exit<A, E>): Option.Option<
1945
1961
 
1946
1962
  /** @internal */
1947
1963
  export const service: {
1948
- <I, S>(service: ServiceMap.Service<I, S>): Effect.Effect<S, never, I>
1964
+ <I, S>(service: ServiceMap.Key<I, S>): Effect.Effect<S, never, I>
1949
1965
  } = fromYieldable as any
1950
1966
 
1951
1967
  /** @internal */
1952
1968
  export const serviceOption = <I, S>(
1953
- service: ServiceMap.Service<I, S>
1969
+ service: ServiceMap.Key<I, S>
1954
1970
  ): Effect.Effect<Option.Option<S>> => withFiber((fiber) => succeed(ServiceMap.getOption(fiber.services, service)))
1955
1971
 
1956
1972
  /** @internal */
1957
1973
  export const serviceOptional = <I, S>(
1958
- service: ServiceMap.Service<I, S>
1974
+ service: ServiceMap.Key<I, S>
1959
1975
  ): Effect.Effect<S, Cause.NoSuchElementError> =>
1960
1976
  withFiber((fiber) =>
1961
1977
  fiber.services.mapUnsafe.has(service.key)
@@ -1983,23 +1999,8 @@ export const updateServices: {
1983
1999
  const nextServices = f(prev)
1984
2000
  if (prev === nextServices) return self as any
1985
2001
  fiber.setServices(nextServices)
1986
- const newServices = new Map<string, unknown>()
1987
- for (const [key, value] of fiber.services.mapUnsafe) {
1988
- if (!prev.mapUnsafe.has(key) || value !== prev.mapUnsafe.get(key)) {
1989
- newServices.set(key, value)
1990
- }
1991
- }
1992
- return onExitPrimitive(self as any, () => {
1993
- const map = new Map(fiber.services.mapUnsafe)
1994
- for (const [key, value] of newServices) {
1995
- if (value !== map.get(key)) continue
1996
- if (prev.mapUnsafe.has(key)) {
1997
- map.set(key, prev.mapUnsafe.get(key))
1998
- } else {
1999
- map.delete(key)
2000
- }
2001
- }
2002
- fiber.setServices(ServiceMap.makeUnsafe(map))
2002
+ return onExitPrimitive(self, () => {
2003
+ fiber.setServices(prev)
2003
2004
  return undefined
2004
2005
  })
2005
2006
  })
@@ -2008,27 +2009,26 @@ export const updateServices: {
2008
2009
  /** @internal */
2009
2010
  export const updateService: {
2010
2011
  <I, A>(
2011
- service: ServiceMap.Service<I, A>,
2012
+ service: ServiceMap.Key<I, A>,
2012
2013
  f: (value: A) => A
2013
2014
  ): <XA, E, R>(self: Effect.Effect<XA, E, R>) => Effect.Effect<XA, E, R | I>
2014
2015
  <XA, E, R, I, A>(
2015
2016
  self: Effect.Effect<XA, E, R>,
2016
- service: ServiceMap.Service<I, A>,
2017
+ service: ServiceMap.Key<I, A>,
2017
2018
  f: (value: A) => A
2018
2019
  ): Effect.Effect<XA, E, R | I>
2019
2020
  } = dual(
2020
2021
  3,
2021
2022
  <XA, E, R, I, A>(
2022
2023
  self: Effect.Effect<XA, E, R>,
2023
- service: ServiceMap.Service<I, A>,
2024
+ service: ServiceMap.Key<I, A>,
2024
2025
  f: (value: A) => A
2025
2026
  ): Effect.Effect<XA, E, R | I> =>
2026
- withFiber((fiber) => {
2027
- const prev = ServiceMap.getUnsafe(fiber.services, service)
2027
+ updateServices(self, (s) => {
2028
+ const prev = ServiceMap.getUnsafe(s, service)
2028
2029
  const next = f(prev)
2029
- if (prev === next) return self
2030
- fiber.setServices(ServiceMap.add(fiber.services, service, next))
2031
- return onExit(self, () => sync(() => fiber.setServices(ServiceMap.add(fiber.services, service, prev))))
2030
+ if (prev === next) return s
2031
+ return ServiceMap.add(s, service, next)
2032
2032
  })
2033
2033
  )
2034
2034
 
@@ -2066,20 +2066,20 @@ export const provideServices: {
2066
2066
  /** @internal */
2067
2067
  export const provideService: {
2068
2068
  <I, S>(
2069
- service: ServiceMap.Service<I, S>
2069
+ service: ServiceMap.Key<I, S>
2070
2070
  ): {
2071
2071
  (implementation: S): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, I>>
2072
2072
  <A, E, R>(self: Effect.Effect<A, E, R>, implementation: S): Effect.Effect<A, E, Exclude<R, I>>
2073
2073
  }
2074
2074
  <I, S>(
2075
- key: ServiceMap.Service<I, S>,
2075
+ key: ServiceMap.Key<I, S>,
2076
2076
  implementation: S
2077
2077
  ): <A, E, R>(
2078
2078
  self: Effect.Effect<A, E, R>
2079
2079
  ) => Effect.Effect<A, E, Exclude<R, I>>
2080
2080
  <A, E, R, I, S>(
2081
2081
  self: Effect.Effect<A, E, R>,
2082
- service: ServiceMap.Service<I, S>,
2082
+ service: ServiceMap.Key<I, S>,
2083
2083
  implementation: S
2084
2084
  ): Effect.Effect<A, E, Exclude<R, I>>
2085
2085
  } = function(this: any) {
@@ -2092,34 +2092,33 @@ export const provideService: {
2092
2092
 
2093
2093
  const provideServiceImpl = <A, E, R, I, S>(
2094
2094
  self: Effect.Effect<A, E, R>,
2095
- service: ServiceMap.Service<I, S>,
2095
+ service: ServiceMap.Key<I, S>,
2096
2096
  implementation: S
2097
2097
  ): Effect.Effect<A, E, Exclude<R, I>> =>
2098
- withFiber((fiber) => {
2099
- const prev = ServiceMap.getOption(fiber.services, service)
2100
- if (prev._tag === "Some" && prev.value === implementation) return self
2101
- fiber.setServices(ServiceMap.add(fiber.services, service, implementation))
2102
- return onExit(self, () => sync(() => fiber.setServices(ServiceMap.addOrOmit(fiber.services, service, prev))))
2098
+ updateServices(self, (s) => {
2099
+ const prev = s.mapUnsafe.get(service.key)
2100
+ if (prev === implementation) return s
2101
+ return ServiceMap.add(s, service, implementation)
2103
2102
  }) as any
2104
2103
 
2105
2104
  /** @internal */
2106
2105
  export const provideServiceEffect: {
2107
2106
  <I, S, E2, R2>(
2108
- service: ServiceMap.Service<I, S>,
2107
+ service: ServiceMap.Key<I, S>,
2109
2108
  acquire: Effect.Effect<S, E2, R2>
2110
2109
  ): <A, E, R>(
2111
2110
  self: Effect.Effect<A, E, R>
2112
2111
  ) => Effect.Effect<A, E | E2, Exclude<R, I> | R2>
2113
2112
  <A, E, R, I, S, E2, R2>(
2114
2113
  self: Effect.Effect<A, E, R>,
2115
- service: ServiceMap.Service<I, S>,
2114
+ service: ServiceMap.Key<I, S>,
2116
2115
  acquire: Effect.Effect<S, E2, R2>
2117
2116
  ): Effect.Effect<A, E | E2, Exclude<R, I> | R2>
2118
2117
  } = dual(
2119
2118
  3,
2120
2119
  <A, E, R, I, S, E2, R2>(
2121
2120
  self: Effect.Effect<A, E, R>,
2122
- service: ServiceMap.Service<I, S>,
2121
+ service: ServiceMap.Key<I, S>,
2123
2122
  acquire: Effect.Effect<S, E2, R2>
2124
2123
  ): Effect.Effect<A, E | E2, Exclude<R, I> | R2> =>
2125
2124
  flatMap(acquire, (implementation) => provideService(self, service, implementation))
@@ -2203,19 +2202,12 @@ export const filterOrFail: {
2203
2202
  predicate: Predicate.Predicate<NoInfer<A>>,
2204
2203
  orFailWith: (a: NoInfer<A>) => E2
2205
2204
  ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E2 | E, R>
2206
- <A, B, X, E2>(
2207
- filter: Filter.Filter<NoInfer<A>, B, X>,
2208
- orFailWith: (x: X) => E2
2209
- ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E2 | E, R>
2210
2205
  <A, B extends A>(
2211
2206
  refinement: Predicate.Refinement<NoInfer<A>, B>
2212
2207
  ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, Cause.NoSuchElementError | E, R>
2213
2208
  <A>(
2214
2209
  predicate: Predicate.Predicate<NoInfer<A>>
2215
2210
  ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, Cause.NoSuchElementError | E, R>
2216
- <A, B, X>(
2217
- filter: Filter.Filter<NoInfer<A>, B, X>
2218
- ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, Cause.NoSuchElementError | E, R>
2219
2211
  <A, E, R, E2, B extends A>(
2220
2212
  self: Effect.Effect<A, E, R>,
2221
2213
  refinement: Predicate.Refinement<NoInfer<A>, B>,
@@ -2226,11 +2218,6 @@ export const filterOrFail: {
2226
2218
  predicate: Predicate.Predicate<NoInfer<A>>,
2227
2219
  orFailWith: (a: NoInfer<A>) => E2
2228
2220
  ): Effect.Effect<A, E2 | E, R>
2229
- <A, E, R, B, X, E2>(
2230
- self: Effect.Effect<A, E, R>,
2231
- filter: Filter.Filter<A, B, X>,
2232
- orFailWith: (x: X) => E2
2233
- ): Effect.Effect<B, E2 | E, R>
2234
2221
  <A, E, R, B extends A>(
2235
2222
  self: Effect.Effect<A, E, R>,
2236
2223
  refinement: Predicate.Refinement<NoInfer<A>, B>
@@ -2239,18 +2226,14 @@ export const filterOrFail: {
2239
2226
  self: Effect.Effect<A, E, R>,
2240
2227
  predicate: Predicate.Predicate<NoInfer<A>>
2241
2228
  ): Effect.Effect<A, E | Cause.NoSuchElementError, R>
2242
- <A, E, R, B, X>(
2243
- self: Effect.Effect<A, E, R>,
2244
- filter: Filter.Filter<A, B, X>
2245
- ): Effect.Effect<B, E | Cause.NoSuchElementError, R>
2246
2229
  } = dual((args) => isEffect(args[0]), <A, E, R, E2>(
2247
2230
  self: Effect.Effect<A, E, R>,
2248
- filter: Predicate.Predicate<NoInfer<A>> | Filter.Filter<A, any, any>,
2231
+ predicate: Predicate.Predicate<NoInfer<A>>,
2249
2232
  orFailWith?: (a: any) => E2
2250
2233
  ): Effect.Effect<any, E | E2 | Cause.NoSuchElementError, R> =>
2251
2234
  filterOrElse(
2252
2235
  self,
2253
- filter as any,
2236
+ predicate as any,
2254
2237
  orFailWith ? (a: any) => fail(orFailWith(a)) : () => fail(new NoSuchElementError() as E2)
2255
2238
  ))
2256
2239
 
@@ -2400,27 +2383,55 @@ const OnFailureProto = makePrimitiveProto({
2400
2383
 
2401
2384
  /** @internal */
2402
2385
  export const catchCauseIf: {
2403
- <E, Result extends Filter.ResultOrBool<Cause.Cause<any>>, B, E2, R2>(
2404
- filter: Filter.OrPredicate<Cause.Cause<E>, Result>,
2405
- f: (failure: Filter.Pass<Cause.Cause<E>, Result>, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2386
+ <E, B, E2, R2>(
2387
+ predicate: Predicate.Predicate<Cause.Cause<E>>,
2388
+ f: (cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2406
2389
  ): <A, R>(
2407
2390
  self: Effect.Effect<A, E, R>
2408
- ) => Effect.Effect<A | B, Cause.Cause.Error<Filter.Fail<Cause.Cause<E>, Result>> | E2, R | R2>
2409
- <A, E, R, B, E2, R2, Result extends Filter.ResultOrBool<Cause.Cause<any>>>(
2391
+ ) => Effect.Effect<A | B, E | E2, R | R2>
2392
+ <A, E, R, B, E2, R2>(
2410
2393
  self: Effect.Effect<A, E, R>,
2411
- filter: Filter.OrPredicate<Cause.Cause<E>, Result>,
2412
- f: (failure: Filter.Pass<Cause.Cause<E>, Result>, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2413
- ): Effect.Effect<A | B, Cause.Cause.Error<Filter.Fail<Cause.Cause<E>, Result>> | E2, R | R2>
2394
+ predicate: Predicate.Predicate<Cause.Cause<E>>,
2395
+ f: (cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2396
+ ): Effect.Effect<A | B, E | E2, R | R2>
2414
2397
  } = dual(
2415
2398
  3,
2416
- <A, E, R, B, E2, R2, Result extends Filter.ResultOrBool<Cause.Cause<any>>>(
2417
- self: Effect.Effect<A, E, R>,
2418
- filter: Filter.OrPredicate<Cause.Cause<E>, Result>,
2419
- f: (failure: Filter.Pass<Cause.Cause<E>, Result>, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2420
- ): Effect.Effect<A | B, Cause.Cause.Error<Filter.Fail<Cause.Cause<E>, Result>> | E2, R | R2> =>
2421
- catchCause(self, (cause): Effect.Effect<B, Cause.Cause.Error<Filter.Fail<Cause.Cause<E>, Result>> | E2, R | R2> => {
2422
- const eb = Filter.apply(filter as any, cause)
2423
- return !Result.isFailure(eb) ? internalCall(() => f(eb.success as any, cause)) : failCause(eb.failure as any)
2399
+ <A, E, R, B, E2, R2>(
2400
+ self: Effect.Effect<A, E, R>,
2401
+ predicate: Predicate.Predicate<Cause.Cause<E>>,
2402
+ f: (cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2403
+ ): Effect.Effect<A | B, E | E2, R | R2> =>
2404
+ catchCause(self, (cause): Effect.Effect<B, E | E2, R2> => {
2405
+ if (!predicate(cause)) {
2406
+ return failCause(cause) as any
2407
+ }
2408
+ return internalCall(() => f(cause))
2409
+ })
2410
+ )
2411
+
2412
+ /** @internal */
2413
+ export const catchCauseFilter: {
2414
+ <E, B, E2, R2, EB, X extends Cause.Cause<any>>(
2415
+ filter: Filter.Filter<Cause.Cause<E>, EB, X>,
2416
+ f: (failure: EB, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2417
+ ): <A, R>(
2418
+ self: Effect.Effect<A, E, R>
2419
+ ) => Effect.Effect<A | B, Cause.Cause.Error<X> | E2, R | R2>
2420
+ <A, E, R, B, E2, R2, EB, X extends Cause.Cause<any>>(
2421
+ self: Effect.Effect<A, E, R>,
2422
+ filter: Filter.Filter<Cause.Cause<E>, EB, X>,
2423
+ f: (failure: EB, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2424
+ ): Effect.Effect<A | B, Cause.Cause.Error<X> | E2, R | R2>
2425
+ } = dual(
2426
+ 3,
2427
+ <A, E, R, B, E2, R2, EB, X extends Cause.Cause<any>>(
2428
+ self: Effect.Effect<A, E, R>,
2429
+ filter: Filter.Filter<Cause.Cause<E>, EB, X>,
2430
+ f: (failure: EB, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2431
+ ): Effect.Effect<A | B, Cause.Cause.Error<X> | E2, R | R2> =>
2432
+ catchCause(self, (cause): Effect.Effect<B, Cause.Cause.Error<X> | E2, R2> => {
2433
+ const eb = filter(cause)
2434
+ return Result.isFailure(eb) ? failCause(eb.failure) : internalCall(() => f(eb.success, cause))
2424
2435
  })
2425
2436
  )
2426
2437
 
@@ -2438,7 +2449,7 @@ export const catch_: {
2438
2449
  <A, E, R, B, E2, R2>(
2439
2450
  self: Effect.Effect<A, E, R>,
2440
2451
  f: (a: NoInfer<E>) => Effect.Effect<B, E2, R2>
2441
- ): Effect.Effect<A | B, E2, R | R2> => catchCauseIf(self, findError as any, (e: any) => f(e)) as any
2452
+ ): Effect.Effect<A | B, E2, R | R2> => catchCauseFilter(self, findError as any, (e: any) => f(e)) as any
2442
2453
  )
2443
2454
 
2444
2455
  /** @internal */
@@ -2469,7 +2480,7 @@ export const catchDefect: {
2469
2480
  <A, E, R, B, E2, R2>(
2470
2481
  self: Effect.Effect<A, E, R>,
2471
2482
  f: (defect: unknown) => Effect.Effect<B, E2, R2>
2472
- ): Effect.Effect<A | B, E | E2, R | R2> => catchCauseIf(self, findDefect as any, f as any) as any
2483
+ ): Effect.Effect<A | B, E | E2, R | R2> => catchCauseFilter(self, findDefect as any, f as any) as any
2473
2484
  )
2474
2485
 
2475
2486
  /** @internal */
@@ -2492,32 +2503,56 @@ export const tapCause: {
2492
2503
 
2493
2504
  /** @internal */
2494
2505
  export const tapCauseIf: {
2495
- <E, Result extends Filter.ResultOrBool, B, E2, R2>(
2496
- filter: Filter.OrPredicate<Cause.Cause<E>, Result>,
2497
- f: (a: Filter.Pass<Cause.Cause<E>, Result>, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2506
+ <E, B, E2, R2>(
2507
+ predicate: Predicate.Predicate<Cause.Cause<E>>,
2508
+ f: (cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2498
2509
  ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, R | R2>
2499
- <A, E, R, Result extends Filter.ResultOrBool, B, E2, R2>(
2510
+ <A, E, R, B, E2, R2>(
2500
2511
  self: Effect.Effect<A, E, R>,
2501
- filter: Filter.OrPredicate<Cause.Cause<E>, Result>,
2502
- f: (a: Filter.Pass<Cause.Cause<E>, Result>, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2512
+ predicate: Predicate.Predicate<Cause.Cause<E>>,
2513
+ f: (cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2503
2514
  ): Effect.Effect<A, E | E2, R | R2>
2504
2515
  } = dual(
2505
2516
  3,
2506
- <A, E, R, Result extends Filter.ResultOrBool, B, E2, R2>(
2517
+ <A, E, R, B, E2, R2>(
2507
2518
  self: Effect.Effect<A, E, R>,
2508
- filter: Filter.OrPredicate<Cause.Cause<E>, Result>,
2509
- f: (a: Filter.Pass<Cause.Cause<E>, Result>, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2519
+ predicate: Predicate.Predicate<Cause.Cause<E>>,
2520
+ f: (cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2510
2521
  ): Effect.Effect<A, E | E2, R | R2> =>
2511
2522
  catchCauseIf(
2512
2523
  self,
2513
- ((cause: Cause.Cause<E>) => {
2514
- const result = Filter.apply(filter as any, cause)
2515
- return Result.isFailure(result) ? Result.fail(cause) : result
2516
- }) as any,
2517
- (failure: any, cause: Cause.Cause<E>) => andThen(internalCall(() => f(failure, cause)), failCause(cause))
2524
+ predicate,
2525
+ (cause) => andThen(internalCall(() => f(cause)), failCause(cause))
2518
2526
  )
2519
2527
  )
2520
2528
 
2529
+ /** @internal */
2530
+ export const tapCauseFilter: {
2531
+ <E, B, E2, R2, EB, X extends Cause.Cause<any>>(
2532
+ filter: Filter.Filter<Cause.Cause<E>, EB, X>,
2533
+ f: (a: EB, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2534
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, R | R2>
2535
+ <A, E, R, B, E2, R2, EB, X extends Cause.Cause<any>>(
2536
+ self: Effect.Effect<A, E, R>,
2537
+ filter: Filter.Filter<Cause.Cause<E>, EB, X>,
2538
+ f: (a: EB, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2539
+ ): Effect.Effect<A, E | E2, R | R2>
2540
+ } = dual(
2541
+ 3,
2542
+ <A, E, R, B, E2, R2, EB, X extends Cause.Cause<any>>(
2543
+ self: Effect.Effect<A, E, R>,
2544
+ filter: Filter.Filter<Cause.Cause<E>, EB, X>,
2545
+ f: (a: EB, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
2546
+ ): Effect.Effect<A, E | E2, R | R2> =>
2547
+ catchCause(self, (cause) => {
2548
+ const result = filter(cause)
2549
+ if (Result.isFailure(result)) {
2550
+ return failCause(cause)
2551
+ }
2552
+ return andThen(internalCall(() => f(result.success, cause)), failCause(cause))
2553
+ })
2554
+ )
2555
+
2521
2556
  /** @internal */
2522
2557
  export const tapError: {
2523
2558
  <E, B, E2, R2>(
@@ -2532,7 +2567,7 @@ export const tapError: {
2532
2567
  <A, E, R, B, E2, R2>(
2533
2568
  self: Effect.Effect<A, E, R>,
2534
2569
  f: (e: NoInfer<E>) => Effect.Effect<B, E2, R2>
2535
- ): Effect.Effect<A, E | E2, R | R2> => tapCauseIf(self, findError as any, (e: any) => f(e)) as any
2570
+ ): Effect.Effect<A, E | E2, R | R2> => tapCauseFilter(self, findError as any, (e: any) => f(e)) as any
2536
2571
  )
2537
2572
 
2538
2573
  /** @internal */
@@ -2599,7 +2634,7 @@ export const tapDefect: {
2599
2634
  <A, E, R, B, E2, R2>(
2600
2635
  self: Effect.Effect<A, E, R>,
2601
2636
  f: (defect: unknown) => Effect.Effect<B, E2, R2>
2602
- ): Effect.Effect<A, E | E2, R | R2> => tapCauseIf(self, findDefect as any, (_: any) => f(_)) as any
2637
+ ): Effect.Effect<A, E | E2, R | R2> => tapCauseFilter(self, findDefect as any, (_: any) => f(_)) as any
2603
2638
  )
2604
2639
 
2605
2640
  /** @internal */
@@ -2609,10 +2644,10 @@ export const catchIf: {
2609
2644
  f: (e: EB) => Effect.Effect<A2, E2, R2>,
2610
2645
  orElse?: ((e: Exclude<E, EB>) => Effect.Effect<A3, E3, R3>) | undefined
2611
2646
  ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3>
2612
- <E, Result extends Filter.ResultOrBool, A2, E2, R2, A3 = never, E3 = Filter.Fail<E, Result>, R3 = never>(
2613
- filter: Filter.OrPredicate<NoInfer<E>, Result>,
2614
- f: (e: Filter.Pass<E, Result>) => Effect.Effect<A2, E2, R2>,
2615
- orElse?: ((e: Filter.Fail<E, Result>) => Effect.Effect<A3, E3, R3>) | undefined
2647
+ <E, A2, E2, R2, A3 = never, E3 = E, R3 = never>(
2648
+ predicate: Predicate.Predicate<NoInfer<E>>,
2649
+ f: (e: NoInfer<E>) => Effect.Effect<A2, E2, R2>,
2650
+ orElse?: ((e: NoInfer<E>) => Effect.Effect<A3, E3, R3>) | undefined
2616
2651
  ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3>
2617
2652
  <A, E, R, EB extends E, A2, E2, R2, A3 = never, E3 = Exclude<E, EB>, R3 = never>(
2618
2653
  self: Effect.Effect<A, E, R>,
@@ -2620,28 +2655,59 @@ export const catchIf: {
2620
2655
  f: (e: EB) => Effect.Effect<A2, E2, R2>,
2621
2656
  orElse?: ((e: Exclude<E, EB>) => Effect.Effect<A3, E3, R3>) | undefined
2622
2657
  ): Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3>
2623
- <A, E, R, Result extends Filter.ResultOrBool, A2, E2, R2, A3 = never, E3 = Filter.Fail<E, Result>, R3 = never>(
2658
+ <A, E, R, A2, E2, R2, A3 = never, E3 = E, R3 = never>(
2624
2659
  self: Effect.Effect<A, E, R>,
2625
- filter: Filter.OrPredicate<NoInfer<E>, Result>,
2626
- f: (e: Filter.Pass<E, Result>) => Effect.Effect<A2, E2, R2>,
2627
- orElse?: ((e: Filter.Fail<E, Result>) => Effect.Effect<A3, E3, R3>) | undefined
2660
+ predicate: Predicate.Predicate<E>,
2661
+ f: (e: E) => Effect.Effect<A2, E2, R2>,
2662
+ orElse?: ((e: E) => Effect.Effect<A3, E3, R3>) | undefined
2628
2663
  ): Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3>
2629
2664
  } = dual(
2630
2665
  (args) => isEffect(args[0]),
2666
+ <A, E, R, A2, E2, R2, A3 = never, E3 = E, R3 = never>(
2667
+ self: Effect.Effect<A, E, R>,
2668
+ predicate: Predicate.Predicate<E>,
2669
+ f: (e: E) => Effect.Effect<A2, E2, R2>,
2670
+ orElse?: ((e: E) => Effect.Effect<A3, E3, R3>) | undefined
2671
+ ): Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3> =>
2672
+ catchCause(self, (cause): Effect.Effect<A2 | A3, E2 | E3, R2 | R3> => {
2673
+ const error = findError(cause)
2674
+ if (Result.isFailure(error)) return failCause(error.failure)
2675
+ if (!predicate(error.success)) {
2676
+ return orElse ? internalCall(() => orElse(error.success as any)) : failCause(cause as any as Cause.Cause<E3>)
2677
+ }
2678
+ return internalCall(() => f(error.success as any))
2679
+ })
2680
+ )
2681
+
2682
+ /** @internal */
2683
+ export const catchFilter: {
2684
+ <E, EB, A2, E2, R2, X, A3 = never, E3 = X, R3 = never>(
2685
+ filter: Filter.Filter<NoInfer<E>, EB, X>,
2686
+ f: (e: EB) => Effect.Effect<A2, E2, R2>,
2687
+ orElse?: ((e: X) => Effect.Effect<A3, E3, R3>) | undefined
2688
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3>
2631
2689
  <A, E, R, EB, A2, E2, R2, X, A3 = never, E3 = X, R3 = never>(
2632
2690
  self: Effect.Effect<A, E, R>,
2633
- filter: Filter.Filter<NoInfer<E>, EB, X> | Predicate.Predicate<NoInfer<E>>,
2691
+ filter: Filter.Filter<NoInfer<E>, EB, X>,
2692
+ f: (e: EB) => Effect.Effect<A2, E2, R2>,
2693
+ orElse?: ((e: X) => Effect.Effect<A3, E3, R3>) | undefined
2694
+ ): Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3>
2695
+ } = dual(
2696
+ (args) => isEffect(args[0]),
2697
+ <A, E, R, EB, A2, E2, R2, X, A3 = never, E3 = X, R3 = never>(
2698
+ self: Effect.Effect<A, E, R>,
2699
+ filter: Filter.Filter<NoInfer<E>, EB, X>,
2634
2700
  f: (e: EB) => Effect.Effect<A2, E2, R2>,
2635
2701
  orElse?: ((e: X) => Effect.Effect<A3, E3, R3>) | undefined
2636
2702
  ): Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3> =>
2637
2703
  catchCause(self, (cause): Effect.Effect<A2 | A3, E2 | E3, R2 | R3> => {
2638
2704
  const error = findError(cause)
2639
2705
  if (Result.isFailure(error)) return failCause(error.failure)
2640
- const result = Filter.apply(filter as any, error.success)
2706
+ const result = filter(error.success)
2641
2707
  if (Result.isFailure(result)) {
2642
2708
  return orElse ? internalCall(() => orElse(result.failure as any)) : failCause(cause as any as Cause.Cause<E3>)
2643
2709
  }
2644
- return internalCall(() => f(result.success as any))
2710
+ return internalCall(() => f(result.success))
2645
2711
  })
2646
2712
  )
2647
2713
 
@@ -2777,7 +2843,7 @@ export const catchTags: {
2777
2843
  >
2778
2844
  } = dual((args) => isEffect(args[0]), (self: Effect.Effect<any, any, any>, cases: Record<string, any>, orElse: any) => {
2779
2845
  let keys: Array<string>
2780
- return catchIf(
2846
+ return catchFilter(
2781
2847
  self,
2782
2848
  (e) => {
2783
2849
  keys ??= Object.keys(cases)
@@ -2787,7 +2853,7 @@ export const catchTags: {
2787
2853
  },
2788
2854
  (e: any) => internalCall(() => cases[e["_tag"] as string](e)),
2789
2855
  orElse
2790
- )
2856
+ ) as any
2791
2857
  })
2792
2858
 
2793
2859
  /** @internal */
@@ -2805,8 +2871,16 @@ export const catchReason: {
2805
2871
  >(
2806
2872
  errorTag: K,
2807
2873
  reasonTag: RK,
2808
- f: (reason: ExtractReason<ExtractTag<NoInfer<E>, K>, RK>) => Effect.Effect<A2, E2, R2>,
2809
- orElse?: ((reasons: ExcludeReason<ExtractTag<NoInfer<E>, K>, RK>) => Effect.Effect<A3, E3, R3>) | undefined
2874
+ f: (
2875
+ reason: ExtractReason<ExtractTag<NoInfer<E>, K>, RK>,
2876
+ error: NarrowReason<ExtractTag<NoInfer<E>, K>, RK>
2877
+ ) => Effect.Effect<A2, E2, R2>,
2878
+ orElse?:
2879
+ | ((
2880
+ reasons: ExcludeReason<ExtractTag<NoInfer<E>, K>, RK>,
2881
+ error: OmitReason<ExtractTag<NoInfer<E>, K>, RK>
2882
+ ) => Effect.Effect<A3, E3, R3>)
2883
+ | undefined
2810
2884
  ): <A, R>(
2811
2885
  self: Effect.Effect<A, E, R>
2812
2886
  ) => Effect.Effect<
@@ -2830,8 +2904,16 @@ export const catchReason: {
2830
2904
  self: Effect.Effect<A, E, R>,
2831
2905
  errorTag: K,
2832
2906
  reasonTag: RK,
2833
- f: (reason: ExtractReason<ExtractTag<E, K>, RK>) => Effect.Effect<A2, E2, R2>,
2834
- orElse?: ((reasons: ExcludeReason<ExtractTag<E, K>, RK>) => Effect.Effect<A3, E3, R3>) | undefined
2907
+ f: (
2908
+ reason: ExtractReason<ExtractTag<E, K>, RK>,
2909
+ error: NarrowReason<ExtractTag<E, K>, RK>
2910
+ ) => Effect.Effect<A2, E2, R2>,
2911
+ orElse?:
2912
+ | ((
2913
+ reasons: ExcludeReason<ExtractTag<E, K>, RK>,
2914
+ error: OmitReason<ExtractTag<E, K>, RK>
2915
+ ) => Effect.Effect<A3, E3, R3>)
2916
+ | undefined
2835
2917
  ): Effect.Effect<
2836
2918
  A | A2 | Exclude<A3, unassigned>,
2837
2919
  (A3 extends unassigned ? E : ExcludeTag<E, K>) | E2 | E3,
@@ -2855,8 +2937,13 @@ export const catchReason: {
2855
2937
  self: Effect.Effect<A, E, R>,
2856
2938
  errorTag: K,
2857
2939
  reasonTag: RK,
2858
- f: (reason: ExtractReason<ExtractTag<E, K>, RK>) => Effect.Effect<A2, E2, R2>,
2859
- orElse?: ((reasons: ExcludeReason<ExtractTag<E, K>, RK>) => Effect.Effect<A3, E3, R3>) | undefined
2940
+ f: (reason: ExtractReason<ExtractTag<E, K>, RK>, error: ExtractTag<E, K>) => Effect.Effect<A2, E2, R2>,
2941
+ orElse?:
2942
+ | ((
2943
+ reasons: ExcludeReason<ExtractTag<E, K>, RK>,
2944
+ error: OmitReason<ExtractTag<E, K>, RK>
2945
+ ) => Effect.Effect<A3, E3, R3>)
2946
+ | undefined
2860
2947
  ): Effect.Effect<
2861
2948
  A | A2 | Exclude<A3, unassigned>,
2862
2949
  (A3 extends unassigned ? E : ExcludeTag<E, K>) | E2 | E3,
@@ -2867,8 +2954,8 @@ export const catchReason: {
2867
2954
  ((e: any) => isTagged(e, errorTag) && hasProperty(e, "reason")) as any,
2868
2955
  (e: any): Effect.Effect<A2 | A3, E | E2 | E3, R2 | R3> => {
2869
2956
  const reason = e.reason as any
2870
- if (isTagged(reason, reasonTag)) return f(reason as any)
2871
- return orElse ? internalCall(() => orElse(reason)) : fail(e)
2957
+ if (isTagged(reason, reasonTag)) return f(reason as any, e)
2958
+ return orElse ? internalCall(() => orElse(reason, e)) : fail(e)
2872
2959
  }
2873
2960
  ) as any
2874
2961
  )
@@ -2880,7 +2967,8 @@ export const catchReasons: {
2880
2967
  E,
2881
2968
  Cases extends {
2882
2969
  [RK in ReasonTags<ExtractTag<NoInfer<E>, K>>]+?: (
2883
- reason: ExtractReason<ExtractTag<NoInfer<E>, K>, RK>
2970
+ reason: ExtractReason<ExtractTag<NoInfer<E>, K>, RK>,
2971
+ error: NarrowReason<ExtractTag<NoInfer<E>, K>, RK>
2884
2972
  ) => Effect.Effect<any, any, any>
2885
2973
  },
2886
2974
  A2 = unassigned,
@@ -2891,7 +2979,8 @@ export const catchReasons: {
2891
2979
  cases: Cases,
2892
2980
  orElse?:
2893
2981
  | ((
2894
- reason: ExcludeReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>
2982
+ reason: ExcludeReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>,
2983
+ error: OmitReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>
2895
2984
  ) => Effect.Effect<A2, E2, R2>)
2896
2985
  | undefined
2897
2986
  ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<
@@ -2918,7 +3007,8 @@ export const catchReasons: {
2918
3007
  K extends Tags<E>,
2919
3008
  Cases extends {
2920
3009
  [RK in ReasonTags<ExtractTag<E, K>>]+?: (
2921
- reason: ExtractReason<ExtractTag<E, K>, RK>
3010
+ reason: ExtractReason<ExtractTag<E, K>, RK>,
3011
+ error: NarrowReason<ExtractTag<E, K>, RK>
2922
3012
  ) => Effect.Effect<any, any, any>
2923
3013
  },
2924
3014
  A2 = unassigned,
@@ -2930,7 +3020,8 @@ export const catchReasons: {
2930
3020
  cases: Cases,
2931
3021
  orElse?:
2932
3022
  | ((
2933
- reason: ExcludeReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>
3023
+ reason: ExcludeReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>,
3024
+ error: OmitReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>
2934
3025
  ) => Effect.Effect<A2, E2, R2>)
2935
3026
  | undefined
2936
3027
  ): Effect.Effect<
@@ -2963,9 +3054,9 @@ export const catchReasons: {
2963
3054
  const reason = e.reason
2964
3055
  keys ??= Object.keys(cases)
2965
3056
  if (keys.includes(reason._tag)) {
2966
- return internalCall(() => (cases as any)[reason._tag](reason))
3057
+ return internalCall(() => (cases as any)[reason._tag](reason, e))
2967
3058
  }
2968
- return orElse ? internalCall(() => orElse(reason)) : fail(e)
3059
+ return orElse ? internalCall(() => orElse(reason, e)) : fail(e)
2969
3060
  }
2970
3061
  )
2971
3062
  })
@@ -2998,7 +3089,7 @@ export const unwrapReason: {
2998
3089
  self: Effect.Effect<A, E, R>,
2999
3090
  errorTag: K
3000
3091
  ): Effect.Effect<A, ExcludeTag<E, K> | ReasonOf<ExtractTag<E, K>>, R> =>
3001
- catchIf(
3092
+ catchFilter(
3002
3093
  self,
3003
3094
  (e: any) => {
3004
3095
  if (isTagged(e, errorTag) && hasProperty(e, "reason")) {
@@ -3007,7 +3098,7 @@ export const unwrapReason: {
3007
3098
  return Result.fail(e)
3008
3099
  },
3009
3100
  fail as any
3010
- )
3101
+ ) as any
3011
3102
  )
3012
3103
 
3013
3104
  /** @internal */
@@ -3091,14 +3182,17 @@ export const eventually = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect
3091
3182
  /** @internal */
3092
3183
  export const ignore: <
3093
3184
  Arg extends Effect.Effect<any, any, any> | {
3094
- readonly log?: boolean | LogLevel.LogLevel | undefined
3185
+ readonly log?: boolean | LogLevel.Severity | undefined
3186
+ readonly message?: string | undefined
3095
3187
  } | undefined = {
3096
- readonly log?: boolean | LogLevel.LogLevel | undefined
3188
+ readonly log?: boolean | LogLevel.Severity | undefined
3189
+ readonly message?: string | undefined
3097
3190
  }
3098
3191
  >(
3099
3192
  effectOrOptions: Arg,
3100
3193
  options?: {
3101
- readonly log?: boolean | LogLevel.LogLevel | undefined
3194
+ readonly log?: boolean | LogLevel.Severity | undefined
3195
+ readonly message?: string | undefined
3102
3196
  } | undefined
3103
3197
  ) => [Arg] extends [Effect.Effect<infer _A, infer _E, infer _R>] ? Effect.Effect<void, never, _R>
3104
3198
  : <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<void, never, R> = dual(
@@ -3106,7 +3200,8 @@ export const ignore: <
3106
3200
  <A, E, R>(
3107
3201
  self: Effect.Effect<A, E, R>,
3108
3202
  options?: {
3109
- readonly log?: boolean | LogLevel.LogLevel | undefined
3203
+ readonly log?: boolean | LogLevel.Severity | undefined
3204
+ readonly message?: string | undefined
3110
3205
  } | undefined
3111
3206
  ): Effect.Effect<void, never, R> => {
3112
3207
  if (!options?.log) {
@@ -3116,7 +3211,11 @@ export const ignore: <
3116
3211
  return matchCauseEffect(self, {
3117
3212
  onFailure(cause) {
3118
3213
  const failure = findFail(cause)
3119
- return Result.isFailure(failure) ? failCause(failure.failure) : logEffect(cause)
3214
+ return Result.isFailure(failure)
3215
+ ? failCause(failure.failure)
3216
+ : options.message === undefined
3217
+ ? logEffect(cause)
3218
+ : logEffect(options.message, cause)
3120
3219
  },
3121
3220
  onSuccess: (_) => void_
3122
3221
  })
@@ -3126,14 +3225,17 @@ export const ignore: <
3126
3225
  /** @internal */
3127
3226
  export const ignoreCause: <
3128
3227
  Arg extends Effect.Effect<any, any, any> | {
3129
- readonly log?: boolean | LogLevel.LogLevel | undefined
3228
+ readonly log?: boolean | LogLevel.Severity | undefined
3229
+ readonly message?: string | undefined
3130
3230
  } | undefined = {
3131
- readonly log?: boolean | LogLevel.LogLevel | undefined
3231
+ readonly log?: boolean | LogLevel.Severity | undefined
3232
+ readonly message?: string | undefined
3132
3233
  }
3133
3234
  >(
3134
3235
  effectOrOptions: Arg,
3135
3236
  options?: {
3136
- readonly log?: boolean | LogLevel.LogLevel | undefined
3237
+ readonly log?: boolean | LogLevel.Severity | undefined
3238
+ readonly message?: string | undefined
3137
3239
  } | undefined
3138
3240
  ) => [Arg] extends [Effect.Effect<infer _A, infer _E, infer _R>] ? Effect.Effect<void, never, _R>
3139
3241
  : <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<void, never, R> = dual(
@@ -3141,14 +3243,18 @@ export const ignoreCause: <
3141
3243
  <A, E, R>(
3142
3244
  self: Effect.Effect<A, E, R>,
3143
3245
  options?: {
3144
- readonly log?: boolean | LogLevel.LogLevel | undefined
3246
+ readonly log?: boolean | LogLevel.Severity | undefined
3247
+ readonly message?: string | undefined
3145
3248
  } | undefined
3146
3249
  ): Effect.Effect<void, never, R> => {
3147
3250
  if (!options?.log) {
3148
3251
  return matchCauseEffect(self, { onFailure: (_) => void_, onSuccess: (_) => void_ })
3149
3252
  }
3150
3253
  const logEffect = logWithLevel(options.log === true ? undefined : options.log)
3151
- return matchCauseEffect(self, { onFailure: logEffect, onSuccess: (_) => void_ })
3254
+ return matchCauseEffect(self, {
3255
+ onFailure: (cause) => options.message === undefined ? logEffect(cause) : logEffect(options.message, cause),
3256
+ onSuccess: (_) => void_
3257
+ })
3152
3258
  }
3153
3259
  )
3154
3260
 
@@ -3403,24 +3509,24 @@ export const isSuccess: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect
3403
3509
  /** @internal */
3404
3510
  export const delay: {
3405
3511
  (
3406
- duration: Duration.DurationInput
3512
+ duration: Duration.Input
3407
3513
  ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
3408
3514
  <A, E, R>(
3409
3515
  self: Effect.Effect<A, E, R>,
3410
- duration: Duration.DurationInput
3516
+ duration: Duration.Input
3411
3517
  ): Effect.Effect<A, E, R>
3412
3518
  } = dual(
3413
3519
  2,
3414
3520
  <A, E, R>(
3415
3521
  self: Effect.Effect<A, E, R>,
3416
- duration: Duration.DurationInput
3522
+ duration: Duration.Input
3417
3523
  ): Effect.Effect<A, E, R> => andThen(sleep(duration), self)
3418
3524
  )
3419
3525
 
3420
3526
  /** @internal */
3421
3527
  export const timeoutOrElse: {
3422
3528
  <A2, E2, R2>(options: {
3423
- readonly duration: Duration.DurationInput
3529
+ readonly duration: Duration.Input
3424
3530
  readonly onTimeout: LazyArg<Effect.Effect<A2, E2, R2>>
3425
3531
  }): <A, E, R>(
3426
3532
  self: Effect.Effect<A, E, R>
@@ -3428,7 +3534,7 @@ export const timeoutOrElse: {
3428
3534
  <A, E, R, A2, E2, R2>(
3429
3535
  self: Effect.Effect<A, E, R>,
3430
3536
  options: {
3431
- readonly duration: Duration.DurationInput
3537
+ readonly duration: Duration.Input
3432
3538
  readonly onTimeout: LazyArg<Effect.Effect<A2, E2, R2>>
3433
3539
  }
3434
3540
  ): Effect.Effect<A | A2, E | E2, R | R2>
@@ -3437,7 +3543,7 @@ export const timeoutOrElse: {
3437
3543
  <A, E, R, A2, E2, R2>(
3438
3544
  self: Effect.Effect<A, E, R>,
3439
3545
  options: {
3440
- readonly duration: Duration.DurationInput
3546
+ readonly duration: Duration.Input
3441
3547
  readonly onTimeout: LazyArg<Effect.Effect<A2, E2, R2>>
3442
3548
  }
3443
3549
  ): Effect.Effect<A | A2, E | E2, R | R2> =>
@@ -3450,19 +3556,19 @@ export const timeoutOrElse: {
3450
3556
  /** @internal */
3451
3557
  export const timeout: {
3452
3558
  (
3453
- duration: Duration.DurationInput
3559
+ duration: Duration.Input
3454
3560
  ): <A, E, R>(
3455
3561
  self: Effect.Effect<A, E, R>
3456
3562
  ) => Effect.Effect<A, E | Cause.TimeoutError, R>
3457
3563
  <A, E, R>(
3458
3564
  self: Effect.Effect<A, E, R>,
3459
- duration: Duration.DurationInput
3565
+ duration: Duration.Input
3460
3566
  ): Effect.Effect<A, E | Cause.TimeoutError, R>
3461
3567
  } = dual(
3462
3568
  2,
3463
3569
  <A, E, R>(
3464
3570
  self: Effect.Effect<A, E, R>,
3465
- duration: Duration.DurationInput
3571
+ duration: Duration.Input
3466
3572
  ): Effect.Effect<A, E | TimeoutError, R> =>
3467
3573
  timeoutOrElse(self, {
3468
3574
  duration,
@@ -3473,19 +3579,19 @@ export const timeout: {
3473
3579
  /** @internal */
3474
3580
  export const timeoutOption: {
3475
3581
  (
3476
- duration: Duration.DurationInput
3582
+ duration: Duration.Input
3477
3583
  ): <A, E, R>(
3478
3584
  self: Effect.Effect<A, E, R>
3479
3585
  ) => Effect.Effect<Option.Option<A>, E, R>
3480
3586
  <A, E, R>(
3481
3587
  self: Effect.Effect<A, E, R>,
3482
- duration: Duration.DurationInput
3588
+ duration: Duration.Input
3483
3589
  ): Effect.Effect<Option.Option<A>, E, R>
3484
3590
  } = dual(
3485
3591
  2,
3486
3592
  <A, E, R>(
3487
3593
  self: Effect.Effect<A, E, R>,
3488
- duration: Duration.DurationInput
3594
+ duration: Duration.Input
3489
3595
  ): Effect.Effect<Option.Option<A>, E, R> =>
3490
3596
  raceFirst(
3491
3597
  asSome(self),
@@ -3646,11 +3752,11 @@ export const provideScope: {
3646
3752
  /** @internal */
3647
3753
  export const scoped = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, Exclude<R, Scope.Scope>> =>
3648
3754
  withFiber((fiber) => {
3649
- const prev = ServiceMap.getOption(fiber.services, scopeTag)
3755
+ const prev = fiber.services
3650
3756
  const scope = scopeMakeUnsafe()
3651
3757
  fiber.setServices(ServiceMap.add(fiber.services, scopeTag, scope))
3652
3758
  return onExitPrimitive(self, (exit) => {
3653
- fiber.setServices(ServiceMap.addOrOmit(fiber.services, scopeTag, prev))
3759
+ fiber.setServices(prev)
3654
3760
  return scopeCloseUnsafe(scope, exit)
3655
3761
  })
3656
3762
  }) as any
@@ -3758,34 +3864,51 @@ export const ensuring: {
3758
3864
 
3759
3865
  /** @internal */
3760
3866
  export const onExitIf: {
3761
- <A, E, XE, XR, Result extends Filter.ResultOrBool>(
3762
- filter: Filter.OrPredicate<Exit.Exit<NoInfer<A>, NoInfer<E>>, Result>,
3763
- f: (
3764
- pass: Filter.Pass<Exit.Exit<NoInfer<A>, NoInfer<E>>, Result>,
3765
- exit: Exit.Exit<NoInfer<A>, NoInfer<E>>
3766
- ) => Effect.Effect<void, XE, XR>
3867
+ <A, E, XE, XR>(
3868
+ predicate: Predicate.Predicate<Exit.Exit<NoInfer<A>, NoInfer<E>>>,
3869
+ f: (exit: Exit.Exit<NoInfer<A>, NoInfer<E>>) => Effect.Effect<void, XE, XR>
3767
3870
  ): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | XE, R | XR>
3768
- <A, E, R, XE, XR, Result extends Filter.ResultOrBool>(
3871
+ <A, E, R, XE, XR>(
3769
3872
  self: Effect.Effect<A, E, R>,
3770
- filter: Filter.OrPredicate<Exit.Exit<NoInfer<A>, NoInfer<E>>, Result>,
3771
- f: (
3772
- pass: Filter.Pass<Exit.Exit<NoInfer<A>, NoInfer<E>>, Result>,
3773
- exit: Exit.Exit<NoInfer<A>, NoInfer<E>>
3774
- ) => Effect.Effect<void, XE, XR>
3873
+ predicate: Predicate.Predicate<Exit.Exit<NoInfer<A>, NoInfer<E>>>,
3874
+ f: (exit: Exit.Exit<NoInfer<A>, NoInfer<E>>) => Effect.Effect<void, XE, XR>
3775
3875
  ): Effect.Effect<A, E | XE, R | XR>
3776
3876
  } = dual(
3777
3877
  3,
3778
- <A, E, R, XE, XR, Result extends Filter.ResultOrBool>(
3878
+ <A, E, R, XE, XR>(
3779
3879
  self: Effect.Effect<A, E, R>,
3780
- filter: Filter.OrPredicate<Exit.Exit<NoInfer<A>, NoInfer<E>>, Result>,
3781
- f: (
3782
- pass: Filter.Pass<Exit.Exit<NoInfer<A>, NoInfer<E>>, Result>,
3783
- exit: Exit.Exit<NoInfer<A>, NoInfer<E>>
3784
- ) => Effect.Effect<void, XE, XR>
3880
+ predicate: Predicate.Predicate<Exit.Exit<NoInfer<A>, NoInfer<E>>>,
3881
+ f: (exit: Exit.Exit<NoInfer<A>, NoInfer<E>>) => Effect.Effect<void, XE, XR>
3882
+ ): Effect.Effect<A, E | XE, R | XR> =>
3883
+ onExit(self, (exit) => {
3884
+ if (!predicate(exit)) {
3885
+ return void_
3886
+ }
3887
+ return f(exit)
3888
+ })
3889
+ )
3890
+
3891
+ /** @internal */
3892
+ export const onExitFilter: {
3893
+ <A, E, XE, XR, B, X>(
3894
+ filter: Filter.Filter<Exit.Exit<NoInfer<A>, NoInfer<E>>, B, X>,
3895
+ f: (b: B, exit: Exit.Exit<NoInfer<A>, NoInfer<E>>) => Effect.Effect<void, XE, XR>
3896
+ ): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | XE, R | XR>
3897
+ <A, E, R, XE, XR, B, X>(
3898
+ self: Effect.Effect<A, E, R>,
3899
+ filter: Filter.Filter<Exit.Exit<NoInfer<A>, NoInfer<E>>, B, X>,
3900
+ f: (b: B, exit: Exit.Exit<NoInfer<A>, NoInfer<E>>) => Effect.Effect<void, XE, XR>
3901
+ ): Effect.Effect<A, E | XE, R | XR>
3902
+ } = dual(
3903
+ 3,
3904
+ <A, E, R, XE, XR, B, X>(
3905
+ self: Effect.Effect<A, E, R>,
3906
+ filter: Filter.Filter<Exit.Exit<NoInfer<A>, NoInfer<E>>, B, X>,
3907
+ f: (b: B, exit: Exit.Exit<NoInfer<A>, NoInfer<E>>) => Effect.Effect<void, XE, XR>
3785
3908
  ): Effect.Effect<A, E | XE, R | XR> =>
3786
3909
  onExit(self, (exit) => {
3787
- const pass = Filter.apply(filter, exit)
3788
- return Result.isFailure(pass) ? void_ : f(pass.success as any, exit)
3910
+ const b = filter(exit)
3911
+ return Result.isFailure(b) ? void_ : f(b.success, exit)
3789
3912
  })
3790
3913
  )
3791
3914
 
@@ -3803,37 +3926,66 @@ export const onError: {
3803
3926
  <A, E, R, XE, XR>(
3804
3927
  self: Effect.Effect<A, E, R>,
3805
3928
  f: (cause: Cause.Cause<NoInfer<E>>) => Effect.Effect<void, XE, XR>
3806
- ): Effect.Effect<A, E | XE, R | XR> => onExitIf(self, exitFilterCause as any, f as any) as any
3929
+ ): Effect.Effect<A, E | XE, R | XR> => onExitFilter(self, exitFilterCause as any, f as any) as any
3807
3930
  )
3808
3931
 
3809
3932
  /** @internal */
3810
3933
  export const onErrorIf: {
3811
- <E, Result extends Filter.ResultOrBool, XE, XR>(
3812
- filter: Filter.OrPredicate<Cause.Cause<E>, Result>,
3813
- f: (failure: Filter.Pass<Cause.Cause<E>, Result>, cause: Cause.Cause<E>) => Effect.Effect<void, XE, XR>
3934
+ <E, XE, XR>(
3935
+ predicate: Predicate.Predicate<Cause.Cause<E>>,
3936
+ f: (cause: Cause.Cause<E>) => Effect.Effect<void, XE, XR>
3814
3937
  ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | XE, R | XR>
3815
- <A, E, R, XE, XR, Result extends Filter.ResultOrBool>(
3938
+ <A, E, R, XE, XR>(
3816
3939
  self: Effect.Effect<A, E, R>,
3817
- filter: Filter.OrPredicate<Cause.Cause<E>, Result>,
3818
- f: (failure: Filter.Pass<Cause.Cause<E>, Result>, cause: Cause.Cause<E>) => Effect.Effect<void, XE, XR>
3940
+ predicate: Predicate.Predicate<Cause.Cause<E>>,
3941
+ f: (cause: Cause.Cause<E>) => Effect.Effect<void, XE, XR>
3819
3942
  ): Effect.Effect<A, E | XE, R | XR>
3820
3943
  } = dual(
3821
3944
  3,
3822
- <A, E, R, XE, XR, Result extends Filter.ResultOrBool>(
3945
+ <A, E, R, XE, XR>(
3823
3946
  self: Effect.Effect<A, E, R>,
3824
- filter: Filter.OrPredicate<Cause.Cause<E>, Result>,
3825
- f: (failure: Filter.Pass<Cause.Cause<E>, Result>, cause: Cause.Cause<E>) => Effect.Effect<void, XE, XR>
3947
+ predicate: Predicate.Predicate<Cause.Cause<E>>,
3948
+ f: (cause: Cause.Cause<E>) => Effect.Effect<void, XE, XR>
3826
3949
  ): Effect.Effect<A, E | XE, R | XR> =>
3827
3950
  onExitIf(
3828
3951
  self,
3829
- ((exit: Exit.Exit<any, any>) => {
3830
- if (exit._tag !== "Failure") return Result.fail(exit)
3831
- return Filter.apply(filter, exit.cause)
3832
- }) as any,
3833
- (eb: any, exit: any) => f(eb, (exit as Exit.Failure<any, any>).cause)
3952
+ (exit): exit is Exit.Failure<A, E> => {
3953
+ if (exit._tag !== "Failure") {
3954
+ return false
3955
+ }
3956
+ return predicate(exit.cause)
3957
+ },
3958
+ (exit) => f((exit as Exit.Failure<A, E>).cause)
3834
3959
  ) as any
3835
3960
  )
3836
3961
 
3962
+ /** @internal */
3963
+ export const onErrorFilter: {
3964
+ <A, E, EB, X, XE, XR>(
3965
+ filter: Filter.Filter<Cause.Cause<E>, EB, X>,
3966
+ f: (failure: EB, cause: Cause.Cause<E>) => Effect.Effect<void, XE, XR>
3967
+ ): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | XE, R | XR>
3968
+ <A, E, R, EB, X, XE, XR>(
3969
+ self: Effect.Effect<A, E, R>,
3970
+ filter: Filter.Filter<Cause.Cause<E>, EB, X>,
3971
+ f: (failure: EB, cause: Cause.Cause<E>) => Effect.Effect<void, XE, XR>
3972
+ ): Effect.Effect<A, E | XE, R | XR>
3973
+ } = dual(
3974
+ 3,
3975
+ <A, E, R, EB, X, XE, XR>(
3976
+ self: Effect.Effect<A, E, R>,
3977
+ filter: Filter.Filter<Cause.Cause<E>, EB, X>,
3978
+ f: (failure: EB, cause: Cause.Cause<E>) => Effect.Effect<void, XE, XR>
3979
+ ): Effect.Effect<A, E | XE, R | XR> =>
3980
+ onExit(self, (exit) => {
3981
+ if (exit._tag !== "Failure") {
3982
+ return void_
3983
+ }
3984
+ const result = filter(exit.cause)
3985
+ return Result.isFailure(result) ? void_ : f(result.success, exit.cause)
3986
+ })
3987
+ )
3988
+
3837
3989
  /** @internal */
3838
3990
  export const onInterrupt: {
3839
3991
  <XE, XR>(
@@ -3848,8 +4000,7 @@ export const onInterrupt: {
3848
4000
  <A, E, R, XE, XR>(
3849
4001
  self: Effect.Effect<A, E, R>,
3850
4002
  finalizer: (interruptors: ReadonlySet<number>) => Effect.Effect<void, XE, XR>
3851
- ): Effect.Effect<A, E | XE, R | XR> =>
3852
- onErrorIf<E, Result.Result<Set<number>, Cause.Cause<E>>, XE, XR>(causeFilterInterruptors, finalizer)(self)
4003
+ ): Effect.Effect<A, E | XE, R | XR> => onErrorFilter(causeFilterInterruptors as any, finalizer)(self) as any
3853
4004
  )
3854
4005
 
3855
4006
  /** @internal */
@@ -3873,19 +4024,19 @@ export const acquireUseRelease = <Resource, E, R, A, E2, R2, E3, R3>(
3873
4024
 
3874
4025
  /** @internal */
3875
4026
  export const cachedInvalidateWithTTL: {
3876
- (timeToLive: Duration.DurationInput): <A, E, R>(
4027
+ (timeToLive: Duration.Input): <A, E, R>(
3877
4028
  self: Effect.Effect<A, E, R>
3878
4029
  ) => Effect.Effect<[Effect.Effect<A, E, R>, Effect.Effect<void>]>
3879
4030
  <A, E, R>(
3880
4031
  self: Effect.Effect<A, E, R>,
3881
- timeToLive: Duration.DurationInput
4032
+ timeToLive: Duration.Input
3882
4033
  ): Effect.Effect<[Effect.Effect<A, E, R>, Effect.Effect<void>]>
3883
4034
  } = dual(2, <A, E, R>(
3884
4035
  self: Effect.Effect<A, E, R>,
3885
- ttl: Duration.DurationInput
4036
+ ttl: Duration.Input
3886
4037
  ): Effect.Effect<[Effect.Effect<A, E, R>, Effect.Effect<void>]> =>
3887
4038
  sync(() => {
3888
- const ttlMillis = Duration.toMillis(Duration.fromDurationInputUnsafe(ttl))
4039
+ const ttlMillis = Duration.toMillis(Duration.fromInputUnsafe(ttl))
3889
4040
  const isFinite = Number.isFinite(ttlMillis)
3890
4041
  const latch = makeLatchUnsafe(false)
3891
4042
  let expiresAt = 0
@@ -3918,17 +4069,17 @@ export const cachedInvalidateWithTTL: {
3918
4069
  /** @internal */
3919
4070
  export const cachedWithTTL: {
3920
4071
  (
3921
- timeToLive: Duration.DurationInput
4072
+ timeToLive: Duration.Input
3922
4073
  ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<Effect.Effect<A, E, R>>
3923
4074
  <A, E, R>(
3924
4075
  self: Effect.Effect<A, E, R>,
3925
- timeToLive: Duration.DurationInput
4076
+ timeToLive: Duration.Input
3926
4077
  ): Effect.Effect<Effect.Effect<A, E, R>>
3927
4078
  } = dual(
3928
4079
  2,
3929
4080
  <A, E, R>(
3930
4081
  self: Effect.Effect<A, E, R>,
3931
- timeToLive: Duration.DurationInput
4082
+ timeToLive: Duration.Input
3932
4083
  ): Effect.Effect<Effect.Effect<A, E, R>> => map(cachedInvalidateWithTTL(self, timeToLive), (tuple) => tuple[0])
3933
4084
  )
3934
4085
 
@@ -4074,10 +4225,147 @@ export const partition: {
4074
4225
  ): Effect.Effect<[excluded: Array<E>, satisfying: Array<B>], never, R> =>
4075
4226
  map(
4076
4227
  forEach(elements, (a, i) => result(f(a, i)), options),
4077
- (results) => Arr.partitionMap(results, identity)
4228
+ (results) => Arr.partition(results, identity)
4078
4229
  )
4079
4230
  )
4080
4231
 
4232
+ /** @internal */
4233
+ export const validate: {
4234
+ <A, B, E, R>(
4235
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
4236
+ options?: {
4237
+ readonly concurrency?: Concurrency | undefined
4238
+ readonly discard?: false | undefined
4239
+ } | undefined
4240
+ ): (elements: Iterable<A>) => Effect.Effect<Array<B>, Arr.NonEmptyArray<E>, R>
4241
+ <A, B, E, R>(
4242
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
4243
+ options: {
4244
+ readonly concurrency?: Concurrency | undefined
4245
+ readonly discard: true
4246
+ }
4247
+ ): (elements: Iterable<A>) => Effect.Effect<void, Arr.NonEmptyArray<E>, R>
4248
+ <A, B, E, R>(
4249
+ elements: Iterable<A>,
4250
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
4251
+ options?: {
4252
+ readonly concurrency?: Concurrency | undefined
4253
+ readonly discard?: false | undefined
4254
+ } | undefined
4255
+ ): Effect.Effect<Array<B>, Arr.NonEmptyArray<E>, R>
4256
+ <A, B, E, R>(
4257
+ elements: Iterable<A>,
4258
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
4259
+ options: {
4260
+ readonly concurrency?: Concurrency | undefined
4261
+ readonly discard: true
4262
+ }
4263
+ ): Effect.Effect<void, Arr.NonEmptyArray<E>, R>
4264
+ } = dual(
4265
+ (args) => isIterable(args[0]) && !isEffect(args[0]),
4266
+ <A, B, E, R>(
4267
+ elements: Iterable<A>,
4268
+ f: (a: A, i: number) => Effect.Effect<B, E, R>,
4269
+ options?: {
4270
+ readonly concurrency?: Concurrency | undefined
4271
+ readonly discard?: boolean | undefined
4272
+ } | undefined
4273
+ ): Effect.Effect<Array<B> | void, Arr.NonEmptyArray<E>, R> =>
4274
+ flatMap(
4275
+ partition(elements, f, { concurrency: options?.concurrency }),
4276
+ ([excluded, satisfying]) => {
4277
+ if (Arr.isArrayNonEmpty(excluded)) {
4278
+ return fail(excluded)
4279
+ }
4280
+ return options?.discard ? void_ : succeed(satisfying)
4281
+ }
4282
+ )
4283
+ )
4284
+
4285
+ /** @internal */
4286
+ export const findFirst: {
4287
+ <A, E, R>(
4288
+ predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
4289
+ ): (elements: Iterable<A>) => Effect.Effect<Option.Option<A>, E, R>
4290
+ <A, E, R>(
4291
+ elements: Iterable<A>,
4292
+ predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>
4293
+ ): Effect.Effect<Option.Option<A>, E, R>
4294
+ } = dual(
4295
+ (args) => isIterable(args[0]) && !isEffect(args[0]),
4296
+ <A, E, R>(
4297
+ elements: Iterable<A>,
4298
+ predicate: (a: A, i: number) => Effect.Effect<boolean, E, R>
4299
+ ): Effect.Effect<Option.Option<A>, E, R> =>
4300
+ suspend(() => {
4301
+ const iterator = elements[Symbol.iterator]()
4302
+ const next = iterator.next()
4303
+ if (!next.done) {
4304
+ return findFirstLoop(iterator, 0, predicate, next.value)
4305
+ }
4306
+ return succeed(Option.none())
4307
+ })
4308
+ )
4309
+
4310
+ const findFirstLoop = <A, E, R>(
4311
+ iterator: Iterator<A>,
4312
+ index: number,
4313
+ predicate: (a: A, i: number) => Effect.Effect<boolean, E, R>,
4314
+ value: A
4315
+ ): Effect.Effect<Option.Option<A>, E, R> =>
4316
+ flatMap(predicate(value, index), (keep) => {
4317
+ if (keep) {
4318
+ return succeed(Option.some(value))
4319
+ }
4320
+ const next = iterator.next()
4321
+ if (!next.done) {
4322
+ return findFirstLoop(iterator, index + 1, predicate, next.value)
4323
+ }
4324
+ return succeed(Option.none())
4325
+ })
4326
+
4327
+ /** @internal */
4328
+ export const findFirstFilter: {
4329
+ <A, B, X, E, R>(
4330
+ filter: (input: NoInfer<A>, i: number) => Effect.Effect<Result.Result<B, X>, E, R>
4331
+ ): (elements: Iterable<A>) => Effect.Effect<Option.Option<B>, E, R>
4332
+ <A, B, X, E, R>(
4333
+ elements: Iterable<A>,
4334
+ filter: (input: NoInfer<A>, i: number) => Effect.Effect<Result.Result<B, X>, E, R>
4335
+ ): Effect.Effect<Option.Option<B>, E, R>
4336
+ } = dual(
4337
+ (args) => isIterable(args[0]) && !isEffect(args[0]),
4338
+ <A, B, X, E, R>(
4339
+ elements: Iterable<A>,
4340
+ filter: (input: A, i: number) => Effect.Effect<Result.Result<B, X>, E, R>
4341
+ ): Effect.Effect<Option.Option<B>, E, R> =>
4342
+ suspend(() => {
4343
+ const iterator = elements[Symbol.iterator]()
4344
+ const next = iterator.next()
4345
+ if (!next.done) {
4346
+ return findFirstFilterLoop(iterator, 0, filter, next.value)
4347
+ }
4348
+ return succeed(Option.none())
4349
+ })
4350
+ )
4351
+
4352
+ const findFirstFilterLoop = <A, B, X, E, R>(
4353
+ iterator: Iterator<A>,
4354
+ index: number,
4355
+ filter: (input: A, i: number) => Effect.Effect<Result.Result<B, X>, E, R>,
4356
+ value: A
4357
+ ): Effect.Effect<Option.Option<B>, E, R> =>
4358
+ flatMap(filter(value, index), (result) => {
4359
+ if (Result.isSuccess(result)) {
4360
+ return succeed(Option.some(result.success))
4361
+ }
4362
+ const next = iterator.next()
4363
+ if (!next.done) {
4364
+ return findFirstFilterLoop(iterator, index + 1, filter, next.value)
4365
+ }
4366
+ return succeed(Option.none())
4367
+ })
4368
+
4081
4369
  /** @internal */
4082
4370
  export const whileLoop: <A, E, R>(options: {
4083
4371
  readonly while: LazyArg<boolean>
@@ -4249,33 +4537,85 @@ export const filterOrElse: {
4249
4537
  refinement: Predicate.Refinement<NoInfer<A>, B>,
4250
4538
  orElse: (a: EqualsWith<A, B, NoInfer<A>, Exclude<NoInfer<A>, B>>) => Effect.Effect<C, E2, R2>
4251
4539
  ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B | C, E2 | E, R2 | R>
4252
- <A, Result extends Filter.ResultOrBool, C, E2, R2>(
4253
- filter: Filter.OrPredicate<NoInfer<A>, Result>,
4254
- orElse: (a: Filter.Fail<A, Result>) => Effect.Effect<C, E2, R2>
4255
- ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<Filter.Pass<A, Result> | C, E2 | E, R2 | R>
4540
+ <A, C, E2, R2>(
4541
+ predicate: Predicate.Predicate<NoInfer<A>>,
4542
+ orElse: (a: NoInfer<A>) => Effect.Effect<C, E2, R2>
4543
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | C, E2 | E, R2 | R>
4256
4544
  <A, E, R, C, E2, R2, B extends A>(
4257
4545
  self: Effect.Effect<A, E, R>,
4258
4546
  refinement: Predicate.Refinement<A, B>,
4259
4547
  orElse: (a: EqualsWith<A, B, A, Exclude<A, B>>) => Effect.Effect<C, E2, R2>
4260
4548
  ): Effect.Effect<B | C, E | E2, R | R2>
4261
- <A, E, R, Result extends Filter.ResultOrBool, C, E2, R2>(
4549
+ <A, E, R, C, E2, R2>(
4262
4550
  self: Effect.Effect<A, E, R>,
4263
- filter: Filter.OrPredicate<NoInfer<A>, Result>,
4264
- orElse: (a: Filter.Fail<A, Result>) => Effect.Effect<C, E2, R2>
4265
- ): Effect.Effect<Filter.Pass<A, Result> | C, E | E2, R | R2>
4266
- } = dual(3, <A, E, R, Result extends Filter.ResultOrBool, C, E2, R2>(
4551
+ predicate: Predicate.Predicate<NoInfer<A>>,
4552
+ orElse: (a: NoInfer<A>) => Effect.Effect<C, E2, R2>
4553
+ ): Effect.Effect<A | C, E | E2, R | R2>
4554
+ } = dual(3, <A, E, R, B, E2, R2>(
4267
4555
  self: Effect.Effect<A, E, R>,
4268
- filter: Filter.OrPredicate<NoInfer<A>, Result>,
4269
- orElse: (a: Filter.Fail<A, Result>) => Effect.Effect<C, E2, R2>
4270
- ): Effect.Effect<Filter.Pass<A, Result> | C, E | E2, R | R2> =>
4556
+ predicate: Predicate.Predicate<A>,
4557
+ orElse: (a: A) => Effect.Effect<B, E2, R2>
4558
+ ): Effect.Effect<A | B, E | E2, R | R2> =>
4559
+ flatMap(
4560
+ self,
4561
+ (a) => predicate(a) ? succeed<A | B>(a) : orElse(a)
4562
+ ))
4563
+
4564
+ /** @internal */
4565
+ export const filterMapOrElse: {
4566
+ <A, B, X, C, E2, R2>(
4567
+ filter: Filter.Filter<NoInfer<A>, B, X>,
4568
+ orElse: (x: X) => Effect.Effect<C, E2, R2>
4569
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B | C, E2 | E, R2 | R>
4570
+ <A, E, R, B, X, C, E2, R2>(
4571
+ self: Effect.Effect<A, E, R>,
4572
+ filter: Filter.Filter<NoInfer<A>, B, X>,
4573
+ orElse: (x: X) => Effect.Effect<C, E2, R2>
4574
+ ): Effect.Effect<B | C, E | E2, R | R2>
4575
+ } = dual(3, <A, E, R, B, X, C, E2, R2>(
4576
+ self: Effect.Effect<A, E, R>,
4577
+ filter: Filter.Filter<NoInfer<A>, B, X>,
4578
+ orElse: (x: X) => Effect.Effect<C, E2, R2>
4579
+ ): Effect.Effect<B | C, E | E2, R | R2> =>
4271
4580
  flatMap(
4272
4581
  self,
4273
4582
  (a) => {
4274
- const result = Filter.apply(filter, a)
4275
- return Result.isFailure(result) ? orElse(result.failure) : succeed(result.success) as any
4583
+ const result = filter(a)
4584
+ return (Result.isFailure(result)
4585
+ ? orElse(result.failure)
4586
+ : succeed(result.success)) as Effect.Effect<B | C, E2, R2>
4276
4587
  }
4277
4588
  ))
4278
4589
 
4590
+ /* @internal */
4591
+ export const filterMapOrFail: {
4592
+ <A, B, X, E2>(
4593
+ filter: Filter.Filter<NoInfer<A>, B, X>,
4594
+ orFailWith: (x: X) => E2
4595
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E2 | E, R>
4596
+ <A, B, X>(
4597
+ filter: Filter.Filter<NoInfer<A>, B, X>
4598
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, Cause.NoSuchElementError | E, R>
4599
+ <A, E, R, B, X, E2>(
4600
+ self: Effect.Effect<A, E, R>,
4601
+ filter: Filter.Filter<NoInfer<A>, B, X>,
4602
+ orFailWith: (x: X) => E2
4603
+ ): Effect.Effect<B, E2 | E, R>
4604
+ <A, E, R, B, X>(
4605
+ self: Effect.Effect<A, E, R>,
4606
+ filter: Filter.Filter<NoInfer<A>, B, X>
4607
+ ): Effect.Effect<B, Cause.NoSuchElementError | E, R>
4608
+ } = dual((args) => isEffect(args[0]), <A, E, R, B, X, E2>(
4609
+ self: Effect.Effect<A, E, R>,
4610
+ filter: Filter.Filter<NoInfer<A>, B, X>,
4611
+ orFailWith?: (x: X) => E2
4612
+ ): Effect.Effect<B, E2 | Cause.NoSuchElementError | E, R> =>
4613
+ filterMapOrElse(
4614
+ self,
4615
+ filter,
4616
+ orFailWith ? (x: X) => fail(orFailWith(x)) : () => fail(new NoSuchElementError() as E2)
4617
+ ))
4618
+
4279
4619
  /** @internal */
4280
4620
  export const filter: {
4281
4621
  <A, B extends A>(
@@ -4284,13 +4624,6 @@ export const filter: {
4284
4624
  <A>(
4285
4625
  predicate: Predicate.Predicate<NoInfer<A>>
4286
4626
  ): (elements: Iterable<A>) => Effect.Effect<Array<A>>
4287
- <A, B, X>(
4288
- filter: Filter.Filter<NoInfer<A>, B, X>
4289
- ): (elements: Iterable<A>) => Effect.Effect<Array<B>>
4290
- <A, B, X, E, R>(
4291
- filter: Filter.FilterEffect<NoInfer<A>, B, X, E, R>,
4292
- options?: { readonly concurrency?: Concurrency | undefined }
4293
- ): (elements: Iterable<A>) => Effect.Effect<Array<B>, E, R>
4294
4627
  <A, E, R>(
4295
4628
  predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>,
4296
4629
  options?: { readonly concurrency?: Concurrency | undefined }
@@ -4303,15 +4636,6 @@ export const filter: {
4303
4636
  elements: Iterable<A>,
4304
4637
  predicate: Predicate.Predicate<A>
4305
4638
  ): Effect.Effect<Array<A>>
4306
- <A, B, X>(
4307
- elements: Iterable<A>,
4308
- filter: Filter.Filter<NoInfer<A>, B, X>
4309
- ): Effect.Effect<Array<B>>
4310
- <A, B, X, E, R>(
4311
- elements: Iterable<A>,
4312
- filter: Filter.FilterEffect<NoInfer<A>, B, X, E, R>,
4313
- options?: { readonly concurrency?: Concurrency | undefined }
4314
- ): Effect.Effect<Array<B>, E, R>
4315
4639
  <A, E, R>(
4316
4640
  iterable: Iterable<A>,
4317
4641
  predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>,
@@ -4319,36 +4643,27 @@ export const filter: {
4319
4643
  ): Effect.Effect<Array<A>, E, R>
4320
4644
  } = dual(
4321
4645
  (args) => isIterable(args[0]) && !isEffect(args[0]),
4322
- <A, B, X, E, R>(
4646
+ <A, E, R>(
4323
4647
  elements: Iterable<A>,
4324
- filter:
4325
- | Filter.FilterEffect<A, B, X, E, R>
4648
+ predicate:
4326
4649
  | Predicate.Predicate<A>
4327
4650
  | ((a: A, i: number) => Effect.Effect<boolean, E, R>),
4328
4651
  options?: { readonly concurrency?: Concurrency | undefined }
4329
- ): Effect.Effect<Array<B>, E, R> =>
4652
+ ): Effect.Effect<Array<A>, E, R> =>
4330
4653
  suspend(() => {
4331
- const out: Array<any> = []
4654
+ const out: Array<A> = []
4332
4655
  return as(
4333
4656
  forEach(
4334
4657
  elements,
4335
4658
  (a, i) => {
4336
- const result = (filter as Function)(a, i)
4659
+ const result = (predicate as Function)(a, i)
4337
4660
  if (typeof result === "boolean") {
4338
4661
  if (result) out.push(a)
4339
4662
  return void_ as any
4340
4663
  }
4341
- if (!isEffect(result)) {
4342
- if (!Result.isFailure(result)) {
4343
- out.push(result.success)
4344
- }
4345
- return void_ as any
4346
- }
4347
- return map(result, (r: any) => {
4348
- if (typeof r === "boolean") {
4349
- if (r) out.push(a)
4350
- } else if (!Result.isFailure(r)) {
4351
- out.push(r.success)
4664
+ return map(result, (keep) => {
4665
+ if (keep) {
4666
+ out.push(a)
4352
4667
  }
4353
4668
  })
4354
4669
  },
@@ -4362,6 +4677,72 @@ export const filter: {
4362
4677
  })
4363
4678
  )
4364
4679
 
4680
+ /** @internal */
4681
+ export const filterMap: {
4682
+ <A, B, X>(
4683
+ filter: Filter.Filter<NoInfer<A>, B, X>
4684
+ ): (elements: Iterable<A>) => Effect.Effect<Array<B>>
4685
+ <A, B, X>(
4686
+ elements: Iterable<A>,
4687
+ filter: Filter.Filter<NoInfer<A>, B, X>
4688
+ ): Effect.Effect<Array<B>>
4689
+ } = dual(
4690
+ (args) => isIterable(args[0]) && !isEffect(args[0]),
4691
+ <A, B, X>(
4692
+ elements: Iterable<A>,
4693
+ filter: Filter.Filter<A, B, X>
4694
+ ): Effect.Effect<Array<B>> =>
4695
+ suspend(() => {
4696
+ const out: Array<B> = []
4697
+ for (const a of elements) {
4698
+ const result = filter(a)
4699
+ if (Result.isSuccess(result)) {
4700
+ out.push(result.success)
4701
+ }
4702
+ }
4703
+ return succeed(out)
4704
+ })
4705
+ )
4706
+
4707
+ /** @internal */
4708
+ export const filterMapEffect: {
4709
+ <A, B, X, E, R>(
4710
+ filter: Filter.FilterEffect<NoInfer<A>, B, X, E, R>,
4711
+ options?: { readonly concurrency?: Concurrency | undefined }
4712
+ ): (elements: Iterable<A>) => Effect.Effect<Array<B>, E, R>
4713
+ <A, B, X, E, R>(
4714
+ elements: Iterable<A>,
4715
+ filter: Filter.FilterEffect<NoInfer<A>, B, X, E, R>,
4716
+ options?: { readonly concurrency?: Concurrency | undefined }
4717
+ ): Effect.Effect<Array<B>, E, R>
4718
+ } = dual(
4719
+ (args) => isIterable(args[0]) && !isEffect(args[0]),
4720
+ <A, B, X, E, R>(
4721
+ elements: Iterable<A>,
4722
+ filter: Filter.FilterEffect<A, B, X, E, R>,
4723
+ options?: { readonly concurrency?: Concurrency | undefined }
4724
+ ): Effect.Effect<Array<B>, E, R> =>
4725
+ suspend(() => {
4726
+ const out: Array<B> = []
4727
+ return as(
4728
+ forEach(
4729
+ elements,
4730
+ (a) =>
4731
+ map(filter(a), (result) => {
4732
+ if (Result.isSuccess(result)) {
4733
+ out.push(result.success)
4734
+ }
4735
+ }),
4736
+ {
4737
+ discard: true,
4738
+ concurrency: options?.concurrency
4739
+ }
4740
+ ),
4741
+ out
4742
+ )
4743
+ })
4744
+ )
4745
+
4365
4746
  // ----------------------------------------------------------------------------
4366
4747
  // do notation
4367
4748
  // ----------------------------------------------------------------------------
@@ -4588,7 +4969,8 @@ export const forkScoped: {
4588
4969
  readonly startImmediately?: boolean | undefined
4589
4970
  readonly uninterruptible?: boolean | "inherit" | undefined
4590
4971
  } | undefined
4591
- ): [Arg] extends [Effect.Effect<infer _A, infer _E, infer _R>] ? Effect.Effect<Fiber.Fiber<_A, _E>, never, _R>
4972
+ ): [Arg] extends [Effect.Effect<infer _A, infer _E, infer _R>] ?
4973
+ Effect.Effect<Fiber.Fiber<_A, _E>, never, _R | Scope.Scope>
4592
4974
  : <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<Fiber.Fiber<A, E>, never, R | Scope.Scope>
4593
4975
  } = dual((args) => isEffect(args[0]), <A, E, R>(
4594
4976
  self: Effect.Effect<A, E, R>,
@@ -4772,25 +5154,27 @@ class Semaphore {
4772
5154
  return this.permits - this.taken
4773
5155
  }
4774
5156
 
4775
- readonly take = (n: number): Effect.Effect<number> =>
4776
- callback<number>((resume) => {
5157
+ readonly take = (n: number): Effect.Effect<number> => {
5158
+ const take: Effect.Effect<number> = suspend(() => {
4777
5159
  if (this.free < n) {
4778
- const observer = () => {
4779
- if (this.free < n) {
4780
- return
5160
+ return callback((resume) => {
5161
+ if (this.free >= n) return resume(take)
5162
+ const observer = () => {
5163
+ if (this.free < n) return
5164
+ this.waiters.delete(observer)
5165
+ resume(take)
4781
5166
  }
4782
- this.waiters.delete(observer)
4783
- this.taken += n
4784
- resume(succeed(n))
4785
- }
4786
- this.waiters.add(observer)
4787
- return sync(() => {
4788
- this.waiters.delete(observer)
5167
+ this.waiters.add(observer)
5168
+ return sync(() => {
5169
+ this.waiters.delete(observer)
5170
+ })
4789
5171
  })
4790
5172
  }
4791
5173
  this.taken += n
4792
- return resume(succeed(n))
5174
+ return succeed(n)
4793
5175
  })
5176
+ return take
5177
+ }
4794
5178
 
4795
5179
  updateTakenUnsafe(fiber: Fiber.Fiber<any, any>, f: (n: number) => number): Effect.Effect<number> {
4796
5180
  this.taken = f(this.taken)
@@ -4828,7 +5212,10 @@ class Semaphore {
4828
5212
 
4829
5213
  readonly withPermits = (n: number) => <A, E, R>(self: Effect.Effect<A, E, R>) =>
4830
5214
  uninterruptibleMask((restore) =>
4831
- flatMap(restore(this.take(n)), (permits) => ensuring(restore(self), this.release(permits)))
5215
+ flatMap(
5216
+ restore(this.take(n)),
5217
+ (permits) => onExitPrimitive(restore(self), () => this.release(permits), true)
5218
+ )
4832
5219
  )
4833
5220
 
4834
5221
  readonly withPermit = this.withPermits(1)
@@ -4854,7 +5241,7 @@ export const makeSemaphore = (permits: number) => sync(() => makeSemaphoreUnsafe
4854
5241
  const succeedTrue = succeed(true)
4855
5242
  const succeedFalse = succeed(false)
4856
5243
 
4857
- class Latch implements Effect.Latch {
5244
+ class Latch implements _Latch.Latch {
4858
5245
  waiters: Array<(_: Effect.Effect<void>) => void> = []
4859
5246
  scheduled = false
4860
5247
  private isOpen: boolean
@@ -4914,7 +5301,7 @@ class Latch implements Effect.Latch {
4914
5301
  }
4915
5302
 
4916
5303
  /** @internal */
4917
- export const makeLatchUnsafe = (open?: boolean | undefined): Effect.Latch => new Latch(open ?? false)
5304
+ export const makeLatchUnsafe = (open?: boolean | undefined): _Latch.Latch => new Latch(open ?? false)
4918
5305
 
4919
5306
  /** @internal */
4920
5307
  export const makeLatch = (open?: boolean | undefined) => sync(() => makeLatchUnsafe(open))
@@ -5344,8 +5731,8 @@ export const clockWith = <A, E, R>(f: (clock: Clock.Clock) => Effect.Effect<A, E
5344
5731
  withFiber((fiber) => f(fiber.getRef(ClockRef)))
5345
5732
 
5346
5733
  /** @internal */
5347
- export const sleep = (duration: Duration.DurationInput): Effect.Effect<void> =>
5348
- clockWith((clock) => clock.sleep(Duration.fromDurationInputUnsafe(duration)))
5734
+ export const sleep = (duration: Duration.Input): Effect.Effect<void> =>
5735
+ clockWith((clock) => clock.sleep(Duration.fromInputUnsafe(duration)))
5349
5736
 
5350
5737
  /** @internal */
5351
5738
  export const currentTimeMillis: Effect.Effect<number> = clockWith((clock) => clock.currentTimeMillis)
@@ -5477,6 +5864,40 @@ export const LogToStderr = ServiceMap.Reference<boolean>("effect/Logger/LogToStd
5477
5864
  defaultValue: constFalse
5478
5865
  })
5479
5866
 
5867
+ /** @internal */
5868
+ export const annotateLogsScoped: {
5869
+ (key: string, value: unknown): Effect.Effect<void, never, Scope.Scope>
5870
+ (values: Record<string, unknown>): Effect.Effect<void, never, Scope.Scope>
5871
+ } = function() {
5872
+ const entries = typeof arguments[0] === "string" ?
5873
+ [[arguments[0], arguments[1]]] :
5874
+ Object.entries(arguments[0])
5875
+ return uninterruptible(withFiber((fiber) => {
5876
+ const prev = fiber.getRef(CurrentLogAnnotations)
5877
+ const next = { ...prev }
5878
+ for (let i = 0; i < entries.length; i++) {
5879
+ const [key, value] = entries[i]
5880
+ next[key] = value
5881
+ }
5882
+ fiber.setServices(ServiceMap.add(fiber.services, CurrentLogAnnotations, next))
5883
+ return scopeAddFinalizerExit(ServiceMap.getUnsafe(fiber.services, scopeTag), (_) => {
5884
+ const current = fiber.getRef(CurrentLogAnnotations)
5885
+ const next = { ...current }
5886
+ for (let i = 0; i < entries.length; i++) {
5887
+ const [key, value] = entries[i]
5888
+ if (current[key] !== value) continue
5889
+ if (key in prev) {
5890
+ next[key] = prev[key]
5891
+ } else {
5892
+ delete next[key]
5893
+ }
5894
+ }
5895
+ fiber.setServices(ServiceMap.add(fiber.services, CurrentLogAnnotations, next))
5896
+ return void_
5897
+ })
5898
+ }))
5899
+ }
5900
+
5480
5901
  /** @internal */
5481
5902
  export const LoggerTypeId = "~effect/Logger"
5482
5903
 
@@ -5492,7 +5913,7 @@ const LoggerProto = {
5492
5913
 
5493
5914
  /** @internal */
5494
5915
  export const loggerMake = <Message, Output>(
5495
- log: (options: Logger.Logger.Options<Message>) => Output
5916
+ log: (options: Logger.Options<Message>) => Output
5496
5917
  ): Logger.Logger<Message, Output> => {
5497
5918
  const self = Object.create(LoggerProto)
5498
5919
  self.log = log
@@ -5532,7 +5953,7 @@ export const structuredMessage = (u: unknown): unknown => {
5532
5953
  }
5533
5954
 
5534
5955
  /** @internal */
5535
- export const logWithLevel = (level?: LogLevel.LogLevel) =>
5956
+ export const logWithLevel = (level?: LogLevel.Severity) =>
5536
5957
  (
5537
5958
  ...message: ReadonlyArray<any>
5538
5959
  ): Effect.Effect<void> => {
@@ -5651,7 +6072,7 @@ const prettyLoggerTty = (options: {
5651
6072
  readonly formatDate: (date: Date) => string
5652
6073
  }) => {
5653
6074
  const processIsBun = typeof process === "object" && "isBun" in process && process.isBun === true
5654
- const color = options.colors && processStdoutIsTTY ? withColor : withColorNoop
6075
+ const color = options.colors ? withColor : withColorNoop
5655
6076
  return loggerMake<unknown, void>(
5656
6077
  ({ cause, date, fiber, logLevel, message: message_ }) => {
5657
6078
  const console = fiber.getRef(ConsoleRef)
@@ -5823,3 +6244,55 @@ const undefined_ = succeed(undefined)
5823
6244
 
5824
6245
  /** @internal */
5825
6246
  export { undefined_ as undefined }
6247
+
6248
+ // ----------------------------------------------------------------------------
6249
+ // ErrorReporter
6250
+ // ----------------------------------------------------------------------------
6251
+
6252
+ /** @internal */
6253
+ export const CurrentErrorReporters = ServiceMap.Reference<
6254
+ ReadonlySet<ErrorReporter>
6255
+ >("effect/ErrorReporter/CurrentErrorReporters", {
6256
+ defaultValue: () => new Set()
6257
+ })
6258
+
6259
+ /** @internal */
6260
+ export const withErrorReporting: <
6261
+ Arg extends Effect.Effect<any, any, any> | {
6262
+ readonly defectsOnly?: boolean | undefined
6263
+ } | undefined = {
6264
+ readonly defectsOnly?: boolean | undefined
6265
+ }
6266
+ >(
6267
+ effectOrOptions: Arg,
6268
+ options?: {
6269
+ readonly defectsOnly?: boolean | undefined
6270
+ } | undefined
6271
+ ) => [Arg] extends [Effect.Effect<infer _A, infer _E, infer _R>] ? Arg
6272
+ : <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R> = dual(
6273
+ (args) => isEffect(args[0]),
6274
+ <A, E, R>(
6275
+ self: Effect.Effect<A, E, R>,
6276
+ options?: {
6277
+ readonly defectsOnly?: boolean | undefined
6278
+ } | undefined
6279
+ ): Effect.Effect<A, E, R> =>
6280
+ onError(self, (cause) =>
6281
+ withFiber((fiber) => {
6282
+ reportCauseUnsafe(fiber, cause, options?.defectsOnly)
6283
+ return void_
6284
+ }))
6285
+ )
6286
+
6287
+ /** @internal */
6288
+ export const reportCauseUnsafe = (
6289
+ fiber: Fiber.Fiber<unknown, unknown>,
6290
+ cause: Cause.Cause<unknown>,
6291
+ defectsOnly?: boolean
6292
+ ) => {
6293
+ const reporters = fiber.getRef(CurrentErrorReporters)
6294
+ if (reporters.size === 0) return
6295
+ if (defectsOnly && !hasDies(cause)) return
6296
+ const opts = { cause, fiber, timestamp: fiber.getRef(ClockRef).currentTimeNanosUnsafe() }
6297
+ reporters.forEach((reporter) => reporter.report(opts))
6298
+ }