effect 3.10.18 → 3.11.0

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 (448) hide show
  1. package/dist/cjs/Array.js +206 -0
  2. package/dist/cjs/Array.js.map +1 -1
  3. package/dist/cjs/BigDecimal.js +181 -24
  4. package/dist/cjs/BigDecimal.js.map +1 -1
  5. package/dist/cjs/BigInt.js +54 -0
  6. package/dist/cjs/BigInt.js.map +1 -1
  7. package/dist/cjs/Boolean.js +24 -0
  8. package/dist/cjs/Boolean.js.map +1 -1
  9. package/dist/cjs/Brand.js +4 -0
  10. package/dist/cjs/Brand.js.map +1 -1
  11. package/dist/cjs/Channel.js +44 -4
  12. package/dist/cjs/Channel.js.map +1 -1
  13. package/dist/cjs/Chunk.js +8 -0
  14. package/dist/cjs/Chunk.js.map +1 -1
  15. package/dist/cjs/Config.js +10 -1
  16. package/dist/cjs/Config.js.map +1 -1
  17. package/dist/cjs/Context.js +50 -1
  18. package/dist/cjs/Context.js.map +1 -1
  19. package/dist/cjs/Cron.js +81 -67
  20. package/dist/cjs/Cron.js.map +1 -1
  21. package/dist/cjs/Data.js +14 -0
  22. package/dist/cjs/Data.js.map +1 -1
  23. package/dist/cjs/DateTime.js +178 -664
  24. package/dist/cjs/DateTime.js.map +1 -1
  25. package/dist/cjs/Duration.js +2 -0
  26. package/dist/cjs/Duration.js.map +1 -1
  27. package/dist/cjs/Effect.js +296 -4
  28. package/dist/cjs/Effect.js.map +1 -1
  29. package/dist/cjs/Either.js +38 -2
  30. package/dist/cjs/Either.js.map +1 -1
  31. package/dist/cjs/FiberHandle.js +6 -0
  32. package/dist/cjs/FiberHandle.js.map +1 -1
  33. package/dist/cjs/FiberMap.js +6 -0
  34. package/dist/cjs/FiberMap.js.map +1 -1
  35. package/dist/cjs/FiberSet.js +6 -0
  36. package/dist/cjs/FiberSet.js.map +1 -1
  37. package/dist/cjs/Function.js +34 -0
  38. package/dist/cjs/Function.js.map +1 -1
  39. package/dist/cjs/GlobalValue.js +2 -0
  40. package/dist/cjs/GlobalValue.js.map +1 -1
  41. package/dist/cjs/HashMap.js.map +1 -1
  42. package/dist/cjs/Inspectable.js +8 -4
  43. package/dist/cjs/Inspectable.js.map +1 -1
  44. package/dist/cjs/Iterable.js +18 -0
  45. package/dist/cjs/Iterable.js.map +1 -1
  46. package/dist/cjs/JSONSchema.js.map +1 -1
  47. package/dist/cjs/List.js +4 -0
  48. package/dist/cjs/List.js.map +1 -1
  49. package/dist/cjs/Logger.js +26 -0
  50. package/dist/cjs/Logger.js.map +1 -1
  51. package/dist/cjs/Mailbox.js +2 -0
  52. package/dist/cjs/Mailbox.js.map +1 -1
  53. package/dist/cjs/ManagedRuntime.js +2 -0
  54. package/dist/cjs/ManagedRuntime.js.map +1 -1
  55. package/dist/cjs/Metric.js +10 -0
  56. package/dist/cjs/Metric.js.map +1 -1
  57. package/dist/cjs/Micro.js +1104 -1069
  58. package/dist/cjs/Micro.js.map +1 -1
  59. package/dist/cjs/Number.js +44 -0
  60. package/dist/cjs/Number.js.map +1 -1
  61. package/dist/cjs/Option.js +70 -0
  62. package/dist/cjs/Option.js.map +1 -1
  63. package/dist/cjs/Order.js +2 -0
  64. package/dist/cjs/Order.js.map +1 -1
  65. package/dist/cjs/Ordering.js +4 -0
  66. package/dist/cjs/Ordering.js.map +1 -1
  67. package/dist/cjs/Predicate.js +68 -0
  68. package/dist/cjs/Predicate.js.map +1 -1
  69. package/dist/cjs/Random.js +4 -0
  70. package/dist/cjs/Random.js.map +1 -1
  71. package/dist/cjs/RateLimiter.js +4 -0
  72. package/dist/cjs/RateLimiter.js.map +1 -1
  73. package/dist/cjs/RcMap.js +2 -0
  74. package/dist/cjs/RcMap.js.map +1 -1
  75. package/dist/cjs/RcRef.js +2 -0
  76. package/dist/cjs/RcRef.js.map +1 -1
  77. package/dist/cjs/Record.js +56 -0
  78. package/dist/cjs/Record.js.map +1 -1
  79. package/dist/cjs/Redacted.js +8 -0
  80. package/dist/cjs/Redacted.js.map +1 -1
  81. package/dist/cjs/RegExp.js +4 -0
  82. package/dist/cjs/RegExp.js.map +1 -1
  83. package/dist/cjs/Request.js +4 -0
  84. package/dist/cjs/Request.js.map +1 -1
  85. package/dist/cjs/RequestResolver.js +2 -0
  86. package/dist/cjs/RequestResolver.js.map +1 -1
  87. package/dist/cjs/Runtime.js +6 -0
  88. package/dist/cjs/Runtime.js.map +1 -1
  89. package/dist/cjs/STM.js.map +1 -1
  90. package/dist/cjs/Schema.js +91 -8
  91. package/dist/cjs/Schema.js.map +1 -1
  92. package/dist/cjs/Sink.js +9 -1
  93. package/dist/cjs/Sink.js.map +1 -1
  94. package/dist/cjs/Stream.js +179 -7
  95. package/dist/cjs/Stream.js.map +1 -1
  96. package/dist/cjs/String.js +62 -0
  97. package/dist/cjs/String.js.map +1 -1
  98. package/dist/cjs/Struct.js +12 -0
  99. package/dist/cjs/Struct.js.map +1 -1
  100. package/dist/cjs/Symbol.js +2 -0
  101. package/dist/cjs/Symbol.js.map +1 -1
  102. package/dist/cjs/Trie.js +56 -0
  103. package/dist/cjs/Trie.js.map +1 -1
  104. package/dist/cjs/Tuple.js +18 -0
  105. package/dist/cjs/Tuple.js.map +1 -1
  106. package/dist/cjs/Utils.js +7 -1
  107. package/dist/cjs/Utils.js.map +1 -1
  108. package/dist/cjs/internal/channel/channelExecutor.js +5 -9
  109. package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
  110. package/dist/cjs/internal/channel.js +156 -130
  111. package/dist/cjs/internal/channel.js.map +1 -1
  112. package/dist/cjs/internal/config.js +13 -4
  113. package/dist/cjs/internal/config.js.map +1 -1
  114. package/dist/cjs/internal/context.js +46 -3
  115. package/dist/cjs/internal/context.js.map +1 -1
  116. package/dist/cjs/internal/dateTime.js +747 -0
  117. package/dist/cjs/internal/dateTime.js.map +1 -0
  118. package/dist/cjs/internal/fiberRuntime.js +34 -11
  119. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  120. package/dist/cjs/internal/groupBy.js +9 -3
  121. package/dist/cjs/internal/groupBy.js.map +1 -1
  122. package/dist/cjs/internal/layer.js +1 -1
  123. package/dist/cjs/internal/layer.js.map +1 -1
  124. package/dist/cjs/internal/mailbox.js +1 -1
  125. package/dist/cjs/internal/mailbox.js.map +1 -1
  126. package/dist/cjs/internal/sink.js +25 -21
  127. package/dist/cjs/internal/sink.js.map +1 -1
  128. package/dist/cjs/internal/stream.js +70 -71
  129. package/dist/cjs/internal/stream.js.map +1 -1
  130. package/dist/cjs/internal/version.js +1 -1
  131. package/dist/cjs/internal/version.js.map +1 -1
  132. package/dist/dts/Array.d.ts +534 -0
  133. package/dist/dts/Array.d.ts.map +1 -1
  134. package/dist/dts/BigDecimal.d.ts +172 -1
  135. package/dist/dts/BigDecimal.d.ts.map +1 -1
  136. package/dist/dts/BigInt.d.ts +114 -0
  137. package/dist/dts/BigInt.d.ts.map +1 -1
  138. package/dist/dts/Boolean.d.ts +56 -0
  139. package/dist/dts/Boolean.d.ts.map +1 -1
  140. package/dist/dts/Brand.d.ts +6 -0
  141. package/dist/dts/Brand.d.ts.map +1 -1
  142. package/dist/dts/Channel.d.ts +66 -5
  143. package/dist/dts/Channel.d.ts.map +1 -1
  144. package/dist/dts/Chunk.d.ts +30 -0
  145. package/dist/dts/Chunk.d.ts.map +1 -1
  146. package/dist/dts/Config.d.ts +25 -1
  147. package/dist/dts/Config.d.ts.map +1 -1
  148. package/dist/dts/Context.d.ts +155 -0
  149. package/dist/dts/Context.d.ts.map +1 -1
  150. package/dist/dts/Cron.d.ts +21 -6
  151. package/dist/dts/Cron.d.ts.map +1 -1
  152. package/dist/dts/Data.d.ts +26 -0
  153. package/dist/dts/Data.d.ts.map +1 -1
  154. package/dist/dts/DateTime.d.ts +192 -49
  155. package/dist/dts/DateTime.d.ts.map +1 -1
  156. package/dist/dts/Duration.d.ts +2 -0
  157. package/dist/dts/Duration.d.ts.map +1 -1
  158. package/dist/dts/Effect.d.ts +658 -1
  159. package/dist/dts/Effect.d.ts.map +1 -1
  160. package/dist/dts/Either.d.ts +84 -2
  161. package/dist/dts/Either.d.ts.map +1 -1
  162. package/dist/dts/FiberHandle.d.ts +6 -0
  163. package/dist/dts/FiberHandle.d.ts.map +1 -1
  164. package/dist/dts/FiberMap.d.ts +6 -0
  165. package/dist/dts/FiberMap.d.ts.map +1 -1
  166. package/dist/dts/FiberSet.d.ts +6 -0
  167. package/dist/dts/FiberSet.d.ts.map +1 -1
  168. package/dist/dts/Function.d.ts +50 -0
  169. package/dist/dts/Function.d.ts.map +1 -1
  170. package/dist/dts/GlobalValue.d.ts +2 -0
  171. package/dist/dts/GlobalValue.d.ts.map +1 -1
  172. package/dist/dts/HashMap.d.ts +6 -0
  173. package/dist/dts/HashMap.d.ts.map +1 -1
  174. package/dist/dts/Inspectable.d.ts.map +1 -1
  175. package/dist/dts/Iterable.d.ts +26 -0
  176. package/dist/dts/Iterable.d.ts.map +1 -1
  177. package/dist/dts/JSONSchema.d.ts +1 -0
  178. package/dist/dts/JSONSchema.d.ts.map +1 -1
  179. package/dist/dts/List.d.ts +20 -0
  180. package/dist/dts/List.d.ts.map +1 -1
  181. package/dist/dts/Logger.d.ts +34 -0
  182. package/dist/dts/Logger.d.ts.map +1 -1
  183. package/dist/dts/Mailbox.d.ts +2 -0
  184. package/dist/dts/Mailbox.d.ts.map +1 -1
  185. package/dist/dts/ManagedRuntime.d.ts +2 -0
  186. package/dist/dts/ManagedRuntime.d.ts.map +1 -1
  187. package/dist/dts/Metric.d.ts +18 -0
  188. package/dist/dts/Metric.d.ts.map +1 -1
  189. package/dist/dts/Micro.d.ts +880 -863
  190. package/dist/dts/Micro.d.ts.map +1 -1
  191. package/dist/dts/Number.d.ts +104 -0
  192. package/dist/dts/Number.d.ts.map +1 -1
  193. package/dist/dts/Option.d.ts +142 -0
  194. package/dist/dts/Option.d.ts.map +1 -1
  195. package/dist/dts/Order.d.ts +2 -0
  196. package/dist/dts/Order.d.ts.map +1 -1
  197. package/dist/dts/Ordering.d.ts +8 -0
  198. package/dist/dts/Ordering.d.ts.map +1 -1
  199. package/dist/dts/Predicate.d.ts +104 -0
  200. package/dist/dts/Predicate.d.ts.map +1 -1
  201. package/dist/dts/Random.d.ts +4 -0
  202. package/dist/dts/Random.d.ts.map +1 -1
  203. package/dist/dts/RateLimiter.d.ts +4 -0
  204. package/dist/dts/RateLimiter.d.ts.map +1 -1
  205. package/dist/dts/RcMap.d.ts +6 -0
  206. package/dist/dts/RcMap.d.ts.map +1 -1
  207. package/dist/dts/RcRef.d.ts +2 -0
  208. package/dist/dts/RcRef.d.ts.map +1 -1
  209. package/dist/dts/Record.d.ts +136 -0
  210. package/dist/dts/Record.d.ts.map +1 -1
  211. package/dist/dts/Redacted.d.ts +8 -0
  212. package/dist/dts/Redacted.d.ts.map +1 -1
  213. package/dist/dts/RegExp.d.ts +4 -0
  214. package/dist/dts/RegExp.d.ts.map +1 -1
  215. package/dist/dts/Request.d.ts +4 -0
  216. package/dist/dts/Request.d.ts.map +1 -1
  217. package/dist/dts/RequestResolver.d.ts +6 -0
  218. package/dist/dts/RequestResolver.d.ts.map +1 -1
  219. package/dist/dts/Runtime.d.ts +18 -0
  220. package/dist/dts/Runtime.d.ts.map +1 -1
  221. package/dist/dts/STM.d.ts +2 -0
  222. package/dist/dts/STM.d.ts.map +1 -1
  223. package/dist/dts/Schema.d.ts +90 -0
  224. package/dist/dts/Schema.d.ts.map +1 -1
  225. package/dist/dts/Sink.d.ts +8 -0
  226. package/dist/dts/Sink.d.ts.map +1 -1
  227. package/dist/dts/Stream.d.ts +394 -32
  228. package/dist/dts/Stream.d.ts.map +1 -1
  229. package/dist/dts/String.d.ts +94 -0
  230. package/dist/dts/String.d.ts.map +1 -1
  231. package/dist/dts/Struct.d.ts +24 -0
  232. package/dist/dts/Struct.d.ts.map +1 -1
  233. package/dist/dts/Symbol.d.ts +2 -0
  234. package/dist/dts/Symbol.d.ts.map +1 -1
  235. package/dist/dts/Trie.d.ts +132 -0
  236. package/dist/dts/Trie.d.ts.map +1 -1
  237. package/dist/dts/Tuple.d.ts +42 -0
  238. package/dist/dts/Tuple.d.ts.map +1 -1
  239. package/dist/dts/Types.d.ts +24 -0
  240. package/dist/dts/Types.d.ts.map +1 -1
  241. package/dist/dts/Utils.d.ts +4 -0
  242. package/dist/dts/Utils.d.ts.map +1 -1
  243. package/dist/dts/internal/context.d.ts +1 -1
  244. package/dist/dts/internal/context.d.ts.map +1 -1
  245. package/dist/dts/internal/dateTime.d.ts +2 -0
  246. package/dist/dts/internal/dateTime.d.ts.map +1 -0
  247. package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
  248. package/dist/dts/internal/stream.d.ts.map +1 -1
  249. package/dist/esm/Array.js +208 -0
  250. package/dist/esm/Array.js.map +1 -1
  251. package/dist/esm/BigDecimal.js +175 -20
  252. package/dist/esm/BigDecimal.js.map +1 -1
  253. package/dist/esm/BigInt.js +54 -0
  254. package/dist/esm/BigInt.js.map +1 -1
  255. package/dist/esm/Boolean.js +24 -0
  256. package/dist/esm/Boolean.js.map +1 -1
  257. package/dist/esm/Brand.js +4 -0
  258. package/dist/esm/Brand.js.map +1 -1
  259. package/dist/esm/Channel.js +42 -2
  260. package/dist/esm/Channel.js.map +1 -1
  261. package/dist/esm/Chunk.js +8 -0
  262. package/dist/esm/Chunk.js.map +1 -1
  263. package/dist/esm/Config.js +9 -0
  264. package/dist/esm/Config.js.map +1 -1
  265. package/dist/esm/Context.js +49 -0
  266. package/dist/esm/Context.js.map +1 -1
  267. package/dist/esm/Cron.js +81 -67
  268. package/dist/esm/Cron.js.map +1 -1
  269. package/dist/esm/Data.js +16 -0
  270. package/dist/esm/Data.js.map +1 -1
  271. package/dist/esm/DateTime.js +176 -627
  272. package/dist/esm/DateTime.js.map +1 -1
  273. package/dist/esm/Duration.js +2 -0
  274. package/dist/esm/Duration.js.map +1 -1
  275. package/dist/esm/Effect.js +297 -0
  276. package/dist/esm/Effect.js.map +1 -1
  277. package/dist/esm/Either.js +40 -2
  278. package/dist/esm/Either.js.map +1 -1
  279. package/dist/esm/FiberHandle.js +6 -0
  280. package/dist/esm/FiberHandle.js.map +1 -1
  281. package/dist/esm/FiberMap.js +6 -0
  282. package/dist/esm/FiberMap.js.map +1 -1
  283. package/dist/esm/FiberSet.js +6 -0
  284. package/dist/esm/FiberSet.js.map +1 -1
  285. package/dist/esm/Function.js +34 -0
  286. package/dist/esm/Function.js.map +1 -1
  287. package/dist/esm/GlobalValue.js +2 -0
  288. package/dist/esm/GlobalValue.js.map +1 -1
  289. package/dist/esm/HashMap.js.map +1 -1
  290. package/dist/esm/Inspectable.js +8 -4
  291. package/dist/esm/Inspectable.js.map +1 -1
  292. package/dist/esm/Iterable.js +18 -0
  293. package/dist/esm/Iterable.js.map +1 -1
  294. package/dist/esm/JSONSchema.js.map +1 -1
  295. package/dist/esm/List.js +4 -0
  296. package/dist/esm/List.js.map +1 -1
  297. package/dist/esm/Logger.js +26 -0
  298. package/dist/esm/Logger.js.map +1 -1
  299. package/dist/esm/Mailbox.js +2 -0
  300. package/dist/esm/Mailbox.js.map +1 -1
  301. package/dist/esm/ManagedRuntime.js +2 -0
  302. package/dist/esm/ManagedRuntime.js.map +1 -1
  303. package/dist/esm/Metric.js +10 -0
  304. package/dist/esm/Metric.js.map +1 -1
  305. package/dist/esm/Micro.js +1077 -1037
  306. package/dist/esm/Micro.js.map +1 -1
  307. package/dist/esm/Number.js +44 -0
  308. package/dist/esm/Number.js.map +1 -1
  309. package/dist/esm/Option.js +72 -0
  310. package/dist/esm/Option.js.map +1 -1
  311. package/dist/esm/Order.js +2 -0
  312. package/dist/esm/Order.js.map +1 -1
  313. package/dist/esm/Ordering.js +4 -0
  314. package/dist/esm/Ordering.js.map +1 -1
  315. package/dist/esm/Predicate.js +68 -0
  316. package/dist/esm/Predicate.js.map +1 -1
  317. package/dist/esm/Random.js +4 -0
  318. package/dist/esm/Random.js.map +1 -1
  319. package/dist/esm/RateLimiter.js +4 -0
  320. package/dist/esm/RateLimiter.js.map +1 -1
  321. package/dist/esm/RcMap.js +2 -0
  322. package/dist/esm/RcMap.js.map +1 -1
  323. package/dist/esm/RcRef.js +2 -0
  324. package/dist/esm/RcRef.js.map +1 -1
  325. package/dist/esm/Record.js +56 -0
  326. package/dist/esm/Record.js.map +1 -1
  327. package/dist/esm/Redacted.js +8 -0
  328. package/dist/esm/Redacted.js.map +1 -1
  329. package/dist/esm/RegExp.js +4 -0
  330. package/dist/esm/RegExp.js.map +1 -1
  331. package/dist/esm/Request.js +4 -0
  332. package/dist/esm/Request.js.map +1 -1
  333. package/dist/esm/RequestResolver.js +2 -0
  334. package/dist/esm/RequestResolver.js.map +1 -1
  335. package/dist/esm/Runtime.js +6 -0
  336. package/dist/esm/Runtime.js.map +1 -1
  337. package/dist/esm/STM.js.map +1 -1
  338. package/dist/esm/Schema.js +88 -0
  339. package/dist/esm/Schema.js.map +1 -1
  340. package/dist/esm/Sink.js +8 -0
  341. package/dist/esm/Sink.js.map +1 -1
  342. package/dist/esm/Stream.js +183 -5
  343. package/dist/esm/Stream.js.map +1 -1
  344. package/dist/esm/String.js +62 -0
  345. package/dist/esm/String.js.map +1 -1
  346. package/dist/esm/Struct.js +12 -0
  347. package/dist/esm/Struct.js.map +1 -1
  348. package/dist/esm/Symbol.js +2 -0
  349. package/dist/esm/Symbol.js.map +1 -1
  350. package/dist/esm/Trie.js +56 -0
  351. package/dist/esm/Trie.js.map +1 -1
  352. package/dist/esm/Tuple.js +22 -0
  353. package/dist/esm/Tuple.js.map +1 -1
  354. package/dist/esm/Utils.js +5 -0
  355. package/dist/esm/Utils.js.map +1 -1
  356. package/dist/esm/internal/channel/channelExecutor.js +5 -7
  357. package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
  358. package/dist/esm/internal/channel.js +152 -129
  359. package/dist/esm/internal/channel.js.map +1 -1
  360. package/dist/esm/internal/config.js +11 -3
  361. package/dist/esm/internal/config.js.map +1 -1
  362. package/dist/esm/internal/context.js +42 -2
  363. package/dist/esm/internal/context.js.map +1 -1
  364. package/dist/esm/internal/dateTime.js +704 -0
  365. package/dist/esm/internal/dateTime.js.map +1 -0
  366. package/dist/esm/internal/fiberRuntime.js +31 -9
  367. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  368. package/dist/esm/internal/groupBy.js +9 -3
  369. package/dist/esm/internal/groupBy.js.map +1 -1
  370. package/dist/esm/internal/layer.js +1 -1
  371. package/dist/esm/internal/layer.js.map +1 -1
  372. package/dist/esm/internal/mailbox.js +1 -1
  373. package/dist/esm/internal/mailbox.js.map +1 -1
  374. package/dist/esm/internal/sink.js +23 -20
  375. package/dist/esm/internal/sink.js.map +1 -1
  376. package/dist/esm/internal/stream.js +66 -69
  377. package/dist/esm/internal/stream.js.map +1 -1
  378. package/dist/esm/internal/version.js +1 -1
  379. package/dist/esm/internal/version.js.map +1 -1
  380. package/package.json +1 -1
  381. package/src/Array.ts +534 -0
  382. package/src/BigDecimal.ts +247 -21
  383. package/src/BigInt.ts +114 -0
  384. package/src/Boolean.ts +56 -0
  385. package/src/Brand.ts +6 -0
  386. package/src/Channel.ts +81 -5
  387. package/src/Chunk.ts +32 -0
  388. package/src/Config.ts +26 -1
  389. package/src/Context.ts +163 -0
  390. package/src/Cron.ts +91 -68
  391. package/src/Data.ts +26 -0
  392. package/src/DateTime.ts +307 -757
  393. package/src/Duration.ts +2 -0
  394. package/src/Effect.ts +910 -1
  395. package/src/Either.ts +84 -2
  396. package/src/FiberHandle.ts +6 -0
  397. package/src/FiberMap.ts +6 -0
  398. package/src/FiberSet.ts +6 -0
  399. package/src/Function.ts +50 -0
  400. package/src/GlobalValue.ts +2 -0
  401. package/src/HashMap.ts +6 -0
  402. package/src/Inspectable.ts +11 -7
  403. package/src/Iterable.ts +26 -0
  404. package/src/JSONSchema.ts +1 -0
  405. package/src/List.ts +24 -0
  406. package/src/Logger.ts +34 -0
  407. package/src/Mailbox.ts +2 -0
  408. package/src/ManagedRuntime.ts +2 -0
  409. package/src/Metric.ts +18 -0
  410. package/src/Micro.ts +2007 -1745
  411. package/src/Number.ts +104 -0
  412. package/src/Option.ts +142 -0
  413. package/src/Order.ts +2 -0
  414. package/src/Ordering.ts +8 -0
  415. package/src/Predicate.ts +104 -0
  416. package/src/Random.ts +4 -0
  417. package/src/RateLimiter.ts +4 -0
  418. package/src/RcMap.ts +6 -0
  419. package/src/RcRef.ts +2 -0
  420. package/src/Record.ts +136 -0
  421. package/src/Redacted.ts +8 -0
  422. package/src/RegExp.ts +4 -0
  423. package/src/Request.ts +4 -0
  424. package/src/RequestResolver.ts +6 -0
  425. package/src/Runtime.ts +18 -0
  426. package/src/STM.ts +2 -0
  427. package/src/Schema.ts +124 -0
  428. package/src/Sink.ts +11 -0
  429. package/src/Stream.ts +399 -44
  430. package/src/String.ts +94 -0
  431. package/src/Struct.ts +24 -0
  432. package/src/Symbol.ts +2 -0
  433. package/src/Trie.ts +132 -0
  434. package/src/Tuple.ts +42 -0
  435. package/src/Types.ts +24 -0
  436. package/src/Utils.ts +8 -0
  437. package/src/internal/channel/channelExecutor.ts +37 -33
  438. package/src/internal/channel.ts +504 -467
  439. package/src/internal/config.ts +18 -6
  440. package/src/internal/context.ts +56 -4
  441. package/src/internal/dateTime.ts +1126 -0
  442. package/src/internal/fiberRuntime.ts +35 -16
  443. package/src/internal/groupBy.ts +13 -22
  444. package/src/internal/layer.ts +5 -8
  445. package/src/internal/mailbox.ts +6 -4
  446. package/src/internal/sink.ts +55 -35
  447. package/src/internal/stream.ts +299 -299
  448. package/src/internal/version.ts +1 -1
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.zipRight = exports.zipLeft = exports.zip = exports.writeChunk = exports.writeAll = exports.withSpan = exports.updateService = exports.unwrapScoped = exports.unwrap = exports.toQueue = exports.toPull = exports.toPubSub = exports.splitLines = exports.serviceWithEffect = exports.serviceWithChannel = exports.serviceWith = exports.service = exports.scoped = exports.runDrain = exports.runCollect = exports.run = exports.repeated = exports.read = exports.provideSomeLayer = exports.provideService = exports.provideLayer = exports.pipeToOrFail = exports.orElse = exports.orDieWith = exports.orDie = exports.never = exports.mergeWith = exports.mergeOutWith = exports.mergeOut = exports.mergeMap = exports.mergeAllWith = exports.mergeAllUnboundedWith = exports.mergeAllUnbounded = exports.mergeAll = exports.mapOutEffectPar = exports.mapOutEffect = exports.mapOut = exports.mapInputInEffect = exports.mapInputIn = exports.mapInputErrorEffect = exports.mapInputError = exports.mapInputEffect = exports.mapInputContext = exports.mapInput = exports.mapErrorCause = exports.mapError = exports.mapEffect = exports.map = exports.isChannelException = exports.interruptWhenDeferred = exports.interruptWhen = exports.identityChannel = exports.fromQueue = exports.fromPubSubScoped = exports.fromPubSub = exports.fromOption = exports.fromInput = exports.fromEither = exports.foldChannel = exports.flatten = exports.ensuring = exports.emitCollect = exports.drain = exports.doneCollect = exports.contextWithEffect = exports.contextWithChannel = exports.contextWith = exports.context = exports.concatOut = exports.concatMap = exports.collect = exports.catchAll = exports.bufferChunk = exports.buffer = exports.asVoid = exports.as = exports.acquireUseRelease = exports.ChannelExceptionTypeId = exports.ChannelException = void 0;
6
+ exports.zipRight = exports.zipLeft = exports.zip = exports.writeChunk = exports.writeAll = exports.withSpan = exports.updateService = exports.unwrapScopedWith = exports.unwrapScoped = exports.unwrap = exports.toQueue = exports.toPullIn = exports.toPull = exports.toPubSub = exports.splitLines = exports.serviceWithEffect = exports.serviceWithChannel = exports.serviceWith = exports.service = exports.scopedWith = exports.scoped = exports.runScoped = exports.runDrain = exports.runCollect = exports.run = exports.repeated = exports.read = exports.provideSomeLayer = exports.provideService = exports.provideLayer = exports.pipeToOrFail = exports.orElse = exports.orDieWith = exports.orDie = exports.never = exports.mergeWith = exports.mergeOutWith = exports.mergeOut = exports.mergeMap = exports.mergeAllWith = exports.mergeAllUnboundedWith = exports.mergeAllUnbounded = exports.mergeAll = exports.mapOutEffectPar = exports.mapOutEffect = exports.mapOut = exports.mapInputInEffect = exports.mapInputIn = exports.mapInputErrorEffect = exports.mapInputError = exports.mapInputEffect = exports.mapInputContext = exports.mapInput = exports.mapErrorCause = exports.mapError = exports.mapEffect = exports.map = exports.isChannelException = exports.interruptWhenDeferred = exports.interruptWhen = exports.identityChannel = exports.fromQueue = exports.fromPubSubScoped = exports.fromPubSub = exports.fromOption = exports.fromInput = exports.fromEither = exports.foldChannel = exports.flatten = exports.ensuring = exports.emitCollect = exports.drain = exports.doneCollect = exports.contextWithEffect = exports.contextWithChannel = exports.contextWith = exports.context = exports.concatOut = exports.concatMap = exports.collect = exports.catchAll = exports.bufferChunk = exports.buffer = exports.asVoid = exports.as = exports.acquireUseRelease = exports.ChannelExceptionTypeId = exports.ChannelException = void 0;
7
7
  var Cause = _interopRequireWildcard(require("../Cause.js"));
8
8
  var Chunk = _interopRequireWildcard(require("../Chunk.js"));
9
9
  var Context = _interopRequireWildcard(require("../Context.js"));
@@ -273,31 +273,27 @@ const mapOutEffect = exports.mapOutEffect = /*#__PURE__*/(0, _Function.dual)(2,
273
273
  return core.pipeTo(self, reader);
274
274
  });
275
275
  /** @internal */
276
- const mapOutEffectPar = exports.mapOutEffectPar = /*#__PURE__*/(0, _Function.dual)(3, (self, f, n) => (0, _Function.pipe)(Effect.gen(function* ($) {
277
- const queue = yield* $(Effect.acquireRelease(Queue.bounded(n), queue => Queue.shutdown(queue)));
278
- const errorSignal = yield* $(Deferred.make());
279
- const withPermits = n === Number.POSITIVE_INFINITY ? _ => _Function.identity : (yield* $(Effect.makeSemaphore(n))).withPermits;
280
- const pull = yield* $(toPull(self));
281
- yield* $(Effect.matchCauseEffect(pull, {
276
+ const mapOutEffectPar = exports.mapOutEffectPar = /*#__PURE__*/(0, _Function.dual)(3, (self, f, n) => unwrapScopedWith(scope => Effect.gen(function* () {
277
+ const input = yield* singleProducerAsyncInput.make();
278
+ const queueReader = fromInput(input);
279
+ const queue = yield* Queue.bounded(n);
280
+ yield* Scope.addFinalizer(scope, Queue.shutdown(queue));
281
+ const errorSignal = yield* Deferred.make();
282
+ const withPermits = n === Number.POSITIVE_INFINITY ? _ => _Function.identity : (yield* Effect.makeSemaphore(n)).withPermits;
283
+ const pull = yield* queueReader.pipe(core.pipeTo(self), toPullIn(scope));
284
+ yield* pull.pipe(Effect.matchCauseEffect({
282
285
  onFailure: cause => Queue.offer(queue, Effect.failCause(cause)),
283
- onSuccess: either => Either.match(either, {
284
- onLeft: outDone => {
285
- const lock = withPermits(n);
286
- return Effect.zipRight(Effect.interruptible(lock(Effect.void)), Effect.asVoid(Queue.offer(queue, Effect.succeed(Either.left(outDone)))));
287
- },
288
- onRight: outElem => Effect.gen(function* ($) {
289
- const deferred = yield* $(Deferred.make());
290
- const latch = yield* $(Deferred.make());
291
- yield* $(Effect.asVoid(Queue.offer(queue, Effect.map(Deferred.await(deferred), Either.right))));
292
- yield* $(Deferred.succeed(latch, void 0), Effect.zipRight((0, _Function.pipe)(Effect.uninterruptibleMask(restore => (0, _Function.pipe)(Effect.exit(restore(Deferred.await(errorSignal))), Effect.raceFirst(Effect.exit(restore(f(outElem)))),
293
- // TODO: remove
294
- Effect.flatMap(exit => Effect.suspend(() => exit)))), Effect.tapErrorCause(cause => Deferred.failCause(errorSignal, cause)), Effect.intoDeferred(deferred))), withPermits(1), Effect.forkScoped);
295
- yield* $(Deferred.await(latch));
286
+ onSuccess: Either.match({
287
+ onLeft: outDone => Effect.zipRight(Effect.interruptible(withPermits(n)(Effect.void)), Effect.asVoid(Queue.offer(queue, Effect.succeed(Either.left(outDone))))),
288
+ onRight: outElem => Effect.gen(function* () {
289
+ const deferred = yield* Deferred.make();
290
+ const latch = yield* Deferred.make();
291
+ yield* Queue.offer(queue, Effect.map(Deferred.await(deferred), Either.right));
292
+ yield* Deferred.succeed(latch, void 0).pipe(Effect.zipRight(Effect.uninterruptibleMask(restore => Effect.exit(restore(Deferred.await(errorSignal))).pipe(Effect.raceFirst(Effect.exit(restore(f(outElem)))), Effect.flatMap(_Function.identity))).pipe(Effect.tapErrorCause(cause => Deferred.failCause(errorSignal, cause)), Effect.intoDeferred(deferred))), withPermits(1), Effect.forkIn(scope));
293
+ yield* Deferred.await(latch);
296
294
  })
297
295
  })
298
- }), Effect.forever, Effect.interruptible, Effect.forkScoped);
299
- return queue;
300
- }), Effect.map(queue => {
296
+ }), Effect.forever, Effect.interruptible, Effect.forkIn(scope));
301
297
  const consumer = unwrap(Effect.matchCause(Effect.flatten(Queue.take(queue)), {
302
298
  onFailure: core.failCause,
303
299
  onSuccess: Either.match({
@@ -305,8 +301,8 @@ const mapOutEffectPar = exports.mapOutEffectPar = /*#__PURE__*/(0, _Function.dua
305
301
  onRight: outElem => core.flatMap(core.write(outElem), () => consumer)
306
302
  })
307
303
  }));
308
- return consumer;
309
- }), unwrapScoped));
304
+ return core.embedInput(consumer, input);
305
+ })));
310
306
  /** @internal */
311
307
  const mergeAll = options => {
312
308
  return channels => mergeAllWith(options)(channels, _Function.constVoid);
@@ -327,63 +323,65 @@ const mergeAllWith = ({
327
323
  bufferSize = 16,
328
324
  concurrency,
329
325
  mergeStrategy = _mergeStrategy.BackPressure()
330
- }) => (channels, f) => (0, _Function.pipe)(Effect.gen(function* ($) {
326
+ }) => (channels, f) => unwrapScopedWith(scope => Effect.gen(function* () {
331
327
  const concurrencyN = concurrency === "unbounded" ? Number.MAX_SAFE_INTEGER : concurrency;
332
- const input = yield* $(singleProducerAsyncInput.make());
328
+ const input = yield* singleProducerAsyncInput.make();
333
329
  const queueReader = fromInput(input);
334
- const queue = yield* $(Effect.acquireRelease(Queue.bounded(bufferSize), queue => Queue.shutdown(queue)));
335
- const cancelers = yield* $(Effect.acquireRelease(Queue.unbounded(), queue => Queue.shutdown(queue)));
336
- const lastDone = yield* $(Ref.make(Option.none()));
337
- const errorSignal = yield* $(Deferred.make());
338
- const withPermits = (yield* $(Effect.makeSemaphore(concurrencyN))).withPermits;
339
- const pull = yield* $(toPull(channels));
340
- const evaluatePull = pull => (0, _Function.pipe)(Effect.flatMap(pull, Either.match({
341
- onLeft: done => Effect.succeed(Option.some(done)),
342
- onRight: outElem => Effect.as(Queue.offer(queue, Effect.succeed(Either.right(outElem))), Option.none())
343
- })), Effect.repeat({
344
- until: _ => Option.isSome(_)
345
- }), Effect.flatMap(outDone => Ref.update(lastDone, Option.match({
346
- onNone: () => Option.some(outDone.value),
347
- onSome: lastDone => Option.some(f(lastDone, outDone.value))
348
- }))), Effect.catchAllCause(cause => Cause.isInterrupted(cause) ? Effect.failCause(cause) : (0, _Function.pipe)(Queue.offer(queue, Effect.failCause(cause)), Effect.zipRight(Deferred.succeed(errorSignal, void 0)), Effect.asVoid)));
349
- yield* $(Effect.matchCauseEffect(pull, {
350
- onFailure: cause => (0, _Function.pipe)(Queue.offer(queue, Effect.failCause(cause)), Effect.zipRight(Effect.succeed(false))),
330
+ const queue = yield* Queue.bounded(bufferSize);
331
+ yield* Scope.addFinalizer(scope, Queue.shutdown(queue));
332
+ const cancelers = yield* Queue.unbounded();
333
+ yield* Scope.addFinalizer(scope, Queue.shutdown(cancelers));
334
+ const lastDone = yield* Ref.make(Option.none());
335
+ const errorSignal = yield* Deferred.make();
336
+ const withPermits = (yield* Effect.makeSemaphore(concurrencyN)).withPermits;
337
+ const pull = yield* toPullIn(core.pipeTo(queueReader, channels), scope);
338
+ function evaluatePull(pull) {
339
+ return pull.pipe(Effect.flatMap(Either.match({
340
+ onLeft: done => Effect.succeed(Option.some(done)),
341
+ onRight: outElem => Effect.as(Queue.offer(queue, Effect.succeed(Either.right(outElem))), Option.none())
342
+ })), Effect.repeat({
343
+ until: _ => Option.isSome(_)
344
+ }), Effect.flatMap(outDone => Ref.update(lastDone, Option.match({
345
+ onNone: () => Option.some(outDone.value),
346
+ onSome: lastDone => Option.some(f(lastDone, outDone.value))
347
+ }))), Effect.catchAllCause(cause => Cause.isInterrupted(cause) ? Effect.failCause(cause) : Queue.offer(queue, Effect.failCause(cause)).pipe(Effect.zipRight(Deferred.succeed(errorSignal, void 0)), Effect.asVoid)));
348
+ }
349
+ yield* pull.pipe(Effect.matchCauseEffect({
350
+ onFailure: cause => Queue.offer(queue, Effect.failCause(cause)).pipe(Effect.zipRight(Effect.succeed(false))),
351
351
  onSuccess: Either.match({
352
352
  onLeft: outDone => Effect.raceWith(Effect.interruptible(Deferred.await(errorSignal)), Effect.interruptible(withPermits(concurrencyN)(Effect.void)), {
353
353
  onSelfDone: (_, permitAcquisition) => Effect.as(Fiber.interrupt(permitAcquisition), false),
354
- onOtherDone: (_, failureAwait) => Effect.zipRight(Fiber.interrupt(failureAwait), (0, _Function.pipe)(Ref.get(lastDone), Effect.flatMap(Option.match({
354
+ onOtherDone: (_, failureAwait) => Effect.zipRight(Fiber.interrupt(failureAwait), Ref.get(lastDone).pipe(Effect.flatMap(Option.match({
355
355
  onNone: () => Queue.offer(queue, Effect.succeed(Either.left(outDone))),
356
356
  onSome: lastDone => Queue.offer(queue, Effect.succeed(Either.left(f(lastDone, outDone))))
357
357
  })), Effect.as(false)))
358
358
  }),
359
359
  onRight: channel => _mergeStrategy.match(mergeStrategy, {
360
- onBackPressure: () => Effect.gen(function* ($) {
361
- const latch = yield* $(Deferred.make());
362
- const raceEffects = (0, _Function.pipe)(queueReader, core.pipeTo(channel), toPull, Effect.flatMap(pull => Effect.race(evaluatePull(pull), Effect.interruptible(Deferred.await(errorSignal)))), Effect.scoped);
363
- yield* $(Deferred.succeed(latch, void 0), Effect.zipRight(raceEffects), withPermits(1), Effect.forkScoped);
364
- yield* $(Deferred.await(latch));
365
- const errored = yield* $(Deferred.isDone(errorSignal));
360
+ onBackPressure: () => Effect.gen(function* () {
361
+ const latch = yield* Deferred.make();
362
+ const raceEffects = Effect.scopedWith(scope => toPullIn(core.pipeTo(queueReader, channel), scope).pipe(Effect.flatMap(pull => Effect.race(Effect.exit(evaluatePull(pull)), Effect.exit(Effect.interruptible(Deferred.await(errorSignal))))), Effect.flatMap(_Function.identity)));
363
+ yield* Deferred.succeed(latch, void 0).pipe(Effect.zipRight(raceEffects), withPermits(1), Effect.forkIn(scope));
364
+ yield* Deferred.await(latch);
365
+ const errored = yield* Deferred.isDone(errorSignal);
366
366
  return !errored;
367
367
  }),
368
- onBufferSliding: () => Effect.gen(function* ($) {
369
- const canceler = yield* $(Deferred.make());
370
- const latch = yield* $(Deferred.make());
371
- const size = yield* $(Queue.size(cancelers));
372
- yield* $(Queue.take(cancelers), Effect.flatMap(_ => Deferred.succeed(_, void 0)), Effect.when(() => size >= concurrencyN));
373
- yield* $(Queue.offer(cancelers, canceler));
374
- const raceEffects = (0, _Function.pipe)(queueReader, core.pipeTo(channel), toPull, Effect.flatMap(pull => (0, _Function.pipe)(evaluatePull(pull), Effect.race(Effect.interruptible(Deferred.await(errorSignal))), Effect.race(Effect.interruptible(Deferred.await(canceler))))), Effect.scoped);
375
- yield* $(Deferred.succeed(latch, void 0), Effect.zipRight(raceEffects), withPermits(1), Effect.forkScoped);
376
- yield* $(Deferred.await(latch));
377
- const errored = yield* $(Deferred.isDone(errorSignal));
368
+ onBufferSliding: () => Effect.gen(function* () {
369
+ const canceler = yield* Deferred.make();
370
+ const latch = yield* Deferred.make();
371
+ const size = yield* Queue.size(cancelers);
372
+ yield* Queue.take(cancelers).pipe(Effect.flatMap(canceler => Deferred.succeed(canceler, void 0)), Effect.when(() => size >= concurrencyN));
373
+ yield* Queue.offer(cancelers, canceler);
374
+ const raceEffects = Effect.scopedWith(scope => toPullIn(core.pipeTo(queueReader, channel), scope).pipe(Effect.flatMap(pull => Effect.exit(evaluatePull(pull)).pipe(Effect.race(Effect.exit(Effect.interruptible(Deferred.await(errorSignal)))), Effect.race(Effect.exit(Effect.interruptible(Deferred.await(canceler)))))), Effect.flatMap(_Function.identity)));
375
+ yield* Deferred.succeed(latch, void 0).pipe(Effect.zipRight(raceEffects), withPermits(1), Effect.forkIn(scope));
376
+ yield* Deferred.await(latch);
377
+ const errored = yield* Deferred.isDone(errorSignal);
378
378
  return !errored;
379
379
  })
380
380
  })
381
381
  })
382
382
  }), Effect.repeat({
383
383
  while: _ => _
384
- }), Effect.forkScoped);
385
- return [queue, input];
386
- }), Effect.map(([queue, input]) => {
384
+ }), Effect.forkIn(scope));
387
385
  const consumer = (0, _Function.pipe)(Queue.take(queue), Effect.flatten, Effect.matchCause({
388
386
  onFailure: core.failCause,
389
387
  onSuccess: Either.match({
@@ -392,7 +390,7 @@ const mergeAllWith = ({
392
390
  })
393
391
  }), unwrap);
394
392
  return core.embedInput(consumer, input);
395
- }), unwrapScoped);
393
+ }));
396
394
  /** @internal */
397
395
  exports.mergeAllWith = mergeAllWith;
398
396
  const mergeMap = exports.mergeMap = /*#__PURE__*/(0, _Function.dual)(3, (self, f, options) => mergeAll(options)(mapOut(self, f)));
@@ -405,67 +403,84 @@ const mergeOutWith = exports.mergeOutWith = /*#__PURE__*/(0, _Function.dual)(3,
405
403
  concurrency: n
406
404
  })(mapOut(self, _Function.identity), f));
407
405
  /** @internal */
408
- const mergeWith = exports.mergeWith = /*#__PURE__*/(0, _Function.dual)(2, (self, options) => unwrapScoped(Effect.flatMap(singleProducerAsyncInput.make(), input => {
409
- const queueReader = fromInput(input);
410
- return Effect.map(Effect.all([toPull(core.pipeTo(queueReader, self)), toPull(core.pipeTo(queueReader, options.other)), Effect.scope]), ([pullL, pullR, scope]) => {
411
- const handleSide = (exit, fiber, pull) => (done, both, single) => {
412
- const onDecision = decision => {
413
- const op = decision;
414
- if (op._tag === MergeDecisionOpCodes.OP_DONE) {
415
- return Effect.succeed(core.fromEffect(Effect.zipRight(Fiber.interrupt(fiber), op.effect)));
416
- }
417
- return Effect.map(Fiber.await(fiber), Exit.match({
418
- onFailure: cause => core.fromEffect(op.f(Exit.failCause(cause))),
419
- onSuccess: Either.match({
420
- onLeft: done => core.fromEffect(op.f(Exit.succeed(done))),
421
- onRight: elem => zipRight(core.write(elem), go(single(op.f)))
422
- })
423
- }));
424
- };
425
- return Exit.match(exit, {
426
- onFailure: cause => onDecision(done(Exit.failCause(cause))),
427
- onSuccess: Either.match({
428
- onLeft: z => onDecision(done(Exit.succeed(z))),
429
- onRight: elem => Effect.succeed(core.flatMap(core.write(elem), () => core.flatMap(core.fromEffect(Effect.forkIn(Effect.interruptible(pull), scope)), leftFiber => go(both(leftFiber, fiber)))))
430
- })
431
- });
432
- };
433
- const go = state => {
434
- switch (state._tag) {
435
- case MergeStateOpCodes.OP_BOTH_RUNNING:
436
- {
437
- const leftJoin = Effect.interruptible(Fiber.join(state.left));
438
- const rightJoin = Effect.interruptible(Fiber.join(state.right));
439
- return unwrap(Effect.raceWith(leftJoin, rightJoin, {
440
- onSelfDone: (leftExit, rf) => Effect.zipRight(Fiber.interrupt(rf), handleSide(leftExit, state.right, pullL)(options.onSelfDone, mergeState.BothRunning, f => mergeState.LeftDone(f))),
441
- onOtherDone: (rightExit, lf) => Effect.zipRight(Fiber.interrupt(lf), handleSide(rightExit, state.left, pullR)(options.onOtherDone, (left, right) => mergeState.BothRunning(right, left), f => mergeState.RightDone(f)))
442
- }));
443
- }
444
- case MergeStateOpCodes.OP_LEFT_DONE:
445
- {
446
- return unwrap(Effect.map(Effect.exit(pullR), Exit.match({
447
- onFailure: cause => core.fromEffect(state.f(Exit.failCause(cause))),
448
- onSuccess: Either.match({
449
- onLeft: done => core.fromEffect(state.f(Exit.succeed(done))),
450
- onRight: elem => core.flatMap(core.write(elem), () => go(mergeState.LeftDone(state.f)))
451
- })
452
- })));
453
- }
454
- case MergeStateOpCodes.OP_RIGHT_DONE:
455
- {
456
- return unwrap(Effect.map(Effect.exit(pullL), Exit.match({
457
- onFailure: cause => core.fromEffect(state.f(Exit.failCause(cause))),
406
+ const mergeWith = exports.mergeWith = /*#__PURE__*/(0, _Function.dual)(2, (self, options) => {
407
+ function merge(scope) {
408
+ return Effect.gen(function* () {
409
+ const input = yield* singleProducerAsyncInput.make();
410
+ const queueReader = fromInput(input);
411
+ const pullL = yield* toPullIn(core.pipeTo(queueReader, self), scope);
412
+ const pullR = yield* toPullIn(core.pipeTo(queueReader, options.other), scope);
413
+ function handleSide(exit, fiber, pull) {
414
+ return (done, both, single) => {
415
+ function onDecision(decision) {
416
+ const op = decision;
417
+ if (op._tag === MergeDecisionOpCodes.OP_DONE) {
418
+ return Effect.succeed(core.fromEffect(Effect.zipRight(Fiber.interrupt(fiber), op.effect)));
419
+ }
420
+ return Effect.map(Fiber.await(fiber), Exit.match({
421
+ onFailure: cause => core.fromEffect(op.f(Exit.failCause(cause))),
458
422
  onSuccess: Either.match({
459
- onLeft: done => core.fromEffect(state.f(Exit.succeed(done))),
460
- onRight: elem => core.flatMap(core.write(elem), () => go(mergeState.RightDone(state.f)))
423
+ onLeft: done => core.fromEffect(op.f(Exit.succeed(done))),
424
+ onRight: elem => zipRight(core.write(elem), go(single(op.f)))
461
425
  })
462
- })));
426
+ }));
463
427
  }
428
+ return Exit.match(exit, {
429
+ onFailure: cause => onDecision(done(Exit.failCause(cause))),
430
+ onSuccess: Either.match({
431
+ onLeft: z => onDecision(done(Exit.succeed(z))),
432
+ onRight: elem => Effect.succeed(core.flatMap(core.write(elem), () => core.flatMap(core.fromEffect(Effect.forkIn(Effect.interruptible(pull), scope)), leftFiber => go(both(leftFiber, fiber)))))
433
+ })
434
+ });
435
+ };
464
436
  }
465
- };
466
- return (0, _Function.pipe)(core.fromEffect(Effect.zipWith(Effect.forkIn(Effect.interruptible(pullL), scope), Effect.forkIn(Effect.interruptible(pullR), scope), (left, right) => mergeState.BothRunning(left, right))), core.flatMap(go), core.embedInput(input));
467
- });
468
- })));
437
+ function go(state) {
438
+ switch (state._tag) {
439
+ case MergeStateOpCodes.OP_BOTH_RUNNING:
440
+ {
441
+ const leftJoin = Effect.interruptible(Fiber.join(state.left));
442
+ const rightJoin = Effect.interruptible(Fiber.join(state.right));
443
+ return unwrap(Effect.raceWith(leftJoin, rightJoin, {
444
+ onSelfDone: (leftExit, rf) => Effect.zipRight(Fiber.interrupt(rf), handleSide(leftExit, state.right, pullL)(options.onSelfDone, mergeState.BothRunning, f => mergeState.LeftDone(f))),
445
+ onOtherDone: (rightExit, lf) => Effect.zipRight(Fiber.interrupt(lf), handleSide(rightExit, state.left, pullR)(options.onOtherDone, (left, right) => mergeState.BothRunning(right, left), f => mergeState.RightDone(f)))
446
+ }));
447
+ }
448
+ case MergeStateOpCodes.OP_LEFT_DONE:
449
+ {
450
+ return unwrap(Effect.map(Effect.exit(pullR), Exit.match({
451
+ onFailure: cause => core.fromEffect(state.f(Exit.failCause(cause))),
452
+ onSuccess: Either.match({
453
+ onLeft: done => core.fromEffect(state.f(Exit.succeed(done))),
454
+ onRight: elem => core.flatMap(core.write(elem), () => go(mergeState.LeftDone(state.f)))
455
+ })
456
+ })));
457
+ }
458
+ case MergeStateOpCodes.OP_RIGHT_DONE:
459
+ {
460
+ return unwrap(Effect.map(Effect.exit(pullL), Exit.match({
461
+ onFailure: cause => core.fromEffect(state.f(Exit.failCause(cause))),
462
+ onSuccess: Either.match({
463
+ onLeft: done => core.fromEffect(state.f(Exit.succeed(done))),
464
+ onRight: elem => core.flatMap(core.write(elem), () => go(mergeState.RightDone(state.f)))
465
+ })
466
+ })));
467
+ }
468
+ }
469
+ }
470
+ return core.fromEffect(Effect.withFiberRuntime(parent => {
471
+ const inherit = Effect.withFiberRuntime(state => {
472
+ ;
473
+ state.transferChildren(parent.scope());
474
+ return Effect.void;
475
+ });
476
+ const leftFiber = Effect.interruptible(pullL).pipe(Effect.ensuring(inherit), Effect.forkIn(scope));
477
+ const rightFiber = Effect.interruptible(pullR).pipe(Effect.ensuring(inherit), Effect.forkIn(scope));
478
+ return Effect.zipWith(leftFiber, rightFiber, (left, right) => mergeState.BothRunning(left, right));
479
+ })).pipe(core.flatMap(go), core.embedInput(input));
480
+ });
481
+ }
482
+ return unwrapScopedWith(merge);
483
+ });
469
484
  /** @internal */
470
485
  const never = exports.never = /*#__PURE__*/core.fromEffect(Effect.never);
471
486
  /** @internal */
@@ -499,7 +514,7 @@ const provideService = exports.provideService = /*#__PURE__*/(0, _Function.dual)
499
514
  return core.flatMap(context(), context => core.provideContext(self, Context.add(context, tag, service)));
500
515
  });
501
516
  /** @internal */
502
- const provideLayer = exports.provideLayer = /*#__PURE__*/(0, _Function.dual)(2, (self, layer) => unwrapScoped(Effect.map(Layer.build(layer), env => core.provideContext(self, env))));
517
+ const provideLayer = exports.provideLayer = /*#__PURE__*/(0, _Function.dual)(2, (self, layer) => unwrapScopedWith(scope => Effect.map(Layer.buildWithScope(layer, scope), context => core.provideContext(self, context))));
503
518
  /** @internal */
504
519
  const mapInputContext = exports.mapInputContext = /*#__PURE__*/(0, _Function.dual)(2, (self, f) => contextWithChannel(context => core.provideContext(self, f(context))));
505
520
  /** @internal */
@@ -513,18 +528,24 @@ exports.read = read;
513
528
  const repeated = self => core.flatMap(self, () => repeated(self));
514
529
  /** @internal */
515
530
  exports.repeated = repeated;
516
- const run = self => Effect.scoped(executor.runScoped(self));
531
+ const run = self => Effect.scopedWith(scope => executor.runIn(self, scope));
517
532
  /** @internal */
518
533
  exports.run = run;
519
- const runCollect = self => executor.run(core.collectElements(self));
534
+ const runCollect = self => run(core.collectElements(self));
520
535
  /** @internal */
521
536
  exports.runCollect = runCollect;
522
- const runDrain = self => executor.run(drain(self));
537
+ const runDrain = self => run(drain(self));
523
538
  /** @internal */
524
539
  exports.runDrain = runDrain;
540
+ const runScoped = self => Effect.scopeWith(scope => executor.runIn(self, scope));
541
+ /** @internal */
542
+ exports.runScoped = runScoped;
525
543
  const scoped = effect => unwrap(Effect.uninterruptibleMask(restore => Effect.map(Scope.make(), scope => core.acquireReleaseOut(Effect.tapErrorCause(restore(Scope.extend(effect, scope)), cause => Scope.close(scope, Exit.failCause(cause))), (_, exit) => Scope.close(scope, exit)))));
526
544
  /** @internal */
527
545
  exports.scoped = scoped;
546
+ const scopedWith = f => unwrapScoped(Effect.map(Effect.scope, scope => core.flatMap(core.fromEffect(f(scope)), core.write)));
547
+ /** @internal */
548
+ exports.scopedWith = scopedWith;
528
549
  const service = tag => core.fromEffect(tag);
529
550
  /** @internal */
530
551
  exports.service = service;
@@ -614,12 +635,14 @@ exports.splitLines = splitLines;
614
635
  const toPubSub = pubsub => toQueue(pubsub);
615
636
  /** @internal */
616
637
  exports.toPubSub = toPubSub;
617
- const toPull = self => Effect.map(Effect.acquireRelease(Effect.sync(() => new executor.ChannelExecutor(self, void 0, _Function.identity)), (exec, exit) => {
618
- const finalize = exec.close(exit);
619
- return finalize === undefined ? Effect.void : finalize;
620
- }), exec => Effect.suspend(() => interpretToPull(exec.run(), exec)));
638
+ const toPull = self => Effect.flatMap(Effect.scope, scope => toPullIn(self, scope));
621
639
  /** @internal */
622
640
  exports.toPull = toPull;
641
+ const toPullIn = exports.toPullIn = /*#__PURE__*/(0, _Function.dual)(2, (self, scope) => Effect.zip(Effect.sync(() => new executor.ChannelExecutor(self, void 0, _Function.identity)), Effect.runtime()).pipe(Effect.tap(([executor, runtime]) => Scope.addFinalizerExit(scope, exit => {
642
+ const finalizer = executor.close(exit);
643
+ return finalizer !== undefined ? Effect.provide(finalizer, runtime) : Effect.void;
644
+ })), Effect.uninterruptible, Effect.map(([executor]) => Effect.suspend(() => interpretToPull(executor.run(), executor)))));
645
+ /** @internal */
623
646
  const interpretToPull = (channelState, exec) => {
624
647
  const state = channelState;
625
648
  switch (state._tag) {
@@ -662,6 +685,9 @@ exports.unwrap = unwrap;
662
685
  const unwrapScoped = self => core.concatAllWith(scoped(self), (d, _) => d, (d, _) => d);
663
686
  /** @internal */
664
687
  exports.unwrapScoped = unwrapScoped;
688
+ const unwrapScopedWith = f => core.concatAllWith(scopedWith(f), (d, _) => d, (d, _) => d);
689
+ /** @internal */
690
+ exports.unwrapScopedWith = unwrapScopedWith;
665
691
  const updateService = exports.updateService = /*#__PURE__*/(0, _Function.dual)(3, (self, tag, f) => mapInputContext(self, context => Context.merge(context, Context.make(tag, f(Context.unsafeGet(context, tag))))));
666
692
  /** @internal */
667
693
  const withSpan = function () {