@clayroach/effect 3.19.14-source-capture.8 → 3.19.14-source-trace.2

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 (452) hide show
  1. package/SourceLocation/package.json +6 -0
  2. package/dist/cjs/Effect.js +2 -28
  3. package/dist/cjs/Effect.js.map +1 -1
  4. package/dist/cjs/FiberRef.js +12 -1
  5. package/dist/cjs/FiberRef.js.map +1 -1
  6. package/dist/cjs/Layer.js +2 -24
  7. package/dist/cjs/Layer.js.map +1 -1
  8. package/dist/cjs/RuntimeFlags.js +1 -29
  9. package/dist/cjs/RuntimeFlags.js.map +1 -1
  10. package/dist/cjs/SourceLocation.js +60 -0
  11. package/dist/cjs/SourceLocation.js.map +1 -0
  12. package/dist/cjs/Tracer.js +1 -15
  13. package/dist/cjs/Tracer.js.map +1 -1
  14. package/dist/cjs/Utils.js +1 -1
  15. package/dist/cjs/Utils.js.map +1 -1
  16. package/dist/cjs/index.js +3 -1
  17. package/dist/cjs/index.js.map +1 -1
  18. package/dist/cjs/internal/clock.js +1 -1
  19. package/dist/cjs/internal/clock.js.map +1 -1
  20. package/dist/cjs/internal/core.js +17 -50
  21. package/dist/cjs/internal/core.js.map +1 -1
  22. package/dist/cjs/internal/effect/circular.js +18 -30
  23. package/dist/cjs/internal/effect/circular.js.map +1 -1
  24. package/dist/cjs/internal/fiberRuntime.js +16 -65
  25. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  26. package/dist/cjs/internal/layer/circular.js +1 -5
  27. package/dist/cjs/internal/layer/circular.js.map +1 -1
  28. package/dist/cjs/internal/layer.js +1 -3
  29. package/dist/cjs/internal/layer.js.map +1 -1
  30. package/dist/cjs/internal/logger.js +25 -2
  31. package/dist/cjs/internal/logger.js.map +1 -1
  32. package/dist/cjs/internal/runtimeFlags.js +2 -11
  33. package/dist/cjs/internal/runtimeFlags.js.map +1 -1
  34. package/dist/cjs/internal/tracer.js +1 -114
  35. package/dist/cjs/internal/tracer.js.map +1 -1
  36. package/dist/dts/Config.d.ts +2 -2
  37. package/dist/dts/Config.d.ts.map +1 -1
  38. package/dist/dts/Effect.d.ts +8 -29
  39. package/dist/dts/Effect.d.ts.map +1 -1
  40. package/dist/dts/FiberRef.d.ts +12 -0
  41. package/dist/dts/FiberRef.d.ts.map +1 -1
  42. package/dist/dts/Layer.d.ts +0 -22
  43. package/dist/dts/Layer.d.ts.map +1 -1
  44. package/dist/dts/RuntimeFlags.d.ts +0 -28
  45. package/dist/dts/RuntimeFlags.d.ts.map +1 -1
  46. package/dist/dts/SourceLocation.d.ts +88 -0
  47. package/dist/dts/SourceLocation.d.ts.map +1 -0
  48. package/dist/dts/Tracer.d.ts +0 -15
  49. package/dist/dts/Tracer.d.ts.map +1 -1
  50. package/dist/dts/index.d.ts +6 -0
  51. package/dist/dts/index.d.ts.map +1 -1
  52. package/dist/dts/internal/core.d.ts.map +1 -1
  53. package/dist/dts/internal/layer.d.ts.map +1 -1
  54. package/dist/dts/internal/runtimeFlags.d.ts.map +1 -1
  55. package/dist/esm/Effect.js +0 -26
  56. package/dist/esm/Effect.js.map +1 -1
  57. package/dist/esm/FiberRef.js +11 -0
  58. package/dist/esm/FiberRef.js.map +1 -1
  59. package/dist/esm/Layer.js +0 -22
  60. package/dist/esm/Layer.js.map +1 -1
  61. package/dist/esm/RuntimeFlags.js +0 -28
  62. package/dist/esm/RuntimeFlags.js.map +1 -1
  63. package/dist/esm/SourceLocation.js +51 -0
  64. package/dist/esm/SourceLocation.js.map +1 -0
  65. package/dist/esm/Tracer.js +0 -14
  66. package/dist/esm/Tracer.js.map +1 -1
  67. package/dist/esm/Utils.js +1 -1
  68. package/dist/esm/Utils.js.map +1 -1
  69. package/dist/esm/index.js +6 -0
  70. package/dist/esm/index.js.map +1 -1
  71. package/dist/esm/internal/clock.js +1 -1
  72. package/dist/esm/internal/clock.js.map +1 -1
  73. package/dist/esm/internal/core.js +12 -45
  74. package/dist/esm/internal/core.js.map +1 -1
  75. package/dist/esm/internal/effect/circular.js +18 -30
  76. package/dist/esm/internal/effect/circular.js.map +1 -1
  77. package/dist/esm/internal/fiberRuntime.js +13 -60
  78. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  79. package/dist/esm/internal/layer/circular.js +0 -4
  80. package/dist/esm/internal/layer/circular.js.map +1 -1
  81. package/dist/esm/internal/layer.js +0 -2
  82. package/dist/esm/internal/layer.js.map +1 -1
  83. package/dist/esm/internal/logger.js +25 -2
  84. package/dist/esm/internal/logger.js.map +1 -1
  85. package/dist/esm/internal/runtimeFlags.js +1 -9
  86. package/dist/esm/internal/runtimeFlags.js.map +1 -1
  87. package/dist/esm/internal/tracer.js +0 -111
  88. package/dist/esm/internal/tracer.js.map +1 -1
  89. package/package.json +12 -1
  90. package/src/Arbitrary.ts +1101 -0
  91. package/src/Array.ts +3589 -0
  92. package/src/BigDecimal.ts +1349 -0
  93. package/src/BigInt.ts +643 -0
  94. package/src/Boolean.ts +287 -0
  95. package/src/Brand.ts +360 -0
  96. package/src/Cache.ts +281 -0
  97. package/src/Cause.ts +1555 -0
  98. package/src/Channel.ts +2355 -0
  99. package/src/ChildExecutorDecision.ts +146 -0
  100. package/src/Chunk.ts +1495 -0
  101. package/src/Clock.ts +111 -0
  102. package/src/Config.ts +542 -0
  103. package/src/ConfigError.ts +270 -0
  104. package/src/ConfigProvider.ts +333 -0
  105. package/src/ConfigProviderPathPatch.ts +100 -0
  106. package/src/Console.ts +226 -0
  107. package/src/Context.ts +585 -0
  108. package/src/Cron.ts +706 -0
  109. package/src/Data.ts +596 -0
  110. package/src/DateTime.ts +1686 -0
  111. package/src/DefaultServices.ts +34 -0
  112. package/src/Deferred.ts +301 -0
  113. package/src/Differ.ts +450 -0
  114. package/src/Duration.ts +1000 -0
  115. package/src/Effect.ts +14817 -0
  116. package/src/Effectable.ts +107 -0
  117. package/src/Either.ts +1040 -0
  118. package/src/Encoding.ts +195 -0
  119. package/src/Equal.ts +98 -0
  120. package/src/Equivalence.ts +235 -0
  121. package/src/ExecutionPlan.ts +308 -0
  122. package/src/ExecutionStrategy.ts +119 -0
  123. package/src/Exit.ts +467 -0
  124. package/src/FastCheck.ts +9 -0
  125. package/src/Fiber.ts +744 -0
  126. package/src/FiberHandle.ts +540 -0
  127. package/src/FiberId.ts +195 -0
  128. package/src/FiberMap.ts +656 -0
  129. package/src/FiberRef.ts +444 -0
  130. package/src/FiberRefs.ts +204 -0
  131. package/src/FiberRefsPatch.ts +105 -0
  132. package/src/FiberSet.ts +491 -0
  133. package/src/FiberStatus.ts +108 -0
  134. package/src/Function.ts +1222 -0
  135. package/src/GlobalValue.ts +53 -0
  136. package/src/Graph.ts +3732 -0
  137. package/src/GroupBy.ts +103 -0
  138. package/src/HKT.ts +45 -0
  139. package/src/Hash.ts +195 -0
  140. package/src/HashMap.ts +519 -0
  141. package/src/HashRing.ts +317 -0
  142. package/src/HashSet.ts +2346 -0
  143. package/src/Inspectable.ts +287 -0
  144. package/src/Iterable.ts +1119 -0
  145. package/src/JSONSchema.ts +1044 -0
  146. package/src/KeyedPool.ts +167 -0
  147. package/src/Layer.ts +1228 -0
  148. package/src/LayerMap.ts +436 -0
  149. package/src/List.ts +977 -0
  150. package/src/LogLevel.ts +285 -0
  151. package/src/LogSpan.ts +25 -0
  152. package/src/Logger.ts +702 -0
  153. package/src/Mailbox.ts +268 -0
  154. package/src/ManagedRuntime.ts +180 -0
  155. package/src/Match.ts +1477 -0
  156. package/src/MergeDecision.ts +95 -0
  157. package/src/MergeState.ts +172 -0
  158. package/src/MergeStrategy.ts +107 -0
  159. package/src/Metric.ts +780 -0
  160. package/src/MetricBoundaries.ts +69 -0
  161. package/src/MetricHook.ts +151 -0
  162. package/src/MetricKey.ts +224 -0
  163. package/src/MetricKeyType.ts +262 -0
  164. package/src/MetricLabel.ts +47 -0
  165. package/src/MetricPair.ts +71 -0
  166. package/src/MetricPolling.ts +148 -0
  167. package/src/MetricRegistry.ts +48 -0
  168. package/src/MetricState.ts +257 -0
  169. package/src/Micro.ts +4405 -0
  170. package/src/ModuleVersion.ts +18 -0
  171. package/src/MutableHashMap.ts +411 -0
  172. package/src/MutableHashSet.ts +706 -0
  173. package/src/MutableList.ts +297 -0
  174. package/src/MutableQueue.ts +227 -0
  175. package/src/MutableRef.ts +202 -0
  176. package/src/NonEmptyIterable.ts +32 -0
  177. package/src/Number.ts +1071 -0
  178. package/src/Option.ts +2170 -0
  179. package/src/Order.ts +373 -0
  180. package/src/Ordering.ts +111 -0
  181. package/src/ParseResult.ts +2031 -0
  182. package/src/PartitionedSemaphore.ts +200 -0
  183. package/src/Pipeable.ts +566 -0
  184. package/src/Pool.ts +204 -0
  185. package/src/Predicate.ts +1405 -0
  186. package/src/Pretty.ts +205 -0
  187. package/src/PrimaryKey.ts +23 -0
  188. package/src/PubSub.ts +182 -0
  189. package/src/Queue.ts +644 -0
  190. package/src/Random.ts +204 -0
  191. package/src/RateLimiter.ts +138 -0
  192. package/src/RcMap.ts +141 -0
  193. package/src/RcRef.ts +122 -0
  194. package/src/Readable.ts +93 -0
  195. package/src/Record.ts +1274 -0
  196. package/src/RedBlackTree.ts +421 -0
  197. package/src/Redacted.ts +144 -0
  198. package/src/Ref.ts +180 -0
  199. package/src/RegExp.ts +38 -0
  200. package/src/Reloadable.ts +127 -0
  201. package/src/Request.ts +347 -0
  202. package/src/RequestBlock.ts +118 -0
  203. package/src/RequestResolver.ts +366 -0
  204. package/src/Resource.ts +119 -0
  205. package/src/Runtime.ts +383 -0
  206. package/src/RuntimeFlags.ts +336 -0
  207. package/src/RuntimeFlagsPatch.ts +183 -0
  208. package/src/STM.ts +2045 -0
  209. package/src/Schedule.ts +2219 -0
  210. package/src/ScheduleDecision.ts +62 -0
  211. package/src/ScheduleInterval.ts +151 -0
  212. package/src/ScheduleIntervals.ts +122 -0
  213. package/src/Scheduler.ts +353 -0
  214. package/src/Schema.ts +10914 -0
  215. package/src/SchemaAST.ts +3043 -0
  216. package/src/Scope.ts +204 -0
  217. package/src/ScopedCache.ts +151 -0
  218. package/src/ScopedRef.ts +117 -0
  219. package/src/Secret.ts +88 -0
  220. package/src/SingleProducerAsyncInput.ts +67 -0
  221. package/src/Sink.ts +1461 -0
  222. package/src/SortedMap.ts +287 -0
  223. package/src/SortedSet.ts +390 -0
  224. package/src/SourceLocation.ts +108 -0
  225. package/src/Stream.ts +6468 -0
  226. package/src/StreamEmit.ts +136 -0
  227. package/src/StreamHaltStrategy.ts +123 -0
  228. package/src/Streamable.ts +45 -0
  229. package/src/String.ts +778 -0
  230. package/src/Struct.ts +243 -0
  231. package/src/Subscribable.ts +100 -0
  232. package/src/SubscriptionRef.ts +298 -0
  233. package/src/Supervisor.ts +240 -0
  234. package/src/Symbol.ts +29 -0
  235. package/src/SynchronizedRef.ts +270 -0
  236. package/src/TArray.ts +495 -0
  237. package/src/TDeferred.ts +100 -0
  238. package/src/TMap.ts +515 -0
  239. package/src/TPriorityQueue.ts +223 -0
  240. package/src/TPubSub.ts +200 -0
  241. package/src/TQueue.ts +432 -0
  242. package/src/TRandom.ts +129 -0
  243. package/src/TReentrantLock.ts +224 -0
  244. package/src/TRef.ts +178 -0
  245. package/src/TSemaphore.ts +129 -0
  246. package/src/TSet.ts +365 -0
  247. package/src/TSubscriptionRef.ts +192 -0
  248. package/src/Take.ts +258 -0
  249. package/src/TestAnnotation.ts +158 -0
  250. package/src/TestAnnotationMap.ts +119 -0
  251. package/src/TestAnnotations.ts +117 -0
  252. package/src/TestClock.ts +556 -0
  253. package/src/TestConfig.ts +47 -0
  254. package/src/TestContext.ts +36 -0
  255. package/src/TestLive.ts +53 -0
  256. package/src/TestServices.ts +390 -0
  257. package/src/TestSized.ts +55 -0
  258. package/src/Tracer.ts +182 -0
  259. package/src/Trie.ts +840 -0
  260. package/src/Tuple.ts +305 -0
  261. package/src/Types.ts +353 -0
  262. package/src/Unify.ts +113 -0
  263. package/src/UpstreamPullRequest.ts +117 -0
  264. package/src/UpstreamPullStrategy.ts +121 -0
  265. package/src/Utils.ts +809 -0
  266. package/src/index.ts +1568 -0
  267. package/src/internal/array.ts +8 -0
  268. package/src/internal/blockedRequests.ts +520 -0
  269. package/src/internal/cache.ts +733 -0
  270. package/src/internal/cause.ts +1050 -0
  271. package/src/internal/channel/channelExecutor.ts +1200 -0
  272. package/src/internal/channel/channelState.ts +134 -0
  273. package/src/internal/channel/childExecutorDecision.ts +96 -0
  274. package/src/internal/channel/continuation.ts +200 -0
  275. package/src/internal/channel/mergeDecision.ts +113 -0
  276. package/src/internal/channel/mergeState.ts +120 -0
  277. package/src/internal/channel/mergeStrategy.ts +72 -0
  278. package/src/internal/channel/singleProducerAsyncInput.ts +259 -0
  279. package/src/internal/channel/subexecutor.ts +229 -0
  280. package/src/internal/channel/upstreamPullRequest.ts +84 -0
  281. package/src/internal/channel/upstreamPullStrategy.ts +87 -0
  282. package/src/internal/channel.ts +2603 -0
  283. package/src/internal/clock.ts +95 -0
  284. package/src/internal/completedRequestMap.ts +9 -0
  285. package/src/internal/concurrency.ts +54 -0
  286. package/src/internal/config.ts +716 -0
  287. package/src/internal/configError.ts +304 -0
  288. package/src/internal/configProvider/pathPatch.ts +97 -0
  289. package/src/internal/configProvider.ts +799 -0
  290. package/src/internal/console.ts +153 -0
  291. package/src/internal/context.ts +337 -0
  292. package/src/internal/core-effect.ts +2293 -0
  293. package/src/internal/core-stream.ts +998 -0
  294. package/src/internal/core.ts +3189 -0
  295. package/src/internal/data.ts +36 -0
  296. package/src/internal/dataSource.ts +327 -0
  297. package/src/internal/dateTime.ts +1277 -0
  298. package/src/internal/defaultServices/console.ts +100 -0
  299. package/src/internal/defaultServices.ts +163 -0
  300. package/src/internal/deferred.ts +46 -0
  301. package/src/internal/differ/chunkPatch.ts +211 -0
  302. package/src/internal/differ/contextPatch.ts +232 -0
  303. package/src/internal/differ/hashMapPatch.ts +220 -0
  304. package/src/internal/differ/hashSetPatch.ts +176 -0
  305. package/src/internal/differ/orPatch.ts +311 -0
  306. package/src/internal/differ/readonlyArrayPatch.ts +210 -0
  307. package/src/internal/differ.ts +200 -0
  308. package/src/internal/doNotation.ts +80 -0
  309. package/src/internal/effect/circular.ts +895 -0
  310. package/src/internal/effectable.ts +131 -0
  311. package/src/internal/either.ts +110 -0
  312. package/src/internal/encoding/base64.ts +286 -0
  313. package/src/internal/encoding/base64Url.ts +29 -0
  314. package/src/internal/encoding/common.ts +51 -0
  315. package/src/internal/encoding/hex.ts +315 -0
  316. package/src/internal/errors.ts +7 -0
  317. package/src/internal/executionPlan.ts +114 -0
  318. package/src/internal/executionStrategy.ts +74 -0
  319. package/src/internal/fiber.ts +388 -0
  320. package/src/internal/fiberId.ts +267 -0
  321. package/src/internal/fiberMessage.ts +82 -0
  322. package/src/internal/fiberRefs/patch.ts +144 -0
  323. package/src/internal/fiberRefs.ts +297 -0
  324. package/src/internal/fiberRuntime.ts +3842 -0
  325. package/src/internal/fiberScope.ts +71 -0
  326. package/src/internal/fiberStatus.ts +119 -0
  327. package/src/internal/groupBy.ts +530 -0
  328. package/src/internal/hashMap/array.ts +49 -0
  329. package/src/internal/hashMap/bitwise.ts +32 -0
  330. package/src/internal/hashMap/config.ts +14 -0
  331. package/src/internal/hashMap/keySet.ts +8 -0
  332. package/src/internal/hashMap/node.ts +391 -0
  333. package/src/internal/hashMap.ts +586 -0
  334. package/src/internal/hashSet.ts +323 -0
  335. package/src/internal/keyedPool.ts +244 -0
  336. package/src/internal/layer/circular.ts +214 -0
  337. package/src/internal/layer.ts +1483 -0
  338. package/src/internal/logSpan.ts +20 -0
  339. package/src/internal/logger-circular.ts +24 -0
  340. package/src/internal/logger.ts +522 -0
  341. package/src/internal/mailbox.ts +561 -0
  342. package/src/internal/managedRuntime/circular.ts +6 -0
  343. package/src/internal/managedRuntime.ts +134 -0
  344. package/src/internal/matcher.ts +652 -0
  345. package/src/internal/metric/boundaries.ts +75 -0
  346. package/src/internal/metric/hook.ts +483 -0
  347. package/src/internal/metric/key.ts +167 -0
  348. package/src/internal/metric/keyType.ts +238 -0
  349. package/src/internal/metric/label.ts +41 -0
  350. package/src/internal/metric/pair.ts +48 -0
  351. package/src/internal/metric/polling.ts +149 -0
  352. package/src/internal/metric/registry.ts +187 -0
  353. package/src/internal/metric/state.ts +290 -0
  354. package/src/internal/metric.ts +577 -0
  355. package/src/internal/opCodes/cause.ts +35 -0
  356. package/src/internal/opCodes/channel.ts +83 -0
  357. package/src/internal/opCodes/channelChildExecutorDecision.ts +17 -0
  358. package/src/internal/opCodes/channelMergeDecision.ts +11 -0
  359. package/src/internal/opCodes/channelMergeState.ts +17 -0
  360. package/src/internal/opCodes/channelMergeStrategy.ts +11 -0
  361. package/src/internal/opCodes/channelState.ts +23 -0
  362. package/src/internal/opCodes/channelUpstreamPullRequest.ts +11 -0
  363. package/src/internal/opCodes/channelUpstreamPullStrategy.ts +11 -0
  364. package/src/internal/opCodes/config.ts +65 -0
  365. package/src/internal/opCodes/configError.ts +35 -0
  366. package/src/internal/opCodes/continuation.ts +11 -0
  367. package/src/internal/opCodes/deferred.ts +11 -0
  368. package/src/internal/opCodes/effect.ts +89 -0
  369. package/src/internal/opCodes/layer.ts +59 -0
  370. package/src/internal/opCodes/streamHaltStrategy.ts +23 -0
  371. package/src/internal/option.ts +80 -0
  372. package/src/internal/pool.ts +432 -0
  373. package/src/internal/pubsub.ts +1762 -0
  374. package/src/internal/query.ts +204 -0
  375. package/src/internal/queue.ts +766 -0
  376. package/src/internal/random.ts +161 -0
  377. package/src/internal/rateLimiter.ts +93 -0
  378. package/src/internal/rcMap.ts +285 -0
  379. package/src/internal/rcRef.ts +192 -0
  380. package/src/internal/redBlackTree/iterator.ts +200 -0
  381. package/src/internal/redBlackTree/node.ts +68 -0
  382. package/src/internal/redBlackTree.ts +1245 -0
  383. package/src/internal/redacted.ts +73 -0
  384. package/src/internal/ref.ts +171 -0
  385. package/src/internal/reloadable.ts +140 -0
  386. package/src/internal/request.ts +177 -0
  387. package/src/internal/resource.ts +76 -0
  388. package/src/internal/ringBuffer.ts +68 -0
  389. package/src/internal/runtime.ts +558 -0
  390. package/src/internal/runtimeFlags.ts +178 -0
  391. package/src/internal/runtimeFlagsPatch.ts +103 -0
  392. package/src/internal/schedule/decision.ts +47 -0
  393. package/src/internal/schedule/interval.ts +101 -0
  394. package/src/internal/schedule/intervals.ts +180 -0
  395. package/src/internal/schedule.ts +2199 -0
  396. package/src/internal/schema/errors.ts +191 -0
  397. package/src/internal/schema/schemaId.ts +106 -0
  398. package/src/internal/schema/util.ts +50 -0
  399. package/src/internal/scopedCache.ts +644 -0
  400. package/src/internal/scopedRef.ts +118 -0
  401. package/src/internal/secret.ts +89 -0
  402. package/src/internal/singleShotGen.ts +35 -0
  403. package/src/internal/sink.ts +2120 -0
  404. package/src/internal/stack.ts +10 -0
  405. package/src/internal/stm/core.ts +817 -0
  406. package/src/internal/stm/entry.ts +59 -0
  407. package/src/internal/stm/journal.ts +123 -0
  408. package/src/internal/stm/opCodes/stm.ts +71 -0
  409. package/src/internal/stm/opCodes/stmState.ts +17 -0
  410. package/src/internal/stm/opCodes/strategy.ts +17 -0
  411. package/src/internal/stm/opCodes/tExit.ts +29 -0
  412. package/src/internal/stm/opCodes/tryCommit.ts +11 -0
  413. package/src/internal/stm/stm.ts +1453 -0
  414. package/src/internal/stm/stmState.ts +136 -0
  415. package/src/internal/stm/tArray.ts +550 -0
  416. package/src/internal/stm/tDeferred.ts +81 -0
  417. package/src/internal/stm/tExit.ts +190 -0
  418. package/src/internal/stm/tMap.ts +824 -0
  419. package/src/internal/stm/tPriorityQueue.ts +267 -0
  420. package/src/internal/stm/tPubSub.ts +551 -0
  421. package/src/internal/stm/tQueue.ts +393 -0
  422. package/src/internal/stm/tRandom.ts +140 -0
  423. package/src/internal/stm/tReentrantLock.ts +352 -0
  424. package/src/internal/stm/tRef.ts +195 -0
  425. package/src/internal/stm/tSemaphore.ts +113 -0
  426. package/src/internal/stm/tSet.ts +259 -0
  427. package/src/internal/stm/tSubscriptionRef.ts +286 -0
  428. package/src/internal/stm/tryCommit.ts +34 -0
  429. package/src/internal/stm/txnId.ts +14 -0
  430. package/src/internal/stm/versioned.ts +4 -0
  431. package/src/internal/stream/debounceState.ts +57 -0
  432. package/src/internal/stream/emit.ts +123 -0
  433. package/src/internal/stream/haltStrategy.ts +94 -0
  434. package/src/internal/stream/handoff.ts +187 -0
  435. package/src/internal/stream/handoffSignal.ts +59 -0
  436. package/src/internal/stream/pull.ts +34 -0
  437. package/src/internal/stream/sinkEndReason.ts +30 -0
  438. package/src/internal/stream/zipAllState.ts +88 -0
  439. package/src/internal/stream/zipChunksState.ts +56 -0
  440. package/src/internal/stream.ts +8801 -0
  441. package/src/internal/string-utils.ts +107 -0
  442. package/src/internal/subscriptionRef.ts +138 -0
  443. package/src/internal/supervisor/patch.ts +190 -0
  444. package/src/internal/supervisor.ts +303 -0
  445. package/src/internal/synchronizedRef.ts +114 -0
  446. package/src/internal/take.ts +199 -0
  447. package/src/internal/testing/sleep.ts +27 -0
  448. package/src/internal/testing/suspendedWarningData.ts +85 -0
  449. package/src/internal/testing/warningData.ts +94 -0
  450. package/src/internal/tracer.ts +150 -0
  451. package/src/internal/trie.ts +722 -0
  452. package/src/internal/version.ts +7 -0
@@ -0,0 +1,3189 @@
1
+ import * as Arr from "../Array.js"
2
+ import type * as Cause from "../Cause.js"
3
+ import * as Chunk from "../Chunk.js"
4
+ import * as Context from "../Context.js"
5
+ import type * as Deferred from "../Deferred.js"
6
+ import type * as Differ from "../Differ.js"
7
+ import * as Duration from "../Duration.js"
8
+ import type * as Effect from "../Effect.js"
9
+ import * as Either from "../Either.js"
10
+ import * as Equal from "../Equal.js"
11
+ import type * as ExecutionStrategy from "../ExecutionStrategy.js"
12
+ import type * as Exit from "../Exit.js"
13
+ import type * as Fiber from "../Fiber.js"
14
+ import * as FiberId from "../FiberId.js"
15
+ import type * as FiberRef from "../FiberRef.js"
16
+ import type * as FiberStatus from "../FiberStatus.js"
17
+ import type { LazyArg } from "../Function.js"
18
+ import { dual, identity, pipe } from "../Function.js"
19
+ import { globalValue } from "../GlobalValue.js"
20
+ import * as Hash from "../Hash.js"
21
+ import * as HashMap from "../HashMap.js"
22
+ import type * as HashSet from "../HashSet.js"
23
+ import { format, NodeInspectSymbol, toJSON } from "../Inspectable.js"
24
+ import * as List from "../List.js"
25
+ import type * as LogLevel from "../LogLevel.js"
26
+ import type * as LogSpan from "../LogSpan.js"
27
+ import type * as MetricLabel from "../MetricLabel.js"
28
+ import * as MutableRef from "../MutableRef.js"
29
+ import * as Option from "../Option.js"
30
+ import { pipeArguments } from "../Pipeable.js"
31
+ import { hasProperty, isObject, isPromiseLike, type Predicate, type Refinement } from "../Predicate.js"
32
+ import type * as Request from "../Request.js"
33
+ import type * as BlockedRequests from "../RequestBlock.js"
34
+ import type * as RequestResolver from "../RequestResolver.js"
35
+ import type * as RuntimeFlags from "../RuntimeFlags.js"
36
+ import * as RuntimeFlagsPatch from "../RuntimeFlagsPatch.js"
37
+ import type * as Scope from "../Scope.js"
38
+ import type * as SourceLocation from "../SourceLocation.js"
39
+ import type * as Tracer from "../Tracer.js"
40
+ import type { NoInfer, NotFunction } from "../Types.js"
41
+ import { internalCall, YieldWrap } from "../Utils.js"
42
+ import * as blockedRequests_ from "./blockedRequests.js"
43
+ import * as internalCause from "./cause.js"
44
+ import * as deferred from "./deferred.js"
45
+ import * as internalDiffer from "./differ.js"
46
+ import { CommitPrototype, effectVariance, StructuralCommitPrototype } from "./effectable.js"
47
+ import { getBugErrorMessage } from "./errors.js"
48
+ import type * as FiberRuntime from "./fiberRuntime.js"
49
+ import type * as fiberScope from "./fiberScope.js"
50
+ import * as DeferredOpCodes from "./opCodes/deferred.js"
51
+ import * as OpCodes from "./opCodes/effect.js"
52
+ import * as runtimeFlags_ from "./runtimeFlags.js"
53
+ import { SingleShotGen } from "./singleShotGen.js"
54
+
55
+ // -----------------------------------------------------------------------------
56
+ // Effect
57
+ // -----------------------------------------------------------------------------
58
+
59
+ /**
60
+ * @internal
61
+ */
62
+ export const blocked = <A, E>(
63
+ blockedRequests: BlockedRequests.RequestBlock,
64
+ _continue: Effect.Effect<A, E>
65
+ ): Effect.Blocked<A, E> => {
66
+ const effect = new EffectPrimitive("Blocked") as any
67
+ effect.effect_instruction_i0 = blockedRequests
68
+ effect.effect_instruction_i1 = _continue
69
+ return effect
70
+ }
71
+
72
+ /**
73
+ * @internal
74
+ */
75
+ export const runRequestBlock = (
76
+ blockedRequests: BlockedRequests.RequestBlock
77
+ ): Effect.Effect<void> => {
78
+ const effect = new EffectPrimitive("RunBlocked") as any
79
+ effect.effect_instruction_i0 = blockedRequests
80
+ return effect
81
+ }
82
+
83
+ /** @internal */
84
+ export const EffectTypeId: Effect.EffectTypeId = Symbol.for("effect/Effect") as Effect.EffectTypeId
85
+
86
+ /** @internal */
87
+ export type Primitive =
88
+ | Async
89
+ | Commit
90
+ | Failure
91
+ | OnFailure
92
+ | OnSuccess
93
+ | OnStep
94
+ | OnSuccessAndFailure
95
+ | Success
96
+ | Sync
97
+ | UpdateRuntimeFlags
98
+ | While
99
+ | FromIterator
100
+ | WithRuntime
101
+ | Yield
102
+ | OpTag
103
+ | Blocked
104
+ | RunBlocked
105
+ | Either.Either<any, any>
106
+ | Option.Option<any>
107
+
108
+ /** @internal */
109
+ export type Continuation =
110
+ | OnSuccess
111
+ | OnStep
112
+ | OnSuccessAndFailure
113
+ | OnFailure
114
+ | While
115
+ | FromIterator
116
+ | RevertFlags
117
+
118
+ /** @internal */
119
+ export class RevertFlags {
120
+ readonly _op = OpCodes.OP_REVERT_FLAGS
121
+ constructor(
122
+ readonly patch: RuntimeFlagsPatch.RuntimeFlagsPatch,
123
+ readonly op: Primitive & { _op: OpCodes.OP_UPDATE_RUNTIME_FLAGS }
124
+ ) {
125
+ }
126
+ }
127
+
128
+ class EffectPrimitive {
129
+ public effect_instruction_i0 = undefined
130
+ public effect_instruction_i1 = undefined
131
+ public effect_instruction_i2 = undefined
132
+ public trace = undefined;
133
+ [EffectTypeId] = effectVariance
134
+ constructor(readonly _op: Primitive["_op"]) {}
135
+ [Equal.symbol](this: {}, that: unknown) {
136
+ return this === that
137
+ }
138
+ [Hash.symbol](this: {}) {
139
+ return Hash.cached(this, Hash.random(this))
140
+ }
141
+ pipe() {
142
+ return pipeArguments(this, arguments)
143
+ }
144
+ toJSON() {
145
+ return {
146
+ _id: "Effect",
147
+ _op: this._op,
148
+ effect_instruction_i0: toJSON(this.effect_instruction_i0),
149
+ effect_instruction_i1: toJSON(this.effect_instruction_i1),
150
+ effect_instruction_i2: toJSON(this.effect_instruction_i2)
151
+ }
152
+ }
153
+ toString() {
154
+ return format(this.toJSON())
155
+ }
156
+ [NodeInspectSymbol]() {
157
+ return this.toJSON()
158
+ }
159
+ [Symbol.iterator]() {
160
+ return new SingleShotGen(new YieldWrap(this))
161
+ }
162
+ }
163
+
164
+ /** @internal */
165
+ class EffectPrimitiveFailure {
166
+ public effect_instruction_i0 = undefined
167
+ public effect_instruction_i1 = undefined
168
+ public effect_instruction_i2 = undefined
169
+ public trace = undefined;
170
+ [EffectTypeId] = effectVariance
171
+ constructor(readonly _op: Primitive["_op"]) {
172
+ // @ts-expect-error
173
+ this._tag = _op
174
+ }
175
+ [Equal.symbol](this: {}, that: unknown) {
176
+ return exitIsExit(that) && that._op === "Failure" &&
177
+ // @ts-expect-error
178
+ Equal.equals(this.effect_instruction_i0, that.effect_instruction_i0)
179
+ }
180
+ [Hash.symbol](this: {}) {
181
+ return pipe(
182
+ // @ts-expect-error
183
+ Hash.string(this._tag),
184
+ // @ts-expect-error
185
+ Hash.combine(Hash.hash(this.effect_instruction_i0)),
186
+ Hash.cached(this)
187
+ )
188
+ }
189
+ get cause() {
190
+ return this.effect_instruction_i0
191
+ }
192
+ pipe() {
193
+ return pipeArguments(this, arguments)
194
+ }
195
+ toJSON() {
196
+ return {
197
+ _id: "Exit",
198
+ _tag: this._op,
199
+ cause: (this.cause as any).toJSON()
200
+ }
201
+ }
202
+ toString() {
203
+ return format(this.toJSON())
204
+ }
205
+ [NodeInspectSymbol]() {
206
+ return this.toJSON()
207
+ }
208
+ [Symbol.iterator]() {
209
+ return new SingleShotGen(new YieldWrap(this))
210
+ }
211
+ }
212
+
213
+ /** @internal */
214
+ class EffectPrimitiveSuccess {
215
+ public effect_instruction_i0 = undefined
216
+ public effect_instruction_i1 = undefined
217
+ public effect_instruction_i2 = undefined
218
+ public trace = undefined;
219
+ [EffectTypeId] = effectVariance
220
+ constructor(readonly _op: Primitive["_op"]) {
221
+ // @ts-expect-error
222
+ this._tag = _op
223
+ }
224
+ [Equal.symbol](this: {}, that: unknown) {
225
+ return exitIsExit(that) && that._op === "Success" &&
226
+ // @ts-expect-error
227
+ Equal.equals(this.effect_instruction_i0, that.effect_instruction_i0)
228
+ }
229
+ [Hash.symbol](this: {}) {
230
+ return pipe(
231
+ // @ts-expect-error
232
+ Hash.string(this._tag),
233
+ // @ts-expect-error
234
+ Hash.combine(Hash.hash(this.effect_instruction_i0)),
235
+ Hash.cached(this)
236
+ )
237
+ }
238
+ get value() {
239
+ return this.effect_instruction_i0
240
+ }
241
+ pipe() {
242
+ return pipeArguments(this, arguments)
243
+ }
244
+ toJSON() {
245
+ return {
246
+ _id: "Exit",
247
+ _tag: this._op,
248
+ value: toJSON(this.value)
249
+ }
250
+ }
251
+ toString() {
252
+ return format(this.toJSON())
253
+ }
254
+ [NodeInspectSymbol]() {
255
+ return this.toJSON()
256
+ }
257
+ [Symbol.iterator]() {
258
+ return new SingleShotGen(new YieldWrap(this))
259
+ }
260
+ }
261
+
262
+ /** @internal */
263
+ export type Op<Tag extends string, Body = {}> = Effect.Effect<never> & Body & {
264
+ readonly _op: Tag
265
+ }
266
+
267
+ /** @internal */
268
+ export interface Async extends
269
+ Op<OpCodes.OP_ASYNC, {
270
+ effect_instruction_i0(resume: (effect: Primitive) => void): void
271
+ readonly effect_instruction_i1: FiberId.FiberId
272
+ }>
273
+ {}
274
+
275
+ /** @internal */
276
+ export interface Blocked<out E = any, out A = any> extends
277
+ Op<"Blocked", {
278
+ readonly effect_instruction_i0: BlockedRequests.RequestBlock
279
+ readonly effect_instruction_i1: Effect.Effect<A, E>
280
+ }>
281
+ {}
282
+
283
+ /** @internal */
284
+ export interface RunBlocked extends
285
+ Op<"RunBlocked", {
286
+ readonly effect_instruction_i0: BlockedRequests.RequestBlock
287
+ }>
288
+ {}
289
+
290
+ /** @internal */
291
+ export interface Failure extends
292
+ Op<OpCodes.OP_FAILURE, {
293
+ readonly effect_instruction_i0: Cause.Cause<unknown>
294
+ }>
295
+ {}
296
+
297
+ /** @internal */
298
+ export interface OpTag extends Op<OpCodes.OP_TAG, {}> {}
299
+
300
+ /** @internal */
301
+ export interface Commit extends
302
+ Op<OpCodes.OP_COMMIT, {
303
+ commit(): Effect.Effect<unknown, unknown, unknown>
304
+ }>
305
+ {}
306
+
307
+ /** @internal */
308
+ export interface OnFailure extends
309
+ Op<OpCodes.OP_ON_FAILURE, {
310
+ readonly effect_instruction_i0: Primitive
311
+ effect_instruction_i1(a: Cause.Cause<unknown>): Primitive
312
+ }>
313
+ {}
314
+
315
+ /** @internal */
316
+ export interface OnSuccess extends
317
+ Op<OpCodes.OP_ON_SUCCESS, {
318
+ readonly effect_instruction_i0: Primitive
319
+ effect_instruction_i1(a: unknown): Primitive
320
+ }>
321
+ {}
322
+
323
+ /** @internal */
324
+ export interface OnStep extends Op<"OnStep", { readonly effect_instruction_i0: Primitive }> {}
325
+
326
+ /** @internal */
327
+ export interface OnSuccessAndFailure extends
328
+ Op<OpCodes.OP_ON_SUCCESS_AND_FAILURE, {
329
+ readonly effect_instruction_i0: Primitive
330
+ effect_instruction_i1(a: Cause.Cause<unknown>): Primitive
331
+ effect_instruction_i2(a: unknown): Primitive
332
+ }>
333
+ {}
334
+
335
+ /** @internal */
336
+ export interface Success extends
337
+ Op<OpCodes.OP_SUCCESS, {
338
+ readonly effect_instruction_i0: unknown
339
+ }>
340
+ {}
341
+
342
+ /** @internal */
343
+ export interface Sync extends
344
+ Op<OpCodes.OP_SYNC, {
345
+ effect_instruction_i0(): unknown
346
+ }>
347
+ {}
348
+
349
+ /** @internal */
350
+ export interface UpdateRuntimeFlags extends
351
+ Op<OpCodes.OP_UPDATE_RUNTIME_FLAGS, {
352
+ readonly effect_instruction_i0: RuntimeFlagsPatch.RuntimeFlagsPatch
353
+ readonly effect_instruction_i1?: (oldRuntimeFlags: RuntimeFlags.RuntimeFlags) => Primitive
354
+ }>
355
+ {}
356
+
357
+ /** @internal */
358
+ export interface While extends
359
+ Op<OpCodes.OP_WHILE, {
360
+ effect_instruction_i0(): boolean
361
+ effect_instruction_i1(): Primitive
362
+ effect_instruction_i2(a: unknown): void
363
+ }>
364
+ {}
365
+
366
+ /** @internal */
367
+ export interface FromIterator extends
368
+ Op<OpCodes.OP_ITERATOR, {
369
+ effect_instruction_i0: Iterator<YieldWrap<Primitive>, any>
370
+ }>
371
+ {}
372
+
373
+ /** @internal */
374
+ export interface WithRuntime extends
375
+ Op<OpCodes.OP_WITH_RUNTIME, {
376
+ effect_instruction_i0(fiber: FiberRuntime.FiberRuntime<unknown, unknown>, status: FiberStatus.Running): Primitive
377
+ }>
378
+ {}
379
+
380
+ /** @internal */
381
+ export interface Yield extends Op<OpCodes.OP_YIELD> {}
382
+
383
+ /** @internal */
384
+ export const isEffect = (u: unknown): u is Effect.Effect<unknown, unknown, unknown> => hasProperty(u, EffectTypeId)
385
+
386
+ /* @internal */
387
+ export const withFiberRuntime = <A, E = never, R = never>(
388
+ withRuntime: (fiber: FiberRuntime.FiberRuntime<A, E>, status: FiberStatus.Running) => Effect.Effect<A, E, R>
389
+ ): Effect.Effect<A, E, R> => {
390
+ const effect = new EffectPrimitive(OpCodes.OP_WITH_RUNTIME) as any
391
+ effect.effect_instruction_i0 = withRuntime
392
+ return effect
393
+ }
394
+
395
+ /* @internal */
396
+ export const acquireUseRelease: {
397
+ <A2, E2, R2, A, X, R3>(
398
+ use: (a: A) => Effect.Effect<A2, E2, R2>,
399
+ release: (a: A, exit: Exit.Exit<A2, E2>) => Effect.Effect<X, never, R3>
400
+ ): <E, R>(acquire: Effect.Effect<A, E, R>) => Effect.Effect<A2, E2 | E, R2 | R3 | R>
401
+ <A, E, R, A2, E2, R2, X, R3>(
402
+ acquire: Effect.Effect<A, E, R>,
403
+ use: (a: A) => Effect.Effect<A2, E2, R2>,
404
+ release: (a: A, exit: Exit.Exit<A2, E2>) => Effect.Effect<X, never, R3>
405
+ ): Effect.Effect<A2, E | E2, R | R2 | R3>
406
+ } = dual(3, <A, E, R, A2, E2, R2, X, R3>(
407
+ acquire: Effect.Effect<A, E, R>,
408
+ use: (a: A) => Effect.Effect<A2, E2, R2>,
409
+ release: (a: A, exit: Exit.Exit<A2, E2>) => Effect.Effect<X, never, R3>
410
+ ): Effect.Effect<A2, E | E2, R | R2 | R3> =>
411
+ uninterruptibleMask((restore) =>
412
+ flatMap(
413
+ acquire,
414
+ (a) =>
415
+ flatMap(exit(suspend(() => restore(use(a)))), (exit): Effect.Effect<A2, E | E2, R | R2 | R3> => {
416
+ return suspend(() => release(a, exit)).pipe(
417
+ matchCauseEffect({
418
+ onFailure: (cause) => {
419
+ switch (exit._tag) {
420
+ case OpCodes.OP_FAILURE:
421
+ return failCause(internalCause.sequential(exit.effect_instruction_i0, cause))
422
+ case OpCodes.OP_SUCCESS:
423
+ return failCause(cause)
424
+ }
425
+ },
426
+ onSuccess: () => exit
427
+ })
428
+ )
429
+ })
430
+ )
431
+ ))
432
+
433
+ /* @internal */
434
+ export const as: {
435
+ <B>(value: B): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E, R>
436
+ <A, E, R, B>(self: Effect.Effect<A, E, R>, value: B): Effect.Effect<B, E, R>
437
+ } = dual(
438
+ 2,
439
+ <A, E, R, B>(self: Effect.Effect<A, E, R>, value: B): Effect.Effect<B, E, R> => flatMap(self, () => succeed(value))
440
+ )
441
+
442
+ /* @internal */
443
+ export const asVoid = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<void, E, R> => as(self, void 0)
444
+
445
+ /* @internal */
446
+ export const custom: {
447
+ <X, A, E, R>(i0: X, body: (this: { effect_instruction_i0: X }) => Effect.Effect<A, E, R>): Effect.Effect<A, E, R>
448
+ <X, Y, A, E, R>(
449
+ i0: X,
450
+ i1: Y,
451
+ body: (this: { effect_instruction_i0: X; effect_instruction_i1: Y }) => Effect.Effect<A, E, R>
452
+ ): Effect.Effect<A, E, R>
453
+ <X, Y, Z, A, E, R>(
454
+ i0: X,
455
+ i1: Y,
456
+ i2: Z,
457
+ body: (
458
+ this: { effect_instruction_i0: X; effect_instruction_i1: Y; effect_instruction_i2: Z }
459
+ ) => Effect.Effect<A, E, R>
460
+ ): Effect.Effect<A, E, R>
461
+ } = function() {
462
+ const wrapper = new EffectPrimitive(OpCodes.OP_COMMIT) as any
463
+ switch (arguments.length) {
464
+ case 2: {
465
+ wrapper.effect_instruction_i0 = arguments[0]
466
+ wrapper.commit = arguments[1]
467
+ break
468
+ }
469
+ case 3: {
470
+ wrapper.effect_instruction_i0 = arguments[0]
471
+ wrapper.effect_instruction_i1 = arguments[1]
472
+ wrapper.commit = arguments[2]
473
+ break
474
+ }
475
+ case 4: {
476
+ wrapper.effect_instruction_i0 = arguments[0]
477
+ wrapper.effect_instruction_i1 = arguments[1]
478
+ wrapper.effect_instruction_i2 = arguments[2]
479
+ wrapper.commit = arguments[3]
480
+ break
481
+ }
482
+ default: {
483
+ throw new Error(getBugErrorMessage("you're not supposed to end up here"))
484
+ }
485
+ }
486
+ return wrapper
487
+ }
488
+
489
+ /* @internal */
490
+ export const unsafeAsync = <A, E = never, R = never>(
491
+ register: (
492
+ callback: (_: Effect.Effect<A, E, R>) => void
493
+ ) => void | Effect.Effect<void, never, R>,
494
+ blockingOn: FiberId.FiberId = FiberId.none
495
+ ): Effect.Effect<A, E, R> => {
496
+ const effect = new EffectPrimitive(OpCodes.OP_ASYNC) as any
497
+ let cancelerRef: Effect.Effect<void, never, R> | void = undefined
498
+ effect.effect_instruction_i0 = (resume: (_: Effect.Effect<A, E, R>) => void) => {
499
+ cancelerRef = register(resume)
500
+ }
501
+ effect.effect_instruction_i1 = blockingOn
502
+ return onInterrupt(effect, (_) => isEffect(cancelerRef) ? cancelerRef : void_)
503
+ }
504
+
505
+ /* @internal */
506
+ export const asyncInterrupt = <A, E = never, R = never>(
507
+ register: (
508
+ callback: (_: Effect.Effect<A, E, R>) => void
509
+ ) => void | Effect.Effect<void, never, R>,
510
+ blockingOn: FiberId.FiberId = FiberId.none
511
+ ): Effect.Effect<A, E, R> => suspend(() => unsafeAsync(register, blockingOn))
512
+
513
+ const async_ = <A, E = never, R = never>(
514
+ resume: (
515
+ callback: (_: Effect.Effect<A, E, R>) => void,
516
+ signal: AbortSignal
517
+ ) => void | Effect.Effect<void, never, R>,
518
+ blockingOn: FiberId.FiberId = FiberId.none
519
+ ): Effect.Effect<A, E, R> => {
520
+ return custom(resume, function() {
521
+ let backingResume: ((_: Effect.Effect<A, E, R>) => void) | undefined = undefined
522
+ let pendingEffect: Effect.Effect<A, E, R> | undefined = undefined
523
+ function proxyResume(effect: Effect.Effect<A, E, R>) {
524
+ if (backingResume) {
525
+ backingResume(effect)
526
+ } else if (pendingEffect === undefined) {
527
+ pendingEffect = effect
528
+ }
529
+ }
530
+ const effect = new EffectPrimitive(OpCodes.OP_ASYNC) as any
531
+ effect.effect_instruction_i0 = (resume: (_: Effect.Effect<A, E, R>) => void) => {
532
+ backingResume = resume
533
+ if (pendingEffect) {
534
+ resume(pendingEffect)
535
+ }
536
+ }
537
+ effect.effect_instruction_i1 = blockingOn
538
+ let cancelerRef: Effect.Effect<void, never, R> | void = undefined
539
+ let controllerRef: AbortController | void = undefined
540
+ if (this.effect_instruction_i0.length !== 1) {
541
+ controllerRef = new AbortController()
542
+ cancelerRef = internalCall(() => this.effect_instruction_i0(proxyResume, controllerRef!.signal))
543
+ } else {
544
+ cancelerRef = internalCall(() => (this.effect_instruction_i0 as any)(proxyResume))
545
+ }
546
+ return (cancelerRef || controllerRef) ?
547
+ onInterrupt(effect, (_) => {
548
+ if (controllerRef) {
549
+ controllerRef.abort()
550
+ }
551
+ return cancelerRef ?? void_
552
+ }) :
553
+ effect
554
+ })
555
+ }
556
+ export {
557
+ /** @internal */
558
+ async_ as async
559
+ }
560
+
561
+ /* @internal */
562
+ export const catchAllCause = dual<
563
+ <E, A2, E2, R2>(
564
+ f: (cause: Cause.Cause<E>) => Effect.Effect<A2, E2, R2>
565
+ ) => <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A, E2, R2 | R>,
566
+ <A, E, R, A2, E2, R2>(
567
+ self: Effect.Effect<A, E, R>,
568
+ f: (cause: Cause.Cause<E>) => Effect.Effect<A2, E2, R2>
569
+ ) => Effect.Effect<A2 | A, E2, R2 | R>
570
+ >(2, (self, f) => {
571
+ const effect = new EffectPrimitive(OpCodes.OP_ON_FAILURE) as any
572
+ effect.effect_instruction_i0 = self
573
+ effect.effect_instruction_i1 = f
574
+ return effect
575
+ })
576
+
577
+ /* @internal */
578
+ export const catchAll: {
579
+ <E, A2, E2, R2>(
580
+ f: (e: E) => Effect.Effect<A2, E2, R2>
581
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A, E2, R2 | R>
582
+ <A, E, R, A2, E2, R2>(
583
+ self: Effect.Effect<A, E, R>,
584
+ f: (e: E) => Effect.Effect<A2, E2, R2>
585
+ ): Effect.Effect<A2 | A, E2, R2 | R>
586
+ } = dual(
587
+ 2,
588
+ <A, E, R, A2, E2, R2>(
589
+ self: Effect.Effect<A, E, R>,
590
+ f: (e: E) => Effect.Effect<A2, E2, R2>
591
+ ): Effect.Effect<A2 | A, E2, R2 | R> => matchEffect(self, { onFailure: f, onSuccess: succeed })
592
+ )
593
+
594
+ /* @internal */
595
+ export const catchIf: {
596
+ <E, EB extends E, A2, E2, R2>(
597
+ refinement: Refinement<NoInfer<E>, EB>,
598
+ f: (e: EB) => Effect.Effect<A2, E2, R2>
599
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A, E2 | Exclude<E, EB>, R2 | R>
600
+ <E, A2, E2, R2>(
601
+ predicate: Predicate<NoInfer<E>>,
602
+ f: (e: NoInfer<E>) => Effect.Effect<A2, E2, R2>
603
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A, E | E2, R2 | R>
604
+ <A, E, R, EB extends E, A2, E2, R2>(
605
+ self: Effect.Effect<A, E, R>,
606
+ refinement: Refinement<E, EB>,
607
+ f: (e: EB) => Effect.Effect<A2, E2, R2>
608
+ ): Effect.Effect<A2 | A, E2 | Exclude<E, EB>, R2 | R>
609
+ <A, E, R, A2, E2, R2>(
610
+ self: Effect.Effect<A, E, R>,
611
+ predicate: Predicate<E>,
612
+ f: (e: E) => Effect.Effect<A2, E2, R2>
613
+ ): Effect.Effect<A | A2, E | E2, R | R2>
614
+ } = dual(3, <A, E, R, A2, E2, R2>(
615
+ self: Effect.Effect<A, E, R>,
616
+ predicate: Predicate<E>,
617
+ f: (e: E) => Effect.Effect<A2, E2, R2>
618
+ ): Effect.Effect<A | A2, E | E2, R | R2> =>
619
+ catchAllCause(self, (cause): Effect.Effect<A | A2, E | E2, R | R2> => {
620
+ const either = internalCause.failureOrCause(cause)
621
+ switch (either._tag) {
622
+ case "Left":
623
+ return predicate(either.left) ? f(either.left) : failCause(cause)
624
+ case "Right":
625
+ return failCause(either.right)
626
+ }
627
+ }))
628
+
629
+ /* @internal */
630
+ export const catchSome = dual<
631
+ <E, A2, E2, R2>(
632
+ pf: (e: NoInfer<E>) => Option.Option<Effect.Effect<A2, E2, R2>>
633
+ ) => <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A, E | E2, R2 | R>,
634
+ <A, E, R, A2, E2, R2>(
635
+ self: Effect.Effect<A, E, R>,
636
+ pf: (e: NoInfer<E>) => Option.Option<Effect.Effect<A2, E2, R2>>
637
+ ) => Effect.Effect<A2 | A, E | E2, R2 | R>
638
+ >(2, <A, E, R, A2, E2, R2>(
639
+ self: Effect.Effect<A, E, R>,
640
+ pf: (e: NoInfer<E>) => Option.Option<Effect.Effect<A2, E2, R2>>
641
+ ) =>
642
+ catchAllCause(self, (cause): Effect.Effect<A2 | A, E | E2, R2 | R> => {
643
+ const either = internalCause.failureOrCause(cause)
644
+ switch (either._tag) {
645
+ case "Left":
646
+ return pipe(pf(either.left), Option.getOrElse(() => failCause(cause)))
647
+ case "Right":
648
+ return failCause(either.right)
649
+ }
650
+ }))
651
+
652
+ /* @internal */
653
+ export const checkInterruptible = <A, E, R>(
654
+ f: (isInterruptible: boolean) => Effect.Effect<A, E, R>
655
+ ): Effect.Effect<A, E, R> => withFiberRuntime((_, status) => f(runtimeFlags_.interruption(status.runtimeFlags)))
656
+
657
+ const originalSymbol = Symbol.for("effect/OriginalAnnotation")
658
+
659
+ /* @internal */
660
+ export const originalInstance = <E>(obj: E): E => {
661
+ if (hasProperty(obj, originalSymbol)) {
662
+ // @ts-expect-error
663
+ return obj[originalSymbol]
664
+ }
665
+ return obj
666
+ }
667
+
668
+ /* @internal */
669
+ export const capture = <E>(obj: E & object, span: Option.Option<Tracer.Span>): E => {
670
+ if (Option.isSome(span)) {
671
+ return new Proxy(obj, {
672
+ has(target, p) {
673
+ return p === internalCause.spanSymbol || p === originalSymbol || p in target
674
+ },
675
+ get(target, p) {
676
+ if (p === internalCause.spanSymbol) {
677
+ return span.value
678
+ }
679
+ if (p === originalSymbol) {
680
+ return obj
681
+ }
682
+ // @ts-expect-error
683
+ return target[p]
684
+ }
685
+ })
686
+ }
687
+ return obj
688
+ }
689
+
690
+ /* @internal */
691
+ export const die = (defect: unknown): Effect.Effect<never> =>
692
+ isObject(defect) && !(internalCause.spanSymbol in defect) ?
693
+ withFiberRuntime((fiber) => failCause(internalCause.die(capture(defect, currentSpanFromFiber(fiber)))))
694
+ : failCause(internalCause.die(defect))
695
+
696
+ /* @internal */
697
+ export const dieMessage = (message: string): Effect.Effect<never> =>
698
+ failCauseSync(() => internalCause.die(new RuntimeException(message)))
699
+
700
+ /* @internal */
701
+ export const dieSync = (evaluate: LazyArg<unknown>): Effect.Effect<never> => flatMap(sync(evaluate), die)
702
+
703
+ /* @internal */
704
+ export const either = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<Either.Either<A, E>, never, R> =>
705
+ matchEffect(self, {
706
+ onFailure: (e) => succeed(Either.left(e)),
707
+ onSuccess: (a) => succeed(Either.right(a))
708
+ })
709
+
710
+ /* @internal */
711
+ export const exit = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<Exit.Exit<A, E>, never, R> =>
712
+ matchCause(self, {
713
+ onFailure: exitFailCause,
714
+ onSuccess: exitSucceed
715
+ })
716
+
717
+ /* @internal */
718
+ export const fail = <E>(error: E): Effect.Effect<never, E> =>
719
+ isObject(error) && !(internalCause.spanSymbol in error) ?
720
+ withFiberRuntime((fiber) => failCause(internalCause.fail(capture(error, currentSpanFromFiber(fiber)))))
721
+ : failCause(internalCause.fail(error))
722
+
723
+ /* @internal */
724
+ export const failSync = <E>(evaluate: LazyArg<E>): Effect.Effect<never, E> => flatMap(sync(evaluate), fail)
725
+
726
+ /* @internal */
727
+ export const failCause = <E>(cause: Cause.Cause<E>): Effect.Effect<never, E> => {
728
+ const effect = new EffectPrimitiveFailure(OpCodes.OP_FAILURE) as any
729
+ effect.effect_instruction_i0 = cause
730
+ return effect
731
+ }
732
+
733
+ /* @internal */
734
+ export const failCauseSync = <E>(
735
+ evaluate: LazyArg<Cause.Cause<E>>
736
+ ): Effect.Effect<never, E> => flatMap(sync(evaluate), failCause)
737
+
738
+ /* @internal */
739
+ export const fiberId: Effect.Effect<FiberId.FiberId> = withFiberRuntime((state) => succeed(state.id()))
740
+
741
+ /* @internal */
742
+ export const fiberIdWith = <A, E, R>(
743
+ f: (descriptor: FiberId.Runtime) => Effect.Effect<A, E, R>
744
+ ): Effect.Effect<A, E, R> => withFiberRuntime((state) => f(state.id()))
745
+
746
+ /* @internal */
747
+ export const flatMap = dual<
748
+ <A, B, E1, R1>(
749
+ f: (a: A) => Effect.Effect<B, E1, R1>
750
+ ) => <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E1 | E, R1 | R>,
751
+ <A, E, R, B, E1, R1>(
752
+ self: Effect.Effect<A, E, R>,
753
+ f: (a: A) => Effect.Effect<B, E1, R1>
754
+ ) => Effect.Effect<B, E | E1, R | R1>
755
+ >(
756
+ 2,
757
+ (self, f) => {
758
+ const effect = new EffectPrimitive(OpCodes.OP_ON_SUCCESS) as any
759
+ effect.effect_instruction_i0 = self
760
+ effect.effect_instruction_i1 = f
761
+ return effect
762
+ }
763
+ )
764
+
765
+ /* @internal */
766
+ export const andThen: {
767
+ <A, X>(
768
+ f: (a: NoInfer<A>) => X
769
+ ): <E, R>(
770
+ self: Effect.Effect<A, E, R>
771
+ ) => [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
772
+ : [X] extends [PromiseLike<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
773
+ : Effect.Effect<X, E, R>
774
+ <X>(
775
+ f: NotFunction<X>
776
+ ): <A, E, R>(
777
+ self: Effect.Effect<A, E, R>
778
+ ) => [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
779
+ : [X] extends [PromiseLike<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
780
+ : Effect.Effect<X, E, R>
781
+ <A, E, R, X>(
782
+ self: Effect.Effect<A, E, R>,
783
+ f: (a: NoInfer<A>) => X
784
+ ): [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
785
+ : [X] extends [PromiseLike<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
786
+ : Effect.Effect<X, E, R>
787
+ <A, E, R, X>(
788
+ self: Effect.Effect<A, E, R>,
789
+ f: NotFunction<X>
790
+ ): [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
791
+ : [X] extends [PromiseLike<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
792
+ : Effect.Effect<X, E, R>
793
+ } = dual(2, (self, f) =>
794
+ flatMap(self, (a) => {
795
+ const b = typeof f === "function" ? (f as any)(a) : f
796
+ if (isEffect(b)) {
797
+ return b
798
+ } else if (isPromiseLike(b)) {
799
+ return unsafeAsync<any, Cause.UnknownException>((resume) => {
800
+ b.then((a) => resume(succeed(a)), (e) =>
801
+ resume(fail(new UnknownException(e, "An unknown error occurred in Effect.andThen"))))
802
+ })
803
+ }
804
+ return succeed(b)
805
+ }))
806
+
807
+ /* @internal */
808
+ export const step = <A, E, R>(
809
+ self: Effect.Effect<A, E, R>
810
+ ): Effect.Effect<Exit.Exit<A, E> | Effect.Blocked<A, E>, never, R> => {
811
+ const effect = new EffectPrimitive("OnStep") as any
812
+ effect.effect_instruction_i0 = self
813
+ return effect
814
+ }
815
+
816
+ /* @internal */
817
+ export const flatten = <A, E1, R1, E, R>(
818
+ self: Effect.Effect<Effect.Effect<A, E1, R1>, E, R>
819
+ ): Effect.Effect<A, E | E1, R | R1> => flatMap(self, identity)
820
+
821
+ /* @internal */
822
+ export const flip = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<E, A, R> =>
823
+ matchEffect(self, { onFailure: succeed, onSuccess: fail })
824
+
825
+ /* @internal */
826
+ export const matchCause: {
827
+ <E, A2, A, A3>(
828
+ options: {
829
+ readonly onFailure: (cause: Cause.Cause<E>) => A2
830
+ readonly onSuccess: (a: A) => A3
831
+ }
832
+ ): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A3, never, R>
833
+ <A, E, R, A2, A3>(
834
+ self: Effect.Effect<A, E, R>,
835
+ options: {
836
+ readonly onFailure: (cause: Cause.Cause<E>) => A2
837
+ readonly onSuccess: (a: A) => A3
838
+ }
839
+ ): Effect.Effect<A2 | A3, never, R>
840
+ } = dual(2, <A, E, R, A2, A3>(
841
+ self: Effect.Effect<A, E, R>,
842
+ options: {
843
+ readonly onFailure: (cause: Cause.Cause<E>) => A2
844
+ readonly onSuccess: (a: A) => A3
845
+ }
846
+ ): Effect.Effect<A2 | A3, never, R> =>
847
+ matchCauseEffect(self, {
848
+ onFailure: (cause) => succeed(options.onFailure(cause)),
849
+ onSuccess: (a) => succeed(options.onSuccess(a))
850
+ }))
851
+
852
+ /* @internal */
853
+ export const matchCauseEffect: {
854
+ <E, A2, E2, R2, A, A3, E3, R3>(
855
+ options: {
856
+ readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<A2, E2, R2>
857
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
858
+ }
859
+ ): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A3, E2 | E3, R2 | R3 | R>
860
+ <A, E, R, A2, E2, R2, A3, E3, R3>(
861
+ self: Effect.Effect<A, E, R>,
862
+ options: {
863
+ readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<A2, E2, R2>
864
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
865
+ }
866
+ ): Effect.Effect<A2 | A3, E2 | E3, R2 | R3 | R>
867
+ } = dual(2, <A, E, R, A2, E2, R2, A3, E3, R3>(
868
+ self: Effect.Effect<A, E, R>,
869
+ options: {
870
+ readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<A2, E2, R2>
871
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
872
+ }
873
+ ): Effect.Effect<A2 | A3, E2 | E3, R2 | R3 | R> => {
874
+ const effect = new EffectPrimitive(OpCodes.OP_ON_SUCCESS_AND_FAILURE) as any
875
+ effect.effect_instruction_i0 = self
876
+ effect.effect_instruction_i1 = options.onFailure
877
+ effect.effect_instruction_i2 = options.onSuccess
878
+ return effect
879
+ })
880
+
881
+ /* @internal */
882
+ export const matchEffect: {
883
+ <E, A2, E2, R2, A, A3, E3, R3>(
884
+ options: {
885
+ readonly onFailure: (e: E) => Effect.Effect<A2, E2, R2>
886
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
887
+ }
888
+ ): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A3, E2 | E3, R2 | R3 | R>
889
+ <A, E, R, A2, E2, R2, A3, E3, R3>(
890
+ self: Effect.Effect<A, E, R>,
891
+ options: {
892
+ readonly onFailure: (e: E) => Effect.Effect<A2, E2, R2>
893
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
894
+ }
895
+ ): Effect.Effect<A2 | A3, E2 | E3, R2 | R3 | R>
896
+ } = dual(2, <A, E, R, A2, E2, R2, A3, E3, R3>(
897
+ self: Effect.Effect<A, E, R>,
898
+ options: {
899
+ readonly onFailure: (e: E) => Effect.Effect<A2, E2, R2>
900
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
901
+ }
902
+ ): Effect.Effect<A2 | A3, E2 | E3, R2 | R3 | R> =>
903
+ matchCauseEffect(self, {
904
+ onFailure: (cause) => {
905
+ const defects = internalCause.defects(cause)
906
+ if (defects.length > 0) {
907
+ return failCause(internalCause.electFailures(cause))
908
+ }
909
+ const failures = internalCause.failures(cause)
910
+ if (failures.length > 0) {
911
+ return options.onFailure(Chunk.unsafeHead(failures))
912
+ }
913
+ return failCause(cause as Cause.Cause<never>)
914
+ },
915
+ onSuccess: options.onSuccess
916
+ }))
917
+
918
+ /* @internal */
919
+ export const forEachSequential: {
920
+ <A, B, E, R>(f: (a: A, i: number) => Effect.Effect<B, E, R>): (self: Iterable<A>) => Effect.Effect<Array<B>, E, R>
921
+ <A, B, E, R>(self: Iterable<A>, f: (a: A, i: number) => Effect.Effect<B, E, R>): Effect.Effect<Array<B>, E, R>
922
+ } = dual(
923
+ 2,
924
+ <A, B, E, R>(self: Iterable<A>, f: (a: A, i: number) => Effect.Effect<B, E, R>): Effect.Effect<Array<B>, E, R> =>
925
+ suspend(() => {
926
+ const arr = Arr.fromIterable(self)
927
+ const ret = Arr.allocate<B>(arr.length)
928
+ let i = 0
929
+ return as(
930
+ whileLoop({
931
+ while: () => i < arr.length,
932
+ body: () => f(arr[i], i),
933
+ step: (b) => {
934
+ ret[i++] = b
935
+ }
936
+ }),
937
+ ret as Array<B>
938
+ )
939
+ })
940
+ )
941
+
942
+ /* @internal */
943
+ export const forEachSequentialDiscard: {
944
+ <A, B, E, R>(f: (a: A, i: number) => Effect.Effect<B, E, R>): (self: Iterable<A>) => Effect.Effect<void, E, R>
945
+ <A, B, E, R>(self: Iterable<A>, f: (a: A, i: number) => Effect.Effect<B, E, R>): Effect.Effect<void, E, R>
946
+ } = dual(
947
+ 2,
948
+ <A, B, E, R>(self: Iterable<A>, f: (a: A, i: number) => Effect.Effect<B, E, R>): Effect.Effect<void, E, R> =>
949
+ suspend(() => {
950
+ const arr = Arr.fromIterable(self)
951
+ let i = 0
952
+ return whileLoop({
953
+ while: () => i < arr.length,
954
+ body: () => f(arr[i], i),
955
+ step: () => {
956
+ i++
957
+ }
958
+ })
959
+ })
960
+ )
961
+
962
+ /* @internal */
963
+ export const if_ = dual<
964
+ <A1, E1, R1, A2, E2, R2>(
965
+ options: {
966
+ readonly onTrue: LazyArg<Effect.Effect<A1, E1, R1>>
967
+ readonly onFalse: LazyArg<Effect.Effect<A2, E2, R2>>
968
+ }
969
+ ) => <E = never, R = never>(
970
+ self: Effect.Effect<boolean, E, R> | boolean
971
+ ) => Effect.Effect<A1 | A2, E | E1 | E2, R | R1 | R2>,
972
+ <A1, E1, R1, A2, E2, R2, E = never, R = never>(
973
+ self: Effect.Effect<boolean, E, R> | boolean,
974
+ options: {
975
+ readonly onTrue: LazyArg<Effect.Effect<A1, E1, R1>>
976
+ readonly onFalse: LazyArg<Effect.Effect<A2, E2, R2>>
977
+ }
978
+ ) => Effect.Effect<A1 | A2, E1 | E2 | E, R1 | R2 | R>
979
+ >(
980
+ (args) => typeof args[0] === "boolean" || isEffect(args[0]),
981
+ <A1, E1, R1, A2, E2, R2, E = never, R = never>(
982
+ self: Effect.Effect<boolean, E, R> | boolean,
983
+ options: {
984
+ readonly onTrue: LazyArg<Effect.Effect<A1, E1, R1>>
985
+ readonly onFalse: LazyArg<Effect.Effect<A2, E2, R2>>
986
+ }
987
+ ): Effect.Effect<A1 | A2, E1 | E2 | E, R1 | R2 | R> =>
988
+ isEffect(self)
989
+ ? flatMap(self, (b): Effect.Effect<A1 | A2, E1 | E2, R1 | R2> => (b ? options.onTrue() : options.onFalse()))
990
+ : self
991
+ ? options.onTrue()
992
+ : options.onFalse()
993
+ )
994
+
995
+ /* @internal */
996
+ export const interrupt: Effect.Effect<never> = flatMap(fiberId, (fiberId) => interruptWith(fiberId))
997
+
998
+ /* @internal */
999
+ export const interruptWith = (fiberId: FiberId.FiberId): Effect.Effect<never> =>
1000
+ failCause(internalCause.interrupt(fiberId))
1001
+
1002
+ /* @internal */
1003
+ export const interruptible = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> => {
1004
+ const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1005
+ effect.effect_instruction_i0 = RuntimeFlagsPatch.enable(runtimeFlags_.Interruption)
1006
+ effect.effect_instruction_i1 = () => self
1007
+ return effect
1008
+ }
1009
+
1010
+ /* @internal */
1011
+ export const interruptibleMask = <A, E, R>(
1012
+ f: (restore: <AX, EX, RX>(effect: Effect.Effect<AX, EX, RX>) => Effect.Effect<AX, EX, RX>) => Effect.Effect<A, E, R>
1013
+ ): Effect.Effect<A, E, R> =>
1014
+ custom(f, function() {
1015
+ const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1016
+ effect.effect_instruction_i0 = RuntimeFlagsPatch.enable(runtimeFlags_.Interruption)
1017
+ effect.effect_instruction_i1 = (oldFlags: RuntimeFlags.RuntimeFlags) =>
1018
+ runtimeFlags_.interruption(oldFlags)
1019
+ ? internalCall(() => this.effect_instruction_i0(interruptible))
1020
+ : internalCall(() => this.effect_instruction_i0(uninterruptible))
1021
+ return effect
1022
+ })
1023
+
1024
+ /* @internal */
1025
+ export const intoDeferred: {
1026
+ <A, E>(deferred: Deferred.Deferred<A, E>): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<boolean, never, R>
1027
+ <A, E, R>(self: Effect.Effect<A, E, R>, deferred: Deferred.Deferred<A, E>): Effect.Effect<boolean, never, R>
1028
+ } = dual(
1029
+ 2,
1030
+ <A, E, R>(self: Effect.Effect<A, E, R>, deferred: Deferred.Deferred<A, E>): Effect.Effect<boolean, never, R> =>
1031
+ uninterruptibleMask((restore) =>
1032
+ flatMap(
1033
+ exit(restore(self)),
1034
+ (exit) => deferredDone(deferred, exit)
1035
+ )
1036
+ )
1037
+ )
1038
+
1039
+ /* @internal */
1040
+ export const map: {
1041
+ <A, B>(f: (a: A) => B): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E, R>
1042
+ <A, E, R, B>(self: Effect.Effect<A, E, R>, f: (a: A) => B): Effect.Effect<B, E, R>
1043
+ } = dual(
1044
+ 2,
1045
+ <A, E, R, B>(self: Effect.Effect<A, E, R>, f: (a: A) => B): Effect.Effect<B, E, R> =>
1046
+ flatMap(self, (a) => sync(() => f(a)))
1047
+ )
1048
+
1049
+ /* @internal */
1050
+ export const mapBoth: {
1051
+ <E, E2, A, A2>(
1052
+ options: { readonly onFailure: (e: E) => E2; readonly onSuccess: (a: A) => A2 }
1053
+ ): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2, E2, R>
1054
+ <A, E, R, E2, A2>(
1055
+ self: Effect.Effect<A, E, R>,
1056
+ options: { readonly onFailure: (e: E) => E2; readonly onSuccess: (a: A) => A2 }
1057
+ ): Effect.Effect<A2, E2, R>
1058
+ } = dual(2, <A, E, R, E2, A2>(
1059
+ self: Effect.Effect<A, E, R>,
1060
+ options: { readonly onFailure: (e: E) => E2; readonly onSuccess: (a: A) => A2 }
1061
+ ): Effect.Effect<A2, E2, R> =>
1062
+ matchEffect(self, {
1063
+ onFailure: (e) => failSync(() => options.onFailure(e)),
1064
+ onSuccess: (a) => sync(() => options.onSuccess(a))
1065
+ }))
1066
+
1067
+ /* @internal */
1068
+ export const mapError: {
1069
+ <E, E2>(f: (e: E) => E2): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E2, R>
1070
+ <A, E, R, E2>(self: Effect.Effect<A, E, R>, f: (e: E) => E2): Effect.Effect<A, E2, R>
1071
+ } = dual(
1072
+ 2,
1073
+ <A, E, R, E2>(self: Effect.Effect<A, E, R>, f: (e: E) => E2): Effect.Effect<A, E2, R> =>
1074
+ matchCauseEffect(self, {
1075
+ onFailure: (cause) => {
1076
+ const either = internalCause.failureOrCause(cause)
1077
+ switch (either._tag) {
1078
+ case "Left": {
1079
+ return failSync(() => f(either.left))
1080
+ }
1081
+ case "Right": {
1082
+ return failCause(either.right)
1083
+ }
1084
+ }
1085
+ },
1086
+ onSuccess: succeed
1087
+ })
1088
+ )
1089
+
1090
+ /* @internal */
1091
+ export const onError: {
1092
+ <E, X, R2>(
1093
+ cleanup: (cause: Cause.Cause<E>) => Effect.Effect<X, never, R2>
1094
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R2 | R>
1095
+ <A, E, R, X, R2>(
1096
+ self: Effect.Effect<A, E, R>,
1097
+ cleanup: (cause: Cause.Cause<E>) => Effect.Effect<X, never, R2>
1098
+ ): Effect.Effect<A, E, R2 | R>
1099
+ } = dual(2, <A, E, R, X, R2>(
1100
+ self: Effect.Effect<A, E, R>,
1101
+ cleanup: (cause: Cause.Cause<E>) => Effect.Effect<X, never, R2>
1102
+ ): Effect.Effect<A, E, R2 | R> =>
1103
+ onExit(self, (exit) => exitIsSuccess(exit) ? void_ : cleanup(exit.effect_instruction_i0)))
1104
+
1105
+ /* @internal */
1106
+ export const onExit: {
1107
+ <A, E, X, R2>(
1108
+ cleanup: (exit: Exit.Exit<A, E>) => Effect.Effect<X, never, R2>
1109
+ ): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R2 | R>
1110
+ <A, E, R, X, R2>(
1111
+ self: Effect.Effect<A, E, R>,
1112
+ cleanup: (exit: Exit.Exit<A, E>) => Effect.Effect<X, never, R2>
1113
+ ): Effect.Effect<A, E, R2 | R>
1114
+ } = dual(2, <A, E, R, X, R2>(
1115
+ self: Effect.Effect<A, E, R>,
1116
+ cleanup: (exit: Exit.Exit<A, E>) => Effect.Effect<X, never, R2>
1117
+ ): Effect.Effect<A, E, R2 | R> =>
1118
+ uninterruptibleMask((restore) =>
1119
+ matchCauseEffect(restore(self), {
1120
+ onFailure: (cause1) => {
1121
+ const result = exitFailCause(cause1)
1122
+ return matchCauseEffect(cleanup(result), {
1123
+ onFailure: (cause2) => exitFailCause(internalCause.sequential(cause1, cause2)),
1124
+ onSuccess: () => result
1125
+ })
1126
+ },
1127
+ onSuccess: (success) => {
1128
+ const result = exitSucceed(success)
1129
+ return zipRight(cleanup(result), result)
1130
+ }
1131
+ })
1132
+ ))
1133
+
1134
+ /* @internal */
1135
+ export const onInterrupt: {
1136
+ <X, R2>(
1137
+ cleanup: (interruptors: HashSet.HashSet<FiberId.FiberId>) => Effect.Effect<X, never, R2>
1138
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R2 | R>
1139
+ <A, E, R, X, R2>(
1140
+ self: Effect.Effect<A, E, R>,
1141
+ cleanup: (interruptors: HashSet.HashSet<FiberId.FiberId>) => Effect.Effect<X, never, R2>
1142
+ ): Effect.Effect<A, E, R2 | R>
1143
+ } = dual(2, <A, E, R, X, R2>(
1144
+ self: Effect.Effect<A, E, R>,
1145
+ cleanup: (interruptors: HashSet.HashSet<FiberId.FiberId>) => Effect.Effect<X, never, R2>
1146
+ ): Effect.Effect<A, E, R2 | R> =>
1147
+ onExit(
1148
+ self,
1149
+ exitMatch({
1150
+ onFailure: (cause) =>
1151
+ internalCause.isInterruptedOnly(cause)
1152
+ ? asVoid(cleanup(internalCause.interruptors(cause)))
1153
+ : void_,
1154
+ onSuccess: () => void_
1155
+ })
1156
+ ))
1157
+
1158
+ /* @internal */
1159
+ export const orElse: {
1160
+ <A2, E2, R2>(
1161
+ that: LazyArg<Effect.Effect<A2, E2, R2>>
1162
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A, E2, R2 | R>
1163
+ <A, E, R, A2, E2, R2>(
1164
+ self: Effect.Effect<A, E, R>,
1165
+ that: LazyArg<Effect.Effect<A2, E2, R2>>
1166
+ ): Effect.Effect<A2 | A, E2, R2 | R>
1167
+ } = dual(
1168
+ 2,
1169
+ <A, E, R, A2, E2, R2>(
1170
+ self: Effect.Effect<A, E, R>,
1171
+ that: LazyArg<Effect.Effect<A2, E2, R2>>
1172
+ ): Effect.Effect<A2 | A, E2, R2 | R> => attemptOrElse(self, that, succeed)
1173
+ )
1174
+
1175
+ /* @internal */
1176
+ export const orDie = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, never, R> => orDieWith(self, identity)
1177
+
1178
+ /* @internal */
1179
+ export const orDieWith: {
1180
+ <E>(f: (error: E) => unknown): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, never, R>
1181
+ <A, E, R>(self: Effect.Effect<A, E, R>, f: (error: E) => unknown): Effect.Effect<A, never, R>
1182
+ } = dual(
1183
+ 2,
1184
+ <A, E, R>(self: Effect.Effect<A, E, R>, f: (error: E) => unknown): Effect.Effect<A, never, R> =>
1185
+ matchEffect(self, {
1186
+ onFailure: (e) => die(f(e)),
1187
+ onSuccess: succeed
1188
+ })
1189
+ )
1190
+
1191
+ /* @internal */
1192
+ export const partitionMap: <A, A1, A2>(
1193
+ elements: Iterable<A>,
1194
+ f: (a: A) => Either.Either<A2, A1>
1195
+ ) => [left: Array<A1>, right: Array<A2>] = Arr.partitionMap
1196
+ /* @internal */
1197
+ export const runtimeFlags: Effect.Effect<RuntimeFlags.RuntimeFlags> = withFiberRuntime((_, status) =>
1198
+ succeed(status.runtimeFlags)
1199
+ )
1200
+
1201
+ /* @internal */
1202
+ export const succeed = <A>(value: A): Effect.Effect<A> => {
1203
+ const effect = new EffectPrimitiveSuccess(OpCodes.OP_SUCCESS) as any
1204
+ effect.effect_instruction_i0 = value
1205
+ return effect
1206
+ }
1207
+
1208
+ /* @internal */
1209
+ export const suspend = <A, E, R>(evaluate: LazyArg<Effect.Effect<A, E, R>>): Effect.Effect<A, E, R> => {
1210
+ const effect = new EffectPrimitive(OpCodes.OP_COMMIT) as any
1211
+ effect.commit = evaluate
1212
+ return effect
1213
+ }
1214
+
1215
+ /* @internal */
1216
+ export const sync = <A>(thunk: LazyArg<A>): Effect.Effect<A> => {
1217
+ const effect = new EffectPrimitive(OpCodes.OP_SYNC) as any
1218
+ effect.effect_instruction_i0 = thunk
1219
+ return effect
1220
+ }
1221
+
1222
+ /* @internal */
1223
+ export const tap = dual<
1224
+ {
1225
+ <A, X>(
1226
+ f: (a: NoInfer<A>) => X
1227
+ ): <E, R>(
1228
+ self: Effect.Effect<A, E, R>
1229
+ ) => [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
1230
+ : [X] extends [PromiseLike<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
1231
+ : Effect.Effect<A, E, R>
1232
+ <A, X, E1, R1>(
1233
+ f: (a: NoInfer<A>) => Effect.Effect<X, E1, R1>,
1234
+ options: { onlyEffect: true }
1235
+ ): <E, R>(
1236
+ self: Effect.Effect<A, E, R>
1237
+ ) => Effect.Effect<A, E | E1, R | R1>
1238
+ <X>(
1239
+ f: NotFunction<X>
1240
+ ): <A, E, R>(
1241
+ self: Effect.Effect<A, E, R>
1242
+ ) => [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
1243
+ : [X] extends [PromiseLike<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
1244
+ : Effect.Effect<A, E, R>
1245
+ <X, E1, R1>(
1246
+ f: Effect.Effect<X, E1, R1>,
1247
+ options: { onlyEffect: true }
1248
+ ): <A, E, R>(
1249
+ self: Effect.Effect<A, E, R>
1250
+ ) => Effect.Effect<A, E | E1, R | R1>
1251
+ },
1252
+ {
1253
+ <A, E, R, X>(
1254
+ self: Effect.Effect<A, E, R>,
1255
+ f: (a: NoInfer<A>) => X
1256
+ ): [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
1257
+ : [X] extends [PromiseLike<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
1258
+ : Effect.Effect<A, E, R>
1259
+ <A, E, R, X, E1, R1>(
1260
+ self: Effect.Effect<A, E, R>,
1261
+ f: (a: NoInfer<A>) => Effect.Effect<X, E1, R1>,
1262
+ options: { onlyEffect: true }
1263
+ ): Effect.Effect<A, E | E1, R | R1>
1264
+ <A, E, R, X>(
1265
+ self: Effect.Effect<A, E, R>,
1266
+ f: NotFunction<X>
1267
+ ): [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
1268
+ : [X] extends [PromiseLike<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
1269
+ : Effect.Effect<A, E, R>
1270
+ <A, E, R, X, E1, R1>(
1271
+ self: Effect.Effect<A, E, R>,
1272
+ f: Effect.Effect<X, E1, R1>,
1273
+ options: { onlyEffect: true }
1274
+ ): Effect.Effect<A, E | E1, R | R1>
1275
+ }
1276
+ >(
1277
+ (args) => args.length === 3 || args.length === 2 && !(isObject(args[1]) && "onlyEffect" in args[1]),
1278
+ <A, E, R, X>(self: Effect.Effect<A, E, R>, f: X) =>
1279
+ flatMap(self, (a) => {
1280
+ const b = typeof f === "function" ? (f as any)(a) : f
1281
+ if (isEffect(b)) {
1282
+ return as(b, a)
1283
+ } else if (isPromiseLike(b)) {
1284
+ return unsafeAsync<any, Cause.UnknownException>((resume) => {
1285
+ b.then((_) => resume(succeed(a)), (e) =>
1286
+ resume(fail(new UnknownException(e, "An unknown error occurred in Effect.tap"))))
1287
+ })
1288
+ }
1289
+ return succeed(a)
1290
+ })
1291
+ )
1292
+
1293
+ /* @internal */
1294
+ export const transplant = <A, E, R>(
1295
+ f: (grafter: <A2, E2, R2>(effect: Effect.Effect<A2, E2, R2>) => Effect.Effect<A2, E2, R2>) => Effect.Effect<A, E, R>
1296
+ ): Effect.Effect<A, E, R> =>
1297
+ withFiberRuntime<A, E, R>((state) => {
1298
+ const scopeOverride = state.getFiberRef(currentForkScopeOverride)
1299
+ const scope = pipe(scopeOverride, Option.getOrElse(() => state.scope()))
1300
+ return f(fiberRefLocally(currentForkScopeOverride, Option.some(scope)))
1301
+ })
1302
+
1303
+ /* @internal */
1304
+ export const attemptOrElse: {
1305
+ <A2, E2, R2, A, A3, E3, R3>(
1306
+ that: LazyArg<Effect.Effect<A2, E2, R2>>,
1307
+ onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
1308
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2 | A3, E2 | E3, R | R2 | R3>
1309
+ <A, E, R, A2, E2, R2, A3, E3, R3>(
1310
+ self: Effect.Effect<A, E, R>,
1311
+ that: LazyArg<Effect.Effect<A2, E2, R2>>,
1312
+ onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
1313
+ ): Effect.Effect<A2 | A3, E2 | E3, R | R2 | R3>
1314
+ } = dual(3, <A, E, R, A2, E2, R2, A3, E3, R3>(
1315
+ self: Effect.Effect<A, E, R>,
1316
+ that: LazyArg<Effect.Effect<A2, E2, R2>>,
1317
+ onSuccess: (a: A) => Effect.Effect<A3, E3, R3>
1318
+ ): Effect.Effect<A2 | A3, E2 | E3, R | R2 | R3> =>
1319
+ matchCauseEffect(self, {
1320
+ onFailure: (cause) => {
1321
+ const defects = internalCause.defects(cause)
1322
+ if (defects.length > 0) {
1323
+ return failCause(Option.getOrThrow(internalCause.keepDefectsAndElectFailures(cause)))
1324
+ }
1325
+ return that()
1326
+ },
1327
+ onSuccess
1328
+ }))
1329
+
1330
+ /* @internal */
1331
+ export const uninterruptible: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R> = <A, E, R>(
1332
+ self: Effect.Effect<A, E, R>
1333
+ ): Effect.Effect<A, E, R> => {
1334
+ const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1335
+ effect.effect_instruction_i0 = RuntimeFlagsPatch.disable(runtimeFlags_.Interruption)
1336
+ effect.effect_instruction_i1 = () => self
1337
+ return effect
1338
+ }
1339
+
1340
+ /* @internal */
1341
+ export const uninterruptibleMask = <A, E, R>(
1342
+ f: (restore: <AX, EX, RX>(effect: Effect.Effect<AX, EX, RX>) => Effect.Effect<AX, EX, RX>) => Effect.Effect<A, E, R>
1343
+ ): Effect.Effect<A, E, R> =>
1344
+ custom(f, function() {
1345
+ const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1346
+ effect.effect_instruction_i0 = RuntimeFlagsPatch.disable(runtimeFlags_.Interruption)
1347
+ effect.effect_instruction_i1 = (oldFlags: RuntimeFlags.RuntimeFlags) =>
1348
+ runtimeFlags_.interruption(oldFlags)
1349
+ ? internalCall(() => this.effect_instruction_i0(interruptible))
1350
+ : internalCall(() => this.effect_instruction_i0(uninterruptible))
1351
+ return effect
1352
+ })
1353
+
1354
+ const void_: Effect.Effect<void> = succeed(void 0)
1355
+ export {
1356
+ /* @internal */
1357
+ void_ as void
1358
+ }
1359
+
1360
+ /* @internal */
1361
+ export const updateRuntimeFlags = (patch: RuntimeFlagsPatch.RuntimeFlagsPatch): Effect.Effect<void> => {
1362
+ const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1363
+ effect.effect_instruction_i0 = patch
1364
+ effect.effect_instruction_i1 = void 0
1365
+ return effect
1366
+ }
1367
+
1368
+ /* @internal */
1369
+ export const whenEffect: {
1370
+ <E, R>(
1371
+ condition: Effect.Effect<boolean, E, R>
1372
+ ): <A, E2, R2>(
1373
+ effect: Effect.Effect<A, E2, R2>
1374
+ ) => Effect.Effect<Option.Option<A>, E | E2, R | R2>
1375
+ <A, E2, R2, E, R>(
1376
+ self: Effect.Effect<A, E2, R2>,
1377
+ condition: Effect.Effect<boolean, E, R>
1378
+ ): Effect.Effect<Option.Option<A>, E | E2, R | R2>
1379
+ } = dual(2, <A, E2, R2, E, R>(
1380
+ self: Effect.Effect<A, E2, R2>,
1381
+ condition: Effect.Effect<boolean, E, R>
1382
+ ): Effect.Effect<Option.Option<A>, E | E2, R | R2> =>
1383
+ flatMap(condition, (b) => {
1384
+ if (b) {
1385
+ return pipe(self, map(Option.some))
1386
+ }
1387
+ return succeed(Option.none())
1388
+ }))
1389
+
1390
+ /* @internal */
1391
+ export const whileLoop = <A, E, R>(
1392
+ options: {
1393
+ readonly while: LazyArg<boolean>
1394
+ readonly body: LazyArg<Effect.Effect<A, E, R>>
1395
+ readonly step: (a: A) => void
1396
+ }
1397
+ ): Effect.Effect<void, E, R> => {
1398
+ const effect = new EffectPrimitive(OpCodes.OP_WHILE) as any
1399
+ effect.effect_instruction_i0 = options.while
1400
+ effect.effect_instruction_i1 = options.body
1401
+ effect.effect_instruction_i2 = options.step
1402
+ return effect
1403
+ }
1404
+
1405
+ /* @internal */
1406
+ export const fromIterator = <Eff extends YieldWrap<Effect.Effect<any, any, any>>, AEff>(
1407
+ iterator: LazyArg<Iterator<Eff, AEff, never>>
1408
+ ): Effect.Effect<
1409
+ AEff,
1410
+ [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E : never,
1411
+ [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R : never
1412
+ > =>
1413
+ suspend(() => {
1414
+ const effect = new EffectPrimitive(OpCodes.OP_ITERATOR) as any
1415
+ effect.effect_instruction_i0 = iterator()
1416
+ return effect
1417
+ })
1418
+
1419
+ /**
1420
+ * The adapter function injected into Effect.gen generators.
1421
+ * Accepts an effect and an optional source location trace.
1422
+ * When a trace is provided, it wraps the effect with `fiberRefLocally`
1423
+ * to set the currentSourceTrace FiberRef during execution.
1424
+ *
1425
+ * @internal
1426
+ */
1427
+ export const genAdapter = <A, E, R>(
1428
+ effect: Effect.Effect<A, E, R>,
1429
+ trace?: SourceLocation.SourceLocation
1430
+ ): Effect.Effect<A, E, R> =>
1431
+ trace !== undefined
1432
+ ? fiberRefLocally(effect, currentSourceTrace, trace)
1433
+ : effect
1434
+
1435
+ /* @internal */
1436
+ export const gen: typeof Effect.gen = function() {
1437
+ const f = arguments.length === 1 ? arguments[0] : arguments[1].bind(arguments[0])
1438
+ return fromIterator(() => f(genAdapter))
1439
+ }
1440
+
1441
+ /** @internal */
1442
+ export const fnUntraced: Effect.fn.Untraced = (body: Function, ...pipeables: Array<any>) =>
1443
+ Object.defineProperty(
1444
+ pipeables.length === 0
1445
+ ? function(this: any, ...args: Array<any>) {
1446
+ return fromIterator(() => body.apply(this, args))
1447
+ }
1448
+ : function(this: any, ...args: Array<any>) {
1449
+ let effect = fromIterator(() => body.apply(this, args))
1450
+ for (const x of pipeables) {
1451
+ effect = x(effect, ...args)
1452
+ }
1453
+ return effect
1454
+ },
1455
+ "length",
1456
+ { value: body.length, configurable: true }
1457
+ )
1458
+
1459
+ /* @internal */
1460
+ export const withConcurrency = dual<
1461
+ (concurrency: number | "unbounded") => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
1462
+ <A, E, R>(self: Effect.Effect<A, E, R>, concurrency: number | "unbounded") => Effect.Effect<A, E, R>
1463
+ >(2, (self, concurrency) => fiberRefLocally(self, currentConcurrency, concurrency))
1464
+
1465
+ /* @internal */
1466
+ export const withRequestBatching = dual<
1467
+ (requestBatching: boolean) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
1468
+ <A, E, R>(self: Effect.Effect<A, E, R>, requestBatching: boolean) => Effect.Effect<A, E, R>
1469
+ >(2, (self, requestBatching) => fiberRefLocally(self, currentRequestBatching, requestBatching))
1470
+
1471
+ /* @internal */
1472
+ export const withRuntimeFlags = dual<
1473
+ (update: RuntimeFlagsPatch.RuntimeFlagsPatch) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
1474
+ <A, E, R>(self: Effect.Effect<A, E, R>, update: RuntimeFlagsPatch.RuntimeFlagsPatch) => Effect.Effect<A, E, R>
1475
+ >(2, (self, update) => {
1476
+ const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1477
+ effect.effect_instruction_i0 = update
1478
+ effect.effect_instruction_i1 = () => self
1479
+ return effect
1480
+ })
1481
+
1482
+ /** @internal */
1483
+ export const withTracerEnabled = dual<
1484
+ (enabled: boolean) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
1485
+ <A, E, R>(effect: Effect.Effect<A, E, R>, enabled: boolean) => Effect.Effect<A, E, R>
1486
+ >(2, (effect, enabled) =>
1487
+ fiberRefLocally(
1488
+ effect,
1489
+ currentTracerEnabled,
1490
+ enabled
1491
+ ))
1492
+
1493
+ /** @internal */
1494
+ export const withTracerTiming = dual<
1495
+ (enabled: boolean) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
1496
+ <A, E, R>(effect: Effect.Effect<A, E, R>, enabled: boolean) => Effect.Effect<A, E, R>
1497
+ >(2, (effect, enabled) =>
1498
+ fiberRefLocally(
1499
+ effect,
1500
+ currentTracerTimingEnabled,
1501
+ enabled
1502
+ ))
1503
+
1504
+ /* @internal */
1505
+ export const yieldNow = (options?: {
1506
+ readonly priority?: number | undefined
1507
+ }): Effect.Effect<void> => {
1508
+ const effect = new EffectPrimitive(OpCodes.OP_YIELD) as any
1509
+ return typeof options?.priority !== "undefined" ?
1510
+ withSchedulingPriority(effect, options.priority) :
1511
+ effect
1512
+ }
1513
+
1514
+ /* @internal */
1515
+ export const zip = dual<
1516
+ <A2, E2, R2>(
1517
+ that: Effect.Effect<A2, E2, R2>
1518
+ ) => <A, E, R>(
1519
+ self: Effect.Effect<A, E, R>
1520
+ ) => Effect.Effect<[A, A2], E | E2, R | R2>,
1521
+ <A, E, R, A2, E2, R2>(
1522
+ self: Effect.Effect<A, E, R>,
1523
+ that: Effect.Effect<A2, E2, R2>
1524
+ ) => Effect.Effect<[A, A2], E | E2, R | R2>
1525
+ >(2, <A, E, R, A2, E2, R2>(
1526
+ self: Effect.Effect<A, E, R>,
1527
+ that: Effect.Effect<A2, E2, R2>
1528
+ ): Effect.Effect<[A, A2], E | E2, R | R2> => flatMap(self, (a) => map(that, (b) => [a, b])))
1529
+
1530
+ /* @internal */
1531
+ export const zipFlatten: {
1532
+ <A2, E2, R2>(
1533
+ that: Effect.Effect<A2, E2, R2>
1534
+ ): <A extends ReadonlyArray<any>, E, R>(
1535
+ self: Effect.Effect<A, E, R>
1536
+ ) => Effect.Effect<[...A, A2], E | E2, R | R2>
1537
+ <A extends ReadonlyArray<any>, E, R, A2, E2, R2>(
1538
+ self: Effect.Effect<A, E, R>,
1539
+ that: Effect.Effect<A2, E2, R2>
1540
+ ): Effect.Effect<[...A, A2], E | E2, R | R2>
1541
+ } = dual(2, <A extends ReadonlyArray<any>, E, R, A2, E2, R2>(
1542
+ self: Effect.Effect<A, E, R>,
1543
+ that: Effect.Effect<A2, E2, R2>
1544
+ ): Effect.Effect<[...A, A2], E | E2, R | R2> => flatMap(self, (a) => map(that, (b) => [...a, b])))
1545
+
1546
+ /* @internal */
1547
+ export const zipLeft: {
1548
+ <A2, E2, R2>(
1549
+ that: Effect.Effect<A2, E2, R2>
1550
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, R | R2>
1551
+ <A, E, R, A2, E2, R2>(
1552
+ self: Effect.Effect<A, E, R>,
1553
+ that: Effect.Effect<A2, E2, R2>
1554
+ ): Effect.Effect<A, E | E2, R | R2>
1555
+ } = dual(2, <A, E, R, A2, E2, R2>(
1556
+ self: Effect.Effect<A, E, R>,
1557
+ that: Effect.Effect<A2, E2, R2>
1558
+ ): Effect.Effect<A, E | E2, R | R2> => flatMap(self, (a) => as(that, a)))
1559
+
1560
+ /* @internal */
1561
+ export const zipRight: {
1562
+ <A2, E2, R2>(
1563
+ that: Effect.Effect<A2, E2, R2>
1564
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A2, E | E2, R | R2>
1565
+ <A, E, R, A2, E2, R2>(
1566
+ self: Effect.Effect<A, E, R>,
1567
+ that: Effect.Effect<A2, E2, R2>
1568
+ ): Effect.Effect<A2, E | E2, R | R2>
1569
+ } = dual(2, <A, E, R, A2, E2, R2>(
1570
+ self: Effect.Effect<A, E, R>,
1571
+ that: Effect.Effect<A2, E2, R2>
1572
+ ): Effect.Effect<A2, E | E2, R | R2> => flatMap(self, () => that))
1573
+
1574
+ /* @internal */
1575
+ export const zipWith: {
1576
+ <A2, E2, R2, A, B>(
1577
+ that: Effect.Effect<A2, E2, R2>,
1578
+ f: (a: A, b: A2) => B
1579
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E | E2, R | R2>
1580
+ <A, E, R, A2, E2, R2, B>(
1581
+ self: Effect.Effect<A, E, R>,
1582
+ that: Effect.Effect<A2, E2, R2>,
1583
+ f: (a: A, b: A2) => B
1584
+ ): Effect.Effect<B, E | E2, R | R2>
1585
+ } = dual(3, <A, E, R, A2, E2, R2, B>(
1586
+ self: Effect.Effect<A, E, R>,
1587
+ that: Effect.Effect<A2, E2, R2>,
1588
+ f: (a: A, b: A2) => B
1589
+ ): Effect.Effect<B, E | E2, R | R2> => flatMap(self, (a) => map(that, (b) => f(a, b))))
1590
+
1591
+ /* @internal */
1592
+ export const never: Effect.Effect<never> = asyncInterrupt<never>(() => {
1593
+ const interval = setInterval(() => {
1594
+ //
1595
+ }, 2 ** 31 - 1)
1596
+ return sync(() => clearInterval(interval))
1597
+ })
1598
+
1599
+ // -----------------------------------------------------------------------------
1600
+ // Fiber
1601
+ // -----------------------------------------------------------------------------
1602
+
1603
+ /* @internal */
1604
+ export const interruptFiber = <A, E>(self: Fiber.Fiber<A, E>): Effect.Effect<Exit.Exit<A, E>> =>
1605
+ flatMap(fiberId, (fiberId) => pipe(self, interruptAsFiber(fiberId)))
1606
+
1607
+ /* @internal */
1608
+ export const interruptAsFiber = dual<
1609
+ (fiberId: FiberId.FiberId) => <A, E>(self: Fiber.Fiber<A, E>) => Effect.Effect<Exit.Exit<A, E>>,
1610
+ <A, E>(self: Fiber.Fiber<A, E>, fiberId: FiberId.FiberId) => Effect.Effect<Exit.Exit<A, E>>
1611
+ >(2, (self, fiberId) => flatMap(self.interruptAsFork(fiberId), () => self.await))
1612
+
1613
+ // -----------------------------------------------------------------------------
1614
+ // LogLevel
1615
+ // -----------------------------------------------------------------------------
1616
+
1617
+ /** @internal */
1618
+ export const logLevelAll: LogLevel.LogLevel = {
1619
+ _tag: "All",
1620
+ syslog: 0,
1621
+ label: "ALL",
1622
+ ordinal: Number.MIN_SAFE_INTEGER,
1623
+ pipe() {
1624
+ return pipeArguments(this, arguments)
1625
+ }
1626
+ }
1627
+
1628
+ /** @internal */
1629
+ export const logLevelFatal: LogLevel.LogLevel = {
1630
+ _tag: "Fatal",
1631
+ syslog: 2,
1632
+ label: "FATAL",
1633
+ ordinal: 50000,
1634
+ pipe() {
1635
+ return pipeArguments(this, arguments)
1636
+ }
1637
+ }
1638
+
1639
+ /** @internal */
1640
+ export const logLevelError: LogLevel.LogLevel = {
1641
+ _tag: "Error",
1642
+ syslog: 3,
1643
+ label: "ERROR",
1644
+ ordinal: 40000,
1645
+ pipe() {
1646
+ return pipeArguments(this, arguments)
1647
+ }
1648
+ }
1649
+
1650
+ /** @internal */
1651
+ export const logLevelWarning: LogLevel.LogLevel = {
1652
+ _tag: "Warning",
1653
+ syslog: 4,
1654
+ label: "WARN",
1655
+ ordinal: 30000,
1656
+ pipe() {
1657
+ return pipeArguments(this, arguments)
1658
+ }
1659
+ }
1660
+
1661
+ /** @internal */
1662
+ export const logLevelInfo: LogLevel.LogLevel = {
1663
+ _tag: "Info",
1664
+ syslog: 6,
1665
+ label: "INFO",
1666
+ ordinal: 20000,
1667
+ pipe() {
1668
+ return pipeArguments(this, arguments)
1669
+ }
1670
+ }
1671
+
1672
+ /** @internal */
1673
+ export const logLevelDebug: LogLevel.LogLevel = {
1674
+ _tag: "Debug",
1675
+ syslog: 7,
1676
+ label: "DEBUG",
1677
+ ordinal: 10000,
1678
+ pipe() {
1679
+ return pipeArguments(this, arguments)
1680
+ }
1681
+ }
1682
+
1683
+ /** @internal */
1684
+ export const logLevelTrace: LogLevel.LogLevel = {
1685
+ _tag: "Trace",
1686
+ syslog: 7,
1687
+ label: "TRACE",
1688
+ ordinal: 0,
1689
+ pipe() {
1690
+ return pipeArguments(this, arguments)
1691
+ }
1692
+ }
1693
+
1694
+ /** @internal */
1695
+ export const logLevelNone: LogLevel.LogLevel = {
1696
+ _tag: "None",
1697
+ syslog: 7,
1698
+ label: "OFF",
1699
+ ordinal: Number.MAX_SAFE_INTEGER,
1700
+ pipe() {
1701
+ return pipeArguments(this, arguments)
1702
+ }
1703
+ }
1704
+
1705
+ /** @internal */
1706
+ export const allLogLevels: ReadonlyArray<LogLevel.LogLevel> = [
1707
+ logLevelAll,
1708
+ logLevelTrace,
1709
+ logLevelDebug,
1710
+ logLevelInfo,
1711
+ logLevelWarning,
1712
+ logLevelError,
1713
+ logLevelFatal,
1714
+ logLevelNone
1715
+ ]
1716
+
1717
+ // -----------------------------------------------------------------------------
1718
+ // FiberRef
1719
+ // -----------------------------------------------------------------------------
1720
+
1721
+ /** @internal */
1722
+ const FiberRefSymbolKey = "effect/FiberRef"
1723
+
1724
+ /** @internal */
1725
+ export const FiberRefTypeId: FiberRef.FiberRefTypeId = Symbol.for(
1726
+ FiberRefSymbolKey
1727
+ ) as FiberRef.FiberRefTypeId
1728
+
1729
+ const fiberRefVariance = {
1730
+ /* c8 ignore next */
1731
+ _A: (_: any) => _
1732
+ }
1733
+
1734
+ /* @internal */
1735
+ export const fiberRefGet = <A>(self: FiberRef.FiberRef<A>): Effect.Effect<A> =>
1736
+ withFiberRuntime((fiber) => exitSucceed(fiber.getFiberRef(self)))
1737
+
1738
+ /* @internal */
1739
+ export const fiberRefGetAndSet = dual<
1740
+ <A>(value: A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<A>,
1741
+ <A>(self: FiberRef.FiberRef<A>, value: A) => Effect.Effect<A>
1742
+ >(2, (self, value) => fiberRefModify(self, (v) => [v, value] as const))
1743
+
1744
+ /* @internal */
1745
+ export const fiberRefGetAndUpdate = dual<
1746
+ <A>(f: (a: A) => A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<A>,
1747
+ <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<A>
1748
+ >(2, (self, f) => fiberRefModify(self, (v) => [v, f(v)] as const))
1749
+
1750
+ /* @internal */
1751
+ export const fiberRefGetAndUpdateSome = dual<
1752
+ <A>(
1753
+ pf: (a: A) => Option.Option<A>
1754
+ ) => (self: FiberRef.FiberRef<A>) => Effect.Effect<A>,
1755
+ <A>(
1756
+ self: FiberRef.FiberRef<A>,
1757
+ pf: (a: A) => Option.Option<A>
1758
+ ) => Effect.Effect<A>
1759
+ >(2, (self, pf) => fiberRefModify(self, (v) => [v, Option.getOrElse(pf(v), () => v)] as const))
1760
+
1761
+ /* @internal */
1762
+ export const fiberRefGetWith = dual<
1763
+ <B, E, R, A>(f: (a: A) => Effect.Effect<B, E, R>) => (self: FiberRef.FiberRef<A>) => Effect.Effect<B, E, R>,
1764
+ <A, B, E, R>(self: FiberRef.FiberRef<A>, f: (a: A) => Effect.Effect<B, E, R>) => Effect.Effect<B, E, R>
1765
+ >(2, (self, f) => flatMap(fiberRefGet(self), f))
1766
+
1767
+ /* @internal */
1768
+ export const fiberRefSet = dual<
1769
+ <A>(value: A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<void>,
1770
+ <A>(self: FiberRef.FiberRef<A>, value: A) => Effect.Effect<void>
1771
+ >(2, (self, value) => fiberRefModify(self, () => [void 0, value] as const))
1772
+
1773
+ /* @internal */
1774
+ export const fiberRefDelete = <A>(self: FiberRef.FiberRef<A>): Effect.Effect<void> =>
1775
+ withFiberRuntime((state) => {
1776
+ state.unsafeDeleteFiberRef(self)
1777
+ return void_
1778
+ })
1779
+
1780
+ /* @internal */
1781
+ export const fiberRefReset = <A>(self: FiberRef.FiberRef<A>): Effect.Effect<void> => fiberRefSet(self, self.initial)
1782
+
1783
+ /* @internal */
1784
+ export const fiberRefModify = dual<
1785
+ <A, B>(f: (a: A) => readonly [B, A]) => (self: FiberRef.FiberRef<A>) => Effect.Effect<B>,
1786
+ <A, B>(self: FiberRef.FiberRef<A>, f: (a: A) => readonly [B, A]) => Effect.Effect<B>
1787
+ >(2, <A, B>(
1788
+ self: FiberRef.FiberRef<A>,
1789
+ f: (a: A) => readonly [B, A]
1790
+ ): Effect.Effect<B> =>
1791
+ withFiberRuntime((state) => {
1792
+ const [b, a] = f(state.getFiberRef(self) as A)
1793
+ state.setFiberRef(self, a)
1794
+ return succeed(b)
1795
+ }))
1796
+
1797
+ /* @internal */
1798
+ export const fiberRefModifySome = <A, B>(
1799
+ self: FiberRef.FiberRef<A>,
1800
+ def: B,
1801
+ f: (a: A) => Option.Option<readonly [B, A]>
1802
+ ): Effect.Effect<B> => fiberRefModify(self, (v) => Option.getOrElse(f(v), () => [def, v] as const))
1803
+
1804
+ /* @internal */
1805
+ export const fiberRefUpdate = dual<
1806
+ <A>(f: (a: A) => A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<void>,
1807
+ <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<void>
1808
+ >(2, (self, f) => fiberRefModify(self, (v) => [void 0, f(v)] as const))
1809
+
1810
+ /* @internal */
1811
+ export const fiberRefUpdateSome = dual<
1812
+ <A>(pf: (a: A) => Option.Option<A>) => (self: FiberRef.FiberRef<A>) => Effect.Effect<void>,
1813
+ <A>(self: FiberRef.FiberRef<A>, pf: (a: A) => Option.Option<A>) => Effect.Effect<void>
1814
+ >(2, (self, pf) => fiberRefModify(self, (v) => [void 0, Option.getOrElse(pf(v), () => v)] as const))
1815
+
1816
+ /* @internal */
1817
+ export const fiberRefUpdateAndGet = dual<
1818
+ <A>(f: (a: A) => A) => (self: FiberRef.FiberRef<A>) => Effect.Effect<A>,
1819
+ <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<A>
1820
+ >(2, (self, f) =>
1821
+ fiberRefModify(self, (v) => {
1822
+ const result = f(v)
1823
+ return [result, result] as const
1824
+ }))
1825
+
1826
+ /* @internal */
1827
+ export const fiberRefUpdateSomeAndGet = dual<
1828
+ <A>(pf: (a: A) => Option.Option<A>) => (self: FiberRef.FiberRef<A>) => Effect.Effect<A>,
1829
+ <A>(self: FiberRef.FiberRef<A>, pf: (a: A) => Option.Option<A>) => Effect.Effect<A>
1830
+ >(2, (self, pf) =>
1831
+ fiberRefModify(self, (v) => {
1832
+ const result = Option.getOrElse(pf(v), () => v)
1833
+ return [result, result] as const
1834
+ }))
1835
+
1836
+ // circular
1837
+ /** @internal */
1838
+ const RequestResolverSymbolKey = "effect/RequestResolver"
1839
+
1840
+ /** @internal */
1841
+ export const RequestResolverTypeId: RequestResolver.RequestResolverTypeId = Symbol.for(
1842
+ RequestResolverSymbolKey
1843
+ ) as RequestResolver.RequestResolverTypeId
1844
+
1845
+ const requestResolverVariance = {
1846
+ /* c8 ignore next */
1847
+ _A: (_: unknown) => _,
1848
+ /* c8 ignore next */
1849
+ _R: (_: never) => _
1850
+ }
1851
+
1852
+ /** @internal */
1853
+ export class RequestResolverImpl<in A, out R> implements RequestResolver.RequestResolver<A, R> {
1854
+ readonly [RequestResolverTypeId] = requestResolverVariance
1855
+ constructor(
1856
+ readonly runAll: (
1857
+ requests: Array<Array<Request.Entry<A>>>
1858
+ ) => Effect.Effect<void, never, R>,
1859
+ readonly target?: unknown
1860
+ ) {
1861
+ }
1862
+ [Hash.symbol](): number {
1863
+ return Hash.cached(this, this.target ? Hash.hash(this.target) : Hash.random(this))
1864
+ }
1865
+ [Equal.symbol](that: unknown): boolean {
1866
+ return this.target ?
1867
+ isRequestResolver(that) && Equal.equals(this.target, (that as RequestResolverImpl<any, any>).target) :
1868
+ this === that
1869
+ }
1870
+ identified(...ids: Array<unknown>): RequestResolver.RequestResolver<A, R> {
1871
+ return new RequestResolverImpl(this.runAll, Chunk.fromIterable(ids))
1872
+ }
1873
+ pipe() {
1874
+ return pipeArguments(this, arguments)
1875
+ }
1876
+ }
1877
+
1878
+ /** @internal */
1879
+ export const isRequestResolver = (u: unknown): u is RequestResolver.RequestResolver<unknown, unknown> =>
1880
+ hasProperty(u, RequestResolverTypeId)
1881
+
1882
+ // end
1883
+
1884
+ /** @internal */
1885
+ export const resolverLocally = dual<
1886
+ <A>(
1887
+ self: FiberRef.FiberRef<A>,
1888
+ value: A
1889
+ ) => <R, B extends Request.Request<any, any>>(
1890
+ use: RequestResolver.RequestResolver<B, R>
1891
+ ) => RequestResolver.RequestResolver<B, R>,
1892
+ <R, B extends Request.Request<any, any>, A>(
1893
+ use: RequestResolver.RequestResolver<B, R>,
1894
+ self: FiberRef.FiberRef<A>,
1895
+ value: A
1896
+ ) => RequestResolver.RequestResolver<B, R>
1897
+ >(3, <R, B extends Request.Request<any, any>, A>(
1898
+ use: RequestResolver.RequestResolver<B, R>,
1899
+ self: FiberRef.FiberRef<A>,
1900
+ value: A
1901
+ ): RequestResolver.RequestResolver<B, R> =>
1902
+ new RequestResolverImpl<B, R>(
1903
+ (requests) =>
1904
+ fiberRefLocally(
1905
+ use.runAll(requests),
1906
+ self,
1907
+ value
1908
+ ),
1909
+ Chunk.make("Locally", use, self, value)
1910
+ ))
1911
+
1912
+ /** @internal */
1913
+ export const requestBlockLocally = <A>(
1914
+ self: BlockedRequests.RequestBlock,
1915
+ ref: FiberRef.FiberRef<A>,
1916
+ value: A
1917
+ ): BlockedRequests.RequestBlock => blockedRequests_.reduce(self, LocallyReducer(ref, value))
1918
+
1919
+ const LocallyReducer = <A>(
1920
+ ref: FiberRef.FiberRef<A>,
1921
+ value: A
1922
+ ): BlockedRequests.RequestBlock.Reducer<BlockedRequests.RequestBlock> => ({
1923
+ emptyCase: () => blockedRequests_.empty,
1924
+ parCase: (left, right) => blockedRequests_.par(left, right),
1925
+ seqCase: (left, right) => blockedRequests_.seq(left, right),
1926
+ singleCase: (dataSource, blockedRequest) =>
1927
+ blockedRequests_.single(
1928
+ resolverLocally(dataSource, ref, value),
1929
+ blockedRequest as any
1930
+ )
1931
+ })
1932
+
1933
+ /* @internal */
1934
+ export const fiberRefLocally: {
1935
+ <A>(self: FiberRef.FiberRef<A>, value: A): <B, E, R>(use: Effect.Effect<B, E, R>) => Effect.Effect<B, E, R>
1936
+ <B, E, R, A>(use: Effect.Effect<B, E, R>, self: FiberRef.FiberRef<A>, value: A): Effect.Effect<B, E, R>
1937
+ } = dual(
1938
+ 3,
1939
+ <B, E, R, A>(use: Effect.Effect<B, E, R>, self: FiberRef.FiberRef<A>, value: A): Effect.Effect<B, E, R> =>
1940
+ acquireUseRelease(
1941
+ zipLeft(fiberRefGet(self), fiberRefSet(self, value)),
1942
+ () => use,
1943
+ (oldValue) => fiberRefSet(self, oldValue)
1944
+ )
1945
+ )
1946
+
1947
+ /* @internal */
1948
+ export const fiberRefLocallyWith = dual<
1949
+ <A>(self: FiberRef.FiberRef<A>, f: (a: A) => A) => <B, E, R>(use: Effect.Effect<B, E, R>) => Effect.Effect<B, E, R>,
1950
+ <B, E, R, A>(use: Effect.Effect<B, E, R>, self: FiberRef.FiberRef<A>, f: (a: A) => A) => Effect.Effect<B, E, R>
1951
+ >(3, (use, self, f) => fiberRefGetWith(self, (a) => fiberRefLocally(use, self, f(a))))
1952
+
1953
+ /** @internal */
1954
+ export const fiberRefUnsafeMake = <Value>(
1955
+ initial: Value,
1956
+ options?: {
1957
+ readonly fork?: ((a: Value) => Value) | undefined
1958
+ readonly join?: ((left: Value, right: Value) => Value) | undefined
1959
+ }
1960
+ ): FiberRef.FiberRef<Value> =>
1961
+ fiberRefUnsafeMakePatch(initial, {
1962
+ differ: internalDiffer.update(),
1963
+ fork: options?.fork ?? identity,
1964
+ join: options?.join
1965
+ })
1966
+
1967
+ /** @internal */
1968
+ export const fiberRefUnsafeMakeHashSet = <A>(
1969
+ initial: HashSet.HashSet<A>
1970
+ ): FiberRef.FiberRef<HashSet.HashSet<A>> => {
1971
+ const differ = internalDiffer.hashSet<A>()
1972
+ return fiberRefUnsafeMakePatch(initial, {
1973
+ differ,
1974
+ fork: differ.empty
1975
+ })
1976
+ }
1977
+
1978
+ /** @internal */
1979
+ export const fiberRefUnsafeMakeReadonlyArray = <A>(
1980
+ initial: ReadonlyArray<A>
1981
+ ): FiberRef.FiberRef<ReadonlyArray<A>> => {
1982
+ const differ = internalDiffer.readonlyArray(internalDiffer.update<A>())
1983
+ return fiberRefUnsafeMakePatch(initial, {
1984
+ differ,
1985
+ fork: differ.empty
1986
+ })
1987
+ }
1988
+
1989
+ /** @internal */
1990
+ export const fiberRefUnsafeMakeContext = <A>(
1991
+ initial: Context.Context<A>
1992
+ ): FiberRef.FiberRef<Context.Context<A>> => {
1993
+ const differ = internalDiffer.environment<A>()
1994
+ return fiberRefUnsafeMakePatch(initial, {
1995
+ differ,
1996
+ fork: differ.empty
1997
+ })
1998
+ }
1999
+
2000
+ /** @internal */
2001
+ export const fiberRefUnsafeMakePatch = <Value, Patch>(
2002
+ initial: Value,
2003
+ options: {
2004
+ readonly differ: Differ.Differ<Value, Patch>
2005
+ readonly fork: Patch
2006
+ readonly join?: ((oldV: Value, newV: Value) => Value) | undefined
2007
+ }
2008
+ ): FiberRef.FiberRef<Value> => {
2009
+ const _fiberRef = {
2010
+ ...CommitPrototype,
2011
+ [FiberRefTypeId]: fiberRefVariance,
2012
+ initial,
2013
+ commit() {
2014
+ return fiberRefGet(this)
2015
+ },
2016
+ diff: (oldValue: Value, newValue: Value) => options.differ.diff(oldValue, newValue),
2017
+ combine: (first: Patch, second: Patch) => options.differ.combine(first, second),
2018
+ patch: (patch: Patch) => (oldValue: Value) => options.differ.patch(patch, oldValue),
2019
+ fork: options.fork,
2020
+ join: options.join ?? ((_, n) => n)
2021
+ }
2022
+ return _fiberRef
2023
+ }
2024
+
2025
+ /** @internal */
2026
+ export const fiberRefUnsafeMakeRuntimeFlags = (
2027
+ initial: RuntimeFlags.RuntimeFlags
2028
+ ): FiberRef.FiberRef<RuntimeFlags.RuntimeFlags> =>
2029
+ fiberRefUnsafeMakePatch(initial, {
2030
+ differ: runtimeFlags_.differ,
2031
+ fork: runtimeFlags_.differ.empty
2032
+ })
2033
+
2034
+ /** @internal */
2035
+ export const currentContext: FiberRef.FiberRef<Context.Context<never>> = globalValue(
2036
+ Symbol.for("effect/FiberRef/currentContext"),
2037
+ () => fiberRefUnsafeMakeContext(Context.empty())
2038
+ )
2039
+
2040
+ /** @internal */
2041
+ export const currentSchedulingPriority: FiberRef.FiberRef<number> = globalValue(
2042
+ Symbol.for("effect/FiberRef/currentSchedulingPriority"),
2043
+ () => fiberRefUnsafeMake(0)
2044
+ )
2045
+
2046
+ /** @internal */
2047
+ export const currentMaxOpsBeforeYield: FiberRef.FiberRef<number> = globalValue(
2048
+ Symbol.for("effect/FiberRef/currentMaxOpsBeforeYield"),
2049
+ () => fiberRefUnsafeMake(2048)
2050
+ )
2051
+
2052
+ /** @internal */
2053
+ export const currentLogAnnotations: FiberRef.FiberRef<HashMap.HashMap<string, unknown>> = globalValue(
2054
+ Symbol.for("effect/FiberRef/currentLogAnnotation"),
2055
+ () => fiberRefUnsafeMake(HashMap.empty())
2056
+ )
2057
+
2058
+ /** @internal */
2059
+ export const currentLogLevel: FiberRef.FiberRef<LogLevel.LogLevel> = globalValue(
2060
+ Symbol.for("effect/FiberRef/currentLogLevel"),
2061
+ () => fiberRefUnsafeMake<LogLevel.LogLevel>(logLevelInfo)
2062
+ )
2063
+
2064
+ /** @internal */
2065
+ export const currentLogSpan: FiberRef.FiberRef<List.List<LogSpan.LogSpan>> = globalValue(
2066
+ Symbol.for("effect/FiberRef/currentLogSpan"),
2067
+ () => fiberRefUnsafeMake(List.empty<LogSpan.LogSpan>())
2068
+ )
2069
+
2070
+ /** @internal */
2071
+ export const withSchedulingPriority = dual<
2072
+ (priority: number) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
2073
+ <A, E, R>(self: Effect.Effect<A, E, R>, priority: number) => Effect.Effect<A, E, R>
2074
+ >(2, (self, scheduler) => fiberRefLocally(self, currentSchedulingPriority, scheduler))
2075
+
2076
+ /** @internal */
2077
+ export const withMaxOpsBeforeYield = dual<
2078
+ (priority: number) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
2079
+ <A, E, R>(self: Effect.Effect<A, E, R>, priority: number) => Effect.Effect<A, E, R>
2080
+ >(2, (self, scheduler) => fiberRefLocally(self, currentMaxOpsBeforeYield, scheduler))
2081
+
2082
+ /** @internal */
2083
+ export const currentConcurrency: FiberRef.FiberRef<"unbounded" | number> = globalValue(
2084
+ Symbol.for("effect/FiberRef/currentConcurrency"),
2085
+ () => fiberRefUnsafeMake<"unbounded" | number>("unbounded")
2086
+ )
2087
+
2088
+ /**
2089
+ * @internal
2090
+ */
2091
+ export const currentRequestBatching = globalValue(
2092
+ Symbol.for("effect/FiberRef/currentRequestBatching"),
2093
+ () => fiberRefUnsafeMake(true)
2094
+ )
2095
+
2096
+ /** @internal */
2097
+ export const currentUnhandledErrorLogLevel: FiberRef.FiberRef<Option.Option<LogLevel.LogLevel>> = globalValue(
2098
+ Symbol.for("effect/FiberRef/currentUnhandledErrorLogLevel"),
2099
+ () => fiberRefUnsafeMake(Option.some<LogLevel.LogLevel>(logLevelDebug))
2100
+ )
2101
+
2102
+ /** @internal */
2103
+ export const currentVersionMismatchErrorLogLevel: FiberRef.FiberRef<Option.Option<LogLevel.LogLevel>> = globalValue(
2104
+ Symbol.for("effect/FiberRef/versionMismatchErrorLogLevel"),
2105
+ () => fiberRefUnsafeMake(Option.some<LogLevel.LogLevel>(logLevelWarning))
2106
+ )
2107
+
2108
+ /** @internal */
2109
+ export const withUnhandledErrorLogLevel = dual<
2110
+ (level: Option.Option<LogLevel.LogLevel>) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
2111
+ <A, E, R>(self: Effect.Effect<A, E, R>, level: Option.Option<LogLevel.LogLevel>) => Effect.Effect<A, E, R>
2112
+ >(2, (self, level) => fiberRefLocally(self, currentUnhandledErrorLogLevel, level))
2113
+
2114
+ /** @internal */
2115
+ export const currentMetricLabels: FiberRef.FiberRef<ReadonlyArray<MetricLabel.MetricLabel>> = globalValue(
2116
+ Symbol.for("effect/FiberRef/currentMetricLabels"),
2117
+ () => fiberRefUnsafeMakeReadonlyArray(Arr.empty())
2118
+ )
2119
+
2120
+ /* @internal */
2121
+ export const metricLabels: Effect.Effect<ReadonlyArray<MetricLabel.MetricLabel>> = fiberRefGet(
2122
+ currentMetricLabels
2123
+ )
2124
+
2125
+ /** @internal */
2126
+ export const currentForkScopeOverride: FiberRef.FiberRef<Option.Option<fiberScope.FiberScope>> = globalValue(
2127
+ Symbol.for("effect/FiberRef/currentForkScopeOverride"),
2128
+ () =>
2129
+ fiberRefUnsafeMake(Option.none(), {
2130
+ fork: () => Option.none() as Option.Option<fiberScope.FiberScope>,
2131
+ join: (parent, _) => parent
2132
+ })
2133
+ )
2134
+
2135
+ /** @internal */
2136
+ export const currentInterruptedCause: FiberRef.FiberRef<Cause.Cause<never>> = globalValue(
2137
+ Symbol.for("effect/FiberRef/currentInterruptedCause"),
2138
+ () =>
2139
+ fiberRefUnsafeMake(internalCause.empty, {
2140
+ fork: () => internalCause.empty,
2141
+ join: (parent, _) => parent
2142
+ })
2143
+ )
2144
+
2145
+ /** @internal */
2146
+ export const currentTracerEnabled: FiberRef.FiberRef<boolean> = globalValue(
2147
+ Symbol.for("effect/FiberRef/currentTracerEnabled"),
2148
+ () => fiberRefUnsafeMake(true)
2149
+ )
2150
+
2151
+ /** @internal */
2152
+ export const currentTracerTimingEnabled: FiberRef.FiberRef<boolean> = globalValue(
2153
+ Symbol.for("effect/FiberRef/currentTracerTiming"),
2154
+ () => fiberRefUnsafeMake(true)
2155
+ )
2156
+
2157
+ /** @internal */
2158
+ export const currentTracerSpanAnnotations: FiberRef.FiberRef<HashMap.HashMap<string, unknown>> = globalValue(
2159
+ Symbol.for("effect/FiberRef/currentTracerSpanAnnotations"),
2160
+ () => fiberRefUnsafeMake(HashMap.empty())
2161
+ )
2162
+
2163
+ /** @internal */
2164
+ export const currentTracerSpanLinks: FiberRef.FiberRef<Chunk.Chunk<Tracer.SpanLink>> = globalValue(
2165
+ Symbol.for("effect/FiberRef/currentTracerSpanLinks"),
2166
+ () => fiberRefUnsafeMake(Chunk.empty())
2167
+ )
2168
+
2169
+ /** @internal */
2170
+ export const currentSourceTrace: FiberRef.FiberRef<SourceLocation.SourceLocation | undefined> = globalValue(
2171
+ Symbol.for("effect/FiberRef/currentSourceTrace"),
2172
+ () => fiberRefUnsafeMake<SourceLocation.SourceLocation | undefined>(undefined)
2173
+ )
2174
+
2175
+ // -----------------------------------------------------------------------------
2176
+ // Scope
2177
+ // -----------------------------------------------------------------------------
2178
+
2179
+ /** @internal */
2180
+ export const ScopeTypeId: Scope.ScopeTypeId = Symbol.for("effect/Scope") as Scope.ScopeTypeId
2181
+
2182
+ /** @internal */
2183
+ export const CloseableScopeTypeId: Scope.CloseableScopeTypeId = Symbol.for(
2184
+ "effect/CloseableScope"
2185
+ ) as Scope.CloseableScopeTypeId
2186
+
2187
+ /* @internal */
2188
+ export const scopeAddFinalizer = (
2189
+ self: Scope.Scope,
2190
+ finalizer: Effect.Effect<unknown>
2191
+ ): Effect.Effect<void> => self.addFinalizer(() => asVoid(finalizer))
2192
+
2193
+ /* @internal */
2194
+ export const scopeAddFinalizerExit = (
2195
+ self: Scope.Scope,
2196
+ finalizer: Scope.Scope.Finalizer
2197
+ ): Effect.Effect<void> => self.addFinalizer(finalizer)
2198
+
2199
+ /* @internal */
2200
+ export const scopeClose = (
2201
+ self: Scope.Scope.Closeable,
2202
+ exit: Exit.Exit<unknown, unknown>
2203
+ ): Effect.Effect<void> => self.close(exit)
2204
+
2205
+ /* @internal */
2206
+ export const scopeFork = (
2207
+ self: Scope.Scope,
2208
+ strategy: ExecutionStrategy.ExecutionStrategy
2209
+ ): Effect.Effect<Scope.Scope.Closeable> => self.fork(strategy)
2210
+
2211
+ // -----------------------------------------------------------------------------
2212
+ // Cause
2213
+ // -----------------------------------------------------------------------------
2214
+
2215
+ /** @internal */
2216
+ export const causeSquash = <E>(self: Cause.Cause<E>): unknown => {
2217
+ return causeSquashWith(identity)(self)
2218
+ }
2219
+
2220
+ /** @internal */
2221
+ export const causeSquashWith = dual<
2222
+ <E>(f: (error: E) => unknown) => (self: Cause.Cause<E>) => unknown,
2223
+ <E>(self: Cause.Cause<E>, f: (error: E) => unknown) => unknown
2224
+ >(2, (self, f) => {
2225
+ const option = pipe(self, internalCause.failureOption, Option.map(f))
2226
+ switch (option._tag) {
2227
+ case "None": {
2228
+ return pipe(
2229
+ internalCause.defects(self),
2230
+ Chunk.head,
2231
+ Option.match({
2232
+ onNone: () => {
2233
+ const interrupts = Arr.fromIterable(internalCause.interruptors(self)).flatMap((fiberId) =>
2234
+ Arr.fromIterable(FiberId.ids(fiberId)).map((id) => `#${id}`)
2235
+ )
2236
+ return new InterruptedException(interrupts ? `Interrupted by fibers: ${interrupts.join(", ")}` : void 0)
2237
+ },
2238
+ onSome: identity
2239
+ })
2240
+ )
2241
+ }
2242
+ case "Some": {
2243
+ return option.value
2244
+ }
2245
+ }
2246
+ })
2247
+
2248
+ // -----------------------------------------------------------------------------
2249
+ // Errors
2250
+ // -----------------------------------------------------------------------------
2251
+
2252
+ /** @internal */
2253
+ export const YieldableError: new(message?: string, options?: ErrorOptions) => Cause.YieldableError = (function() {
2254
+ class YieldableError extends globalThis.Error {
2255
+ commit() {
2256
+ return fail(this)
2257
+ }
2258
+ toJSON() {
2259
+ const obj = { ...this }
2260
+ if (this.message) obj.message = this.message
2261
+ if (this.cause) obj.cause = this.cause
2262
+ return obj
2263
+ }
2264
+ [NodeInspectSymbol]() {
2265
+ if (this.toString !== globalThis.Error.prototype.toString) {
2266
+ return this.stack ? `${this.toString()}\n${this.stack.split("\n").slice(1).join("\n")}` : this.toString()
2267
+ } else if ("Bun" in globalThis) {
2268
+ return internalCause.pretty(internalCause.fail(this), { renderErrorCause: true })
2269
+ }
2270
+ return this
2271
+ }
2272
+ }
2273
+ // @effect-diagnostics-next-line floatingEffect:off
2274
+ Object.assign(YieldableError.prototype, StructuralCommitPrototype)
2275
+ return YieldableError as any
2276
+ })()
2277
+
2278
+ const makeException = <T extends { _tag: string; message?: string }>(
2279
+ proto: Omit<T, keyof Cause.YieldableError | "_tag">,
2280
+ tag: T["_tag"]
2281
+ ): new(message?: string | undefined) => T => {
2282
+ class Base extends YieldableError {
2283
+ readonly _tag = tag
2284
+ }
2285
+ Object.assign(Base.prototype, proto)
2286
+ ;(Base.prototype as any).name = tag
2287
+ return Base as any
2288
+ }
2289
+
2290
+ /** @internal */
2291
+ export const RuntimeExceptionTypeId: Cause.RuntimeExceptionTypeId = Symbol.for(
2292
+ "effect/Cause/errors/RuntimeException"
2293
+ ) as Cause.RuntimeExceptionTypeId
2294
+
2295
+ /** @internal */
2296
+ export const RuntimeException = makeException<Cause.RuntimeException>({
2297
+ [RuntimeExceptionTypeId]: RuntimeExceptionTypeId
2298
+ }, "RuntimeException")
2299
+
2300
+ /** @internal */
2301
+ export const isRuntimeException = (u: unknown): u is Cause.RuntimeException => hasProperty(u, RuntimeExceptionTypeId)
2302
+
2303
+ /** @internal */
2304
+ export const InterruptedExceptionTypeId: Cause.InterruptedExceptionTypeId = Symbol.for(
2305
+ "effect/Cause/errors/InterruptedException"
2306
+ ) as Cause.InterruptedExceptionTypeId
2307
+
2308
+ /** @internal */
2309
+ export const InterruptedException = makeException<Cause.InterruptedException>({
2310
+ [InterruptedExceptionTypeId]: InterruptedExceptionTypeId
2311
+ }, "InterruptedException")
2312
+
2313
+ /** @internal */
2314
+ export const isInterruptedException = (u: unknown): u is Cause.InterruptedException =>
2315
+ hasProperty(u, InterruptedExceptionTypeId)
2316
+
2317
+ /** @internal */
2318
+ export const IllegalArgumentExceptionTypeId: Cause.IllegalArgumentExceptionTypeId = Symbol.for(
2319
+ "effect/Cause/errors/IllegalArgument"
2320
+ ) as Cause.IllegalArgumentExceptionTypeId
2321
+
2322
+ /** @internal */
2323
+ export const IllegalArgumentException = makeException<Cause.IllegalArgumentException>({
2324
+ [IllegalArgumentExceptionTypeId]: IllegalArgumentExceptionTypeId
2325
+ }, "IllegalArgumentException")
2326
+
2327
+ /** @internal */
2328
+ export const isIllegalArgumentException = (u: unknown): u is Cause.IllegalArgumentException =>
2329
+ hasProperty(u, IllegalArgumentExceptionTypeId)
2330
+
2331
+ /** @internal */
2332
+ export const NoSuchElementExceptionTypeId: Cause.NoSuchElementExceptionTypeId = Symbol.for(
2333
+ "effect/Cause/errors/NoSuchElement"
2334
+ ) as Cause.NoSuchElementExceptionTypeId
2335
+
2336
+ /** @internal */
2337
+ export const NoSuchElementException = makeException<Cause.NoSuchElementException>({
2338
+ [NoSuchElementExceptionTypeId]: NoSuchElementExceptionTypeId
2339
+ }, "NoSuchElementException")
2340
+
2341
+ /** @internal */
2342
+ export const isNoSuchElementException = (u: unknown): u is Cause.NoSuchElementException =>
2343
+ hasProperty(u, NoSuchElementExceptionTypeId)
2344
+
2345
+ /** @internal */
2346
+ export const InvalidPubSubCapacityExceptionTypeId: Cause.InvalidPubSubCapacityExceptionTypeId = Symbol.for(
2347
+ "effect/Cause/errors/InvalidPubSubCapacityException"
2348
+ ) as Cause.InvalidPubSubCapacityExceptionTypeId
2349
+
2350
+ /** @internal */
2351
+ export const InvalidPubSubCapacityException = makeException<Cause.InvalidPubSubCapacityException>({
2352
+ [InvalidPubSubCapacityExceptionTypeId]: InvalidPubSubCapacityExceptionTypeId
2353
+ }, "InvalidPubSubCapacityException")
2354
+
2355
+ /** @internal */
2356
+ export const ExceededCapacityExceptionTypeId: Cause.ExceededCapacityExceptionTypeId = Symbol.for(
2357
+ "effect/Cause/errors/ExceededCapacityException"
2358
+ ) as Cause.ExceededCapacityExceptionTypeId
2359
+
2360
+ /** @internal */
2361
+ export const ExceededCapacityException = makeException<Cause.ExceededCapacityException>({
2362
+ [ExceededCapacityExceptionTypeId]: ExceededCapacityExceptionTypeId
2363
+ }, "ExceededCapacityException")
2364
+
2365
+ /** @internal */
2366
+ export const isExceededCapacityException = (u: unknown): u is Cause.ExceededCapacityException =>
2367
+ hasProperty(u, ExceededCapacityExceptionTypeId)
2368
+
2369
+ /** @internal */
2370
+ export const isInvalidCapacityError = (u: unknown): u is Cause.InvalidPubSubCapacityException =>
2371
+ hasProperty(u, InvalidPubSubCapacityExceptionTypeId)
2372
+
2373
+ /** @internal */
2374
+ export const TimeoutExceptionTypeId: Cause.TimeoutExceptionTypeId = Symbol.for(
2375
+ "effect/Cause/errors/Timeout"
2376
+ ) as Cause.TimeoutExceptionTypeId
2377
+
2378
+ /** @internal */
2379
+ export const TimeoutException = makeException<Cause.TimeoutException>({
2380
+ [TimeoutExceptionTypeId]: TimeoutExceptionTypeId
2381
+ }, "TimeoutException")
2382
+
2383
+ /** @internal */
2384
+ export const timeoutExceptionFromDuration = (duration: Duration.DurationInput): Cause.TimeoutException =>
2385
+ new TimeoutException(`Operation timed out after '${Duration.format(duration)}'`)
2386
+
2387
+ /** @internal */
2388
+ export const isTimeoutException = (u: unknown): u is Cause.TimeoutException => hasProperty(u, TimeoutExceptionTypeId)
2389
+
2390
+ /** @internal */
2391
+ export const UnknownExceptionTypeId: Cause.UnknownExceptionTypeId = Symbol.for(
2392
+ "effect/Cause/errors/UnknownException"
2393
+ ) as Cause.UnknownExceptionTypeId
2394
+
2395
+ /** @internal */
2396
+ export const UnknownException: new(cause: unknown, message?: string | undefined) => Cause.UnknownException =
2397
+ (function() {
2398
+ class UnknownException extends YieldableError {
2399
+ readonly _tag = "UnknownException"
2400
+ readonly error: unknown
2401
+ constructor(cause: unknown, message?: string) {
2402
+ super(message ?? "An unknown error occurred", { cause })
2403
+ this.error = cause
2404
+ }
2405
+ }
2406
+ Object.assign(UnknownException.prototype, {
2407
+ [UnknownExceptionTypeId]: UnknownExceptionTypeId,
2408
+ name: "UnknownException"
2409
+ })
2410
+ return UnknownException as any
2411
+ })()
2412
+
2413
+ /** @internal */
2414
+ export const isUnknownException = (u: unknown): u is Cause.UnknownException => hasProperty(u, UnknownExceptionTypeId)
2415
+
2416
+ // -----------------------------------------------------------------------------
2417
+ // Exit
2418
+ // -----------------------------------------------------------------------------
2419
+
2420
+ /** @internal */
2421
+ export const exitIsExit = (u: unknown): u is Exit.Exit<unknown, unknown> =>
2422
+ isEffect(u) && "_tag" in u && (u._tag === "Success" || u._tag === "Failure")
2423
+
2424
+ /** @internal */
2425
+ export const exitIsFailure = <A, E>(self: Exit.Exit<A, E>): self is Exit.Failure<A, E> => self._tag === "Failure"
2426
+
2427
+ /** @internal */
2428
+ export const exitIsSuccess = <A, E>(self: Exit.Exit<A, E>): self is Exit.Success<A, E> => self._tag === "Success"
2429
+
2430
+ /** @internal */
2431
+ export const exitIsInterrupted = <A, E>(self: Exit.Exit<A, E>): boolean => {
2432
+ switch (self._tag) {
2433
+ case OpCodes.OP_FAILURE:
2434
+ return internalCause.isInterrupted(self.effect_instruction_i0)
2435
+ case OpCodes.OP_SUCCESS:
2436
+ return false
2437
+ }
2438
+ }
2439
+
2440
+ /** @internal */
2441
+ export const exitAs = dual<
2442
+ <A2>(value: A2) => <A, E>(self: Exit.Exit<A, E>) => Exit.Exit<A2, E>,
2443
+ <A, E, A2>(self: Exit.Exit<A, E>, value: A2) => Exit.Exit<A2, E>
2444
+ >(2, <A, E, A2>(self: Exit.Exit<A, E>, value: A2): Exit.Exit<A2, E> => {
2445
+ switch (self._tag) {
2446
+ case OpCodes.OP_FAILURE: {
2447
+ return exitFailCause(self.effect_instruction_i0)
2448
+ }
2449
+ case OpCodes.OP_SUCCESS: {
2450
+ return exitSucceed(value) as Exit.Exit<A2, E>
2451
+ }
2452
+ }
2453
+ })
2454
+
2455
+ /** @internal */
2456
+ export const exitAsVoid = <A, E>(self: Exit.Exit<A, E>): Exit.Exit<void, E> => exitAs(self, void 0)
2457
+
2458
+ /** @internal */
2459
+ export const exitCauseOption = <A, E>(self: Exit.Exit<A, E>): Option.Option<Cause.Cause<E>> => {
2460
+ switch (self._tag) {
2461
+ case OpCodes.OP_FAILURE:
2462
+ return Option.some(self.effect_instruction_i0)
2463
+ case OpCodes.OP_SUCCESS:
2464
+ return Option.none()
2465
+ }
2466
+ }
2467
+
2468
+ /** @internal */
2469
+ export const exitCollectAll = <A, E>(
2470
+ exits: Iterable<Exit.Exit<A, E>>,
2471
+ options?: {
2472
+ readonly parallel?: boolean | undefined
2473
+ }
2474
+ ): Option.Option<Exit.Exit<Array<A>, E>> =>
2475
+ exitCollectAllInternal(exits, options?.parallel ? internalCause.parallel : internalCause.sequential)
2476
+
2477
+ /** @internal */
2478
+ export const exitDie = (defect: unknown): Exit.Exit<never> =>
2479
+ exitFailCause(internalCause.die(defect)) as Exit.Exit<never>
2480
+
2481
+ /** @internal */
2482
+ export const exitExists: {
2483
+ <A, B extends A>(refinement: Refinement<NoInfer<A>, B>): <E>(self: Exit.Exit<A, E>) => self is Exit.Exit<B>
2484
+ <A>(predicate: Predicate<NoInfer<A>>): <E>(self: Exit.Exit<A, E>) => boolean
2485
+ <A, E, B extends A>(self: Exit.Exit<A, E>, refinement: Refinement<A, B>): self is Exit.Exit<B>
2486
+ <A, E>(self: Exit.Exit<A, E>, predicate: Predicate<A>): boolean
2487
+ } = dual(2, <A, E, B extends A>(self: Exit.Exit<A, E>, refinement: Refinement<A, B>): self is Exit.Exit<B> => {
2488
+ switch (self._tag) {
2489
+ case OpCodes.OP_FAILURE:
2490
+ return false
2491
+ case OpCodes.OP_SUCCESS:
2492
+ return refinement(self.effect_instruction_i0)
2493
+ }
2494
+ })
2495
+
2496
+ /** @internal */
2497
+ export const exitFail = <E>(error: E): Exit.Exit<never, E> =>
2498
+ exitFailCause(internalCause.fail(error)) as Exit.Exit<never, E>
2499
+
2500
+ /** @internal */
2501
+ export const exitFailCause = <E>(cause: Cause.Cause<E>): Exit.Exit<never, E> => {
2502
+ const effect = new EffectPrimitiveFailure(OpCodes.OP_FAILURE) as any
2503
+ effect.effect_instruction_i0 = cause
2504
+ return effect
2505
+ }
2506
+
2507
+ /** @internal */
2508
+ export const exitFlatMap = dual<
2509
+ <A, A2, E2>(f: (a: A) => Exit.Exit<A2, E2>) => <E>(self: Exit.Exit<A, E>) => Exit.Exit<A2, E | E2>,
2510
+ <A, E, E2, A2>(self: Exit.Exit<A, E>, f: (a: A) => Exit.Exit<A2, E2>) => Exit.Exit<A2, E | E2>
2511
+ >(2, <A, E, E2, A2>(self: Exit.Exit<A, E>, f: (a: A) => Exit.Exit<A2, E2>): Exit.Exit<A2, E | E2> => {
2512
+ switch (self._tag) {
2513
+ case OpCodes.OP_FAILURE: {
2514
+ return exitFailCause(self.effect_instruction_i0)
2515
+ }
2516
+ case OpCodes.OP_SUCCESS: {
2517
+ return f(self.effect_instruction_i0)
2518
+ }
2519
+ }
2520
+ })
2521
+
2522
+ /** @internal */
2523
+ export const exitFlatMapEffect: {
2524
+ <A, E, A2, E2, R>(
2525
+ f: (a: A) => Effect.Effect<Exit.Exit<A2, E>, E2, R>
2526
+ ): (self: Exit.Exit<A, E>) => Effect.Effect<Exit.Exit<A2, E>, E2, R>
2527
+ <A, E, A2, E2, R>(
2528
+ self: Exit.Exit<A, E>,
2529
+ f: (a: A) => Effect.Effect<Exit.Exit<A2, E>, E2, R>
2530
+ ): Effect.Effect<Exit.Exit<A2, E>, E2, R>
2531
+ } = dual(2, <A, E, A2, E2, R>(
2532
+ self: Exit.Exit<A, E>,
2533
+ f: (a: A) => Effect.Effect<Exit.Exit<A2, E>, E2, R>
2534
+ ): Effect.Effect<Exit.Exit<A2, E>, E2, R> => {
2535
+ switch (self._tag) {
2536
+ case OpCodes.OP_FAILURE: {
2537
+ return succeed(exitFailCause(self.effect_instruction_i0))
2538
+ }
2539
+ case OpCodes.OP_SUCCESS: {
2540
+ return f(self.effect_instruction_i0)
2541
+ }
2542
+ }
2543
+ })
2544
+
2545
+ /** @internal */
2546
+ export const exitFlatten = <A, E, E2>(
2547
+ self: Exit.Exit<Exit.Exit<A, E>, E2>
2548
+ ): Exit.Exit<A, E | E2> => pipe(self, exitFlatMap(identity))
2549
+
2550
+ /** @internal */
2551
+ export const exitForEachEffect: {
2552
+ <A, B, E2, R>(
2553
+ f: (a: A) => Effect.Effect<B, E2, R>
2554
+ ): <E>(self: Exit.Exit<A, E>) => Effect.Effect<Exit.Exit<B, E | E2>, never, R>
2555
+ <A, E, B, E2, R>(
2556
+ self: Exit.Exit<A, E>,
2557
+ f: (a: A) => Effect.Effect<B, E2, R>
2558
+ ): Effect.Effect<Exit.Exit<B, E | E2>, never, R>
2559
+ } = dual(2, <A, E, B, E2, R>(
2560
+ self: Exit.Exit<A, E>,
2561
+ f: (a: A) => Effect.Effect<B, E2, R>
2562
+ ): Effect.Effect<Exit.Exit<B, E | E2>, never, R> => {
2563
+ switch (self._tag) {
2564
+ case OpCodes.OP_FAILURE: {
2565
+ return succeed(exitFailCause(self.effect_instruction_i0))
2566
+ }
2567
+ case OpCodes.OP_SUCCESS: {
2568
+ return exit(f(self.effect_instruction_i0))
2569
+ }
2570
+ }
2571
+ })
2572
+
2573
+ /** @internal */
2574
+ export const exitFromEither = <R, L>(either: Either.Either<R, L>): Exit.Exit<R, L> => {
2575
+ switch (either._tag) {
2576
+ case "Left":
2577
+ return exitFail(either.left)
2578
+ case "Right":
2579
+ return exitSucceed(either.right)
2580
+ }
2581
+ }
2582
+
2583
+ /** @internal */
2584
+ export const exitFromOption = <A>(option: Option.Option<A>): Exit.Exit<A, void> => {
2585
+ switch (option._tag) {
2586
+ case "None":
2587
+ return exitFail(void 0)
2588
+ case "Some":
2589
+ return exitSucceed(option.value)
2590
+ }
2591
+ }
2592
+
2593
+ /** @internal */
2594
+ export const exitGetOrElse = dual<
2595
+ <E, A2>(orElse: (cause: Cause.Cause<E>) => A2) => <A>(self: Exit.Exit<A, E>) => A | A2,
2596
+ <A, E, A2>(self: Exit.Exit<A, E>, orElse: (cause: Cause.Cause<E>) => A2) => A | A2
2597
+ >(2, (self, orElse) => {
2598
+ switch (self._tag) {
2599
+ case OpCodes.OP_FAILURE:
2600
+ return orElse(self.effect_instruction_i0)
2601
+ case OpCodes.OP_SUCCESS:
2602
+ return self.effect_instruction_i0
2603
+ }
2604
+ })
2605
+
2606
+ /** @internal */
2607
+ export const exitInterrupt = (fiberId: FiberId.FiberId): Exit.Exit<never> =>
2608
+ exitFailCause(internalCause.interrupt(fiberId))
2609
+
2610
+ /** @internal */
2611
+ export const exitMap = dual<
2612
+ <A, B>(f: (a: A) => B) => <E>(self: Exit.Exit<A, E>) => Exit.Exit<B, E>,
2613
+ <A, E, B>(self: Exit.Exit<A, E>, f: (a: A) => B) => Exit.Exit<B, E>
2614
+ >(2, (self, f) => {
2615
+ switch (self._tag) {
2616
+ case OpCodes.OP_FAILURE:
2617
+ return exitFailCause(self.effect_instruction_i0)
2618
+ case OpCodes.OP_SUCCESS:
2619
+ return exitSucceed(f(self.effect_instruction_i0))
2620
+ }
2621
+ })
2622
+
2623
+ /** @internal */
2624
+ export const exitMapBoth = dual<
2625
+ <E, A, E2, A2>(
2626
+ options: {
2627
+ readonly onFailure: (e: E) => E2
2628
+ readonly onSuccess: (a: A) => A2
2629
+ }
2630
+ ) => (self: Exit.Exit<A, E>) => Exit.Exit<A2, E2>,
2631
+ <A, E, E2, A2>(
2632
+ self: Exit.Exit<A, E>,
2633
+ options: {
2634
+ readonly onFailure: (e: E) => E2
2635
+ readonly onSuccess: (a: A) => A2
2636
+ }
2637
+ ) => Exit.Exit<A2, E2>
2638
+ >(2, (self, { onFailure, onSuccess }) => {
2639
+ switch (self._tag) {
2640
+ case OpCodes.OP_FAILURE:
2641
+ return exitFailCause(pipe(self.effect_instruction_i0, internalCause.map(onFailure)))
2642
+ case OpCodes.OP_SUCCESS:
2643
+ return exitSucceed(onSuccess(self.effect_instruction_i0))
2644
+ }
2645
+ })
2646
+
2647
+ /** @internal */
2648
+ export const exitMapError = dual<
2649
+ <E, E2>(f: (e: E) => E2) => <A>(self: Exit.Exit<A, E>) => Exit.Exit<A, E2>,
2650
+ <A, E, E2>(self: Exit.Exit<A, E>, f: (e: E) => E2) => Exit.Exit<A, E2>
2651
+ >(2, (self, f) => {
2652
+ switch (self._tag) {
2653
+ case OpCodes.OP_FAILURE:
2654
+ return exitFailCause(pipe(self.effect_instruction_i0, internalCause.map(f)))
2655
+ case OpCodes.OP_SUCCESS:
2656
+ return exitSucceed(self.effect_instruction_i0)
2657
+ }
2658
+ })
2659
+
2660
+ /** @internal */
2661
+ export const exitMapErrorCause = dual<
2662
+ <E, E2>(f: (cause: Cause.Cause<E>) => Cause.Cause<E2>) => <A>(self: Exit.Exit<A, E>) => Exit.Exit<A, E2>,
2663
+ <E, A, E2>(self: Exit.Exit<A, E>, f: (cause: Cause.Cause<E>) => Cause.Cause<E2>) => Exit.Exit<A, E2>
2664
+ >(2, (self, f) => {
2665
+ switch (self._tag) {
2666
+ case OpCodes.OP_FAILURE:
2667
+ return exitFailCause(f(self.effect_instruction_i0))
2668
+ case OpCodes.OP_SUCCESS:
2669
+ return exitSucceed(self.effect_instruction_i0)
2670
+ }
2671
+ })
2672
+
2673
+ /** @internal */
2674
+ export const exitMatch = dual<
2675
+ <E, A, Z1, Z2>(options: {
2676
+ readonly onFailure: (cause: Cause.Cause<E>) => Z1
2677
+ readonly onSuccess: (a: A) => Z2
2678
+ }) => (self: Exit.Exit<A, E>) => Z1 | Z2,
2679
+ <A, E, Z1, Z2>(self: Exit.Exit<A, E>, options: {
2680
+ readonly onFailure: (cause: Cause.Cause<E>) => Z1
2681
+ readonly onSuccess: (a: A) => Z2
2682
+ }) => Z1 | Z2
2683
+ >(2, (self, { onFailure, onSuccess }) => {
2684
+ switch (self._tag) {
2685
+ case OpCodes.OP_FAILURE:
2686
+ return onFailure(self.effect_instruction_i0)
2687
+ case OpCodes.OP_SUCCESS:
2688
+ return onSuccess(self.effect_instruction_i0)
2689
+ }
2690
+ })
2691
+
2692
+ /** @internal */
2693
+ export const exitMatchEffect = dual<
2694
+ <E, A2, E2, R, A, A3, E3, R2>(
2695
+ options: {
2696
+ readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<A2, E2, R>
2697
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R2>
2698
+ }
2699
+ ) => (self: Exit.Exit<A, E>) => Effect.Effect<A2 | A3, E2 | E3, R | R2>,
2700
+ <A, E, A2, E2, R, A3, E3, R2>(
2701
+ self: Exit.Exit<A, E>,
2702
+ options: {
2703
+ readonly onFailure: (cause: Cause.Cause<E>) => Effect.Effect<A2, E2, R>
2704
+ readonly onSuccess: (a: A) => Effect.Effect<A3, E3, R2>
2705
+ }
2706
+ ) => Effect.Effect<A2 | A3, E2 | E3, R | R2>
2707
+ >(2, (self, { onFailure, onSuccess }) => {
2708
+ switch (self._tag) {
2709
+ case OpCodes.OP_FAILURE:
2710
+ return onFailure(self.effect_instruction_i0)
2711
+ case OpCodes.OP_SUCCESS:
2712
+ return onSuccess(self.effect_instruction_i0)
2713
+ }
2714
+ })
2715
+
2716
+ /** @internal */
2717
+ export const exitSucceed = <A>(value: A): Exit.Exit<A> => {
2718
+ const effect = new EffectPrimitiveSuccess(OpCodes.OP_SUCCESS) as any
2719
+ effect.effect_instruction_i0 = value
2720
+ return effect
2721
+ }
2722
+
2723
+ /** @internal */
2724
+ export const exitVoid: Exit.Exit<void> = exitSucceed(void 0)
2725
+
2726
+ /** @internal */
2727
+ export const exitZip = dual<
2728
+ <A2, E2>(that: Exit.Exit<A2, E2>) => <A, E>(self: Exit.Exit<A, E>) => Exit.Exit<[A, A2], E | E2>,
2729
+ <A, E, A2, E2>(self: Exit.Exit<A, E>, that: Exit.Exit<A2, E2>) => Exit.Exit<[A, A2], E | E2>
2730
+ >(2, (self, that) =>
2731
+ exitZipWith(self, that, {
2732
+ onSuccess: (a, a2) => [a, a2],
2733
+ onFailure: internalCause.sequential
2734
+ }))
2735
+
2736
+ /** @internal */
2737
+ export const exitZipLeft = dual<
2738
+ <A2, E2>(that: Exit.Exit<A2, E2>) => <A, E>(self: Exit.Exit<A, E>) => Exit.Exit<A, E | E2>,
2739
+ <A, E, A2, E2>(self: Exit.Exit<A, E>, that: Exit.Exit<A2, E2>) => Exit.Exit<A, E | E2>
2740
+ >(2, (self, that) =>
2741
+ exitZipWith(self, that, {
2742
+ onSuccess: (a, _) => a,
2743
+ onFailure: internalCause.sequential
2744
+ }))
2745
+
2746
+ /** @internal */
2747
+ export const exitZipRight = dual<
2748
+ <A2, E2>(that: Exit.Exit<A2, E2>) => <A, E>(self: Exit.Exit<A, E>) => Exit.Exit<A2, E | E2>,
2749
+ <A, E, A2, E2>(self: Exit.Exit<A, E>, that: Exit.Exit<A2, E2>) => Exit.Exit<A2, E | E2>
2750
+ >(2, (self, that) =>
2751
+ exitZipWith(self, that, {
2752
+ onSuccess: (_, a2) => a2,
2753
+ onFailure: internalCause.sequential
2754
+ }))
2755
+
2756
+ /** @internal */
2757
+ export const exitZipPar = dual<
2758
+ <A2, E2>(that: Exit.Exit<A2, E2>) => <A, E>(self: Exit.Exit<A, E>) => Exit.Exit<[A, A2], E | E2>,
2759
+ <A, E, A2, E2>(self: Exit.Exit<A, E>, that: Exit.Exit<A2, E2>) => Exit.Exit<[A, A2], E | E2>
2760
+ >(2, (self, that) =>
2761
+ exitZipWith(self, that, {
2762
+ onSuccess: (a, a2) => [a, a2],
2763
+ onFailure: internalCause.parallel
2764
+ }))
2765
+
2766
+ /** @internal */
2767
+ export const exitZipParLeft = dual<
2768
+ <A2, E2>(that: Exit.Exit<A2, E2>) => <A, E>(self: Exit.Exit<A, E>) => Exit.Exit<A, E | E2>,
2769
+ <A, E, A2, E2>(self: Exit.Exit<A, E>, that: Exit.Exit<A2, E2>) => Exit.Exit<A, E | E2>
2770
+ >(2, (self, that) =>
2771
+ exitZipWith(self, that, {
2772
+ onSuccess: (a, _) => a,
2773
+ onFailure: internalCause.parallel
2774
+ }))
2775
+
2776
+ /** @internal */
2777
+ export const exitZipParRight = dual<
2778
+ <A2, E2>(that: Exit.Exit<A2, E2>) => <A, E>(self: Exit.Exit<A, E>) => Exit.Exit<A2, E | E2>,
2779
+ <A, E, A2, E2>(self: Exit.Exit<A, E>, that: Exit.Exit<A2, E2>) => Exit.Exit<A2, E | E2>
2780
+ >(2, (self, that) =>
2781
+ exitZipWith(self, that, {
2782
+ onSuccess: (_, a2) => a2,
2783
+ onFailure: internalCause.parallel
2784
+ }))
2785
+
2786
+ /** @internal */
2787
+ export const exitZipWith = dual<
2788
+ <B, E2, A, C, E>(
2789
+ that: Exit.Exit<B, E2>,
2790
+ options: {
2791
+ readonly onSuccess: (a: A, b: B) => C
2792
+ readonly onFailure: (cause: Cause.Cause<E>, cause2: Cause.Cause<E2>) => Cause.Cause<E | E2>
2793
+ }
2794
+ ) => (self: Exit.Exit<A, E>) => Exit.Exit<C, E | E2>,
2795
+ <A, E, B, E2, C>(
2796
+ self: Exit.Exit<A, E>,
2797
+ that: Exit.Exit<B, E2>,
2798
+ options: {
2799
+ readonly onSuccess: (a: A, b: B) => C
2800
+ readonly onFailure: (cause: Cause.Cause<E>, cause2: Cause.Cause<E2>) => Cause.Cause<E | E2>
2801
+ }
2802
+ ) => Exit.Exit<C, E | E2>
2803
+ >(3, (
2804
+ self,
2805
+ that,
2806
+ { onFailure, onSuccess }
2807
+ ) => {
2808
+ switch (self._tag) {
2809
+ case OpCodes.OP_FAILURE: {
2810
+ switch (that._tag) {
2811
+ case OpCodes.OP_SUCCESS:
2812
+ return exitFailCause(self.effect_instruction_i0)
2813
+ case OpCodes.OP_FAILURE: {
2814
+ return exitFailCause(onFailure(self.effect_instruction_i0, that.effect_instruction_i0))
2815
+ }
2816
+ }
2817
+ }
2818
+ case OpCodes.OP_SUCCESS: {
2819
+ switch (that._tag) {
2820
+ case OpCodes.OP_SUCCESS:
2821
+ return exitSucceed(onSuccess(self.effect_instruction_i0, that.effect_instruction_i0))
2822
+ case OpCodes.OP_FAILURE:
2823
+ return exitFailCause(that.effect_instruction_i0)
2824
+ }
2825
+ }
2826
+ }
2827
+ })
2828
+
2829
+ const exitCollectAllInternal = <A, E>(
2830
+ exits: Iterable<Exit.Exit<A, E>>,
2831
+ combineCauses: (causeA: Cause.Cause<E>, causeB: Cause.Cause<E>) => Cause.Cause<E>
2832
+ ): Option.Option<Exit.Exit<Array<A>, E>> => {
2833
+ const list = Chunk.fromIterable(exits)
2834
+ if (!Chunk.isNonEmpty(list)) {
2835
+ return Option.none()
2836
+ }
2837
+ return pipe(
2838
+ Chunk.tailNonEmpty(list),
2839
+ Arr.reduce(
2840
+ pipe(Chunk.headNonEmpty(list), exitMap<A, Chunk.Chunk<A>>(Chunk.of)),
2841
+ (accumulator, current) =>
2842
+ pipe(
2843
+ accumulator,
2844
+ exitZipWith(current, {
2845
+ onSuccess: (list, value) => pipe(list, Chunk.prepend(value)),
2846
+ onFailure: combineCauses
2847
+ })
2848
+ )
2849
+ ),
2850
+ exitMap(Chunk.reverse),
2851
+ exitMap((chunk) => Chunk.toReadonlyArray(chunk) as Array<A>),
2852
+ Option.some
2853
+ )
2854
+ }
2855
+
2856
+ // -----------------------------------------------------------------------------
2857
+ // Deferred
2858
+ // -----------------------------------------------------------------------------
2859
+
2860
+ /** @internal */
2861
+ export const deferredUnsafeMake = <A, E = never>(fiberId: FiberId.FiberId): Deferred.Deferred<A, E> => {
2862
+ const _deferred = {
2863
+ ...CommitPrototype,
2864
+ [deferred.DeferredTypeId]: deferred.deferredVariance,
2865
+ state: MutableRef.make(deferred.pending<A, E>([])),
2866
+ commit() {
2867
+ return deferredAwait(this)
2868
+ },
2869
+ blockingOn: fiberId
2870
+ }
2871
+ return _deferred
2872
+ }
2873
+
2874
+ /* @internal */
2875
+ export const deferredMake = <A, E = never>(): Effect.Effect<Deferred.Deferred<A, E>> =>
2876
+ flatMap(fiberId, (id) => deferredMakeAs<A, E>(id))
2877
+
2878
+ /* @internal */
2879
+ export const deferredMakeAs = <A, E = never>(fiberId: FiberId.FiberId): Effect.Effect<Deferred.Deferred<A, E>> =>
2880
+ sync(() => deferredUnsafeMake<A, E>(fiberId))
2881
+
2882
+ /* @internal */
2883
+ export const deferredAwait = <A, E>(self: Deferred.Deferred<A, E>): Effect.Effect<A, E> =>
2884
+ asyncInterrupt<A, E>((resume) => {
2885
+ const state = MutableRef.get(self.state)
2886
+ switch (state._tag) {
2887
+ case DeferredOpCodes.OP_STATE_DONE: {
2888
+ return resume(state.effect)
2889
+ }
2890
+ case DeferredOpCodes.OP_STATE_PENDING: {
2891
+ // we can push here as the internal state is mutable
2892
+ state.joiners.push(resume)
2893
+ return deferredInterruptJoiner(self, resume)
2894
+ }
2895
+ }
2896
+ }, self.blockingOn)
2897
+
2898
+ /* @internal */
2899
+ export const deferredComplete: {
2900
+ <A, E>(effect: Effect.Effect<A, E>): (self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>
2901
+ <A, E>(self: Deferred.Deferred<A, E>, effect: Effect.Effect<A, E>): Effect.Effect<boolean>
2902
+ } = dual(
2903
+ 2,
2904
+ <A, E>(self: Deferred.Deferred<A, E>, effect: Effect.Effect<A, E>): Effect.Effect<boolean> =>
2905
+ intoDeferred(effect, self)
2906
+ )
2907
+
2908
+ /* @internal */
2909
+ export const deferredCompleteWith = dual<
2910
+ <A, E>(effect: Effect.Effect<A, E>) => (self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2911
+ <A, E>(self: Deferred.Deferred<A, E>, effect: Effect.Effect<A, E>) => Effect.Effect<boolean>
2912
+ >(2, (self, effect) =>
2913
+ sync(() => {
2914
+ const state = MutableRef.get(self.state)
2915
+ switch (state._tag) {
2916
+ case DeferredOpCodes.OP_STATE_DONE: {
2917
+ return false
2918
+ }
2919
+ case DeferredOpCodes.OP_STATE_PENDING: {
2920
+ MutableRef.set(self.state, deferred.done(effect))
2921
+ for (let i = 0, len = state.joiners.length; i < len; i++) {
2922
+ state.joiners[i](effect)
2923
+ }
2924
+ return true
2925
+ }
2926
+ }
2927
+ }))
2928
+
2929
+ /* @internal */
2930
+ export const deferredDone = dual<
2931
+ <A, E>(exit: Exit.Exit<A, E>) => (self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2932
+ <A, E>(self: Deferred.Deferred<A, E>, exit: Exit.Exit<A, E>) => Effect.Effect<boolean>
2933
+ >(2, (self, exit) => deferredCompleteWith(self, exit))
2934
+
2935
+ /* @internal */
2936
+ export const deferredFail = dual<
2937
+ <E>(error: E) => <A>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2938
+ <A, E>(self: Deferred.Deferred<A, E>, error: E) => Effect.Effect<boolean>
2939
+ >(2, (self, error) => deferredCompleteWith(self, fail(error)))
2940
+
2941
+ /* @internal */
2942
+ export const deferredFailSync = dual<
2943
+ <E>(evaluate: LazyArg<E>) => <A>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2944
+ <A, E>(self: Deferred.Deferred<A, E>, evaluate: LazyArg<E>) => Effect.Effect<boolean>
2945
+ >(2, (self, evaluate) => deferredCompleteWith(self, failSync(evaluate)))
2946
+
2947
+ /* @internal */
2948
+ export const deferredFailCause = dual<
2949
+ <E>(cause: Cause.Cause<E>) => <A>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2950
+ <A, E>(self: Deferred.Deferred<A, E>, cause: Cause.Cause<E>) => Effect.Effect<boolean>
2951
+ >(2, (self, cause) => deferredCompleteWith(self, failCause(cause)))
2952
+
2953
+ /* @internal */
2954
+ export const deferredFailCauseSync = dual<
2955
+ <E>(evaluate: LazyArg<Cause.Cause<E>>) => <A>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2956
+ <A, E>(self: Deferred.Deferred<A, E>, evaluate: LazyArg<Cause.Cause<E>>) => Effect.Effect<boolean>
2957
+ >(2, (self, evaluate) => deferredCompleteWith(self, failCauseSync(evaluate)))
2958
+
2959
+ /* @internal */
2960
+ export const deferredDie = dual<
2961
+ (defect: unknown) => <A, E>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2962
+ <A, E>(self: Deferred.Deferred<A, E>, defect: unknown) => Effect.Effect<boolean>
2963
+ >(2, (self, defect) => deferredCompleteWith(self, die(defect)))
2964
+
2965
+ /* @internal */
2966
+ export const deferredDieSync = dual<
2967
+ (evaluate: LazyArg<unknown>) => <A, E>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2968
+ <A, E>(self: Deferred.Deferred<A, E>, evaluate: LazyArg<unknown>) => Effect.Effect<boolean>
2969
+ >(2, (self, evaluate) => deferredCompleteWith(self, dieSync(evaluate)))
2970
+
2971
+ /* @internal */
2972
+ export const deferredInterrupt = <A, E>(self: Deferred.Deferred<A, E>): Effect.Effect<boolean> =>
2973
+ flatMap(fiberId, (fiberId) => deferredCompleteWith(self, interruptWith(fiberId)))
2974
+
2975
+ /* @internal */
2976
+ export const deferredInterruptWith = dual<
2977
+ (fiberId: FiberId.FiberId) => <A, E>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
2978
+ <A, E>(self: Deferred.Deferred<A, E>, fiberId: FiberId.FiberId) => Effect.Effect<boolean>
2979
+ >(2, (self, fiberId) => deferredCompleteWith(self, interruptWith(fiberId)))
2980
+
2981
+ /* @internal */
2982
+ export const deferredIsDone = <A, E>(self: Deferred.Deferred<A, E>): Effect.Effect<boolean> =>
2983
+ sync(() => MutableRef.get(self.state)._tag === DeferredOpCodes.OP_STATE_DONE)
2984
+
2985
+ /* @internal */
2986
+ export const deferredPoll = <A, E>(
2987
+ self: Deferred.Deferred<A, E>
2988
+ ): Effect.Effect<Option.Option<Effect.Effect<A, E>>> =>
2989
+ sync(() => {
2990
+ const state = MutableRef.get(self.state)
2991
+ switch (state._tag) {
2992
+ case DeferredOpCodes.OP_STATE_DONE: {
2993
+ return Option.some(state.effect)
2994
+ }
2995
+ case DeferredOpCodes.OP_STATE_PENDING: {
2996
+ return Option.none()
2997
+ }
2998
+ }
2999
+ })
3000
+
3001
+ /* @internal */
3002
+ export const deferredSucceed = dual<
3003
+ <A>(value: A) => <E>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
3004
+ <A, E>(self: Deferred.Deferred<A, E>, value: A) => Effect.Effect<boolean>
3005
+ >(2, (self, value) => deferredCompleteWith(self, succeed(value)))
3006
+
3007
+ /* @internal */
3008
+ export const deferredSync = dual<
3009
+ <A>(evaluate: LazyArg<A>) => <E>(self: Deferred.Deferred<A, E>) => Effect.Effect<boolean>,
3010
+ <A, E>(self: Deferred.Deferred<A, E>, evaluate: LazyArg<A>) => Effect.Effect<boolean>
3011
+ >(2, (self, evaluate) => deferredCompleteWith(self, sync(evaluate)))
3012
+
3013
+ /** @internal */
3014
+ export const deferredUnsafeDone = <A, E>(self: Deferred.Deferred<A, E>, effect: Effect.Effect<A, E>): void => {
3015
+ const state = MutableRef.get(self.state)
3016
+ if (state._tag === DeferredOpCodes.OP_STATE_PENDING) {
3017
+ MutableRef.set(self.state, deferred.done(effect))
3018
+ for (let i = 0, len = state.joiners.length; i < len; i++) {
3019
+ state.joiners[i](effect)
3020
+ }
3021
+ }
3022
+ }
3023
+
3024
+ const deferredInterruptJoiner = <A, E>(
3025
+ self: Deferred.Deferred<A, E>,
3026
+ joiner: (effect: Effect.Effect<A, E>) => void
3027
+ ): Effect.Effect<void> =>
3028
+ sync(() => {
3029
+ const state = MutableRef.get(self.state)
3030
+ if (state._tag === DeferredOpCodes.OP_STATE_PENDING) {
3031
+ const index = state.joiners.indexOf(joiner)
3032
+ if (index >= 0) {
3033
+ // we can splice here as the internal state is mutable
3034
+ state.joiners.splice(index, 1)
3035
+ }
3036
+ }
3037
+ })
3038
+
3039
+ // -----------------------------------------------------------------------------
3040
+ // Context
3041
+ // -----------------------------------------------------------------------------
3042
+
3043
+ const constContext = withFiberRuntime((fiber) => exitSucceed(fiber.currentContext))
3044
+
3045
+ /* @internal */
3046
+ export const context = <R>(): Effect.Effect<Context.Context<R>, never, R> => constContext as any
3047
+
3048
+ /* @internal */
3049
+ export const contextWith = <R0, A>(
3050
+ f: (context: Context.Context<R0>) => A
3051
+ ): Effect.Effect<A, never, R0> => map(context<R0>(), f)
3052
+
3053
+ /* @internal */
3054
+ export const contextWithEffect = <R2, A, E, R>(
3055
+ f: (context: Context.Context<R2>) => Effect.Effect<A, E, R>
3056
+ ): Effect.Effect<A, E, R | R2> => flatMap(context<R2>(), f)
3057
+
3058
+ /* @internal */
3059
+ export const provideContext = dual<
3060
+ <R>(context: Context.Context<R>) => <A, E>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E>,
3061
+ <A, E, R>(self: Effect.Effect<A, E, R>, context: Context.Context<R>) => Effect.Effect<A, E>
3062
+ >(2, <A, E, R>(self: Effect.Effect<A, E, R>, context: Context.Context<R>) =>
3063
+ fiberRefLocally(
3064
+ currentContext,
3065
+ context
3066
+ )(self as Effect.Effect<A, E>))
3067
+
3068
+ /* @internal */
3069
+ export const provideSomeContext = dual<
3070
+ <R>(context: Context.Context<R>) => <A, E, R1>(self: Effect.Effect<A, E, R1>) => Effect.Effect<A, E, Exclude<R1, R>>,
3071
+ <A, E, R1, R>(self: Effect.Effect<A, E, R1>, context: Context.Context<R>) => Effect.Effect<A, E, Exclude<R1, R>>
3072
+ >(2, <A, E, R1, R>(self: Effect.Effect<A, E, R1>, context: Context.Context<R>) =>
3073
+ fiberRefLocallyWith(
3074
+ currentContext,
3075
+ (parent) => Context.merge(parent, context)
3076
+ )(self as Effect.Effect<A, E>))
3077
+
3078
+ /* @internal */
3079
+ export const mapInputContext = dual<
3080
+ <R2, R>(
3081
+ f: (context: Context.Context<R2>) => Context.Context<R>
3082
+ ) => <A, E>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R2>,
3083
+ <A, E, R, R2>(
3084
+ self: Effect.Effect<A, E, R>,
3085
+ f: (context: Context.Context<R2>) => Context.Context<R>
3086
+ ) => Effect.Effect<A, E, R2>
3087
+ >(2, <A, E, R, R2>(
3088
+ self: Effect.Effect<A, E, R>,
3089
+ f: (context: Context.Context<R2>) => Context.Context<R>
3090
+ ) => contextWithEffect((context: Context.Context<R2>) => provideContext(self, f(context))))
3091
+
3092
+ // -----------------------------------------------------------------------------
3093
+ // Filtering
3094
+ // -----------------------------------------------------------------------------
3095
+
3096
+ /** @internal */
3097
+ export const filterEffectOrElse: {
3098
+ <A, E2, R2, A2, E3, R3>(
3099
+ options: {
3100
+ readonly predicate: (a: NoInfer<A>) => Effect.Effect<boolean, E2, R2>
3101
+ readonly orElse: (a: NoInfer<A>) => Effect.Effect<A2, E3, R3>
3102
+ }
3103
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | A2, E | E2 | E3, R | R2 | R3>
3104
+ <A, E, R, E2, R2, A2, E3, R3>(
3105
+ self: Effect.Effect<A, E, R>,
3106
+ options: {
3107
+ readonly predicate: (a: A) => Effect.Effect<boolean, E2, R2>
3108
+ readonly orElse: (a: A) => Effect.Effect<A2, E3, R3>
3109
+ }
3110
+ ): Effect.Effect<A | A2, E | E2 | E3, R | R2 | R3>
3111
+ } = dual(2, <A, E, R, E2, R2, A2, E3, R3>(
3112
+ self: Effect.Effect<A, E, R>,
3113
+ options: {
3114
+ readonly predicate: (a: A) => Effect.Effect<boolean, E2, R2>
3115
+ readonly orElse: (a: A) => Effect.Effect<A2, E3, R3>
3116
+ }
3117
+ ): Effect.Effect<A | A2, E | E2 | E3, R | R2 | R3> =>
3118
+ flatMap(
3119
+ self,
3120
+ (a) =>
3121
+ flatMap(
3122
+ options.predicate(a),
3123
+ (pass): Effect.Effect<A | A2, E3, R3> => pass ? succeed(a) : options.orElse(a)
3124
+ )
3125
+ ))
3126
+
3127
+ /** @internal */
3128
+ export const filterEffectOrFail: {
3129
+ <A, E2, R2, E3>(
3130
+ options: {
3131
+ readonly predicate: (a: NoInfer<A>) => Effect.Effect<boolean, E2, R2>
3132
+ readonly orFailWith: (a: NoInfer<A>) => E3
3133
+ }
3134
+ ): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2 | E3, R | R2>
3135
+ <A, E, R, E2, R2, E3>(
3136
+ self: Effect.Effect<A, E, R>,
3137
+ options: {
3138
+ readonly predicate: (a: A) => Effect.Effect<boolean, E2, R2>
3139
+ readonly orFailWith: (a: A) => E3
3140
+ }
3141
+ ): Effect.Effect<A, E | E2 | E3, R | R2>
3142
+ } = dual(2, <A, E, R, E2, R2, E3>(
3143
+ self: Effect.Effect<A, E, R>,
3144
+ options: {
3145
+ readonly predicate: (a: A) => Effect.Effect<boolean, E2, R2>
3146
+ readonly orFailWith: (a: A) => E3
3147
+ }
3148
+ ): Effect.Effect<A, E | E2 | E3, R | R2> =>
3149
+ filterEffectOrElse(self, {
3150
+ predicate: options.predicate,
3151
+ orElse: (a) => fail(options.orFailWith(a))
3152
+ }))
3153
+
3154
+ // -----------------------------------------------------------------------------
3155
+ // Tracing
3156
+ // -----------------------------------------------------------------------------
3157
+
3158
+ /** @internal */
3159
+ export const currentSpanFromFiber = <A, E>(fiber: Fiber.RuntimeFiber<A, E>): Option.Option<Tracer.Span> => {
3160
+ const span = fiber.currentSpan
3161
+ return span !== undefined && span._tag === "Span" ? Option.some(span) : Option.none()
3162
+ }
3163
+
3164
+ const NoopSpanProto: Omit<Tracer.Span, "parent" | "name" | "context"> = {
3165
+ _tag: "Span",
3166
+ spanId: "noop",
3167
+ traceId: "noop",
3168
+ sampled: false,
3169
+ status: {
3170
+ _tag: "Ended",
3171
+ startTime: BigInt(0),
3172
+ endTime: BigInt(0),
3173
+ exit: exitVoid
3174
+ },
3175
+ attributes: new Map(),
3176
+ links: [],
3177
+ kind: "internal",
3178
+ attribute() {},
3179
+ event() {},
3180
+ end() {},
3181
+ addLinks() {}
3182
+ }
3183
+
3184
+ /** @internal */
3185
+ export const noopSpan = (options: {
3186
+ readonly name: string
3187
+ readonly parent: Option.Option<Tracer.AnySpan>
3188
+ readonly context: Context.Context<never>
3189
+ }): Tracer.Span => Object.assign(Object.create(NoopSpanProto), options)