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

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,1483 @@
1
+ import type * as Arr from "../Array.js"
2
+ import * as Cause from "../Cause.js"
3
+ import * as Clock from "../Clock.js"
4
+ import * as Context from "../Context.js"
5
+ import * as Duration from "../Duration.js"
6
+ import type * as Effect from "../Effect.js"
7
+ import type * as Exit from "../Exit.js"
8
+ import type { FiberRef } from "../FiberRef.js"
9
+ import * as FiberRefsPatch from "../FiberRefsPatch.js"
10
+ import type { LazyArg } from "../Function.js"
11
+ import { constTrue, dual, pipe } from "../Function.js"
12
+ import * as HashMap from "../HashMap.js"
13
+ import type * as Layer from "../Layer.js"
14
+ import type * as ManagedRuntime from "../ManagedRuntime.js"
15
+ import { pipeArguments } from "../Pipeable.js"
16
+ import { hasProperty } from "../Predicate.js"
17
+ import type * as Runtime from "../Runtime.js"
18
+ import type * as Schedule from "../Schedule.js"
19
+ import * as ScheduleDecision from "../ScheduleDecision.js"
20
+ import * as Intervals from "../ScheduleIntervals.js"
21
+ import * as Scope from "../Scope.js"
22
+ import type * as Synchronized from "../SynchronizedRef.js"
23
+ import type * as Tracer from "../Tracer.js"
24
+ import type * as Types from "../Types.js"
25
+ import * as effect from "./core-effect.js"
26
+ import * as core from "./core.js"
27
+ import * as circular from "./effect/circular.js"
28
+ import * as ExecutionStrategy from "./executionStrategy.js"
29
+ import * as fiberRuntime from "./fiberRuntime.js"
30
+ import * as circularManagedRuntime from "./managedRuntime/circular.js"
31
+ import * as EffectOpCodes from "./opCodes/effect.js"
32
+ import * as OpCodes from "./opCodes/layer.js"
33
+ import * as ref from "./ref.js"
34
+ import * as runtime from "./runtime.js"
35
+ import * as runtimeFlags from "./runtimeFlags.js"
36
+ import * as synchronized from "./synchronizedRef.js"
37
+ import * as tracer from "./tracer.js"
38
+
39
+ /** @internal */
40
+ const LayerSymbolKey = "effect/Layer"
41
+
42
+ /** @internal */
43
+ export const LayerTypeId: Layer.LayerTypeId = Symbol.for(
44
+ LayerSymbolKey
45
+ ) as Layer.LayerTypeId
46
+
47
+ const layerVariance = {
48
+ /* c8 ignore next */
49
+ _RIn: (_: never) => _,
50
+ /* c8 ignore next */
51
+ _E: (_: never) => _,
52
+ /* c8 ignore next */
53
+ _ROut: (_: unknown) => _
54
+ }
55
+
56
+ /** @internal */
57
+ export const proto = {
58
+ [LayerTypeId]: layerVariance,
59
+ pipe() {
60
+ return pipeArguments(this, arguments)
61
+ }
62
+ }
63
+
64
+ /** @internal */
65
+ const MemoMapTypeIdKey = "effect/Layer/MemoMap"
66
+
67
+ /** @internal */
68
+ export const MemoMapTypeId: Layer.MemoMapTypeId = Symbol.for(
69
+ MemoMapTypeIdKey
70
+ ) as Layer.MemoMapTypeId
71
+
72
+ /** @internal */
73
+ export const CurrentMemoMap = Context.Reference<Layer.CurrentMemoMap>()("effect/Layer/CurrentMemoMap", {
74
+ defaultValue: () => unsafeMakeMemoMap()
75
+ })
76
+
77
+ /** @internal */
78
+ export type Primitive =
79
+ | ExtendScope
80
+ | Fold
81
+ | Fresh
82
+ | FromEffect
83
+ | Scoped
84
+ | Suspend
85
+ | Locally
86
+ | ProvideTo
87
+ | ZipWith
88
+ | ZipWithPar
89
+ | MergeAll
90
+
91
+ /** @internal */
92
+ export type Op<Tag extends string, Body = {}> = Layer.Layer<unknown, unknown, unknown> & Body & {
93
+ readonly _op_layer: Tag
94
+ }
95
+
96
+ /** @internal */
97
+ export interface ExtendScope extends
98
+ Op<OpCodes.OP_EXTEND_SCOPE, {
99
+ readonly layer: Layer.Layer<unknown>
100
+ }>
101
+ {}
102
+
103
+ /** @internal */
104
+ export interface Fold extends
105
+ Op<OpCodes.OP_FOLD, {
106
+ readonly layer: Layer.Layer<unknown>
107
+ failureK(cause: Cause.Cause<unknown>): Layer.Layer<unknown>
108
+ successK(context: Context.Context<unknown>): Layer.Layer<unknown>
109
+ }>
110
+ {}
111
+
112
+ /** @internal */
113
+ export interface Fresh extends
114
+ Op<OpCodes.OP_FRESH, {
115
+ readonly layer: Layer.Layer<unknown>
116
+ }>
117
+ {}
118
+
119
+ /** @internal */
120
+ export interface FromEffect extends
121
+ Op<OpCodes.OP_FROM_EFFECT, {
122
+ readonly effect: Effect.Effect<unknown, unknown, Context.Context<unknown>>
123
+ }>
124
+ {}
125
+
126
+ /** @internal */
127
+ export interface Scoped extends
128
+ Op<OpCodes.OP_SCOPED, {
129
+ readonly effect: Effect.Effect<unknown, unknown, Context.Context<unknown>>
130
+ }>
131
+ {}
132
+
133
+ /** @internal */
134
+ export interface Suspend extends
135
+ Op<OpCodes.OP_SUSPEND, {
136
+ evaluate(): Layer.Layer<unknown>
137
+ }>
138
+ {}
139
+
140
+ /** @internal */
141
+ export interface Locally extends
142
+ Op<"Locally", {
143
+ readonly self: Layer.Layer<unknown>
144
+ f(_: Effect.Effect<any, any, any>): Effect.Effect<any, any, any>
145
+ }>
146
+ {}
147
+
148
+ /** @internal */
149
+ export interface ProvideTo extends
150
+ Op<OpCodes.OP_PROVIDE, {
151
+ readonly first: Layer.Layer<unknown>
152
+ readonly second: Layer.Layer<unknown>
153
+ }>
154
+ {}
155
+
156
+ /** @internal */
157
+ export interface ZipWith extends
158
+ Op<OpCodes.OP_PROVIDE_MERGE, {
159
+ readonly first: Layer.Layer<unknown>
160
+ readonly second: Layer.Layer<unknown>
161
+ zipK(left: Context.Context<unknown>, right: Context.Context<unknown>): Context.Context<unknown>
162
+ }>
163
+ {}
164
+
165
+ /** @internal */
166
+ export interface ZipWithPar extends
167
+ Op<OpCodes.OP_ZIP_WITH, {
168
+ readonly first: Layer.Layer<unknown>
169
+ readonly second: Layer.Layer<unknown>
170
+ zipK(left: Context.Context<unknown>, right: Context.Context<unknown>): Context.Context<unknown>
171
+ }>
172
+ {}
173
+
174
+ /** @internal */
175
+ export interface MergeAll extends
176
+ Op<OpCodes.OP_MERGE_ALL, {
177
+ readonly layers: Arr.NonEmptyReadonlyArray<Layer.Layer<unknown>>
178
+ }>
179
+ {}
180
+
181
+ /** @internal */
182
+ export const isLayer = (u: unknown): u is Layer.Layer<unknown, unknown, unknown> => hasProperty(u, LayerTypeId)
183
+
184
+ /** @internal */
185
+ export const isFresh = <RIn, E, ROut>(self: Layer.Layer<ROut, E, RIn>): boolean => {
186
+ return (self as Primitive)._op_layer === OpCodes.OP_FRESH
187
+ }
188
+
189
+ // -----------------------------------------------------------------------------
190
+ // MemoMap
191
+ // -----------------------------------------------------------------------------
192
+
193
+ /** @internal */
194
+ class MemoMapImpl implements Layer.MemoMap {
195
+ readonly [MemoMapTypeId]: Layer.MemoMapTypeId
196
+ constructor(
197
+ readonly ref: Synchronized.SynchronizedRef<
198
+ Map<
199
+ Layer.Layer<any, any, any>,
200
+ readonly [Effect.Effect<any, any>, Scope.Scope.Finalizer]
201
+ >
202
+ >
203
+ ) {
204
+ this[MemoMapTypeId] = MemoMapTypeId
205
+ }
206
+
207
+ /**
208
+ * Checks the memo map to see if a layer exists. If it is, immediately
209
+ * returns it. Otherwise, obtains the layer, stores it in the memo map,
210
+ * and adds a finalizer to the `Scope`.
211
+ */
212
+ getOrElseMemoize<RIn, E, ROut>(
213
+ layer: Layer.Layer<ROut, E, RIn>,
214
+ scope: Scope.Scope
215
+ ): Effect.Effect<Context.Context<ROut>, E, RIn> {
216
+ return pipe(
217
+ synchronized.modifyEffect(this.ref, (map) => {
218
+ const inMap = map.get(layer)
219
+ if (inMap !== undefined) {
220
+ const [acquire, release] = inMap
221
+ const cached: Effect.Effect<Context.Context<ROut>, E> = pipe(
222
+ acquire as Effect.Effect<readonly [FiberRefsPatch.FiberRefsPatch, Context.Context<ROut>], E>,
223
+ core.flatMap(([patch, b]) => pipe(effect.patchFiberRefs(patch), core.as(b))),
224
+ core.onExit(core.exitMatch({
225
+ onFailure: () => core.void,
226
+ onSuccess: () => core.scopeAddFinalizerExit(scope, release)
227
+ }))
228
+ )
229
+ return core.succeed([cached, map] as const)
230
+ }
231
+ return pipe(
232
+ ref.make(0),
233
+ core.flatMap((observers) =>
234
+ pipe(
235
+ core.deferredMake<readonly [FiberRefsPatch.FiberRefsPatch, Context.Context<ROut>], E>(),
236
+ core.flatMap((deferred) =>
237
+ pipe(
238
+ ref.make<Scope.Scope.Finalizer>(() => core.void),
239
+ core.map((finalizerRef) => {
240
+ const resource = core.uninterruptibleMask((restore) =>
241
+ pipe(
242
+ fiberRuntime.scopeMake(),
243
+ core.flatMap((innerScope) =>
244
+ pipe(
245
+ restore(core.flatMap(
246
+ makeBuilder(layer, innerScope, true),
247
+ (f) => effect.diffFiberRefs(f(this))
248
+ )),
249
+ core.exit,
250
+ core.flatMap((exit) => {
251
+ switch (exit._tag) {
252
+ case EffectOpCodes.OP_FAILURE: {
253
+ return pipe(
254
+ core.deferredFailCause(deferred, exit.effect_instruction_i0),
255
+ core.zipRight(core.scopeClose(innerScope, exit)),
256
+ core.zipRight(core.failCause(exit.effect_instruction_i0))
257
+ )
258
+ }
259
+ case EffectOpCodes.OP_SUCCESS: {
260
+ return pipe(
261
+ ref.set(finalizerRef, (exit) =>
262
+ pipe(
263
+ core.scopeClose(innerScope, exit),
264
+ core.whenEffect(
265
+ ref.modify(observers, (n) => [n === 1, n - 1] as const)
266
+ ),
267
+ core.asVoid
268
+ )),
269
+ core.zipRight(ref.update(observers, (n) => n + 1)),
270
+ core.zipRight(
271
+ core.scopeAddFinalizerExit(scope, (exit) =>
272
+ pipe(
273
+ core.sync(() => map.delete(layer)),
274
+ core.zipRight(ref.get(finalizerRef)),
275
+ core.flatMap((finalizer) => finalizer(exit))
276
+ ))
277
+ ),
278
+ core.zipRight(core.deferredSucceed(deferred, exit.effect_instruction_i0)),
279
+ core.as(exit.effect_instruction_i0[1])
280
+ )
281
+ }
282
+ }
283
+ })
284
+ )
285
+ )
286
+ )
287
+ )
288
+ const memoized = [
289
+ pipe(
290
+ core.deferredAwait(deferred),
291
+ core.onExit(core.exitMatchEffect({
292
+ onFailure: () => core.void,
293
+ onSuccess: () => ref.update(observers, (n) => n + 1)
294
+ }))
295
+ ),
296
+ (exit: Exit.Exit<unknown, unknown>) =>
297
+ pipe(
298
+ ref.get(finalizerRef),
299
+ core.flatMap((finalizer) => finalizer(exit))
300
+ )
301
+ ] as const
302
+ return [
303
+ resource,
304
+ isFresh(layer) ? map : map.set(layer, memoized)
305
+ ] as const
306
+ })
307
+ )
308
+ )
309
+ )
310
+ )
311
+ )
312
+ }),
313
+ core.flatten
314
+ )
315
+ }
316
+ }
317
+
318
+ /** @internal */
319
+ export const makeMemoMap: Effect.Effect<Layer.MemoMap> = core.suspend(() =>
320
+ core.map(
321
+ circular.makeSynchronized<
322
+ Map<
323
+ Layer.Layer<any, any, any>,
324
+ readonly [
325
+ Effect.Effect<any, any>,
326
+ Scope.Scope.Finalizer
327
+ ]
328
+ >
329
+ >(new Map()),
330
+ (ref) => new MemoMapImpl(ref)
331
+ )
332
+ )
333
+
334
+ /** @internal */
335
+ export const unsafeMakeMemoMap = (): Layer.MemoMap => new MemoMapImpl(circular.unsafeMakeSynchronized(new Map()))
336
+
337
+ /** @internal */
338
+ export const build = <RIn, E, ROut>(
339
+ self: Layer.Layer<ROut, E, RIn>
340
+ ): Effect.Effect<Context.Context<ROut>, E, RIn | Scope.Scope> =>
341
+ fiberRuntime.scopeWith((scope) => buildWithScope(self, scope))
342
+
343
+ /** @internal */
344
+ export const buildWithScope = dual<
345
+ (
346
+ scope: Scope.Scope
347
+ ) => <RIn, E, ROut>(self: Layer.Layer<ROut, E, RIn>) => Effect.Effect<Context.Context<ROut>, E, RIn>,
348
+ <RIn, E, ROut>(
349
+ self: Layer.Layer<ROut, E, RIn>,
350
+ scope: Scope.Scope
351
+ ) => Effect.Effect<Context.Context<ROut>, E, RIn>
352
+ >(2, (self, scope) =>
353
+ core.flatMap(
354
+ makeMemoMap,
355
+ (memoMap) => buildWithMemoMap(self, memoMap, scope)
356
+ ))
357
+
358
+ /** @internal */
359
+ export const buildWithMemoMap = dual<
360
+ (
361
+ memoMap: Layer.MemoMap,
362
+ scope: Scope.Scope
363
+ ) => <RIn, E, ROut>(self: Layer.Layer<ROut, E, RIn>) => Effect.Effect<Context.Context<ROut>, E, RIn>,
364
+ <RIn, E, ROut>(
365
+ self: Layer.Layer<ROut, E, RIn>,
366
+ memoMap: Layer.MemoMap,
367
+ scope: Scope.Scope
368
+ ) => Effect.Effect<Context.Context<ROut>, E, RIn>
369
+ >(
370
+ 3,
371
+ (self, memoMap, scope) =>
372
+ core.flatMap(
373
+ makeBuilder(self, scope),
374
+ (run) => effect.provideService(run(memoMap), CurrentMemoMap, memoMap)
375
+ )
376
+ )
377
+
378
+ const makeBuilder = <RIn, E, ROut>(
379
+ self: Layer.Layer<ROut, E, RIn>,
380
+ scope: Scope.Scope,
381
+ inMemoMap = false
382
+ ): Effect.Effect<(memoMap: Layer.MemoMap) => Effect.Effect<Context.Context<ROut>, E, RIn>> => {
383
+ const op = self as Primitive
384
+ switch (op._op_layer) {
385
+ case "Locally": {
386
+ return core.sync(() => (memoMap: Layer.MemoMap) => op.f(memoMap.getOrElseMemoize(op.self, scope)))
387
+ }
388
+ case "ExtendScope": {
389
+ return core.sync(() => (memoMap: Layer.MemoMap) =>
390
+ fiberRuntime.scopeWith(
391
+ (scope) => memoMap.getOrElseMemoize(op.layer, scope)
392
+ ) as unknown as Effect.Effect<Context.Context<ROut>, E, RIn>
393
+ )
394
+ }
395
+ case "Fold": {
396
+ return core.sync(() => (memoMap: Layer.MemoMap) =>
397
+ pipe(
398
+ memoMap.getOrElseMemoize(op.layer, scope),
399
+ core.matchCauseEffect({
400
+ onFailure: (cause) => memoMap.getOrElseMemoize(op.failureK(cause), scope),
401
+ onSuccess: (value) => memoMap.getOrElseMemoize(op.successK(value), scope)
402
+ })
403
+ )
404
+ )
405
+ }
406
+ case "Fresh": {
407
+ return core.sync(() => (_: Layer.MemoMap) => pipe(op.layer, buildWithScope(scope)))
408
+ }
409
+ case "FromEffect": {
410
+ return inMemoMap
411
+ ? core.sync(() => (_: Layer.MemoMap) => op.effect as Effect.Effect<Context.Context<ROut>, E, RIn>)
412
+ : core.sync(() => (memoMap: Layer.MemoMap) => memoMap.getOrElseMemoize(self, scope))
413
+ }
414
+ case "Provide": {
415
+ return core.sync(() => (memoMap: Layer.MemoMap) =>
416
+ pipe(
417
+ memoMap.getOrElseMemoize(op.first, scope),
418
+ core.flatMap((env) =>
419
+ pipe(
420
+ memoMap.getOrElseMemoize(op.second, scope),
421
+ core.provideContext(env)
422
+ )
423
+ )
424
+ )
425
+ )
426
+ }
427
+ case "Scoped": {
428
+ return inMemoMap
429
+ ? core.sync(() => (_: Layer.MemoMap) =>
430
+ fiberRuntime.scopeExtend(
431
+ op.effect as Effect.Effect<Context.Context<ROut>, E, RIn>,
432
+ scope
433
+ )
434
+ )
435
+ : core.sync(() => (memoMap: Layer.MemoMap) => memoMap.getOrElseMemoize(self, scope))
436
+ }
437
+ case "Suspend": {
438
+ return core.sync(() => (memoMap: Layer.MemoMap) =>
439
+ memoMap.getOrElseMemoize(
440
+ op.evaluate(),
441
+ scope
442
+ )
443
+ )
444
+ }
445
+ case "ProvideMerge": {
446
+ return core.sync(() => (memoMap: Layer.MemoMap) =>
447
+ pipe(
448
+ memoMap.getOrElseMemoize(op.first, scope),
449
+ core.zipWith(
450
+ memoMap.getOrElseMemoize(op.second, scope),
451
+ op.zipK
452
+ )
453
+ )
454
+ )
455
+ }
456
+ case "ZipWith": {
457
+ return core.gen(function*() {
458
+ const parallelScope = yield* core.scopeFork(scope, ExecutionStrategy.parallel)
459
+ const firstScope = yield* core.scopeFork(parallelScope, ExecutionStrategy.sequential)
460
+ const secondScope = yield* core.scopeFork(parallelScope, ExecutionStrategy.sequential)
461
+ return (memoMap: Layer.MemoMap) =>
462
+ pipe(
463
+ memoMap.getOrElseMemoize(op.first, firstScope),
464
+ fiberRuntime.zipWithOptions(
465
+ memoMap.getOrElseMemoize(op.second, secondScope),
466
+ op.zipK,
467
+ { concurrent: true }
468
+ )
469
+ )
470
+ })
471
+ }
472
+ case "MergeAll": {
473
+ const layers = op.layers
474
+ return core.map(
475
+ core.scopeFork(scope, ExecutionStrategy.parallel),
476
+ (parallelScope) => (memoMap: Layer.MemoMap) => {
477
+ const contexts = new Array<Context.Context<any>>(layers.length)
478
+ return core.map(
479
+ fiberRuntime.forEachConcurrentDiscard(
480
+ layers,
481
+ core.fnUntraced(function*(layer, i) {
482
+ const scope = yield* core.scopeFork(parallelScope, ExecutionStrategy.sequential)
483
+ const context = yield* memoMap.getOrElseMemoize(layer, scope)
484
+ contexts[i] = context
485
+ }),
486
+ false,
487
+ false
488
+ ),
489
+ () => Context.mergeAll(...contexts)
490
+ )
491
+ }
492
+ )
493
+ }
494
+ }
495
+ }
496
+
497
+ // -----------------------------------------------------------------------------
498
+ // Layer
499
+ // -----------------------------------------------------------------------------
500
+
501
+ /** @internal */
502
+ export const catchAll = dual<
503
+ <E, RIn2, E2, ROut2>(
504
+ onError: (error: E) => Layer.Layer<ROut2, E2, RIn2>
505
+ ) => <RIn, ROut>(self: Layer.Layer<ROut, E, RIn>) => Layer.Layer<ROut & ROut2, E2, RIn | RIn2>,
506
+ <RIn, E, ROut, RIn2, E2, ROut2>(
507
+ self: Layer.Layer<ROut, E, RIn>,
508
+ onError: (error: E) => Layer.Layer<ROut2, E2, RIn2>
509
+ ) => Layer.Layer<ROut & ROut2, E2, RIn | RIn2>
510
+ >(2, (self, onFailure) => match(self, { onFailure, onSuccess: succeedContext }))
511
+
512
+ /** @internal */
513
+ export const catchAllCause = dual<
514
+ <E, RIn2, E2, ROut2>(
515
+ onError: (cause: Cause.Cause<E>) => Layer.Layer<ROut2, E2, RIn2>
516
+ ) => <RIn, ROut>(self: Layer.Layer<ROut, E, RIn>) => Layer.Layer<ROut & ROut2, E2, RIn | RIn2>,
517
+ <RIn, E, ROut, RIn2, E2, ROut22>(
518
+ self: Layer.Layer<ROut, E, RIn>,
519
+ onError: (cause: Cause.Cause<E>) => Layer.Layer<ROut22, E2, RIn2>
520
+ ) => Layer.Layer<ROut & ROut22, E2, RIn | RIn2>
521
+ >(2, (self, onFailure) => matchCause(self, { onFailure, onSuccess: succeedContext }))
522
+
523
+ /** @internal */
524
+ export const die = (defect: unknown): Layer.Layer<unknown> => failCause(Cause.die(defect))
525
+
526
+ /** @internal */
527
+ export const dieSync = (evaluate: LazyArg<unknown>): Layer.Layer<unknown> => failCauseSync(() => Cause.die(evaluate()))
528
+
529
+ /** @internal */
530
+ export const discard = <RIn, E, ROut>(self: Layer.Layer<ROut, E, RIn>): Layer.Layer<never, E, RIn> =>
531
+ map(self, () => Context.empty())
532
+
533
+ /** @internal */
534
+ export const context = <R>(): Layer.Layer<R, never, R> => fromEffectContext(core.context<R>())
535
+
536
+ /** @internal */
537
+ export const extendScope = <RIn, E, ROut>(
538
+ self: Layer.Layer<ROut, E, RIn>
539
+ ): Layer.Layer<ROut, E, RIn | Scope.Scope> => {
540
+ const extendScope = Object.create(proto)
541
+ extendScope._op_layer = OpCodes.OP_EXTEND_SCOPE
542
+ extendScope.layer = self
543
+ return extendScope
544
+ }
545
+
546
+ /** @internal */
547
+ export const fail = <E>(error: E): Layer.Layer<unknown, E> => failCause(Cause.fail(error))
548
+
549
+ /** @internal */
550
+ export const failSync = <E>(evaluate: LazyArg<E>): Layer.Layer<unknown, E> =>
551
+ failCauseSync(() => Cause.fail(evaluate()))
552
+
553
+ /** @internal */
554
+ export const failCause = <E>(cause: Cause.Cause<E>): Layer.Layer<unknown, E> => fromEffectContext(core.failCause(cause))
555
+
556
+ /** @internal */
557
+ export const failCauseSync = <E>(evaluate: LazyArg<Cause.Cause<E>>): Layer.Layer<unknown, E> =>
558
+ fromEffectContext(core.failCauseSync(evaluate))
559
+
560
+ /** @internal */
561
+ export const flatMap = dual<
562
+ <A, A2, E2, R2>(
563
+ f: (context: Context.Context<A>) => Layer.Layer<A2, E2, R2>
564
+ ) => <E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A2, E | E2, R | R2>,
565
+ <A, E, R, A2, E2, R2>(
566
+ self: Layer.Layer<A, E, R>,
567
+ f: (context: Context.Context<A>) => Layer.Layer<A2, E2, R2>
568
+ ) => Layer.Layer<A2, E | E2, R | R2>
569
+ >(2, (self, f) => match(self, { onFailure: fail, onSuccess: f }))
570
+
571
+ /** @internal */
572
+ export const flatten = dual<
573
+ <I, A, E2, R2>(
574
+ tag: Context.Tag<I, Layer.Layer<A, E2, R2>>
575
+ ) => <E, R>(
576
+ self: Layer.Layer<I, E, R>
577
+ ) => Layer.Layer<A, E | E2, R | R2>,
578
+ <I, E, R, A, E2, R2>(
579
+ self: Layer.Layer<I, E, R>,
580
+ tag: Context.Tag<I, Layer.Layer<A, E2, R2>>
581
+ ) => Layer.Layer<A, E | E2, R | R2>
582
+ >(2, (self, tag) => flatMap(self, Context.get(tag as any) as any))
583
+
584
+ /** @internal */
585
+ export const fresh = <A, E, R>(self: Layer.Layer<A, E, R>): Layer.Layer<A, E, R> => {
586
+ const fresh = Object.create(proto)
587
+ fresh._op_layer = OpCodes.OP_FRESH
588
+ fresh.layer = self
589
+ return fresh
590
+ }
591
+
592
+ /** @internal */
593
+ export const fromEffect = dual<
594
+ <I, S>(
595
+ tag: Context.Tag<I, S>
596
+ ) => <E, R>(
597
+ effect: Effect.Effect<Types.NoInfer<S>, E, R>
598
+ ) => Layer.Layer<I, E, R>,
599
+ <I, S, E, R>(
600
+ tag: Context.Tag<I, S>,
601
+ effect: Effect.Effect<Types.NoInfer<S>, E, R>
602
+ ) => Layer.Layer<I, E, R>
603
+ >(2, (a, b) => {
604
+ const tagFirst = Context.isTag(a)
605
+ const tag = (tagFirst ? a : b) as Context.Tag<unknown, unknown>
606
+ const effect = tagFirst ? b : a
607
+ return fromEffectContext(core.map(effect, (service) => Context.make(tag, service)))
608
+ })
609
+
610
+ /** @internal */
611
+ export const fromEffectDiscard = <X, E, R>(effect: Effect.Effect<X, E, R>) =>
612
+ fromEffectContext(core.map(effect, () => Context.empty()))
613
+
614
+ /** @internal */
615
+ export function fromEffectContext<A, E, R>(
616
+ effect: Effect.Effect<Context.Context<A>, E, R>
617
+ ): Layer.Layer<A, E, R> {
618
+ const fromEffect = Object.create(proto)
619
+ fromEffect._op_layer = OpCodes.OP_FROM_EFFECT
620
+ fromEffect.effect = effect
621
+ return fromEffect
622
+ }
623
+
624
+ /** @internal */
625
+ export const fiberRefLocally = dual<
626
+ <X>(ref: FiberRef<X>, value: X) => <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, R>,
627
+ <A, E, R, X>(self: Layer.Layer<A, E, R>, ref: FiberRef<X>, value: X) => Layer.Layer<A, E, R>
628
+ >(3, (self, ref, value) => locallyEffect(self, core.fiberRefLocally(ref, value)))
629
+
630
+ /** @internal */
631
+ export const locallyEffect = dual<
632
+ <RIn, E, ROut, RIn2, E2, ROut2>(
633
+ f: (_: Effect.Effect<RIn, E, Context.Context<ROut>>) => Effect.Effect<RIn2, E2, Context.Context<ROut2>>
634
+ ) => (self: Layer.Layer<ROut, E, RIn>) => Layer.Layer<ROut2, E2, RIn2>,
635
+ <RIn, E, ROut, RIn2, E2, ROut2>(
636
+ self: Layer.Layer<ROut, E, RIn>,
637
+ f: (_: Effect.Effect<RIn, E, Context.Context<ROut>>) => Effect.Effect<RIn2, E2, Context.Context<ROut2>>
638
+ ) => Layer.Layer<ROut2, E2, RIn2>
639
+ >(2, (self, f) => {
640
+ const locally = Object.create(proto)
641
+ locally._op_layer = "Locally"
642
+ locally.self = self
643
+ locally.f = f
644
+ return locally
645
+ })
646
+
647
+ /** @internal */
648
+ export const fiberRefLocallyWith = dual<
649
+ <X>(ref: FiberRef<X>, value: (_: X) => X) => <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, R>,
650
+ <A, E, R, X>(self: Layer.Layer<A, E, R>, ref: FiberRef<X>, value: (_: X) => X) => Layer.Layer<A, E, R>
651
+ >(3, (self, ref, value) => locallyEffect(self, core.fiberRefLocallyWith(ref, value)))
652
+
653
+ /** @internal */
654
+ export const fiberRefLocallyScoped = <A>(self: FiberRef<A>, value: A): Layer.Layer<never> =>
655
+ scopedDiscard(fiberRuntime.fiberRefLocallyScoped(self, value))
656
+
657
+ /** @internal */
658
+ export const fiberRefLocallyScopedWith = <A>(self: FiberRef<A>, value: (_: A) => A): Layer.Layer<never> =>
659
+ scopedDiscard(fiberRuntime.fiberRefLocallyScopedWith(self, value))
660
+
661
+ /** @internal */
662
+ export const fromFunction = <I1, S1, I2, S2>(
663
+ tagA: Context.Tag<I1, S1>,
664
+ tagB: Context.Tag<I2, S2>,
665
+ f: (a: Types.NoInfer<S1>) => Types.NoInfer<S2>
666
+ ): Layer.Layer<I2, never, I1> => fromEffectContext(core.map(tagA, (a) => Context.make(tagB, f(a))))
667
+
668
+ /** @internal */
669
+ export const launch = <RIn, E, ROut>(self: Layer.Layer<ROut, E, RIn>): Effect.Effect<never, E, RIn> =>
670
+ fiberRuntime.scopedEffect(
671
+ core.zipRight(
672
+ fiberRuntime.scopeWith((scope) => pipe(self, buildWithScope(scope))),
673
+ core.never
674
+ )
675
+ )
676
+
677
+ /** @internal */
678
+ export const mock: {
679
+ <I, S extends object>(tag: Context.Tag<I, S>): (service: Layer.PartialEffectful<S>) => Layer.Layer<I>
680
+ <I, S extends object>(tag: Context.Tag<I, S>, service: Layer.PartialEffectful<S>): Layer.Layer<I>
681
+ } = function() {
682
+ if (arguments.length === 1) {
683
+ return (service: Layer.PartialEffectful<any>) => mockImpl(arguments[0], service)
684
+ }
685
+ return mockImpl(arguments[0], arguments[1])
686
+ } as any
687
+
688
+ const mockImpl = <I, S extends object>(tag: Context.Tag<I, S>, service: Layer.PartialEffectful<S>): Layer.Layer<I> =>
689
+ succeed(
690
+ tag,
691
+ new Proxy({ ...service as object } as S, {
692
+ get(target, prop, _receiver) {
693
+ if (prop in target) {
694
+ return target[prop as keyof S]
695
+ }
696
+ const prevLimit = Error.stackTraceLimit
697
+ Error.stackTraceLimit = 2
698
+ const error = new Error(`${tag.key}: Unimplemented method "${prop.toString()}"`)
699
+ Error.stackTraceLimit = prevLimit
700
+ error.name = "UnimplementedError"
701
+ return makeUnimplemented(error)
702
+ },
703
+ has: constTrue
704
+ })
705
+ )
706
+
707
+ const makeUnimplemented = (error: Error) => {
708
+ const dead = core.die(error)
709
+ function unimplemented() {
710
+ return dead
711
+ }
712
+ // @effect-diagnostics-next-line floatingEffect:off
713
+ Object.assign(unimplemented, dead)
714
+ Object.setPrototypeOf(unimplemented, Object.getPrototypeOf(dead))
715
+ return unimplemented
716
+ }
717
+
718
+ /** @internal */
719
+ export const map = dual<
720
+ <A, B>(
721
+ f: (context: Context.Context<A>) => Context.Context<B>
722
+ ) => <E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<B, E, R>,
723
+ <A, E, R, B>(
724
+ self: Layer.Layer<A, E, R>,
725
+ f: (context: Context.Context<A>) => Context.Context<B>
726
+ ) => Layer.Layer<B, E, R>
727
+ >(2, (self, f) => flatMap(self, (context) => succeedContext(f(context))))
728
+
729
+ /** @internal */
730
+ export const mapError = dual<
731
+ <E, E2>(f: (error: E) => E2) => <A, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E2, R>,
732
+ <A, E, R, E2>(self: Layer.Layer<A, E, R>, f: (error: E) => E2) => Layer.Layer<A, E2, R>
733
+ >(2, (self, f) => catchAll(self, (error) => failSync(() => f(error))))
734
+
735
+ /** @internal */
736
+ export const matchCause = dual<
737
+ <E, A2, E2, R2, A, A3, E3, R3>(
738
+ options: {
739
+ readonly onFailure: (cause: Cause.Cause<E>) => Layer.Layer<A2, E2, R2>
740
+ readonly onSuccess: (context: Context.Context<A>) => Layer.Layer<A3, E3, R3>
741
+ }
742
+ ) => <R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A2 & A3, E2 | E3, R | R2 | R3>,
743
+ <A, E, R, A2, E2, R2, A3, E3, R3>(
744
+ self: Layer.Layer<A, E, R>,
745
+ options: {
746
+ readonly onFailure: (cause: Cause.Cause<E>) => Layer.Layer<A2, E2, R2>
747
+ readonly onSuccess: (context: Context.Context<A>) => Layer.Layer<A3, E3, R3>
748
+ }
749
+ ) => Layer.Layer<A2 & A3, E2 | E3, R | R2 | R3>
750
+ >(2, (self, { onFailure, onSuccess }) => {
751
+ const fold = Object.create(proto)
752
+ fold._op_layer = OpCodes.OP_FOLD
753
+ fold.layer = self
754
+ fold.failureK = onFailure
755
+ fold.successK = onSuccess
756
+ return fold
757
+ })
758
+
759
+ /** @internal */
760
+ export const match = dual<
761
+ <E, A2, E2, R2, A, A3, E3, R3>(
762
+ options: {
763
+ readonly onFailure: (error: E) => Layer.Layer<A2, E2, R2>
764
+ readonly onSuccess: (context: Context.Context<A>) => Layer.Layer<A3, E3, R3>
765
+ }
766
+ ) => <R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A2 & A3, E2 | E3, R | R2 | R3>,
767
+ <A, E, R, A2, E2, R2, A3, E3, R3>(
768
+ self: Layer.Layer<A, E, R>,
769
+ options: {
770
+ readonly onFailure: (error: E) => Layer.Layer<A2, E2, R2>
771
+ readonly onSuccess: (context: Context.Context<A>) => Layer.Layer<A3, E3, R3>
772
+ }
773
+ ) => Layer.Layer<A2 & A3, E2 | E3, R | R2 | R3>
774
+ >(2, (self, { onFailure, onSuccess }) =>
775
+ matchCause(self, {
776
+ onFailure: (cause) => {
777
+ const failureOrCause = Cause.failureOrCause(cause)
778
+ switch (failureOrCause._tag) {
779
+ case "Left": {
780
+ return onFailure(failureOrCause.left)
781
+ }
782
+ case "Right": {
783
+ return failCause(failureOrCause.right)
784
+ }
785
+ }
786
+ },
787
+ onSuccess
788
+ }))
789
+
790
+ /** @internal */
791
+ export const memoize = <RIn, E, ROut>(
792
+ self: Layer.Layer<ROut, E, RIn>
793
+ ): Effect.Effect<Layer.Layer<ROut, E, RIn>, never, Scope.Scope> =>
794
+ fiberRuntime.scopeWith((scope) =>
795
+ core.map(
796
+ effect.memoize(buildWithScope(self, scope)),
797
+ fromEffectContext
798
+ )
799
+ )
800
+
801
+ /** @internal */
802
+ export const merge = dual<
803
+ <RIn2, E2, ROut2>(
804
+ that: Layer.Layer<ROut2, E2, RIn2>
805
+ ) => <RIn, E1, ROut>(self: Layer.Layer<ROut, E1, RIn>) => Layer.Layer<
806
+ ROut | ROut2,
807
+ E1 | E2,
808
+ RIn | RIn2
809
+ >,
810
+ <RIn, E1, ROut, RIn2, E2, ROut2>(self: Layer.Layer<ROut, E1, RIn>, that: Layer.Layer<ROut2, E2, RIn2>) => Layer.Layer<
811
+ ROut | ROut2,
812
+ E1 | E2,
813
+ RIn | RIn2
814
+ >
815
+ >(2, (self, that) => zipWith(self, that, (a, b) => Context.merge(a, b)))
816
+
817
+ /** @internal */
818
+ export const mergeAll = <
819
+ Layers extends readonly [Layer.Layer<never, any, any>, ...Array<Layer.Layer<never, any, any>>]
820
+ >(
821
+ ...layers: Layers
822
+ ): Layer.Layer<
823
+ { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number],
824
+ { [k in keyof Layers]: Layer.Layer.Error<Layers[k]> }[number],
825
+ { [k in keyof Layers]: Layer.Layer.Context<Layers[k]> }[number]
826
+ > => {
827
+ const mergeAll = Object.create(proto)
828
+ mergeAll._op_layer = OpCodes.OP_MERGE_ALL
829
+ mergeAll.layers = layers
830
+ return mergeAll as any
831
+ }
832
+
833
+ /** @internal */
834
+ export const orDie = <A, E, R>(self: Layer.Layer<A, E, R>): Layer.Layer<A, never, R> =>
835
+ catchAll(self, (defect) => die(defect))
836
+
837
+ /** @internal */
838
+ export const orElse = dual<
839
+ <A2, E2, R2>(
840
+ that: LazyArg<Layer.Layer<A2, E2, R2>>
841
+ ) => <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A & A2, E | E2, R | R2>,
842
+ <A, E, R, A2, E2, R2>(
843
+ self: Layer.Layer<A, E, R>,
844
+ that: LazyArg<Layer.Layer<A2, E2, R2>>
845
+ ) => Layer.Layer<A & A2, E | E2, R | R2>
846
+ >(2, (self, that) => catchAll(self, that))
847
+
848
+ /** @internal */
849
+ export const passthrough = <RIn, E, ROut>(self: Layer.Layer<ROut, E, RIn>): Layer.Layer<RIn | ROut, E, RIn> =>
850
+ merge(context<RIn>(), self)
851
+
852
+ /** @internal */
853
+ export const project = dual<
854
+ <I1, S1, I2, S2>(
855
+ tagA: Context.Tag<I1, S1>,
856
+ tagB: Context.Tag<I2, S2>,
857
+ f: (a: Types.NoInfer<S1>) => Types.NoInfer<S2>
858
+ ) => <RIn, E>(self: Layer.Layer<I1, E, RIn>) => Layer.Layer<I2, E, RIn>,
859
+ <RIn, E, I1, S1, I2, S2>(
860
+ self: Layer.Layer<I1, E, RIn>,
861
+ tagA: Context.Tag<I1, S1>,
862
+ tagB: Context.Tag<I2, S2>,
863
+ f: (a: Types.NoInfer<S1>) => Types.NoInfer<S2>
864
+ ) => Layer.Layer<I2, E, RIn>
865
+ >(4, (self, tagA, tagB, f) => map(self, (context) => Context.make(tagB, f(Context.unsafeGet(context, tagA)))))
866
+
867
+ /** @internal */
868
+ export const retry = dual<
869
+ <X, E, RIn2>(
870
+ schedule: Schedule.Schedule<X, E, RIn2>
871
+ ) => <ROut, RIn>(
872
+ self: Layer.Layer<ROut, E, RIn>
873
+ ) => Layer.Layer<ROut, E, RIn | RIn2>,
874
+ <ROut, E, RIn, X, RIn2>(
875
+ self: Layer.Layer<ROut, E, RIn>,
876
+ schedule: Schedule.Schedule<X, E, RIn2>
877
+ ) => Layer.Layer<ROut, E, RIn | RIn2>
878
+ >(2, (self, schedule) =>
879
+ suspend(() => {
880
+ const stateTag = Context.GenericTag<{ state: unknown }>("effect/Layer/retry/{ state: unknown }")
881
+ return pipe(
882
+ succeed(stateTag, { state: schedule.initial }),
883
+ flatMap((env: Context.Context<{ state: unknown }>) =>
884
+ retryLoop(self, schedule, stateTag, pipe(env, Context.get(stateTag)).state)
885
+ )
886
+ )
887
+ }))
888
+
889
+ const retryLoop = <ROut, E, RIn, X, RIn2>(
890
+ self: Layer.Layer<ROut, E, RIn>,
891
+ schedule: Schedule.Schedule<X, E, RIn2>,
892
+ stateTag: Context.Tag<{ state: unknown }, { state: unknown }>,
893
+ state: unknown
894
+ ): Layer.Layer<ROut, E, RIn | RIn2> => {
895
+ return pipe(
896
+ self,
897
+ catchAll((error) =>
898
+ pipe(
899
+ retryUpdate(schedule, stateTag, error, state),
900
+ flatMap((env) => fresh(retryLoop(self, schedule, stateTag, pipe(env, Context.get(stateTag)).state)))
901
+ )
902
+ )
903
+ )
904
+ }
905
+
906
+ const retryUpdate = <X, E, RIn>(
907
+ schedule: Schedule.Schedule<X, E, RIn>,
908
+ stateTag: Context.Tag<{ state: unknown }, { state: unknown }>,
909
+ error: E,
910
+ state: unknown
911
+ ): Layer.Layer<{ state: unknown }, E, RIn> => {
912
+ return fromEffect(
913
+ stateTag,
914
+ pipe(
915
+ Clock.currentTimeMillis,
916
+ core.flatMap((now) =>
917
+ pipe(
918
+ schedule.step(now, error, state),
919
+ core.flatMap(([state, _, decision]) =>
920
+ ScheduleDecision.isDone(decision) ?
921
+ core.fail(error) :
922
+ pipe(
923
+ Clock.sleep(Duration.millis(Intervals.start(decision.intervals) - now)),
924
+ core.as({ state })
925
+ )
926
+ )
927
+ )
928
+ )
929
+ )
930
+ )
931
+ }
932
+
933
+ /** @internal */
934
+ export const scoped = dual<
935
+ <I, S>(
936
+ tag: Context.Tag<I, S>
937
+ ) => <E, R>(
938
+ effect: Effect.Effect<Types.NoInfer<S>, E, R>
939
+ ) => Layer.Layer<I, E, Exclude<R, Scope.Scope>>,
940
+ <I, S, E, R>(
941
+ tag: Context.Tag<I, S>,
942
+ effect: Effect.Effect<Types.NoInfer<S>, E, R>
943
+ ) => Layer.Layer<I, E, Exclude<R, Scope.Scope>>
944
+ >(2, (a, b) => {
945
+ const tagFirst = Context.isTag(a)
946
+ const tag = (tagFirst ? a : b) as Context.Tag<unknown, unknown>
947
+ const effect = tagFirst ? b : a
948
+ return scopedContext(core.map(effect, (service) => Context.make(tag, service)))
949
+ })
950
+
951
+ /** @internal */
952
+ export const scopedDiscard = <X, E, R>(
953
+ effect: Effect.Effect<X, E, R>
954
+ ): Layer.Layer<never, E, Exclude<R, Scope.Scope>> => scopedContext(pipe(effect, core.as(Context.empty())))
955
+
956
+ /** @internal */
957
+ export const scopedContext = <A, E, R>(
958
+ effect: Effect.Effect<Context.Context<A>, E, R>
959
+ ): Layer.Layer<A, E, Exclude<R, Scope.Scope>> => {
960
+ const scoped = Object.create(proto)
961
+ scoped._op_layer = OpCodes.OP_SCOPED
962
+ scoped.effect = effect
963
+ return scoped
964
+ }
965
+
966
+ /** @internal */
967
+ export const scope: Layer.Layer<Scope.Scope> = scopedContext(
968
+ core.map(
969
+ fiberRuntime.acquireRelease(
970
+ fiberRuntime.scopeMake(),
971
+ (scope, exit) => scope.close(exit)
972
+ ),
973
+ (scope) => Context.make(Scope.Scope, scope)
974
+ )
975
+ )
976
+
977
+ /** @internal */
978
+ export const service = <I, S>(
979
+ tag: Context.Tag<I, S>
980
+ ): Layer.Layer<I, never, I> => fromEffect(tag, tag)
981
+
982
+ /** @internal */
983
+ export const succeed = dual<
984
+ <I, S>(
985
+ tag: Context.Tag<I, S>
986
+ ) => (
987
+ resource: Types.NoInfer<S>
988
+ ) => Layer.Layer<I>,
989
+ <I, S>(
990
+ tag: Context.Tag<I, S>,
991
+ resource: Types.NoInfer<S>
992
+ ) => Layer.Layer<I>
993
+ >(2, (a, b) => {
994
+ const tagFirst = Context.isTag(a)
995
+ const tag = (tagFirst ? a : b) as Context.Tag<unknown, unknown>
996
+ const resource = tagFirst ? b : a
997
+ return fromEffectContext(core.succeed(Context.make(tag, resource)))
998
+ })
999
+
1000
+ /** @internal */
1001
+ export const succeedContext = <A>(
1002
+ context: Context.Context<A>
1003
+ ): Layer.Layer<A> => {
1004
+ return fromEffectContext(core.succeed(context))
1005
+ }
1006
+
1007
+ /** @internal */
1008
+ export const empty = succeedContext(Context.empty())
1009
+
1010
+ /** @internal */
1011
+ export const suspend = <RIn, E, ROut>(
1012
+ evaluate: LazyArg<Layer.Layer<ROut, E, RIn>>
1013
+ ): Layer.Layer<ROut, E, RIn> => {
1014
+ const suspend = Object.create(proto)
1015
+ suspend._op_layer = OpCodes.OP_SUSPEND
1016
+ suspend.evaluate = evaluate
1017
+ return suspend
1018
+ }
1019
+
1020
+ /** @internal */
1021
+ export const sync = dual<
1022
+ <I, S>(
1023
+ tag: Context.Tag<I, S>
1024
+ ) => (
1025
+ evaluate: LazyArg<Types.NoInfer<S>>
1026
+ ) => Layer.Layer<I>,
1027
+ <I, S>(
1028
+ tag: Context.Tag<I, S>,
1029
+ evaluate: LazyArg<Types.NoInfer<S>>
1030
+ ) => Layer.Layer<I>
1031
+ >(2, (a, b) => {
1032
+ const tagFirst = Context.isTag(a)
1033
+ const tag = (tagFirst ? a : b) as Context.Tag<unknown, unknown>
1034
+ const evaluate = tagFirst ? b : a
1035
+ return fromEffectContext(core.sync(() => Context.make(tag, evaluate())))
1036
+ })
1037
+
1038
+ /** @internal */
1039
+ export const syncContext = <A>(evaluate: LazyArg<Context.Context<A>>): Layer.Layer<A> => {
1040
+ return fromEffectContext(core.sync(evaluate))
1041
+ }
1042
+
1043
+ /** @internal */
1044
+ export const tap = dual<
1045
+ <ROut, XR extends ROut, RIn2, E2, X>(
1046
+ f: (context: Context.Context<XR>) => Effect.Effect<X, E2, RIn2>
1047
+ ) => <RIn, E>(self: Layer.Layer<ROut, E, RIn>) => Layer.Layer<ROut, E | E2, RIn | RIn2>,
1048
+ <RIn, E, ROut, XR extends ROut, RIn2, E2, X>(
1049
+ self: Layer.Layer<ROut, E, RIn>,
1050
+ f: (context: Context.Context<XR>) => Effect.Effect<X, E2, RIn2>
1051
+ ) => Layer.Layer<ROut, E | E2, RIn | RIn2>
1052
+ >(2, (self, f) => flatMap(self, (context) => fromEffectContext(core.as(f(context), context))))
1053
+
1054
+ /** @internal */
1055
+ export const tapError = dual<
1056
+ <E, XE extends E, RIn2, E2, X>(
1057
+ f: (e: XE) => Effect.Effect<X, E2, RIn2>
1058
+ ) => <RIn, ROut>(self: Layer.Layer<ROut, E, RIn>) => Layer.Layer<ROut, E | E2, RIn | RIn2>,
1059
+ <RIn, E, XE extends E, ROut, RIn2, E2, X>(
1060
+ self: Layer.Layer<ROut, E, RIn>,
1061
+ f: (e: XE) => Effect.Effect<X, E2, RIn2>
1062
+ ) => Layer.Layer<ROut, E | E2, RIn | RIn2>
1063
+ >(2, (self, f) =>
1064
+ catchAll(
1065
+ self,
1066
+ (e) => fromEffectContext(core.flatMap(f(e as any), () => core.fail(e)))
1067
+ ))
1068
+
1069
+ /** @internal */
1070
+ export const tapErrorCause = dual<
1071
+ <E, XE extends E, RIn2, E2, X>(
1072
+ f: (cause: Cause.Cause<XE>) => Effect.Effect<X, E2, RIn2>
1073
+ ) => <RIn, ROut>(self: Layer.Layer<ROut, E, RIn>) => Layer.Layer<ROut, E | E2, RIn | RIn2>,
1074
+ <RIn, E, XE extends E, ROut, RIn2, E2, X>(
1075
+ self: Layer.Layer<ROut, E, RIn>,
1076
+ f: (cause: Cause.Cause<XE>) => Effect.Effect<X, E2, RIn2>
1077
+ ) => Layer.Layer<ROut, E | E2, RIn | RIn2>
1078
+ >(2, (self, f) =>
1079
+ catchAllCause(
1080
+ self,
1081
+ (cause) => fromEffectContext(core.flatMap(f(cause as any), () => core.failCause(cause)))
1082
+ ))
1083
+
1084
+ /** @internal */
1085
+ export const toRuntime = <RIn, E, ROut>(
1086
+ self: Layer.Layer<ROut, E, RIn>
1087
+ ): Effect.Effect<Runtime.Runtime<ROut>, E, RIn | Scope.Scope> =>
1088
+ pipe(
1089
+ fiberRuntime.scopeWith((scope) => buildWithScope(self, scope)),
1090
+ core.flatMap((context) =>
1091
+ pipe(
1092
+ runtime.runtime<ROut>(),
1093
+ core.provideContext(context)
1094
+ )
1095
+ )
1096
+ )
1097
+
1098
+ /** @internal */
1099
+ export const toRuntimeWithMemoMap = dual<
1100
+ (
1101
+ memoMap: Layer.MemoMap
1102
+ ) => <RIn, E, ROut>(self: Layer.Layer<ROut, E, RIn>) => Effect.Effect<Runtime.Runtime<ROut>, E, RIn | Scope.Scope>,
1103
+ <RIn, E, ROut>(
1104
+ self: Layer.Layer<ROut, E, RIn>,
1105
+ memoMap: Layer.MemoMap
1106
+ ) => Effect.Effect<Runtime.Runtime<ROut>, E, RIn | Scope.Scope>
1107
+ >(2, (self, memoMap) =>
1108
+ core.flatMap(
1109
+ fiberRuntime.scopeWith((scope) => buildWithMemoMap(self, memoMap, scope)),
1110
+ (context) =>
1111
+ pipe(
1112
+ runtime.runtime<any>(),
1113
+ core.provideContext(context)
1114
+ )
1115
+ ))
1116
+
1117
+ /** @internal */
1118
+ export const provide = dual<
1119
+ {
1120
+ <RIn, E, ROut>(
1121
+ that: Layer.Layer<ROut, E, RIn>
1122
+ ): <RIn2, E2, ROut2>(
1123
+ self: Layer.Layer<ROut2, E2, RIn2>
1124
+ ) => Layer.Layer<ROut2, E | E2, RIn | Exclude<RIn2, ROut>>
1125
+ <const Layers extends readonly [Layer.Layer.Any, ...Array<Layer.Layer.Any>]>(
1126
+ that: Layers
1127
+ ): <A, E, R>(
1128
+ self: Layer.Layer<A, E, R>
1129
+ ) => Layer.Layer<
1130
+ A,
1131
+ E | { [k in keyof Layers]: Layer.Layer.Error<Layers[k]> }[number],
1132
+ | { [k in keyof Layers]: Layer.Layer.Context<Layers[k]> }[number]
1133
+ | Exclude<R, { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]>
1134
+ >
1135
+ },
1136
+ {
1137
+ <RIn2, E2, ROut2, RIn, E, ROut>(
1138
+ self: Layer.Layer<ROut2, E2, RIn2>,
1139
+ that: Layer.Layer<ROut, E, RIn>
1140
+ ): Layer.Layer<ROut2, E | E2, RIn | Exclude<RIn2, ROut>>
1141
+ <A, E, R, const Layers extends readonly [Layer.Layer.Any, ...Array<Layer.Layer.Any>]>(
1142
+ self: Layer.Layer<A, E, R>,
1143
+ that: Layers
1144
+ ): Layer.Layer<
1145
+ A,
1146
+ E | { [k in keyof Layers]: Layer.Layer.Error<Layers[k]> }[number],
1147
+ | { [k in keyof Layers]: Layer.Layer.Context<Layers[k]> }[number]
1148
+ | Exclude<R, { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]>
1149
+ >
1150
+ }
1151
+ >(2, (
1152
+ self: Layer.Layer.Any,
1153
+ that: Layer.Layer.Any | ReadonlyArray<Layer.Layer.Any>
1154
+ ) =>
1155
+ suspend(() => {
1156
+ const provideTo = Object.create(proto)
1157
+ provideTo._op_layer = OpCodes.OP_PROVIDE
1158
+ provideTo.first = Object.create(proto, {
1159
+ _op_layer: { value: OpCodes.OP_PROVIDE_MERGE, enumerable: true },
1160
+ first: { value: context(), enumerable: true },
1161
+ second: { value: Array.isArray(that) ? mergeAll(...that as any) : that },
1162
+ zipK: { value: (a: Context.Context<any>, b: Context.Context<any>) => pipe(a, Context.merge(b)) }
1163
+ })
1164
+ provideTo.second = self
1165
+ return provideTo
1166
+ }))
1167
+
1168
+ /** @internal */
1169
+ export const provideMerge = dual<
1170
+ <RIn, E, ROut>(
1171
+ self: Layer.Layer<ROut, E, RIn>
1172
+ ) => <RIn2, E2, ROut2>(
1173
+ that: Layer.Layer<ROut2, E2, RIn2>
1174
+ ) => Layer.Layer<ROut | ROut2, E2 | E, RIn | Exclude<RIn2, ROut>>,
1175
+ <RIn2, E2, ROut2, RIn, E, ROut>(
1176
+ that: Layer.Layer<ROut2, E2, RIn2>,
1177
+ self: Layer.Layer<ROut, E, RIn>
1178
+ ) => Layer.Layer<ROut | ROut2, E2 | E, RIn | Exclude<RIn2, ROut>>
1179
+ >(2, <RIn2, E2, ROut2, RIn, E, ROut>(that: Layer.Layer<ROut2, E2, RIn2>, self: Layer.Layer<ROut, E, RIn>) => {
1180
+ const zipWith = Object.create(proto)
1181
+ zipWith._op_layer = OpCodes.OP_PROVIDE_MERGE
1182
+ zipWith.first = self
1183
+ zipWith.second = provide(that, self)
1184
+ zipWith.zipK = (a: Context.Context<ROut>, b: Context.Context<ROut2>): Context.Context<ROut | ROut2> => {
1185
+ return pipe(a, Context.merge(b))
1186
+ }
1187
+ return zipWith
1188
+ })
1189
+
1190
+ /** @internal */
1191
+ export const zipWith = dual<
1192
+ <B, E2, R2, A, C>(
1193
+ that: Layer.Layer<B, E2, R2>,
1194
+ f: (a: Context.Context<A>, b: Context.Context<B>) => Context.Context<C>
1195
+ ) => <E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<C, E | E2, R | R2>,
1196
+ <A, E, R, B, E2, R2, C>(
1197
+ self: Layer.Layer<A, E, R>,
1198
+ that: Layer.Layer<B, E2, R2>,
1199
+ f: (a: Context.Context<A>, b: Context.Context<B>) => Context.Context<C>
1200
+ ) => Layer.Layer<C, E | E2, R | R2>
1201
+ >(3, (self, that, f) =>
1202
+ suspend(() => {
1203
+ const zipWith = Object.create(proto)
1204
+ zipWith._op_layer = OpCodes.OP_ZIP_WITH
1205
+ zipWith.first = self
1206
+ zipWith.second = that
1207
+ zipWith.zipK = f
1208
+ return zipWith
1209
+ }))
1210
+
1211
+ /** @internal */
1212
+ export const unwrapEffect = <A, E1, R1, E, R>(
1213
+ self: Effect.Effect<Layer.Layer<A, E1, R1>, E, R>
1214
+ ): Layer.Layer<A, E | E1, R | R1> => {
1215
+ const tag = Context.GenericTag<Layer.Layer<A, E1, R1>>("effect/Layer/unwrapEffect/Layer.Layer<R1, E1, A>")
1216
+ return flatMap(fromEffect(tag, self), (context) => Context.get(context, tag))
1217
+ }
1218
+
1219
+ /** @internal */
1220
+ export const unwrapScoped = <A, E1, R1, E, R>(
1221
+ self: Effect.Effect<Layer.Layer<A, E1, R1>, E, R>
1222
+ ): Layer.Layer<A, E | E1, R1 | Exclude<R, Scope.Scope>> => {
1223
+ const tag = Context.GenericTag<Layer.Layer<A, E1, R1>>("effect/Layer/unwrapScoped/Layer.Layer<R1, E1, A>")
1224
+ return flatMap(scoped(tag, self), (context) => Context.get(context, tag))
1225
+ }
1226
+
1227
+ // -----------------------------------------------------------------------------
1228
+ // logging
1229
+ // -----------------------------------------------------------------------------
1230
+
1231
+ export const annotateLogs = dual<
1232
+ {
1233
+ (key: string, value: unknown): <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, R>
1234
+ (
1235
+ values: Record<string, unknown>
1236
+ ): <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, R>
1237
+ },
1238
+ {
1239
+ <A, E, R>(self: Layer.Layer<A, E, R>, key: string, value: unknown): Layer.Layer<A, E, R>
1240
+ <A, E, R>(self: Layer.Layer<A, E, R>, values: Record<string, unknown>): Layer.Layer<A, E, R>
1241
+ }
1242
+ >(
1243
+ (args) => isLayer(args[0]),
1244
+ function<A, E, R>() {
1245
+ const args = arguments
1246
+ return fiberRefLocallyWith(
1247
+ args[0] as Layer.Layer<A, E, R>,
1248
+ core.currentLogAnnotations,
1249
+ typeof args[1] === "string"
1250
+ ? HashMap.set(args[1], args[2])
1251
+ : (annotations) =>
1252
+ Object.entries(args[1] as Record<string, unknown>).reduce(
1253
+ (acc, [key, value]) => HashMap.set(acc, key, value),
1254
+ annotations
1255
+ )
1256
+ )
1257
+ }
1258
+ )
1259
+
1260
+ // -----------------------------------------------------------------------------
1261
+ // tracing
1262
+ // -----------------------------------------------------------------------------
1263
+
1264
+ export const annotateSpans = dual<
1265
+ {
1266
+ (key: string, value: unknown): <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, R>
1267
+ (
1268
+ values: Record<string, unknown>
1269
+ ): <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, R>
1270
+ },
1271
+ {
1272
+ <A, E, R>(self: Layer.Layer<A, E, R>, key: string, value: unknown): Layer.Layer<A, E, R>
1273
+ <A, E, R>(self: Layer.Layer<A, E, R>, values: Record<string, unknown>): Layer.Layer<A, E, R>
1274
+ }
1275
+ >(
1276
+ (args) => isLayer(args[0]),
1277
+ function<A, E, R>() {
1278
+ const args = arguments
1279
+ return fiberRefLocallyWith(
1280
+ args[0] as Layer.Layer<A, E, R>,
1281
+ core.currentTracerSpanAnnotations,
1282
+ typeof args[1] === "string"
1283
+ ? HashMap.set(args[1], args[2])
1284
+ : (annotations) =>
1285
+ Object.entries(args[1] as Record<string, unknown>).reduce(
1286
+ (acc, [key, value]) => HashMap.set(acc, key, value),
1287
+ annotations
1288
+ )
1289
+ )
1290
+ }
1291
+ )
1292
+
1293
+ /** @internal */
1294
+ export const withSpan: {
1295
+ (
1296
+ name: string,
1297
+ options?: Tracer.SpanOptions & {
1298
+ readonly onEnd?:
1299
+ | ((span: Tracer.Span, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>)
1300
+ | undefined
1301
+ }
1302
+ ): <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, Exclude<R, Tracer.ParentSpan>>
1303
+ <A, E, R>(
1304
+ self: Layer.Layer<A, E, R>,
1305
+ name: string,
1306
+ options?: Tracer.SpanOptions & {
1307
+ readonly onEnd?:
1308
+ | ((span: Tracer.Span, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>)
1309
+ | undefined
1310
+ }
1311
+ ): Layer.Layer<A, E, Exclude<R, Tracer.ParentSpan>>
1312
+ } = function() {
1313
+ const dataFirst = typeof arguments[0] !== "string"
1314
+ const name = dataFirst ? arguments[1] : arguments[0]
1315
+ const options = tracer.addSpanStackTrace(dataFirst ? arguments[2] : arguments[1]) as Tracer.SpanOptions & {
1316
+ readonly onEnd?:
1317
+ | ((span: Tracer.Span, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>)
1318
+ | undefined
1319
+ }
1320
+ if (dataFirst) {
1321
+ const self = arguments[0]
1322
+ return unwrapScoped(
1323
+ core.map(
1324
+ options?.onEnd
1325
+ ? core.tap(
1326
+ fiberRuntime.makeSpanScoped(name, options),
1327
+ (span) => fiberRuntime.addFinalizer((exit) => options.onEnd!(span, exit))
1328
+ )
1329
+ : fiberRuntime.makeSpanScoped(name, options),
1330
+ (span) => withParentSpan(self, span)
1331
+ )
1332
+ )
1333
+ }
1334
+ return (self: Layer.Layer<any, any, any>) =>
1335
+ unwrapScoped(
1336
+ core.map(
1337
+ options?.onEnd
1338
+ ? core.tap(
1339
+ fiberRuntime.makeSpanScoped(name, options),
1340
+ (span) => fiberRuntime.addFinalizer((exit) => options.onEnd!(span, exit))
1341
+ )
1342
+ : fiberRuntime.makeSpanScoped(name, options),
1343
+ (span) => withParentSpan(self, span)
1344
+ )
1345
+ )
1346
+ } as any
1347
+
1348
+ /** @internal */
1349
+ export const withParentSpan = dual<
1350
+ (
1351
+ span: Tracer.AnySpan
1352
+ ) => <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, Exclude<R, Tracer.ParentSpan>>,
1353
+ <A, E, R>(self: Layer.Layer<A, E, R>, span: Tracer.AnySpan) => Layer.Layer<A, E, Exclude<R, Tracer.ParentSpan>>
1354
+ >(2, (self, span) => provide(self, succeedContext(Context.make(tracer.spanTag, span))))
1355
+
1356
+ // circular with Effect
1357
+
1358
+ const provideSomeLayer = dual<
1359
+ <A2, E2, R2>(
1360
+ layer: Layer.Layer<A2, E2, R2>
1361
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, R2 | Exclude<R, A2>>,
1362
+ <A, E, R, A2, E2, R2>(
1363
+ self: Effect.Effect<A, E, R>,
1364
+ layer: Layer.Layer<A2, E2, R2>
1365
+ ) => Effect.Effect<A, E | E2, R2 | Exclude<R, A2>>
1366
+ >(2, (self, layer) =>
1367
+ fiberRuntime.scopedWith((scope) =>
1368
+ core.flatMap(
1369
+ buildWithScope(layer, scope),
1370
+ (context) => core.provideSomeContext(self, context)
1371
+ )
1372
+ ))
1373
+
1374
+ const provideSomeRuntime = dual<
1375
+ <R>(context: Runtime.Runtime<R>) => <A, E, R1>(self: Effect.Effect<A, E, R1>) => Effect.Effect<A, E, Exclude<R1, R>>,
1376
+ <A, E, R1, R>(self: Effect.Effect<A, E, R1>, context: Runtime.Runtime<R>) => Effect.Effect<A, E, Exclude<R1, R>>
1377
+ >(2, (self, rt) => {
1378
+ const patchRefs = FiberRefsPatch.diff(runtime.defaultRuntime.fiberRefs, rt.fiberRefs)
1379
+ const patchFlags = runtimeFlags.diff(runtime.defaultRuntime.runtimeFlags, rt.runtimeFlags)
1380
+ return core.uninterruptibleMask((restore) =>
1381
+ core.withFiberRuntime((fiber) => {
1382
+ const oldContext = fiber.getFiberRef(core.currentContext)
1383
+ const oldRefs = fiber.getFiberRefs()
1384
+ const newRefs = FiberRefsPatch.patch(fiber.id(), oldRefs)(patchRefs)
1385
+ const oldFlags = fiber.currentRuntimeFlags
1386
+ const newFlags = runtimeFlags.patch(patchFlags)(oldFlags)
1387
+ const rollbackRefs = FiberRefsPatch.diff(newRefs, oldRefs)
1388
+ const rollbackFlags = runtimeFlags.diff(newFlags, oldFlags)
1389
+ fiber.setFiberRefs(newRefs)
1390
+ fiber.currentRuntimeFlags = newFlags
1391
+ return fiberRuntime.ensuring(
1392
+ core.provideSomeContext(restore(self), Context.merge(oldContext, rt.context)),
1393
+ core.withFiberRuntime((fiber) => {
1394
+ fiber.setFiberRefs(FiberRefsPatch.patch(fiber.id(), fiber.getFiberRefs())(rollbackRefs))
1395
+ fiber.currentRuntimeFlags = runtimeFlags.patch(rollbackFlags)(fiber.currentRuntimeFlags)
1396
+ return core.void
1397
+ })
1398
+ )
1399
+ })
1400
+ )
1401
+ })
1402
+
1403
+ /** @internal */
1404
+ export const effect_provide = dual<
1405
+ {
1406
+ <const Layers extends readonly [Layer.Layer.Any, ...Array<Layer.Layer.Any>]>(
1407
+ layers: Layers
1408
+ ): <A, E, R>(
1409
+ self: Effect.Effect<A, E, R>
1410
+ ) => Effect.Effect<
1411
+ A,
1412
+ E | { [k in keyof Layers]: Layer.Layer.Error<Layers[k]> }[number],
1413
+ | { [k in keyof Layers]: Layer.Layer.Context<Layers[k]> }[number]
1414
+ | Exclude<R, { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]>
1415
+ >
1416
+ <ROut, E2, RIn>(
1417
+ layer: Layer.Layer<ROut, E2, RIn>
1418
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, RIn | Exclude<R, ROut>>
1419
+ <R2>(
1420
+ context: Context.Context<R2>
1421
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, R2>>
1422
+ <R2>(
1423
+ runtime: Runtime.Runtime<R2>
1424
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, R2>>
1425
+ <E2, R2>(
1426
+ managedRuntime: ManagedRuntime.ManagedRuntime<R2, E2>
1427
+ ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, Exclude<R, R2>>
1428
+ },
1429
+ {
1430
+ <A, E, R, const Layers extends readonly [Layer.Layer.Any, ...Array<Layer.Layer.Any>]>(
1431
+ self: Effect.Effect<A, E, R>,
1432
+ layers: Layers
1433
+ ): Effect.Effect<
1434
+ A,
1435
+ E | { [k in keyof Layers]: Layer.Layer.Error<Layers[k]> }[number],
1436
+ | { [k in keyof Layers]: Layer.Layer.Context<Layers[k]> }[number]
1437
+ | Exclude<R, { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]>
1438
+ >
1439
+ <A, E, R, ROut, E2, RIn>(
1440
+ self: Effect.Effect<A, E, R>,
1441
+ layer: Layer.Layer<ROut, E2, RIn>
1442
+ ): Effect.Effect<A, E | E2, RIn | Exclude<R, ROut>>
1443
+ <A, E, R, R2>(
1444
+ self: Effect.Effect<A, E, R>,
1445
+ context: Context.Context<R2>
1446
+ ): Effect.Effect<A, E, Exclude<R, R2>>
1447
+ <A, E, R, R2>(
1448
+ self: Effect.Effect<A, E, R>,
1449
+ runtime: Runtime.Runtime<R2>
1450
+ ): Effect.Effect<A, E, Exclude<R, R2>>
1451
+ <A, E, E2, R, R2>(
1452
+ self: Effect.Effect<A, E, R>,
1453
+ managedRuntime: ManagedRuntime.ManagedRuntime<R2, E2>
1454
+ ): Effect.Effect<A, E | E2, Exclude<R, R2>>
1455
+ }
1456
+ >(
1457
+ 2,
1458
+ <A, E, R, ROut>(
1459
+ self: Effect.Effect<A, E, R>,
1460
+ source:
1461
+ | Layer.Layer<ROut, any, any>
1462
+ | Context.Context<ROut>
1463
+ | Runtime.Runtime<ROut>
1464
+ | ManagedRuntime.ManagedRuntime<ROut, any>
1465
+ | Array<Layer.Layer.Any>
1466
+ ): Effect.Effect<any, any, Exclude<R, ROut>> => {
1467
+ if (Array.isArray(source)) {
1468
+ // @ts-expect-error
1469
+ return provideSomeLayer(self, mergeAll(...source))
1470
+ } else if (isLayer(source)) {
1471
+ return provideSomeLayer(self, source as Layer.Layer<ROut, any, any>)
1472
+ } else if (Context.isContext(source)) {
1473
+ return core.provideSomeContext(self, source)
1474
+ } else if (circularManagedRuntime.TypeId in source) {
1475
+ return core.flatMap(
1476
+ (source as ManagedRuntime.ManagedRuntime<ROut, any>).runtimeEffect,
1477
+ (rt) => provideSomeRuntime(self, rt)
1478
+ )
1479
+ } else {
1480
+ return provideSomeRuntime(self, source as Runtime.Runtime<ROut>)
1481
+ }
1482
+ }
1483
+ )