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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. package/SourceLocation/package.json +6 -0
  2. package/dist/cjs/Effect.js +2 -28
  3. package/dist/cjs/Effect.js.map +1 -1
  4. package/dist/cjs/FiberRef.js +12 -1
  5. package/dist/cjs/FiberRef.js.map +1 -1
  6. package/dist/cjs/Layer.js +2 -24
  7. package/dist/cjs/Layer.js.map +1 -1
  8. package/dist/cjs/RuntimeFlags.js +1 -29
  9. package/dist/cjs/RuntimeFlags.js.map +1 -1
  10. package/dist/cjs/SourceLocation.js +60 -0
  11. package/dist/cjs/SourceLocation.js.map +1 -0
  12. package/dist/cjs/Tracer.js +1 -15
  13. package/dist/cjs/Tracer.js.map +1 -1
  14. package/dist/cjs/Utils.js +1 -1
  15. package/dist/cjs/Utils.js.map +1 -1
  16. package/dist/cjs/index.js +3 -1
  17. package/dist/cjs/index.js.map +1 -1
  18. package/dist/cjs/internal/clock.js +1 -1
  19. package/dist/cjs/internal/clock.js.map +1 -1
  20. package/dist/cjs/internal/core.js +17 -50
  21. package/dist/cjs/internal/core.js.map +1 -1
  22. package/dist/cjs/internal/effect/circular.js +18 -30
  23. package/dist/cjs/internal/effect/circular.js.map +1 -1
  24. package/dist/cjs/internal/fiberRuntime.js +16 -65
  25. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  26. package/dist/cjs/internal/layer/circular.js +1 -5
  27. package/dist/cjs/internal/layer/circular.js.map +1 -1
  28. package/dist/cjs/internal/layer.js +1 -3
  29. package/dist/cjs/internal/layer.js.map +1 -1
  30. package/dist/cjs/internal/logger.js +25 -2
  31. package/dist/cjs/internal/logger.js.map +1 -1
  32. package/dist/cjs/internal/runtimeFlags.js +2 -11
  33. package/dist/cjs/internal/runtimeFlags.js.map +1 -1
  34. package/dist/cjs/internal/tracer.js +1 -114
  35. package/dist/cjs/internal/tracer.js.map +1 -1
  36. package/dist/dts/Config.d.ts +2 -2
  37. package/dist/dts/Config.d.ts.map +1 -1
  38. package/dist/dts/Effect.d.ts +8 -29
  39. package/dist/dts/Effect.d.ts.map +1 -1
  40. package/dist/dts/FiberRef.d.ts +12 -0
  41. package/dist/dts/FiberRef.d.ts.map +1 -1
  42. package/dist/dts/Layer.d.ts +0 -22
  43. package/dist/dts/Layer.d.ts.map +1 -1
  44. package/dist/dts/RuntimeFlags.d.ts +0 -28
  45. package/dist/dts/RuntimeFlags.d.ts.map +1 -1
  46. package/dist/dts/SourceLocation.d.ts +88 -0
  47. package/dist/dts/SourceLocation.d.ts.map +1 -0
  48. package/dist/dts/Tracer.d.ts +0 -15
  49. package/dist/dts/Tracer.d.ts.map +1 -1
  50. package/dist/dts/index.d.ts +6 -0
  51. package/dist/dts/index.d.ts.map +1 -1
  52. package/dist/dts/internal/core.d.ts.map +1 -1
  53. package/dist/dts/internal/layer.d.ts.map +1 -1
  54. package/dist/dts/internal/runtimeFlags.d.ts.map +1 -1
  55. package/dist/esm/Effect.js +0 -26
  56. package/dist/esm/Effect.js.map +1 -1
  57. package/dist/esm/FiberRef.js +11 -0
  58. package/dist/esm/FiberRef.js.map +1 -1
  59. package/dist/esm/Layer.js +0 -22
  60. package/dist/esm/Layer.js.map +1 -1
  61. package/dist/esm/RuntimeFlags.js +0 -28
  62. package/dist/esm/RuntimeFlags.js.map +1 -1
  63. package/dist/esm/SourceLocation.js +51 -0
  64. package/dist/esm/SourceLocation.js.map +1 -0
  65. package/dist/esm/Tracer.js +0 -14
  66. package/dist/esm/Tracer.js.map +1 -1
  67. package/dist/esm/Utils.js +1 -1
  68. package/dist/esm/Utils.js.map +1 -1
  69. package/dist/esm/index.js +6 -0
  70. package/dist/esm/index.js.map +1 -1
  71. package/dist/esm/internal/clock.js +1 -1
  72. package/dist/esm/internal/clock.js.map +1 -1
  73. package/dist/esm/internal/core.js +12 -45
  74. package/dist/esm/internal/core.js.map +1 -1
  75. package/dist/esm/internal/effect/circular.js +18 -30
  76. package/dist/esm/internal/effect/circular.js.map +1 -1
  77. package/dist/esm/internal/fiberRuntime.js +13 -60
  78. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  79. package/dist/esm/internal/layer/circular.js +0 -4
  80. package/dist/esm/internal/layer/circular.js.map +1 -1
  81. package/dist/esm/internal/layer.js +0 -2
  82. package/dist/esm/internal/layer.js.map +1 -1
  83. package/dist/esm/internal/logger.js +25 -2
  84. package/dist/esm/internal/logger.js.map +1 -1
  85. package/dist/esm/internal/runtimeFlags.js +1 -9
  86. package/dist/esm/internal/runtimeFlags.js.map +1 -1
  87. package/dist/esm/internal/tracer.js +0 -111
  88. package/dist/esm/internal/tracer.js.map +1 -1
  89. package/package.json +12 -1
  90. package/src/Arbitrary.ts +1101 -0
  91. package/src/Array.ts +3589 -0
  92. package/src/BigDecimal.ts +1349 -0
  93. package/src/BigInt.ts +643 -0
  94. package/src/Boolean.ts +287 -0
  95. package/src/Brand.ts +360 -0
  96. package/src/Cache.ts +281 -0
  97. package/src/Cause.ts +1555 -0
  98. package/src/Channel.ts +2355 -0
  99. package/src/ChildExecutorDecision.ts +146 -0
  100. package/src/Chunk.ts +1495 -0
  101. package/src/Clock.ts +111 -0
  102. package/src/Config.ts +542 -0
  103. package/src/ConfigError.ts +270 -0
  104. package/src/ConfigProvider.ts +333 -0
  105. package/src/ConfigProviderPathPatch.ts +100 -0
  106. package/src/Console.ts +226 -0
  107. package/src/Context.ts +585 -0
  108. package/src/Cron.ts +706 -0
  109. package/src/Data.ts +596 -0
  110. package/src/DateTime.ts +1686 -0
  111. package/src/DefaultServices.ts +34 -0
  112. package/src/Deferred.ts +301 -0
  113. package/src/Differ.ts +450 -0
  114. package/src/Duration.ts +1000 -0
  115. package/src/Effect.ts +14817 -0
  116. package/src/Effectable.ts +107 -0
  117. package/src/Either.ts +1040 -0
  118. package/src/Encoding.ts +195 -0
  119. package/src/Equal.ts +98 -0
  120. package/src/Equivalence.ts +235 -0
  121. package/src/ExecutionPlan.ts +308 -0
  122. package/src/ExecutionStrategy.ts +119 -0
  123. package/src/Exit.ts +467 -0
  124. package/src/FastCheck.ts +9 -0
  125. package/src/Fiber.ts +744 -0
  126. package/src/FiberHandle.ts +540 -0
  127. package/src/FiberId.ts +195 -0
  128. package/src/FiberMap.ts +656 -0
  129. package/src/FiberRef.ts +444 -0
  130. package/src/FiberRefs.ts +204 -0
  131. package/src/FiberRefsPatch.ts +105 -0
  132. package/src/FiberSet.ts +491 -0
  133. package/src/FiberStatus.ts +108 -0
  134. package/src/Function.ts +1222 -0
  135. package/src/GlobalValue.ts +53 -0
  136. package/src/Graph.ts +3732 -0
  137. package/src/GroupBy.ts +103 -0
  138. package/src/HKT.ts +45 -0
  139. package/src/Hash.ts +195 -0
  140. package/src/HashMap.ts +519 -0
  141. package/src/HashRing.ts +317 -0
  142. package/src/HashSet.ts +2346 -0
  143. package/src/Inspectable.ts +287 -0
  144. package/src/Iterable.ts +1119 -0
  145. package/src/JSONSchema.ts +1044 -0
  146. package/src/KeyedPool.ts +167 -0
  147. package/src/Layer.ts +1228 -0
  148. package/src/LayerMap.ts +436 -0
  149. package/src/List.ts +977 -0
  150. package/src/LogLevel.ts +285 -0
  151. package/src/LogSpan.ts +25 -0
  152. package/src/Logger.ts +702 -0
  153. package/src/Mailbox.ts +268 -0
  154. package/src/ManagedRuntime.ts +180 -0
  155. package/src/Match.ts +1477 -0
  156. package/src/MergeDecision.ts +95 -0
  157. package/src/MergeState.ts +172 -0
  158. package/src/MergeStrategy.ts +107 -0
  159. package/src/Metric.ts +780 -0
  160. package/src/MetricBoundaries.ts +69 -0
  161. package/src/MetricHook.ts +151 -0
  162. package/src/MetricKey.ts +224 -0
  163. package/src/MetricKeyType.ts +262 -0
  164. package/src/MetricLabel.ts +47 -0
  165. package/src/MetricPair.ts +71 -0
  166. package/src/MetricPolling.ts +148 -0
  167. package/src/MetricRegistry.ts +48 -0
  168. package/src/MetricState.ts +257 -0
  169. package/src/Micro.ts +4405 -0
  170. package/src/ModuleVersion.ts +18 -0
  171. package/src/MutableHashMap.ts +411 -0
  172. package/src/MutableHashSet.ts +706 -0
  173. package/src/MutableList.ts +297 -0
  174. package/src/MutableQueue.ts +227 -0
  175. package/src/MutableRef.ts +202 -0
  176. package/src/NonEmptyIterable.ts +32 -0
  177. package/src/Number.ts +1071 -0
  178. package/src/Option.ts +2170 -0
  179. package/src/Order.ts +373 -0
  180. package/src/Ordering.ts +111 -0
  181. package/src/ParseResult.ts +2031 -0
  182. package/src/PartitionedSemaphore.ts +200 -0
  183. package/src/Pipeable.ts +566 -0
  184. package/src/Pool.ts +204 -0
  185. package/src/Predicate.ts +1405 -0
  186. package/src/Pretty.ts +205 -0
  187. package/src/PrimaryKey.ts +23 -0
  188. package/src/PubSub.ts +182 -0
  189. package/src/Queue.ts +644 -0
  190. package/src/Random.ts +204 -0
  191. package/src/RateLimiter.ts +138 -0
  192. package/src/RcMap.ts +141 -0
  193. package/src/RcRef.ts +122 -0
  194. package/src/Readable.ts +93 -0
  195. package/src/Record.ts +1274 -0
  196. package/src/RedBlackTree.ts +421 -0
  197. package/src/Redacted.ts +144 -0
  198. package/src/Ref.ts +180 -0
  199. package/src/RegExp.ts +38 -0
  200. package/src/Reloadable.ts +127 -0
  201. package/src/Request.ts +347 -0
  202. package/src/RequestBlock.ts +118 -0
  203. package/src/RequestResolver.ts +366 -0
  204. package/src/Resource.ts +119 -0
  205. package/src/Runtime.ts +383 -0
  206. package/src/RuntimeFlags.ts +336 -0
  207. package/src/RuntimeFlagsPatch.ts +183 -0
  208. package/src/STM.ts +2045 -0
  209. package/src/Schedule.ts +2219 -0
  210. package/src/ScheduleDecision.ts +62 -0
  211. package/src/ScheduleInterval.ts +151 -0
  212. package/src/ScheduleIntervals.ts +122 -0
  213. package/src/Scheduler.ts +353 -0
  214. package/src/Schema.ts +10914 -0
  215. package/src/SchemaAST.ts +3043 -0
  216. package/src/Scope.ts +204 -0
  217. package/src/ScopedCache.ts +151 -0
  218. package/src/ScopedRef.ts +117 -0
  219. package/src/Secret.ts +88 -0
  220. package/src/SingleProducerAsyncInput.ts +67 -0
  221. package/src/Sink.ts +1461 -0
  222. package/src/SortedMap.ts +287 -0
  223. package/src/SortedSet.ts +390 -0
  224. package/src/SourceLocation.ts +108 -0
  225. package/src/Stream.ts +6468 -0
  226. package/src/StreamEmit.ts +136 -0
  227. package/src/StreamHaltStrategy.ts +123 -0
  228. package/src/Streamable.ts +45 -0
  229. package/src/String.ts +778 -0
  230. package/src/Struct.ts +243 -0
  231. package/src/Subscribable.ts +100 -0
  232. package/src/SubscriptionRef.ts +298 -0
  233. package/src/Supervisor.ts +240 -0
  234. package/src/Symbol.ts +29 -0
  235. package/src/SynchronizedRef.ts +270 -0
  236. package/src/TArray.ts +495 -0
  237. package/src/TDeferred.ts +100 -0
  238. package/src/TMap.ts +515 -0
  239. package/src/TPriorityQueue.ts +223 -0
  240. package/src/TPubSub.ts +200 -0
  241. package/src/TQueue.ts +432 -0
  242. package/src/TRandom.ts +129 -0
  243. package/src/TReentrantLock.ts +224 -0
  244. package/src/TRef.ts +178 -0
  245. package/src/TSemaphore.ts +129 -0
  246. package/src/TSet.ts +365 -0
  247. package/src/TSubscriptionRef.ts +192 -0
  248. package/src/Take.ts +258 -0
  249. package/src/TestAnnotation.ts +158 -0
  250. package/src/TestAnnotationMap.ts +119 -0
  251. package/src/TestAnnotations.ts +117 -0
  252. package/src/TestClock.ts +556 -0
  253. package/src/TestConfig.ts +47 -0
  254. package/src/TestContext.ts +36 -0
  255. package/src/TestLive.ts +53 -0
  256. package/src/TestServices.ts +390 -0
  257. package/src/TestSized.ts +55 -0
  258. package/src/Tracer.ts +182 -0
  259. package/src/Trie.ts +840 -0
  260. package/src/Tuple.ts +305 -0
  261. package/src/Types.ts +353 -0
  262. package/src/Unify.ts +113 -0
  263. package/src/UpstreamPullRequest.ts +117 -0
  264. package/src/UpstreamPullStrategy.ts +121 -0
  265. package/src/Utils.ts +809 -0
  266. package/src/index.ts +1568 -0
  267. package/src/internal/array.ts +8 -0
  268. package/src/internal/blockedRequests.ts +520 -0
  269. package/src/internal/cache.ts +733 -0
  270. package/src/internal/cause.ts +1050 -0
  271. package/src/internal/channel/channelExecutor.ts +1200 -0
  272. package/src/internal/channel/channelState.ts +134 -0
  273. package/src/internal/channel/childExecutorDecision.ts +96 -0
  274. package/src/internal/channel/continuation.ts +200 -0
  275. package/src/internal/channel/mergeDecision.ts +113 -0
  276. package/src/internal/channel/mergeState.ts +120 -0
  277. package/src/internal/channel/mergeStrategy.ts +72 -0
  278. package/src/internal/channel/singleProducerAsyncInput.ts +259 -0
  279. package/src/internal/channel/subexecutor.ts +229 -0
  280. package/src/internal/channel/upstreamPullRequest.ts +84 -0
  281. package/src/internal/channel/upstreamPullStrategy.ts +87 -0
  282. package/src/internal/channel.ts +2603 -0
  283. package/src/internal/clock.ts +95 -0
  284. package/src/internal/completedRequestMap.ts +9 -0
  285. package/src/internal/concurrency.ts +54 -0
  286. package/src/internal/config.ts +716 -0
  287. package/src/internal/configError.ts +304 -0
  288. package/src/internal/configProvider/pathPatch.ts +97 -0
  289. package/src/internal/configProvider.ts +799 -0
  290. package/src/internal/console.ts +153 -0
  291. package/src/internal/context.ts +337 -0
  292. package/src/internal/core-effect.ts +2293 -0
  293. package/src/internal/core-stream.ts +998 -0
  294. package/src/internal/core.ts +3189 -0
  295. package/src/internal/data.ts +36 -0
  296. package/src/internal/dataSource.ts +327 -0
  297. package/src/internal/dateTime.ts +1277 -0
  298. package/src/internal/defaultServices/console.ts +100 -0
  299. package/src/internal/defaultServices.ts +163 -0
  300. package/src/internal/deferred.ts +46 -0
  301. package/src/internal/differ/chunkPatch.ts +211 -0
  302. package/src/internal/differ/contextPatch.ts +232 -0
  303. package/src/internal/differ/hashMapPatch.ts +220 -0
  304. package/src/internal/differ/hashSetPatch.ts +176 -0
  305. package/src/internal/differ/orPatch.ts +311 -0
  306. package/src/internal/differ/readonlyArrayPatch.ts +210 -0
  307. package/src/internal/differ.ts +200 -0
  308. package/src/internal/doNotation.ts +80 -0
  309. package/src/internal/effect/circular.ts +895 -0
  310. package/src/internal/effectable.ts +131 -0
  311. package/src/internal/either.ts +110 -0
  312. package/src/internal/encoding/base64.ts +286 -0
  313. package/src/internal/encoding/base64Url.ts +29 -0
  314. package/src/internal/encoding/common.ts +51 -0
  315. package/src/internal/encoding/hex.ts +315 -0
  316. package/src/internal/errors.ts +7 -0
  317. package/src/internal/executionPlan.ts +114 -0
  318. package/src/internal/executionStrategy.ts +74 -0
  319. package/src/internal/fiber.ts +388 -0
  320. package/src/internal/fiberId.ts +267 -0
  321. package/src/internal/fiberMessage.ts +82 -0
  322. package/src/internal/fiberRefs/patch.ts +144 -0
  323. package/src/internal/fiberRefs.ts +297 -0
  324. package/src/internal/fiberRuntime.ts +3842 -0
  325. package/src/internal/fiberScope.ts +71 -0
  326. package/src/internal/fiberStatus.ts +119 -0
  327. package/src/internal/groupBy.ts +530 -0
  328. package/src/internal/hashMap/array.ts +49 -0
  329. package/src/internal/hashMap/bitwise.ts +32 -0
  330. package/src/internal/hashMap/config.ts +14 -0
  331. package/src/internal/hashMap/keySet.ts +8 -0
  332. package/src/internal/hashMap/node.ts +391 -0
  333. package/src/internal/hashMap.ts +586 -0
  334. package/src/internal/hashSet.ts +323 -0
  335. package/src/internal/keyedPool.ts +244 -0
  336. package/src/internal/layer/circular.ts +214 -0
  337. package/src/internal/layer.ts +1483 -0
  338. package/src/internal/logSpan.ts +20 -0
  339. package/src/internal/logger-circular.ts +24 -0
  340. package/src/internal/logger.ts +522 -0
  341. package/src/internal/mailbox.ts +561 -0
  342. package/src/internal/managedRuntime/circular.ts +6 -0
  343. package/src/internal/managedRuntime.ts +134 -0
  344. package/src/internal/matcher.ts +652 -0
  345. package/src/internal/metric/boundaries.ts +75 -0
  346. package/src/internal/metric/hook.ts +483 -0
  347. package/src/internal/metric/key.ts +167 -0
  348. package/src/internal/metric/keyType.ts +238 -0
  349. package/src/internal/metric/label.ts +41 -0
  350. package/src/internal/metric/pair.ts +48 -0
  351. package/src/internal/metric/polling.ts +149 -0
  352. package/src/internal/metric/registry.ts +187 -0
  353. package/src/internal/metric/state.ts +290 -0
  354. package/src/internal/metric.ts +577 -0
  355. package/src/internal/opCodes/cause.ts +35 -0
  356. package/src/internal/opCodes/channel.ts +83 -0
  357. package/src/internal/opCodes/channelChildExecutorDecision.ts +17 -0
  358. package/src/internal/opCodes/channelMergeDecision.ts +11 -0
  359. package/src/internal/opCodes/channelMergeState.ts +17 -0
  360. package/src/internal/opCodes/channelMergeStrategy.ts +11 -0
  361. package/src/internal/opCodes/channelState.ts +23 -0
  362. package/src/internal/opCodes/channelUpstreamPullRequest.ts +11 -0
  363. package/src/internal/opCodes/channelUpstreamPullStrategy.ts +11 -0
  364. package/src/internal/opCodes/config.ts +65 -0
  365. package/src/internal/opCodes/configError.ts +35 -0
  366. package/src/internal/opCodes/continuation.ts +11 -0
  367. package/src/internal/opCodes/deferred.ts +11 -0
  368. package/src/internal/opCodes/effect.ts +89 -0
  369. package/src/internal/opCodes/layer.ts +59 -0
  370. package/src/internal/opCodes/streamHaltStrategy.ts +23 -0
  371. package/src/internal/option.ts +80 -0
  372. package/src/internal/pool.ts +432 -0
  373. package/src/internal/pubsub.ts +1762 -0
  374. package/src/internal/query.ts +204 -0
  375. package/src/internal/queue.ts +766 -0
  376. package/src/internal/random.ts +161 -0
  377. package/src/internal/rateLimiter.ts +93 -0
  378. package/src/internal/rcMap.ts +285 -0
  379. package/src/internal/rcRef.ts +192 -0
  380. package/src/internal/redBlackTree/iterator.ts +200 -0
  381. package/src/internal/redBlackTree/node.ts +68 -0
  382. package/src/internal/redBlackTree.ts +1245 -0
  383. package/src/internal/redacted.ts +73 -0
  384. package/src/internal/ref.ts +171 -0
  385. package/src/internal/reloadable.ts +140 -0
  386. package/src/internal/request.ts +177 -0
  387. package/src/internal/resource.ts +76 -0
  388. package/src/internal/ringBuffer.ts +68 -0
  389. package/src/internal/runtime.ts +558 -0
  390. package/src/internal/runtimeFlags.ts +178 -0
  391. package/src/internal/runtimeFlagsPatch.ts +103 -0
  392. package/src/internal/schedule/decision.ts +47 -0
  393. package/src/internal/schedule/interval.ts +101 -0
  394. package/src/internal/schedule/intervals.ts +180 -0
  395. package/src/internal/schedule.ts +2199 -0
  396. package/src/internal/schema/errors.ts +191 -0
  397. package/src/internal/schema/schemaId.ts +106 -0
  398. package/src/internal/schema/util.ts +50 -0
  399. package/src/internal/scopedCache.ts +644 -0
  400. package/src/internal/scopedRef.ts +118 -0
  401. package/src/internal/secret.ts +89 -0
  402. package/src/internal/singleShotGen.ts +35 -0
  403. package/src/internal/sink.ts +2120 -0
  404. package/src/internal/stack.ts +10 -0
  405. package/src/internal/stm/core.ts +817 -0
  406. package/src/internal/stm/entry.ts +59 -0
  407. package/src/internal/stm/journal.ts +123 -0
  408. package/src/internal/stm/opCodes/stm.ts +71 -0
  409. package/src/internal/stm/opCodes/stmState.ts +17 -0
  410. package/src/internal/stm/opCodes/strategy.ts +17 -0
  411. package/src/internal/stm/opCodes/tExit.ts +29 -0
  412. package/src/internal/stm/opCodes/tryCommit.ts +11 -0
  413. package/src/internal/stm/stm.ts +1453 -0
  414. package/src/internal/stm/stmState.ts +136 -0
  415. package/src/internal/stm/tArray.ts +550 -0
  416. package/src/internal/stm/tDeferred.ts +81 -0
  417. package/src/internal/stm/tExit.ts +190 -0
  418. package/src/internal/stm/tMap.ts +824 -0
  419. package/src/internal/stm/tPriorityQueue.ts +267 -0
  420. package/src/internal/stm/tPubSub.ts +551 -0
  421. package/src/internal/stm/tQueue.ts +393 -0
  422. package/src/internal/stm/tRandom.ts +140 -0
  423. package/src/internal/stm/tReentrantLock.ts +352 -0
  424. package/src/internal/stm/tRef.ts +195 -0
  425. package/src/internal/stm/tSemaphore.ts +113 -0
  426. package/src/internal/stm/tSet.ts +259 -0
  427. package/src/internal/stm/tSubscriptionRef.ts +286 -0
  428. package/src/internal/stm/tryCommit.ts +34 -0
  429. package/src/internal/stm/txnId.ts +14 -0
  430. package/src/internal/stm/versioned.ts +4 -0
  431. package/src/internal/stream/debounceState.ts +57 -0
  432. package/src/internal/stream/emit.ts +123 -0
  433. package/src/internal/stream/haltStrategy.ts +94 -0
  434. package/src/internal/stream/handoff.ts +187 -0
  435. package/src/internal/stream/handoffSignal.ts +59 -0
  436. package/src/internal/stream/pull.ts +34 -0
  437. package/src/internal/stream/sinkEndReason.ts +30 -0
  438. package/src/internal/stream/zipAllState.ts +88 -0
  439. package/src/internal/stream/zipChunksState.ts +56 -0
  440. package/src/internal/stream.ts +8801 -0
  441. package/src/internal/string-utils.ts +107 -0
  442. package/src/internal/subscriptionRef.ts +138 -0
  443. package/src/internal/supervisor/patch.ts +190 -0
  444. package/src/internal/supervisor.ts +303 -0
  445. package/src/internal/synchronizedRef.ts +114 -0
  446. package/src/internal/take.ts +199 -0
  447. package/src/internal/testing/sleep.ts +27 -0
  448. package/src/internal/testing/suspendedWarningData.ts +85 -0
  449. package/src/internal/testing/warningData.ts +94 -0
  450. package/src/internal/tracer.ts +150 -0
  451. package/src/internal/trie.ts +722 -0
  452. package/src/internal/version.ts +7 -0
@@ -0,0 +1,540 @@
1
+ /**
2
+ * @since 2.0.0
3
+ */
4
+ import type { NoSuchElementException } from "./Cause.js"
5
+ import * as Cause from "./Cause.js"
6
+ import * as Deferred from "./Deferred.js"
7
+ import * as Effect from "./Effect.js"
8
+ import * as Exit from "./Exit.js"
9
+ import * as Fiber from "./Fiber.js"
10
+ import * as FiberId from "./FiberId.js"
11
+ import { constFalse, dual } from "./Function.js"
12
+ import * as HashSet from "./HashSet.js"
13
+ import * as Inspectable from "./Inspectable.js"
14
+ import * as Option from "./Option.js"
15
+ import { type Pipeable, pipeArguments } from "./Pipeable.js"
16
+ import * as Predicate from "./Predicate.js"
17
+ import * as Runtime from "./Runtime.js"
18
+ import type * as Scope from "./Scope.js"
19
+
20
+ /**
21
+ * @since 2.0.0
22
+ * @categories type ids
23
+ */
24
+ export const TypeId: unique symbol = Symbol.for("effect/FiberHandle")
25
+
26
+ /**
27
+ * @since 2.0.0
28
+ * @categories type ids
29
+ */
30
+ export type TypeId = typeof TypeId
31
+
32
+ /**
33
+ * @since 2.0.0
34
+ * @categories models
35
+ */
36
+ export interface FiberHandle<out A = unknown, out E = unknown> extends Pipeable, Inspectable.Inspectable {
37
+ readonly [TypeId]: TypeId
38
+ readonly deferred: Deferred.Deferred<void, unknown>
39
+ /** @internal */
40
+ state: {
41
+ readonly _tag: "Open"
42
+ fiber: Fiber.RuntimeFiber<A, E> | undefined
43
+ } | {
44
+ readonly _tag: "Closed"
45
+ }
46
+ }
47
+
48
+ /**
49
+ * @since 2.0.0
50
+ * @categories refinements
51
+ */
52
+ export const isFiberHandle = (u: unknown): u is FiberHandle => Predicate.hasProperty(u, TypeId)
53
+
54
+ const Proto = {
55
+ [TypeId]: TypeId,
56
+ toString(this: FiberHandle) {
57
+ return Inspectable.format(this.toJSON())
58
+ },
59
+ toJSON(this: FiberHandle) {
60
+ return {
61
+ _id: "FiberHandle",
62
+ state: this.state
63
+ }
64
+ },
65
+ [Inspectable.NodeInspectSymbol](this: FiberHandle) {
66
+ return this.toJSON()
67
+ },
68
+ pipe() {
69
+ return pipeArguments(this, arguments)
70
+ }
71
+ }
72
+
73
+ const unsafeMake = <A = unknown, E = unknown>(
74
+ deferred: Deferred.Deferred<void, E>
75
+ ): FiberHandle<A, E> => {
76
+ const self = Object.create(Proto)
77
+ self.state = { _tag: "Open", fiber: undefined }
78
+ self.deferred = deferred
79
+ return self
80
+ }
81
+
82
+ /**
83
+ * A FiberHandle can be used to store a single fiber.
84
+ * When the associated Scope is closed, the contained fiber will be interrupted.
85
+ *
86
+ * You can add a fiber to the handle using `FiberHandle.run`, and the fiber will
87
+ * be automatically removed from the FiberHandle when it completes.
88
+ *
89
+ * @example
90
+ * ```ts
91
+ * import { Effect, FiberHandle } from "effect"
92
+ *
93
+ * Effect.gen(function*() {
94
+ * const handle = yield* FiberHandle.make()
95
+ *
96
+ * // run some effects
97
+ * yield* FiberHandle.run(handle, Effect.never)
98
+ * // this will interrupt the previous fiber
99
+ * yield* FiberHandle.run(handle, Effect.never)
100
+ *
101
+ * yield* Effect.sleep(1000)
102
+ * }).pipe(
103
+ * Effect.scoped // The fiber will be interrupted when the scope is closed
104
+ * )
105
+ * ```
106
+ *
107
+ * @since 2.0.0
108
+ * @categories constructors
109
+ */
110
+ export const make = <A = unknown, E = unknown>(): Effect.Effect<FiberHandle<A, E>, never, Scope.Scope> =>
111
+ Effect.acquireRelease(
112
+ Effect.map(Deferred.make<void, E>(), (deferred) => unsafeMake<A, E>(deferred)),
113
+ (handle) =>
114
+ Effect.withFiberRuntime((parent) => {
115
+ const state = handle.state
116
+ if (state._tag === "Closed") return Effect.void
117
+ handle.state = { _tag: "Closed" }
118
+ return state.fiber ?
119
+ Effect.intoDeferred(
120
+ Effect.asVoid(Fiber.interruptAs(state.fiber, FiberId.combine(parent.id(), internalFiberId))),
121
+ handle.deferred
122
+ ) :
123
+ Deferred.done(handle.deferred, Exit.void)
124
+ })
125
+ )
126
+
127
+ /**
128
+ * Create an Effect run function that is backed by a FiberHandle.
129
+ *
130
+ * @since 2.0.0
131
+ * @categories constructors
132
+ */
133
+ export const makeRuntime = <R, E = unknown, A = unknown>(): Effect.Effect<
134
+ <XE extends E, XA extends A>(
135
+ effect: Effect.Effect<XA, XE, R>,
136
+ options?:
137
+ | Runtime.RunForkOptions & {
138
+ readonly onlyIfMissing?: boolean | undefined
139
+ }
140
+ | undefined
141
+ ) => Fiber.RuntimeFiber<XA, XE>,
142
+ never,
143
+ Scope.Scope | R
144
+ > =>
145
+ Effect.flatMap(
146
+ make<A, E>(),
147
+ (self) => runtime(self)<R>()
148
+ )
149
+
150
+ /**
151
+ * Create an Effect run function that is backed by a FiberHandle.
152
+ *
153
+ * @since 3.13.0
154
+ * @categories constructors
155
+ */
156
+ export const makeRuntimePromise = <R = never, A = unknown, E = unknown>(): Effect.Effect<
157
+ <XE extends E, XA extends A>(
158
+ effect: Effect.Effect<XA, XE, R>,
159
+ options?: Runtime.RunForkOptions | undefined
160
+ ) => Promise<XA>,
161
+ never,
162
+ Scope.Scope | R
163
+ > =>
164
+ Effect.flatMap(
165
+ make<A, E>(),
166
+ (self) => runtimePromise(self)<R>()
167
+ )
168
+
169
+ const internalFiberIdId = -1
170
+ const internalFiberId = FiberId.make(internalFiberIdId, 0)
171
+ const isInternalInterruption = Cause.reduceWithContext(undefined, {
172
+ emptyCase: constFalse,
173
+ failCase: constFalse,
174
+ dieCase: constFalse,
175
+ interruptCase: (_, fiberId) => HashSet.has(FiberId.ids(fiberId), internalFiberIdId),
176
+ sequentialCase: (_, left, right) => left || right,
177
+ parallelCase: (_, left, right) => left || right
178
+ })
179
+
180
+ /**
181
+ * Set the fiber in a FiberHandle. When the fiber completes, it will be removed from the FiberHandle.
182
+ * If a fiber is already running, it will be interrupted unless `options.onlyIfMissing` is set.
183
+ *
184
+ * @since 2.0.0
185
+ * @categories combinators
186
+ */
187
+ export const unsafeSet: {
188
+ <A, E, XE extends E, XA extends A>(
189
+ fiber: Fiber.RuntimeFiber<XA, XE>,
190
+ options?: {
191
+ readonly interruptAs?: FiberId.FiberId | undefined
192
+ readonly onlyIfMissing?: boolean | undefined
193
+ readonly propagateInterruption?: boolean | undefined
194
+ }
195
+ ): (self: FiberHandle<A, E>) => void
196
+ <A, E, XE extends E, XA extends A>(
197
+ self: FiberHandle<A, E>,
198
+ fiber: Fiber.RuntimeFiber<XA, XE>,
199
+ options?: {
200
+ readonly interruptAs?: FiberId.FiberId | undefined
201
+ readonly onlyIfMissing?: boolean | undefined
202
+ readonly propagateInterruption?: boolean | undefined
203
+ }
204
+ ): void
205
+ } = dual((args) => isFiberHandle(args[0]), <A, E, XE extends E, XA extends A>(
206
+ self: FiberHandle<A, E>,
207
+ fiber: Fiber.RuntimeFiber<XA, XE>,
208
+ options?: {
209
+ readonly interruptAs?: FiberId.FiberId | undefined
210
+ readonly onlyIfMissing?: boolean | undefined
211
+ readonly propagateInterruption?: boolean | undefined
212
+ }
213
+ ): void => {
214
+ if (self.state._tag === "Closed") {
215
+ fiber.unsafeInterruptAsFork(FiberId.combine(options?.interruptAs ?? FiberId.none, internalFiberId))
216
+ return
217
+ } else if (self.state.fiber !== undefined) {
218
+ if (options?.onlyIfMissing === true) {
219
+ fiber.unsafeInterruptAsFork(FiberId.combine(options?.interruptAs ?? FiberId.none, internalFiberId))
220
+ return
221
+ } else if (self.state.fiber === fiber) {
222
+ return
223
+ }
224
+ self.state.fiber.unsafeInterruptAsFork(FiberId.combine(options?.interruptAs ?? FiberId.none, internalFiberId))
225
+ self.state.fiber = undefined
226
+ }
227
+
228
+ self.state.fiber = fiber
229
+ fiber.addObserver((exit) => {
230
+ if (self.state._tag === "Open" && fiber === self.state.fiber) {
231
+ self.state.fiber = undefined
232
+ }
233
+ if (
234
+ Exit.isFailure(exit) &&
235
+ (
236
+ options?.propagateInterruption === true ?
237
+ !isInternalInterruption(exit.cause) :
238
+ !Cause.isInterruptedOnly(exit.cause)
239
+ )
240
+ ) {
241
+ Deferred.unsafeDone(self.deferred, exit as any)
242
+ }
243
+ })
244
+ })
245
+
246
+ /**
247
+ * Set the fiber in the FiberHandle. When the fiber completes, it will be removed from the FiberHandle.
248
+ * If a fiber already exists in the FiberHandle, it will be interrupted unless `options.onlyIfMissing` is set.
249
+ *
250
+ * @since 2.0.0
251
+ * @categories combinators
252
+ */
253
+ export const set: {
254
+ <A, E, XE extends E, XA extends A>(
255
+ fiber: Fiber.RuntimeFiber<XA, XE>,
256
+ options?: {
257
+ readonly onlyIfMissing?: boolean
258
+ readonly propagateInterruption?: boolean | undefined
259
+ }
260
+ ): (self: FiberHandle<A, E>) => Effect.Effect<void>
261
+ <A, E, XE extends E, XA extends A>(
262
+ self: FiberHandle<A, E>,
263
+ fiber: Fiber.RuntimeFiber<XA, XE>,
264
+ options?: {
265
+ readonly onlyIfMissing?: boolean
266
+ readonly propagateInterruption?: boolean | undefined
267
+ }
268
+ ): Effect.Effect<void>
269
+ } = dual((args) => isFiberHandle(args[0]), <A, E, XE extends E, XA extends A>(
270
+ self: FiberHandle<A, E>,
271
+ fiber: Fiber.RuntimeFiber<XA, XE>,
272
+ options?: {
273
+ readonly onlyIfMissing?: boolean
274
+ readonly propagateInterruption?: boolean | undefined
275
+ }
276
+ ): Effect.Effect<void> =>
277
+ Effect.fiberIdWith(
278
+ (fiberId) =>
279
+ Effect.sync(() =>
280
+ unsafeSet(self, fiber, {
281
+ interruptAs: fiberId,
282
+ onlyIfMissing: options?.onlyIfMissing,
283
+ propagateInterruption: options?.propagateInterruption
284
+ })
285
+ )
286
+ ))
287
+
288
+ /**
289
+ * Retrieve the fiber from the FiberHandle.
290
+ *
291
+ * @since 2.0.0
292
+ * @categories combinators
293
+ */
294
+ export const unsafeGet = <A, E>(self: FiberHandle<A, E>): Option.Option<Fiber.RuntimeFiber<A, E>> =>
295
+ self.state._tag === "Closed" ? Option.none() : Option.fromNullable(self.state.fiber)
296
+
297
+ /**
298
+ * Retrieve the fiber from the FiberHandle.
299
+ *
300
+ * @since 2.0.0
301
+ * @categories combinators
302
+ */
303
+ export const get = <A, E>(self: FiberHandle<A, E>): Effect.Effect<Fiber.RuntimeFiber<A, E>, NoSuchElementException> =>
304
+ Effect.suspend(() => unsafeGet(self))
305
+
306
+ /**
307
+ * @since 2.0.0
308
+ * @categories combinators
309
+ */
310
+ export const clear = <A, E>(self: FiberHandle<A, E>): Effect.Effect<void> =>
311
+ Effect.uninterruptibleMask((restore) =>
312
+ Effect.withFiberRuntime((fiber) => {
313
+ if (self.state._tag === "Closed" || self.state.fiber === undefined) {
314
+ return Effect.void
315
+ }
316
+ return Effect.zipRight(
317
+ restore(Fiber.interruptAs(self.state.fiber, FiberId.combine(fiber.id(), internalFiberId))),
318
+ Effect.sync(() => {
319
+ if (self.state._tag === "Open") {
320
+ self.state.fiber = undefined
321
+ }
322
+ })
323
+ )
324
+ })
325
+ )
326
+
327
+ const constInterruptedFiber = (function() {
328
+ let fiber: Fiber.RuntimeFiber<never, never> | undefined = undefined
329
+ return () => {
330
+ if (fiber === undefined) {
331
+ fiber = Effect.runFork(Effect.interrupt)
332
+ }
333
+ return fiber
334
+ }
335
+ })()
336
+
337
+ /**
338
+ * Run an Effect and add the forked fiber to the FiberHandle.
339
+ * When the fiber completes, it will be removed from the FiberHandle.
340
+ *
341
+ * @since 2.0.0
342
+ * @categories combinators
343
+ */
344
+ export const run: {
345
+ <A, E>(
346
+ self: FiberHandle<A, E>,
347
+ options?: {
348
+ readonly onlyIfMissing?: boolean
349
+ readonly propagateInterruption?: boolean | undefined
350
+ }
351
+ ): <R, XE extends E, XA extends A>(
352
+ effect: Effect.Effect<XA, XE, R>
353
+ ) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>
354
+ <A, E, R, XE extends E, XA extends A>(
355
+ self: FiberHandle<A, E>,
356
+ effect: Effect.Effect<XA, XE, R>,
357
+ options?: {
358
+ readonly onlyIfMissing?: boolean
359
+ readonly propagateInterruption?: boolean | undefined
360
+ }
361
+ ): Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>
362
+ } = function() {
363
+ const self = arguments[0] as FiberHandle
364
+ if (Effect.isEffect(arguments[1])) {
365
+ return runImpl(self, arguments[1], arguments[2]) as any
366
+ }
367
+ const options = arguments[1]
368
+ return (effect: Effect.Effect<unknown, unknown, any>) => runImpl(self, effect, options)
369
+ }
370
+
371
+ const runImpl = <A, E, R, XE extends E, XA extends A>(
372
+ self: FiberHandle<A, E>,
373
+ effect: Effect.Effect<XA, XE, R>,
374
+ options?: {
375
+ readonly onlyIfMissing?: boolean
376
+ readonly propagateInterruption?: boolean | undefined
377
+ }
378
+ ): Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R> =>
379
+ Effect.withFiberRuntime((parent) => {
380
+ if (self.state._tag === "Closed") {
381
+ return Effect.interrupt
382
+ } else if (self.state.fiber !== undefined && options?.onlyIfMissing === true) {
383
+ return Effect.sync(constInterruptedFiber)
384
+ }
385
+ const runtime = Runtime.make<R>({
386
+ context: parent.currentContext as any,
387
+ fiberRefs: parent.getFiberRefs(),
388
+ runtimeFlags: Runtime.defaultRuntime.runtimeFlags
389
+ })
390
+ const fiber = Runtime.runFork(runtime)(effect)
391
+ unsafeSet(self, fiber, { ...options, interruptAs: parent.id() })
392
+ return Effect.succeed(fiber)
393
+ })
394
+
395
+ /**
396
+ * Capture a Runtime and use it to fork Effect's, adding the forked fibers to the FiberHandle.
397
+ *
398
+ * @example
399
+ * ```ts
400
+ * import { Context, Effect, FiberHandle } from "effect"
401
+ *
402
+ * interface Users {
403
+ * readonly _: unique symbol
404
+ * }
405
+ * const Users = Context.GenericTag<Users, {
406
+ * getAll: Effect.Effect<Array<unknown>>
407
+ * }>("Users")
408
+ *
409
+ * Effect.gen(function*() {
410
+ * const handle = yield* FiberHandle.make()
411
+ * const run = yield* FiberHandle.runtime(handle)<Users>()
412
+ *
413
+ * // run an effect and set the fiber in the handle
414
+ * run(Effect.andThen(Users, _ => _.getAll))
415
+ *
416
+ * // this will interrupt the previous fiber
417
+ * run(Effect.andThen(Users, _ => _.getAll))
418
+ * }).pipe(
419
+ * Effect.scoped // The fiber will be interrupted when the scope is closed
420
+ * )
421
+ * ```
422
+ *
423
+ * @since 2.0.0
424
+ * @categories combinators
425
+ */
426
+ export const runtime: <A, E>(
427
+ self: FiberHandle<A, E>
428
+ ) => <R = never>() => Effect.Effect<
429
+ <XE extends E, XA extends A>(
430
+ effect: Effect.Effect<XA, XE, R>,
431
+ options?:
432
+ | Runtime.RunForkOptions & {
433
+ readonly onlyIfMissing?: boolean | undefined
434
+ readonly propagateInterruption?: boolean | undefined
435
+ }
436
+ | undefined
437
+ ) => Fiber.RuntimeFiber<XA, XE>,
438
+ never,
439
+ R
440
+ > = <A, E>(self: FiberHandle<A, E>) => <R>() =>
441
+ Effect.map(
442
+ Effect.runtime<R>(),
443
+ (runtime) => {
444
+ const runFork = Runtime.runFork(runtime)
445
+ return <XE extends E, XA extends A>(
446
+ effect: Effect.Effect<XA, XE, R>,
447
+ options?:
448
+ | Runtime.RunForkOptions & {
449
+ readonly onlyIfMissing?: boolean | undefined
450
+ readonly propagateInterruption?: boolean | undefined
451
+ }
452
+ | undefined
453
+ ) => {
454
+ if (self.state._tag === "Closed") {
455
+ return constInterruptedFiber()
456
+ } else if (self.state.fiber !== undefined && options?.onlyIfMissing === true) {
457
+ return constInterruptedFiber()
458
+ }
459
+ const fiber = runFork(effect, options)
460
+ unsafeSet(self, fiber, options)
461
+ return fiber
462
+ }
463
+ }
464
+ )
465
+
466
+ /**
467
+ * Capture a Runtime and use it to fork Effect's, adding the forked fibers to the FiberHandle.
468
+ *
469
+ * The returned run function will return Promise's that will resolve when the
470
+ * fiber completes.
471
+ *
472
+ * @since 3.13.0
473
+ * @categories combinators
474
+ */
475
+ export const runtimePromise = <A, E>(self: FiberHandle<A, E>): <R = never>() => Effect.Effect<
476
+ <XE extends E, XA extends A>(
477
+ effect: Effect.Effect<XA, XE, R>,
478
+ options?:
479
+ | Runtime.RunForkOptions & { readonly propagateInterruption?: boolean | undefined }
480
+ | undefined
481
+ ) => Promise<XA>,
482
+ never,
483
+ R
484
+ > =>
485
+ <R>() =>
486
+ Effect.map(
487
+ runtime(self)<R>(),
488
+ (runFork) =>
489
+ <XE extends E, XA extends A>(
490
+ effect: Effect.Effect<XA, XE, R>,
491
+ options?:
492
+ | Runtime.RunForkOptions & { readonly propagateInterruption?: boolean | undefined }
493
+ | undefined
494
+ ): Promise<XA> =>
495
+ new Promise((resolve, reject) =>
496
+ runFork(effect, options).addObserver((exit) => {
497
+ if (Exit.isSuccess(exit)) {
498
+ resolve(exit.value)
499
+ } else {
500
+ reject(Cause.squash(exit.cause))
501
+ }
502
+ })
503
+ )
504
+ )
505
+
506
+ /**
507
+ * If any of the Fiber's in the handle terminate with a failure,
508
+ * the returned Effect will terminate with the first failure that occurred.
509
+ *
510
+ * @since 2.0.0
511
+ * @categories combinators
512
+ * @example
513
+ * ```ts
514
+ * import { Effect, FiberHandle } from "effect";
515
+ *
516
+ * Effect.gen(function* (_) {
517
+ * const handle = yield* _(FiberHandle.make());
518
+ * yield* _(FiberHandle.set(handle, Effect.runFork(Effect.fail("error"))));
519
+ *
520
+ * // parent fiber will fail with "error"
521
+ * yield* _(FiberHandle.join(handle));
522
+ * });
523
+ * ```
524
+ */
525
+ export const join = <A, E>(self: FiberHandle<A, E>): Effect.Effect<void, E> =>
526
+ Deferred.await(self.deferred as Deferred.Deferred<void, E>)
527
+
528
+ /**
529
+ * Wait for the fiber in the FiberHandle to complete.
530
+ *
531
+ * @since 3.13.0
532
+ * @categories combinators
533
+ */
534
+ export const awaitEmpty = <A, E>(self: FiberHandle<A, E>): Effect.Effect<void, E> =>
535
+ Effect.suspend(() => {
536
+ if (self.state._tag === "Closed" || self.state.fiber === undefined) {
537
+ return Effect.void
538
+ }
539
+ return Fiber.await(self.state.fiber)
540
+ })