@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
package/src/Layer.ts ADDED
@@ -0,0 +1,1228 @@
1
+ /**
2
+ * A `Layer<ROut, E, RIn>` describes how to build one or more services in your
3
+ * application. Services can be injected into effects via
4
+ * `Effect.provideService`. Effects can require services via `Effect.service`.
5
+ *
6
+ * Layer can be thought of as recipes for producing bundles of services, given
7
+ * their dependencies (other services).
8
+ *
9
+ * Construction of services can be effectful and utilize resources that must be
10
+ * acquired and safely released when the services are done being utilized.
11
+ *
12
+ * By default layers are shared, meaning that if the same layer is used twice
13
+ * the layer will only be allocated a single time.
14
+ *
15
+ * Because of their excellent composition properties, layers are the idiomatic
16
+ * way in Effect-TS to create services that depend on other services.
17
+ *
18
+ * @since 2.0.0
19
+ */
20
+ import type * as Cause from "./Cause.js"
21
+ import type * as Clock from "./Clock.js"
22
+ import type { ConfigProvider } from "./ConfigProvider.js"
23
+ import * as Context from "./Context.js"
24
+ import type * as Effect from "./Effect.js"
25
+ import type * as Exit from "./Exit.js"
26
+ import type { FiberRef } from "./FiberRef.js"
27
+ import { dual, type LazyArg } from "./Function.js"
28
+ import { clockTag } from "./internal/clock.js"
29
+ import * as core from "./internal/core.js"
30
+ import * as defaultServices from "./internal/defaultServices.js"
31
+ import * as fiberRuntime from "./internal/fiberRuntime.js"
32
+ import * as internal from "./internal/layer.js"
33
+ import * as circularLayer from "./internal/layer/circular.js"
34
+ import * as query from "./internal/query.js"
35
+ import { randomTag } from "./internal/random.js"
36
+ import type { LogLevel } from "./LogLevel.js"
37
+ import type * as Option from "./Option.js"
38
+ import type { Pipeable } from "./Pipeable.js"
39
+ import type * as Random from "./Random.js"
40
+ import type * as Request from "./Request.js"
41
+ import type * as Runtime from "./Runtime.js"
42
+ import type * as Schedule from "./Schedule.js"
43
+ import * as Scheduler from "./Scheduler.js"
44
+ import type * as Scope from "./Scope.js"
45
+ import type * as Stream from "./Stream.js"
46
+ import type * as Tracer from "./Tracer.js"
47
+ import type * as Types from "./Types.js"
48
+
49
+ /**
50
+ * @since 2.0.0
51
+ * @category symbols
52
+ */
53
+ export const LayerTypeId: unique symbol = internal.LayerTypeId
54
+
55
+ /**
56
+ * @since 2.0.0
57
+ * @category symbols
58
+ */
59
+ export type LayerTypeId = typeof LayerTypeId
60
+
61
+ /**
62
+ * @since 2.0.0
63
+ * @category models
64
+ */
65
+ export interface Layer<in ROut, out E = never, out RIn = never> extends Layer.Variance<ROut, E, RIn>, Pipeable {}
66
+
67
+ /**
68
+ * @since 2.0.0
69
+ */
70
+ export declare namespace Layer {
71
+ /**
72
+ * @since 2.0.0
73
+ * @category models
74
+ */
75
+ export interface Variance<in ROut, out E, out RIn> {
76
+ readonly [LayerTypeId]: {
77
+ readonly _ROut: Types.Contravariant<ROut>
78
+ readonly _E: Types.Covariant<E>
79
+ readonly _RIn: Types.Covariant<RIn>
80
+ }
81
+ }
82
+ /**
83
+ * @since 3.9.0
84
+ * @category type-level
85
+ */
86
+ export interface Any {
87
+ readonly [LayerTypeId]: {
88
+ readonly _ROut: Types.Contravariant<never>
89
+ readonly _E: Types.Covariant<any>
90
+ readonly _RIn: Types.Covariant<any>
91
+ }
92
+ }
93
+ /**
94
+ * @since 2.0.0
95
+ * @category type-level
96
+ */
97
+ export type Context<T extends Any> = [T] extends [Layer<infer _ROut, infer _E, infer _RIn>] ? _RIn
98
+ : never
99
+ /**
100
+ * @since 2.0.0
101
+ * @category type-level
102
+ */
103
+ export type Error<T extends Any> = [T] extends [Layer<infer _ROut, infer _E, infer _RIn>] ? _E
104
+ : never
105
+ /**
106
+ * @since 2.0.0
107
+ * @category type-level
108
+ */
109
+ export type Success<T extends Any> = [T] extends [Layer<infer _ROut, infer _E, infer _RIn>] ? _ROut
110
+ : never
111
+ }
112
+
113
+ /**
114
+ * @since 2.0.0
115
+ * @category symbols
116
+ */
117
+ export const MemoMapTypeId: unique symbol = internal.MemoMapTypeId
118
+
119
+ /**
120
+ * @since 2.0.0
121
+ * @category symbols
122
+ */
123
+ export type MemoMapTypeId = typeof MemoMapTypeId
124
+
125
+ /**
126
+ * @since 2.0.0
127
+ * @category models
128
+ */
129
+ export interface MemoMap {
130
+ readonly [MemoMapTypeId]: MemoMapTypeId
131
+
132
+ /** @internal */
133
+ readonly getOrElseMemoize: <RIn, E, ROut>(
134
+ layer: Layer<ROut, E, RIn>,
135
+ scope: Scope.Scope
136
+ ) => Effect.Effect<Context.Context<ROut>, E, RIn>
137
+ }
138
+
139
+ /**
140
+ * @since 3.13.0
141
+ * @category models
142
+ */
143
+ export interface CurrentMemoMap {
144
+ readonly _: unique symbol
145
+ }
146
+
147
+ /**
148
+ * @since 3.13.0
149
+ * @category models
150
+ */
151
+ export const CurrentMemoMap: Context.Reference<CurrentMemoMap, MemoMap> = internal.CurrentMemoMap
152
+
153
+ /**
154
+ * Returns `true` if the specified value is a `Layer`, `false` otherwise.
155
+ *
156
+ * @since 2.0.0
157
+ * @category getters
158
+ */
159
+ export const isLayer: (u: unknown) => u is Layer<unknown, unknown, unknown> = internal.isLayer
160
+
161
+ /**
162
+ * Returns `true` if the specified `Layer` is a fresh version that will not be
163
+ * shared, `false` otherwise.
164
+ *
165
+ * @since 2.0.0
166
+ * @category getters
167
+ */
168
+ export const isFresh: <RIn, E, ROut>(self: Layer<ROut, E, RIn>) => boolean = internal.isFresh
169
+
170
+ /**
171
+ * @since 3.3.0
172
+ * @category tracing
173
+ */
174
+ export const annotateLogs: {
175
+ (key: string, value: unknown): <A, E, R>(self: Layer<A, E, R>) => Layer<A, E, R>
176
+ (values: Record<string, unknown>): <A, E, R>(self: Layer<A, E, R>) => Layer<A, E, R>
177
+ <A, E, R>(self: Layer<A, E, R>, key: string, value: unknown): Layer<A, E, R>
178
+ <A, E, R>(self: Layer<A, E, R>, values: Record<string, unknown>): Layer<A, E, R>
179
+ } = internal.annotateLogs
180
+
181
+ /**
182
+ * @since 3.3.0
183
+ * @category tracing
184
+ */
185
+ export const annotateSpans: {
186
+ (key: string, value: unknown): <A, E, R>(self: Layer<A, E, R>) => Layer<A, E, R>
187
+ (values: Record<string, unknown>): <A, E, R>(self: Layer<A, E, R>) => Layer<A, E, R>
188
+ <A, E, R>(self: Layer<A, E, R>, key: string, value: unknown): Layer<A, E, R>
189
+ <A, E, R>(self: Layer<A, E, R>, values: Record<string, unknown>): Layer<A, E, R>
190
+ } = internal.annotateSpans
191
+
192
+ /**
193
+ * Builds a layer into a scoped value.
194
+ *
195
+ * @since 2.0.0
196
+ * @category destructors
197
+ */
198
+ export const build: <RIn, E, ROut>(
199
+ self: Layer<ROut, E, RIn>
200
+ ) => Effect.Effect<Context.Context<ROut>, E, Scope.Scope | RIn> = internal.build
201
+
202
+ /**
203
+ * Builds a layer into an `Effect` value. Any resources associated with this
204
+ * layer will be released when the specified scope is closed unless their scope
205
+ * has been extended. This allows building layers where the lifetime of some of
206
+ * the services output by the layer exceed the lifetime of the effect the
207
+ * layer is provided to.
208
+ *
209
+ * @since 2.0.0
210
+ * @category destructors
211
+ */
212
+ export const buildWithScope: {
213
+ (scope: Scope.Scope): <RIn, E, ROut>(self: Layer<ROut, E, RIn>) => Effect.Effect<Context.Context<ROut>, E, RIn>
214
+ <RIn, E, ROut>(self: Layer<ROut, E, RIn>, scope: Scope.Scope): Effect.Effect<Context.Context<ROut>, E, RIn>
215
+ } = internal.buildWithScope
216
+
217
+ /**
218
+ * Recovers from all errors.
219
+ *
220
+ * @since 2.0.0
221
+ * @category error handling
222
+ */
223
+ export const catchAll: {
224
+ <E, RIn2, E2, ROut2>(
225
+ onError: (error: E) => Layer<ROut2, E2, RIn2>
226
+ ): <RIn, ROut>(self: Layer<ROut, E, RIn>) => Layer<ROut & ROut2, E2, RIn2 | RIn>
227
+ <RIn, E, ROut, RIn2, E2, ROut2>(
228
+ self: Layer<ROut, E, RIn>,
229
+ onError: (error: E) => Layer<ROut2, E2, RIn2>
230
+ ): Layer<ROut & ROut2, E2, RIn | RIn2>
231
+ } = internal.catchAll
232
+
233
+ /**
234
+ * Recovers from all errors.
235
+ *
236
+ * @since 2.0.0
237
+ * @category error handling
238
+ */
239
+ export const catchAllCause: {
240
+ <E, RIn2, E2, ROut2>(
241
+ onError: (cause: Cause.Cause<E>) => Layer<ROut2, E2, RIn2>
242
+ ): <RIn, ROut>(self: Layer<ROut, E, RIn>) => Layer<ROut & ROut2, E2, RIn2 | RIn>
243
+ <RIn, E, ROut, RIn2, E2, ROut22>(
244
+ self: Layer<ROut, E, RIn>,
245
+ onError: (cause: Cause.Cause<E>) => Layer<ROut22, E2, RIn2>
246
+ ): Layer<ROut & ROut22, E2, RIn | RIn2>
247
+ } = internal.catchAllCause
248
+
249
+ /**
250
+ * Constructs a `Layer` that passes along the specified context as an
251
+ * output.
252
+ *
253
+ * @since 2.0.0
254
+ * @category constructors
255
+ */
256
+ export const context: <R>() => Layer<R, never, R> = internal.context
257
+
258
+ /**
259
+ * Constructs a layer that dies with the specified defect.
260
+ *
261
+ * @since 2.0.0
262
+ * @category constructors
263
+ */
264
+ export const die: (defect: unknown) => Layer<unknown> = internal.die
265
+
266
+ /**
267
+ * Constructs a layer that dies with the specified defect.
268
+ *
269
+ * @since 2.0.0
270
+ * @category constructors
271
+ */
272
+ export const dieSync: (evaluate: LazyArg<unknown>) => Layer<unknown> = internal.dieSync
273
+
274
+ /**
275
+ * Replaces the layer's output with `never` and includes the layer only for its
276
+ * side-effects.
277
+ *
278
+ * @since 2.0.0
279
+ * @category mapping
280
+ */
281
+ export const discard: <RIn, E, ROut>(self: Layer<ROut, E, RIn>) => Layer<never, E, RIn> = internal.discard
282
+
283
+ /**
284
+ * Constructs a layer from the specified effect.
285
+ *
286
+ * @since 2.0.0
287
+ * @category constructors
288
+ */
289
+ export const effect: {
290
+ <I, S>(tag: Context.Tag<I, S>): <E, R>(effect: Effect.Effect<Types.NoInfer<S>, E, R>) => Layer<I, E, R>
291
+ <I, S, E, R>(tag: Context.Tag<I, S>, effect: Effect.Effect<Types.NoInfer<S>, E, R>): Layer<I, E, R>
292
+ } = internal.fromEffect
293
+
294
+ /**
295
+ * Constructs a layer from the specified effect, discarding its output.
296
+ *
297
+ * @since 2.0.0
298
+ * @category constructors
299
+ */
300
+ export const effectDiscard: <X, E, R>(effect: Effect.Effect<X, E, R>) => Layer<never, E, R> = internal.fromEffectDiscard
301
+
302
+ /**
303
+ * Constructs a layer from the specified effect, which must return one or more
304
+ * services.
305
+ *
306
+ * @since 2.0.0
307
+ * @category constructors
308
+ */
309
+ export const effectContext: <A, E, R>(effect: Effect.Effect<Context.Context<A>, E, R>) => Layer<A, E, R> =
310
+ internal.fromEffectContext
311
+
312
+ /**
313
+ * A Layer that constructs an empty Context.
314
+ *
315
+ * @since 2.0.0
316
+ * @category constructors
317
+ */
318
+ export const empty: Layer<never> = internal.empty
319
+
320
+ /**
321
+ * Extends the scope of this layer, returning a new layer that when provided
322
+ * to an effect will not immediately release its associated resources when
323
+ * that effect completes execution but instead when the scope the resulting
324
+ * effect depends on is closed.
325
+ *
326
+ * @since 2.0.0
327
+ * @category utils
328
+ */
329
+ export const extendScope: <RIn, E, ROut>(self: Layer<ROut, E, RIn>) => Layer<ROut, E, Scope.Scope | RIn> =
330
+ internal.extendScope
331
+
332
+ /**
333
+ * Constructs a layer that fails with the specified error.
334
+ *
335
+ * @since 2.0.0
336
+ * @category constructors
337
+ */
338
+ export const fail: <E>(error: E) => Layer<unknown, E> = internal.fail
339
+
340
+ /**
341
+ * Constructs a layer that fails with the specified error.
342
+ *
343
+ * @since 2.0.0
344
+ * @category constructors
345
+ */
346
+ export const failSync: <E>(evaluate: LazyArg<E>) => Layer<unknown, E> = internal.failSync
347
+
348
+ /**
349
+ * Constructs a layer that fails with the specified cause.
350
+ *
351
+ * @since 2.0.0
352
+ * @category constructors
353
+ */
354
+ export const failCause: <E>(cause: Cause.Cause<E>) => Layer<unknown, E> = internal.failCause
355
+
356
+ /**
357
+ * Constructs a layer that fails with the specified cause.
358
+ *
359
+ * @since 2.0.0
360
+ * @category constructors
361
+ */
362
+ export const failCauseSync: <E>(evaluate: LazyArg<Cause.Cause<E>>) => Layer<unknown, E> = internal.failCauseSync
363
+
364
+ /**
365
+ * Constructs a layer dynamically based on the output of this layer.
366
+ *
367
+ * @since 2.0.0
368
+ * @category sequencing
369
+ */
370
+ export const flatMap: {
371
+ <A, A2, E2, R2>(
372
+ f: (context: Context.Context<A>) => Layer<A2, E2, R2>
373
+ ): <E, R>(self: Layer<A, E, R>) => Layer<A2, E2 | E, R2 | R>
374
+ <A, E, R, A2, E2, R2>(
375
+ self: Layer<A, E, R>,
376
+ f: (context: Context.Context<A>) => Layer<A2, E2, R2>
377
+ ): Layer<A2, E | E2, R | R2>
378
+ } = internal.flatMap
379
+
380
+ /**
381
+ * Flattens layers nested in the context of an effect.
382
+ *
383
+ * @since 2.0.0
384
+ * @category sequencing
385
+ */
386
+ export const flatten: {
387
+ <I, A, E2, R2>(tag: Context.Tag<I, Layer<A, E2, R2>>): <E, R>(self: Layer<I, E, R>) => Layer<A, E2 | E, R2 | R>
388
+ <I, E, R, A, E2, R2>(self: Layer<I, E, R>, tag: Context.Tag<I, Layer<A, E2, R2>>): Layer<A, E | E2, R | R2>
389
+ } = internal.flatten
390
+
391
+ /**
392
+ * Creates a fresh version of this layer that will not be shared.
393
+ *
394
+ * @since 2.0.0
395
+ * @category utils
396
+ */
397
+ export const fresh: <A, E, R>(self: Layer<A, E, R>) => Layer<A, E, R> = internal.fresh
398
+
399
+ /**
400
+ * @since 3.17.0
401
+ * @category Testing
402
+ */
403
+ export type PartialEffectful<A extends object> = Types.Simplify<
404
+ & {
405
+ [
406
+ K in keyof A as A[K] extends
407
+ | Effect.Effect<any, any, any>
408
+ | Stream.Stream<any, any, any>
409
+ | ((...args: any) => Effect.Effect<any, any, any> | Stream.Stream<any, any, any>) ? K
410
+ : never
411
+ ]?: A[K]
412
+ }
413
+ & {
414
+ [
415
+ K in keyof A as A[K] extends
416
+ | Effect.Effect<any, any, any>
417
+ | Stream.Stream<any, any, any>
418
+ | ((...args: any) => Effect.Effect<any, any, any> | Stream.Stream<any, any, any>) ? never
419
+ : K
420
+ ]: A[K]
421
+ }
422
+ >
423
+
424
+ /**
425
+ * Creates a mock layer for testing purposes. You can provide a partial
426
+ * implementation of the service, and any methods not provided will
427
+ * throw an `UnimplementedError` defect when called.
428
+ *
429
+ * **Example**
430
+ *
431
+ * ```ts
432
+ * import { Context, Effect, Layer } from "effect"
433
+ *
434
+ * class MyService extends Context.Tag("MyService")<
435
+ * MyService,
436
+ * {
437
+ * one: Effect.Effect<number>
438
+ * two(): Effect.Effect<number>
439
+ * }
440
+ * >() {}
441
+ *
442
+ * const MyServiceTest = Layer.mock(MyService, {
443
+ * two: () => Effect.succeed(2)
444
+ * })
445
+ * ```
446
+ *
447
+ * @since 3.17.0
448
+ * @category Testing
449
+ */
450
+ export const mock: {
451
+ <I, S extends object>(tag: Context.Tag<I, S>): (service: PartialEffectful<S>) => Layer<I>
452
+ <I, S extends object>(tag: Context.Tag<I, S>, service: PartialEffectful<S>): Layer<I>
453
+ } = internal.mock
454
+
455
+ const fromFunction: <I1, S1, I2, S2>(
456
+ tagA: Context.Tag<I1, S1>,
457
+ tagB: Context.Tag<I2, S2>,
458
+ f: (a: Types.NoInfer<S1>) => Types.NoInfer<S2>
459
+ ) => Layer<I2, never, I1> = internal.fromFunction
460
+
461
+ export {
462
+ /**
463
+ * Constructs a layer from the context using the specified function.
464
+ *
465
+ * @since 2.0.0
466
+ * @category constructors
467
+ */
468
+ fromFunction as function
469
+ }
470
+
471
+ /**
472
+ * Builds this layer and uses it until it is interrupted. This is useful when
473
+ * your entire application is a layer, such as an HTTP server.
474
+ *
475
+ * @since 2.0.0
476
+ * @category conversions
477
+ */
478
+ export const launch: <RIn, E, ROut>(self: Layer<ROut, E, RIn>) => Effect.Effect<never, E, RIn> = internal.launch
479
+
480
+ /**
481
+ * Returns a new layer whose output is mapped by the specified function.
482
+ *
483
+ * @since 2.0.0
484
+ * @category mapping
485
+ */
486
+ export const map: {
487
+ <A, B>(f: (context: Context.Context<A>) => Context.Context<B>): <E, R>(self: Layer<A, E, R>) => Layer<B, E, R>
488
+ <A, E, R, B>(self: Layer<A, E, R>, f: (context: Context.Context<A>) => Context.Context<B>): Layer<B, E, R>
489
+ } = internal.map
490
+
491
+ /**
492
+ * Returns a layer with its error channel mapped using the specified function.
493
+ *
494
+ * @since 2.0.0
495
+ * @category mapping
496
+ */
497
+ export const mapError: {
498
+ <E, E2>(f: (error: E) => E2): <A, R>(self: Layer<A, E, R>) => Layer<A, E2, R>
499
+ <A, E, R, E2>(self: Layer<A, E, R>, f: (error: E) => E2): Layer<A, E2, R>
500
+ } = internal.mapError
501
+
502
+ /**
503
+ * Feeds the error or output services of this layer into the input of either
504
+ * the specified `failure` or `success` layers, resulting in a new layer with
505
+ * the inputs of this layer, and the error or outputs of the specified layer.
506
+ *
507
+ * @since 2.0.0
508
+ * @category folding
509
+ */
510
+ export const match: {
511
+ <E, A2, E2, R2, A, A3, E3, R3>(
512
+ options: {
513
+ readonly onFailure: (error: E) => Layer<A2, E2, R2>
514
+ readonly onSuccess: (context: Context.Context<A>) => Layer<A3, E3, R3>
515
+ }
516
+ ): <R>(self: Layer<A, E, R>) => Layer<A2 & A3, E2 | E3, R2 | R3 | R>
517
+ <A, E, R, A2, E2, R2, A3, E3, R3>(
518
+ self: Layer<A, E, R>,
519
+ options: {
520
+ readonly onFailure: (error: E) => Layer<A2, E2, R2>
521
+ readonly onSuccess: (context: Context.Context<A>) => Layer<A3, E3, R3>
522
+ }
523
+ ): Layer<A2 & A3, E2 | E3, R | R2 | R3>
524
+ } = internal.match
525
+
526
+ /**
527
+ * Feeds the error or output services of this layer into the input of either
528
+ * the specified `failure` or `success` layers, resulting in a new layer with
529
+ * the inputs of this layer, and the error or outputs of the specified layer.
530
+ *
531
+ * @since 2.0.0
532
+ * @category folding
533
+ */
534
+ export const matchCause: {
535
+ <E, A2, E2, R2, A, A3, E3, R3>(
536
+ options: {
537
+ readonly onFailure: (cause: Cause.Cause<E>) => Layer<A2, E2, R2>
538
+ readonly onSuccess: (context: Context.Context<A>) => Layer<A3, E3, R3>
539
+ }
540
+ ): <R>(self: Layer<A, E, R>) => Layer<A2 & A3, E2 | E3, R2 | R3 | R>
541
+ <A, E, R, A2, E2, R2, A3, E3, R3>(
542
+ self: Layer<A, E, R>,
543
+ options: {
544
+ readonly onFailure: (cause: Cause.Cause<E>) => Layer<A2, E2, R2>
545
+ readonly onSuccess: (context: Context.Context<A>) => Layer<A3, E3, R3>
546
+ }
547
+ ): Layer<A2 & A3, E2 | E3, R | R2 | R3>
548
+ } = internal.matchCause
549
+
550
+ /**
551
+ * Returns a scoped effect that, if evaluated, will return the lazily computed
552
+ * result of this layer.
553
+ *
554
+ * @since 2.0.0
555
+ * @category utils
556
+ */
557
+ export const memoize: <RIn, E, ROut>(
558
+ self: Layer<ROut, E, RIn>
559
+ ) => Effect.Effect<Layer<ROut, E, RIn>, never, Scope.Scope> = internal.memoize
560
+
561
+ /**
562
+ * Merges this layer with the specified layer concurrently, producing a new layer with combined input and output types.
563
+ *
564
+ * @since 2.0.0
565
+ * @category zipping
566
+ */
567
+ export const merge: {
568
+ <RIn2, E2, ROut2>(
569
+ that: Layer<ROut2, E2, RIn2>
570
+ ): <RIn, E1, ROut>(self: Layer<ROut, E1, RIn>) => Layer<ROut2 | ROut, E2 | E1, RIn2 | RIn>
571
+ <RIn, E1, ROut, RIn2, E2, ROut2>(
572
+ self: Layer<ROut, E1, RIn>,
573
+ that: Layer<ROut2, E2, RIn2>
574
+ ): Layer<ROut | ROut2, E1 | E2, RIn | RIn2>
575
+ } = internal.merge
576
+
577
+ /**
578
+ * Combines all the provided layers concurrently, creating a new layer with merged input, error, and output types.
579
+ *
580
+ * @since 2.0.0
581
+ * @category zipping
582
+ */
583
+ export const mergeAll: <Layers extends readonly [Layer<never, any, any>, ...Array<Layer<never, any, any>>]>(
584
+ ...layers: Layers
585
+ ) => Layer<
586
+ { [k in keyof Layers]: Layer.Success<Layers[k]> }[number],
587
+ { [k in keyof Layers]: Layer.Error<Layers[k]> }[number],
588
+ { [k in keyof Layers]: Layer.Context<Layers[k]> }[number]
589
+ > = internal.mergeAll
590
+
591
+ /**
592
+ * Translates effect failure into death of the fiber, making all failures
593
+ * unchecked and not a part of the type of the layer.
594
+ *
595
+ * @since 2.0.0
596
+ * @category error handling
597
+ */
598
+ export const orDie: <A, E, R>(self: Layer<A, E, R>) => Layer<A, never, R> = internal.orDie
599
+
600
+ /**
601
+ * Executes this layer and returns its output, if it succeeds, but otherwise
602
+ * executes the specified layer.
603
+ *
604
+ * @since 2.0.0
605
+ * @category error handling
606
+ */
607
+ export const orElse: {
608
+ <A2, E2, R2>(that: LazyArg<Layer<A2, E2, R2>>): <A, E, R>(self: Layer<A, E, R>) => Layer<A & A2, E2 | E, R2 | R>
609
+ <A, E, R, A2, E2, R2>(self: Layer<A, E, R>, that: LazyArg<Layer<A2, E2, R2>>): Layer<A & A2, E | E2, R | R2>
610
+ } = internal.orElse
611
+
612
+ /**
613
+ * Returns a new layer that produces the outputs of this layer but also
614
+ * passes through the inputs.
615
+ *
616
+ * @since 2.0.0
617
+ * @category utils
618
+ */
619
+ export const passthrough: <RIn, E, ROut>(self: Layer<ROut, E, RIn>) => Layer<RIn | ROut, E, RIn> = internal.passthrough
620
+
621
+ /**
622
+ * Projects out part of one of the services output by this layer using the
623
+ * specified function.
624
+ *
625
+ * @since 2.0.0
626
+ * @category utils
627
+ */
628
+ export const project: {
629
+ <I1, S1, I2, S2>(
630
+ tagA: Context.Tag<I1, S1>,
631
+ tagB: Context.Tag<I2, S2>,
632
+ f: (a: Types.NoInfer<S1>) => Types.NoInfer<S2>
633
+ ): <RIn, E>(self: Layer<I1, E, RIn>) => Layer<I2, E, RIn>
634
+ <RIn, E, I1, S1, I2, S2>(
635
+ self: Layer<I1, E, RIn>,
636
+ tagA: Context.Tag<I1, S1>,
637
+ tagB: Context.Tag<I2, S2>,
638
+ f: (a: Types.NoInfer<S1>) => Types.NoInfer<S2>
639
+ ): Layer<I2, E, RIn>
640
+ } = internal.project
641
+
642
+ /**
643
+ * @since 2.0.0
644
+ * @category utils
645
+ */
646
+ export const locallyEffect: {
647
+ <RIn, E, ROut, RIn2, E2, ROut2>(
648
+ f: (_: Effect.Effect<RIn, E, Context.Context<ROut>>) => Effect.Effect<RIn2, E2, Context.Context<ROut2>>
649
+ ): (self: Layer<ROut, E, RIn>) => Layer<ROut2, E2, RIn2>
650
+ <RIn, E, ROut, RIn2, E2, ROut2>(
651
+ self: Layer<ROut, E, RIn>,
652
+ f: (_: Effect.Effect<RIn, E, Context.Context<ROut>>) => Effect.Effect<RIn2, E2, Context.Context<ROut2>>
653
+ ): Layer<ROut2, E2, RIn2>
654
+ } = internal.locallyEffect
655
+
656
+ /**
657
+ * @since 2.0.0
658
+ * @category utils
659
+ */
660
+ export const locally: {
661
+ <X>(
662
+ ref: FiberRef<X>,
663
+ value: X
664
+ ): <A, E, R>(self: Layer<A, E, R>) => Layer<A, E, R>
665
+ <A, E, R, X>(
666
+ self: Layer<A, E, R>,
667
+ ref: FiberRef<X>,
668
+ value: X
669
+ ): Layer<A, E, R>
670
+ } = internal.fiberRefLocally
671
+
672
+ /**
673
+ * @since 2.0.0
674
+ * @category utils
675
+ */
676
+ export const locallyWith: {
677
+ <X>(ref: FiberRef<X>, value: (_: X) => X): <A, E, R>(self: Layer<A, E, R>) => Layer<A, E, R>
678
+ <A, E, R, X>(self: Layer<A, E, R>, ref: FiberRef<X>, value: (_: X) => X): Layer<A, E, R>
679
+ } = internal.fiberRefLocallyWith
680
+
681
+ /**
682
+ * @since 2.0.0
683
+ * @category utils
684
+ */
685
+ export const locallyScoped: <A>(self: FiberRef<A>, value: A) => Layer<never> = internal.fiberRefLocallyScoped
686
+
687
+ /**
688
+ * @since 2.0.0
689
+ * @category utils
690
+ */
691
+ export const fiberRefLocallyScopedWith: <A>(self: FiberRef<A>, value: (_: A) => A) => Layer<never> =
692
+ internal.fiberRefLocallyScopedWith
693
+
694
+ /**
695
+ * Retries constructing this layer according to the specified schedule.
696
+ *
697
+ * @since 2.0.0
698
+ * @category retrying
699
+ */
700
+ export const retry: {
701
+ <X, E, RIn2>(
702
+ schedule: Schedule.Schedule<X, NoInfer<E>, RIn2>
703
+ ): <ROut, RIn>(self: Layer<ROut, E, RIn>) => Layer<ROut, E, RIn2 | RIn>
704
+ <ROut, E, RIn, X, RIn2>(
705
+ self: Layer<ROut, E, RIn>,
706
+ schedule: Schedule.Schedule<X, E, RIn2>
707
+ ): Layer<ROut, E, RIn | RIn2>
708
+ } = internal.retry
709
+
710
+ /**
711
+ * A layer that constructs a scope and closes it when the workflow the layer
712
+ * is provided to completes execution, whether by success, failure, or
713
+ * interruption. This can be used to close a scope when providing a layer to a
714
+ * workflow.
715
+ *
716
+ * @since 2.0.0
717
+ * @category constructors
718
+ */
719
+ export const scope: Layer<Scope.Scope> = internal.scope
720
+
721
+ /**
722
+ * Constructs a layer from the specified scoped effect.
723
+ *
724
+ * @since 2.0.0
725
+ * @category constructors
726
+ */
727
+ export const scoped: {
728
+ <I, S>(
729
+ tag: Context.Tag<I, S>
730
+ ): <E, R>(effect: Effect.Effect<Types.NoInfer<S>, E, R>) => Layer<I, E, Exclude<R, Scope.Scope>>
731
+ <I, S, E, R>(
732
+ tag: Context.Tag<I, S>,
733
+ effect: Effect.Effect<Types.NoInfer<S>, E, R>
734
+ ): Layer<I, E, Exclude<R, Scope.Scope>>
735
+ } = internal.scoped
736
+
737
+ /**
738
+ * Constructs a layer from the specified scoped effect.
739
+ *
740
+ * @since 2.0.0
741
+ * @category constructors
742
+ */
743
+ export const scopedDiscard: <X, E, R>(effect: Effect.Effect<X, E, R>) => Layer<never, E, Exclude<R, Scope.Scope>> =
744
+ internal.scopedDiscard
745
+
746
+ /**
747
+ * Constructs a layer from the specified scoped effect, which must return one
748
+ * or more services.
749
+ *
750
+ * @since 2.0.0
751
+ * @category constructors
752
+ */
753
+ export const scopedContext: <A, E, R>(
754
+ effect: Effect.Effect<Context.Context<A>, E, R>
755
+ ) => Layer<A, E, Exclude<R, Scope.Scope>> = internal.scopedContext
756
+
757
+ /**
758
+ * Constructs a layer that accesses and returns the specified service from the
759
+ * context.
760
+ *
761
+ * @since 2.0.0
762
+ * @category constructors
763
+ */
764
+ export const service: <I, S>(tag: Context.Tag<I, S>) => Layer<I, never, I> = internal.service
765
+
766
+ /**
767
+ * Constructs a layer from the specified value.
768
+ *
769
+ * @since 2.0.0
770
+ * @category constructors
771
+ */
772
+ export const succeed: {
773
+ <I, S>(tag: Context.Tag<I, S>): (resource: Types.NoInfer<S>) => Layer<I>
774
+ <I, S>(tag: Context.Tag<I, S>, resource: Types.NoInfer<S>): Layer<I>
775
+ } = internal.succeed
776
+
777
+ /**
778
+ * Constructs a layer from the specified value, which must return one or more
779
+ * services.
780
+ *
781
+ * @since 2.0.0
782
+ * @category constructors
783
+ */
784
+ export const succeedContext: <A>(context: Context.Context<A>) => Layer<A> = internal.succeedContext
785
+
786
+ /**
787
+ * Lazily constructs a layer. This is useful to avoid infinite recursion when
788
+ * creating layers that refer to themselves.
789
+ *
790
+ * @since 2.0.0
791
+ * @category constructors
792
+ */
793
+ export const suspend: <RIn, E, ROut>(evaluate: LazyArg<Layer<ROut, E, RIn>>) => Layer<ROut, E, RIn> = internal.suspend
794
+
795
+ /**
796
+ * Lazily constructs a layer from the specified value.
797
+ *
798
+ * @since 2.0.0
799
+ * @category constructors
800
+ */
801
+ export const sync: {
802
+ <I, S>(tag: Context.Tag<I, S>): (evaluate: LazyArg<Types.NoInfer<S>>) => Layer<I>
803
+ <I, S>(tag: Context.Tag<I, S>, evaluate: LazyArg<Types.NoInfer<S>>): Layer<I>
804
+ } = internal.sync
805
+
806
+ /**
807
+ * Lazily constructs a layer from the specified value, which must return one or more
808
+ * services.
809
+ *
810
+ * @since 2.0.0
811
+ * @category constructors
812
+ */
813
+ export const syncContext: <A>(evaluate: LazyArg<Context.Context<A>>) => Layer<A> = internal.syncContext
814
+
815
+ /**
816
+ * Performs the specified effect if this layer succeeds.
817
+ *
818
+ * @since 2.0.0
819
+ * @category sequencing
820
+ */
821
+ export const tap: {
822
+ <ROut, XR extends ROut, RIn2, E2, X>(
823
+ f: (context: Context.Context<XR>) => Effect.Effect<X, E2, RIn2>
824
+ ): <RIn, E>(self: Layer<ROut, E, RIn>) => Layer<ROut, E2 | E, RIn2 | RIn>
825
+ <RIn, E, ROut, XR extends ROut, RIn2, E2, X>(
826
+ self: Layer<ROut, E, RIn>,
827
+ f: (context: Context.Context<XR>) => Effect.Effect<X, E2, RIn2>
828
+ ): Layer<ROut, E | E2, RIn | RIn2>
829
+ } = internal.tap
830
+
831
+ /**
832
+ * Performs the specified effect if this layer fails.
833
+ *
834
+ * @since 2.0.0
835
+ * @category sequencing
836
+ */
837
+ export const tapError: {
838
+ <E, XE extends E, RIn2, E2, X>(
839
+ f: (e: XE) => Effect.Effect<X, E2, RIn2>
840
+ ): <RIn, ROut>(self: Layer<ROut, E, RIn>) => Layer<ROut, E | E2, RIn2 | RIn>
841
+ <RIn, E, XE extends E, ROut, RIn2, E2, X>(
842
+ self: Layer<ROut, E, RIn>,
843
+ f: (e: XE) => Effect.Effect<X, E2, RIn2>
844
+ ): Layer<ROut, E | E2, RIn | RIn2>
845
+ } = internal.tapError
846
+
847
+ /**
848
+ * Performs the specified effect if this layer fails.
849
+ *
850
+ * @since 2.0.0
851
+ * @category sequencing
852
+ */
853
+ export const tapErrorCause: {
854
+ <E, XE extends E, RIn2, E2, X>(
855
+ f: (cause: Cause.Cause<XE>) => Effect.Effect<X, E2, RIn2>
856
+ ): <RIn, ROut>(self: Layer<ROut, E, RIn>) => Layer<ROut, E | E2, RIn2 | RIn>
857
+ <RIn, E, XE extends E, ROut, RIn2, E2, X>(
858
+ self: Layer<ROut, E, RIn>,
859
+ f: (cause: Cause.Cause<XE>) => Effect.Effect<X, E2, RIn2>
860
+ ): Layer<ROut, E | E2, RIn | RIn2>
861
+ } = internal.tapErrorCause
862
+
863
+ /**
864
+ * Converts a layer that requires no services into a scoped runtime, which can
865
+ * be used to execute effects.
866
+ *
867
+ * @since 2.0.0
868
+ * @category conversions
869
+ */
870
+ export const toRuntime: <RIn, E, ROut>(
871
+ self: Layer<ROut, E, RIn>
872
+ ) => Effect.Effect<Runtime.Runtime<ROut>, E, Scope.Scope | RIn> = internal.toRuntime
873
+
874
+ /**
875
+ * Converts a layer that requires no services into a scoped runtime, which can
876
+ * be used to execute effects.
877
+ *
878
+ * @since 2.0.0
879
+ * @category conversions
880
+ */
881
+ export const toRuntimeWithMemoMap: {
882
+ (
883
+ memoMap: MemoMap
884
+ ): <RIn, E, ROut>(self: Layer<ROut, E, RIn>) => Effect.Effect<Runtime.Runtime<ROut>, E, Scope.Scope | RIn>
885
+ <RIn, E, ROut>(
886
+ self: Layer<ROut, E, RIn>,
887
+ memoMap: MemoMap
888
+ ): Effect.Effect<Runtime.Runtime<ROut>, E, Scope.Scope | RIn>
889
+ } = internal.toRuntimeWithMemoMap
890
+
891
+ /**
892
+ * Feeds the output services of this builder into the input of the specified
893
+ * builder, resulting in a new builder with the inputs of this builder as
894
+ * well as any leftover inputs, and the outputs of the specified builder.
895
+ *
896
+ * @since 2.0.0
897
+ * @category utils
898
+ */
899
+ export const provide: {
900
+ <RIn, E, ROut>(
901
+ that: Layer<ROut, E, RIn>
902
+ ): <RIn2, E2, ROut2>(self: Layer<ROut2, E2, RIn2>) => Layer<ROut2, E | E2, RIn | Exclude<RIn2, ROut>>
903
+ <const Layers extends readonly [Layer.Any, ...Array<Layer.Any>]>(
904
+ that: Layers
905
+ ): <A, E, R>(
906
+ self: Layer<A, E, R>
907
+ ) => Layer<
908
+ A,
909
+ E | { [k in keyof Layers]: Layer.Error<Layers[k]> }[number],
910
+ | { [k in keyof Layers]: Layer.Context<Layers[k]> }[number]
911
+ | Exclude<R, { [k in keyof Layers]: Layer.Success<Layers[k]> }[number]>
912
+ >
913
+ <RIn2, E2, ROut2, RIn, E, ROut>(
914
+ self: Layer<ROut2, E2, RIn2>,
915
+ that: Layer<ROut, E, RIn>
916
+ ): Layer<ROut2, E | E2, RIn | Exclude<RIn2, ROut>>
917
+ <A, E, R, const Layers extends readonly [Layer.Any, ...Array<Layer.Any>]>(
918
+ self: Layer<A, E, R>,
919
+ that: Layers
920
+ ): Layer<
921
+ A,
922
+ E | { [k in keyof Layers]: Layer.Error<Layers[k]> }[number],
923
+ | { [k in keyof Layers]: Layer.Context<Layers[k]> }[number]
924
+ | Exclude<R, { [k in keyof Layers]: Layer.Success<Layers[k]> }[number]>
925
+ >
926
+ } = internal.provide
927
+
928
+ /**
929
+ * Feeds the output services of this layer into the input of the specified
930
+ * layer, resulting in a new layer with the inputs of this layer, and the
931
+ * outputs of both layers.
932
+ *
933
+ * @since 2.0.0
934
+ * @category utils
935
+ */
936
+ export const provideMerge: {
937
+ <RIn, E, ROut>(
938
+ self: Layer<ROut, E, RIn>
939
+ ): <RIn2, E2, ROut2>(that: Layer<ROut2, E2, RIn2>) => Layer<ROut | ROut2, E | E2, RIn | Exclude<RIn2, ROut>>
940
+ <RIn2, E2, ROut2, RIn, E, ROut>(
941
+ that: Layer<ROut2, E2, RIn2>,
942
+ self: Layer<ROut, E, RIn>
943
+ ): Layer<ROut2 | ROut, E2 | E, RIn | Exclude<RIn2, ROut>>
944
+ } = internal.provideMerge
945
+
946
+ /**
947
+ * Combines this layer with the specified layer concurrently, creating a new layer with merged input types and
948
+ * combined output types using the provided function.
949
+ *
950
+ * @since 2.0.0
951
+ * @category zipping
952
+ */
953
+ export const zipWith: {
954
+ <B, E2, R2, A, C>(
955
+ that: Layer<B, E2, R2>,
956
+ f: (a: Context.Context<A>, b: Context.Context<B>) => Context.Context<C>
957
+ ): <E, R>(self: Layer<A, E, R>) => Layer<C, E2 | E, R2 | R>
958
+ <A, E, R, B, E2, R2, C>(
959
+ self: Layer<A, E, R>,
960
+ that: Layer<B, E2, R2>,
961
+ f: (a: Context.Context<A>, b: Context.Context<B>) => Context.Context<C>
962
+ ): Layer<C, E | E2, R | R2>
963
+ } = internal.zipWith
964
+
965
+ /**
966
+ * @since 2.0.0
967
+ * @category utils
968
+ */
969
+ export const unwrapEffect: <A, E1, R1, E, R>(self: Effect.Effect<Layer<A, E1, R1>, E, R>) => Layer<A, E | E1, R | R1> =
970
+ internal.unwrapEffect
971
+
972
+ /**
973
+ * @since 2.0.0
974
+ * @category utils
975
+ */
976
+ export const unwrapScoped: <A, E1, R1, E, R>(
977
+ self: Effect.Effect<Layer<A, E1, R1>, E, R>
978
+ ) => Layer<A, E | E1, R1 | Exclude<R, Scope.Scope>> = internal.unwrapScoped
979
+
980
+ /**
981
+ * @since 2.0.0
982
+ * @category clock
983
+ */
984
+ export const setClock: <A extends Clock.Clock>(clock: A) => Layer<never> = <A extends Clock.Clock>(
985
+ clock: A
986
+ ): Layer<never> =>
987
+ scopedDiscard(
988
+ fiberRuntime.fiberRefLocallyScopedWith(defaultServices.currentServices, Context.add(clockTag, clock))
989
+ )
990
+
991
+ /**
992
+ * Sets the current `ConfigProvider`.
993
+ *
994
+ * @since 2.0.0
995
+ * @category config
996
+ */
997
+ export const setConfigProvider: (configProvider: ConfigProvider) => Layer<never> = circularLayer.setConfigProvider
998
+
999
+ /**
1000
+ * Adds the provided span to the span stack.
1001
+ *
1002
+ * @since 2.0.0
1003
+ * @category tracing
1004
+ */
1005
+ export const parentSpan: (span: Tracer.AnySpan) => Layer<Tracer.ParentSpan> = circularLayer.parentSpan
1006
+
1007
+ /**
1008
+ * @since 3.15.0
1009
+ * @category Random
1010
+ */
1011
+ export const setRandom = <A extends Random.Random>(random: A): Layer<never> =>
1012
+ scopedDiscard(
1013
+ fiberRuntime.fiberRefLocallyScopedWith(defaultServices.currentServices, Context.add(randomTag, random))
1014
+ )
1015
+
1016
+ /**
1017
+ * @since 2.0.0
1018
+ * @category requests & batching
1019
+ */
1020
+ export const setRequestBatching: (requestBatching: boolean) => Layer<never> = (
1021
+ requestBatching: boolean
1022
+ ) =>
1023
+ scopedDiscard(
1024
+ fiberRuntime.fiberRefLocallyScoped(core.currentRequestBatching, requestBatching)
1025
+ )
1026
+
1027
+ /**
1028
+ * @since 2.0.0
1029
+ * @category requests & batching
1030
+ */
1031
+ export const setRequestCaching: (requestCaching: boolean) => Layer<never> = (
1032
+ requestCaching: boolean
1033
+ ) =>
1034
+ scopedDiscard(
1035
+ fiberRuntime.fiberRefLocallyScoped(query.currentCacheEnabled, requestCaching)
1036
+ )
1037
+
1038
+ /**
1039
+ * @since 2.0.0
1040
+ * @category requests & batching
1041
+ */
1042
+ export const setRequestCache: {
1043
+ <E, R>(
1044
+ cache: Effect.Effect<Request.Cache, E, R>
1045
+ ): Layer<never, E, Exclude<R, Scope.Scope>>
1046
+ (
1047
+ cache: Request.Cache
1048
+ ): Layer<never>
1049
+ } = (<E, R>(cache: Request.Cache | Effect.Effect<Request.Cache, E, R>) =>
1050
+ scopedDiscard(
1051
+ core.isEffect(cache) ?
1052
+ core.flatMap(cache, (x) => fiberRuntime.fiberRefLocallyScoped(query.currentCache as any, x)) :
1053
+ fiberRuntime.fiberRefLocallyScoped(query.currentCache as any, cache)
1054
+ )) as any
1055
+
1056
+ /**
1057
+ * @since 2.0.0
1058
+ * @category scheduler
1059
+ */
1060
+ export const setScheduler: (scheduler: Scheduler.Scheduler) => Layer<never> = (
1061
+ scheduler: Scheduler.Scheduler
1062
+ ): Layer<never> =>
1063
+ scopedDiscard(
1064
+ fiberRuntime.fiberRefLocallyScoped(Scheduler.currentScheduler, scheduler)
1065
+ )
1066
+
1067
+ /**
1068
+ * Create and add a span to the current span stack.
1069
+ *
1070
+ * The span is ended when the Layer is released.
1071
+ *
1072
+ * @since 2.0.0
1073
+ * @category tracing
1074
+ */
1075
+ export const span: (
1076
+ name: string,
1077
+ options?: Tracer.SpanOptions & {
1078
+ readonly onEnd?:
1079
+ | ((span: Tracer.Span, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>)
1080
+ | undefined
1081
+ }
1082
+ ) => Layer<Tracer.ParentSpan> = circularLayer.span
1083
+
1084
+ /**
1085
+ * Create a Layer that sets the current Tracer
1086
+ *
1087
+ * @since 2.0.0
1088
+ * @category tracing
1089
+ */
1090
+ export const setTracer: (tracer: Tracer.Tracer) => Layer<never> = circularLayer.setTracer
1091
+
1092
+ /**
1093
+ * @since 2.0.0
1094
+ * @category tracing
1095
+ */
1096
+ export const setTracerEnabled: (enabled: boolean) => Layer<never> = (enabled: boolean) =>
1097
+ scopedDiscard(
1098
+ fiberRuntime.fiberRefLocallyScoped(core.currentTracerEnabled, enabled)
1099
+ )
1100
+
1101
+ /**
1102
+ * @since 2.0.0
1103
+ * @category tracing
1104
+ */
1105
+ export const setTracerTiming: (enabled: boolean) => Layer<never> = (enabled: boolean) =>
1106
+ scopedDiscard(
1107
+ fiberRuntime.fiberRefLocallyScoped(core.currentTracerTimingEnabled, enabled)
1108
+ )
1109
+
1110
+ /**
1111
+ * @since 2.0.0
1112
+ * @category logging
1113
+ */
1114
+ export const setUnhandledErrorLogLevel: (level: Option.Option<LogLevel>) => Layer<never> = (
1115
+ level: Option.Option<LogLevel>
1116
+ ): Layer<never> =>
1117
+ scopedDiscard(
1118
+ fiberRuntime.fiberRefLocallyScoped(core.currentUnhandledErrorLogLevel, level)
1119
+ )
1120
+
1121
+ /**
1122
+ * @since 3.17.0
1123
+ * @category logging
1124
+ */
1125
+ export const setVersionMismatchErrorLogLevel: (level: Option.Option<LogLevel>) => Layer<never> = (
1126
+ level: Option.Option<LogLevel>
1127
+ ): Layer<never> =>
1128
+ scopedDiscard(
1129
+ fiberRuntime.fiberRefLocallyScoped(core.currentVersionMismatchErrorLogLevel, level)
1130
+ )
1131
+
1132
+ /**
1133
+ * @since 2.0.0
1134
+ * @category tracing
1135
+ */
1136
+ export const withSpan: {
1137
+ (
1138
+ name: string,
1139
+ options?: Tracer.SpanOptions & {
1140
+ readonly onEnd?:
1141
+ | ((span: Tracer.Span, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>)
1142
+ | undefined
1143
+ }
1144
+ ): <A, E, R>(self: Layer<A, E, R>) => Layer<A, E, Exclude<R, Tracer.ParentSpan>>
1145
+ <A, E, R>(
1146
+ self: Layer<A, E, R>,
1147
+ name: string,
1148
+ options?: Tracer.SpanOptions & {
1149
+ readonly onEnd?:
1150
+ | ((span: Tracer.Span, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>)
1151
+ | undefined
1152
+ }
1153
+ ): Layer<A, E, Exclude<R, Tracer.ParentSpan>>
1154
+ } = internal.withSpan
1155
+
1156
+ /**
1157
+ * @since 2.0.0
1158
+ * @category tracing
1159
+ */
1160
+ export const withParentSpan: {
1161
+ (span: Tracer.AnySpan): <A, E, R>(self: Layer<A, E, R>) => Layer<A, E, Exclude<R, Tracer.ParentSpan>>
1162
+ <A, E, R>(self: Layer<A, E, R>, span: Tracer.AnySpan): Layer<A, E, Exclude<R, Tracer.ParentSpan>>
1163
+ } = internal.withParentSpan
1164
+
1165
+ // -----------------------------------------------------------------------------
1166
+ // memo map
1167
+ // -----------------------------------------------------------------------------
1168
+
1169
+ /**
1170
+ * Constructs a `MemoMap` that can be used to build additional layers.
1171
+ *
1172
+ * @since 2.0.0
1173
+ * @category memo map
1174
+ */
1175
+ export const makeMemoMap: Effect.Effect<MemoMap> = internal.makeMemoMap
1176
+
1177
+ /**
1178
+ * Builds a layer into an `Effect` value, using the specified `MemoMap` to memoize
1179
+ * the layer construction.
1180
+ *
1181
+ * @since 2.0.0
1182
+ * @category memo map
1183
+ */
1184
+ export const buildWithMemoMap: {
1185
+ (
1186
+ memoMap: MemoMap,
1187
+ scope: Scope.Scope
1188
+ ): <RIn, E, ROut>(self: Layer<ROut, E, RIn>) => Effect.Effect<Context.Context<ROut>, E, RIn>
1189
+ <RIn, E, ROut>(
1190
+ self: Layer<ROut, E, RIn>,
1191
+ memoMap: MemoMap,
1192
+ scope: Scope.Scope
1193
+ ): Effect.Effect<Context.Context<ROut>, E, RIn>
1194
+ } = internal.buildWithMemoMap
1195
+
1196
+ /**
1197
+ * Updates a service in the context with a new implementation.
1198
+ *
1199
+ * **Details**
1200
+ *
1201
+ * This function modifies the existing implementation of a service in the
1202
+ * context. It retrieves the current service, applies the provided
1203
+ * transformation function `f`, and replaces the old service with the
1204
+ * transformed one.
1205
+ *
1206
+ * **When to Use**
1207
+ *
1208
+ * This is useful for adapting or extending a service's behavior during the
1209
+ * creation of a layer.
1210
+ *
1211
+ * @since 3.13.0
1212
+ * @category utils
1213
+ */
1214
+ export const updateService = dual<
1215
+ <I, A>(
1216
+ tag: Context.Tag<I, A>,
1217
+ f: (a: A) => A
1218
+ ) => <A1, E1, R1>(layer: Layer<A1, E1, R1>) => Layer<A1, E1, I | R1>,
1219
+ <A1, E1, R1, I, A>(
1220
+ layer: Layer<A1, E1, R1>,
1221
+ tag: Context.Tag<I, A>,
1222
+ f: (a: A) => A
1223
+ ) => Layer<A1, E1, I | R1>
1224
+ >(3, (layer, tag, f) =>
1225
+ provide(
1226
+ layer,
1227
+ map(context(), (c) => Context.add(c, tag, f(Context.unsafeGet(c, tag))))
1228
+ ))