@clayroach/effect 3.19.14-source-capture.6 → 3.19.14-source-capture.8

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 (371) hide show
  1. package/dist/cjs/Utils.js +1 -1
  2. package/dist/cjs/Utils.js.map +1 -1
  3. package/dist/cjs/internal/clock.js +1 -1
  4. package/dist/cjs/internal/clock.js.map +1 -1
  5. package/dist/esm/Utils.js +1 -1
  6. package/dist/esm/Utils.js.map +1 -1
  7. package/dist/esm/internal/clock.js +1 -1
  8. package/dist/esm/internal/clock.js.map +1 -1
  9. package/package.json +1 -1
  10. package/src/Arbitrary.ts +0 -1101
  11. package/src/Array.ts +0 -3589
  12. package/src/BigDecimal.ts +0 -1349
  13. package/src/BigInt.ts +0 -643
  14. package/src/Boolean.ts +0 -287
  15. package/src/Brand.ts +0 -360
  16. package/src/Cache.ts +0 -281
  17. package/src/Cause.ts +0 -1555
  18. package/src/Channel.ts +0 -2355
  19. package/src/ChildExecutorDecision.ts +0 -146
  20. package/src/Chunk.ts +0 -1495
  21. package/src/Clock.ts +0 -111
  22. package/src/Config.ts +0 -542
  23. package/src/ConfigError.ts +0 -270
  24. package/src/ConfigProvider.ts +0 -333
  25. package/src/ConfigProviderPathPatch.ts +0 -100
  26. package/src/Console.ts +0 -226
  27. package/src/Context.ts +0 -585
  28. package/src/Cron.ts +0 -706
  29. package/src/Data.ts +0 -596
  30. package/src/DateTime.ts +0 -1686
  31. package/src/DefaultServices.ts +0 -34
  32. package/src/Deferred.ts +0 -301
  33. package/src/Differ.ts +0 -450
  34. package/src/Duration.ts +0 -1000
  35. package/src/Effect.ts +0 -14839
  36. package/src/Effectable.ts +0 -107
  37. package/src/Either.ts +0 -1040
  38. package/src/Encoding.ts +0 -195
  39. package/src/Equal.ts +0 -98
  40. package/src/Equivalence.ts +0 -235
  41. package/src/ExecutionPlan.ts +0 -308
  42. package/src/ExecutionStrategy.ts +0 -119
  43. package/src/Exit.ts +0 -467
  44. package/src/FastCheck.ts +0 -9
  45. package/src/Fiber.ts +0 -744
  46. package/src/FiberHandle.ts +0 -540
  47. package/src/FiberId.ts +0 -195
  48. package/src/FiberMap.ts +0 -656
  49. package/src/FiberRef.ts +0 -431
  50. package/src/FiberRefs.ts +0 -204
  51. package/src/FiberRefsPatch.ts +0 -105
  52. package/src/FiberSet.ts +0 -491
  53. package/src/FiberStatus.ts +0 -108
  54. package/src/Function.ts +0 -1222
  55. package/src/GlobalValue.ts +0 -53
  56. package/src/Graph.ts +0 -3732
  57. package/src/GroupBy.ts +0 -103
  58. package/src/HKT.ts +0 -45
  59. package/src/Hash.ts +0 -195
  60. package/src/HashMap.ts +0 -519
  61. package/src/HashRing.ts +0 -317
  62. package/src/HashSet.ts +0 -2346
  63. package/src/Inspectable.ts +0 -287
  64. package/src/Iterable.ts +0 -1119
  65. package/src/JSONSchema.ts +0 -1044
  66. package/src/KeyedPool.ts +0 -167
  67. package/src/Layer.ts +0 -1251
  68. package/src/LayerMap.ts +0 -436
  69. package/src/List.ts +0 -977
  70. package/src/LogLevel.ts +0 -285
  71. package/src/LogSpan.ts +0 -25
  72. package/src/Logger.ts +0 -702
  73. package/src/Mailbox.ts +0 -268
  74. package/src/ManagedRuntime.ts +0 -180
  75. package/src/Match.ts +0 -1477
  76. package/src/MergeDecision.ts +0 -95
  77. package/src/MergeState.ts +0 -172
  78. package/src/MergeStrategy.ts +0 -107
  79. package/src/Metric.ts +0 -780
  80. package/src/MetricBoundaries.ts +0 -69
  81. package/src/MetricHook.ts +0 -151
  82. package/src/MetricKey.ts +0 -224
  83. package/src/MetricKeyType.ts +0 -262
  84. package/src/MetricLabel.ts +0 -47
  85. package/src/MetricPair.ts +0 -71
  86. package/src/MetricPolling.ts +0 -148
  87. package/src/MetricRegistry.ts +0 -48
  88. package/src/MetricState.ts +0 -257
  89. package/src/Micro.ts +0 -4405
  90. package/src/ModuleVersion.ts +0 -18
  91. package/src/MutableHashMap.ts +0 -411
  92. package/src/MutableHashSet.ts +0 -706
  93. package/src/MutableList.ts +0 -297
  94. package/src/MutableQueue.ts +0 -227
  95. package/src/MutableRef.ts +0 -202
  96. package/src/NonEmptyIterable.ts +0 -32
  97. package/src/Number.ts +0 -1071
  98. package/src/Option.ts +0 -2170
  99. package/src/Order.ts +0 -373
  100. package/src/Ordering.ts +0 -111
  101. package/src/ParseResult.ts +0 -2031
  102. package/src/PartitionedSemaphore.ts +0 -200
  103. package/src/Pipeable.ts +0 -566
  104. package/src/Pool.ts +0 -204
  105. package/src/Predicate.ts +0 -1405
  106. package/src/Pretty.ts +0 -205
  107. package/src/PrimaryKey.ts +0 -23
  108. package/src/PubSub.ts +0 -182
  109. package/src/Queue.ts +0 -644
  110. package/src/Random.ts +0 -204
  111. package/src/RateLimiter.ts +0 -138
  112. package/src/RcMap.ts +0 -141
  113. package/src/RcRef.ts +0 -122
  114. package/src/Readable.ts +0 -93
  115. package/src/Record.ts +0 -1274
  116. package/src/RedBlackTree.ts +0 -421
  117. package/src/Redacted.ts +0 -144
  118. package/src/Ref.ts +0 -180
  119. package/src/RegExp.ts +0 -38
  120. package/src/Reloadable.ts +0 -127
  121. package/src/Request.ts +0 -347
  122. package/src/RequestBlock.ts +0 -118
  123. package/src/RequestResolver.ts +0 -366
  124. package/src/Resource.ts +0 -119
  125. package/src/Runtime.ts +0 -383
  126. package/src/RuntimeFlags.ts +0 -368
  127. package/src/RuntimeFlagsPatch.ts +0 -183
  128. package/src/STM.ts +0 -2045
  129. package/src/Schedule.ts +0 -2219
  130. package/src/ScheduleDecision.ts +0 -62
  131. package/src/ScheduleInterval.ts +0 -151
  132. package/src/ScheduleIntervals.ts +0 -122
  133. package/src/Scheduler.ts +0 -353
  134. package/src/Schema.ts +0 -10914
  135. package/src/SchemaAST.ts +0 -3043
  136. package/src/Scope.ts +0 -204
  137. package/src/ScopedCache.ts +0 -151
  138. package/src/ScopedRef.ts +0 -117
  139. package/src/Secret.ts +0 -88
  140. package/src/SingleProducerAsyncInput.ts +0 -67
  141. package/src/Sink.ts +0 -1461
  142. package/src/SortedMap.ts +0 -287
  143. package/src/SortedSet.ts +0 -390
  144. package/src/Stream.ts +0 -6468
  145. package/src/StreamEmit.ts +0 -136
  146. package/src/StreamHaltStrategy.ts +0 -123
  147. package/src/Streamable.ts +0 -45
  148. package/src/String.ts +0 -778
  149. package/src/Struct.ts +0 -243
  150. package/src/Subscribable.ts +0 -100
  151. package/src/SubscriptionRef.ts +0 -298
  152. package/src/Supervisor.ts +0 -240
  153. package/src/Symbol.ts +0 -29
  154. package/src/SynchronizedRef.ts +0 -270
  155. package/src/TArray.ts +0 -495
  156. package/src/TDeferred.ts +0 -100
  157. package/src/TMap.ts +0 -515
  158. package/src/TPriorityQueue.ts +0 -223
  159. package/src/TPubSub.ts +0 -200
  160. package/src/TQueue.ts +0 -432
  161. package/src/TRandom.ts +0 -129
  162. package/src/TReentrantLock.ts +0 -224
  163. package/src/TRef.ts +0 -178
  164. package/src/TSemaphore.ts +0 -129
  165. package/src/TSet.ts +0 -365
  166. package/src/TSubscriptionRef.ts +0 -192
  167. package/src/Take.ts +0 -258
  168. package/src/TestAnnotation.ts +0 -158
  169. package/src/TestAnnotationMap.ts +0 -119
  170. package/src/TestAnnotations.ts +0 -117
  171. package/src/TestClock.ts +0 -556
  172. package/src/TestConfig.ts +0 -47
  173. package/src/TestContext.ts +0 -36
  174. package/src/TestLive.ts +0 -53
  175. package/src/TestServices.ts +0 -390
  176. package/src/TestSized.ts +0 -55
  177. package/src/Tracer.ts +0 -198
  178. package/src/Trie.ts +0 -840
  179. package/src/Tuple.ts +0 -305
  180. package/src/Types.ts +0 -353
  181. package/src/Unify.ts +0 -113
  182. package/src/UpstreamPullRequest.ts +0 -117
  183. package/src/UpstreamPullStrategy.ts +0 -121
  184. package/src/Utils.ts +0 -809
  185. package/src/index.ts +0 -1561
  186. package/src/internal/array.ts +0 -8
  187. package/src/internal/blockedRequests.ts +0 -520
  188. package/src/internal/cache.ts +0 -733
  189. package/src/internal/cause.ts +0 -1050
  190. package/src/internal/channel/channelExecutor.ts +0 -1200
  191. package/src/internal/channel/channelState.ts +0 -134
  192. package/src/internal/channel/childExecutorDecision.ts +0 -96
  193. package/src/internal/channel/continuation.ts +0 -200
  194. package/src/internal/channel/mergeDecision.ts +0 -113
  195. package/src/internal/channel/mergeState.ts +0 -120
  196. package/src/internal/channel/mergeStrategy.ts +0 -72
  197. package/src/internal/channel/singleProducerAsyncInput.ts +0 -259
  198. package/src/internal/channel/subexecutor.ts +0 -229
  199. package/src/internal/channel/upstreamPullRequest.ts +0 -84
  200. package/src/internal/channel/upstreamPullStrategy.ts +0 -87
  201. package/src/internal/channel.ts +0 -2603
  202. package/src/internal/clock.ts +0 -95
  203. package/src/internal/completedRequestMap.ts +0 -9
  204. package/src/internal/concurrency.ts +0 -54
  205. package/src/internal/config.ts +0 -716
  206. package/src/internal/configError.ts +0 -304
  207. package/src/internal/configProvider/pathPatch.ts +0 -97
  208. package/src/internal/configProvider.ts +0 -799
  209. package/src/internal/console.ts +0 -153
  210. package/src/internal/context.ts +0 -337
  211. package/src/internal/core-effect.ts +0 -2293
  212. package/src/internal/core-stream.ts +0 -998
  213. package/src/internal/core.ts +0 -3273
  214. package/src/internal/data.ts +0 -36
  215. package/src/internal/dataSource.ts +0 -327
  216. package/src/internal/dateTime.ts +0 -1277
  217. package/src/internal/defaultServices/console.ts +0 -100
  218. package/src/internal/defaultServices.ts +0 -163
  219. package/src/internal/deferred.ts +0 -46
  220. package/src/internal/differ/chunkPatch.ts +0 -211
  221. package/src/internal/differ/contextPatch.ts +0 -232
  222. package/src/internal/differ/hashMapPatch.ts +0 -220
  223. package/src/internal/differ/hashSetPatch.ts +0 -176
  224. package/src/internal/differ/orPatch.ts +0 -311
  225. package/src/internal/differ/readonlyArrayPatch.ts +0 -210
  226. package/src/internal/differ.ts +0 -200
  227. package/src/internal/doNotation.ts +0 -80
  228. package/src/internal/effect/circular.ts +0 -905
  229. package/src/internal/effectable.ts +0 -131
  230. package/src/internal/either.ts +0 -110
  231. package/src/internal/encoding/base64.ts +0 -286
  232. package/src/internal/encoding/base64Url.ts +0 -29
  233. package/src/internal/encoding/common.ts +0 -51
  234. package/src/internal/encoding/hex.ts +0 -315
  235. package/src/internal/errors.ts +0 -7
  236. package/src/internal/executionPlan.ts +0 -114
  237. package/src/internal/executionStrategy.ts +0 -74
  238. package/src/internal/fiber.ts +0 -388
  239. package/src/internal/fiberId.ts +0 -267
  240. package/src/internal/fiberMessage.ts +0 -82
  241. package/src/internal/fiberRefs/patch.ts +0 -144
  242. package/src/internal/fiberRefs.ts +0 -297
  243. package/src/internal/fiberRuntime.ts +0 -3915
  244. package/src/internal/fiberScope.ts +0 -71
  245. package/src/internal/fiberStatus.ts +0 -119
  246. package/src/internal/groupBy.ts +0 -530
  247. package/src/internal/hashMap/array.ts +0 -49
  248. package/src/internal/hashMap/bitwise.ts +0 -32
  249. package/src/internal/hashMap/config.ts +0 -14
  250. package/src/internal/hashMap/keySet.ts +0 -8
  251. package/src/internal/hashMap/node.ts +0 -391
  252. package/src/internal/hashMap.ts +0 -586
  253. package/src/internal/hashSet.ts +0 -323
  254. package/src/internal/keyedPool.ts +0 -244
  255. package/src/internal/layer/circular.ts +0 -228
  256. package/src/internal/layer.ts +0 -1487
  257. package/src/internal/logSpan.ts +0 -20
  258. package/src/internal/logger-circular.ts +0 -24
  259. package/src/internal/logger.ts +0 -485
  260. package/src/internal/mailbox.ts +0 -561
  261. package/src/internal/managedRuntime/circular.ts +0 -6
  262. package/src/internal/managedRuntime.ts +0 -134
  263. package/src/internal/matcher.ts +0 -652
  264. package/src/internal/metric/boundaries.ts +0 -75
  265. package/src/internal/metric/hook.ts +0 -483
  266. package/src/internal/metric/key.ts +0 -167
  267. package/src/internal/metric/keyType.ts +0 -238
  268. package/src/internal/metric/label.ts +0 -41
  269. package/src/internal/metric/pair.ts +0 -48
  270. package/src/internal/metric/polling.ts +0 -149
  271. package/src/internal/metric/registry.ts +0 -187
  272. package/src/internal/metric/state.ts +0 -290
  273. package/src/internal/metric.ts +0 -577
  274. package/src/internal/opCodes/cause.ts +0 -35
  275. package/src/internal/opCodes/channel.ts +0 -83
  276. package/src/internal/opCodes/channelChildExecutorDecision.ts +0 -17
  277. package/src/internal/opCodes/channelMergeDecision.ts +0 -11
  278. package/src/internal/opCodes/channelMergeState.ts +0 -17
  279. package/src/internal/opCodes/channelMergeStrategy.ts +0 -11
  280. package/src/internal/opCodes/channelState.ts +0 -23
  281. package/src/internal/opCodes/channelUpstreamPullRequest.ts +0 -11
  282. package/src/internal/opCodes/channelUpstreamPullStrategy.ts +0 -11
  283. package/src/internal/opCodes/config.ts +0 -65
  284. package/src/internal/opCodes/configError.ts +0 -35
  285. package/src/internal/opCodes/continuation.ts +0 -11
  286. package/src/internal/opCodes/deferred.ts +0 -11
  287. package/src/internal/opCodes/effect.ts +0 -89
  288. package/src/internal/opCodes/layer.ts +0 -59
  289. package/src/internal/opCodes/streamHaltStrategy.ts +0 -23
  290. package/src/internal/option.ts +0 -80
  291. package/src/internal/pool.ts +0 -432
  292. package/src/internal/pubsub.ts +0 -1762
  293. package/src/internal/query.ts +0 -204
  294. package/src/internal/queue.ts +0 -766
  295. package/src/internal/random.ts +0 -161
  296. package/src/internal/rateLimiter.ts +0 -93
  297. package/src/internal/rcMap.ts +0 -285
  298. package/src/internal/rcRef.ts +0 -192
  299. package/src/internal/redBlackTree/iterator.ts +0 -200
  300. package/src/internal/redBlackTree/node.ts +0 -68
  301. package/src/internal/redBlackTree.ts +0 -1245
  302. package/src/internal/redacted.ts +0 -73
  303. package/src/internal/ref.ts +0 -171
  304. package/src/internal/reloadable.ts +0 -140
  305. package/src/internal/request.ts +0 -177
  306. package/src/internal/resource.ts +0 -76
  307. package/src/internal/ringBuffer.ts +0 -68
  308. package/src/internal/runtime.ts +0 -558
  309. package/src/internal/runtimeFlags.ts +0 -188
  310. package/src/internal/runtimeFlagsPatch.ts +0 -103
  311. package/src/internal/schedule/decision.ts +0 -47
  312. package/src/internal/schedule/interval.ts +0 -101
  313. package/src/internal/schedule/intervals.ts +0 -180
  314. package/src/internal/schedule.ts +0 -2199
  315. package/src/internal/schema/errors.ts +0 -191
  316. package/src/internal/schema/schemaId.ts +0 -106
  317. package/src/internal/schema/util.ts +0 -50
  318. package/src/internal/scopedCache.ts +0 -644
  319. package/src/internal/scopedRef.ts +0 -118
  320. package/src/internal/secret.ts +0 -89
  321. package/src/internal/singleShotGen.ts +0 -35
  322. package/src/internal/sink.ts +0 -2120
  323. package/src/internal/stack.ts +0 -10
  324. package/src/internal/stm/core.ts +0 -817
  325. package/src/internal/stm/entry.ts +0 -59
  326. package/src/internal/stm/journal.ts +0 -123
  327. package/src/internal/stm/opCodes/stm.ts +0 -71
  328. package/src/internal/stm/opCodes/stmState.ts +0 -17
  329. package/src/internal/stm/opCodes/strategy.ts +0 -17
  330. package/src/internal/stm/opCodes/tExit.ts +0 -29
  331. package/src/internal/stm/opCodes/tryCommit.ts +0 -11
  332. package/src/internal/stm/stm.ts +0 -1453
  333. package/src/internal/stm/stmState.ts +0 -136
  334. package/src/internal/stm/tArray.ts +0 -550
  335. package/src/internal/stm/tDeferred.ts +0 -81
  336. package/src/internal/stm/tExit.ts +0 -190
  337. package/src/internal/stm/tMap.ts +0 -824
  338. package/src/internal/stm/tPriorityQueue.ts +0 -267
  339. package/src/internal/stm/tPubSub.ts +0 -551
  340. package/src/internal/stm/tQueue.ts +0 -393
  341. package/src/internal/stm/tRandom.ts +0 -140
  342. package/src/internal/stm/tReentrantLock.ts +0 -352
  343. package/src/internal/stm/tRef.ts +0 -195
  344. package/src/internal/stm/tSemaphore.ts +0 -113
  345. package/src/internal/stm/tSet.ts +0 -259
  346. package/src/internal/stm/tSubscriptionRef.ts +0 -286
  347. package/src/internal/stm/tryCommit.ts +0 -34
  348. package/src/internal/stm/txnId.ts +0 -14
  349. package/src/internal/stm/versioned.ts +0 -4
  350. package/src/internal/stream/debounceState.ts +0 -57
  351. package/src/internal/stream/emit.ts +0 -123
  352. package/src/internal/stream/haltStrategy.ts +0 -94
  353. package/src/internal/stream/handoff.ts +0 -187
  354. package/src/internal/stream/handoffSignal.ts +0 -59
  355. package/src/internal/stream/pull.ts +0 -34
  356. package/src/internal/stream/sinkEndReason.ts +0 -30
  357. package/src/internal/stream/zipAllState.ts +0 -88
  358. package/src/internal/stream/zipChunksState.ts +0 -56
  359. package/src/internal/stream.ts +0 -8801
  360. package/src/internal/string-utils.ts +0 -107
  361. package/src/internal/subscriptionRef.ts +0 -138
  362. package/src/internal/supervisor/patch.ts +0 -190
  363. package/src/internal/supervisor.ts +0 -303
  364. package/src/internal/synchronizedRef.ts +0 -114
  365. package/src/internal/take.ts +0 -199
  366. package/src/internal/testing/sleep.ts +0 -27
  367. package/src/internal/testing/suspendedWarningData.ts +0 -85
  368. package/src/internal/testing/warningData.ts +0 -94
  369. package/src/internal/tracer.ts +0 -293
  370. package/src/internal/trie.ts +0 -722
  371. package/src/internal/version.ts +0 -7
@@ -1,1487 +0,0 @@
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 enableSourceCapture: Layer.Layer<never> =
968
- fiberRefLocallyScoped(core.currentCaptureStackTraces, true)
969
-
970
- /** @internal */
971
- export const scope: Layer.Layer<Scope.Scope> = scopedContext(
972
- core.map(
973
- fiberRuntime.acquireRelease(
974
- fiberRuntime.scopeMake(),
975
- (scope, exit) => scope.close(exit)
976
- ),
977
- (scope) => Context.make(Scope.Scope, scope)
978
- )
979
- )
980
-
981
- /** @internal */
982
- export const service = <I, S>(
983
- tag: Context.Tag<I, S>
984
- ): Layer.Layer<I, never, I> => fromEffect(tag, tag)
985
-
986
- /** @internal */
987
- export const succeed = dual<
988
- <I, S>(
989
- tag: Context.Tag<I, S>
990
- ) => (
991
- resource: Types.NoInfer<S>
992
- ) => Layer.Layer<I>,
993
- <I, S>(
994
- tag: Context.Tag<I, S>,
995
- resource: Types.NoInfer<S>
996
- ) => Layer.Layer<I>
997
- >(2, (a, b) => {
998
- const tagFirst = Context.isTag(a)
999
- const tag = (tagFirst ? a : b) as Context.Tag<unknown, unknown>
1000
- const resource = tagFirst ? b : a
1001
- return fromEffectContext(core.succeed(Context.make(tag, resource)))
1002
- })
1003
-
1004
- /** @internal */
1005
- export const succeedContext = <A>(
1006
- context: Context.Context<A>
1007
- ): Layer.Layer<A> => {
1008
- return fromEffectContext(core.succeed(context))
1009
- }
1010
-
1011
- /** @internal */
1012
- export const empty = succeedContext(Context.empty())
1013
-
1014
- /** @internal */
1015
- export const suspend = <RIn, E, ROut>(
1016
- evaluate: LazyArg<Layer.Layer<ROut, E, RIn>>
1017
- ): Layer.Layer<ROut, E, RIn> => {
1018
- const suspend = Object.create(proto)
1019
- suspend._op_layer = OpCodes.OP_SUSPEND
1020
- suspend.evaluate = evaluate
1021
- return suspend
1022
- }
1023
-
1024
- /** @internal */
1025
- export const sync = dual<
1026
- <I, S>(
1027
- tag: Context.Tag<I, S>
1028
- ) => (
1029
- evaluate: LazyArg<Types.NoInfer<S>>
1030
- ) => Layer.Layer<I>,
1031
- <I, S>(
1032
- tag: Context.Tag<I, S>,
1033
- evaluate: LazyArg<Types.NoInfer<S>>
1034
- ) => Layer.Layer<I>
1035
- >(2, (a, b) => {
1036
- const tagFirst = Context.isTag(a)
1037
- const tag = (tagFirst ? a : b) as Context.Tag<unknown, unknown>
1038
- const evaluate = tagFirst ? b : a
1039
- return fromEffectContext(core.sync(() => Context.make(tag, evaluate())))
1040
- })
1041
-
1042
- /** @internal */
1043
- export const syncContext = <A>(evaluate: LazyArg<Context.Context<A>>): Layer.Layer<A> => {
1044
- return fromEffectContext(core.sync(evaluate))
1045
- }
1046
-
1047
- /** @internal */
1048
- export const tap = dual<
1049
- <ROut, XR extends ROut, RIn2, E2, X>(
1050
- f: (context: Context.Context<XR>) => Effect.Effect<X, E2, RIn2>
1051
- ) => <RIn, E>(self: Layer.Layer<ROut, E, RIn>) => Layer.Layer<ROut, E | E2, RIn | RIn2>,
1052
- <RIn, E, ROut, XR extends ROut, RIn2, E2, X>(
1053
- self: Layer.Layer<ROut, E, RIn>,
1054
- f: (context: Context.Context<XR>) => Effect.Effect<X, E2, RIn2>
1055
- ) => Layer.Layer<ROut, E | E2, RIn | RIn2>
1056
- >(2, (self, f) => flatMap(self, (context) => fromEffectContext(core.as(f(context), context))))
1057
-
1058
- /** @internal */
1059
- export const tapError = dual<
1060
- <E, XE extends E, RIn2, E2, X>(
1061
- f: (e: XE) => Effect.Effect<X, E2, RIn2>
1062
- ) => <RIn, ROut>(self: Layer.Layer<ROut, E, RIn>) => Layer.Layer<ROut, E | E2, RIn | RIn2>,
1063
- <RIn, E, XE extends E, ROut, RIn2, E2, X>(
1064
- self: Layer.Layer<ROut, E, RIn>,
1065
- f: (e: XE) => Effect.Effect<X, E2, RIn2>
1066
- ) => Layer.Layer<ROut, E | E2, RIn | RIn2>
1067
- >(2, (self, f) =>
1068
- catchAll(
1069
- self,
1070
- (e) => fromEffectContext(core.flatMap(f(e as any), () => core.fail(e)))
1071
- ))
1072
-
1073
- /** @internal */
1074
- export const tapErrorCause = dual<
1075
- <E, XE extends E, RIn2, E2, X>(
1076
- f: (cause: Cause.Cause<XE>) => Effect.Effect<X, E2, RIn2>
1077
- ) => <RIn, ROut>(self: Layer.Layer<ROut, E, RIn>) => Layer.Layer<ROut, E | E2, RIn | RIn2>,
1078
- <RIn, E, XE extends E, ROut, RIn2, E2, X>(
1079
- self: Layer.Layer<ROut, E, RIn>,
1080
- f: (cause: Cause.Cause<XE>) => Effect.Effect<X, E2, RIn2>
1081
- ) => Layer.Layer<ROut, E | E2, RIn | RIn2>
1082
- >(2, (self, f) =>
1083
- catchAllCause(
1084
- self,
1085
- (cause) => fromEffectContext(core.flatMap(f(cause as any), () => core.failCause(cause)))
1086
- ))
1087
-
1088
- /** @internal */
1089
- export const toRuntime = <RIn, E, ROut>(
1090
- self: Layer.Layer<ROut, E, RIn>
1091
- ): Effect.Effect<Runtime.Runtime<ROut>, E, RIn | Scope.Scope> =>
1092
- pipe(
1093
- fiberRuntime.scopeWith((scope) => buildWithScope(self, scope)),
1094
- core.flatMap((context) =>
1095
- pipe(
1096
- runtime.runtime<ROut>(),
1097
- core.provideContext(context)
1098
- )
1099
- )
1100
- )
1101
-
1102
- /** @internal */
1103
- export const toRuntimeWithMemoMap = dual<
1104
- (
1105
- memoMap: Layer.MemoMap
1106
- ) => <RIn, E, ROut>(self: Layer.Layer<ROut, E, RIn>) => Effect.Effect<Runtime.Runtime<ROut>, E, RIn | Scope.Scope>,
1107
- <RIn, E, ROut>(
1108
- self: Layer.Layer<ROut, E, RIn>,
1109
- memoMap: Layer.MemoMap
1110
- ) => Effect.Effect<Runtime.Runtime<ROut>, E, RIn | Scope.Scope>
1111
- >(2, (self, memoMap) =>
1112
- core.flatMap(
1113
- fiberRuntime.scopeWith((scope) => buildWithMemoMap(self, memoMap, scope)),
1114
- (context) =>
1115
- pipe(
1116
- runtime.runtime<any>(),
1117
- core.provideContext(context)
1118
- )
1119
- ))
1120
-
1121
- /** @internal */
1122
- export const provide = dual<
1123
- {
1124
- <RIn, E, ROut>(
1125
- that: Layer.Layer<ROut, E, RIn>
1126
- ): <RIn2, E2, ROut2>(
1127
- self: Layer.Layer<ROut2, E2, RIn2>
1128
- ) => Layer.Layer<ROut2, E | E2, RIn | Exclude<RIn2, ROut>>
1129
- <const Layers extends readonly [Layer.Layer.Any, ...Array<Layer.Layer.Any>]>(
1130
- that: Layers
1131
- ): <A, E, R>(
1132
- self: Layer.Layer<A, E, R>
1133
- ) => Layer.Layer<
1134
- A,
1135
- E | { [k in keyof Layers]: Layer.Layer.Error<Layers[k]> }[number],
1136
- | { [k in keyof Layers]: Layer.Layer.Context<Layers[k]> }[number]
1137
- | Exclude<R, { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]>
1138
- >
1139
- },
1140
- {
1141
- <RIn2, E2, ROut2, RIn, E, ROut>(
1142
- self: Layer.Layer<ROut2, E2, RIn2>,
1143
- that: Layer.Layer<ROut, E, RIn>
1144
- ): Layer.Layer<ROut2, E | E2, RIn | Exclude<RIn2, ROut>>
1145
- <A, E, R, const Layers extends readonly [Layer.Layer.Any, ...Array<Layer.Layer.Any>]>(
1146
- self: Layer.Layer<A, E, R>,
1147
- that: Layers
1148
- ): Layer.Layer<
1149
- A,
1150
- E | { [k in keyof Layers]: Layer.Layer.Error<Layers[k]> }[number],
1151
- | { [k in keyof Layers]: Layer.Layer.Context<Layers[k]> }[number]
1152
- | Exclude<R, { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]>
1153
- >
1154
- }
1155
- >(2, (
1156
- self: Layer.Layer.Any,
1157
- that: Layer.Layer.Any | ReadonlyArray<Layer.Layer.Any>
1158
- ) =>
1159
- suspend(() => {
1160
- const provideTo = Object.create(proto)
1161
- provideTo._op_layer = OpCodes.OP_PROVIDE
1162
- provideTo.first = Object.create(proto, {
1163
- _op_layer: { value: OpCodes.OP_PROVIDE_MERGE, enumerable: true },
1164
- first: { value: context(), enumerable: true },
1165
- second: { value: Array.isArray(that) ? mergeAll(...that as any) : that },
1166
- zipK: { value: (a: Context.Context<any>, b: Context.Context<any>) => pipe(a, Context.merge(b)) }
1167
- })
1168
- provideTo.second = self
1169
- return provideTo
1170
- }))
1171
-
1172
- /** @internal */
1173
- export const provideMerge = dual<
1174
- <RIn, E, ROut>(
1175
- self: Layer.Layer<ROut, E, RIn>
1176
- ) => <RIn2, E2, ROut2>(
1177
- that: Layer.Layer<ROut2, E2, RIn2>
1178
- ) => Layer.Layer<ROut | ROut2, E2 | E, RIn | Exclude<RIn2, ROut>>,
1179
- <RIn2, E2, ROut2, RIn, E, ROut>(
1180
- that: Layer.Layer<ROut2, E2, RIn2>,
1181
- self: Layer.Layer<ROut, E, RIn>
1182
- ) => Layer.Layer<ROut | ROut2, E2 | E, RIn | Exclude<RIn2, ROut>>
1183
- >(2, <RIn2, E2, ROut2, RIn, E, ROut>(that: Layer.Layer<ROut2, E2, RIn2>, self: Layer.Layer<ROut, E, RIn>) => {
1184
- const zipWith = Object.create(proto)
1185
- zipWith._op_layer = OpCodes.OP_PROVIDE_MERGE
1186
- zipWith.first = self
1187
- zipWith.second = provide(that, self)
1188
- zipWith.zipK = (a: Context.Context<ROut>, b: Context.Context<ROut2>): Context.Context<ROut | ROut2> => {
1189
- return pipe(a, Context.merge(b))
1190
- }
1191
- return zipWith
1192
- })
1193
-
1194
- /** @internal */
1195
- export const zipWith = dual<
1196
- <B, E2, R2, A, C>(
1197
- that: Layer.Layer<B, E2, R2>,
1198
- f: (a: Context.Context<A>, b: Context.Context<B>) => Context.Context<C>
1199
- ) => <E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<C, E | E2, R | R2>,
1200
- <A, E, R, B, E2, R2, C>(
1201
- self: Layer.Layer<A, E, R>,
1202
- that: Layer.Layer<B, E2, R2>,
1203
- f: (a: Context.Context<A>, b: Context.Context<B>) => Context.Context<C>
1204
- ) => Layer.Layer<C, E | E2, R | R2>
1205
- >(3, (self, that, f) =>
1206
- suspend(() => {
1207
- const zipWith = Object.create(proto)
1208
- zipWith._op_layer = OpCodes.OP_ZIP_WITH
1209
- zipWith.first = self
1210
- zipWith.second = that
1211
- zipWith.zipK = f
1212
- return zipWith
1213
- }))
1214
-
1215
- /** @internal */
1216
- export const unwrapEffect = <A, E1, R1, E, R>(
1217
- self: Effect.Effect<Layer.Layer<A, E1, R1>, E, R>
1218
- ): Layer.Layer<A, E | E1, R | R1> => {
1219
- const tag = Context.GenericTag<Layer.Layer<A, E1, R1>>("effect/Layer/unwrapEffect/Layer.Layer<R1, E1, A>")
1220
- return flatMap(fromEffect(tag, self), (context) => Context.get(context, tag))
1221
- }
1222
-
1223
- /** @internal */
1224
- export const unwrapScoped = <A, E1, R1, E, R>(
1225
- self: Effect.Effect<Layer.Layer<A, E1, R1>, E, R>
1226
- ): Layer.Layer<A, E | E1, R1 | Exclude<R, Scope.Scope>> => {
1227
- const tag = Context.GenericTag<Layer.Layer<A, E1, R1>>("effect/Layer/unwrapScoped/Layer.Layer<R1, E1, A>")
1228
- return flatMap(scoped(tag, self), (context) => Context.get(context, tag))
1229
- }
1230
-
1231
- // -----------------------------------------------------------------------------
1232
- // logging
1233
- // -----------------------------------------------------------------------------
1234
-
1235
- export const annotateLogs = dual<
1236
- {
1237
- (key: string, value: unknown): <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, R>
1238
- (
1239
- values: Record<string, unknown>
1240
- ): <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, R>
1241
- },
1242
- {
1243
- <A, E, R>(self: Layer.Layer<A, E, R>, key: string, value: unknown): Layer.Layer<A, E, R>
1244
- <A, E, R>(self: Layer.Layer<A, E, R>, values: Record<string, unknown>): Layer.Layer<A, E, R>
1245
- }
1246
- >(
1247
- (args) => isLayer(args[0]),
1248
- function<A, E, R>() {
1249
- const args = arguments
1250
- return fiberRefLocallyWith(
1251
- args[0] as Layer.Layer<A, E, R>,
1252
- core.currentLogAnnotations,
1253
- typeof args[1] === "string"
1254
- ? HashMap.set(args[1], args[2])
1255
- : (annotations) =>
1256
- Object.entries(args[1] as Record<string, unknown>).reduce(
1257
- (acc, [key, value]) => HashMap.set(acc, key, value),
1258
- annotations
1259
- )
1260
- )
1261
- }
1262
- )
1263
-
1264
- // -----------------------------------------------------------------------------
1265
- // tracing
1266
- // -----------------------------------------------------------------------------
1267
-
1268
- export const annotateSpans = dual<
1269
- {
1270
- (key: string, value: unknown): <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, R>
1271
- (
1272
- values: Record<string, unknown>
1273
- ): <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, R>
1274
- },
1275
- {
1276
- <A, E, R>(self: Layer.Layer<A, E, R>, key: string, value: unknown): Layer.Layer<A, E, R>
1277
- <A, E, R>(self: Layer.Layer<A, E, R>, values: Record<string, unknown>): Layer.Layer<A, E, R>
1278
- }
1279
- >(
1280
- (args) => isLayer(args[0]),
1281
- function<A, E, R>() {
1282
- const args = arguments
1283
- return fiberRefLocallyWith(
1284
- args[0] as Layer.Layer<A, E, R>,
1285
- core.currentTracerSpanAnnotations,
1286
- typeof args[1] === "string"
1287
- ? HashMap.set(args[1], args[2])
1288
- : (annotations) =>
1289
- Object.entries(args[1] as Record<string, unknown>).reduce(
1290
- (acc, [key, value]) => HashMap.set(acc, key, value),
1291
- annotations
1292
- )
1293
- )
1294
- }
1295
- )
1296
-
1297
- /** @internal */
1298
- export const withSpan: {
1299
- (
1300
- name: string,
1301
- options?: Tracer.SpanOptions & {
1302
- readonly onEnd?:
1303
- | ((span: Tracer.Span, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>)
1304
- | undefined
1305
- }
1306
- ): <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, Exclude<R, Tracer.ParentSpan>>
1307
- <A, E, R>(
1308
- self: Layer.Layer<A, E, R>,
1309
- name: string,
1310
- options?: Tracer.SpanOptions & {
1311
- readonly onEnd?:
1312
- | ((span: Tracer.Span, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>)
1313
- | undefined
1314
- }
1315
- ): Layer.Layer<A, E, Exclude<R, Tracer.ParentSpan>>
1316
- } = function() {
1317
- const dataFirst = typeof arguments[0] !== "string"
1318
- const name = dataFirst ? arguments[1] : arguments[0]
1319
- const options = tracer.addSpanStackTrace(dataFirst ? arguments[2] : arguments[1]) as Tracer.SpanOptions & {
1320
- readonly onEnd?:
1321
- | ((span: Tracer.Span, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>)
1322
- | undefined
1323
- }
1324
- if (dataFirst) {
1325
- const self = arguments[0]
1326
- return unwrapScoped(
1327
- core.map(
1328
- options?.onEnd
1329
- ? core.tap(
1330
- fiberRuntime.makeSpanScoped(name, options),
1331
- (span) => fiberRuntime.addFinalizer((exit) => options.onEnd!(span, exit))
1332
- )
1333
- : fiberRuntime.makeSpanScoped(name, options),
1334
- (span) => withParentSpan(self, span)
1335
- )
1336
- )
1337
- }
1338
- return (self: Layer.Layer<any, any, any>) =>
1339
- unwrapScoped(
1340
- core.map(
1341
- options?.onEnd
1342
- ? core.tap(
1343
- fiberRuntime.makeSpanScoped(name, options),
1344
- (span) => fiberRuntime.addFinalizer((exit) => options.onEnd!(span, exit))
1345
- )
1346
- : fiberRuntime.makeSpanScoped(name, options),
1347
- (span) => withParentSpan(self, span)
1348
- )
1349
- )
1350
- } as any
1351
-
1352
- /** @internal */
1353
- export const withParentSpan = dual<
1354
- (
1355
- span: Tracer.AnySpan
1356
- ) => <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, Exclude<R, Tracer.ParentSpan>>,
1357
- <A, E, R>(self: Layer.Layer<A, E, R>, span: Tracer.AnySpan) => Layer.Layer<A, E, Exclude<R, Tracer.ParentSpan>>
1358
- >(2, (self, span) => provide(self, succeedContext(Context.make(tracer.spanTag, span))))
1359
-
1360
- // circular with Effect
1361
-
1362
- const provideSomeLayer = dual<
1363
- <A2, E2, R2>(
1364
- layer: Layer.Layer<A2, E2, R2>
1365
- ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, R2 | Exclude<R, A2>>,
1366
- <A, E, R, A2, E2, R2>(
1367
- self: Effect.Effect<A, E, R>,
1368
- layer: Layer.Layer<A2, E2, R2>
1369
- ) => Effect.Effect<A, E | E2, R2 | Exclude<R, A2>>
1370
- >(2, (self, layer) =>
1371
- fiberRuntime.scopedWith((scope) =>
1372
- core.flatMap(
1373
- buildWithScope(layer, scope),
1374
- (context) => core.provideSomeContext(self, context)
1375
- )
1376
- ))
1377
-
1378
- const provideSomeRuntime = dual<
1379
- <R>(context: Runtime.Runtime<R>) => <A, E, R1>(self: Effect.Effect<A, E, R1>) => Effect.Effect<A, E, Exclude<R1, R>>,
1380
- <A, E, R1, R>(self: Effect.Effect<A, E, R1>, context: Runtime.Runtime<R>) => Effect.Effect<A, E, Exclude<R1, R>>
1381
- >(2, (self, rt) => {
1382
- const patchRefs = FiberRefsPatch.diff(runtime.defaultRuntime.fiberRefs, rt.fiberRefs)
1383
- const patchFlags = runtimeFlags.diff(runtime.defaultRuntime.runtimeFlags, rt.runtimeFlags)
1384
- return core.uninterruptibleMask((restore) =>
1385
- core.withFiberRuntime((fiber) => {
1386
- const oldContext = fiber.getFiberRef(core.currentContext)
1387
- const oldRefs = fiber.getFiberRefs()
1388
- const newRefs = FiberRefsPatch.patch(fiber.id(), oldRefs)(patchRefs)
1389
- const oldFlags = fiber.currentRuntimeFlags
1390
- const newFlags = runtimeFlags.patch(patchFlags)(oldFlags)
1391
- const rollbackRefs = FiberRefsPatch.diff(newRefs, oldRefs)
1392
- const rollbackFlags = runtimeFlags.diff(newFlags, oldFlags)
1393
- fiber.setFiberRefs(newRefs)
1394
- fiber.currentRuntimeFlags = newFlags
1395
- return fiberRuntime.ensuring(
1396
- core.provideSomeContext(restore(self), Context.merge(oldContext, rt.context)),
1397
- core.withFiberRuntime((fiber) => {
1398
- fiber.setFiberRefs(FiberRefsPatch.patch(fiber.id(), fiber.getFiberRefs())(rollbackRefs))
1399
- fiber.currentRuntimeFlags = runtimeFlags.patch(rollbackFlags)(fiber.currentRuntimeFlags)
1400
- return core.void
1401
- })
1402
- )
1403
- })
1404
- )
1405
- })
1406
-
1407
- /** @internal */
1408
- export const effect_provide = dual<
1409
- {
1410
- <const Layers extends readonly [Layer.Layer.Any, ...Array<Layer.Layer.Any>]>(
1411
- layers: Layers
1412
- ): <A, E, R>(
1413
- self: Effect.Effect<A, E, R>
1414
- ) => Effect.Effect<
1415
- A,
1416
- E | { [k in keyof Layers]: Layer.Layer.Error<Layers[k]> }[number],
1417
- | { [k in keyof Layers]: Layer.Layer.Context<Layers[k]> }[number]
1418
- | Exclude<R, { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]>
1419
- >
1420
- <ROut, E2, RIn>(
1421
- layer: Layer.Layer<ROut, E2, RIn>
1422
- ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, RIn | Exclude<R, ROut>>
1423
- <R2>(
1424
- context: Context.Context<R2>
1425
- ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, R2>>
1426
- <R2>(
1427
- runtime: Runtime.Runtime<R2>
1428
- ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, R2>>
1429
- <E2, R2>(
1430
- managedRuntime: ManagedRuntime.ManagedRuntime<R2, E2>
1431
- ): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, Exclude<R, R2>>
1432
- },
1433
- {
1434
- <A, E, R, const Layers extends readonly [Layer.Layer.Any, ...Array<Layer.Layer.Any>]>(
1435
- self: Effect.Effect<A, E, R>,
1436
- layers: Layers
1437
- ): Effect.Effect<
1438
- A,
1439
- E | { [k in keyof Layers]: Layer.Layer.Error<Layers[k]> }[number],
1440
- | { [k in keyof Layers]: Layer.Layer.Context<Layers[k]> }[number]
1441
- | Exclude<R, { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]>
1442
- >
1443
- <A, E, R, ROut, E2, RIn>(
1444
- self: Effect.Effect<A, E, R>,
1445
- layer: Layer.Layer<ROut, E2, RIn>
1446
- ): Effect.Effect<A, E | E2, RIn | Exclude<R, ROut>>
1447
- <A, E, R, R2>(
1448
- self: Effect.Effect<A, E, R>,
1449
- context: Context.Context<R2>
1450
- ): Effect.Effect<A, E, Exclude<R, R2>>
1451
- <A, E, R, R2>(
1452
- self: Effect.Effect<A, E, R>,
1453
- runtime: Runtime.Runtime<R2>
1454
- ): Effect.Effect<A, E, Exclude<R, R2>>
1455
- <A, E, E2, R, R2>(
1456
- self: Effect.Effect<A, E, R>,
1457
- managedRuntime: ManagedRuntime.ManagedRuntime<R2, E2>
1458
- ): Effect.Effect<A, E | E2, Exclude<R, R2>>
1459
- }
1460
- >(
1461
- 2,
1462
- <A, E, R, ROut>(
1463
- self: Effect.Effect<A, E, R>,
1464
- source:
1465
- | Layer.Layer<ROut, any, any>
1466
- | Context.Context<ROut>
1467
- | Runtime.Runtime<ROut>
1468
- | ManagedRuntime.ManagedRuntime<ROut, any>
1469
- | Array<Layer.Layer.Any>
1470
- ): Effect.Effect<any, any, Exclude<R, ROut>> => {
1471
- if (Array.isArray(source)) {
1472
- // @ts-expect-error
1473
- return provideSomeLayer(self, mergeAll(...source))
1474
- } else if (isLayer(source)) {
1475
- return provideSomeLayer(self, source as Layer.Layer<ROut, any, any>)
1476
- } else if (Context.isContext(source)) {
1477
- return core.provideSomeContext(self, source)
1478
- } else if (circularManagedRuntime.TypeId in source) {
1479
- return core.flatMap(
1480
- (source as ManagedRuntime.ManagedRuntime<ROut, any>).runtimeEffect,
1481
- (rt) => provideSomeRuntime(self, rt)
1482
- )
1483
- } else {
1484
- return provideSomeRuntime(self, source as Runtime.Runtime<ROut>)
1485
- }
1486
- }
1487
- )