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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. package/SourceLocation/package.json +6 -0
  2. package/dist/cjs/Effect.js +2 -28
  3. package/dist/cjs/Effect.js.map +1 -1
  4. package/dist/cjs/FiberRef.js +12 -1
  5. package/dist/cjs/FiberRef.js.map +1 -1
  6. package/dist/cjs/Layer.js +2 -24
  7. package/dist/cjs/Layer.js.map +1 -1
  8. package/dist/cjs/RuntimeFlags.js +1 -29
  9. package/dist/cjs/RuntimeFlags.js.map +1 -1
  10. package/dist/cjs/SourceLocation.js +60 -0
  11. package/dist/cjs/SourceLocation.js.map +1 -0
  12. package/dist/cjs/Tracer.js +1 -15
  13. package/dist/cjs/Tracer.js.map +1 -1
  14. package/dist/cjs/Utils.js +1 -1
  15. package/dist/cjs/Utils.js.map +1 -1
  16. package/dist/cjs/index.js +3 -1
  17. package/dist/cjs/index.js.map +1 -1
  18. package/dist/cjs/internal/clock.js +1 -1
  19. package/dist/cjs/internal/clock.js.map +1 -1
  20. package/dist/cjs/internal/core.js +17 -50
  21. package/dist/cjs/internal/core.js.map +1 -1
  22. package/dist/cjs/internal/effect/circular.js +18 -30
  23. package/dist/cjs/internal/effect/circular.js.map +1 -1
  24. package/dist/cjs/internal/fiberRuntime.js +16 -65
  25. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  26. package/dist/cjs/internal/layer/circular.js +1 -5
  27. package/dist/cjs/internal/layer/circular.js.map +1 -1
  28. package/dist/cjs/internal/layer.js +1 -3
  29. package/dist/cjs/internal/layer.js.map +1 -1
  30. package/dist/cjs/internal/logger.js +25 -2
  31. package/dist/cjs/internal/logger.js.map +1 -1
  32. package/dist/cjs/internal/runtimeFlags.js +2 -11
  33. package/dist/cjs/internal/runtimeFlags.js.map +1 -1
  34. package/dist/cjs/internal/tracer.js +1 -114
  35. package/dist/cjs/internal/tracer.js.map +1 -1
  36. package/dist/dts/Config.d.ts +2 -2
  37. package/dist/dts/Config.d.ts.map +1 -1
  38. package/dist/dts/Effect.d.ts +8 -29
  39. package/dist/dts/Effect.d.ts.map +1 -1
  40. package/dist/dts/FiberRef.d.ts +12 -0
  41. package/dist/dts/FiberRef.d.ts.map +1 -1
  42. package/dist/dts/Layer.d.ts +0 -22
  43. package/dist/dts/Layer.d.ts.map +1 -1
  44. package/dist/dts/RuntimeFlags.d.ts +0 -28
  45. package/dist/dts/RuntimeFlags.d.ts.map +1 -1
  46. package/dist/dts/SourceLocation.d.ts +88 -0
  47. package/dist/dts/SourceLocation.d.ts.map +1 -0
  48. package/dist/dts/Tracer.d.ts +0 -15
  49. package/dist/dts/Tracer.d.ts.map +1 -1
  50. package/dist/dts/index.d.ts +6 -0
  51. package/dist/dts/index.d.ts.map +1 -1
  52. package/dist/dts/internal/core.d.ts.map +1 -1
  53. package/dist/dts/internal/layer.d.ts.map +1 -1
  54. package/dist/dts/internal/runtimeFlags.d.ts.map +1 -1
  55. package/dist/esm/Effect.js +0 -26
  56. package/dist/esm/Effect.js.map +1 -1
  57. package/dist/esm/FiberRef.js +11 -0
  58. package/dist/esm/FiberRef.js.map +1 -1
  59. package/dist/esm/Layer.js +0 -22
  60. package/dist/esm/Layer.js.map +1 -1
  61. package/dist/esm/RuntimeFlags.js +0 -28
  62. package/dist/esm/RuntimeFlags.js.map +1 -1
  63. package/dist/esm/SourceLocation.js +51 -0
  64. package/dist/esm/SourceLocation.js.map +1 -0
  65. package/dist/esm/Tracer.js +0 -14
  66. package/dist/esm/Tracer.js.map +1 -1
  67. package/dist/esm/Utils.js +1 -1
  68. package/dist/esm/Utils.js.map +1 -1
  69. package/dist/esm/index.js +6 -0
  70. package/dist/esm/index.js.map +1 -1
  71. package/dist/esm/internal/clock.js +1 -1
  72. package/dist/esm/internal/clock.js.map +1 -1
  73. package/dist/esm/internal/core.js +12 -45
  74. package/dist/esm/internal/core.js.map +1 -1
  75. package/dist/esm/internal/effect/circular.js +18 -30
  76. package/dist/esm/internal/effect/circular.js.map +1 -1
  77. package/dist/esm/internal/fiberRuntime.js +13 -60
  78. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  79. package/dist/esm/internal/layer/circular.js +0 -4
  80. package/dist/esm/internal/layer/circular.js.map +1 -1
  81. package/dist/esm/internal/layer.js +0 -2
  82. package/dist/esm/internal/layer.js.map +1 -1
  83. package/dist/esm/internal/logger.js +25 -2
  84. package/dist/esm/internal/logger.js.map +1 -1
  85. package/dist/esm/internal/runtimeFlags.js +1 -9
  86. package/dist/esm/internal/runtimeFlags.js.map +1 -1
  87. package/dist/esm/internal/tracer.js +0 -111
  88. package/dist/esm/internal/tracer.js.map +1 -1
  89. package/package.json +12 -1
  90. package/src/Arbitrary.ts +1101 -0
  91. package/src/Array.ts +3589 -0
  92. package/src/BigDecimal.ts +1349 -0
  93. package/src/BigInt.ts +643 -0
  94. package/src/Boolean.ts +287 -0
  95. package/src/Brand.ts +360 -0
  96. package/src/Cache.ts +281 -0
  97. package/src/Cause.ts +1555 -0
  98. package/src/Channel.ts +2355 -0
  99. package/src/ChildExecutorDecision.ts +146 -0
  100. package/src/Chunk.ts +1495 -0
  101. package/src/Clock.ts +111 -0
  102. package/src/Config.ts +542 -0
  103. package/src/ConfigError.ts +270 -0
  104. package/src/ConfigProvider.ts +333 -0
  105. package/src/ConfigProviderPathPatch.ts +100 -0
  106. package/src/Console.ts +226 -0
  107. package/src/Context.ts +585 -0
  108. package/src/Cron.ts +706 -0
  109. package/src/Data.ts +596 -0
  110. package/src/DateTime.ts +1686 -0
  111. package/src/DefaultServices.ts +34 -0
  112. package/src/Deferred.ts +301 -0
  113. package/src/Differ.ts +450 -0
  114. package/src/Duration.ts +1000 -0
  115. package/src/Effect.ts +14817 -0
  116. package/src/Effectable.ts +107 -0
  117. package/src/Either.ts +1040 -0
  118. package/src/Encoding.ts +195 -0
  119. package/src/Equal.ts +98 -0
  120. package/src/Equivalence.ts +235 -0
  121. package/src/ExecutionPlan.ts +308 -0
  122. package/src/ExecutionStrategy.ts +119 -0
  123. package/src/Exit.ts +467 -0
  124. package/src/FastCheck.ts +9 -0
  125. package/src/Fiber.ts +744 -0
  126. package/src/FiberHandle.ts +540 -0
  127. package/src/FiberId.ts +195 -0
  128. package/src/FiberMap.ts +656 -0
  129. package/src/FiberRef.ts +444 -0
  130. package/src/FiberRefs.ts +204 -0
  131. package/src/FiberRefsPatch.ts +105 -0
  132. package/src/FiberSet.ts +491 -0
  133. package/src/FiberStatus.ts +108 -0
  134. package/src/Function.ts +1222 -0
  135. package/src/GlobalValue.ts +53 -0
  136. package/src/Graph.ts +3732 -0
  137. package/src/GroupBy.ts +103 -0
  138. package/src/HKT.ts +45 -0
  139. package/src/Hash.ts +195 -0
  140. package/src/HashMap.ts +519 -0
  141. package/src/HashRing.ts +317 -0
  142. package/src/HashSet.ts +2346 -0
  143. package/src/Inspectable.ts +287 -0
  144. package/src/Iterable.ts +1119 -0
  145. package/src/JSONSchema.ts +1044 -0
  146. package/src/KeyedPool.ts +167 -0
  147. package/src/Layer.ts +1228 -0
  148. package/src/LayerMap.ts +436 -0
  149. package/src/List.ts +977 -0
  150. package/src/LogLevel.ts +285 -0
  151. package/src/LogSpan.ts +25 -0
  152. package/src/Logger.ts +702 -0
  153. package/src/Mailbox.ts +268 -0
  154. package/src/ManagedRuntime.ts +180 -0
  155. package/src/Match.ts +1477 -0
  156. package/src/MergeDecision.ts +95 -0
  157. package/src/MergeState.ts +172 -0
  158. package/src/MergeStrategy.ts +107 -0
  159. package/src/Metric.ts +780 -0
  160. package/src/MetricBoundaries.ts +69 -0
  161. package/src/MetricHook.ts +151 -0
  162. package/src/MetricKey.ts +224 -0
  163. package/src/MetricKeyType.ts +262 -0
  164. package/src/MetricLabel.ts +47 -0
  165. package/src/MetricPair.ts +71 -0
  166. package/src/MetricPolling.ts +148 -0
  167. package/src/MetricRegistry.ts +48 -0
  168. package/src/MetricState.ts +257 -0
  169. package/src/Micro.ts +4405 -0
  170. package/src/ModuleVersion.ts +18 -0
  171. package/src/MutableHashMap.ts +411 -0
  172. package/src/MutableHashSet.ts +706 -0
  173. package/src/MutableList.ts +297 -0
  174. package/src/MutableQueue.ts +227 -0
  175. package/src/MutableRef.ts +202 -0
  176. package/src/NonEmptyIterable.ts +32 -0
  177. package/src/Number.ts +1071 -0
  178. package/src/Option.ts +2170 -0
  179. package/src/Order.ts +373 -0
  180. package/src/Ordering.ts +111 -0
  181. package/src/ParseResult.ts +2031 -0
  182. package/src/PartitionedSemaphore.ts +200 -0
  183. package/src/Pipeable.ts +566 -0
  184. package/src/Pool.ts +204 -0
  185. package/src/Predicate.ts +1405 -0
  186. package/src/Pretty.ts +205 -0
  187. package/src/PrimaryKey.ts +23 -0
  188. package/src/PubSub.ts +182 -0
  189. package/src/Queue.ts +644 -0
  190. package/src/Random.ts +204 -0
  191. package/src/RateLimiter.ts +138 -0
  192. package/src/RcMap.ts +141 -0
  193. package/src/RcRef.ts +122 -0
  194. package/src/Readable.ts +93 -0
  195. package/src/Record.ts +1274 -0
  196. package/src/RedBlackTree.ts +421 -0
  197. package/src/Redacted.ts +144 -0
  198. package/src/Ref.ts +180 -0
  199. package/src/RegExp.ts +38 -0
  200. package/src/Reloadable.ts +127 -0
  201. package/src/Request.ts +347 -0
  202. package/src/RequestBlock.ts +118 -0
  203. package/src/RequestResolver.ts +366 -0
  204. package/src/Resource.ts +119 -0
  205. package/src/Runtime.ts +383 -0
  206. package/src/RuntimeFlags.ts +336 -0
  207. package/src/RuntimeFlagsPatch.ts +183 -0
  208. package/src/STM.ts +2045 -0
  209. package/src/Schedule.ts +2219 -0
  210. package/src/ScheduleDecision.ts +62 -0
  211. package/src/ScheduleInterval.ts +151 -0
  212. package/src/ScheduleIntervals.ts +122 -0
  213. package/src/Scheduler.ts +353 -0
  214. package/src/Schema.ts +10914 -0
  215. package/src/SchemaAST.ts +3043 -0
  216. package/src/Scope.ts +204 -0
  217. package/src/ScopedCache.ts +151 -0
  218. package/src/ScopedRef.ts +117 -0
  219. package/src/Secret.ts +88 -0
  220. package/src/SingleProducerAsyncInput.ts +67 -0
  221. package/src/Sink.ts +1461 -0
  222. package/src/SortedMap.ts +287 -0
  223. package/src/SortedSet.ts +390 -0
  224. package/src/SourceLocation.ts +108 -0
  225. package/src/Stream.ts +6468 -0
  226. package/src/StreamEmit.ts +136 -0
  227. package/src/StreamHaltStrategy.ts +123 -0
  228. package/src/Streamable.ts +45 -0
  229. package/src/String.ts +778 -0
  230. package/src/Struct.ts +243 -0
  231. package/src/Subscribable.ts +100 -0
  232. package/src/SubscriptionRef.ts +298 -0
  233. package/src/Supervisor.ts +240 -0
  234. package/src/Symbol.ts +29 -0
  235. package/src/SynchronizedRef.ts +270 -0
  236. package/src/TArray.ts +495 -0
  237. package/src/TDeferred.ts +100 -0
  238. package/src/TMap.ts +515 -0
  239. package/src/TPriorityQueue.ts +223 -0
  240. package/src/TPubSub.ts +200 -0
  241. package/src/TQueue.ts +432 -0
  242. package/src/TRandom.ts +129 -0
  243. package/src/TReentrantLock.ts +224 -0
  244. package/src/TRef.ts +178 -0
  245. package/src/TSemaphore.ts +129 -0
  246. package/src/TSet.ts +365 -0
  247. package/src/TSubscriptionRef.ts +192 -0
  248. package/src/Take.ts +258 -0
  249. package/src/TestAnnotation.ts +158 -0
  250. package/src/TestAnnotationMap.ts +119 -0
  251. package/src/TestAnnotations.ts +117 -0
  252. package/src/TestClock.ts +556 -0
  253. package/src/TestConfig.ts +47 -0
  254. package/src/TestContext.ts +36 -0
  255. package/src/TestLive.ts +53 -0
  256. package/src/TestServices.ts +390 -0
  257. package/src/TestSized.ts +55 -0
  258. package/src/Tracer.ts +182 -0
  259. package/src/Trie.ts +840 -0
  260. package/src/Tuple.ts +305 -0
  261. package/src/Types.ts +353 -0
  262. package/src/Unify.ts +113 -0
  263. package/src/UpstreamPullRequest.ts +117 -0
  264. package/src/UpstreamPullStrategy.ts +121 -0
  265. package/src/Utils.ts +809 -0
  266. package/src/index.ts +1568 -0
  267. package/src/internal/array.ts +8 -0
  268. package/src/internal/blockedRequests.ts +520 -0
  269. package/src/internal/cache.ts +733 -0
  270. package/src/internal/cause.ts +1050 -0
  271. package/src/internal/channel/channelExecutor.ts +1200 -0
  272. package/src/internal/channel/channelState.ts +134 -0
  273. package/src/internal/channel/childExecutorDecision.ts +96 -0
  274. package/src/internal/channel/continuation.ts +200 -0
  275. package/src/internal/channel/mergeDecision.ts +113 -0
  276. package/src/internal/channel/mergeState.ts +120 -0
  277. package/src/internal/channel/mergeStrategy.ts +72 -0
  278. package/src/internal/channel/singleProducerAsyncInput.ts +259 -0
  279. package/src/internal/channel/subexecutor.ts +229 -0
  280. package/src/internal/channel/upstreamPullRequest.ts +84 -0
  281. package/src/internal/channel/upstreamPullStrategy.ts +87 -0
  282. package/src/internal/channel.ts +2603 -0
  283. package/src/internal/clock.ts +95 -0
  284. package/src/internal/completedRequestMap.ts +9 -0
  285. package/src/internal/concurrency.ts +54 -0
  286. package/src/internal/config.ts +716 -0
  287. package/src/internal/configError.ts +304 -0
  288. package/src/internal/configProvider/pathPatch.ts +97 -0
  289. package/src/internal/configProvider.ts +799 -0
  290. package/src/internal/console.ts +153 -0
  291. package/src/internal/context.ts +337 -0
  292. package/src/internal/core-effect.ts +2293 -0
  293. package/src/internal/core-stream.ts +998 -0
  294. package/src/internal/core.ts +3189 -0
  295. package/src/internal/data.ts +36 -0
  296. package/src/internal/dataSource.ts +327 -0
  297. package/src/internal/dateTime.ts +1277 -0
  298. package/src/internal/defaultServices/console.ts +100 -0
  299. package/src/internal/defaultServices.ts +163 -0
  300. package/src/internal/deferred.ts +46 -0
  301. package/src/internal/differ/chunkPatch.ts +211 -0
  302. package/src/internal/differ/contextPatch.ts +232 -0
  303. package/src/internal/differ/hashMapPatch.ts +220 -0
  304. package/src/internal/differ/hashSetPatch.ts +176 -0
  305. package/src/internal/differ/orPatch.ts +311 -0
  306. package/src/internal/differ/readonlyArrayPatch.ts +210 -0
  307. package/src/internal/differ.ts +200 -0
  308. package/src/internal/doNotation.ts +80 -0
  309. package/src/internal/effect/circular.ts +895 -0
  310. package/src/internal/effectable.ts +131 -0
  311. package/src/internal/either.ts +110 -0
  312. package/src/internal/encoding/base64.ts +286 -0
  313. package/src/internal/encoding/base64Url.ts +29 -0
  314. package/src/internal/encoding/common.ts +51 -0
  315. package/src/internal/encoding/hex.ts +315 -0
  316. package/src/internal/errors.ts +7 -0
  317. package/src/internal/executionPlan.ts +114 -0
  318. package/src/internal/executionStrategy.ts +74 -0
  319. package/src/internal/fiber.ts +388 -0
  320. package/src/internal/fiberId.ts +267 -0
  321. package/src/internal/fiberMessage.ts +82 -0
  322. package/src/internal/fiberRefs/patch.ts +144 -0
  323. package/src/internal/fiberRefs.ts +297 -0
  324. package/src/internal/fiberRuntime.ts +3842 -0
  325. package/src/internal/fiberScope.ts +71 -0
  326. package/src/internal/fiberStatus.ts +119 -0
  327. package/src/internal/groupBy.ts +530 -0
  328. package/src/internal/hashMap/array.ts +49 -0
  329. package/src/internal/hashMap/bitwise.ts +32 -0
  330. package/src/internal/hashMap/config.ts +14 -0
  331. package/src/internal/hashMap/keySet.ts +8 -0
  332. package/src/internal/hashMap/node.ts +391 -0
  333. package/src/internal/hashMap.ts +586 -0
  334. package/src/internal/hashSet.ts +323 -0
  335. package/src/internal/keyedPool.ts +244 -0
  336. package/src/internal/layer/circular.ts +214 -0
  337. package/src/internal/layer.ts +1483 -0
  338. package/src/internal/logSpan.ts +20 -0
  339. package/src/internal/logger-circular.ts +24 -0
  340. package/src/internal/logger.ts +522 -0
  341. package/src/internal/mailbox.ts +561 -0
  342. package/src/internal/managedRuntime/circular.ts +6 -0
  343. package/src/internal/managedRuntime.ts +134 -0
  344. package/src/internal/matcher.ts +652 -0
  345. package/src/internal/metric/boundaries.ts +75 -0
  346. package/src/internal/metric/hook.ts +483 -0
  347. package/src/internal/metric/key.ts +167 -0
  348. package/src/internal/metric/keyType.ts +238 -0
  349. package/src/internal/metric/label.ts +41 -0
  350. package/src/internal/metric/pair.ts +48 -0
  351. package/src/internal/metric/polling.ts +149 -0
  352. package/src/internal/metric/registry.ts +187 -0
  353. package/src/internal/metric/state.ts +290 -0
  354. package/src/internal/metric.ts +577 -0
  355. package/src/internal/opCodes/cause.ts +35 -0
  356. package/src/internal/opCodes/channel.ts +83 -0
  357. package/src/internal/opCodes/channelChildExecutorDecision.ts +17 -0
  358. package/src/internal/opCodes/channelMergeDecision.ts +11 -0
  359. package/src/internal/opCodes/channelMergeState.ts +17 -0
  360. package/src/internal/opCodes/channelMergeStrategy.ts +11 -0
  361. package/src/internal/opCodes/channelState.ts +23 -0
  362. package/src/internal/opCodes/channelUpstreamPullRequest.ts +11 -0
  363. package/src/internal/opCodes/channelUpstreamPullStrategy.ts +11 -0
  364. package/src/internal/opCodes/config.ts +65 -0
  365. package/src/internal/opCodes/configError.ts +35 -0
  366. package/src/internal/opCodes/continuation.ts +11 -0
  367. package/src/internal/opCodes/deferred.ts +11 -0
  368. package/src/internal/opCodes/effect.ts +89 -0
  369. package/src/internal/opCodes/layer.ts +59 -0
  370. package/src/internal/opCodes/streamHaltStrategy.ts +23 -0
  371. package/src/internal/option.ts +80 -0
  372. package/src/internal/pool.ts +432 -0
  373. package/src/internal/pubsub.ts +1762 -0
  374. package/src/internal/query.ts +204 -0
  375. package/src/internal/queue.ts +766 -0
  376. package/src/internal/random.ts +161 -0
  377. package/src/internal/rateLimiter.ts +93 -0
  378. package/src/internal/rcMap.ts +285 -0
  379. package/src/internal/rcRef.ts +192 -0
  380. package/src/internal/redBlackTree/iterator.ts +200 -0
  381. package/src/internal/redBlackTree/node.ts +68 -0
  382. package/src/internal/redBlackTree.ts +1245 -0
  383. package/src/internal/redacted.ts +73 -0
  384. package/src/internal/ref.ts +171 -0
  385. package/src/internal/reloadable.ts +140 -0
  386. package/src/internal/request.ts +177 -0
  387. package/src/internal/resource.ts +76 -0
  388. package/src/internal/ringBuffer.ts +68 -0
  389. package/src/internal/runtime.ts +558 -0
  390. package/src/internal/runtimeFlags.ts +178 -0
  391. package/src/internal/runtimeFlagsPatch.ts +103 -0
  392. package/src/internal/schedule/decision.ts +47 -0
  393. package/src/internal/schedule/interval.ts +101 -0
  394. package/src/internal/schedule/intervals.ts +180 -0
  395. package/src/internal/schedule.ts +2199 -0
  396. package/src/internal/schema/errors.ts +191 -0
  397. package/src/internal/schema/schemaId.ts +106 -0
  398. package/src/internal/schema/util.ts +50 -0
  399. package/src/internal/scopedCache.ts +644 -0
  400. package/src/internal/scopedRef.ts +118 -0
  401. package/src/internal/secret.ts +89 -0
  402. package/src/internal/singleShotGen.ts +35 -0
  403. package/src/internal/sink.ts +2120 -0
  404. package/src/internal/stack.ts +10 -0
  405. package/src/internal/stm/core.ts +817 -0
  406. package/src/internal/stm/entry.ts +59 -0
  407. package/src/internal/stm/journal.ts +123 -0
  408. package/src/internal/stm/opCodes/stm.ts +71 -0
  409. package/src/internal/stm/opCodes/stmState.ts +17 -0
  410. package/src/internal/stm/opCodes/strategy.ts +17 -0
  411. package/src/internal/stm/opCodes/tExit.ts +29 -0
  412. package/src/internal/stm/opCodes/tryCommit.ts +11 -0
  413. package/src/internal/stm/stm.ts +1453 -0
  414. package/src/internal/stm/stmState.ts +136 -0
  415. package/src/internal/stm/tArray.ts +550 -0
  416. package/src/internal/stm/tDeferred.ts +81 -0
  417. package/src/internal/stm/tExit.ts +190 -0
  418. package/src/internal/stm/tMap.ts +824 -0
  419. package/src/internal/stm/tPriorityQueue.ts +267 -0
  420. package/src/internal/stm/tPubSub.ts +551 -0
  421. package/src/internal/stm/tQueue.ts +393 -0
  422. package/src/internal/stm/tRandom.ts +140 -0
  423. package/src/internal/stm/tReentrantLock.ts +352 -0
  424. package/src/internal/stm/tRef.ts +195 -0
  425. package/src/internal/stm/tSemaphore.ts +113 -0
  426. package/src/internal/stm/tSet.ts +259 -0
  427. package/src/internal/stm/tSubscriptionRef.ts +286 -0
  428. package/src/internal/stm/tryCommit.ts +34 -0
  429. package/src/internal/stm/txnId.ts +14 -0
  430. package/src/internal/stm/versioned.ts +4 -0
  431. package/src/internal/stream/debounceState.ts +57 -0
  432. package/src/internal/stream/emit.ts +123 -0
  433. package/src/internal/stream/haltStrategy.ts +94 -0
  434. package/src/internal/stream/handoff.ts +187 -0
  435. package/src/internal/stream/handoffSignal.ts +59 -0
  436. package/src/internal/stream/pull.ts +34 -0
  437. package/src/internal/stream/sinkEndReason.ts +30 -0
  438. package/src/internal/stream/zipAllState.ts +88 -0
  439. package/src/internal/stream/zipChunksState.ts +56 -0
  440. package/src/internal/stream.ts +8801 -0
  441. package/src/internal/string-utils.ts +107 -0
  442. package/src/internal/subscriptionRef.ts +138 -0
  443. package/src/internal/supervisor/patch.ts +190 -0
  444. package/src/internal/supervisor.ts +303 -0
  445. package/src/internal/synchronizedRef.ts +114 -0
  446. package/src/internal/take.ts +199 -0
  447. package/src/internal/testing/sleep.ts +27 -0
  448. package/src/internal/testing/suspendedWarningData.ts +85 -0
  449. package/src/internal/testing/warningData.ts +94 -0
  450. package/src/internal/tracer.ts +150 -0
  451. package/src/internal/trie.ts +722 -0
  452. package/src/internal/version.ts +7 -0
@@ -0,0 +1,388 @@
1
+ import type * as Cause from "../Cause.js"
2
+ import * as Clock from "../Clock.js"
3
+ import type * as Effect from "../Effect.js"
4
+ import * as Either from "../Either.js"
5
+ import * as Exit from "../Exit.js"
6
+ import type * as Fiber from "../Fiber.js"
7
+ import * as FiberId from "../FiberId.js"
8
+ import * as FiberStatus from "../FiberStatus.js"
9
+ import { dual, pipe } from "../Function.js"
10
+ import * as HashSet from "../HashSet.js"
11
+ import * as number from "../Number.js"
12
+ import * as Option from "../Option.js"
13
+ import * as order from "../Order.js"
14
+ import { pipeArguments } from "../Pipeable.js"
15
+ import { hasProperty } from "../Predicate.js"
16
+ import * as core from "./core.js"
17
+ import * as effectable from "./effectable.js"
18
+ import * as fiberScope from "./fiberScope.js"
19
+ import * as runtimeFlags from "./runtimeFlags.js"
20
+
21
+ /** @internal */
22
+ const FiberSymbolKey = "effect/Fiber"
23
+
24
+ /** @internal */
25
+ export const FiberTypeId: Fiber.FiberTypeId = Symbol.for(
26
+ FiberSymbolKey
27
+ ) as Fiber.FiberTypeId
28
+
29
+ /** @internal */
30
+ export const fiberVariance = {
31
+ /* c8 ignore next */
32
+ _E: (_: never) => _,
33
+ /* c8 ignore next */
34
+ _A: (_: never) => _
35
+ }
36
+
37
+ /** @internal */
38
+ const fiberProto = {
39
+ [FiberTypeId]: fiberVariance,
40
+ pipe() {
41
+ return pipeArguments(this, arguments)
42
+ }
43
+ }
44
+
45
+ /** @internal */
46
+ const RuntimeFiberSymbolKey = "effect/Fiber"
47
+
48
+ /** @internal */
49
+ export const RuntimeFiberTypeId: Fiber.RuntimeFiberTypeId = Symbol.for(
50
+ RuntimeFiberSymbolKey
51
+ ) as Fiber.RuntimeFiberTypeId
52
+
53
+ /** @internal */
54
+ export const Order: order.Order<Fiber.RuntimeFiber<unknown, unknown>> = pipe(
55
+ order.tuple(number.Order, number.Order),
56
+ order.mapInput((fiber: Fiber.RuntimeFiber<unknown, unknown>) =>
57
+ [
58
+ (fiber.id() as FiberId.Runtime).startTimeMillis,
59
+ (fiber.id() as FiberId.Runtime).id
60
+ ] as const
61
+ )
62
+ )
63
+
64
+ /** @internal */
65
+ export const isFiber = (u: unknown): u is Fiber.Fiber<unknown, unknown> => hasProperty(u, FiberTypeId)
66
+
67
+ /** @internal */
68
+ export const isRuntimeFiber = <A, E>(self: Fiber.Fiber<A, E>): self is Fiber.RuntimeFiber<A, E> =>
69
+ RuntimeFiberTypeId in self
70
+
71
+ /** @internal */
72
+ export const _await = <A, E>(self: Fiber.Fiber<A, E>): Effect.Effect<Exit.Exit<A, E>> => self.await
73
+
74
+ /** @internal */
75
+ export const children = <A, E>(
76
+ self: Fiber.Fiber<A, E>
77
+ ): Effect.Effect<Array<Fiber.RuntimeFiber<any, any>>> => self.children
78
+
79
+ /** @internal */
80
+ export const done = <A, E>(exit: Exit.Exit<A, E>): Fiber.Fiber<A, E> => {
81
+ const _fiber = {
82
+ ...effectable.CommitPrototype,
83
+ commit() {
84
+ return join(this)
85
+ },
86
+ ...fiberProto,
87
+ id: () => FiberId.none,
88
+ await: core.succeed(exit),
89
+ children: core.succeed([]),
90
+ inheritAll: core.void,
91
+ poll: core.succeed(Option.some(exit)),
92
+ interruptAsFork: () => core.void
93
+ }
94
+
95
+ return _fiber
96
+ }
97
+
98
+ /** @internal */
99
+ export const dump = <A, E>(self: Fiber.RuntimeFiber<A, E>): Effect.Effect<Fiber.Fiber.Dump> =>
100
+ core.map(self.status, (status) => ({ id: self.id(), status }))
101
+
102
+ /** @internal */
103
+ export const dumpAll = (
104
+ fibers: Iterable<Fiber.RuntimeFiber<unknown, unknown>>
105
+ ): Effect.Effect<Array<Fiber.Fiber.Dump>> => core.forEachSequential(fibers, dump)
106
+
107
+ /** @internal */
108
+ export const fail = <E>(error: E): Fiber.Fiber<never, E> => done(Exit.fail(error))
109
+
110
+ /** @internal */
111
+ export const failCause = <E>(cause: Cause.Cause<E>): Fiber.Fiber<never, E> => done(Exit.failCause(cause))
112
+
113
+ /** @internal */
114
+ export const fromEffect = <A, E>(effect: Effect.Effect<A, E>): Effect.Effect<Fiber.Fiber<A, E>> =>
115
+ core.map(core.exit(effect), done)
116
+
117
+ /** @internal */
118
+ export const id = <A, E>(self: Fiber.Fiber<A, E>): FiberId.FiberId => self.id()
119
+
120
+ /** @internal */
121
+ export const inheritAll = <A, E>(self: Fiber.Fiber<A, E>): Effect.Effect<void> => self.inheritAll
122
+
123
+ /** @internal */
124
+ export const interrupted = (fiberId: FiberId.FiberId): Fiber.Fiber<never> => done(Exit.interrupt(fiberId))
125
+
126
+ /** @internal */
127
+ export const interruptAll = (fibers: Iterable<Fiber.Fiber<any, any>>): Effect.Effect<void> =>
128
+ core.flatMap(core.fiberId, (fiberId) => pipe(fibers, interruptAllAs(fiberId)))
129
+
130
+ /** @internal */
131
+ export const interruptAllAs = dual<
132
+ (fiberId: FiberId.FiberId) => (fibers: Iterable<Fiber.Fiber<any, any>>) => Effect.Effect<void>,
133
+ (fibers: Iterable<Fiber.Fiber<any, any>>, fiberId: FiberId.FiberId) => Effect.Effect<void>
134
+ >(
135
+ 2,
136
+ core.fnUntraced(function*(fibers, fiberId) {
137
+ for (const fiber of fibers) {
138
+ if (isRuntimeFiber(fiber)) {
139
+ fiber.unsafeInterruptAsFork(fiberId)
140
+ continue
141
+ }
142
+ yield* fiber.interruptAsFork(fiberId)
143
+ }
144
+ for (const fiber of fibers) {
145
+ if (isRuntimeFiber(fiber) && fiber.unsafePoll()) {
146
+ continue
147
+ }
148
+ yield* fiber.await
149
+ }
150
+ })
151
+ )
152
+
153
+ /** @internal */
154
+ export const interruptAsFork = dual<
155
+ (fiberId: FiberId.FiberId) => <A, E>(self: Fiber.Fiber<A, E>) => Effect.Effect<void>,
156
+ <A, E>(self: Fiber.Fiber<A, E>, fiberId: FiberId.FiberId) => Effect.Effect<void>
157
+ >(2, (self, fiberId) => self.interruptAsFork(fiberId))
158
+
159
+ /** @internal */
160
+ export const join = <A, E>(self: Fiber.Fiber<A, E>): Effect.Effect<A, E> =>
161
+ core.zipLeft(core.flatten(self.await), self.inheritAll)
162
+
163
+ /** @internal */
164
+ export const map = dual<
165
+ <A, B>(f: (a: A) => B) => <E>(self: Fiber.Fiber<A, E>) => Fiber.Fiber<B, E>,
166
+ <A, E, B>(self: Fiber.Fiber<A, E>, f: (a: A) => B) => Fiber.Fiber<B, E>
167
+ >(2, (self, f) => mapEffect(self, (a) => core.sync(() => f(a))))
168
+
169
+ /** @internal */
170
+ export const mapEffect = dual<
171
+ <A, A2, E2>(f: (a: A) => Effect.Effect<A2, E2>) => <E>(self: Fiber.Fiber<A, E>) => Fiber.Fiber<A2, E | E2>,
172
+ <A, E, A2, E2>(self: Fiber.Fiber<A, E>, f: (a: A) => Effect.Effect<A2, E2>) => Fiber.Fiber<A2, E | E2>
173
+ >(2, (self, f) => {
174
+ const _fiber = {
175
+ ...effectable.CommitPrototype,
176
+ commit() {
177
+ return join(this)
178
+ },
179
+ ...fiberProto,
180
+ id: () => self.id(),
181
+ await: core.flatMap(self.await, Exit.forEachEffect(f)),
182
+ children: self.children,
183
+ inheritAll: self.inheritAll,
184
+ poll: core.flatMap(self.poll, (result) => {
185
+ switch (result._tag) {
186
+ case "None":
187
+ return core.succeed(Option.none())
188
+ case "Some":
189
+ return pipe(
190
+ Exit.forEachEffect(result.value, f),
191
+ core.map(Option.some)
192
+ )
193
+ }
194
+ }),
195
+ interruptAsFork: (id: FiberId.FiberId) => self.interruptAsFork(id)
196
+ }
197
+ return _fiber
198
+ })
199
+
200
+ /** @internal */
201
+ export const mapFiber = dual<
202
+ <E, E2, A, B>(
203
+ f: (a: A) => Fiber.Fiber<B, E2>
204
+ ) => (self: Fiber.Fiber<A, E>) => Effect.Effect<Fiber.Fiber<B, E | E2>>,
205
+ <A, E, E2, B>(
206
+ self: Fiber.Fiber<A, E>,
207
+ f: (a: A) => Fiber.Fiber<B, E2>
208
+ ) => Effect.Effect<Fiber.Fiber<B, E | E2>>
209
+ >(2, <A, E, E2, B>(
210
+ self: Fiber.Fiber<A, E>,
211
+ f: (a: A) => Fiber.Fiber<B, E2>
212
+ ) =>
213
+ core.map(
214
+ self.await,
215
+ Exit.match({
216
+ onFailure: (cause): Fiber.Fiber<B, E | E2> => failCause(cause),
217
+ onSuccess: (a) => f(a)
218
+ })
219
+ ))
220
+
221
+ /** @internal */
222
+ export const match = dual<
223
+ <A, E, Z>(
224
+ options: {
225
+ readonly onFiber: (fiber: Fiber.Fiber<A, E>) => Z
226
+ readonly onRuntimeFiber: (fiber: Fiber.RuntimeFiber<A, E>) => Z
227
+ }
228
+ ) => (self: Fiber.Fiber<A, E>) => Z,
229
+ <A, E, Z>(
230
+ self: Fiber.Fiber<A, E>,
231
+ options: {
232
+ readonly onFiber: (fiber: Fiber.Fiber<A, E>) => Z
233
+ readonly onRuntimeFiber: (fiber: Fiber.RuntimeFiber<A, E>) => Z
234
+ }
235
+ ) => Z
236
+ >(2, (self, { onFiber, onRuntimeFiber }) => {
237
+ if (isRuntimeFiber(self)) {
238
+ return onRuntimeFiber(self)
239
+ }
240
+ return onFiber(self)
241
+ })
242
+
243
+ /** @internal */
244
+ const _never = {
245
+ ...effectable.CommitPrototype,
246
+ commit() {
247
+ return join(this)
248
+ },
249
+ ...fiberProto,
250
+ id: () => FiberId.none,
251
+ await: core.never,
252
+ children: core.succeed([]),
253
+ inheritAll: core.never,
254
+ poll: core.succeed(Option.none()),
255
+ interruptAsFork: () => core.never
256
+ }
257
+
258
+ /** @internal */
259
+ export const never: Fiber.Fiber<never> = _never
260
+
261
+ /** @internal */
262
+ export const orElse = dual<
263
+ <A2, E2>(that: Fiber.Fiber<A2, E2>) => <A, E>(self: Fiber.Fiber<A, E>) => Fiber.Fiber<A | A2, E | E2>,
264
+ <A, E, A2, E2>(self: Fiber.Fiber<A, E>, that: Fiber.Fiber<A2, E2>) => Fiber.Fiber<A | A2, E | E2>
265
+ >(2, (self, that) => ({
266
+ ...effectable.CommitPrototype,
267
+ commit() {
268
+ return join(this)
269
+ },
270
+ ...fiberProto,
271
+ id: () => FiberId.getOrElse(self.id(), that.id()),
272
+ await: core.zipWith(
273
+ self.await,
274
+ that.await,
275
+ (exit1, exit2) => (Exit.isSuccess(exit1) ? exit1 : exit2)
276
+ ),
277
+ children: self.children,
278
+ inheritAll: core.zipRight(that.inheritAll, self.inheritAll),
279
+ poll: core.zipWith(
280
+ self.poll,
281
+ that.poll,
282
+ (option1, option2) => {
283
+ switch (option1._tag) {
284
+ case "None": {
285
+ return Option.none()
286
+ }
287
+ case "Some": {
288
+ return Exit.isSuccess(option1.value) ? option1 : option2
289
+ }
290
+ }
291
+ }
292
+ ),
293
+ interruptAsFork: (id) =>
294
+ pipe(
295
+ core.interruptAsFiber(self, id),
296
+ core.zipRight(pipe(that, core.interruptAsFiber(id))),
297
+ core.asVoid
298
+ )
299
+ }))
300
+
301
+ /** @internal */
302
+ export const orElseEither = dual<
303
+ <A2, E2>(that: Fiber.Fiber<A2, E2>) => <A, E>(self: Fiber.Fiber<A, E>) => Fiber.Fiber<Either.Either<A2, A>, E | E2>,
304
+ <A, E, A2, E2>(self: Fiber.Fiber<A, E>, that: Fiber.Fiber<A2, E2>) => Fiber.Fiber<Either.Either<A2, A>, E | E2>
305
+ >(2, (self, that) => orElse(map(self, Either.left), map(that, Either.right)))
306
+
307
+ /** @internal */
308
+ export const poll = <A, E>(self: Fiber.Fiber<A, E>): Effect.Effect<Option.Option<Exit.Exit<A, E>>> => self.poll
309
+
310
+ // forked from https://github.com/sindresorhus/parse-ms/blob/4da2ffbdba02c6e288c08236695bdece0adca173/index.js
311
+ // MIT License
312
+ // Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
313
+ /** @internal */
314
+ const parseMs = (milliseconds: number) => {
315
+ const roundTowardsZero = milliseconds > 0 ? Math.floor : Math.ceil
316
+ return {
317
+ days: roundTowardsZero(milliseconds / 86400000),
318
+ hours: roundTowardsZero(milliseconds / 3600000) % 24,
319
+ minutes: roundTowardsZero(milliseconds / 60000) % 60,
320
+ seconds: roundTowardsZero(milliseconds / 1000) % 60,
321
+ milliseconds: roundTowardsZero(milliseconds) % 1000,
322
+ microseconds: roundTowardsZero(milliseconds * 1000) % 1000,
323
+ nanoseconds: roundTowardsZero(milliseconds * 1e6) % 1000
324
+ }
325
+ }
326
+
327
+ /** @internal */
328
+ const renderStatus = (status: FiberStatus.FiberStatus): string => {
329
+ if (FiberStatus.isDone(status)) {
330
+ return "Done"
331
+ }
332
+ if (FiberStatus.isRunning(status)) {
333
+ return "Running"
334
+ }
335
+
336
+ const isInterruptible = runtimeFlags.interruptible(status.runtimeFlags) ?
337
+ "interruptible" :
338
+ "uninterruptible"
339
+ return `Suspended(${isInterruptible})`
340
+ }
341
+
342
+ /** @internal */
343
+ export const pretty = <A, E>(self: Fiber.RuntimeFiber<A, E>): Effect.Effect<string> =>
344
+ core.flatMap(Clock.currentTimeMillis, (now) =>
345
+ core.map(dump(self), (dump) => {
346
+ const time = now - dump.id.startTimeMillis
347
+ const { days, hours, milliseconds, minutes, seconds } = parseMs(time)
348
+ const lifeMsg = (days === 0 ? "" : `${days}d`) +
349
+ (days === 0 && hours === 0 ? "" : `${hours}h`) +
350
+ (days === 0 && hours === 0 && minutes === 0 ? "" : `${minutes}m`) +
351
+ (days === 0 && hours === 0 && minutes === 0 && seconds === 0 ? "" : `${seconds}s`) +
352
+ `${milliseconds}ms`
353
+ const waitMsg = FiberStatus.isSuspended(dump.status) ?
354
+ (() => {
355
+ const ids = FiberId.ids(dump.status.blockingOn)
356
+ return HashSet.size(ids) > 0
357
+ ? `waiting on ` + Array.from(ids).map((id) => `${id}`).join(", ")
358
+ : ""
359
+ })() :
360
+ ""
361
+ const statusMsg = renderStatus(dump.status)
362
+ return `[Fiber](#${dump.id.id}) (${lifeMsg}) ${waitMsg}\n Status: ${statusMsg}`
363
+ }))
364
+
365
+ /** @internal */
366
+ export const unsafeRoots = (): Array<Fiber.RuntimeFiber<any, any>> => Array.from(fiberScope.globalScope.roots)
367
+
368
+ /** @internal */
369
+ export const roots: Effect.Effect<Array<Fiber.RuntimeFiber<any, any>>> = core.sync(unsafeRoots)
370
+
371
+ /** @internal */
372
+ export const status = <A, E>(self: Fiber.RuntimeFiber<A, E>): Effect.Effect<FiberStatus.FiberStatus> => self.status
373
+
374
+ /** @internal */
375
+ export const succeed = <A>(value: A): Fiber.Fiber<A> => done(Exit.succeed(value))
376
+
377
+ const void_: Fiber.Fiber<void> = succeed(void 0)
378
+ export {
379
+ /** @internal */
380
+ void_ as void
381
+ }
382
+
383
+ /** @internal */
384
+ export const currentFiberURI = "effect/FiberCurrent"
385
+
386
+ /** @internal */
387
+ export const getCurrentFiber = (): Option.Option<Fiber.RuntimeFiber<any, any>> =>
388
+ Option.fromNullable((globalThis as any)[currentFiberURI])
@@ -0,0 +1,267 @@
1
+ import * as Equal from "../Equal.js"
2
+ import type * as FiberId from "../FiberId.js"
3
+ import { dual, pipe } from "../Function.js"
4
+ import { globalValue } from "../GlobalValue.js"
5
+ import * as Hash from "../Hash.js"
6
+ import * as HashSet from "../HashSet.js"
7
+ import { format, NodeInspectSymbol, toJSON } from "../Inspectable.js"
8
+ import * as MutableRef from "../MutableRef.js"
9
+ import * as Option from "../Option.js"
10
+ import { hasProperty } from "../Predicate.js"
11
+
12
+ /** @internal */
13
+ const FiberIdSymbolKey = "effect/FiberId"
14
+
15
+ /** @internal */
16
+ export const FiberIdTypeId: FiberId.FiberIdTypeId = Symbol.for(
17
+ FiberIdSymbolKey
18
+ ) as FiberId.FiberIdTypeId
19
+
20
+ /** @internal */
21
+ const OP_NONE = "None" as const
22
+
23
+ /** @internal */
24
+ export type OP_NONE = typeof OP_NONE
25
+
26
+ /** @internal */
27
+ const OP_RUNTIME = "Runtime" as const
28
+
29
+ /** @internal */
30
+ export type OP_RUNTIME = typeof OP_RUNTIME
31
+
32
+ /** @internal */
33
+ const OP_COMPOSITE = "Composite" as const
34
+
35
+ /** @internal */
36
+ export type OP_COMPOSITE = typeof OP_COMPOSITE
37
+
38
+ const emptyHash = Hash.string(`${FiberIdSymbolKey}-${OP_NONE}`)
39
+
40
+ /** @internal */
41
+ class None implements FiberId.None {
42
+ readonly [FiberIdTypeId]: FiberId.FiberIdTypeId = FiberIdTypeId
43
+ readonly _tag = OP_NONE
44
+ readonly id = -1
45
+ readonly startTimeMillis = -1;
46
+ [Hash.symbol](): number {
47
+ return emptyHash
48
+ }
49
+ [Equal.symbol](that: unknown): boolean {
50
+ return isFiberId(that) && that._tag === OP_NONE
51
+ }
52
+ toString() {
53
+ return format(this.toJSON())
54
+ }
55
+ toJSON() {
56
+ return {
57
+ _id: "FiberId",
58
+ _tag: this._tag
59
+ }
60
+ }
61
+ [NodeInspectSymbol]() {
62
+ return this.toJSON()
63
+ }
64
+ }
65
+
66
+ /** @internal */
67
+ class Runtime implements FiberId.Runtime {
68
+ readonly [FiberIdTypeId]: FiberId.FiberIdTypeId = FiberIdTypeId
69
+ readonly _tag = OP_RUNTIME
70
+ constructor(
71
+ readonly id: number,
72
+ readonly startTimeMillis: number
73
+ ) {}
74
+ [Hash.symbol](): number {
75
+ return Hash.cached(this, Hash.string(`${FiberIdSymbolKey}-${this._tag}-${this.id}-${this.startTimeMillis}`))
76
+ }
77
+ [Equal.symbol](that: unknown): boolean {
78
+ return isFiberId(that) &&
79
+ that._tag === OP_RUNTIME &&
80
+ this.id === that.id &&
81
+ this.startTimeMillis === that.startTimeMillis
82
+ }
83
+ toString() {
84
+ return format(this.toJSON())
85
+ }
86
+ toJSON() {
87
+ return {
88
+ _id: "FiberId",
89
+ _tag: this._tag,
90
+ id: this.id,
91
+ startTimeMillis: this.startTimeMillis
92
+ }
93
+ }
94
+ [NodeInspectSymbol]() {
95
+ return this.toJSON()
96
+ }
97
+ }
98
+
99
+ /** @internal */
100
+ class Composite implements FiberId.Composite {
101
+ readonly [FiberIdTypeId]: FiberId.FiberIdTypeId = FiberIdTypeId
102
+ readonly _tag = OP_COMPOSITE
103
+ constructor(
104
+ readonly left: FiberId.FiberId,
105
+ readonly right: FiberId.FiberId
106
+ ) {
107
+ }
108
+ _hash: number | undefined;
109
+ [Hash.symbol](): number {
110
+ return pipe(
111
+ Hash.string(`${FiberIdSymbolKey}-${this._tag}`),
112
+ Hash.combine(Hash.hash(this.left)),
113
+ Hash.combine(Hash.hash(this.right)),
114
+ Hash.cached(this)
115
+ )
116
+ }
117
+ [Equal.symbol](that: unknown): boolean {
118
+ return isFiberId(that) &&
119
+ that._tag === OP_COMPOSITE &&
120
+ Equal.equals(this.left, that.left) &&
121
+ Equal.equals(this.right, that.right)
122
+ }
123
+ toString() {
124
+ return format(this.toJSON())
125
+ }
126
+ toJSON() {
127
+ return {
128
+ _id: "FiberId",
129
+ _tag: this._tag,
130
+ left: toJSON(this.left),
131
+ right: toJSON(this.right)
132
+ }
133
+ }
134
+ [NodeInspectSymbol]() {
135
+ return this.toJSON()
136
+ }
137
+ }
138
+
139
+ /** @internal */
140
+ export const none: FiberId.None = new None()
141
+
142
+ /** @internal */
143
+ export const runtime = (id: number, startTimeMillis: number): FiberId.Runtime => {
144
+ return new Runtime(id, startTimeMillis)
145
+ }
146
+
147
+ /** @internal */
148
+ export const composite = (left: FiberId.FiberId, right: FiberId.FiberId): FiberId.Composite => {
149
+ return new Composite(left, right)
150
+ }
151
+
152
+ /** @internal */
153
+ export const isFiberId = (self: unknown): self is FiberId.FiberId => hasProperty(self, FiberIdTypeId)
154
+
155
+ /** @internal */
156
+ export const isNone = (self: FiberId.FiberId): self is FiberId.None => {
157
+ return self._tag === OP_NONE || pipe(toSet(self), HashSet.every((id) => isNone(id)))
158
+ }
159
+
160
+ /** @internal */
161
+ export const isRuntime = (self: FiberId.FiberId): self is FiberId.Runtime => {
162
+ return self._tag === OP_RUNTIME
163
+ }
164
+
165
+ /** @internal */
166
+ export const isComposite = (self: FiberId.FiberId): self is FiberId.Composite => {
167
+ return self._tag === OP_COMPOSITE
168
+ }
169
+
170
+ /** @internal */
171
+ export const combine = dual<
172
+ (that: FiberId.FiberId) => (self: FiberId.FiberId) => FiberId.FiberId,
173
+ (self: FiberId.FiberId, that: FiberId.FiberId) => FiberId.FiberId
174
+ >(2, (self, that) => {
175
+ if (self._tag === OP_NONE) {
176
+ return that
177
+ }
178
+ if (that._tag === OP_NONE) {
179
+ return self
180
+ }
181
+ return new Composite(self, that)
182
+ })
183
+
184
+ /** @internal */
185
+ export const combineAll = (fiberIds: HashSet.HashSet<FiberId.FiberId>): FiberId.FiberId => {
186
+ return pipe(fiberIds, HashSet.reduce(none as FiberId.FiberId, (a, b) => combine(b)(a)))
187
+ }
188
+
189
+ /** @internal */
190
+ export const getOrElse = dual<
191
+ (that: FiberId.FiberId) => (self: FiberId.FiberId) => FiberId.FiberId,
192
+ (self: FiberId.FiberId, that: FiberId.FiberId) => FiberId.FiberId
193
+ >(2, (self, that) => isNone(self) ? that : self)
194
+
195
+ /** @internal */
196
+ export const ids = (self: FiberId.FiberId): HashSet.HashSet<number> => {
197
+ switch (self._tag) {
198
+ case OP_NONE: {
199
+ return HashSet.empty()
200
+ }
201
+ case OP_RUNTIME: {
202
+ return HashSet.make(self.id)
203
+ }
204
+ case OP_COMPOSITE: {
205
+ return pipe(ids(self.left), HashSet.union(ids(self.right)))
206
+ }
207
+ }
208
+ }
209
+
210
+ const _fiberCounter = globalValue(
211
+ Symbol.for("effect/Fiber/Id/_fiberCounter"),
212
+ () => MutableRef.make(0)
213
+ )
214
+
215
+ /** @internal */
216
+ export const make = (id: number, startTimeSeconds: number): FiberId.FiberId => {
217
+ return new Runtime(id, startTimeSeconds)
218
+ }
219
+
220
+ /** @internal */
221
+ export const threadName = (self: FiberId.FiberId): string => {
222
+ const identifiers = Array.from(ids(self)).map((n) => `#${n}`).join(",")
223
+ return identifiers
224
+ }
225
+
226
+ /** @internal */
227
+ export const toOption = (self: FiberId.FiberId): Option.Option<FiberId.FiberId> => {
228
+ const fiberIds = toSet(self)
229
+ if (HashSet.size(fiberIds) === 0) {
230
+ return Option.none()
231
+ }
232
+ let first = true
233
+ let acc: FiberId.FiberId
234
+ for (const fiberId of fiberIds) {
235
+ if (first) {
236
+ acc = fiberId
237
+ first = false
238
+ } else {
239
+ // @ts-expect-error
240
+ acc = pipe(acc, combine(fiberId))
241
+ }
242
+ }
243
+ // @ts-expect-error
244
+ return Option.some(acc)
245
+ }
246
+
247
+ /** @internal */
248
+ export const toSet = (self: FiberId.FiberId): HashSet.HashSet<FiberId.Runtime> => {
249
+ switch (self._tag) {
250
+ case OP_NONE: {
251
+ return HashSet.empty()
252
+ }
253
+ case OP_RUNTIME: {
254
+ return HashSet.make(self)
255
+ }
256
+ case OP_COMPOSITE: {
257
+ return pipe(toSet(self.left), HashSet.union(toSet(self.right)))
258
+ }
259
+ }
260
+ }
261
+
262
+ /** @internal */
263
+ export const unsafeMake = (): FiberId.Runtime => {
264
+ const id = MutableRef.get(_fiberCounter)
265
+ pipe(_fiberCounter, MutableRef.set(id + 1))
266
+ return new Runtime(id, Date.now())
267
+ }