@depup/effect 3.20.0-depup.0

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 (2716) hide show
  1. package/.index/package.json +6 -0
  2. package/Arbitrary/package.json +6 -0
  3. package/Array/package.json +6 -0
  4. package/BigDecimal/package.json +6 -0
  5. package/BigInt/package.json +6 -0
  6. package/Boolean/package.json +6 -0
  7. package/Brand/package.json +6 -0
  8. package/Cache/package.json +6 -0
  9. package/Cause/package.json +6 -0
  10. package/Channel/package.json +6 -0
  11. package/ChildExecutorDecision/package.json +6 -0
  12. package/Chunk/package.json +6 -0
  13. package/Clock/package.json +6 -0
  14. package/Config/package.json +6 -0
  15. package/ConfigError/package.json +6 -0
  16. package/ConfigProvider/package.json +6 -0
  17. package/ConfigProviderPathPatch/package.json +6 -0
  18. package/Console/package.json +6 -0
  19. package/Context/package.json +6 -0
  20. package/Cron/package.json +6 -0
  21. package/Data/package.json +6 -0
  22. package/DateTime/package.json +6 -0
  23. package/DefaultServices/package.json +6 -0
  24. package/Deferred/package.json +6 -0
  25. package/Differ/package.json +6 -0
  26. package/Duration/package.json +6 -0
  27. package/Effect/package.json +6 -0
  28. package/Effectable/package.json +6 -0
  29. package/Either/package.json +6 -0
  30. package/Encoding/package.json +6 -0
  31. package/Equal/package.json +6 -0
  32. package/Equivalence/package.json +6 -0
  33. package/ExecutionPlan/package.json +6 -0
  34. package/ExecutionStrategy/package.json +6 -0
  35. package/Exit/package.json +6 -0
  36. package/FastCheck/package.json +6 -0
  37. package/Fiber/package.json +6 -0
  38. package/FiberHandle/package.json +6 -0
  39. package/FiberId/package.json +6 -0
  40. package/FiberMap/package.json +6 -0
  41. package/FiberRef/package.json +6 -0
  42. package/FiberRefs/package.json +6 -0
  43. package/FiberRefsPatch/package.json +6 -0
  44. package/FiberSet/package.json +6 -0
  45. package/FiberStatus/package.json +6 -0
  46. package/Function/package.json +6 -0
  47. package/GlobalValue/package.json +6 -0
  48. package/Graph/package.json +6 -0
  49. package/GroupBy/package.json +6 -0
  50. package/HKT/package.json +6 -0
  51. package/Hash/package.json +6 -0
  52. package/HashMap/package.json +6 -0
  53. package/HashRing/package.json +6 -0
  54. package/HashSet/package.json +6 -0
  55. package/Inspectable/package.json +6 -0
  56. package/Iterable/package.json +6 -0
  57. package/JSONSchema/package.json +6 -0
  58. package/KeyedPool/package.json +6 -0
  59. package/LICENSE +21 -0
  60. package/Layer/package.json +6 -0
  61. package/LayerMap/package.json +6 -0
  62. package/List/package.json +6 -0
  63. package/LogLevel/package.json +6 -0
  64. package/LogSpan/package.json +6 -0
  65. package/Logger/package.json +6 -0
  66. package/Mailbox/package.json +6 -0
  67. package/ManagedRuntime/package.json +6 -0
  68. package/Match/package.json +6 -0
  69. package/MergeDecision/package.json +6 -0
  70. package/MergeState/package.json +6 -0
  71. package/MergeStrategy/package.json +6 -0
  72. package/Metric/package.json +6 -0
  73. package/MetricBoundaries/package.json +6 -0
  74. package/MetricHook/package.json +6 -0
  75. package/MetricKey/package.json +6 -0
  76. package/MetricKeyType/package.json +6 -0
  77. package/MetricLabel/package.json +6 -0
  78. package/MetricPair/package.json +6 -0
  79. package/MetricPolling/package.json +6 -0
  80. package/MetricRegistry/package.json +6 -0
  81. package/MetricState/package.json +6 -0
  82. package/Micro/package.json +6 -0
  83. package/ModuleVersion/package.json +6 -0
  84. package/MutableHashMap/package.json +6 -0
  85. package/MutableHashSet/package.json +6 -0
  86. package/MutableList/package.json +6 -0
  87. package/MutableQueue/package.json +6 -0
  88. package/MutableRef/package.json +6 -0
  89. package/NonEmptyIterable/package.json +6 -0
  90. package/Number/package.json +6 -0
  91. package/Option/package.json +6 -0
  92. package/Order/package.json +6 -0
  93. package/Ordering/package.json +6 -0
  94. package/ParseResult/package.json +6 -0
  95. package/PartitionedSemaphore/package.json +6 -0
  96. package/Pipeable/package.json +6 -0
  97. package/Pool/package.json +6 -0
  98. package/Predicate/package.json +6 -0
  99. package/Pretty/package.json +6 -0
  100. package/PrimaryKey/package.json +6 -0
  101. package/PubSub/package.json +6 -0
  102. package/Queue/package.json +6 -0
  103. package/README.md +32 -0
  104. package/Random/package.json +6 -0
  105. package/RateLimiter/package.json +6 -0
  106. package/RcMap/package.json +6 -0
  107. package/RcRef/package.json +6 -0
  108. package/Readable/package.json +6 -0
  109. package/Record/package.json +6 -0
  110. package/RedBlackTree/package.json +6 -0
  111. package/Redacted/package.json +6 -0
  112. package/Ref/package.json +6 -0
  113. package/RegExp/package.json +6 -0
  114. package/Reloadable/package.json +6 -0
  115. package/Request/package.json +6 -0
  116. package/RequestBlock/package.json +6 -0
  117. package/RequestResolver/package.json +6 -0
  118. package/Resource/package.json +6 -0
  119. package/Runtime/package.json +6 -0
  120. package/RuntimeFlags/package.json +6 -0
  121. package/RuntimeFlagsPatch/package.json +6 -0
  122. package/STM/package.json +6 -0
  123. package/Schedule/package.json +6 -0
  124. package/ScheduleDecision/package.json +6 -0
  125. package/ScheduleInterval/package.json +6 -0
  126. package/ScheduleIntervals/package.json +6 -0
  127. package/Scheduler/package.json +6 -0
  128. package/Schema/package.json +6 -0
  129. package/SchemaAST/package.json +6 -0
  130. package/Scope/package.json +6 -0
  131. package/ScopedCache/package.json +6 -0
  132. package/ScopedRef/package.json +6 -0
  133. package/Secret/package.json +6 -0
  134. package/SingleProducerAsyncInput/package.json +6 -0
  135. package/Sink/package.json +6 -0
  136. package/SortedMap/package.json +6 -0
  137. package/SortedSet/package.json +6 -0
  138. package/Stream/package.json +6 -0
  139. package/StreamEmit/package.json +6 -0
  140. package/StreamHaltStrategy/package.json +6 -0
  141. package/Streamable/package.json +6 -0
  142. package/String/package.json +6 -0
  143. package/Struct/package.json +6 -0
  144. package/Subscribable/package.json +6 -0
  145. package/SubscriptionRef/package.json +6 -0
  146. package/Supervisor/package.json +6 -0
  147. package/Symbol/package.json +6 -0
  148. package/SynchronizedRef/package.json +6 -0
  149. package/TArray/package.json +6 -0
  150. package/TDeferred/package.json +6 -0
  151. package/TMap/package.json +6 -0
  152. package/TPriorityQueue/package.json +6 -0
  153. package/TPubSub/package.json +6 -0
  154. package/TQueue/package.json +6 -0
  155. package/TRandom/package.json +6 -0
  156. package/TReentrantLock/package.json +6 -0
  157. package/TRef/package.json +6 -0
  158. package/TSemaphore/package.json +6 -0
  159. package/TSet/package.json +6 -0
  160. package/TSubscriptionRef/package.json +6 -0
  161. package/Take/package.json +6 -0
  162. package/TestAnnotation/package.json +6 -0
  163. package/TestAnnotationMap/package.json +6 -0
  164. package/TestAnnotations/package.json +6 -0
  165. package/TestClock/package.json +6 -0
  166. package/TestConfig/package.json +6 -0
  167. package/TestContext/package.json +6 -0
  168. package/TestLive/package.json +6 -0
  169. package/TestServices/package.json +6 -0
  170. package/TestSized/package.json +6 -0
  171. package/Tracer/package.json +6 -0
  172. package/Trie/package.json +6 -0
  173. package/Tuple/package.json +6 -0
  174. package/Types/package.json +6 -0
  175. package/Unify/package.json +6 -0
  176. package/UpstreamPullRequest/package.json +6 -0
  177. package/UpstreamPullStrategy/package.json +6 -0
  178. package/Utils/package.json +6 -0
  179. package/changes.json +14 -0
  180. package/dist/cjs/Arbitrary.js +813 -0
  181. package/dist/cjs/Arbitrary.js.map +1 -0
  182. package/dist/cjs/Array.js +2695 -0
  183. package/dist/cjs/Array.js.map +1 -0
  184. package/dist/cjs/BigDecimal.js +1116 -0
  185. package/dist/cjs/BigDecimal.js.map +1 -0
  186. package/dist/cjs/BigInt.js +567 -0
  187. package/dist/cjs/BigInt.js.map +1 -0
  188. package/dist/cjs/Boolean.js +251 -0
  189. package/dist/cjs/Boolean.js.map +1 -0
  190. package/dist/cjs/Brand.js +175 -0
  191. package/dist/cjs/Brand.js.map +1 -0
  192. package/dist/cjs/Cache.js +50 -0
  193. package/dist/cjs/Cache.js.map +1 -0
  194. package/dist/cjs/Cause.js +1011 -0
  195. package/dist/cjs/Cause.js.map +1 -0
  196. package/dist/cjs/Channel.js +889 -0
  197. package/dist/cjs/Channel.js.map +1 -0
  198. package/dist/cjs/ChildExecutorDecision.js +72 -0
  199. package/dist/cjs/ChildExecutorDecision.js.map +1 -0
  200. package/dist/cjs/Chunk.js +1114 -0
  201. package/dist/cjs/Chunk.js.map +1 -0
  202. package/dist/cjs/Clock.js +45 -0
  203. package/dist/cjs/Clock.js.map +1 -0
  204. package/dist/cjs/Config.js +328 -0
  205. package/dist/cjs/Config.js.map +1 -0
  206. package/dist/cjs/ConfigError.js +114 -0
  207. package/dist/cjs/ConfigError.js.map +1 -0
  208. package/dist/cjs/ConfigProvider.js +173 -0
  209. package/dist/cjs/ConfigProvider.js.map +1 -0
  210. package/dist/cjs/ConfigProviderPathPatch.js +38 -0
  211. package/dist/cjs/ConfigProviderPathPatch.js.map +1 -0
  212. package/dist/cjs/Console.js +125 -0
  213. package/dist/cjs/Console.js.map +1 -0
  214. package/dist/cjs/Context.js +367 -0
  215. package/dist/cjs/Context.js.map +1 -0
  216. package/dist/cjs/Cron.js +583 -0
  217. package/dist/cjs/Cron.js.map +1 -0
  218. package/dist/cjs/Data.js +291 -0
  219. package/dist/cjs/Data.js.map +1 -0
  220. package/dist/cjs/DateTime.js +1084 -0
  221. package/dist/cjs/DateTime.js.map +1 -0
  222. package/dist/cjs/DefaultServices.js +19 -0
  223. package/dist/cjs/DefaultServices.js.map +1 -0
  224. package/dist/cjs/Deferred.js +167 -0
  225. package/dist/cjs/Deferred.js.map +1 -0
  226. package/dist/cjs/Differ.js +140 -0
  227. package/dist/cjs/Differ.js.map +1 -0
  228. package/dist/cjs/Duration.js +737 -0
  229. package/dist/cjs/Duration.js.map +1 -0
  230. package/dist/cjs/Effect.js +10717 -0
  231. package/dist/cjs/Effect.js.map +1 -0
  232. package/dist/cjs/Effectable.js +58 -0
  233. package/dist/cjs/Effectable.js.map +1 -0
  234. package/dist/cjs/Either.js +654 -0
  235. package/dist/cjs/Either.js.map +1 -0
  236. package/dist/cjs/Encoding.js +155 -0
  237. package/dist/cjs/Encoding.js.map +1 -0
  238. package/dist/cjs/Equal.js +81 -0
  239. package/dist/cjs/Equal.js.map +1 -0
  240. package/dist/cjs/Equivalence.js +181 -0
  241. package/dist/cjs/Equivalence.js.map +1 -0
  242. package/dist/cjs/ExecutionPlan.js +108 -0
  243. package/dist/cjs/ExecutionPlan.js.map +1 -0
  244. package/dist/cjs/ExecutionStrategy.js +62 -0
  245. package/dist/cjs/ExecutionStrategy.js.map +1 -0
  246. package/dist/cjs/Exit.js +256 -0
  247. package/dist/cjs/Exit.js.map +1 -0
  248. package/dist/cjs/FastCheck.js +17 -0
  249. package/dist/cjs/FastCheck.js.map +1 -0
  250. package/dist/cjs/Fiber.js +340 -0
  251. package/dist/cjs/Fiber.js.map +1 -0
  252. package/dist/cjs/FiberHandle.js +335 -0
  253. package/dist/cjs/FiberHandle.js.map +1 -0
  254. package/dist/cjs/FiberId.js +122 -0
  255. package/dist/cjs/FiberId.js.map +1 -0
  256. package/dist/cjs/FiberMap.js +374 -0
  257. package/dist/cjs/FiberMap.js.map +1 -0
  258. package/dist/cjs/FiberRef.js +243 -0
  259. package/dist/cjs/FiberRef.js.map +1 -0
  260. package/dist/cjs/FiberRefs.js +91 -0
  261. package/dist/cjs/FiberRefs.js.map +1 -0
  262. package/dist/cjs/FiberRefsPatch.js +39 -0
  263. package/dist/cjs/FiberRefsPatch.js.map +1 -0
  264. package/dist/cjs/FiberSet.js +308 -0
  265. package/dist/cjs/FiberSet.js.map +1 -0
  266. package/dist/cjs/FiberStatus.js +59 -0
  267. package/dist/cjs/FiberStatus.js.map +1 -0
  268. package/dist/cjs/Function.js +488 -0
  269. package/dist/cjs/Function.js.map +1 -0
  270. package/dist/cjs/GlobalValue.js +59 -0
  271. package/dist/cjs/GlobalValue.js.map +1 -0
  272. package/dist/cjs/Graph.js +3080 -0
  273. package/dist/cjs/Graph.js.map +1 -0
  274. package/dist/cjs/GroupBy.js +47 -0
  275. package/dist/cjs/GroupBy.js.map +1 -0
  276. package/dist/cjs/HKT.js +6 -0
  277. package/dist/cjs/HKT.js.map +1 -0
  278. package/dist/cjs/Hash.js +184 -0
  279. package/dist/cjs/Hash.js.map +1 -0
  280. package/dist/cjs/HashMap.js +322 -0
  281. package/dist/cjs/HashMap.js.map +1 -0
  282. package/dist/cjs/HashRing.js +257 -0
  283. package/dist/cjs/HashRing.js.map +1 -0
  284. package/dist/cjs/HashSet.js +1262 -0
  285. package/dist/cjs/HashSet.js.map +1 -0
  286. package/dist/cjs/Inspectable.js +213 -0
  287. package/dist/cjs/Inspectable.js.map +1 -0
  288. package/dist/cjs/Iterable.js +1009 -0
  289. package/dist/cjs/Iterable.js.map +1 -0
  290. package/dist/cjs/JSONSchema.js +727 -0
  291. package/dist/cjs/JSONSchema.js.map +1 -0
  292. package/dist/cjs/KeyedPool.js +83 -0
  293. package/dist/cjs/KeyedPool.js.map +1 -0
  294. package/dist/cjs/Layer.js +651 -0
  295. package/dist/cjs/Layer.js.map +1 -0
  296. package/dist/cjs/LayerMap.js +212 -0
  297. package/dist/cjs/LayerMap.js.map +1 -0
  298. package/dist/cjs/List.js +784 -0
  299. package/dist/cjs/List.js.map +1 -0
  300. package/dist/cjs/LogLevel.js +143 -0
  301. package/dist/cjs/LogLevel.js.map +1 -0
  302. package/dist/cjs/LogSpan.js +23 -0
  303. package/dist/cjs/LogSpan.js.map +1 -0
  304. package/dist/cjs/Logger.js +497 -0
  305. package/dist/cjs/Logger.js.map +1 -0
  306. package/dist/cjs/Mailbox.js +105 -0
  307. package/dist/cjs/Mailbox.js.map +1 -0
  308. package/dist/cjs/ManagedRuntime.js +49 -0
  309. package/dist/cjs/ManagedRuntime.js.map +1 -0
  310. package/dist/cjs/Match.js +819 -0
  311. package/dist/cjs/Match.js.map +1 -0
  312. package/dist/cjs/MergeDecision.js +42 -0
  313. package/dist/cjs/MergeDecision.js.map +1 -0
  314. package/dist/cjs/MergeState.js +65 -0
  315. package/dist/cjs/MergeState.js.map +1 -0
  316. package/dist/cjs/MergeStrategy.js +59 -0
  317. package/dist/cjs/MergeStrategy.js.map +1 -0
  318. package/dist/cjs/Metric.js +415 -0
  319. package/dist/cjs/Metric.js.map +1 -0
  320. package/dist/cjs/MetricBoundaries.js +40 -0
  321. package/dist/cjs/MetricBoundaries.js.map +1 -0
  322. package/dist/cjs/MetricHook.js +54 -0
  323. package/dist/cjs/MetricHook.js.map +1 -0
  324. package/dist/cjs/MetricKey.js +70 -0
  325. package/dist/cjs/MetricKey.js.map +1 -0
  326. package/dist/cjs/MetricKeyType.js +94 -0
  327. package/dist/cjs/MetricKeyType.js.map +1 -0
  328. package/dist/cjs/MetricLabel.js +24 -0
  329. package/dist/cjs/MetricLabel.js.map +1 -0
  330. package/dist/cjs/MetricPair.js +28 -0
  331. package/dist/cjs/MetricPair.js.map +1 -0
  332. package/dist/cjs/MetricPolling.js +66 -0
  333. package/dist/cjs/MetricPolling.js.map +1 -0
  334. package/dist/cjs/MetricRegistry.js +23 -0
  335. package/dist/cjs/MetricRegistry.js.map +1 -0
  336. package/dist/cjs/MetricState.js +94 -0
  337. package/dist/cjs/MetricState.js.map +1 -0
  338. package/dist/cjs/Micro.js +2582 -0
  339. package/dist/cjs/Micro.js.map +1 -0
  340. package/dist/cjs/ModuleVersion.js +25 -0
  341. package/dist/cjs/ModuleVersion.js.map +1 -0
  342. package/dist/cjs/MutableHashMap.js +314 -0
  343. package/dist/cjs/MutableHashMap.js.map +1 -0
  344. package/dist/cjs/MutableHashSet.js +524 -0
  345. package/dist/cjs/MutableHashSet.js.map +1 -0
  346. package/dist/cjs/MutableList.js +258 -0
  347. package/dist/cjs/MutableList.js.map +1 -0
  348. package/dist/cjs/MutableQueue.js +173 -0
  349. package/dist/cjs/MutableQueue.js.map +1 -0
  350. package/dist/cjs/MutableRef.js +144 -0
  351. package/dist/cjs/MutableRef.js.map +1 -0
  352. package/dist/cjs/NonEmptyIterable.js +23 -0
  353. package/dist/cjs/NonEmptyIterable.js.map +1 -0
  354. package/dist/cjs/Number.js +903 -0
  355. package/dist/cjs/Number.js.map +1 -0
  356. package/dist/cjs/Option.js +1769 -0
  357. package/dist/cjs/Option.js.map +1 -0
  358. package/dist/cjs/Order.js +275 -0
  359. package/dist/cjs/Order.js.map +1 -0
  360. package/dist/cjs/Ordering.js +80 -0
  361. package/dist/cjs/Ordering.js.map +1 -0
  362. package/dist/cjs/ParseResult.js +1594 -0
  363. package/dist/cjs/ParseResult.js.map +1 -0
  364. package/dist/cjs/PartitionedSemaphore.js +147 -0
  365. package/dist/cjs/PartitionedSemaphore.js.map +1 -0
  366. package/dist/cjs/Pipeable.js +70 -0
  367. package/dist/cjs/Pipeable.js.map +1 -0
  368. package/dist/cjs/Pool.js +107 -0
  369. package/dist/cjs/Pool.js.map +1 -0
  370. package/dist/cjs/Predicate.js +1159 -0
  371. package/dist/cjs/Predicate.js.map +1 -0
  372. package/dist/cjs/Pretty.js +183 -0
  373. package/dist/cjs/Pretty.js.map +1 -0
  374. package/dist/cjs/PrimaryKey.js +21 -0
  375. package/dist/cjs/PrimaryKey.js.map +1 -0
  376. package/dist/cjs/PubSub.js +127 -0
  377. package/dist/cjs/PubSub.js.map +1 -0
  378. package/dist/cjs/Queue.js +255 -0
  379. package/dist/cjs/Queue.js.map +1 -0
  380. package/dist/cjs/Random.js +145 -0
  381. package/dist/cjs/Random.js.map +1 -0
  382. package/dist/cjs/RateLimiter.js +84 -0
  383. package/dist/cjs/RateLimiter.js.map +1 -0
  384. package/dist/cjs/RcMap.js +76 -0
  385. package/dist/cjs/RcMap.js.map +1 -0
  386. package/dist/cjs/RcRef.js +58 -0
  387. package/dist/cjs/RcRef.js.map +1 -0
  388. package/dist/cjs/Readable.js +55 -0
  389. package/dist/cjs/Readable.js.map +1 -0
  390. package/dist/cjs/Record.js +865 -0
  391. package/dist/cjs/Record.js.map +1 -0
  392. package/dist/cjs/RedBlackTree.js +266 -0
  393. package/dist/cjs/RedBlackTree.js.map +1 -0
  394. package/dist/cjs/Redacted.js +101 -0
  395. package/dist/cjs/Redacted.js.map +1 -0
  396. package/dist/cjs/Ref.js +84 -0
  397. package/dist/cjs/Ref.js.map +1 -0
  398. package/dist/cjs/RegExp.js +46 -0
  399. package/dist/cjs/RegExp.js.map +1 -0
  400. package/dist/cjs/Reloadable.js +66 -0
  401. package/dist/cjs/Reloadable.js.map +1 -0
  402. package/dist/cjs/Request.js +148 -0
  403. package/dist/cjs/Request.js.map +1 -0
  404. package/dist/cjs/RequestBlock.js +43 -0
  405. package/dist/cjs/RequestBlock.js.map +1 -0
  406. package/dist/cjs/RequestResolver.js +185 -0
  407. package/dist/cjs/RequestResolver.js.map +1 -0
  408. package/dist/cjs/Resource.js +51 -0
  409. package/dist/cjs/Resource.js.map +1 -0
  410. package/dist/cjs/Runtime.js +188 -0
  411. package/dist/cjs/Runtime.js.map +1 -0
  412. package/dist/cjs/RuntimeFlags.js +259 -0
  413. package/dist/cjs/RuntimeFlags.js.map +1 -0
  414. package/dist/cjs/RuntimeFlagsPatch.js +142 -0
  415. package/dist/cjs/RuntimeFlagsPatch.js.map +1 -0
  416. package/dist/cjs/STM.js +981 -0
  417. package/dist/cjs/STM.js.map +1 -0
  418. package/dist/cjs/Schedule.js +1603 -0
  419. package/dist/cjs/Schedule.js.map +1 -0
  420. package/dist/cjs/ScheduleDecision.js +34 -0
  421. package/dist/cjs/ScheduleDecision.js.map +1 -0
  422. package/dist/cjs/ScheduleInterval.js +107 -0
  423. package/dist/cjs/ScheduleInterval.js.map +1 -0
  424. package/dist/cjs/ScheduleIntervals.js +85 -0
  425. package/dist/cjs/ScheduleIntervals.js.map +1 -0
  426. package/dist/cjs/Scheduler.js +308 -0
  427. package/dist/cjs/Scheduler.js.map +1 -0
  428. package/dist/cjs/Schema.js +6254 -0
  429. package/dist/cjs/Schema.js.map +1 -0
  430. package/dist/cjs/SchemaAST.js +2552 -0
  431. package/dist/cjs/SchemaAST.js.map +1 -0
  432. package/dist/cjs/Scope.js +102 -0
  433. package/dist/cjs/Scope.js.map +1 -0
  434. package/dist/cjs/ScopedCache.js +31 -0
  435. package/dist/cjs/ScopedCache.js.map +1 -0
  436. package/dist/cjs/ScopedRef.js +49 -0
  437. package/dist/cjs/ScopedRef.js.map +1 -0
  438. package/dist/cjs/Secret.js +51 -0
  439. package/dist/cjs/Secret.js.map +1 -0
  440. package/dist/cjs/SingleProducerAsyncInput.js +14 -0
  441. package/dist/cjs/SingleProducerAsyncInput.js.map +1 -0
  442. package/dist/cjs/Sink.js +872 -0
  443. package/dist/cjs/Sink.js.map +1 -0
  444. package/dist/cjs/SortedMap.js +189 -0
  445. package/dist/cjs/SortedMap.js.map +1 -0
  446. package/dist/cjs/SortedSet.js +251 -0
  447. package/dist/cjs/SortedSet.js.map +1 -0
  448. package/dist/cjs/Stream.js +4112 -0
  449. package/dist/cjs/Stream.js.map +1 -0
  450. package/dist/cjs/StreamEmit.js +6 -0
  451. package/dist/cjs/StreamEmit.js.map +1 -0
  452. package/dist/cjs/StreamHaltStrategy.js +65 -0
  453. package/dist/cjs/StreamHaltStrategy.js.map +1 -0
  454. package/dist/cjs/Streamable.js +45 -0
  455. package/dist/cjs/Streamable.js.map +1 -0
  456. package/dist/cjs/String.js +680 -0
  457. package/dist/cjs/String.js.map +1 -0
  458. package/dist/cjs/Struct.js +202 -0
  459. package/dist/cjs/Struct.js.map +1 -0
  460. package/dist/cjs/Subscribable.js +67 -0
  461. package/dist/cjs/Subscribable.js.map +1 -0
  462. package/dist/cjs/SubscriptionRef.js +123 -0
  463. package/dist/cjs/SubscriptionRef.js.map +1 -0
  464. package/dist/cjs/Supervisor.js +115 -0
  465. package/dist/cjs/Supervisor.js.map +1 -0
  466. package/dist/cjs/Symbol.js +35 -0
  467. package/dist/cjs/Symbol.js.map +1 -0
  468. package/dist/cjs/SynchronizedRef.js +126 -0
  469. package/dist/cjs/SynchronizedRef.js.map +1 -0
  470. package/dist/cjs/TArray.js +314 -0
  471. package/dist/cjs/TArray.js.map +1 -0
  472. package/dist/cjs/TDeferred.js +40 -0
  473. package/dist/cjs/TDeferred.js.map +1 -0
  474. package/dist/cjs/TMap.js +286 -0
  475. package/dist/cjs/TMap.js.map +1 -0
  476. package/dist/cjs/TPriorityQueue.js +143 -0
  477. package/dist/cjs/TPriorityQueue.js.map +1 -0
  478. package/dist/cjs/TPubSub.js +138 -0
  479. package/dist/cjs/TPubSub.js.map +1 -0
  480. package/dist/cjs/TQueue.js +237 -0
  481. package/dist/cjs/TQueue.js.map +1 -0
  482. package/dist/cjs/TRandom.js +72 -0
  483. package/dist/cjs/TRandom.js.map +1 -0
  484. package/dist/cjs/TReentrantLock.js +149 -0
  485. package/dist/cjs/TReentrantLock.js.map +1 -0
  486. package/dist/cjs/TRef.js +83 -0
  487. package/dist/cjs/TRef.js.map +1 -0
  488. package/dist/cjs/TSemaphore.js +73 -0
  489. package/dist/cjs/TSemaphore.js.map +1 -0
  490. package/dist/cjs/TSet.js +208 -0
  491. package/dist/cjs/TSet.js.map +1 -0
  492. package/dist/cjs/TSubscriptionRef.js +95 -0
  493. package/dist/cjs/TSubscriptionRef.js.map +1 -0
  494. package/dist/cjs/Take.js +155 -0
  495. package/dist/cjs/Take.js.map +1 -0
  496. package/dist/cjs/TestAnnotation.js +105 -0
  497. package/dist/cjs/TestAnnotation.js.map +1 -0
  498. package/dist/cjs/TestAnnotationMap.js +91 -0
  499. package/dist/cjs/TestAnnotationMap.js.map +1 -0
  500. package/dist/cjs/TestAnnotations.js +71 -0
  501. package/dist/cjs/TestAnnotations.js.map +1 -0
  502. package/dist/cjs/TestClock.js +372 -0
  503. package/dist/cjs/TestClock.js.map +1 -0
  504. package/dist/cjs/TestConfig.js +22 -0
  505. package/dist/cjs/TestConfig.js.map +1 -0
  506. package/dist/cjs/TestContext.js +28 -0
  507. package/dist/cjs/TestContext.js.map +1 -0
  508. package/dist/cjs/TestLive.js +39 -0
  509. package/dist/cjs/TestLive.js.map +1 -0
  510. package/dist/cjs/TestServices.js +255 -0
  511. package/dist/cjs/TestServices.js.map +1 -0
  512. package/dist/cjs/TestSized.js +46 -0
  513. package/dist/cjs/TestSized.js.map +1 -0
  514. package/dist/cjs/Tracer.js +44 -0
  515. package/dist/cjs/Tracer.js.map +1 -0
  516. package/dist/cjs/Trie.js +724 -0
  517. package/dist/cjs/Trie.js.map +1 -0
  518. package/dist/cjs/Tuple.js +210 -0
  519. package/dist/cjs/Tuple.js.map +1 -0
  520. package/dist/cjs/Types.js +6 -0
  521. package/dist/cjs/Types.js.map +1 -0
  522. package/dist/cjs/Unify.js +16 -0
  523. package/dist/cjs/Unify.js.map +1 -0
  524. package/dist/cjs/UpstreamPullRequest.js +59 -0
  525. package/dist/cjs/UpstreamPullRequest.js.map +1 -0
  526. package/dist/cjs/UpstreamPullStrategy.js +59 -0
  527. package/dist/cjs/UpstreamPullStrategy.js.map +1 -0
  528. package/dist/cjs/Utils.js +374 -0
  529. package/dist/cjs/Utils.js.map +1 -0
  530. package/dist/cjs/index.js +395 -0
  531. package/dist/cjs/index.js.map +1 -0
  532. package/dist/cjs/internal/array.js +13 -0
  533. package/dist/cjs/internal/array.js.map +1 -0
  534. package/dist/cjs/internal/blockedRequests.js +369 -0
  535. package/dist/cjs/internal/blockedRequests.js.map +1 -0
  536. package/dist/cjs/internal/cache.js +500 -0
  537. package/dist/cjs/internal/cache.js.map +1 -0
  538. package/dist/cjs/internal/cause.js +867 -0
  539. package/dist/cjs/internal/cause.js.map +1 -0
  540. package/dist/cjs/internal/channel/channelExecutor.js +697 -0
  541. package/dist/cjs/internal/channel/channelExecutor.js.map +1 -0
  542. package/dist/cjs/internal/channel/channelState.js +77 -0
  543. package/dist/cjs/internal/channel/channelState.js.map +1 -0
  544. package/dist/cjs/internal/channel/childExecutorDecision.js +74 -0
  545. package/dist/cjs/internal/channel/childExecutorDecision.js.map +1 -0
  546. package/dist/cjs/internal/channel/continuation.js +57 -0
  547. package/dist/cjs/internal/channel/continuation.js.map +1 -0
  548. package/dist/cjs/internal/channel/mergeDecision.js +60 -0
  549. package/dist/cjs/internal/channel/mergeDecision.js.map +1 -0
  550. package/dist/cjs/internal/channel/mergeState.js +83 -0
  551. package/dist/cjs/internal/channel/mergeState.js.map +1 -0
  552. package/dist/cjs/internal/channel/mergeStrategy.js +58 -0
  553. package/dist/cjs/internal/channel/mergeStrategy.js.map +1 -0
  554. package/dist/cjs/internal/channel/singleProducerAsyncInput.js +171 -0
  555. package/dist/cjs/internal/channel/singleProducerAsyncInput.js.map +1 -0
  556. package/dist/cjs/internal/channel/subexecutor.js +163 -0
  557. package/dist/cjs/internal/channel/subexecutor.js.map +1 -0
  558. package/dist/cjs/internal/channel/upstreamPullRequest.js +64 -0
  559. package/dist/cjs/internal/channel/upstreamPullRequest.js.map +1 -0
  560. package/dist/cjs/internal/channel/upstreamPullStrategy.js +64 -0
  561. package/dist/cjs/internal/channel/upstreamPullStrategy.js.map +1 -0
  562. package/dist/cjs/internal/channel.js +738 -0
  563. package/dist/cjs/internal/channel.js.map +1 -0
  564. package/dist/cjs/internal/clock.js +85 -0
  565. package/dist/cjs/internal/clock.js.map +1 -0
  566. package/dist/cjs/internal/completedRequestMap.js +11 -0
  567. package/dist/cjs/internal/completedRequestMap.js.map +1 -0
  568. package/dist/cjs/internal/concurrency.js +37 -0
  569. package/dist/cjs/internal/concurrency.js.map +1 -0
  570. package/dist/cjs/internal/config.js +397 -0
  571. package/dist/cjs/internal/config.js.map +1 -0
  572. package/dist/cjs/internal/configError.js +284 -0
  573. package/dist/cjs/internal/configError.js.map +1 -0
  574. package/dist/cjs/internal/configProvider/pathPatch.js +83 -0
  575. package/dist/cjs/internal/configProvider/pathPatch.js.map +1 -0
  576. package/dist/cjs/internal/configProvider.js +443 -0
  577. package/dist/cjs/internal/configProvider.js.map +1 -0
  578. package/dist/cjs/internal/console.js +79 -0
  579. package/dist/cjs/internal/console.js.map +1 -0
  580. package/dist/cjs/internal/context.js +273 -0
  581. package/dist/cjs/internal/context.js.map +1 -0
  582. package/dist/cjs/internal/core-effect.js +872 -0
  583. package/dist/cjs/internal/core-effect.js.map +1 -0
  584. package/dist/cjs/internal/core-stream.js +258 -0
  585. package/dist/cjs/internal/core-stream.js.map +1 -0
  586. package/dist/cjs/internal/core.js +1713 -0
  587. package/dist/cjs/internal/core.js.map +1 -0
  588. package/dist/cjs/internal/data.js +37 -0
  589. package/dist/cjs/internal/data.js.map +1 -0
  590. package/dist/cjs/internal/dataSource.js +107 -0
  591. package/dist/cjs/internal/dataSource.js.map +1 -0
  592. package/dist/cjs/internal/dateTime.js +839 -0
  593. package/dist/cjs/internal/dateTime.js.map +1 -0
  594. package/dist/cjs/internal/defaultServices/console.js +99 -0
  595. package/dist/cjs/internal/defaultServices/console.js.map +1 -0
  596. package/dist/cjs/internal/defaultServices.js +92 -0
  597. package/dist/cjs/internal/defaultServices.js.map +1 -0
  598. package/dist/cjs/internal/deferred.js +36 -0
  599. package/dist/cjs/internal/deferred.js.map +1 -0
  600. package/dist/cjs/internal/differ/chunkPatch.js +139 -0
  601. package/dist/cjs/internal/differ/chunkPatch.js.map +1 -0
  602. package/dist/cjs/internal/differ/contextPatch.js +152 -0
  603. package/dist/cjs/internal/differ/contextPatch.js.map +1 -0
  604. package/dist/cjs/internal/differ/hashMapPatch.js +139 -0
  605. package/dist/cjs/internal/differ/hashMapPatch.js.map +1 -0
  606. package/dist/cjs/internal/differ/hashSetPatch.js +113 -0
  607. package/dist/cjs/internal/differ/hashSetPatch.js.map +1 -0
  608. package/dist/cjs/internal/differ/orPatch.js +184 -0
  609. package/dist/cjs/internal/differ/orPatch.js.map +1 -0
  610. package/dist/cjs/internal/differ/readonlyArrayPatch.js +138 -0
  611. package/dist/cjs/internal/differ/readonlyArrayPatch.js.map +1 -0
  612. package/dist/cjs/internal/differ.js +149 -0
  613. package/dist/cjs/internal/differ.js.map +1 -0
  614. package/dist/cjs/internal/doNotation.js +25 -0
  615. package/dist/cjs/internal/doNotation.js.map +1 -0
  616. package/dist/cjs/internal/effect/circular.js +420 -0
  617. package/dist/cjs/internal/effect/circular.js.map +1 -0
  618. package/dist/cjs/internal/effectable.js +120 -0
  619. package/dist/cjs/internal/effectable.js.map +1 -0
  620. package/dist/cjs/internal/either.js +100 -0
  621. package/dist/cjs/internal/either.js.map +1 -0
  622. package/dist/cjs/internal/encoding/base64.js +81 -0
  623. package/dist/cjs/internal/encoding/base64.js.map +1 -0
  624. package/dist/cjs/internal/encoding/base64Url.js +30 -0
  625. package/dist/cjs/internal/encoding/base64Url.js.map +1 -0
  626. package/dist/cjs/internal/encoding/common.js +48 -0
  627. package/dist/cjs/internal/encoding/common.js.map +1 -0
  628. package/dist/cjs/internal/encoding/hex.js +57 -0
  629. package/dist/cjs/internal/encoding/hex.js.map +1 -0
  630. package/dist/cjs/internal/errors.js +13 -0
  631. package/dist/cjs/internal/errors.js.map +1 -0
  632. package/dist/cjs/internal/executionPlan.js +68 -0
  633. package/dist/cjs/internal/executionPlan.js.map +1 -0
  634. package/dist/cjs/internal/executionStrategy.js +54 -0
  635. package/dist/cjs/internal/executionStrategy.js.map +1 -0
  636. package/dist/cjs/internal/fiber.js +279 -0
  637. package/dist/cjs/internal/fiber.js.map +1 -0
  638. package/dist/cjs/internal/fiberId.js +239 -0
  639. package/dist/cjs/internal/fiberId.js.map +1 -0
  640. package/dist/cjs/internal/fiberMessage.js +38 -0
  641. package/dist/cjs/internal/fiberMessage.js.map +1 -0
  642. package/dist/cjs/internal/fiberRefs/patch.js +115 -0
  643. package/dist/cjs/internal/fiberRefs/patch.js.map +1 -0
  644. package/dist/cjs/internal/fiberRefs.js +203 -0
  645. package/dist/cjs/internal/fiberRefs.js.map +1 -0
  646. package/dist/cjs/internal/fiberRuntime.js +2207 -0
  647. package/dist/cjs/internal/fiberRuntime.js.map +1 -0
  648. package/dist/cjs/internal/fiberScope.js +52 -0
  649. package/dist/cjs/internal/fiberScope.js.map +1 -0
  650. package/dist/cjs/internal/fiberStatus.js +85 -0
  651. package/dist/cjs/internal/fiberStatus.js.map +1 -0
  652. package/dist/cjs/internal/groupBy.js +222 -0
  653. package/dist/cjs/internal/groupBy.js.map +1 -0
  654. package/dist/cjs/internal/hashMap/array.js +56 -0
  655. package/dist/cjs/internal/hashMap/array.js.map +1 -0
  656. package/dist/cjs/internal/hashMap/bitwise.js +38 -0
  657. package/dist/cjs/internal/hashMap/bitwise.js.map +1 -0
  658. package/dist/cjs/internal/hashMap/config.js +17 -0
  659. package/dist/cjs/internal/hashMap/config.js.map +1 -0
  660. package/dist/cjs/internal/hashMap/keySet.js +12 -0
  661. package/dist/cjs/internal/hashMap/keySet.js.map +1 -0
  662. package/dist/cjs/internal/hashMap/node.js +268 -0
  663. package/dist/cjs/internal/hashMap/node.js.map +1 -0
  664. package/dist/cjs/internal/hashMap.js +379 -0
  665. package/dist/cjs/internal/hashMap.js.map +1 -0
  666. package/dist/cjs/internal/hashSet.js +198 -0
  667. package/dist/cjs/internal/hashSet.js.map +1 -0
  668. package/dist/cjs/internal/keyedPool.js +170 -0
  669. package/dist/cjs/internal/keyedPool.js.map +1 -0
  670. package/dist/cjs/internal/layer/circular.js +80 -0
  671. package/dist/cjs/internal/layer/circular.js.map +1 -0
  672. package/dist/cjs/internal/layer.js +595 -0
  673. package/dist/cjs/internal/layer.js.map +1 -0
  674. package/dist/cjs/internal/logSpan.js +26 -0
  675. package/dist/cjs/internal/logSpan.js.map +1 -0
  676. package/dist/cjs/internal/logger-circular.js +26 -0
  677. package/dist/cjs/internal/logger-circular.js.map +1 -0
  678. package/dist/cjs/internal/logger.js +381 -0
  679. package/dist/cjs/internal/logger.js.map +1 -0
  680. package/dist/cjs/internal/mailbox.js +462 -0
  681. package/dist/cjs/internal/mailbox.js.map +1 -0
  682. package/dist/cjs/internal/managedRuntime/circular.js +10 -0
  683. package/dist/cjs/internal/managedRuntime/circular.js.map +1 -0
  684. package/dist/cjs/internal/managedRuntime.js +95 -0
  685. package/dist/cjs/internal/managedRuntime.js.map +1 -0
  686. package/dist/cjs/internal/matcher.js +320 -0
  687. package/dist/cjs/internal/matcher.js.map +1 -0
  688. package/dist/cjs/internal/metric/boundaries.js +53 -0
  689. package/dist/cjs/internal/metric/boundaries.js.map +1 -0
  690. package/dist/cjs/internal/metric/hook.js +388 -0
  691. package/dist/cjs/internal/metric/hook.js.map +1 -0
  692. package/dist/cjs/internal/metric/key.js +73 -0
  693. package/dist/cjs/internal/metric/key.js.map +1 -0
  694. package/dist/cjs/internal/metric/keyType.js +188 -0
  695. package/dist/cjs/internal/metric/keyType.js.map +1 -0
  696. package/dist/cjs/internal/metric/label.js +45 -0
  697. package/dist/cjs/internal/metric/label.js.map +1 -0
  698. package/dist/cjs/internal/metric/pair.js +40 -0
  699. package/dist/cjs/internal/metric/pair.js.map +1 -0
  700. package/dist/cjs/internal/metric/polling.js +80 -0
  701. package/dist/cjs/internal/metric/polling.js.map +1 -0
  702. package/dist/cjs/internal/metric/registry.js +113 -0
  703. package/dist/cjs/internal/metric/registry.js.map +1 -0
  704. package/dist/cjs/internal/metric/state.js +201 -0
  705. package/dist/cjs/internal/metric/state.js.map +1 -0
  706. package/dist/cjs/internal/metric.js +204 -0
  707. package/dist/cjs/internal/metric.js.map +1 -0
  708. package/dist/cjs/internal/opCodes/cause.js +19 -0
  709. package/dist/cjs/internal/opCodes/cause.js.map +1 -0
  710. package/dist/cjs/internal/opCodes/channel.js +35 -0
  711. package/dist/cjs/internal/opCodes/channel.js.map +1 -0
  712. package/dist/cjs/internal/opCodes/channelChildExecutorDecision.js +13 -0
  713. package/dist/cjs/internal/opCodes/channelChildExecutorDecision.js.map +1 -0
  714. package/dist/cjs/internal/opCodes/channelMergeDecision.js +11 -0
  715. package/dist/cjs/internal/opCodes/channelMergeDecision.js.map +1 -0
  716. package/dist/cjs/internal/opCodes/channelMergeState.js +13 -0
  717. package/dist/cjs/internal/opCodes/channelMergeState.js.map +1 -0
  718. package/dist/cjs/internal/opCodes/channelMergeStrategy.js +11 -0
  719. package/dist/cjs/internal/opCodes/channelMergeStrategy.js.map +1 -0
  720. package/dist/cjs/internal/opCodes/channelState.js +15 -0
  721. package/dist/cjs/internal/opCodes/channelState.js.map +1 -0
  722. package/dist/cjs/internal/opCodes/channelUpstreamPullRequest.js +11 -0
  723. package/dist/cjs/internal/opCodes/channelUpstreamPullRequest.js.map +1 -0
  724. package/dist/cjs/internal/opCodes/channelUpstreamPullStrategy.js +11 -0
  725. package/dist/cjs/internal/opCodes/channelUpstreamPullStrategy.js.map +1 -0
  726. package/dist/cjs/internal/opCodes/config.js +29 -0
  727. package/dist/cjs/internal/opCodes/config.js.map +1 -0
  728. package/dist/cjs/internal/opCodes/configError.js +19 -0
  729. package/dist/cjs/internal/opCodes/configError.js.map +1 -0
  730. package/dist/cjs/internal/opCodes/continuation.js +11 -0
  731. package/dist/cjs/internal/opCodes/continuation.js.map +1 -0
  732. package/dist/cjs/internal/opCodes/deferred.js +11 -0
  733. package/dist/cjs/internal/opCodes/deferred.js.map +1 -0
  734. package/dist/cjs/internal/opCodes/effect.js +37 -0
  735. package/dist/cjs/internal/opCodes/effect.js.map +1 -0
  736. package/dist/cjs/internal/opCodes/layer.js +27 -0
  737. package/dist/cjs/internal/opCodes/layer.js.map +1 -0
  738. package/dist/cjs/internal/opCodes/streamHaltStrategy.js +15 -0
  739. package/dist/cjs/internal/opCodes/streamHaltStrategy.js.map +1 -0
  740. package/dist/cjs/internal/option.js +82 -0
  741. package/dist/cjs/internal/option.js.map +1 -0
  742. package/dist/cjs/internal/pool.js +288 -0
  743. package/dist/cjs/internal/pool.js.map +1 -0
  744. package/dist/cjs/internal/pubsub.js +1287 -0
  745. package/dist/cjs/internal/pubsub.js.map +1 -0
  746. package/dist/cjs/internal/query.js +102 -0
  747. package/dist/cjs/internal/query.js.map +1 -0
  748. package/dist/cjs/internal/queue.js +518 -0
  749. package/dist/cjs/internal/queue.js.map +1 -0
  750. package/dist/cjs/internal/random.js +128 -0
  751. package/dist/cjs/internal/random.js.map +1 -0
  752. package/dist/cjs/internal/rateLimiter.js +52 -0
  753. package/dist/cjs/internal/rateLimiter.js.map +1 -0
  754. package/dist/cjs/internal/rcMap.js +182 -0
  755. package/dist/cjs/internal/rcMap.js.map +1 -0
  756. package/dist/cjs/internal/rcRef.js +139 -0
  757. package/dist/cjs/internal/rcRef.js.map +1 -0
  758. package/dist/cjs/internal/redBlackTree/iterator.js +199 -0
  759. package/dist/cjs/internal/redBlackTree/iterator.js.map +1 -0
  760. package/dist/cjs/internal/redBlackTree/node.js +60 -0
  761. package/dist/cjs/internal/redBlackTree/node.js.map +1 -0
  762. package/dist/cjs/internal/redBlackTree.js +1088 -0
  763. package/dist/cjs/internal/redBlackTree.js.map +1 -0
  764. package/dist/cjs/internal/redacted.js +67 -0
  765. package/dist/cjs/internal/redacted.js.map +1 -0
  766. package/dist/cjs/internal/ref.js +121 -0
  767. package/dist/cjs/internal/ref.js.map +1 -0
  768. package/dist/cjs/internal/reloadable.js +56 -0
  769. package/dist/cjs/internal/reloadable.js.map +1 -0
  770. package/dist/cjs/internal/request.js +104 -0
  771. package/dist/cjs/internal/request.js.map +1 -0
  772. package/dist/cjs/internal/resource.js +49 -0
  773. package/dist/cjs/internal/resource.js.map +1 -0
  774. package/dist/cjs/internal/ringBuffer.js +64 -0
  775. package/dist/cjs/internal/ringBuffer.js.map +1 -0
  776. package/dist/cjs/internal/runtime.js +321 -0
  777. package/dist/cjs/internal/runtime.js.map +1 -0
  778. package/dist/cjs/internal/runtimeFlags.js +126 -0
  779. package/dist/cjs/internal/runtimeFlags.js.map +1 -0
  780. package/dist/cjs/internal/runtimeFlagsPatch.js +52 -0
  781. package/dist/cjs/internal/runtimeFlagsPatch.js.map +1 -0
  782. package/dist/cjs/internal/schedule/decision.js +44 -0
  783. package/dist/cjs/internal/schedule/decision.js.map +1 -0
  784. package/dist/cjs/internal/schedule/interval.js +83 -0
  785. package/dist/cjs/internal/schedule/interval.js.map +1 -0
  786. package/dist/cjs/internal/schedule/intervals.js +134 -0
  787. package/dist/cjs/internal/schedule/intervals.js.map +1 -0
  788. package/dist/cjs/internal/schedule.js +900 -0
  789. package/dist/cjs/internal/schedule.js.map +1 -0
  790. package/dist/cjs/internal/schema/errors.js +113 -0
  791. package/dist/cjs/internal/schema/errors.js.map +1 -0
  792. package/dist/cjs/internal/schema/schemaId.js +49 -0
  793. package/dist/cjs/internal/schema/schemaId.js.map +1 -0
  794. package/dist/cjs/internal/schema/util.js +48 -0
  795. package/dist/cjs/internal/schema/util.js.map +1 -0
  796. package/dist/cjs/internal/scopedCache.js +398 -0
  797. package/dist/cjs/internal/scopedCache.js.map +1 -0
  798. package/dist/cjs/internal/scopedRef.js +53 -0
  799. package/dist/cjs/internal/scopedRef.js.map +1 -0
  800. package/dist/cjs/internal/secret.js +90 -0
  801. package/dist/cjs/internal/secret.js.map +1 -0
  802. package/dist/cjs/internal/singleShotGen.js +37 -0
  803. package/dist/cjs/internal/singleShotGen.js.map +1 -0
  804. package/dist/cjs/internal/sink.js +883 -0
  805. package/dist/cjs/internal/sink.js.map +1 -0
  806. package/dist/cjs/internal/stack.js +12 -0
  807. package/dist/cjs/internal/stack.js.map +1 -0
  808. package/dist/cjs/internal/stm/core.js +525 -0
  809. package/dist/cjs/internal/stm/core.js.map +1 -0
  810. package/dist/cjs/internal/stm/entry.js +57 -0
  811. package/dist/cjs/internal/stm/entry.js.map +1 -0
  812. package/dist/cjs/internal/stm/journal.js +104 -0
  813. package/dist/cjs/internal/stm/journal.js.map +1 -0
  814. package/dist/cjs/internal/stm/opCodes/stm.js +31 -0
  815. package/dist/cjs/internal/stm/opCodes/stm.js.map +1 -0
  816. package/dist/cjs/internal/stm/opCodes/stmState.js +13 -0
  817. package/dist/cjs/internal/stm/opCodes/stmState.js.map +1 -0
  818. package/dist/cjs/internal/stm/opCodes/strategy.js +13 -0
  819. package/dist/cjs/internal/stm/opCodes/strategy.js.map +1 -0
  820. package/dist/cjs/internal/stm/opCodes/tExit.js +17 -0
  821. package/dist/cjs/internal/stm/opCodes/tExit.js.map +1 -0
  822. package/dist/cjs/internal/stm/opCodes/tryCommit.js +11 -0
  823. package/dist/cjs/internal/stm/opCodes/tryCommit.js.map +1 -0
  824. package/dist/cjs/internal/stm/stm.js +514 -0
  825. package/dist/cjs/internal/stm/stm.js.map +1 -0
  826. package/dist/cjs/internal/stm/stmState.js +102 -0
  827. package/dist/cjs/internal/stm/stmState.js.map +1 -0
  828. package/dist/cjs/internal/stm/tArray.js +258 -0
  829. package/dist/cjs/internal/stm/tArray.js.map +1 -0
  830. package/dist/cjs/internal/stm/tDeferred.js +51 -0
  831. package/dist/cjs/internal/stm/tDeferred.js.map +1 -0
  832. package/dist/cjs/internal/stm/tExit.js +116 -0
  833. package/dist/cjs/internal/stm/tExit.js.map +1 -0
  834. package/dist/cjs/internal/stm/tMap.js +448 -0
  835. package/dist/cjs/internal/stm/tMap.js.map +1 -0
  836. package/dist/cjs/internal/stm/tPriorityQueue.js +164 -0
  837. package/dist/cjs/internal/stm/tPriorityQueue.js.map +1 -0
  838. package/dist/cjs/internal/stm/tPubSub.js +397 -0
  839. package/dist/cjs/internal/stm/tPubSub.js.map +1 -0
  840. package/dist/cjs/internal/stm/tQueue.js +284 -0
  841. package/dist/cjs/internal/stm/tQueue.js.map +1 -0
  842. package/dist/cjs/internal/stm/tRandom.js +92 -0
  843. package/dist/cjs/internal/stm/tRandom.js.map +1 -0
  844. package/dist/cjs/internal/stm/tReentrantLock.js +215 -0
  845. package/dist/cjs/internal/stm/tReentrantLock.js.map +1 -0
  846. package/dist/cjs/internal/stm/tRef.js +110 -0
  847. package/dist/cjs/internal/stm/tRef.js.map +1 -0
  848. package/dist/cjs/internal/stm/tSemaphore.js +72 -0
  849. package/dist/cjs/internal/stm/tSemaphore.js.map +1 -0
  850. package/dist/cjs/internal/stm/tSet.js +104 -0
  851. package/dist/cjs/internal/stm/tSet.js.map +1 -0
  852. package/dist/cjs/internal/stm/tSubscriptionRef.js +177 -0
  853. package/dist/cjs/internal/stm/tSubscriptionRef.js.map +1 -0
  854. package/dist/cjs/internal/stm/tryCommit.js +25 -0
  855. package/dist/cjs/internal/stm/tryCommit.js.map +1 -0
  856. package/dist/cjs/internal/stm/txnId.js +18 -0
  857. package/dist/cjs/internal/stm/txnId.js.map +1 -0
  858. package/dist/cjs/internal/stm/versioned.js +15 -0
  859. package/dist/cjs/internal/stm/versioned.js.map +1 -0
  860. package/dist/cjs/internal/stream/debounceState.js +29 -0
  861. package/dist/cjs/internal/stream/debounceState.js.map +1 -0
  862. package/dist/cjs/internal/stream/emit.js +129 -0
  863. package/dist/cjs/internal/stream/emit.js.map +1 -0
  864. package/dist/cjs/internal/stream/haltStrategy.js +75 -0
  865. package/dist/cjs/internal/stream/haltStrategy.js.map +1 -0
  866. package/dist/cjs/internal/stream/handoff.js +65 -0
  867. package/dist/cjs/internal/stream/handoff.js.map +1 -0
  868. package/dist/cjs/internal/stream/handoffSignal.js +31 -0
  869. package/dist/cjs/internal/stream/handoffSignal.js.map +1 -0
  870. package/dist/cjs/internal/stream/pull.js +34 -0
  871. package/dist/cjs/internal/stream/pull.js.map +1 -0
  872. package/dist/cjs/internal/stream/sinkEndReason.js +19 -0
  873. package/dist/cjs/internal/stream/sinkEndReason.js.map +1 -0
  874. package/dist/cjs/internal/stream/zipAllState.js +41 -0
  875. package/dist/cjs/internal/stream/zipAllState.js.map +1 -0
  876. package/dist/cjs/internal/stream/zipChunksState.js +29 -0
  877. package/dist/cjs/internal/stream/zipChunksState.js.map +1 -0
  878. package/dist/cjs/internal/stream.js +2979 -0
  879. package/dist/cjs/internal/stream.js.map +1 -0
  880. package/dist/cjs/internal/string-utils.js +90 -0
  881. package/dist/cjs/internal/string-utils.js.map +1 -0
  882. package/dist/cjs/internal/subscriptionRef.js +72 -0
  883. package/dist/cjs/internal/subscriptionRef.js.map +1 -0
  884. package/dist/cjs/internal/supervisor/patch.js +135 -0
  885. package/dist/cjs/internal/supervisor/patch.js.map +1 -0
  886. package/dist/cjs/internal/supervisor.js +222 -0
  887. package/dist/cjs/internal/supervisor.js.map +1 -0
  888. package/dist/cjs/internal/synchronizedRef.js +51 -0
  889. package/dist/cjs/internal/synchronizedRef.js.map +1 -0
  890. package/dist/cjs/internal/take.js +130 -0
  891. package/dist/cjs/internal/take.js.map +1 -0
  892. package/dist/cjs/internal/testing/sleep.js +14 -0
  893. package/dist/cjs/internal/testing/sleep.js.map +1 -0
  894. package/dist/cjs/internal/testing/suspendedWarningData.js +58 -0
  895. package/dist/cjs/internal/testing/suspendedWarningData.js.map +1 -0
  896. package/dist/cjs/internal/testing/warningData.js +59 -0
  897. package/dist/cjs/internal/testing/warningData.js.map +1 -0
  898. package/dist/cjs/internal/tracer.js +134 -0
  899. package/dist/cjs/internal/tracer.js.map +1 -0
  900. package/dist/cjs/internal/trie.js +564 -0
  901. package/dist/cjs/internal/trie.js.map +1 -0
  902. package/dist/cjs/internal/version.js +14 -0
  903. package/dist/cjs/internal/version.js.map +1 -0
  904. package/dist/dts/Arbitrary.d.ts +69 -0
  905. package/dist/dts/Arbitrary.d.ts.map +1 -0
  906. package/dist/dts/Array.d.ts +5922 -0
  907. package/dist/dts/Array.d.ts.map +1 -0
  908. package/dist/dts/BigDecimal.d.ts +1483 -0
  909. package/dist/dts/BigDecimal.d.ts.map +1 -0
  910. package/dist/dts/BigInt.d.ts +1033 -0
  911. package/dist/dts/BigInt.d.ts.map +1 -0
  912. package/dist/dts/Boolean.d.ts +523 -0
  913. package/dist/dts/Boolean.d.ts.map +1 -0
  914. package/dist/dts/Brand.d.ts +234 -0
  915. package/dist/dts/Brand.d.ts.map +1 -0
  916. package/dist/dts/Cache.d.ts +241 -0
  917. package/dist/dts/Cache.d.ts.map +1 -0
  918. package/dist/dts/Cause.d.ts +1928 -0
  919. package/dist/dts/Cause.d.ts.map +1 -0
  920. package/dist/dts/Channel.d.ts +1989 -0
  921. package/dist/dts/Channel.d.ts.map +1 -0
  922. package/dist/dts/ChildExecutorDecision.d.ts +135 -0
  923. package/dist/dts/ChildExecutorDecision.d.ts.map +1 -0
  924. package/dist/dts/Chunk.d.ts +1709 -0
  925. package/dist/dts/Chunk.d.ts.map +1 -0
  926. package/dist/dts/Clock.d.ts +97 -0
  927. package/dist/dts/Clock.d.ts.map +1 -0
  928. package/dist/dts/Config.d.ts +667 -0
  929. package/dist/dts/Config.d.ts.map +1 -0
  930. package/dist/dts/ConfigError.d.ts +238 -0
  931. package/dist/dts/ConfigError.d.ts.map +1 -0
  932. package/dist/dts/ConfigProvider.d.ts +372 -0
  933. package/dist/dts/ConfigProvider.d.ts.map +1 -0
  934. package/dist/dts/ConfigProviderPathPatch.d.ts +118 -0
  935. package/dist/dts/ConfigProviderPathPatch.d.ts.map +1 -0
  936. package/dist/dts/Console.d.ts +224 -0
  937. package/dist/dts/Console.d.ts.map +1 -0
  938. package/dist/dts/Context.d.ts +823 -0
  939. package/dist/dts/Context.d.ts.map +1 -0
  940. package/dist/dts/Cron.d.ts +226 -0
  941. package/dist/dts/Cron.d.ts.map +1 -0
  942. package/dist/dts/Data.d.ts +613 -0
  943. package/dist/dts/Data.d.ts.map +1 -0
  944. package/dist/dts/DateTime.d.ts +2417 -0
  945. package/dist/dts/DateTime.d.ts.map +1 -0
  946. package/dist/dts/DefaultServices.d.ts +26 -0
  947. package/dist/dts/DefaultServices.d.ts.map +1 -0
  948. package/dist/dts/Deferred.d.ts +437 -0
  949. package/dist/dts/Deferred.d.ts.map +1 -0
  950. package/dist/dts/Differ.d.ts +420 -0
  951. package/dist/dts/Differ.d.ts.map +1 -0
  952. package/dist/dts/Duration.d.ts +557 -0
  953. package/dist/dts/Duration.d.ts.map +1 -0
  954. package/dist/dts/Effect.d.ts +26986 -0
  955. package/dist/dts/Effect.d.ts.map +1 -0
  956. package/dist/dts/Effectable.d.ts +93 -0
  957. package/dist/dts/Effectable.d.ts.map +1 -0
  958. package/dist/dts/Either.d.ts +1431 -0
  959. package/dist/dts/Either.d.ts.map +1 -0
  960. package/dist/dts/Encoding.d.ts +160 -0
  961. package/dist/dts/Encoding.d.ts.map +1 -0
  962. package/dist/dts/Equal.d.ts +34 -0
  963. package/dist/dts/Equal.d.ts.map +1 -0
  964. package/dist/dts/Equivalence.d.ts +158 -0
  965. package/dist/dts/Equivalence.d.ts.map +1 -0
  966. package/dist/dts/ExecutionPlan.d.ts +210 -0
  967. package/dist/dts/ExecutionPlan.d.ts.map +1 -0
  968. package/dist/dts/ExecutionStrategy.d.ts +122 -0
  969. package/dist/dts/ExecutionStrategy.d.ts.map +1 -0
  970. package/dist/dts/Exit.d.ts +663 -0
  971. package/dist/dts/Exit.d.ts.map +1 -0
  972. package/dist/dts/FastCheck.d.ts +9 -0
  973. package/dist/dts/FastCheck.d.ts.map +1 -0
  974. package/dist/dts/Fiber.d.ts +831 -0
  975. package/dist/dts/Fiber.d.ts.map +1 -0
  976. package/dist/dts/FiberHandle.d.ts +270 -0
  977. package/dist/dts/FiberHandle.d.ts.map +1 -0
  978. package/dist/dts/FiberId.d.ts +196 -0
  979. package/dist/dts/FiberId.d.ts.map +1 -0
  980. package/dist/dts/FiberMap.d.ts +368 -0
  981. package/dist/dts/FiberMap.d.ts.map +1 -0
  982. package/dist/dts/FiberRef.d.ts +422 -0
  983. package/dist/dts/FiberRef.d.ts.map +1 -0
  984. package/dist/dts/FiberRefs.d.ts +256 -0
  985. package/dist/dts/FiberRefs.d.ts.map +1 -0
  986. package/dist/dts/FiberRefsPatch.d.ts +125 -0
  987. package/dist/dts/FiberRefsPatch.d.ts.map +1 -0
  988. package/dist/dts/FiberSet.d.ts +236 -0
  989. package/dist/dts/FiberSet.d.ts.map +1 -0
  990. package/dist/dts/FiberStatus.d.ts +94 -0
  991. package/dist/dts/FiberStatus.d.ts.map +1 -0
  992. package/dist/dts/Function.d.ts +660 -0
  993. package/dist/dts/Function.d.ts.map +1 -0
  994. package/dist/dts/GlobalValue.d.ts +25 -0
  995. package/dist/dts/GlobalValue.d.ts.map +1 -0
  996. package/dist/dts/Graph.d.ts +1753 -0
  997. package/dist/dts/Graph.d.ts.map +1 -0
  998. package/dist/dts/GroupBy.d.ts +125 -0
  999. package/dist/dts/GroupBy.d.ts.map +1 -0
  1000. package/dist/dts/HKT.d.ts +41 -0
  1001. package/dist/dts/HKT.d.ts.map +1 -0
  1002. package/dist/dts/Hash.d.ts +79 -0
  1003. package/dist/dts/Hash.d.ts.map +1 -0
  1004. package/dist/dts/HashMap.d.ts +863 -0
  1005. package/dist/dts/HashMap.d.ts.map +1 -0
  1006. package/dist/dts/HashRing.d.ts +158 -0
  1007. package/dist/dts/HashRing.d.ts.map +1 -0
  1008. package/dist/dts/HashSet.d.ts +2271 -0
  1009. package/dist/dts/HashSet.d.ts.map +1 -0
  1010. package/dist/dts/Inspectable.d.ts +88 -0
  1011. package/dist/dts/Inspectable.d.ts.map +1 -0
  1012. package/dist/dts/Iterable.d.ts +1047 -0
  1013. package/dist/dts/Iterable.d.ts.map +1 -0
  1014. package/dist/dts/JSONSchema.d.ts +268 -0
  1015. package/dist/dts/JSONSchema.d.ts.map +1 -0
  1016. package/dist/dts/KeyedPool.d.ts +182 -0
  1017. package/dist/dts/KeyedPool.d.ts.map +1 -0
  1018. package/dist/dts/Layer.d.ts +1374 -0
  1019. package/dist/dts/Layer.d.ts.map +1 -0
  1020. package/dist/dts/LayerMap.d.ts +265 -0
  1021. package/dist/dts/LayerMap.d.ts.map +1 -0
  1022. package/dist/dts/List.d.ts +937 -0
  1023. package/dist/dts/List.d.ts.map +1 -0
  1024. package/dist/dts/LogLevel.d.ts +333 -0
  1025. package/dist/dts/LogLevel.d.ts.map +1 -0
  1026. package/dist/dts/LogSpan.d.ts +19 -0
  1027. package/dist/dts/LogSpan.d.ts.map +1 -0
  1028. package/dist/dts/Logger.d.ts +795 -0
  1029. package/dist/dts/Logger.d.ts.map +1 -0
  1030. package/dist/dts/Mailbox.d.ts +274 -0
  1031. package/dist/dts/Mailbox.d.ts.map +1 -0
  1032. package/dist/dts/ManagedRuntime.d.ts +154 -0
  1033. package/dist/dts/ManagedRuntime.d.ts.map +1 -0
  1034. package/dist/dts/Match.d.ts +1140 -0
  1035. package/dist/dts/Match.d.ts.map +1 -0
  1036. package/dist/dts/MergeDecision.d.ts +86 -0
  1037. package/dist/dts/MergeDecision.d.ts.map +1 -0
  1038. package/dist/dts/MergeState.d.ts +130 -0
  1039. package/dist/dts/MergeState.d.ts.map +1 -0
  1040. package/dist/dts/MergeStrategy.d.ts +104 -0
  1041. package/dist/dts/MergeStrategy.d.ts.map +1 -0
  1042. package/dist/dts/Metric.d.ts +1042 -0
  1043. package/dist/dts/Metric.d.ts.map +1 -0
  1044. package/dist/dts/MetricBoundaries.d.ts +58 -0
  1045. package/dist/dts/MetricBoundaries.d.ts.map +1 -0
  1046. package/dist/dts/MetricHook.d.ts +155 -0
  1047. package/dist/dts/MetricHook.d.ts.map +1 -0
  1048. package/dist/dts/MetricKey.d.ts +222 -0
  1049. package/dist/dts/MetricKey.d.ts.map +1 -0
  1050. package/dist/dts/MetricKeyType.d.ts +224 -0
  1051. package/dist/dts/MetricKeyType.d.ts.map +1 -0
  1052. package/dist/dts/MetricLabel.d.ts +42 -0
  1053. package/dist/dts/MetricLabel.d.ts.map +1 -0
  1054. package/dist/dts/MetricPair.d.ts +54 -0
  1055. package/dist/dts/MetricPair.d.ts.map +1 -0
  1056. package/dist/dts/MetricPolling.d.ts +151 -0
  1057. package/dist/dts/MetricPolling.d.ts.map +1 -0
  1058. package/dist/dts/MetricRegistry.d.ts +34 -0
  1059. package/dist/dts/MetricRegistry.d.ts.map +1 -0
  1060. package/dist/dts/MetricState.d.ts +238 -0
  1061. package/dist/dts/MetricState.d.ts.map +1 -0
  1062. package/dist/dts/Micro.d.ts +3440 -0
  1063. package/dist/dts/Micro.d.ts.map +1 -0
  1064. package/dist/dts/ModuleVersion.d.ts +11 -0
  1065. package/dist/dts/ModuleVersion.d.ts.map +1 -0
  1066. package/dist/dts/MutableHashMap.d.ts +170 -0
  1067. package/dist/dts/MutableHashMap.d.ts.map +1 -0
  1068. package/dist/dts/MutableHashSet.d.ts +547 -0
  1069. package/dist/dts/MutableHashSet.d.ts.map +1 -0
  1070. package/dist/dts/MutableList.d.ts +150 -0
  1071. package/dist/dts/MutableList.d.ts.map +1 -0
  1072. package/dist/dts/MutableQueue.d.ts +189 -0
  1073. package/dist/dts/MutableQueue.d.ts.map +1 -0
  1074. package/dist/dts/MutableRef.d.ts +175 -0
  1075. package/dist/dts/MutableRef.d.ts.map +1 -0
  1076. package/dist/dts/NonEmptyIterable.d.ts +21 -0
  1077. package/dist/dts/NonEmptyIterable.d.ts.map +1 -0
  1078. package/dist/dts/Number.d.ts +1361 -0
  1079. package/dist/dts/Number.d.ts.map +1 -0
  1080. package/dist/dts/Option.d.ts +3757 -0
  1081. package/dist/dts/Option.d.ts.map +1 -0
  1082. package/dist/dts/Order.d.ts +260 -0
  1083. package/dist/dts/Order.d.ts.map +1 -0
  1084. package/dist/dts/Ordering.d.ts +144 -0
  1085. package/dist/dts/Ordering.d.ts.map +1 -0
  1086. package/dist/dts/ParseResult.d.ts +560 -0
  1087. package/dist/dts/ParseResult.d.ts.map +1 -0
  1088. package/dist/dts/PartitionedSemaphore.d.ts +76 -0
  1089. package/dist/dts/PartitionedSemaphore.d.ts.map +1 -0
  1090. package/dist/dts/Pipeable.d.ts +65 -0
  1091. package/dist/dts/Pipeable.d.ts.map +1 -0
  1092. package/dist/dts/Pool.d.ts +201 -0
  1093. package/dist/dts/Pool.d.ts.map +1 -0
  1094. package/dist/dts/Predicate.d.ts +2197 -0
  1095. package/dist/dts/Predicate.d.ts.map +1 -0
  1096. package/dist/dts/Pretty.d.ts +26 -0
  1097. package/dist/dts/Pretty.d.ts.map +1 -0
  1098. package/dist/dts/PrimaryKey.d.ts +21 -0
  1099. package/dist/dts/PrimaryKey.d.ts.map +1 -0
  1100. package/dist/dts/PubSub.d.ts +197 -0
  1101. package/dist/dts/PubSub.d.ts.map +1 -0
  1102. package/dist/dts/Queue.d.ts +664 -0
  1103. package/dist/dts/Queue.d.ts.map +1 -0
  1104. package/dist/dts/Random.d.ts +183 -0
  1105. package/dist/dts/Random.d.ts.map +1 -0
  1106. package/dist/dts/RateLimiter.d.ts +134 -0
  1107. package/dist/dts/RateLimiter.d.ts.map +1 -0
  1108. package/dist/dts/RcMap.d.ts +231 -0
  1109. package/dist/dts/RcMap.d.ts.map +1 -0
  1110. package/dist/dts/RcRef.d.ts +111 -0
  1111. package/dist/dts/RcRef.d.ts.map +1 -0
  1112. package/dist/dts/Readable.d.ts +72 -0
  1113. package/dist/dts/Readable.d.ts.map +1 -0
  1114. package/dist/dts/Record.d.ts +1547 -0
  1115. package/dist/dts/Record.d.ts.map +1 -0
  1116. package/dist/dts/RedBlackTree.d.ts +676 -0
  1117. package/dist/dts/RedBlackTree.d.ts.map +1 -0
  1118. package/dist/dts/Redacted.d.ts +133 -0
  1119. package/dist/dts/Redacted.d.ts.map +1 -0
  1120. package/dist/dts/Ref.d.ts +250 -0
  1121. package/dist/dts/Ref.d.ts.map +1 -0
  1122. package/dist/dts/RegExp.d.ts +31 -0
  1123. package/dist/dts/RegExp.d.ts.map +1 -0
  1124. package/dist/dts/Reloadable.d.ts +102 -0
  1125. package/dist/dts/Reloadable.d.ts.map +1 -0
  1126. package/dist/dts/Request.d.ts +383 -0
  1127. package/dist/dts/Request.d.ts.map +1 -0
  1128. package/dist/dts/RequestBlock.d.ts +94 -0
  1129. package/dist/dts/RequestBlock.d.ts.map +1 -0
  1130. package/dist/dts/RequestResolver.d.ts +413 -0
  1131. package/dist/dts/RequestResolver.d.ts.map +1 -0
  1132. package/dist/dts/Resource.d.ts +99 -0
  1133. package/dist/dts/Resource.d.ts.map +1 -0
  1134. package/dist/dts/Runtime.d.ts +578 -0
  1135. package/dist/dts/Runtime.d.ts.map +1 -0
  1136. package/dist/dts/RuntimeFlags.d.ts +397 -0
  1137. package/dist/dts/RuntimeFlags.d.ts.map +1 -0
  1138. package/dist/dts/RuntimeFlagsPatch.d.ts +273 -0
  1139. package/dist/dts/RuntimeFlagsPatch.d.ts.map +1 -0
  1140. package/dist/dts/STM.d.ts +2645 -0
  1141. package/dist/dts/STM.d.ts.map +1 -0
  1142. package/dist/dts/Schedule.d.ts +3509 -0
  1143. package/dist/dts/Schedule.d.ts.map +1 -0
  1144. package/dist/dts/ScheduleDecision.d.ts +50 -0
  1145. package/dist/dts/ScheduleDecision.d.ts.map +1 -0
  1146. package/dist/dts/ScheduleInterval.d.ts +204 -0
  1147. package/dist/dts/ScheduleInterval.d.ts.map +1 -0
  1148. package/dist/dts/ScheduleIntervals.d.ts +159 -0
  1149. package/dist/dts/ScheduleIntervals.d.ts.map +1 -0
  1150. package/dist/dts/Scheduler.d.ts +161 -0
  1151. package/dist/dts/Scheduler.d.ts.map +1 -0
  1152. package/dist/dts/Schema.d.ts +5094 -0
  1153. package/dist/dts/Schema.d.ts.map +1 -0
  1154. package/dist/dts/SchemaAST.d.ts +1360 -0
  1155. package/dist/dts/SchemaAST.d.ts.map +1 -0
  1156. package/dist/dts/Scope.d.ts +194 -0
  1157. package/dist/dts/Scope.d.ts.map +1 -0
  1158. package/dist/dts/ScopedCache.d.ts +127 -0
  1159. package/dist/dts/ScopedCache.d.ts.map +1 -0
  1160. package/dist/dts/ScopedRef.d.ts +125 -0
  1161. package/dist/dts/ScopedRef.d.ts.map +1 -0
  1162. package/dist/dts/Secret.d.ts +76 -0
  1163. package/dist/dts/Secret.d.ts.map +1 -0
  1164. package/dist/dts/SingleProducerAsyncInput.d.ts +57 -0
  1165. package/dist/dts/SingleProducerAsyncInput.d.ts.map +1 -0
  1166. package/dist/dts/Sink.d.ts +1616 -0
  1167. package/dist/dts/Sink.d.ts.map +1 -0
  1168. package/dist/dts/SortedMap.d.ts +234 -0
  1169. package/dist/dts/SortedMap.d.ts.map +1 -0
  1170. package/dist/dts/SortedSet.d.ts +333 -0
  1171. package/dist/dts/SortedSet.d.ts.map +1 -0
  1172. package/dist/dts/Stream.d.ts +10803 -0
  1173. package/dist/dts/Stream.d.ts.map +1 -0
  1174. package/dist/dts/StreamEmit.d.ts +117 -0
  1175. package/dist/dts/StreamEmit.d.ts.map +1 -0
  1176. package/dist/dts/StreamHaltStrategy.d.ts +116 -0
  1177. package/dist/dts/StreamHaltStrategy.d.ts.map +1 -0
  1178. package/dist/dts/Streamable.d.ts +27 -0
  1179. package/dist/dts/Streamable.d.ts.map +1 -0
  1180. package/dist/dts/String.d.ts +848 -0
  1181. package/dist/dts/String.d.ts.map +1 -0
  1182. package/dist/dts/Struct.d.ts +295 -0
  1183. package/dist/dts/Struct.d.ts.map +1 -0
  1184. package/dist/dts/Subscribable.d.ts +76 -0
  1185. package/dist/dts/Subscribable.d.ts.map +1 -0
  1186. package/dist/dts/SubscriptionRef.d.ts +384 -0
  1187. package/dist/dts/SubscriptionRef.d.ts.map +1 -0
  1188. package/dist/dts/Supervisor.d.ts +171 -0
  1189. package/dist/dts/Supervisor.d.ts.map +1 -0
  1190. package/dist/dts/Symbol.d.ts +26 -0
  1191. package/dist/dts/Symbol.d.ts.map +1 -0
  1192. package/dist/dts/SynchronizedRef.d.ts +378 -0
  1193. package/dist/dts/SynchronizedRef.d.ts.map +1 -0
  1194. package/dist/dts/TArray.d.ts +857 -0
  1195. package/dist/dts/TArray.d.ts.map +1 -0
  1196. package/dist/dts/TDeferred.d.ts +104 -0
  1197. package/dist/dts/TDeferred.d.ts.map +1 -0
  1198. package/dist/dts/TMap.d.ts +780 -0
  1199. package/dist/dts/TMap.d.ts.map +1 -0
  1200. package/dist/dts/TPriorityQueue.d.ts +250 -0
  1201. package/dist/dts/TPriorityQueue.d.ts.map +1 -0
  1202. package/dist/dts/TPubSub.d.ts +186 -0
  1203. package/dist/dts/TPubSub.d.ts.map +1 -0
  1204. package/dist/dts/TQueue.d.ts +492 -0
  1205. package/dist/dts/TQueue.d.ts.map +1 -0
  1206. package/dist/dts/TRandom.d.ts +108 -0
  1207. package/dist/dts/TRandom.d.ts.map +1 -0
  1208. package/dist/dts/TReentrantLock.d.ts +230 -0
  1209. package/dist/dts/TReentrantLock.d.ts.map +1 -0
  1210. package/dist/dts/TRef.d.ts +235 -0
  1211. package/dist/dts/TRef.d.ts.map +1 -0
  1212. package/dist/dts/TSemaphore.d.ts +145 -0
  1213. package/dist/dts/TSemaphore.d.ts.map +1 -0
  1214. package/dist/dts/TSet.d.ts +564 -0
  1215. package/dist/dts/TSet.d.ts.map +1 -0
  1216. package/dist/dts/TSubscriptionRef.d.ts +251 -0
  1217. package/dist/dts/TSubscriptionRef.d.ts.map +1 -0
  1218. package/dist/dts/Take.d.ts +271 -0
  1219. package/dist/dts/Take.d.ts.map +1 -0
  1220. package/dist/dts/TestAnnotation.d.ts +71 -0
  1221. package/dist/dts/TestAnnotation.d.ts.map +1 -0
  1222. package/dist/dts/TestAnnotationMap.d.ts +56 -0
  1223. package/dist/dts/TestAnnotationMap.d.ts.map +1 -0
  1224. package/dist/dts/TestAnnotations.d.ts +59 -0
  1225. package/dist/dts/TestAnnotations.d.ts.map +1 -0
  1226. package/dist/dts/TestClock.d.ts +147 -0
  1227. package/dist/dts/TestClock.d.ts.map +1 -0
  1228. package/dist/dts/TestConfig.d.ts +45 -0
  1229. package/dist/dts/TestConfig.d.ts.map +1 -0
  1230. package/dist/dts/TestContext.d.ts +15 -0
  1231. package/dist/dts/TestContext.d.ts.map +1 -0
  1232. package/dist/dts/TestLive.d.ts +35 -0
  1233. package/dist/dts/TestLive.d.ts.map +1 -0
  1234. package/dist/dts/TestServices.d.ts +231 -0
  1235. package/dist/dts/TestServices.d.ts.map +1 -0
  1236. package/dist/dts/TestSized.d.ts +36 -0
  1237. package/dist/dts/TestSized.d.ts.map +1 -0
  1238. package/dist/dts/Tracer.d.ts +152 -0
  1239. package/dist/dts/Tracer.d.ts.map +1 -0
  1240. package/dist/dts/Trie.d.ts +1828 -0
  1241. package/dist/dts/Trie.d.ts.map +1 -0
  1242. package/dist/dts/Tuple.d.ts +446 -0
  1243. package/dist/dts/Tuple.d.ts.map +1 -0
  1244. package/dist/dts/Types.d.ts +330 -0
  1245. package/dist/dts/Types.d.ts.map +1 -0
  1246. package/dist/dts/Unify.d.ts +75 -0
  1247. package/dist/dts/Unify.d.ts.map +1 -0
  1248. package/dist/dts/UpstreamPullRequest.d.ts +109 -0
  1249. package/dist/dts/UpstreamPullRequest.d.ts.map +1 -0
  1250. package/dist/dts/UpstreamPullStrategy.d.ts +110 -0
  1251. package/dist/dts/UpstreamPullStrategy.d.ts.map +1 -0
  1252. package/dist/dts/Utils.d.ts +283 -0
  1253. package/dist/dts/Utils.d.ts.map +1 -0
  1254. package/dist/dts/index.d.ts +1385 -0
  1255. package/dist/dts/index.d.ts.map +1 -0
  1256. package/dist/dts/internal/array.d.ts +5 -0
  1257. package/dist/dts/internal/array.d.ts.map +1 -0
  1258. package/dist/dts/internal/blockedRequests.d.ts +2 -0
  1259. package/dist/dts/internal/blockedRequests.d.ts.map +1 -0
  1260. package/dist/dts/internal/cache.d.ts +2 -0
  1261. package/dist/dts/internal/cache.d.ts.map +1 -0
  1262. package/dist/dts/internal/cause.d.ts +2 -0
  1263. package/dist/dts/internal/cause.d.ts.map +1 -0
  1264. package/dist/dts/internal/channel/channelExecutor.d.ts +3 -0
  1265. package/dist/dts/internal/channel/channelExecutor.d.ts.map +1 -0
  1266. package/dist/dts/internal/channel/channelState.d.ts +2 -0
  1267. package/dist/dts/internal/channel/channelState.d.ts.map +1 -0
  1268. package/dist/dts/internal/channel/childExecutorDecision.d.ts +2 -0
  1269. package/dist/dts/internal/channel/childExecutorDecision.d.ts.map +1 -0
  1270. package/dist/dts/internal/channel/continuation.d.ts +2 -0
  1271. package/dist/dts/internal/channel/continuation.d.ts.map +1 -0
  1272. package/dist/dts/internal/channel/mergeDecision.d.ts +2 -0
  1273. package/dist/dts/internal/channel/mergeDecision.d.ts.map +1 -0
  1274. package/dist/dts/internal/channel/mergeState.d.ts +2 -0
  1275. package/dist/dts/internal/channel/mergeState.d.ts.map +1 -0
  1276. package/dist/dts/internal/channel/mergeStrategy.d.ts +2 -0
  1277. package/dist/dts/internal/channel/mergeStrategy.d.ts.map +1 -0
  1278. package/dist/dts/internal/channel/singleProducerAsyncInput.d.ts +2 -0
  1279. package/dist/dts/internal/channel/singleProducerAsyncInput.d.ts.map +1 -0
  1280. package/dist/dts/internal/channel/subexecutor.d.ts +2 -0
  1281. package/dist/dts/internal/channel/subexecutor.d.ts.map +1 -0
  1282. package/dist/dts/internal/channel/upstreamPullRequest.d.ts +2 -0
  1283. package/dist/dts/internal/channel/upstreamPullRequest.d.ts.map +1 -0
  1284. package/dist/dts/internal/channel/upstreamPullStrategy.d.ts +2 -0
  1285. package/dist/dts/internal/channel/upstreamPullStrategy.d.ts.map +1 -0
  1286. package/dist/dts/internal/channel.d.ts +2 -0
  1287. package/dist/dts/internal/channel.d.ts.map +1 -0
  1288. package/dist/dts/internal/clock.d.ts +2 -0
  1289. package/dist/dts/internal/clock.d.ts.map +1 -0
  1290. package/dist/dts/internal/completedRequestMap.d.ts +2 -0
  1291. package/dist/dts/internal/completedRequestMap.d.ts.map +1 -0
  1292. package/dist/dts/internal/concurrency.d.ts +2 -0
  1293. package/dist/dts/internal/concurrency.d.ts.map +1 -0
  1294. package/dist/dts/internal/config.d.ts +2 -0
  1295. package/dist/dts/internal/config.d.ts.map +1 -0
  1296. package/dist/dts/internal/configError.d.ts +2 -0
  1297. package/dist/dts/internal/configError.d.ts.map +1 -0
  1298. package/dist/dts/internal/configProvider/pathPatch.d.ts +2 -0
  1299. package/dist/dts/internal/configProvider/pathPatch.d.ts.map +1 -0
  1300. package/dist/dts/internal/configProvider.d.ts +2 -0
  1301. package/dist/dts/internal/configProvider.d.ts.map +1 -0
  1302. package/dist/dts/internal/console.d.ts +2 -0
  1303. package/dist/dts/internal/console.d.ts.map +1 -0
  1304. package/dist/dts/internal/context.d.ts +2 -0
  1305. package/dist/dts/internal/context.d.ts.map +1 -0
  1306. package/dist/dts/internal/core-effect.d.ts +8 -0
  1307. package/dist/dts/internal/core-effect.d.ts.map +1 -0
  1308. package/dist/dts/internal/core-stream.d.ts +9 -0
  1309. package/dist/dts/internal/core-stream.d.ts.map +1 -0
  1310. package/dist/dts/internal/core.d.ts +9 -0
  1311. package/dist/dts/internal/core.d.ts.map +1 -0
  1312. package/dist/dts/internal/data.d.ts +2 -0
  1313. package/dist/dts/internal/data.d.ts.map +1 -0
  1314. package/dist/dts/internal/dataSource.d.ts +2 -0
  1315. package/dist/dts/internal/dataSource.d.ts.map +1 -0
  1316. package/dist/dts/internal/dateTime.d.ts +2 -0
  1317. package/dist/dts/internal/dateTime.d.ts.map +1 -0
  1318. package/dist/dts/internal/defaultServices/console.d.ts +2 -0
  1319. package/dist/dts/internal/defaultServices/console.d.ts.map +1 -0
  1320. package/dist/dts/internal/defaultServices.d.ts +10 -0
  1321. package/dist/dts/internal/defaultServices.d.ts.map +1 -0
  1322. package/dist/dts/internal/deferred.d.ts +2 -0
  1323. package/dist/dts/internal/deferred.d.ts.map +1 -0
  1324. package/dist/dts/internal/differ/chunkPatch.d.ts +2 -0
  1325. package/dist/dts/internal/differ/chunkPatch.d.ts.map +1 -0
  1326. package/dist/dts/internal/differ/contextPatch.d.ts +2 -0
  1327. package/dist/dts/internal/differ/contextPatch.d.ts.map +1 -0
  1328. package/dist/dts/internal/differ/hashMapPatch.d.ts +2 -0
  1329. package/dist/dts/internal/differ/hashMapPatch.d.ts.map +1 -0
  1330. package/dist/dts/internal/differ/hashSetPatch.d.ts +2 -0
  1331. package/dist/dts/internal/differ/hashSetPatch.d.ts.map +1 -0
  1332. package/dist/dts/internal/differ/orPatch.d.ts +2 -0
  1333. package/dist/dts/internal/differ/orPatch.d.ts.map +1 -0
  1334. package/dist/dts/internal/differ/readonlyArrayPatch.d.ts +2 -0
  1335. package/dist/dts/internal/differ/readonlyArrayPatch.d.ts.map +1 -0
  1336. package/dist/dts/internal/differ.d.ts +2 -0
  1337. package/dist/dts/internal/differ.d.ts.map +1 -0
  1338. package/dist/dts/internal/doNotation.d.ts +2 -0
  1339. package/dist/dts/internal/doNotation.d.ts.map +1 -0
  1340. package/dist/dts/internal/effect/circular.d.ts +2 -0
  1341. package/dist/dts/internal/effect/circular.d.ts.map +1 -0
  1342. package/dist/dts/internal/effectable.d.ts +2 -0
  1343. package/dist/dts/internal/effectable.d.ts.map +1 -0
  1344. package/dist/dts/internal/either.d.ts +5 -0
  1345. package/dist/dts/internal/either.d.ts.map +1 -0
  1346. package/dist/dts/internal/encoding/base64.d.ts +2 -0
  1347. package/dist/dts/internal/encoding/base64.d.ts.map +1 -0
  1348. package/dist/dts/internal/encoding/base64Url.d.ts +2 -0
  1349. package/dist/dts/internal/encoding/base64Url.d.ts.map +1 -0
  1350. package/dist/dts/internal/encoding/common.d.ts +5 -0
  1351. package/dist/dts/internal/encoding/common.d.ts.map +1 -0
  1352. package/dist/dts/internal/encoding/hex.d.ts +2 -0
  1353. package/dist/dts/internal/encoding/hex.d.ts.map +1 -0
  1354. package/dist/dts/internal/errors.d.ts +5 -0
  1355. package/dist/dts/internal/errors.d.ts.map +1 -0
  1356. package/dist/dts/internal/executionPlan.d.ts +2 -0
  1357. package/dist/dts/internal/executionPlan.d.ts.map +1 -0
  1358. package/dist/dts/internal/executionStrategy.d.ts +2 -0
  1359. package/dist/dts/internal/executionStrategy.d.ts.map +1 -0
  1360. package/dist/dts/internal/fiber.d.ts +6 -0
  1361. package/dist/dts/internal/fiber.d.ts.map +1 -0
  1362. package/dist/dts/internal/fiberId.d.ts +2 -0
  1363. package/dist/dts/internal/fiberId.d.ts.map +1 -0
  1364. package/dist/dts/internal/fiberMessage.d.ts +2 -0
  1365. package/dist/dts/internal/fiberMessage.d.ts.map +1 -0
  1366. package/dist/dts/internal/fiberRefs/patch.d.ts +2 -0
  1367. package/dist/dts/internal/fiberRefs/patch.d.ts.map +1 -0
  1368. package/dist/dts/internal/fiberRefs.d.ts +2 -0
  1369. package/dist/dts/internal/fiberRefs.d.ts.map +1 -0
  1370. package/dist/dts/internal/fiberRuntime.d.ts +7 -0
  1371. package/dist/dts/internal/fiberRuntime.d.ts.map +1 -0
  1372. package/dist/dts/internal/fiberScope.d.ts +18 -0
  1373. package/dist/dts/internal/fiberScope.d.ts.map +1 -0
  1374. package/dist/dts/internal/fiberStatus.d.ts +2 -0
  1375. package/dist/dts/internal/fiberStatus.d.ts.map +1 -0
  1376. package/dist/dts/internal/groupBy.d.ts +2 -0
  1377. package/dist/dts/internal/groupBy.d.ts.map +1 -0
  1378. package/dist/dts/internal/hashMap/array.d.ts +2 -0
  1379. package/dist/dts/internal/hashMap/array.d.ts.map +1 -0
  1380. package/dist/dts/internal/hashMap/bitwise.d.ts +2 -0
  1381. package/dist/dts/internal/hashMap/bitwise.d.ts.map +1 -0
  1382. package/dist/dts/internal/hashMap/config.d.ts +2 -0
  1383. package/dist/dts/internal/hashMap/config.d.ts.map +1 -0
  1384. package/dist/dts/internal/hashMap/keySet.d.ts +2 -0
  1385. package/dist/dts/internal/hashMap/keySet.d.ts.map +1 -0
  1386. package/dist/dts/internal/hashMap/node.d.ts +2 -0
  1387. package/dist/dts/internal/hashMap/node.d.ts.map +1 -0
  1388. package/dist/dts/internal/hashMap.d.ts +9 -0
  1389. package/dist/dts/internal/hashMap.d.ts.map +1 -0
  1390. package/dist/dts/internal/hashSet.d.ts +2 -0
  1391. package/dist/dts/internal/hashSet.d.ts.map +1 -0
  1392. package/dist/dts/internal/keyedPool.d.ts +2 -0
  1393. package/dist/dts/internal/keyedPool.d.ts.map +1 -0
  1394. package/dist/dts/internal/layer/circular.d.ts +2 -0
  1395. package/dist/dts/internal/layer/circular.d.ts.map +1 -0
  1396. package/dist/dts/internal/layer.d.ts +16 -0
  1397. package/dist/dts/internal/layer.d.ts.map +1 -0
  1398. package/dist/dts/internal/logSpan.d.ts +2 -0
  1399. package/dist/dts/internal/logSpan.d.ts.map +1 -0
  1400. package/dist/dts/internal/logger-circular.d.ts +2 -0
  1401. package/dist/dts/internal/logger-circular.d.ts.map +1 -0
  1402. package/dist/dts/internal/logger.d.ts +2 -0
  1403. package/dist/dts/internal/logger.d.ts.map +1 -0
  1404. package/dist/dts/internal/mailbox.d.ts +2 -0
  1405. package/dist/dts/internal/mailbox.d.ts.map +1 -0
  1406. package/dist/dts/internal/managedRuntime/circular.d.ts +2 -0
  1407. package/dist/dts/internal/managedRuntime/circular.d.ts.map +1 -0
  1408. package/dist/dts/internal/managedRuntime.d.ts +2 -0
  1409. package/dist/dts/internal/managedRuntime.d.ts.map +1 -0
  1410. package/dist/dts/internal/matcher.d.ts +2 -0
  1411. package/dist/dts/internal/matcher.d.ts.map +1 -0
  1412. package/dist/dts/internal/metric/boundaries.d.ts +2 -0
  1413. package/dist/dts/internal/metric/boundaries.d.ts.map +1 -0
  1414. package/dist/dts/internal/metric/hook.d.ts +2 -0
  1415. package/dist/dts/internal/metric/hook.d.ts.map +1 -0
  1416. package/dist/dts/internal/metric/key.d.ts +2 -0
  1417. package/dist/dts/internal/metric/key.d.ts.map +1 -0
  1418. package/dist/dts/internal/metric/keyType.d.ts +2 -0
  1419. package/dist/dts/internal/metric/keyType.d.ts.map +1 -0
  1420. package/dist/dts/internal/metric/label.d.ts +2 -0
  1421. package/dist/dts/internal/metric/label.d.ts.map +1 -0
  1422. package/dist/dts/internal/metric/pair.d.ts +2 -0
  1423. package/dist/dts/internal/metric/pair.d.ts.map +1 -0
  1424. package/dist/dts/internal/metric/polling.d.ts +2 -0
  1425. package/dist/dts/internal/metric/polling.d.ts.map +1 -0
  1426. package/dist/dts/internal/metric/registry.d.ts +2 -0
  1427. package/dist/dts/internal/metric/registry.d.ts.map +1 -0
  1428. package/dist/dts/internal/metric/state.d.ts +22 -0
  1429. package/dist/dts/internal/metric/state.d.ts.map +1 -0
  1430. package/dist/dts/internal/metric.d.ts +2 -0
  1431. package/dist/dts/internal/metric.d.ts.map +1 -0
  1432. package/dist/dts/internal/opCodes/cause.d.ts +2 -0
  1433. package/dist/dts/internal/opCodes/cause.d.ts.map +1 -0
  1434. package/dist/dts/internal/opCodes/channel.d.ts +2 -0
  1435. package/dist/dts/internal/opCodes/channel.d.ts.map +1 -0
  1436. package/dist/dts/internal/opCodes/channelChildExecutorDecision.d.ts +2 -0
  1437. package/dist/dts/internal/opCodes/channelChildExecutorDecision.d.ts.map +1 -0
  1438. package/dist/dts/internal/opCodes/channelMergeDecision.d.ts +2 -0
  1439. package/dist/dts/internal/opCodes/channelMergeDecision.d.ts.map +1 -0
  1440. package/dist/dts/internal/opCodes/channelMergeState.d.ts +2 -0
  1441. package/dist/dts/internal/opCodes/channelMergeState.d.ts.map +1 -0
  1442. package/dist/dts/internal/opCodes/channelMergeStrategy.d.ts +2 -0
  1443. package/dist/dts/internal/opCodes/channelMergeStrategy.d.ts.map +1 -0
  1444. package/dist/dts/internal/opCodes/channelState.d.ts +2 -0
  1445. package/dist/dts/internal/opCodes/channelState.d.ts.map +1 -0
  1446. package/dist/dts/internal/opCodes/channelUpstreamPullRequest.d.ts +2 -0
  1447. package/dist/dts/internal/opCodes/channelUpstreamPullRequest.d.ts.map +1 -0
  1448. package/dist/dts/internal/opCodes/channelUpstreamPullStrategy.d.ts +2 -0
  1449. package/dist/dts/internal/opCodes/channelUpstreamPullStrategy.d.ts.map +1 -0
  1450. package/dist/dts/internal/opCodes/config.d.ts +2 -0
  1451. package/dist/dts/internal/opCodes/config.d.ts.map +1 -0
  1452. package/dist/dts/internal/opCodes/configError.d.ts +2 -0
  1453. package/dist/dts/internal/opCodes/configError.d.ts.map +1 -0
  1454. package/dist/dts/internal/opCodes/continuation.d.ts +2 -0
  1455. package/dist/dts/internal/opCodes/continuation.d.ts.map +1 -0
  1456. package/dist/dts/internal/opCodes/deferred.d.ts +2 -0
  1457. package/dist/dts/internal/opCodes/deferred.d.ts.map +1 -0
  1458. package/dist/dts/internal/opCodes/effect.d.ts +2 -0
  1459. package/dist/dts/internal/opCodes/effect.d.ts.map +1 -0
  1460. package/dist/dts/internal/opCodes/layer.d.ts +2 -0
  1461. package/dist/dts/internal/opCodes/layer.d.ts.map +1 -0
  1462. package/dist/dts/internal/opCodes/streamHaltStrategy.d.ts +2 -0
  1463. package/dist/dts/internal/opCodes/streamHaltStrategy.d.ts.map +1 -0
  1464. package/dist/dts/internal/option.d.ts +5 -0
  1465. package/dist/dts/internal/option.d.ts.map +1 -0
  1466. package/dist/dts/internal/pool.d.ts +2 -0
  1467. package/dist/dts/internal/pool.d.ts.map +1 -0
  1468. package/dist/dts/internal/pubsub.d.ts +2 -0
  1469. package/dist/dts/internal/pubsub.d.ts.map +1 -0
  1470. package/dist/dts/internal/query.d.ts +2 -0
  1471. package/dist/dts/internal/query.d.ts.map +1 -0
  1472. package/dist/dts/internal/queue.d.ts +2 -0
  1473. package/dist/dts/internal/queue.d.ts.map +1 -0
  1474. package/dist/dts/internal/random.d.ts +3 -0
  1475. package/dist/dts/internal/random.d.ts.map +1 -0
  1476. package/dist/dts/internal/rateLimiter.d.ts +2 -0
  1477. package/dist/dts/internal/rateLimiter.d.ts.map +1 -0
  1478. package/dist/dts/internal/rcMap.d.ts +2 -0
  1479. package/dist/dts/internal/rcMap.d.ts.map +1 -0
  1480. package/dist/dts/internal/rcRef.d.ts +2 -0
  1481. package/dist/dts/internal/rcRef.d.ts.map +1 -0
  1482. package/dist/dts/internal/redBlackTree/iterator.d.ts +2 -0
  1483. package/dist/dts/internal/redBlackTree/iterator.d.ts.map +1 -0
  1484. package/dist/dts/internal/redBlackTree/node.d.ts +14 -0
  1485. package/dist/dts/internal/redBlackTree/node.d.ts.map +1 -0
  1486. package/dist/dts/internal/redBlackTree.d.ts +2 -0
  1487. package/dist/dts/internal/redBlackTree.d.ts.map +1 -0
  1488. package/dist/dts/internal/redacted.d.ts +2 -0
  1489. package/dist/dts/internal/redacted.d.ts.map +1 -0
  1490. package/dist/dts/internal/ref.d.ts +2 -0
  1491. package/dist/dts/internal/ref.d.ts.map +1 -0
  1492. package/dist/dts/internal/reloadable.d.ts +2 -0
  1493. package/dist/dts/internal/reloadable.d.ts.map +1 -0
  1494. package/dist/dts/internal/request.d.ts +2 -0
  1495. package/dist/dts/internal/request.d.ts.map +1 -0
  1496. package/dist/dts/internal/resource.d.ts +2 -0
  1497. package/dist/dts/internal/resource.d.ts.map +1 -0
  1498. package/dist/dts/internal/ringBuffer.d.ts +2 -0
  1499. package/dist/dts/internal/ringBuffer.d.ts.map +1 -0
  1500. package/dist/dts/internal/runtime.d.ts +2 -0
  1501. package/dist/dts/internal/runtime.d.ts.map +1 -0
  1502. package/dist/dts/internal/runtimeFlags.d.ts +3 -0
  1503. package/dist/dts/internal/runtimeFlags.d.ts.map +1 -0
  1504. package/dist/dts/internal/runtimeFlagsPatch.d.ts +2 -0
  1505. package/dist/dts/internal/runtimeFlagsPatch.d.ts.map +1 -0
  1506. package/dist/dts/internal/schedule/decision.d.ts +2 -0
  1507. package/dist/dts/internal/schedule/decision.d.ts.map +1 -0
  1508. package/dist/dts/internal/schedule/interval.d.ts +2 -0
  1509. package/dist/dts/internal/schedule/interval.d.ts.map +1 -0
  1510. package/dist/dts/internal/schedule/intervals.d.ts +2 -0
  1511. package/dist/dts/internal/schedule/intervals.d.ts.map +1 -0
  1512. package/dist/dts/internal/schedule.d.ts +2 -0
  1513. package/dist/dts/internal/schedule.d.ts.map +1 -0
  1514. package/dist/dts/internal/schema/errors.d.ts +2 -0
  1515. package/dist/dts/internal/schema/errors.d.ts.map +1 -0
  1516. package/dist/dts/internal/schema/schemaId.d.ts +2 -0
  1517. package/dist/dts/internal/schema/schemaId.d.ts.map +1 -0
  1518. package/dist/dts/internal/schema/util.d.ts +2 -0
  1519. package/dist/dts/internal/schema/util.d.ts.map +1 -0
  1520. package/dist/dts/internal/scopedCache.d.ts +2 -0
  1521. package/dist/dts/internal/scopedCache.d.ts.map +1 -0
  1522. package/dist/dts/internal/scopedRef.d.ts +2 -0
  1523. package/dist/dts/internal/scopedRef.d.ts.map +1 -0
  1524. package/dist/dts/internal/secret.d.ts +2 -0
  1525. package/dist/dts/internal/secret.d.ts.map +1 -0
  1526. package/dist/dts/internal/singleShotGen.d.ts +2 -0
  1527. package/dist/dts/internal/singleShotGen.d.ts.map +1 -0
  1528. package/dist/dts/internal/sink.d.ts +2 -0
  1529. package/dist/dts/internal/sink.d.ts.map +1 -0
  1530. package/dist/dts/internal/stack.d.ts +2 -0
  1531. package/dist/dts/internal/stack.d.ts.map +1 -0
  1532. package/dist/dts/internal/stm/core.d.ts +2 -0
  1533. package/dist/dts/internal/stm/core.d.ts.map +1 -0
  1534. package/dist/dts/internal/stm/entry.d.ts +2 -0
  1535. package/dist/dts/internal/stm/entry.d.ts.map +1 -0
  1536. package/dist/dts/internal/stm/journal.d.ts +2 -0
  1537. package/dist/dts/internal/stm/journal.d.ts.map +1 -0
  1538. package/dist/dts/internal/stm/opCodes/stm.d.ts +2 -0
  1539. package/dist/dts/internal/stm/opCodes/stm.d.ts.map +1 -0
  1540. package/dist/dts/internal/stm/opCodes/stmState.d.ts +2 -0
  1541. package/dist/dts/internal/stm/opCodes/stmState.d.ts.map +1 -0
  1542. package/dist/dts/internal/stm/opCodes/strategy.d.ts +2 -0
  1543. package/dist/dts/internal/stm/opCodes/strategy.d.ts.map +1 -0
  1544. package/dist/dts/internal/stm/opCodes/tExit.d.ts +2 -0
  1545. package/dist/dts/internal/stm/opCodes/tExit.d.ts.map +1 -0
  1546. package/dist/dts/internal/stm/opCodes/tryCommit.d.ts +2 -0
  1547. package/dist/dts/internal/stm/opCodes/tryCommit.d.ts.map +1 -0
  1548. package/dist/dts/internal/stm/stm.d.ts +7 -0
  1549. package/dist/dts/internal/stm/stm.d.ts.map +1 -0
  1550. package/dist/dts/internal/stm/stmState.d.ts +2 -0
  1551. package/dist/dts/internal/stm/stmState.d.ts.map +1 -0
  1552. package/dist/dts/internal/stm/tArray.d.ts +2 -0
  1553. package/dist/dts/internal/stm/tArray.d.ts.map +1 -0
  1554. package/dist/dts/internal/stm/tDeferred.d.ts +2 -0
  1555. package/dist/dts/internal/stm/tDeferred.d.ts.map +1 -0
  1556. package/dist/dts/internal/stm/tExit.d.ts +5 -0
  1557. package/dist/dts/internal/stm/tExit.d.ts.map +1 -0
  1558. package/dist/dts/internal/stm/tMap.d.ts +2 -0
  1559. package/dist/dts/internal/stm/tMap.d.ts.map +1 -0
  1560. package/dist/dts/internal/stm/tPriorityQueue.d.ts +2 -0
  1561. package/dist/dts/internal/stm/tPriorityQueue.d.ts.map +1 -0
  1562. package/dist/dts/internal/stm/tPubSub.d.ts +2 -0
  1563. package/dist/dts/internal/stm/tPubSub.d.ts.map +1 -0
  1564. package/dist/dts/internal/stm/tQueue.d.ts +2 -0
  1565. package/dist/dts/internal/stm/tQueue.d.ts.map +1 -0
  1566. package/dist/dts/internal/stm/tRandom.d.ts +2 -0
  1567. package/dist/dts/internal/stm/tRandom.d.ts.map +1 -0
  1568. package/dist/dts/internal/stm/tReentrantLock.d.ts +2 -0
  1569. package/dist/dts/internal/stm/tReentrantLock.d.ts.map +1 -0
  1570. package/dist/dts/internal/stm/tRef.d.ts +4 -0
  1571. package/dist/dts/internal/stm/tRef.d.ts.map +1 -0
  1572. package/dist/dts/internal/stm/tSemaphore.d.ts +2 -0
  1573. package/dist/dts/internal/stm/tSemaphore.d.ts.map +1 -0
  1574. package/dist/dts/internal/stm/tSet.d.ts +2 -0
  1575. package/dist/dts/internal/stm/tSet.d.ts.map +1 -0
  1576. package/dist/dts/internal/stm/tSubscriptionRef.d.ts +2 -0
  1577. package/dist/dts/internal/stm/tSubscriptionRef.d.ts.map +1 -0
  1578. package/dist/dts/internal/stm/tryCommit.d.ts +2 -0
  1579. package/dist/dts/internal/stm/tryCommit.d.ts.map +1 -0
  1580. package/dist/dts/internal/stm/txnId.d.ts +2 -0
  1581. package/dist/dts/internal/stm/txnId.d.ts.map +1 -0
  1582. package/dist/dts/internal/stm/versioned.d.ts +2 -0
  1583. package/dist/dts/internal/stm/versioned.d.ts.map +1 -0
  1584. package/dist/dts/internal/stream/debounceState.d.ts +4 -0
  1585. package/dist/dts/internal/stream/debounceState.d.ts.map +1 -0
  1586. package/dist/dts/internal/stream/emit.d.ts +2 -0
  1587. package/dist/dts/internal/stream/emit.d.ts.map +1 -0
  1588. package/dist/dts/internal/stream/haltStrategy.d.ts +2 -0
  1589. package/dist/dts/internal/stream/haltStrategy.d.ts.map +1 -0
  1590. package/dist/dts/internal/stream/handoff.d.ts +2 -0
  1591. package/dist/dts/internal/stream/handoff.d.ts.map +1 -0
  1592. package/dist/dts/internal/stream/handoffSignal.d.ts +6 -0
  1593. package/dist/dts/internal/stream/handoffSignal.d.ts.map +1 -0
  1594. package/dist/dts/internal/stream/pull.d.ts +2 -0
  1595. package/dist/dts/internal/stream/pull.d.ts.map +1 -0
  1596. package/dist/dts/internal/stream/sinkEndReason.d.ts +2 -0
  1597. package/dist/dts/internal/stream/sinkEndReason.d.ts.map +1 -0
  1598. package/dist/dts/internal/stream/zipAllState.d.ts +2 -0
  1599. package/dist/dts/internal/stream/zipAllState.d.ts.map +1 -0
  1600. package/dist/dts/internal/stream/zipChunksState.d.ts +2 -0
  1601. package/dist/dts/internal/stream/zipChunksState.d.ts.map +1 -0
  1602. package/dist/dts/internal/stream.d.ts +29 -0
  1603. package/dist/dts/internal/stream.d.ts.map +1 -0
  1604. package/dist/dts/internal/string-utils.d.ts +7 -0
  1605. package/dist/dts/internal/string-utils.d.ts.map +1 -0
  1606. package/dist/dts/internal/subscriptionRef.d.ts +2 -0
  1607. package/dist/dts/internal/subscriptionRef.d.ts.map +1 -0
  1608. package/dist/dts/internal/supervisor/patch.d.ts +2 -0
  1609. package/dist/dts/internal/supervisor/patch.d.ts.map +1 -0
  1610. package/dist/dts/internal/supervisor.d.ts +2 -0
  1611. package/dist/dts/internal/supervisor.d.ts.map +1 -0
  1612. package/dist/dts/internal/synchronizedRef.d.ts +2 -0
  1613. package/dist/dts/internal/synchronizedRef.d.ts.map +1 -0
  1614. package/dist/dts/internal/take.d.ts +2 -0
  1615. package/dist/dts/internal/take.d.ts.map +1 -0
  1616. package/dist/dts/internal/testing/sleep.d.ts +2 -0
  1617. package/dist/dts/internal/testing/sleep.d.ts.map +1 -0
  1618. package/dist/dts/internal/testing/suspendedWarningData.d.ts +2 -0
  1619. package/dist/dts/internal/testing/suspendedWarningData.d.ts.map +1 -0
  1620. package/dist/dts/internal/testing/warningData.d.ts +2 -0
  1621. package/dist/dts/internal/testing/warningData.d.ts.map +1 -0
  1622. package/dist/dts/internal/tracer.d.ts +2 -0
  1623. package/dist/dts/internal/tracer.d.ts.map +1 -0
  1624. package/dist/dts/internal/trie.d.ts +2 -0
  1625. package/dist/dts/internal/trie.d.ts.map +1 -0
  1626. package/dist/dts/internal/version.d.ts +3 -0
  1627. package/dist/dts/internal/version.d.ts.map +1 -0
  1628. package/dist/esm/Arbitrary.js +798 -0
  1629. package/dist/esm/Arbitrary.js.map +1 -0
  1630. package/dist/esm/Array.js +2703 -0
  1631. package/dist/esm/Array.js.map +1 -0
  1632. package/dist/esm/BigDecimal.js +1087 -0
  1633. package/dist/esm/BigDecimal.js.map +1 -0
  1634. package/dist/esm/BigInt.js +548 -0
  1635. package/dist/esm/BigInt.js.map +1 -0
  1636. package/dist/esm/Boolean.js +240 -0
  1637. package/dist/esm/Boolean.js.map +1 -0
  1638. package/dist/esm/Brand.js +161 -0
  1639. package/dist/esm/Brand.js.map +1 -0
  1640. package/dist/esm/Cache.js +43 -0
  1641. package/dist/esm/Cache.js.map +1 -0
  1642. package/dist/esm/Cause.js +1004 -0
  1643. package/dist/esm/Cause.js.map +1 -0
  1644. package/dist/esm/Channel.js +887 -0
  1645. package/dist/esm/Channel.js.map +1 -0
  1646. package/dist/esm/ChildExecutorDecision.js +64 -0
  1647. package/dist/esm/ChildExecutorDecision.js.map +1 -0
  1648. package/dist/esm/Chunk.js +1083 -0
  1649. package/dist/esm/Chunk.js.map +1 -0
  1650. package/dist/esm/Clock.js +38 -0
  1651. package/dist/esm/Clock.js.map +1 -0
  1652. package/dist/esm/Config.js +321 -0
  1653. package/dist/esm/Config.js.map +1 -0
  1654. package/dist/esm/ConfigError.js +107 -0
  1655. package/dist/esm/ConfigError.js.map +1 -0
  1656. package/dist/esm/ConfigProvider.js +166 -0
  1657. package/dist/esm/ConfigProvider.js.map +1 -0
  1658. package/dist/esm/ConfigProviderPathPatch.js +30 -0
  1659. package/dist/esm/ConfigProviderPathPatch.js.map +1 -0
  1660. package/dist/esm/Console.js +118 -0
  1661. package/dist/esm/Console.js.map +1 -0
  1662. package/dist/esm/Context.js +360 -0
  1663. package/dist/esm/Context.js.map +1 -0
  1664. package/dist/esm/Cron.js +566 -0
  1665. package/dist/esm/Cron.js.map +1 -0
  1666. package/dist/esm/Data.js +305 -0
  1667. package/dist/esm/Data.js.map +1 -0
  1668. package/dist/esm/DateTime.js +1071 -0
  1669. package/dist/esm/DateTime.js.map +1 -0
  1670. package/dist/esm/DefaultServices.js +12 -0
  1671. package/dist/esm/DefaultServices.js.map +1 -0
  1672. package/dist/esm/Deferred.js +169 -0
  1673. package/dist/esm/Deferred.js.map +1 -0
  1674. package/dist/esm/Differ.js +132 -0
  1675. package/dist/esm/Differ.js.map +1 -0
  1676. package/dist/esm/Duration.js +702 -0
  1677. package/dist/esm/Duration.js.map +1 -0
  1678. package/dist/esm/Effect.js +10883 -0
  1679. package/dist/esm/Effect.js.map +1 -0
  1680. package/dist/esm/Effectable.js +49 -0
  1681. package/dist/esm/Effectable.js.map +1 -0
  1682. package/dist/esm/Either.js +688 -0
  1683. package/dist/esm/Either.js.map +1 -0
  1684. package/dist/esm/Encoding.js +136 -0
  1685. package/dist/esm/Encoding.js.map +1 -0
  1686. package/dist/esm/Equal.js +71 -0
  1687. package/dist/esm/Equal.js.map +1 -0
  1688. package/dist/esm/Equivalence.js +166 -0
  1689. package/dist/esm/Equivalence.js.map +1 -0
  1690. package/dist/esm/ExecutionPlan.js +99 -0
  1691. package/dist/esm/ExecutionPlan.js.map +1 -0
  1692. package/dist/esm/ExecutionStrategy.js +55 -0
  1693. package/dist/esm/ExecutionStrategy.js.map +1 -0
  1694. package/dist/esm/Exit.js +257 -0
  1695. package/dist/esm/Exit.js.map +1 -0
  1696. package/dist/esm/FastCheck.js +9 -0
  1697. package/dist/esm/FastCheck.js.map +1 -0
  1698. package/dist/esm/Fiber.js +350 -0
  1699. package/dist/esm/Fiber.js.map +1 -0
  1700. package/dist/esm/FiberHandle.js +316 -0
  1701. package/dist/esm/FiberHandle.js.map +1 -0
  1702. package/dist/esm/FiberId.js +115 -0
  1703. package/dist/esm/FiberId.js.map +1 -0
  1704. package/dist/esm/FiberMap.js +356 -0
  1705. package/dist/esm/FiberMap.js.map +1 -0
  1706. package/dist/esm/FiberRef.js +242 -0
  1707. package/dist/esm/FiberRef.js.map +1 -0
  1708. package/dist/esm/FiberRefs.js +92 -0
  1709. package/dist/esm/FiberRefs.js.map +1 -0
  1710. package/dist/esm/FiberRefsPatch.js +32 -0
  1711. package/dist/esm/FiberRefsPatch.js.map +1 -0
  1712. package/dist/esm/FiberSet.js +289 -0
  1713. package/dist/esm/FiberSet.js.map +1 -0
  1714. package/dist/esm/FiberStatus.js +52 -0
  1715. package/dist/esm/FiberStatus.js.map +1 -0
  1716. package/dist/esm/Function.js +467 -0
  1717. package/dist/esm/Function.js.map +1 -0
  1718. package/dist/esm/GlobalValue.js +52 -0
  1719. package/dist/esm/GlobalValue.js.map +1 -0
  1720. package/dist/esm/Graph.js +3019 -0
  1721. package/dist/esm/Graph.js.map +1 -0
  1722. package/dist/esm/GroupBy.js +39 -0
  1723. package/dist/esm/GroupBy.js.map +1 -0
  1724. package/dist/esm/HKT.js +2 -0
  1725. package/dist/esm/HKT.js.map +1 -0
  1726. package/dist/esm/Hash.js +166 -0
  1727. package/dist/esm/Hash.js.map +1 -0
  1728. package/dist/esm/HashMap.js +312 -0
  1729. package/dist/esm/HashMap.js.map +1 -0
  1730. package/dist/esm/HashRing.js +245 -0
  1731. package/dist/esm/HashRing.js.map +1 -0
  1732. package/dist/esm/HashSet.js +1253 -0
  1733. package/dist/esm/HashSet.js.map +1 -0
  1734. package/dist/esm/Inspectable.js +194 -0
  1735. package/dist/esm/Inspectable.js.map +1 -0
  1736. package/dist/esm/Iterable.js +987 -0
  1737. package/dist/esm/Iterable.js.map +1 -0
  1738. package/dist/esm/JSONSchema.js +715 -0
  1739. package/dist/esm/JSONSchema.js.map +1 -0
  1740. package/dist/esm/KeyedPool.js +76 -0
  1741. package/dist/esm/KeyedPool.js.map +1 -0
  1742. package/dist/esm/Layer.js +642 -0
  1743. package/dist/esm/Layer.js.map +1 -0
  1744. package/dist/esm/LayerMap.js +202 -0
  1745. package/dist/esm/LayerMap.js.map +1 -0
  1746. package/dist/esm/List.js +756 -0
  1747. package/dist/esm/List.js.map +1 -0
  1748. package/dist/esm/LogLevel.js +135 -0
  1749. package/dist/esm/LogLevel.js.map +1 -0
  1750. package/dist/esm/LogSpan.js +15 -0
  1751. package/dist/esm/LogSpan.js.map +1 -0
  1752. package/dist/esm/Logger.js +490 -0
  1753. package/dist/esm/Logger.js.map +1 -0
  1754. package/dist/esm/Mailbox.js +96 -0
  1755. package/dist/esm/Mailbox.js.map +1 -0
  1756. package/dist/esm/ManagedRuntime.js +42 -0
  1757. package/dist/esm/ManagedRuntime.js.map +1 -0
  1758. package/dist/esm/Match.js +828 -0
  1759. package/dist/esm/Match.js.map +1 -0
  1760. package/dist/esm/MergeDecision.js +35 -0
  1761. package/dist/esm/MergeDecision.js.map +1 -0
  1762. package/dist/esm/MergeState.js +58 -0
  1763. package/dist/esm/MergeState.js.map +1 -0
  1764. package/dist/esm/MergeStrategy.js +51 -0
  1765. package/dist/esm/MergeStrategy.js.map +1 -0
  1766. package/dist/esm/Metric.js +408 -0
  1767. package/dist/esm/Metric.js.map +1 -0
  1768. package/dist/esm/MetricBoundaries.js +33 -0
  1769. package/dist/esm/MetricBoundaries.js.map +1 -0
  1770. package/dist/esm/MetricHook.js +47 -0
  1771. package/dist/esm/MetricHook.js.map +1 -0
  1772. package/dist/esm/MetricKey.js +63 -0
  1773. package/dist/esm/MetricKey.js.map +1 -0
  1774. package/dist/esm/MetricKeyType.js +87 -0
  1775. package/dist/esm/MetricKeyType.js.map +1 -0
  1776. package/dist/esm/MetricLabel.js +17 -0
  1777. package/dist/esm/MetricLabel.js.map +1 -0
  1778. package/dist/esm/MetricPair.js +20 -0
  1779. package/dist/esm/MetricPair.js.map +1 -0
  1780. package/dist/esm/MetricPolling.js +59 -0
  1781. package/dist/esm/MetricPolling.js.map +1 -0
  1782. package/dist/esm/MetricRegistry.js +15 -0
  1783. package/dist/esm/MetricRegistry.js.map +1 -0
  1784. package/dist/esm/MetricState.js +87 -0
  1785. package/dist/esm/MetricState.js.map +1 -0
  1786. package/dist/esm/Micro.js +2528 -0
  1787. package/dist/esm/Micro.js.map +1 -0
  1788. package/dist/esm/ModuleVersion.js +17 -0
  1789. package/dist/esm/ModuleVersion.js.map +1 -0
  1790. package/dist/esm/MutableHashMap.js +299 -0
  1791. package/dist/esm/MutableHashMap.js.map +1 -0
  1792. package/dist/esm/MutableHashSet.js +511 -0
  1793. package/dist/esm/MutableHashSet.js.map +1 -0
  1794. package/dist/esm/MutableList.js +240 -0
  1795. package/dist/esm/MutableList.js.map +1 -0
  1796. package/dist/esm/MutableQueue.js +159 -0
  1797. package/dist/esm/MutableQueue.js.map +1 -0
  1798. package/dist/esm/MutableRef.js +127 -0
  1799. package/dist/esm/MutableRef.js.map +1 -0
  1800. package/dist/esm/NonEmptyIterable.js +16 -0
  1801. package/dist/esm/NonEmptyIterable.js.map +1 -0
  1802. package/dist/esm/Number.js +887 -0
  1803. package/dist/esm/Number.js.map +1 -0
  1804. package/dist/esm/Option.js +1785 -0
  1805. package/dist/esm/Option.js.map +1 -0
  1806. package/dist/esm/Order.js +252 -0
  1807. package/dist/esm/Order.js.map +1 -0
  1808. package/dist/esm/Ordering.js +72 -0
  1809. package/dist/esm/Ordering.js.map +1 -0
  1810. package/dist/esm/ParseResult.js +1556 -0
  1811. package/dist/esm/ParseResult.js.map +1 -0
  1812. package/dist/esm/PartitionedSemaphore.js +137 -0
  1813. package/dist/esm/PartitionedSemaphore.js.map +1 -0
  1814. package/dist/esm/Pipeable.js +62 -0
  1815. package/dist/esm/Pipeable.js.map +1 -0
  1816. package/dist/esm/Pool.js +100 -0
  1817. package/dist/esm/Pool.js.map +1 -0
  1818. package/dist/esm/Predicate.js +1117 -0
  1819. package/dist/esm/Predicate.js.map +1 -0
  1820. package/dist/esm/Pretty.js +174 -0
  1821. package/dist/esm/Pretty.js.map +1 -0
  1822. package/dist/esm/PrimaryKey.js +14 -0
  1823. package/dist/esm/PrimaryKey.js.map +1 -0
  1824. package/dist/esm/PubSub.js +120 -0
  1825. package/dist/esm/PubSub.js.map +1 -0
  1826. package/dist/esm/Queue.js +248 -0
  1827. package/dist/esm/Queue.js.map +1 -0
  1828. package/dist/esm/Random.js +138 -0
  1829. package/dist/esm/Random.js.map +1 -0
  1830. package/dist/esm/RateLimiter.js +77 -0
  1831. package/dist/esm/RateLimiter.js.map +1 -0
  1832. package/dist/esm/RcMap.js +69 -0
  1833. package/dist/esm/RcMap.js.map +1 -0
  1834. package/dist/esm/RcRef.js +51 -0
  1835. package/dist/esm/RcRef.js.map +1 -0
  1836. package/dist/esm/Readable.js +45 -0
  1837. package/dist/esm/Readable.js.map +1 -0
  1838. package/dist/esm/Record.js +846 -0
  1839. package/dist/esm/Record.js.map +1 -0
  1840. package/dist/esm/RedBlackTree.js +259 -0
  1841. package/dist/esm/RedBlackTree.js.map +1 -0
  1842. package/dist/esm/Redacted.js +93 -0
  1843. package/dist/esm/Redacted.js.map +1 -0
  1844. package/dist/esm/Ref.js +77 -0
  1845. package/dist/esm/Ref.js.map +1 -0
  1846. package/dist/esm/RegExp.js +37 -0
  1847. package/dist/esm/RegExp.js.map +1 -0
  1848. package/dist/esm/Reloadable.js +59 -0
  1849. package/dist/esm/Reloadable.js.map +1 -0
  1850. package/dist/esm/Request.js +140 -0
  1851. package/dist/esm/Request.js.map +1 -0
  1852. package/dist/esm/RequestBlock.js +35 -0
  1853. package/dist/esm/RequestBlock.js.map +1 -0
  1854. package/dist/esm/RequestResolver.js +175 -0
  1855. package/dist/esm/RequestResolver.js.map +1 -0
  1856. package/dist/esm/Resource.js +44 -0
  1857. package/dist/esm/Resource.js.map +1 -0
  1858. package/dist/esm/Runtime.js +181 -0
  1859. package/dist/esm/Runtime.js.map +1 -0
  1860. package/dist/esm/RuntimeFlags.js +251 -0
  1861. package/dist/esm/RuntimeFlags.js.map +1 -0
  1862. package/dist/esm/RuntimeFlagsPatch.js +134 -0
  1863. package/dist/esm/RuntimeFlagsPatch.js.map +1 -0
  1864. package/dist/esm/STM.js +1002 -0
  1865. package/dist/esm/STM.js.map +1 -0
  1866. package/dist/esm/Schedule.js +1595 -0
  1867. package/dist/esm/Schedule.js.map +1 -0
  1868. package/dist/esm/ScheduleDecision.js +32 -0
  1869. package/dist/esm/ScheduleDecision.js.map +1 -0
  1870. package/dist/esm/ScheduleInterval.js +100 -0
  1871. package/dist/esm/ScheduleInterval.js.map +1 -0
  1872. package/dist/esm/ScheduleIntervals.js +78 -0
  1873. package/dist/esm/ScheduleIntervals.js.map +1 -0
  1874. package/dist/esm/Scheduler.js +289 -0
  1875. package/dist/esm/Scheduler.js.map +1 -0
  1876. package/dist/esm/Schema.js +6035 -0
  1877. package/dist/esm/Schema.js.map +1 -0
  1878. package/dist/esm/SchemaAST.js +2485 -0
  1879. package/dist/esm/SchemaAST.js.map +1 -0
  1880. package/dist/esm/Scope.js +94 -0
  1881. package/dist/esm/Scope.js.map +1 -0
  1882. package/dist/esm/ScopedCache.js +24 -0
  1883. package/dist/esm/ScopedCache.js.map +1 -0
  1884. package/dist/esm/ScopedRef.js +42 -0
  1885. package/dist/esm/ScopedRef.js.map +1 -0
  1886. package/dist/esm/Secret.js +44 -0
  1887. package/dist/esm/Secret.js.map +1 -0
  1888. package/dist/esm/SingleProducerAsyncInput.js +7 -0
  1889. package/dist/esm/SingleProducerAsyncInput.js.map +1 -0
  1890. package/dist/esm/Sink.js +864 -0
  1891. package/dist/esm/Sink.js.map +1 -0
  1892. package/dist/esm/SortedMap.js +169 -0
  1893. package/dist/esm/SortedMap.js.map +1 -0
  1894. package/dist/esm/SortedSet.js +237 -0
  1895. package/dist/esm/SortedSet.js.map +1 -0
  1896. package/dist/esm/Stream.js +4192 -0
  1897. package/dist/esm/Stream.js.map +1 -0
  1898. package/dist/esm/StreamEmit.js +2 -0
  1899. package/dist/esm/StreamEmit.js.map +1 -0
  1900. package/dist/esm/StreamHaltStrategy.js +57 -0
  1901. package/dist/esm/StreamHaltStrategy.js.map +1 -0
  1902. package/dist/esm/Streamable.js +36 -0
  1903. package/dist/esm/Streamable.js.map +1 -0
  1904. package/dist/esm/String.js +635 -0
  1905. package/dist/esm/String.js.map +1 -0
  1906. package/dist/esm/Struct.js +191 -0
  1907. package/dist/esm/Struct.js.map +1 -0
  1908. package/dist/esm/Subscribable.js +56 -0
  1909. package/dist/esm/Subscribable.js.map +1 -0
  1910. package/dist/esm/SubscriptionRef.js +116 -0
  1911. package/dist/esm/SubscriptionRef.js.map +1 -0
  1912. package/dist/esm/Supervisor.js +107 -0
  1913. package/dist/esm/Supervisor.js.map +1 -0
  1914. package/dist/esm/Symbol.js +27 -0
  1915. package/dist/esm/Symbol.js.map +1 -0
  1916. package/dist/esm/SynchronizedRef.js +119 -0
  1917. package/dist/esm/SynchronizedRef.js.map +1 -0
  1918. package/dist/esm/TArray.js +306 -0
  1919. package/dist/esm/TArray.js.map +1 -0
  1920. package/dist/esm/TDeferred.js +39 -0
  1921. package/dist/esm/TDeferred.js.map +1 -0
  1922. package/dist/esm/TMap.js +279 -0
  1923. package/dist/esm/TMap.js.map +1 -0
  1924. package/dist/esm/TPriorityQueue.js +136 -0
  1925. package/dist/esm/TPriorityQueue.js.map +1 -0
  1926. package/dist/esm/TPubSub.js +131 -0
  1927. package/dist/esm/TPubSub.js.map +1 -0
  1928. package/dist/esm/TQueue.js +229 -0
  1929. package/dist/esm/TQueue.js.map +1 -0
  1930. package/dist/esm/TRandom.js +65 -0
  1931. package/dist/esm/TRandom.js.map +1 -0
  1932. package/dist/esm/TReentrantLock.js +142 -0
  1933. package/dist/esm/TReentrantLock.js.map +1 -0
  1934. package/dist/esm/TRef.js +75 -0
  1935. package/dist/esm/TRef.js.map +1 -0
  1936. package/dist/esm/TSemaphore.js +65 -0
  1937. package/dist/esm/TSemaphore.js.map +1 -0
  1938. package/dist/esm/TSet.js +201 -0
  1939. package/dist/esm/TSet.js.map +1 -0
  1940. package/dist/esm/TSubscriptionRef.js +87 -0
  1941. package/dist/esm/TSubscriptionRef.js.map +1 -0
  1942. package/dist/esm/Take.js +148 -0
  1943. package/dist/esm/Take.js.map +1 -0
  1944. package/dist/esm/TestAnnotation.js +94 -0
  1945. package/dist/esm/TestAnnotation.js.map +1 -0
  1946. package/dist/esm/TestAnnotationMap.js +80 -0
  1947. package/dist/esm/TestAnnotationMap.js.map +1 -0
  1948. package/dist/esm/TestAnnotations.js +61 -0
  1949. package/dist/esm/TestAnnotations.js.map +1 -0
  1950. package/dist/esm/TestClock.js +354 -0
  1951. package/dist/esm/TestClock.js.map +1 -0
  1952. package/dist/esm/TestConfig.js +13 -0
  1953. package/dist/esm/TestConfig.js.map +1 -0
  1954. package/dist/esm/TestContext.js +21 -0
  1955. package/dist/esm/TestContext.js.map +1 -0
  1956. package/dist/esm/TestLive.js +30 -0
  1957. package/dist/esm/TestLive.js.map +1 -0
  1958. package/dist/esm/TestServices.js +230 -0
  1959. package/dist/esm/TestServices.js.map +1 -0
  1960. package/dist/esm/TestSized.js +36 -0
  1961. package/dist/esm/TestSized.js.map +1 -0
  1962. package/dist/esm/Tracer.js +37 -0
  1963. package/dist/esm/Tracer.js.map +1 -0
  1964. package/dist/esm/Trie.js +716 -0
  1965. package/dist/esm/Trie.js.map +1 -0
  1966. package/dist/esm/Tuple.js +235 -0
  1967. package/dist/esm/Tuple.js.map +1 -0
  1968. package/dist/esm/Types.js +7 -0
  1969. package/dist/esm/Types.js.map +1 -0
  1970. package/dist/esm/Unify.js +9 -0
  1971. package/dist/esm/Unify.js.map +1 -0
  1972. package/dist/esm/UpstreamPullRequest.js +51 -0
  1973. package/dist/esm/UpstreamPullRequest.js.map +1 -0
  1974. package/dist/esm/UpstreamPullStrategy.js +51 -0
  1975. package/dist/esm/UpstreamPullStrategy.js.map +1 -0
  1976. package/dist/esm/Utils.js +357 -0
  1977. package/dist/esm/Utils.js.map +1 -0
  1978. package/dist/esm/index.js +1385 -0
  1979. package/dist/esm/index.js.map +1 -0
  1980. package/dist/esm/internal/array.js +6 -0
  1981. package/dist/esm/internal/array.js.map +1 -0
  1982. package/dist/esm/internal/blockedRequests.js +341 -0
  1983. package/dist/esm/internal/blockedRequests.js.map +1 -0
  1984. package/dist/esm/internal/cache.js +480 -0
  1985. package/dist/esm/internal/cache.js.map +1 -0
  1986. package/dist/esm/internal/cause.js +824 -0
  1987. package/dist/esm/internal/cause.js.map +1 -0
  1988. package/dist/esm/internal/channel/channelExecutor.js +688 -0
  1989. package/dist/esm/internal/channel/channelExecutor.js.map +1 -0
  1990. package/dist/esm/internal/channel/channelState.js +59 -0
  1991. package/dist/esm/internal/channel/channelState.js.map +1 -0
  1992. package/dist/esm/internal/channel/childExecutorDecision.js +60 -0
  1993. package/dist/esm/internal/channel/childExecutorDecision.js.map +1 -0
  1994. package/dist/esm/internal/channel/continuation.js +48 -0
  1995. package/dist/esm/internal/channel/continuation.js.map +1 -0
  1996. package/dist/esm/internal/channel/mergeDecision.js +49 -0
  1997. package/dist/esm/internal/channel/mergeDecision.js.map +1 -0
  1998. package/dist/esm/internal/channel/mergeState.js +69 -0
  1999. package/dist/esm/internal/channel/mergeState.js.map +1 -0
  2000. package/dist/esm/internal/channel/mergeStrategy.js +46 -0
  2001. package/dist/esm/internal/channel/mergeStrategy.js.map +1 -0
  2002. package/dist/esm/internal/channel/singleProducerAsyncInput.js +163 -0
  2003. package/dist/esm/internal/channel/singleProducerAsyncInput.js.map +1 -0
  2004. package/dist/esm/internal/channel/subexecutor.js +152 -0
  2005. package/dist/esm/internal/channel/subexecutor.js.map +1 -0
  2006. package/dist/esm/internal/channel/upstreamPullRequest.js +52 -0
  2007. package/dist/esm/internal/channel/upstreamPullRequest.js.map +1 -0
  2008. package/dist/esm/internal/channel/upstreamPullStrategy.js +52 -0
  2009. package/dist/esm/internal/channel/upstreamPullStrategy.js.map +1 -0
  2010. package/dist/esm/internal/channel.js +683 -0
  2011. package/dist/esm/internal/channel.js.map +1 -0
  2012. package/dist/esm/internal/clock.js +77 -0
  2013. package/dist/esm/internal/clock.js.map +1 -0
  2014. package/dist/esm/internal/completedRequestMap.js +5 -0
  2015. package/dist/esm/internal/completedRequestMap.js.map +1 -0
  2016. package/dist/esm/internal/concurrency.js +28 -0
  2017. package/dist/esm/internal/concurrency.js.map +1 -0
  2018. package/dist/esm/internal/config.js +363 -0
  2019. package/dist/esm/internal/config.js.map +1 -0
  2020. package/dist/esm/internal/configError.js +263 -0
  2021. package/dist/esm/internal/configError.js.map +1 -0
  2022. package/dist/esm/internal/configProvider/pathPatch.js +76 -0
  2023. package/dist/esm/internal/configProvider/pathPatch.js.map +1 -0
  2024. package/dist/esm/internal/configProvider.js +425 -0
  2025. package/dist/esm/internal/configProvider.js.map +1 -0
  2026. package/dist/esm/internal/console.js +54 -0
  2027. package/dist/esm/internal/console.js.map +1 -0
  2028. package/dist/esm/internal/context.js +253 -0
  2029. package/dist/esm/internal/context.js.map +1 -0
  2030. package/dist/esm/internal/core-effect.js +811 -0
  2031. package/dist/esm/internal/core-effect.js.map +1 -0
  2032. package/dist/esm/internal/core-stream.js +236 -0
  2033. package/dist/esm/internal/core-stream.js.map +1 -0
  2034. package/dist/esm/internal/core.js +1610 -0
  2035. package/dist/esm/internal/core.js.map +1 -0
  2036. package/dist/esm/internal/data.js +29 -0
  2037. package/dist/esm/internal/data.js.map +1 -0
  2038. package/dist/esm/internal/dataSource.js +93 -0
  2039. package/dist/esm/internal/dataSource.js.map +1 -0
  2040. package/dist/esm/internal/dateTime.js +796 -0
  2041. package/dist/esm/internal/dateTime.js.map +1 -0
  2042. package/dist/esm/internal/defaultServices/console.js +92 -0
  2043. package/dist/esm/internal/defaultServices/console.js.map +1 -0
  2044. package/dist/esm/internal/defaultServices.js +73 -0
  2045. package/dist/esm/internal/defaultServices.js.map +1 -0
  2046. package/dist/esm/internal/deferred.js +27 -0
  2047. package/dist/esm/internal/deferred.js.map +1 -0
  2048. package/dist/esm/internal/differ/chunkPatch.js +130 -0
  2049. package/dist/esm/internal/differ/chunkPatch.js.map +1 -0
  2050. package/dist/esm/internal/differ/contextPatch.js +143 -0
  2051. package/dist/esm/internal/differ/contextPatch.js.map +1 -0
  2052. package/dist/esm/internal/differ/hashMapPatch.js +130 -0
  2053. package/dist/esm/internal/differ/hashMapPatch.js.map +1 -0
  2054. package/dist/esm/internal/differ/hashSetPatch.js +101 -0
  2055. package/dist/esm/internal/differ/hashSetPatch.js.map +1 -0
  2056. package/dist/esm/internal/differ/orPatch.js +170 -0
  2057. package/dist/esm/internal/differ/orPatch.js.map +1 -0
  2058. package/dist/esm/internal/differ/readonlyArrayPatch.js +129 -0
  2059. package/dist/esm/internal/differ/readonlyArrayPatch.js.map +1 -0
  2060. package/dist/esm/internal/differ.js +134 -0
  2061. package/dist/esm/internal/differ.js.map +1 -0
  2062. package/dist/esm/internal/doNotation.js +16 -0
  2063. package/dist/esm/internal/doNotation.js.map +1 -0
  2064. package/dist/esm/internal/effect/circular.js +402 -0
  2065. package/dist/esm/internal/effect/circular.js.map +1 -0
  2066. package/dist/esm/internal/effectable.js +113 -0
  2067. package/dist/esm/internal/effectable.js.map +1 -0
  2068. package/dist/esm/internal/either.js +85 -0
  2069. package/dist/esm/internal/either.js.map +1 -0
  2070. package/dist/esm/internal/encoding/base64.js +71 -0
  2071. package/dist/esm/internal/encoding/base64.js.map +1 -0
  2072. package/dist/esm/internal/encoding/base64Url.js +21 -0
  2073. package/dist/esm/internal/encoding/base64Url.js.map +1 -0
  2074. package/dist/esm/internal/encoding/common.js +38 -0
  2075. package/dist/esm/internal/encoding/common.js.map +1 -0
  2076. package/dist/esm/internal/encoding/hex.js +48 -0
  2077. package/dist/esm/internal/encoding/hex.js.map +1 -0
  2078. package/dist/esm/internal/errors.js +6 -0
  2079. package/dist/esm/internal/errors.js.map +1 -0
  2080. package/dist/esm/internal/executionPlan.js +59 -0
  2081. package/dist/esm/internal/executionPlan.js.map +1 -0
  2082. package/dist/esm/internal/executionStrategy.js +44 -0
  2083. package/dist/esm/internal/executionStrategy.js.map +1 -0
  2084. package/dist/esm/internal/fiber.js +253 -0
  2085. package/dist/esm/internal/fiber.js.map +1 -0
  2086. package/dist/esm/internal/fiberId.js +219 -0
  2087. package/dist/esm/internal/fiberId.js.map +1 -0
  2088. package/dist/esm/internal/fiberMessage.js +28 -0
  2089. package/dist/esm/internal/fiberMessage.js.map +1 -0
  2090. package/dist/esm/internal/fiberRefs/patch.js +107 -0
  2091. package/dist/esm/internal/fiberRefs/patch.js.map +1 -0
  2092. package/dist/esm/internal/fiberRefs.js +189 -0
  2093. package/dist/esm/internal/fiberRefs.js.map +1 -0
  2094. package/dist/esm/internal/fiberRuntime.js +2148 -0
  2095. package/dist/esm/internal/fiberRuntime.js.map +1 -0
  2096. package/dist/esm/internal/fiberScope.js +44 -0
  2097. package/dist/esm/internal/fiberScope.js.map +1 -0
  2098. package/dist/esm/internal/fiberStatus.js +72 -0
  2099. package/dist/esm/internal/fiberStatus.js.map +1 -0
  2100. package/dist/esm/internal/groupBy.js +213 -0
  2101. package/dist/esm/internal/groupBy.js.map +1 -0
  2102. package/dist/esm/internal/hashMap/array.js +48 -0
  2103. package/dist/esm/internal/hashMap/array.js.map +1 -0
  2104. package/dist/esm/internal/hashMap/bitwise.js +29 -0
  2105. package/dist/esm/internal/hashMap/bitwise.js.map +1 -0
  2106. package/dist/esm/internal/hashMap/config.js +11 -0
  2107. package/dist/esm/internal/hashMap/config.js.map +1 -0
  2108. package/dist/esm/internal/hashMap/keySet.js +6 -0
  2109. package/dist/esm/internal/hashMap/keySet.js.map +1 -0
  2110. package/dist/esm/internal/hashMap/node.js +253 -0
  2111. package/dist/esm/internal/hashMap/node.js.map +1 -0
  2112. package/dist/esm/internal/hashMap.js +360 -0
  2113. package/dist/esm/internal/hashMap.js.map +1 -0
  2114. package/dist/esm/internal/hashSet.js +182 -0
  2115. package/dist/esm/internal/hashSet.js.map +1 -0
  2116. package/dist/esm/internal/keyedPool.js +159 -0
  2117. package/dist/esm/internal/keyedPool.js.map +1 -0
  2118. package/dist/esm/internal/layer/circular.js +63 -0
  2119. package/dist/esm/internal/layer/circular.js.map +1 -0
  2120. package/dist/esm/internal/layer.js +552 -0
  2121. package/dist/esm/internal/layer.js.map +1 -0
  2122. package/dist/esm/internal/logSpan.js +17 -0
  2123. package/dist/esm/internal/logSpan.js.map +1 -0
  2124. package/dist/esm/internal/logger-circular.js +19 -0
  2125. package/dist/esm/internal/logger-circular.js.map +1 -0
  2126. package/dist/esm/internal/logger.js +367 -0
  2127. package/dist/esm/internal/logger.js.map +1 -0
  2128. package/dist/esm/internal/mailbox.js +450 -0
  2129. package/dist/esm/internal/mailbox.js.map +1 -0
  2130. package/dist/esm/internal/managedRuntime/circular.js +4 -0
  2131. package/dist/esm/internal/managedRuntime/circular.js.map +1 -0
  2132. package/dist/esm/internal/managedRuntime.js +86 -0
  2133. package/dist/esm/internal/managedRuntime.js.map +1 -0
  2134. package/dist/esm/internal/matcher.js +291 -0
  2135. package/dist/esm/internal/matcher.js.map +1 -0
  2136. package/dist/esm/internal/metric/boundaries.js +42 -0
  2137. package/dist/esm/internal/metric/boundaries.js.map +1 -0
  2138. package/dist/esm/internal/metric/hook.js +375 -0
  2139. package/dist/esm/internal/metric/hook.js.map +1 -0
  2140. package/dist/esm/internal/metric/key.js +60 -0
  2141. package/dist/esm/internal/metric/key.js.map +1 -0
  2142. package/dist/esm/internal/metric/keyType.js +169 -0
  2143. package/dist/esm/internal/metric/keyType.js.map +1 -0
  2144. package/dist/esm/internal/metric/label.js +36 -0
  2145. package/dist/esm/internal/metric/label.js.map +1 -0
  2146. package/dist/esm/internal/metric/pair.js +32 -0
  2147. package/dist/esm/internal/metric/pair.js.map +1 -0
  2148. package/dist/esm/internal/metric/polling.js +69 -0
  2149. package/dist/esm/internal/metric/polling.js.map +1 -0
  2150. package/dist/esm/internal/metric/registry.js +105 -0
  2151. package/dist/esm/internal/metric/registry.js.map +1 -0
  2152. package/dist/esm/internal/metric/state.js +181 -0
  2153. package/dist/esm/internal/metric/state.js.map +1 -0
  2154. package/dist/esm/internal/metric.js +181 -0
  2155. package/dist/esm/internal/metric.js.map +1 -0
  2156. package/dist/esm/internal/opCodes/cause.js +13 -0
  2157. package/dist/esm/internal/opCodes/cause.js.map +1 -0
  2158. package/dist/esm/internal/opCodes/channel.js +29 -0
  2159. package/dist/esm/internal/opCodes/channel.js.map +1 -0
  2160. package/dist/esm/internal/opCodes/channelChildExecutorDecision.js +7 -0
  2161. package/dist/esm/internal/opCodes/channelChildExecutorDecision.js.map +1 -0
  2162. package/dist/esm/internal/opCodes/channelMergeDecision.js +5 -0
  2163. package/dist/esm/internal/opCodes/channelMergeDecision.js.map +1 -0
  2164. package/dist/esm/internal/opCodes/channelMergeState.js +7 -0
  2165. package/dist/esm/internal/opCodes/channelMergeState.js.map +1 -0
  2166. package/dist/esm/internal/opCodes/channelMergeStrategy.js +5 -0
  2167. package/dist/esm/internal/opCodes/channelMergeStrategy.js.map +1 -0
  2168. package/dist/esm/internal/opCodes/channelState.js +9 -0
  2169. package/dist/esm/internal/opCodes/channelState.js.map +1 -0
  2170. package/dist/esm/internal/opCodes/channelUpstreamPullRequest.js +5 -0
  2171. package/dist/esm/internal/opCodes/channelUpstreamPullRequest.js.map +1 -0
  2172. package/dist/esm/internal/opCodes/channelUpstreamPullStrategy.js +5 -0
  2173. package/dist/esm/internal/opCodes/channelUpstreamPullStrategy.js.map +1 -0
  2174. package/dist/esm/internal/opCodes/config.js +23 -0
  2175. package/dist/esm/internal/opCodes/config.js.map +1 -0
  2176. package/dist/esm/internal/opCodes/configError.js +13 -0
  2177. package/dist/esm/internal/opCodes/configError.js.map +1 -0
  2178. package/dist/esm/internal/opCodes/continuation.js +5 -0
  2179. package/dist/esm/internal/opCodes/continuation.js.map +1 -0
  2180. package/dist/esm/internal/opCodes/deferred.js +5 -0
  2181. package/dist/esm/internal/opCodes/deferred.js.map +1 -0
  2182. package/dist/esm/internal/opCodes/effect.js +31 -0
  2183. package/dist/esm/internal/opCodes/effect.js.map +1 -0
  2184. package/dist/esm/internal/opCodes/layer.js +21 -0
  2185. package/dist/esm/internal/opCodes/layer.js.map +1 -0
  2186. package/dist/esm/internal/opCodes/streamHaltStrategy.js +9 -0
  2187. package/dist/esm/internal/opCodes/streamHaltStrategy.js.map +1 -0
  2188. package/dist/esm/internal/option.js +70 -0
  2189. package/dist/esm/internal/option.js.map +1 -0
  2190. package/dist/esm/internal/pool.js +276 -0
  2191. package/dist/esm/internal/pool.js.map +1 -0
  2192. package/dist/esm/internal/pubsub.js +1263 -0
  2193. package/dist/esm/internal/pubsub.js.map +1 -0
  2194. package/dist/esm/internal/query.js +93 -0
  2195. package/dist/esm/internal/query.js.map +1 -0
  2196. package/dist/esm/internal/queue.js +486 -0
  2197. package/dist/esm/internal/queue.js.map +1 -0
  2198. package/dist/esm/internal/random.js +119 -0
  2199. package/dist/esm/internal/random.js.map +1 -0
  2200. package/dist/esm/internal/rateLimiter.js +43 -0
  2201. package/dist/esm/internal/rateLimiter.js.map +1 -0
  2202. package/dist/esm/internal/rcMap.js +173 -0
  2203. package/dist/esm/internal/rcMap.js.map +1 -0
  2204. package/dist/esm/internal/rcRef.js +129 -0
  2205. package/dist/esm/internal/rcRef.js.map +1 -0
  2206. package/dist/esm/internal/redBlackTree/iterator.js +191 -0
  2207. package/dist/esm/internal/redBlackTree/iterator.js.map +1 -0
  2208. package/dist/esm/internal/redBlackTree/node.js +50 -0
  2209. package/dist/esm/internal/redBlackTree/node.js.map +1 -0
  2210. package/dist/esm/internal/redBlackTree.js +1069 -0
  2211. package/dist/esm/internal/redBlackTree.js.map +1 -0
  2212. package/dist/esm/internal/redacted.js +56 -0
  2213. package/dist/esm/internal/redacted.js.map +1 -0
  2214. package/dist/esm/internal/ref.js +110 -0
  2215. package/dist/esm/internal/ref.js.map +1 -0
  2216. package/dist/esm/internal/reloadable.js +42 -0
  2217. package/dist/esm/internal/reloadable.js.map +1 -0
  2218. package/dist/esm/internal/request.js +91 -0
  2219. package/dist/esm/internal/request.js.map +1 -0
  2220. package/dist/esm/internal/resource.js +38 -0
  2221. package/dist/esm/internal/resource.js.map +1 -0
  2222. package/dist/esm/internal/ringBuffer.js +56 -0
  2223. package/dist/esm/internal/ringBuffer.js.map +1 -0
  2224. package/dist/esm/internal/runtime.js +307 -0
  2225. package/dist/esm/internal/runtime.js.map +1 -0
  2226. package/dist/esm/internal/runtimeFlags.js +107 -0
  2227. package/dist/esm/internal/runtimeFlags.js.map +1 -0
  2228. package/dist/esm/internal/runtimeFlagsPatch.js +38 -0
  2229. package/dist/esm/internal/runtimeFlagsPatch.js.map +1 -0
  2230. package/dist/esm/internal/schedule/decision.js +33 -0
  2231. package/dist/esm/internal/schedule/decision.js.map +1 -0
  2232. package/dist/esm/internal/schedule/interval.js +70 -0
  2233. package/dist/esm/internal/schedule/interval.js.map +1 -0
  2234. package/dist/esm/internal/schedule/intervals.js +122 -0
  2235. package/dist/esm/internal/schedule/intervals.js.map +1 -0
  2236. package/dist/esm/internal/schedule.js +832 -0
  2237. package/dist/esm/internal/schedule.js.map +1 -0
  2238. package/dist/esm/internal/schema/errors.js +86 -0
  2239. package/dist/esm/internal/schema/errors.js.map +1 -0
  2240. package/dist/esm/internal/schema/schemaId.js +43 -0
  2241. package/dist/esm/internal/schema/schemaId.js.map +1 -0
  2242. package/dist/esm/internal/schema/util.js +35 -0
  2243. package/dist/esm/internal/schema/util.js.map +1 -0
  2244. package/dist/esm/internal/scopedCache.js +382 -0
  2245. package/dist/esm/internal/scopedCache.js.map +1 -0
  2246. package/dist/esm/internal/scopedRef.js +43 -0
  2247. package/dist/esm/internal/scopedRef.js.map +1 -0
  2248. package/dist/esm/internal/secret.js +77 -0
  2249. package/dist/esm/internal/secret.js.map +1 -0
  2250. package/dist/esm/internal/singleShotGen.js +30 -0
  2251. package/dist/esm/internal/singleShotGen.js.map +1 -0
  2252. package/dist/esm/internal/sink.js +801 -0
  2253. package/dist/esm/internal/sink.js.map +1 -0
  2254. package/dist/esm/internal/stack.js +5 -0
  2255. package/dist/esm/internal/stack.js.map +1 -0
  2256. package/dist/esm/internal/stm/core.js +501 -0
  2257. package/dist/esm/internal/stm/core.js.map +1 -0
  2258. package/dist/esm/internal/stm/entry.js +42 -0
  2259. package/dist/esm/internal/stm/entry.js.map +1 -0
  2260. package/dist/esm/internal/stm/journal.js +89 -0
  2261. package/dist/esm/internal/stm/journal.js.map +1 -0
  2262. package/dist/esm/internal/stm/opCodes/stm.js +25 -0
  2263. package/dist/esm/internal/stm/opCodes/stm.js.map +1 -0
  2264. package/dist/esm/internal/stm/opCodes/stmState.js +7 -0
  2265. package/dist/esm/internal/stm/opCodes/stmState.js.map +1 -0
  2266. package/dist/esm/internal/stm/opCodes/strategy.js +7 -0
  2267. package/dist/esm/internal/stm/opCodes/strategy.js.map +1 -0
  2268. package/dist/esm/internal/stm/opCodes/tExit.js +11 -0
  2269. package/dist/esm/internal/stm/opCodes/tExit.js.map +1 -0
  2270. package/dist/esm/internal/stm/opCodes/tryCommit.js +5 -0
  2271. package/dist/esm/internal/stm/opCodes/tryCommit.js.map +1 -0
  2272. package/dist/esm/internal/stm/stm.js +478 -0
  2273. package/dist/esm/internal/stm/stm.js.map +1 -0
  2274. package/dist/esm/internal/stm/stmState.js +89 -0
  2275. package/dist/esm/internal/stm/stmState.js.map +1 -0
  2276. package/dist/esm/internal/stm/tArray.js +243 -0
  2277. package/dist/esm/internal/stm/tArray.js.map +1 -0
  2278. package/dist/esm/internal/stm/tDeferred.js +41 -0
  2279. package/dist/esm/internal/stm/tDeferred.js.map +1 -0
  2280. package/dist/esm/internal/stm/tExit.js +101 -0
  2281. package/dist/esm/internal/stm/tExit.js.map +1 -0
  2282. package/dist/esm/internal/stm/tMap.js +430 -0
  2283. package/dist/esm/internal/stm/tMap.js.map +1 -0
  2284. package/dist/esm/internal/stm/tPriorityQueue.js +143 -0
  2285. package/dist/esm/internal/stm/tPriorityQueue.js.map +1 -0
  2286. package/dist/esm/internal/stm/tPubSub.js +376 -0
  2287. package/dist/esm/internal/stm/tPubSub.js.map +1 -0
  2288. package/dist/esm/internal/stm/tQueue.js +258 -0
  2289. package/dist/esm/internal/stm/tQueue.js.map +1 -0
  2290. package/dist/esm/internal/stm/tRandom.js +82 -0
  2291. package/dist/esm/internal/stm/tRandom.js.map +1 -0
  2292. package/dist/esm/internal/stm/tReentrantLock.js +192 -0
  2293. package/dist/esm/internal/stm/tReentrantLock.js.map +1 -0
  2294. package/dist/esm/internal/stm/tRef.js +100 -0
  2295. package/dist/esm/internal/stm/tRef.js.map +1 -0
  2296. package/dist/esm/internal/stm/tSemaphore.js +59 -0
  2297. package/dist/esm/internal/stm/tSemaphore.js.map +1 -0
  2298. package/dist/esm/internal/stm/tSet.js +88 -0
  2299. package/dist/esm/internal/stm/tSet.js.map +1 -0
  2300. package/dist/esm/internal/stm/tSubscriptionRef.js +166 -0
  2301. package/dist/esm/internal/stm/tSubscriptionRef.js.map +1 -0
  2302. package/dist/esm/internal/stm/tryCommit.js +16 -0
  2303. package/dist/esm/internal/stm/tryCommit.js.map +1 -0
  2304. package/dist/esm/internal/stm/txnId.js +11 -0
  2305. package/dist/esm/internal/stm/txnId.js.map +1 -0
  2306. package/dist/esm/internal/stm/versioned.js +8 -0
  2307. package/dist/esm/internal/stm/versioned.js.map +1 -0
  2308. package/dist/esm/internal/stream/debounceState.js +21 -0
  2309. package/dist/esm/internal/stream/debounceState.js.map +1 -0
  2310. package/dist/esm/internal/stream/emit.js +120 -0
  2311. package/dist/esm/internal/stream/emit.js.map +1 -0
  2312. package/dist/esm/internal/stream/haltStrategy.js +63 -0
  2313. package/dist/esm/internal/stream/haltStrategy.js.map +1 -0
  2314. package/dist/esm/internal/stream/handoff.js +55 -0
  2315. package/dist/esm/internal/stream/handoff.js.map +1 -0
  2316. package/dist/esm/internal/stream/handoffSignal.js +22 -0
  2317. package/dist/esm/internal/stream/handoffSignal.js.map +1 -0
  2318. package/dist/esm/internal/stream/pull.js +20 -0
  2319. package/dist/esm/internal/stream/pull.js.map +1 -0
  2320. package/dist/esm/internal/stream/sinkEndReason.js +13 -0
  2321. package/dist/esm/internal/stream/sinkEndReason.js.map +1 -0
  2322. package/dist/esm/internal/stream/zipAllState.js +33 -0
  2323. package/dist/esm/internal/stream/zipAllState.js.map +1 -0
  2324. package/dist/esm/internal/stream/zipChunksState.js +21 -0
  2325. package/dist/esm/internal/stream/zipChunksState.js.map +1 -0
  2326. package/dist/esm/internal/stream.js +2867 -0
  2327. package/dist/esm/internal/stream.js.map +1 -0
  2328. package/dist/esm/internal/string-utils.js +77 -0
  2329. package/dist/esm/internal/string-utils.js.map +1 -0
  2330. package/dist/esm/internal/subscriptionRef.js +63 -0
  2331. package/dist/esm/internal/subscriptionRef.js.map +1 -0
  2332. package/dist/esm/internal/supervisor/patch.js +125 -0
  2333. package/dist/esm/internal/supervisor/patch.js.map +1 -0
  2334. package/dist/esm/internal/supervisor.js +207 -0
  2335. package/dist/esm/internal/supervisor.js.map +1 -0
  2336. package/dist/esm/internal/synchronizedRef.js +44 -0
  2337. package/dist/esm/internal/synchronizedRef.js.map +1 -0
  2338. package/dist/esm/internal/take.js +108 -0
  2339. package/dist/esm/internal/take.js.map +1 -0
  2340. package/dist/esm/internal/testing/sleep.js +7 -0
  2341. package/dist/esm/internal/testing/sleep.js.map +1 -0
  2342. package/dist/esm/internal/testing/suspendedWarningData.js +48 -0
  2343. package/dist/esm/internal/testing/suspendedWarningData.js.map +1 -0
  2344. package/dist/esm/internal/testing/warningData.js +49 -0
  2345. package/dist/esm/internal/testing/warningData.js.map +1 -0
  2346. package/dist/esm/internal/tracer.js +122 -0
  2347. package/dist/esm/internal/tracer.js.map +1 -0
  2348. package/dist/esm/internal/trie.js +547 -0
  2349. package/dist/esm/internal/trie.js.map +1 -0
  2350. package/dist/esm/internal/version.js +6 -0
  2351. package/dist/esm/internal/version.js.map +1 -0
  2352. package/dist/esm/package.json +4 -0
  2353. package/index/package.json +6 -0
  2354. package/package.json +1471 -0
  2355. package/src/Arbitrary.ts +1101 -0
  2356. package/src/Array.ts +6854 -0
  2357. package/src/BigDecimal.ts +2037 -0
  2358. package/src/BigInt.ts +1139 -0
  2359. package/src/Boolean.ts +560 -0
  2360. package/src/Brand.ts +360 -0
  2361. package/src/Cache.ts +281 -0
  2362. package/src/Cause.ts +2049 -0
  2363. package/src/Channel.ts +3051 -0
  2364. package/src/ChildExecutorDecision.ts +158 -0
  2365. package/src/Chunk.ts +2350 -0
  2366. package/src/Clock.ts +111 -0
  2367. package/src/Config.ts +743 -0
  2368. package/src/ConfigError.ts +286 -0
  2369. package/src/ConfigProvider.ts +421 -0
  2370. package/src/ConfigProviderPathPatch.ts +132 -0
  2371. package/src/Console.ts +255 -0
  2372. package/src/Context.ts +867 -0
  2373. package/src/Cron.ts +718 -0
  2374. package/src/Data.ts +765 -0
  2375. package/src/DateTime.ts +2715 -0
  2376. package/src/DefaultServices.ts +34 -0
  2377. package/src/Deferred.ts +471 -0
  2378. package/src/Differ.ts +512 -0
  2379. package/src/Duration.ts +1140 -0
  2380. package/src/Effect.ts +29096 -0
  2381. package/src/Effectable.ts +107 -0
  2382. package/src/Either.ts +1723 -0
  2383. package/src/Encoding.ts +195 -0
  2384. package/src/Equal.ts +98 -0
  2385. package/src/Equivalence.ts +259 -0
  2386. package/src/ExecutionPlan.ts +308 -0
  2387. package/src/ExecutionStrategy.ts +138 -0
  2388. package/src/Exit.ts +717 -0
  2389. package/src/FastCheck.ts +9 -0
  2390. package/src/Fiber.ts +926 -0
  2391. package/src/FiberHandle.ts +582 -0
  2392. package/src/FiberId.ts +219 -0
  2393. package/src/FiberMap.ts +779 -0
  2394. package/src/FiberRef.ts +511 -0
  2395. package/src/FiberRefs.ts +288 -0
  2396. package/src/FiberRefsPatch.ts +139 -0
  2397. package/src/FiberSet.ts +529 -0
  2398. package/src/FiberStatus.ts +108 -0
  2399. package/src/Function.ts +1378 -0
  2400. package/src/GlobalValue.ts +53 -0
  2401. package/src/Graph.ts +3764 -0
  2402. package/src/GroupBy.ts +141 -0
  2403. package/src/HKT.ts +45 -0
  2404. package/src/Hash.ts +203 -0
  2405. package/src/HashMap.ts +919 -0
  2406. package/src/HashRing.ts +387 -0
  2407. package/src/HashSet.ts +2346 -0
  2408. package/src/Inspectable.ts +287 -0
  2409. package/src/Iterable.ts +1606 -0
  2410. package/src/JSONSchema.ts +1044 -0
  2411. package/src/KeyedPool.ts +201 -0
  2412. package/src/Layer.ts +1671 -0
  2413. package/src/LayerMap.ts +436 -0
  2414. package/src/List.ts +1469 -0
  2415. package/src/LogLevel.ts +387 -0
  2416. package/src/LogSpan.ts +25 -0
  2417. package/src/Logger.ts +863 -0
  2418. package/src/Mailbox.ts +298 -0
  2419. package/src/ManagedRuntime.ts +180 -0
  2420. package/src/Match.ts +1493 -0
  2421. package/src/MergeDecision.ts +103 -0
  2422. package/src/MergeState.ts +180 -0
  2423. package/src/MergeStrategy.ts +124 -0
  2424. package/src/Metric.ts +1165 -0
  2425. package/src/MetricBoundaries.ts +69 -0
  2426. package/src/MetricHook.ts +175 -0
  2427. package/src/MetricKey.ts +266 -0
  2428. package/src/MetricKeyType.ts +262 -0
  2429. package/src/MetricLabel.ts +47 -0
  2430. package/src/MetricPair.ts +71 -0
  2431. package/src/MetricPolling.ts +182 -0
  2432. package/src/MetricRegistry.ts +48 -0
  2433. package/src/MetricState.ts +273 -0
  2434. package/src/Micro.ts +5556 -0
  2435. package/src/ModuleVersion.ts +18 -0
  2436. package/src/MutableHashMap.ts +518 -0
  2437. package/src/MutableHashSet.ts +706 -0
  2438. package/src/MutableList.ts +333 -0
  2439. package/src/MutableQueue.ts +289 -0
  2440. package/src/MutableRef.ts +258 -0
  2441. package/src/NonEmptyIterable.ts +32 -0
  2442. package/src/Number.ts +1440 -0
  2443. package/src/Option.ts +4028 -0
  2444. package/src/Order.ts +397 -0
  2445. package/src/Ordering.ts +173 -0
  2446. package/src/ParseResult.ts +2068 -0
  2447. package/src/PartitionedSemaphore.ts +200 -0
  2448. package/src/Pipeable.ts +574 -0
  2449. package/src/Pool.ts +220 -0
  2450. package/src/Predicate.ts +2344 -0
  2451. package/src/Pretty.ts +205 -0
  2452. package/src/PrimaryKey.ts +23 -0
  2453. package/src/PubSub.ts +210 -0
  2454. package/src/Queue.ts +748 -0
  2455. package/src/Random.ts +204 -0
  2456. package/src/RateLimiter.ts +138 -0
  2457. package/src/RcMap.ts +245 -0
  2458. package/src/RcRef.ts +122 -0
  2459. package/src/Readable.ts +104 -0
  2460. package/src/Record.ts +1990 -0
  2461. package/src/RedBlackTree.ts +725 -0
  2462. package/src/Redacted.ts +144 -0
  2463. package/src/Ref.ts +268 -0
  2464. package/src/RegExp.ts +38 -0
  2465. package/src/Reloadable.ts +127 -0
  2466. package/src/Request.ts +418 -0
  2467. package/src/RequestBlock.ts +118 -0
  2468. package/src/RequestResolver.ts +495 -0
  2469. package/src/Resource.ts +119 -0
  2470. package/src/Runtime.ts +631 -0
  2471. package/src/RuntimeFlags.ts +436 -0
  2472. package/src/RuntimeFlagsPatch.ts +295 -0
  2473. package/src/STM.ts +3091 -0
  2474. package/src/Schedule.ts +3740 -0
  2475. package/src/ScheduleDecision.ts +62 -0
  2476. package/src/ScheduleInterval.ts +219 -0
  2477. package/src/ScheduleIntervals.ts +172 -0
  2478. package/src/Scheduler.ts +364 -0
  2479. package/src/Schema.ts +11443 -0
  2480. package/src/SchemaAST.ts +3055 -0
  2481. package/src/Scope.ts +240 -0
  2482. package/src/ScopedCache.ts +151 -0
  2483. package/src/ScopedRef.ts +139 -0
  2484. package/src/Secret.ts +88 -0
  2485. package/src/SingleProducerAsyncInput.ts +67 -0
  2486. package/src/Sink.ts +1877 -0
  2487. package/src/SortedMap.ts +361 -0
  2488. package/src/SortedSet.ts +530 -0
  2489. package/src/Stream.ts +11561 -0
  2490. package/src/StreamEmit.ts +136 -0
  2491. package/src/StreamHaltStrategy.ts +140 -0
  2492. package/src/Streamable.ts +45 -0
  2493. package/src/String.ts +1026 -0
  2494. package/src/Struct.ts +335 -0
  2495. package/src/Subscribable.ts +114 -0
  2496. package/src/SubscriptionRef.ts +444 -0
  2497. package/src/Supervisor.ts +240 -0
  2498. package/src/Symbol.ts +29 -0
  2499. package/src/SynchronizedRef.ts +429 -0
  2500. package/src/TArray.ts +922 -0
  2501. package/src/TDeferred.ts +124 -0
  2502. package/src/TMap.ts +875 -0
  2503. package/src/TPriorityQueue.ts +283 -0
  2504. package/src/TPubSub.ts +228 -0
  2505. package/src/TQueue.ts +540 -0
  2506. package/src/TRandom.ts +129 -0
  2507. package/src/TReentrantLock.ts +260 -0
  2508. package/src/TRef.ts +266 -0
  2509. package/src/TSemaphore.ts +169 -0
  2510. package/src/TSet.ts +633 -0
  2511. package/src/TSubscriptionRef.ts +284 -0
  2512. package/src/Take.ts +309 -0
  2513. package/src/TestAnnotation.ts +158 -0
  2514. package/src/TestAnnotationMap.ts +163 -0
  2515. package/src/TestAnnotations.ts +117 -0
  2516. package/src/TestClock.ts +562 -0
  2517. package/src/TestConfig.ts +47 -0
  2518. package/src/TestContext.ts +36 -0
  2519. package/src/TestLive.ts +53 -0
  2520. package/src/TestServices.ts +454 -0
  2521. package/src/TestSized.ts +55 -0
  2522. package/src/Tracer.ts +182 -0
  2523. package/src/Trie.ts +1860 -0
  2524. package/src/Tuple.ts +483 -0
  2525. package/src/Types.ts +361 -0
  2526. package/src/Unify.ts +127 -0
  2527. package/src/UpstreamPullRequest.ts +129 -0
  2528. package/src/UpstreamPullStrategy.ts +133 -0
  2529. package/src/Utils.ts +809 -0
  2530. package/src/index.ts +1561 -0
  2531. package/src/internal/array.ts +8 -0
  2532. package/src/internal/blockedRequests.ts +520 -0
  2533. package/src/internal/cache.ts +733 -0
  2534. package/src/internal/cause.ts +1050 -0
  2535. package/src/internal/channel/channelExecutor.ts +1200 -0
  2536. package/src/internal/channel/channelState.ts +134 -0
  2537. package/src/internal/channel/childExecutorDecision.ts +96 -0
  2538. package/src/internal/channel/continuation.ts +200 -0
  2539. package/src/internal/channel/mergeDecision.ts +113 -0
  2540. package/src/internal/channel/mergeState.ts +120 -0
  2541. package/src/internal/channel/mergeStrategy.ts +72 -0
  2542. package/src/internal/channel/singleProducerAsyncInput.ts +259 -0
  2543. package/src/internal/channel/subexecutor.ts +229 -0
  2544. package/src/internal/channel/upstreamPullRequest.ts +84 -0
  2545. package/src/internal/channel/upstreamPullStrategy.ts +87 -0
  2546. package/src/internal/channel.ts +2603 -0
  2547. package/src/internal/clock.ts +95 -0
  2548. package/src/internal/completedRequestMap.ts +9 -0
  2549. package/src/internal/concurrency.ts +54 -0
  2550. package/src/internal/config.ts +716 -0
  2551. package/src/internal/configError.ts +304 -0
  2552. package/src/internal/configProvider/pathPatch.ts +97 -0
  2553. package/src/internal/configProvider.ts +799 -0
  2554. package/src/internal/console.ts +153 -0
  2555. package/src/internal/context.ts +337 -0
  2556. package/src/internal/core-effect.ts +2293 -0
  2557. package/src/internal/core-stream.ts +998 -0
  2558. package/src/internal/core.ts +3166 -0
  2559. package/src/internal/data.ts +36 -0
  2560. package/src/internal/dataSource.ts +327 -0
  2561. package/src/internal/dateTime.ts +1277 -0
  2562. package/src/internal/defaultServices/console.ts +100 -0
  2563. package/src/internal/defaultServices.ts +163 -0
  2564. package/src/internal/deferred.ts +46 -0
  2565. package/src/internal/differ/chunkPatch.ts +211 -0
  2566. package/src/internal/differ/contextPatch.ts +232 -0
  2567. package/src/internal/differ/hashMapPatch.ts +220 -0
  2568. package/src/internal/differ/hashSetPatch.ts +176 -0
  2569. package/src/internal/differ/orPatch.ts +311 -0
  2570. package/src/internal/differ/readonlyArrayPatch.ts +210 -0
  2571. package/src/internal/differ.ts +200 -0
  2572. package/src/internal/doNotation.ts +80 -0
  2573. package/src/internal/effect/circular.ts +903 -0
  2574. package/src/internal/effectable.ts +131 -0
  2575. package/src/internal/either.ts +110 -0
  2576. package/src/internal/encoding/base64.ts +286 -0
  2577. package/src/internal/encoding/base64Url.ts +29 -0
  2578. package/src/internal/encoding/common.ts +51 -0
  2579. package/src/internal/encoding/hex.ts +315 -0
  2580. package/src/internal/errors.ts +7 -0
  2581. package/src/internal/executionPlan.ts +114 -0
  2582. package/src/internal/executionStrategy.ts +74 -0
  2583. package/src/internal/fiber.ts +388 -0
  2584. package/src/internal/fiberId.ts +267 -0
  2585. package/src/internal/fiberMessage.ts +82 -0
  2586. package/src/internal/fiberRefs/patch.ts +144 -0
  2587. package/src/internal/fiberRefs.ts +297 -0
  2588. package/src/internal/fiberRuntime.ts +3859 -0
  2589. package/src/internal/fiberScope.ts +71 -0
  2590. package/src/internal/fiberStatus.ts +119 -0
  2591. package/src/internal/groupBy.ts +530 -0
  2592. package/src/internal/hashMap/array.ts +49 -0
  2593. package/src/internal/hashMap/bitwise.ts +32 -0
  2594. package/src/internal/hashMap/config.ts +14 -0
  2595. package/src/internal/hashMap/keySet.ts +8 -0
  2596. package/src/internal/hashMap/node.ts +391 -0
  2597. package/src/internal/hashMap.ts +586 -0
  2598. package/src/internal/hashSet.ts +323 -0
  2599. package/src/internal/keyedPool.ts +244 -0
  2600. package/src/internal/layer/circular.ts +214 -0
  2601. package/src/internal/layer.ts +1483 -0
  2602. package/src/internal/logSpan.ts +20 -0
  2603. package/src/internal/logger-circular.ts +24 -0
  2604. package/src/internal/logger.ts +485 -0
  2605. package/src/internal/mailbox.ts +561 -0
  2606. package/src/internal/managedRuntime/circular.ts +6 -0
  2607. package/src/internal/managedRuntime.ts +137 -0
  2608. package/src/internal/matcher.ts +652 -0
  2609. package/src/internal/metric/boundaries.ts +75 -0
  2610. package/src/internal/metric/hook.ts +483 -0
  2611. package/src/internal/metric/key.ts +167 -0
  2612. package/src/internal/metric/keyType.ts +238 -0
  2613. package/src/internal/metric/label.ts +41 -0
  2614. package/src/internal/metric/pair.ts +48 -0
  2615. package/src/internal/metric/polling.ts +149 -0
  2616. package/src/internal/metric/registry.ts +187 -0
  2617. package/src/internal/metric/state.ts +290 -0
  2618. package/src/internal/metric.ts +577 -0
  2619. package/src/internal/opCodes/cause.ts +35 -0
  2620. package/src/internal/opCodes/channel.ts +83 -0
  2621. package/src/internal/opCodes/channelChildExecutorDecision.ts +17 -0
  2622. package/src/internal/opCodes/channelMergeDecision.ts +11 -0
  2623. package/src/internal/opCodes/channelMergeState.ts +17 -0
  2624. package/src/internal/opCodes/channelMergeStrategy.ts +11 -0
  2625. package/src/internal/opCodes/channelState.ts +23 -0
  2626. package/src/internal/opCodes/channelUpstreamPullRequest.ts +11 -0
  2627. package/src/internal/opCodes/channelUpstreamPullStrategy.ts +11 -0
  2628. package/src/internal/opCodes/config.ts +65 -0
  2629. package/src/internal/opCodes/configError.ts +35 -0
  2630. package/src/internal/opCodes/continuation.ts +11 -0
  2631. package/src/internal/opCodes/deferred.ts +11 -0
  2632. package/src/internal/opCodes/effect.ts +89 -0
  2633. package/src/internal/opCodes/layer.ts +59 -0
  2634. package/src/internal/opCodes/streamHaltStrategy.ts +23 -0
  2635. package/src/internal/option.ts +80 -0
  2636. package/src/internal/pool.ts +432 -0
  2637. package/src/internal/pubsub.ts +1762 -0
  2638. package/src/internal/query.ts +204 -0
  2639. package/src/internal/queue.ts +766 -0
  2640. package/src/internal/random.ts +161 -0
  2641. package/src/internal/rateLimiter.ts +93 -0
  2642. package/src/internal/rcMap.ts +285 -0
  2643. package/src/internal/rcRef.ts +192 -0
  2644. package/src/internal/redBlackTree/iterator.ts +200 -0
  2645. package/src/internal/redBlackTree/node.ts +68 -0
  2646. package/src/internal/redBlackTree.ts +1245 -0
  2647. package/src/internal/redacted.ts +73 -0
  2648. package/src/internal/ref.ts +171 -0
  2649. package/src/internal/reloadable.ts +140 -0
  2650. package/src/internal/request.ts +177 -0
  2651. package/src/internal/resource.ts +76 -0
  2652. package/src/internal/ringBuffer.ts +68 -0
  2653. package/src/internal/runtime.ts +558 -0
  2654. package/src/internal/runtimeFlags.ts +178 -0
  2655. package/src/internal/runtimeFlagsPatch.ts +103 -0
  2656. package/src/internal/schedule/decision.ts +47 -0
  2657. package/src/internal/schedule/interval.ts +101 -0
  2658. package/src/internal/schedule/intervals.ts +180 -0
  2659. package/src/internal/schedule.ts +2199 -0
  2660. package/src/internal/schema/errors.ts +191 -0
  2661. package/src/internal/schema/schemaId.ts +106 -0
  2662. package/src/internal/schema/util.ts +50 -0
  2663. package/src/internal/scopedCache.ts +644 -0
  2664. package/src/internal/scopedRef.ts +118 -0
  2665. package/src/internal/secret.ts +89 -0
  2666. package/src/internal/singleShotGen.ts +35 -0
  2667. package/src/internal/sink.ts +2120 -0
  2668. package/src/internal/stack.ts +10 -0
  2669. package/src/internal/stm/core.ts +817 -0
  2670. package/src/internal/stm/entry.ts +59 -0
  2671. package/src/internal/stm/journal.ts +123 -0
  2672. package/src/internal/stm/opCodes/stm.ts +71 -0
  2673. package/src/internal/stm/opCodes/stmState.ts +17 -0
  2674. package/src/internal/stm/opCodes/strategy.ts +17 -0
  2675. package/src/internal/stm/opCodes/tExit.ts +29 -0
  2676. package/src/internal/stm/opCodes/tryCommit.ts +11 -0
  2677. package/src/internal/stm/stm.ts +1453 -0
  2678. package/src/internal/stm/stmState.ts +136 -0
  2679. package/src/internal/stm/tArray.ts +550 -0
  2680. package/src/internal/stm/tDeferred.ts +81 -0
  2681. package/src/internal/stm/tExit.ts +190 -0
  2682. package/src/internal/stm/tMap.ts +824 -0
  2683. package/src/internal/stm/tPriorityQueue.ts +267 -0
  2684. package/src/internal/stm/tPubSub.ts +551 -0
  2685. package/src/internal/stm/tQueue.ts +393 -0
  2686. package/src/internal/stm/tRandom.ts +140 -0
  2687. package/src/internal/stm/tReentrantLock.ts +352 -0
  2688. package/src/internal/stm/tRef.ts +195 -0
  2689. package/src/internal/stm/tSemaphore.ts +113 -0
  2690. package/src/internal/stm/tSet.ts +259 -0
  2691. package/src/internal/stm/tSubscriptionRef.ts +286 -0
  2692. package/src/internal/stm/tryCommit.ts +34 -0
  2693. package/src/internal/stm/txnId.ts +14 -0
  2694. package/src/internal/stm/versioned.ts +4 -0
  2695. package/src/internal/stream/debounceState.ts +57 -0
  2696. package/src/internal/stream/emit.ts +123 -0
  2697. package/src/internal/stream/haltStrategy.ts +94 -0
  2698. package/src/internal/stream/handoff.ts +187 -0
  2699. package/src/internal/stream/handoffSignal.ts +59 -0
  2700. package/src/internal/stream/pull.ts +34 -0
  2701. package/src/internal/stream/sinkEndReason.ts +30 -0
  2702. package/src/internal/stream/zipAllState.ts +88 -0
  2703. package/src/internal/stream/zipChunksState.ts +56 -0
  2704. package/src/internal/stream.ts +8802 -0
  2705. package/src/internal/string-utils.ts +107 -0
  2706. package/src/internal/subscriptionRef.ts +138 -0
  2707. package/src/internal/supervisor/patch.ts +190 -0
  2708. package/src/internal/supervisor.ts +303 -0
  2709. package/src/internal/synchronizedRef.ts +114 -0
  2710. package/src/internal/take.ts +199 -0
  2711. package/src/internal/testing/sleep.ts +27 -0
  2712. package/src/internal/testing/suspendedWarningData.ts +85 -0
  2713. package/src/internal/testing/warningData.ts +94 -0
  2714. package/src/internal/tracer.ts +150 -0
  2715. package/src/internal/trie.ts +722 -0
  2716. package/src/internal/version.ts +7 -0
package/src/Graph.ts ADDED
@@ -0,0 +1,3764 @@
1
+ /**
2
+ * @experimental
3
+ * @since 3.18.0
4
+ */
5
+
6
+ import * as Data from "./Data.js"
7
+ import * as Equal from "./Equal.js"
8
+ import { dual } from "./Function.js"
9
+ import * as Hash from "./Hash.js"
10
+ import type { Inspectable } from "./Inspectable.js"
11
+ import { format, NodeInspectSymbol } from "./Inspectable.js"
12
+ import * as Option from "./Option.js"
13
+ import type { Pipeable } from "./Pipeable.js"
14
+ import { pipeArguments } from "./Pipeable.js"
15
+ import type { Mutable } from "./Types.js"
16
+
17
+ /**
18
+ * Unique identifier for Graph instances.
19
+ *
20
+ * @since 3.18.0
21
+ * @category symbol
22
+ */
23
+ export const TypeId: "~effect/Graph" = "~effect/Graph" as const
24
+
25
+ /**
26
+ * Type identifier for Graph instances.
27
+ *
28
+ * @since 3.18.0
29
+ * @category symbol
30
+ */
31
+ export type TypeId = typeof TypeId
32
+
33
+ /**
34
+ * Node index for node identification using plain numbers.
35
+ *
36
+ * @since 3.18.0
37
+ * @category models
38
+ */
39
+ export type NodeIndex = number
40
+
41
+ /**
42
+ * Edge index for edge identification using plain numbers.
43
+ *
44
+ * @since 3.18.0
45
+ * @category models
46
+ */
47
+ export type EdgeIndex = number
48
+
49
+ /**
50
+ * Edge data containing source, target, and user data.
51
+ *
52
+ * @since 3.18.0
53
+ * @category models
54
+ */
55
+ export class Edge<E> extends Data.Class<{
56
+ readonly source: NodeIndex
57
+ readonly target: NodeIndex
58
+ readonly data: E
59
+ }> {}
60
+
61
+ /**
62
+ * Graph type for distinguishing directed and undirected graphs.
63
+ *
64
+ * @since 3.18.0
65
+ * @category models
66
+ */
67
+ export type Kind = "directed" | "undirected"
68
+
69
+ /**
70
+ * Graph prototype interface.
71
+ *
72
+ * @since 3.18.0
73
+ * @category models
74
+ */
75
+ export interface Proto<out N, out E> extends Iterable<readonly [NodeIndex, N]>, Equal.Equal, Pipeable, Inspectable {
76
+ readonly [TypeId]: TypeId
77
+ readonly nodes: Map<NodeIndex, N>
78
+ readonly edges: Map<EdgeIndex, Edge<E>>
79
+ readonly adjacency: Map<NodeIndex, Array<EdgeIndex>>
80
+ readonly reverseAdjacency: Map<NodeIndex, Array<EdgeIndex>>
81
+ nextNodeIndex: NodeIndex
82
+ nextEdgeIndex: EdgeIndex
83
+ isAcyclic: Option.Option<boolean>
84
+ }
85
+
86
+ /**
87
+ * Immutable graph interface.
88
+ *
89
+ * @since 3.18.0
90
+ * @category models
91
+ */
92
+ export interface Graph<out N, out E, T extends Kind = "directed"> extends Proto<N, E> {
93
+ readonly type: T
94
+ readonly mutable: false
95
+ }
96
+
97
+ /**
98
+ * Mutable graph interface.
99
+ *
100
+ * @since 3.18.0
101
+ * @category models
102
+ */
103
+ export interface MutableGraph<out N, out E, T extends Kind = "directed"> extends Proto<N, E> {
104
+ readonly type: T
105
+ readonly mutable: true
106
+ }
107
+
108
+ /**
109
+ * Directed graph type alias.
110
+ *
111
+ * @since 3.18.0
112
+ * @category models
113
+ */
114
+ export type DirectedGraph<N, E> = Graph<N, E, "directed">
115
+
116
+ /**
117
+ * Undirected graph type alias.
118
+ *
119
+ * @since 3.18.0
120
+ * @category models
121
+ */
122
+ export type UndirectedGraph<N, E> = Graph<N, E, "undirected">
123
+
124
+ /**
125
+ * Mutable directed graph type alias.
126
+ *
127
+ * @since 3.18.0
128
+ * @category models
129
+ */
130
+ export type MutableDirectedGraph<N, E> = MutableGraph<N, E, "directed">
131
+
132
+ /**
133
+ * Mutable undirected graph type alias.
134
+ *
135
+ * @since 3.18.0
136
+ * @category models
137
+ */
138
+ export type MutableUndirectedGraph<N, E> = MutableGraph<N, E, "undirected">
139
+
140
+ // =============================================================================
141
+ // Proto Objects
142
+ // =============================================================================
143
+
144
+ /** @internal */
145
+ const ProtoGraph = {
146
+ [TypeId]: TypeId,
147
+ [Symbol.iterator](this: Graph<any, any>) {
148
+ return this.nodes[Symbol.iterator]()
149
+ },
150
+ [NodeInspectSymbol](this: Graph<any, any>) {
151
+ return this.toJSON()
152
+ },
153
+ [Equal.symbol](this: Graph<any, any>, that: Equal.Equal): boolean {
154
+ if (isGraph(that)) {
155
+ if (
156
+ this.nodes.size !== that.nodes.size ||
157
+ this.edges.size !== that.edges.size ||
158
+ this.type !== that.type
159
+ ) {
160
+ return false
161
+ }
162
+ // Compare nodes
163
+ for (const [nodeIndex, nodeData] of this.nodes) {
164
+ if (!that.nodes.has(nodeIndex)) {
165
+ return false
166
+ }
167
+ const otherNodeData = that.nodes.get(nodeIndex)!
168
+ if (!Equal.equals(nodeData, otherNodeData)) {
169
+ return false
170
+ }
171
+ }
172
+ // Compare edges
173
+ for (const [edgeIndex, edgeData] of this.edges) {
174
+ if (!that.edges.has(edgeIndex)) {
175
+ return false
176
+ }
177
+ const otherEdge = that.edges.get(edgeIndex)!
178
+ if (!Equal.equals(edgeData, otherEdge)) {
179
+ return false
180
+ }
181
+ }
182
+ return true
183
+ }
184
+ return false
185
+ },
186
+ [Hash.symbol](this: Graph<any, any>): number {
187
+ let hash = Hash.string("Graph")
188
+ hash = hash ^ Hash.string(this.type)
189
+ hash = hash ^ Hash.number(this.nodes.size)
190
+ hash = hash ^ Hash.number(this.edges.size)
191
+ for (const [nodeIndex, nodeData] of this.nodes) {
192
+ hash = hash ^ (Hash.hash(nodeIndex) + Hash.hash(nodeData))
193
+ }
194
+ for (const [edgeIndex, edgeData] of this.edges) {
195
+ hash = hash ^ (Hash.hash(edgeIndex) + Hash.hash(edgeData))
196
+ }
197
+ return hash
198
+ },
199
+ toJSON(this: Graph<any, any>) {
200
+ return {
201
+ _id: "Graph",
202
+ nodeCount: this.nodes.size,
203
+ edgeCount: this.edges.size,
204
+ type: this.type
205
+ }
206
+ },
207
+ toString(this: Graph<any, any>) {
208
+ return format(this)
209
+ },
210
+ pipe() {
211
+ return pipeArguments(this, arguments)
212
+ }
213
+ }
214
+
215
+ // =============================================================================
216
+ // Errors
217
+ // =============================================================================
218
+
219
+ /**
220
+ * Error thrown when a graph operation fails.
221
+ *
222
+ * @since 3.18.0
223
+ * @category errors
224
+ */
225
+ export class GraphError extends Data.TaggedError("GraphError")<{
226
+ readonly message: string
227
+ }> {}
228
+
229
+ /** @internal */
230
+ const missingNode = (node: number) => new GraphError({ message: `Node ${node} does not exist` })
231
+
232
+ // =============================================================================
233
+ // Constructors
234
+ // =============================================================================
235
+
236
+ /** @internal */
237
+ export const isGraph = (u: unknown): u is Graph<unknown, unknown> => typeof u === "object" && u !== null && TypeId in u
238
+
239
+ /**
240
+ * Creates a directed graph, optionally with initial mutations.
241
+ *
242
+ * @example
243
+ * ```ts
244
+ * import { Graph } from "effect"
245
+ *
246
+ * // Directed graph with initial nodes and edges
247
+ * const graph = Graph.directed<string, string>((mutable) => {
248
+ * const a = Graph.addNode(mutable, "A")
249
+ * const b = Graph.addNode(mutable, "B")
250
+ * const c = Graph.addNode(mutable, "C")
251
+ * Graph.addEdge(mutable, a, b, "A->B")
252
+ * Graph.addEdge(mutable, b, c, "B->C")
253
+ * })
254
+ * ```
255
+ *
256
+ * @since 3.18.0
257
+ * @category constructors
258
+ */
259
+ export const directed = <N, E>(mutate?: (mutable: MutableDirectedGraph<N, E>) => void): DirectedGraph<N, E> => {
260
+ const graph: Mutable<DirectedGraph<N, E>> = Object.create(ProtoGraph)
261
+ graph.type = "directed"
262
+ graph.nodes = new Map()
263
+ graph.edges = new Map()
264
+ graph.adjacency = new Map()
265
+ graph.reverseAdjacency = new Map()
266
+ graph.nextNodeIndex = 0
267
+ graph.nextEdgeIndex = 0
268
+ graph.isAcyclic = Option.some(true)
269
+ graph.mutable = false
270
+
271
+ if (mutate) {
272
+ const mutable = beginMutation(graph as DirectedGraph<N, E>)
273
+ mutate(mutable as MutableDirectedGraph<N, E>)
274
+ return endMutation(mutable)
275
+ }
276
+
277
+ return graph
278
+ }
279
+
280
+ /**
281
+ * Creates an undirected graph, optionally with initial mutations.
282
+ *
283
+ * @example
284
+ * ```ts
285
+ * import { Graph } from "effect"
286
+ *
287
+ * // Undirected graph with initial nodes and edges
288
+ * const graph = Graph.undirected<string, string>((mutable) => {
289
+ * const a = Graph.addNode(mutable, "A")
290
+ * const b = Graph.addNode(mutable, "B")
291
+ * const c = Graph.addNode(mutable, "C")
292
+ * Graph.addEdge(mutable, a, b, "A-B")
293
+ * Graph.addEdge(mutable, b, c, "B-C")
294
+ * })
295
+ * ```
296
+ *
297
+ * @since 3.18.0
298
+ * @category constructors
299
+ */
300
+ export const undirected = <N, E>(mutate?: (mutable: MutableUndirectedGraph<N, E>) => void): UndirectedGraph<N, E> => {
301
+ const graph: Mutable<UndirectedGraph<N, E>> = Object.create(ProtoGraph)
302
+ graph.type = "undirected"
303
+ graph.nodes = new Map()
304
+ graph.edges = new Map()
305
+ graph.adjacency = new Map()
306
+ graph.reverseAdjacency = new Map()
307
+ graph.nextNodeIndex = 0
308
+ graph.nextEdgeIndex = 0
309
+ graph.isAcyclic = Option.some(true)
310
+ graph.mutable = false
311
+
312
+ if (mutate) {
313
+ const mutable = beginMutation(graph)
314
+ mutate(mutable as MutableUndirectedGraph<N, E>)
315
+ return endMutation(mutable)
316
+ }
317
+
318
+ return graph
319
+ }
320
+
321
+ // =============================================================================
322
+ // Scoped Mutable API
323
+ // =============================================================================
324
+
325
+ /**
326
+ * Creates a mutable scope for safe graph mutations by copying the data structure.
327
+ *
328
+ * @example
329
+ * ```ts
330
+ * import { Graph } from "effect"
331
+ *
332
+ * const graph = Graph.directed<string, number>()
333
+ * const mutable = Graph.beginMutation(graph)
334
+ * // Now mutable can be safely modified without affecting original graph
335
+ * ```
336
+ *
337
+ * @since 3.18.0
338
+ * @category mutations
339
+ */
340
+ export const beginMutation = <N, E, T extends Kind = "directed">(
341
+ graph: Graph<N, E, T>
342
+ ): MutableGraph<N, E, T> => {
343
+ // Copy adjacency maps with deep cloned arrays
344
+ const adjacency = new Map<NodeIndex, Array<EdgeIndex>>()
345
+ const reverseAdjacency = new Map<NodeIndex, Array<EdgeIndex>>()
346
+
347
+ for (const [nodeIndex, edges] of graph.adjacency) {
348
+ adjacency.set(nodeIndex, [...edges])
349
+ }
350
+
351
+ for (const [nodeIndex, edges] of graph.reverseAdjacency) {
352
+ reverseAdjacency.set(nodeIndex, [...edges])
353
+ }
354
+
355
+ const mutable: Mutable<MutableGraph<N, E, T>> = Object.create(ProtoGraph)
356
+ mutable.type = graph.type
357
+ mutable.nodes = new Map(graph.nodes)
358
+ mutable.edges = new Map(graph.edges)
359
+ mutable.adjacency = adjacency
360
+ mutable.reverseAdjacency = reverseAdjacency
361
+ mutable.nextNodeIndex = graph.nextNodeIndex
362
+ mutable.nextEdgeIndex = graph.nextEdgeIndex
363
+ mutable.isAcyclic = graph.isAcyclic
364
+ mutable.mutable = true
365
+
366
+ return mutable
367
+ }
368
+
369
+ /**
370
+ * Converts a mutable graph back to an immutable graph, ending the mutation scope.
371
+ *
372
+ * @example
373
+ * ```ts
374
+ * import { Graph } from "effect"
375
+ *
376
+ * const graph = Graph.directed<string, number>()
377
+ * const mutable = Graph.beginMutation(graph)
378
+ * // ... perform mutations on mutable ...
379
+ * const newGraph = Graph.endMutation(mutable)
380
+ * ```
381
+ *
382
+ * @since 3.18.0
383
+ * @category mutations
384
+ */
385
+ export const endMutation = <N, E, T extends Kind = "directed">(
386
+ mutable: MutableGraph<N, E, T>
387
+ ): Graph<N, E, T> => {
388
+ const graph: Mutable<Graph<N, E, T>> = Object.create(ProtoGraph)
389
+ graph.type = mutable.type
390
+ graph.nodes = new Map(mutable.nodes)
391
+ graph.edges = new Map(mutable.edges)
392
+ graph.adjacency = mutable.adjacency
393
+ graph.reverseAdjacency = mutable.reverseAdjacency
394
+ graph.nextNodeIndex = mutable.nextNodeIndex
395
+ graph.nextEdgeIndex = mutable.nextEdgeIndex
396
+ graph.isAcyclic = mutable.isAcyclic
397
+ graph.mutable = false
398
+
399
+ return graph
400
+ }
401
+
402
+ /**
403
+ * Performs scoped mutations on a graph, automatically managing the mutation lifecycle.
404
+ *
405
+ * @example
406
+ * ```ts
407
+ * import { Graph } from "effect"
408
+ *
409
+ * const graph = Graph.directed<string, number>()
410
+ * const newGraph = Graph.mutate(graph, (mutable) => {
411
+ * // Safe mutations go here
412
+ * // mutable gets automatically converted back to immutable
413
+ * })
414
+ * ```
415
+ *
416
+ * @since 3.18.0
417
+ * @category mutations
418
+ */
419
+ export const mutate: {
420
+ /**
421
+ * Performs scoped mutations on a graph, automatically managing the mutation lifecycle.
422
+ *
423
+ * @example
424
+ * ```ts
425
+ * import { Graph } from "effect"
426
+ *
427
+ * const graph = Graph.directed<string, number>()
428
+ * const newGraph = Graph.mutate(graph, (mutable) => {
429
+ * // Safe mutations go here
430
+ * // mutable gets automatically converted back to immutable
431
+ * })
432
+ * ```
433
+ *
434
+ * @since 3.18.0
435
+ * @category mutations
436
+ */
437
+ <N, E, T extends Kind = "directed">(f: (mutable: MutableGraph<N, E, T>) => void): (graph: Graph<N, E, T>) => Graph<N, E, T>
438
+ /**
439
+ * Performs scoped mutations on a graph, automatically managing the mutation lifecycle.
440
+ *
441
+ * @example
442
+ * ```ts
443
+ * import { Graph } from "effect"
444
+ *
445
+ * const graph = Graph.directed<string, number>()
446
+ * const newGraph = Graph.mutate(graph, (mutable) => {
447
+ * // Safe mutations go here
448
+ * // mutable gets automatically converted back to immutable
449
+ * })
450
+ * ```
451
+ *
452
+ * @since 3.18.0
453
+ * @category mutations
454
+ */
455
+ <N, E, T extends Kind = "directed">(graph: Graph<N, E, T>, f: (mutable: MutableGraph<N, E, T>) => void): Graph<N, E, T>
456
+ } = dual(2, <N, E, T extends Kind = "directed">(
457
+ graph: Graph<N, E, T>,
458
+ f: (mutable: MutableGraph<N, E, T>) => void
459
+ ): Graph<N, E, T> => {
460
+ const mutable = beginMutation(graph)
461
+ f(mutable)
462
+ return endMutation(mutable)
463
+ })
464
+
465
+ // =============================================================================
466
+ // Basic Node Operations
467
+ // =============================================================================
468
+
469
+ /**
470
+ * Adds a new node to a mutable graph and returns its index.
471
+ *
472
+ * @example
473
+ * ```ts
474
+ * import { Graph } from "effect"
475
+ *
476
+ * const result = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
477
+ * const nodeA = Graph.addNode(mutable, "Node A")
478
+ * const nodeB = Graph.addNode(mutable, "Node B")
479
+ * console.log(nodeA) // NodeIndex with value 0
480
+ * console.log(nodeB) // NodeIndex with value 1
481
+ * })
482
+ * ```
483
+ *
484
+ * @since 3.18.0
485
+ * @category mutations
486
+ */
487
+ export const addNode = <N, E, T extends Kind = "directed">(
488
+ mutable: MutableGraph<N, E, T>,
489
+ data: N
490
+ ): NodeIndex => {
491
+ const nodeIndex = mutable.nextNodeIndex
492
+
493
+ // Add node data
494
+ mutable.nodes.set(nodeIndex, data)
495
+
496
+ // Initialize empty adjacency lists
497
+ mutable.adjacency.set(nodeIndex, [])
498
+ mutable.reverseAdjacency.set(nodeIndex, [])
499
+
500
+ // Update graph allocators
501
+ mutable.nextNodeIndex = mutable.nextNodeIndex + 1
502
+
503
+ return nodeIndex
504
+ }
505
+
506
+ /**
507
+ * Gets the data associated with a node index, if it exists.
508
+ *
509
+ * @example
510
+ * ```ts
511
+ * import { Graph, Option } from "effect"
512
+ *
513
+ * const graph = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
514
+ * Graph.addNode(mutable, "Node A")
515
+ * })
516
+ *
517
+ * const nodeIndex = 0
518
+ * const nodeData = Graph.getNode(graph, nodeIndex)
519
+ *
520
+ * if (Option.isSome(nodeData)) {
521
+ * console.log(nodeData.value) // "Node A"
522
+ * }
523
+ * ```
524
+ *
525
+ * @since 3.18.0
526
+ * @category getters
527
+ */
528
+ export const getNode = <N, E, T extends Kind = "directed">(
529
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
530
+ nodeIndex: NodeIndex
531
+ ): Option.Option<N> => graph.nodes.has(nodeIndex) ? Option.some(graph.nodes.get(nodeIndex)!) : Option.none()
532
+
533
+ /**
534
+ * Checks if a node with the given index exists in the graph.
535
+ *
536
+ * @example
537
+ * ```ts
538
+ * import { Graph } from "effect"
539
+ *
540
+ * const graph = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
541
+ * Graph.addNode(mutable, "Node A")
542
+ * })
543
+ *
544
+ * const nodeIndex = 0
545
+ * const exists = Graph.hasNode(graph, nodeIndex)
546
+ * console.log(exists) // true
547
+ *
548
+ * const nonExistentIndex = 999
549
+ * const notExists = Graph.hasNode(graph, nonExistentIndex)
550
+ * console.log(notExists) // false
551
+ * ```
552
+ *
553
+ * @since 3.18.0
554
+ * @category getters
555
+ */
556
+ export const hasNode = <N, E, T extends Kind = "directed">(
557
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
558
+ nodeIndex: NodeIndex
559
+ ): boolean => graph.nodes.has(nodeIndex)
560
+
561
+ /**
562
+ * Returns the number of nodes in the graph.
563
+ *
564
+ * @example
565
+ * ```ts
566
+ * import { Graph } from "effect"
567
+ *
568
+ * const emptyGraph = Graph.directed<string, number>()
569
+ * console.log(Graph.nodeCount(emptyGraph)) // 0
570
+ *
571
+ * const graphWithNodes = Graph.mutate(emptyGraph, (mutable) => {
572
+ * Graph.addNode(mutable, "Node A")
573
+ * Graph.addNode(mutable, "Node B")
574
+ * Graph.addNode(mutable, "Node C")
575
+ * })
576
+ *
577
+ * console.log(Graph.nodeCount(graphWithNodes)) // 3
578
+ * ```
579
+ *
580
+ * @since 3.18.0
581
+ * @category getters
582
+ */
583
+ export const nodeCount = <N, E, T extends Kind = "directed">(
584
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>
585
+ ): number => graph.nodes.size
586
+
587
+ /**
588
+ * Finds the first node that matches the given predicate.
589
+ *
590
+ * @example
591
+ * ```ts
592
+ * import { Graph, Option } from "effect"
593
+ *
594
+ * const graph = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
595
+ * Graph.addNode(mutable, "Node A")
596
+ * Graph.addNode(mutable, "Node B")
597
+ * Graph.addNode(mutable, "Node C")
598
+ * })
599
+ *
600
+ * const result = Graph.findNode(graph, (data) => data.startsWith("Node B"))
601
+ * console.log(result) // Option.some(1)
602
+ *
603
+ * const notFound = Graph.findNode(graph, (data) => data === "Node D")
604
+ * console.log(notFound) // Option.none()
605
+ * ```
606
+ *
607
+ * @since 3.18.0
608
+ * @category getters
609
+ */
610
+ export const findNode = <N, E, T extends Kind = "directed">(
611
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
612
+ predicate: (data: N) => boolean
613
+ ): Option.Option<NodeIndex> => {
614
+ for (const [index, data] of graph.nodes) {
615
+ if (predicate(data)) {
616
+ return Option.some(index)
617
+ }
618
+ }
619
+ return Option.none()
620
+ }
621
+
622
+ /**
623
+ * Finds all nodes that match the given predicate.
624
+ *
625
+ * @example
626
+ * ```ts
627
+ * import { Graph } from "effect"
628
+ *
629
+ * const graph = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
630
+ * Graph.addNode(mutable, "Start A")
631
+ * Graph.addNode(mutable, "Node B")
632
+ * Graph.addNode(mutable, "Start C")
633
+ * })
634
+ *
635
+ * const result = Graph.findNodes(graph, (data) => data.startsWith("Start"))
636
+ * console.log(result) // [0, 2]
637
+ *
638
+ * const empty = Graph.findNodes(graph, (data) => data === "Not Found")
639
+ * console.log(empty) // []
640
+ * ```
641
+ *
642
+ * @since 3.18.0
643
+ * @category getters
644
+ */
645
+ export const findNodes = <N, E, T extends Kind = "directed">(
646
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
647
+ predicate: (data: N) => boolean
648
+ ): Array<NodeIndex> => {
649
+ const results: Array<NodeIndex> = []
650
+ for (const [index, data] of graph.nodes) {
651
+ if (predicate(data)) {
652
+ results.push(index)
653
+ }
654
+ }
655
+ return results
656
+ }
657
+
658
+ /**
659
+ * Finds the first edge that matches the given predicate.
660
+ *
661
+ * @example
662
+ * ```ts
663
+ * import { Graph, Option } from "effect"
664
+ *
665
+ * const graph = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
666
+ * const nodeA = Graph.addNode(mutable, "Node A")
667
+ * const nodeB = Graph.addNode(mutable, "Node B")
668
+ * const nodeC = Graph.addNode(mutable, "Node C")
669
+ * Graph.addEdge(mutable, nodeA, nodeB, 10)
670
+ * Graph.addEdge(mutable, nodeB, nodeC, 20)
671
+ * })
672
+ *
673
+ * const result = Graph.findEdge(graph, (data) => data > 15)
674
+ * console.log(result) // Option.some(1)
675
+ *
676
+ * const notFound = Graph.findEdge(graph, (data) => data > 100)
677
+ * console.log(notFound) // Option.none()
678
+ * ```
679
+ *
680
+ * @since 3.18.0
681
+ * @category getters
682
+ */
683
+ export const findEdge = <N, E, T extends Kind = "directed">(
684
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
685
+ predicate: (data: E, source: NodeIndex, target: NodeIndex) => boolean
686
+ ): Option.Option<EdgeIndex> => {
687
+ for (const [edgeIndex, edgeData] of graph.edges) {
688
+ if (predicate(edgeData.data, edgeData.source, edgeData.target)) {
689
+ return Option.some(edgeIndex)
690
+ }
691
+ }
692
+ return Option.none()
693
+ }
694
+
695
+ /**
696
+ * Finds all edges that match the given predicate.
697
+ *
698
+ * @example
699
+ * ```ts
700
+ * import { Graph } from "effect"
701
+ *
702
+ * const graph = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
703
+ * const nodeA = Graph.addNode(mutable, "Node A")
704
+ * const nodeB = Graph.addNode(mutable, "Node B")
705
+ * const nodeC = Graph.addNode(mutable, "Node C")
706
+ * Graph.addEdge(mutable, nodeA, nodeB, 10)
707
+ * Graph.addEdge(mutable, nodeB, nodeC, 20)
708
+ * Graph.addEdge(mutable, nodeC, nodeA, 30)
709
+ * })
710
+ *
711
+ * const result = Graph.findEdges(graph, (data) => data >= 20)
712
+ * console.log(result) // [1, 2]
713
+ *
714
+ * const empty = Graph.findEdges(graph, (data) => data > 100)
715
+ * console.log(empty) // []
716
+ * ```
717
+ *
718
+ * @since 3.18.0
719
+ * @category getters
720
+ */
721
+ export const findEdges = <N, E, T extends Kind = "directed">(
722
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
723
+ predicate: (data: E, source: NodeIndex, target: NodeIndex) => boolean
724
+ ): Array<EdgeIndex> => {
725
+ const results: Array<EdgeIndex> = []
726
+ for (const [edgeIndex, edgeData] of graph.edges) {
727
+ if (predicate(edgeData.data, edgeData.source, edgeData.target)) {
728
+ results.push(edgeIndex)
729
+ }
730
+ }
731
+ return results
732
+ }
733
+
734
+ /**
735
+ * Updates a single node's data by applying a transformation function.
736
+ *
737
+ * @example
738
+ * ```ts
739
+ * import { Graph } from "effect"
740
+ *
741
+ * const graph = Graph.directed<string, number>((mutable) => {
742
+ * Graph.addNode(mutable, "Node A")
743
+ * Graph.addNode(mutable, "Node B")
744
+ * Graph.updateNode(mutable, 0, (data) => data.toUpperCase())
745
+ * })
746
+ *
747
+ * const nodeData = Graph.getNode(graph, 0)
748
+ * console.log(nodeData) // Option.some("NODE A")
749
+ * ```
750
+ *
751
+ * @since 3.18.0
752
+ * @category transformations
753
+ */
754
+ export const updateNode = <N, E, T extends Kind = "directed">(
755
+ mutable: MutableGraph<N, E, T>,
756
+ index: NodeIndex,
757
+ f: (data: N) => N
758
+ ): void => {
759
+ if (!mutable.nodes.has(index)) {
760
+ return
761
+ }
762
+
763
+ const currentData = mutable.nodes.get(index)!
764
+ const newData = f(currentData)
765
+ mutable.nodes.set(index, newData)
766
+ }
767
+
768
+ /**
769
+ * Updates a single edge's data by applying a transformation function.
770
+ *
771
+ * @example
772
+ * ```ts
773
+ * import { Graph } from "effect"
774
+ *
775
+ * const result = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
776
+ * const nodeA = Graph.addNode(mutable, "Node A")
777
+ * const nodeB = Graph.addNode(mutable, "Node B")
778
+ * const edgeIndex = Graph.addEdge(mutable, nodeA, nodeB, 10)
779
+ * Graph.updateEdge(mutable, edgeIndex, (data) => data * 2)
780
+ * })
781
+ *
782
+ * const edgeData = Graph.getEdge(result, 0)
783
+ * console.log(edgeData) // Option.some({ source: 0, target: 1, data: 20 })
784
+ * ```
785
+ *
786
+ * @since 3.18.0
787
+ * @category mutations
788
+ */
789
+ export const updateEdge = <N, E, T extends Kind = "directed">(
790
+ mutable: MutableGraph<N, E, T>,
791
+ edgeIndex: EdgeIndex,
792
+ f: (data: E) => E
793
+ ): void => {
794
+ if (!mutable.edges.has(edgeIndex)) {
795
+ return
796
+ }
797
+
798
+ const currentEdge = mutable.edges.get(edgeIndex)!
799
+ const newData = f(currentEdge.data)
800
+ mutable.edges.set(edgeIndex, {
801
+ ...currentEdge,
802
+ data: newData
803
+ })
804
+ }
805
+
806
+ /**
807
+ * Creates a new graph with transformed node data using the provided mapping function.
808
+ *
809
+ * @example
810
+ * ```ts
811
+ * import { Graph } from "effect"
812
+ *
813
+ * const graph = Graph.directed<string, number>((mutable) => {
814
+ * Graph.addNode(mutable, "node a")
815
+ * Graph.addNode(mutable, "node b")
816
+ * Graph.addNode(mutable, "node c")
817
+ * Graph.mapNodes(mutable, (data) => data.toUpperCase())
818
+ * })
819
+ *
820
+ * const nodeData = Graph.getNode(graph, 0)
821
+ * console.log(nodeData) // Option.some("NODE A")
822
+ * ```
823
+ *
824
+ * @since 3.18.0
825
+ * @category transformations
826
+ */
827
+ export const mapNodes = <N, E, T extends Kind = "directed">(
828
+ mutable: MutableGraph<N, E, T>,
829
+ f: (data: N) => N
830
+ ): void => {
831
+ // Transform existing node data in place
832
+ for (const [index, data] of mutable.nodes) {
833
+ const newData = f(data)
834
+ mutable.nodes.set(index, newData)
835
+ }
836
+ }
837
+
838
+ /**
839
+ * Transforms all edge data in a mutable graph using the provided mapping function.
840
+ *
841
+ * @example
842
+ * ```ts
843
+ * import { Graph } from "effect"
844
+ *
845
+ * const graph = Graph.directed<string, number>((mutable) => {
846
+ * const a = Graph.addNode(mutable, "A")
847
+ * const b = Graph.addNode(mutable, "B")
848
+ * const c = Graph.addNode(mutable, "C")
849
+ * Graph.addEdge(mutable, a, b, 10)
850
+ * Graph.addEdge(mutable, b, c, 20)
851
+ * Graph.mapEdges(mutable, (data) => data * 2)
852
+ * })
853
+ *
854
+ * const edgeData = Graph.getEdge(graph, 0)
855
+ * console.log(edgeData) // Option.some({ source: 0, target: 1, data: 20 })
856
+ * ```
857
+ *
858
+ * @since 3.18.0
859
+ * @category transformations
860
+ */
861
+ export const mapEdges = <N, E, T extends Kind = "directed">(
862
+ mutable: MutableGraph<N, E, T>,
863
+ f: (data: E) => E
864
+ ): void => {
865
+ // Transform existing edge data in place
866
+ for (const [index, edgeData] of mutable.edges) {
867
+ const newData = f(edgeData.data)
868
+ mutable.edges.set(index, {
869
+ ...edgeData,
870
+ data: newData
871
+ })
872
+ }
873
+ }
874
+
875
+ /**
876
+ * Reverses all edge directions in a mutable graph by swapping source and target nodes.
877
+ *
878
+ * @example
879
+ * ```ts
880
+ * import { Graph } from "effect"
881
+ *
882
+ * const graph = Graph.directed<string, number>((mutable) => {
883
+ * const a = Graph.addNode(mutable, "A")
884
+ * const b = Graph.addNode(mutable, "B")
885
+ * const c = Graph.addNode(mutable, "C")
886
+ * Graph.addEdge(mutable, a, b, 1) // A -> B
887
+ * Graph.addEdge(mutable, b, c, 2) // B -> C
888
+ * Graph.reverse(mutable) // Now B -> A, C -> B
889
+ * })
890
+ *
891
+ * const edge0 = Graph.getEdge(graph, 0)
892
+ * console.log(edge0) // Option.some({ source: 1, target: 0, data: 1 }) - B -> A
893
+ * ```
894
+ *
895
+ * @since 3.18.0
896
+ * @category transformations
897
+ */
898
+ export const reverse = <N, E, T extends Kind = "directed">(
899
+ mutable: MutableGraph<N, E, T>
900
+ ): void => {
901
+ // Reverse all edges by swapping source and target
902
+ for (const [index, edgeData] of mutable.edges) {
903
+ mutable.edges.set(index, {
904
+ source: edgeData.target,
905
+ target: edgeData.source,
906
+ data: edgeData.data
907
+ })
908
+ }
909
+
910
+ // Clear and rebuild adjacency lists with reversed directions
911
+ mutable.adjacency.clear()
912
+ mutable.reverseAdjacency.clear()
913
+
914
+ // Rebuild adjacency lists with reversed directions
915
+ for (const [edgeIndex, edgeData] of mutable.edges) {
916
+ // Add to forward adjacency (source -> target)
917
+ const sourceEdges = mutable.adjacency.get(edgeData.source) || []
918
+ sourceEdges.push(edgeIndex)
919
+ mutable.adjacency.set(edgeData.source, sourceEdges)
920
+
921
+ // Add to reverse adjacency (target <- source)
922
+ const targetEdges = mutable.reverseAdjacency.get(edgeData.target) || []
923
+ targetEdges.push(edgeIndex)
924
+ mutable.reverseAdjacency.set(edgeData.target, targetEdges)
925
+ }
926
+
927
+ // Invalidate cycle flag since edge directions changed
928
+ mutable.isAcyclic = Option.none()
929
+ }
930
+
931
+ /**
932
+ * Filters and optionally transforms nodes in a mutable graph using a predicate function.
933
+ * Nodes that return Option.none are removed along with all their connected edges.
934
+ *
935
+ * @example
936
+ * ```ts
937
+ * import { Graph, Option } from "effect"
938
+ *
939
+ * const graph = Graph.directed<string, number>((mutable) => {
940
+ * const a = Graph.addNode(mutable, "active")
941
+ * const b = Graph.addNode(mutable, "inactive")
942
+ * const c = Graph.addNode(mutable, "active")
943
+ * Graph.addEdge(mutable, a, b, 1)
944
+ * Graph.addEdge(mutable, b, c, 2)
945
+ *
946
+ * // Keep only "active" nodes and transform to uppercase
947
+ * Graph.filterMapNodes(mutable, (data) =>
948
+ * data === "active" ? Option.some(data.toUpperCase()) : Option.none()
949
+ * )
950
+ * })
951
+ *
952
+ * console.log(Graph.nodeCount(graph)) // 2 (only "active" nodes remain)
953
+ * ```
954
+ *
955
+ * @since 3.18.0
956
+ * @category transformations
957
+ */
958
+ export const filterMapNodes = <N, E, T extends Kind = "directed">(
959
+ mutable: MutableGraph<N, E, T>,
960
+ f: (data: N) => Option.Option<N>
961
+ ): void => {
962
+ const nodesToRemove: Array<NodeIndex> = []
963
+
964
+ // First pass: identify nodes to remove and transform data for nodes to keep
965
+ for (const [index, data] of mutable.nodes) {
966
+ const result = f(data)
967
+ if (Option.isSome(result)) {
968
+ // Transform node data
969
+ mutable.nodes.set(index, result.value)
970
+ } else {
971
+ // Mark for removal
972
+ nodesToRemove.push(index)
973
+ }
974
+ }
975
+
976
+ // Second pass: remove filtered out nodes and their edges
977
+ for (const nodeIndex of nodesToRemove) {
978
+ removeNode(mutable, nodeIndex)
979
+ }
980
+ }
981
+
982
+ /**
983
+ * Filters and optionally transforms edges in a mutable graph using a predicate function.
984
+ * Edges that return Option.none are removed from the graph.
985
+ *
986
+ * @example
987
+ * ```ts
988
+ * import { Graph, Option } from "effect"
989
+ *
990
+ * const graph = Graph.directed<string, number>((mutable) => {
991
+ * const a = Graph.addNode(mutable, "A")
992
+ * const b = Graph.addNode(mutable, "B")
993
+ * const c = Graph.addNode(mutable, "C")
994
+ * Graph.addEdge(mutable, a, b, 5)
995
+ * Graph.addEdge(mutable, b, c, 15)
996
+ * Graph.addEdge(mutable, c, a, 25)
997
+ *
998
+ * // Keep only edges with weight >= 10 and double their weight
999
+ * Graph.filterMapEdges(mutable, (data) =>
1000
+ * data >= 10 ? Option.some(data * 2) : Option.none()
1001
+ * )
1002
+ * })
1003
+ *
1004
+ * console.log(Graph.edgeCount(graph)) // 2 (edges with weight 5 removed)
1005
+ * ```
1006
+ *
1007
+ * @since 3.18.0
1008
+ * @category transformations
1009
+ */
1010
+ export const filterMapEdges = <N, E, T extends Kind = "directed">(
1011
+ mutable: MutableGraph<N, E, T>,
1012
+ f: (data: E) => Option.Option<E>
1013
+ ): void => {
1014
+ const edgesToRemove: Array<EdgeIndex> = []
1015
+
1016
+ // First pass: identify edges to remove and transform data for edges to keep
1017
+ for (const [index, edgeData] of mutable.edges) {
1018
+ const result = f(edgeData.data)
1019
+ if (Option.isSome(result)) {
1020
+ // Transform edge data
1021
+ mutable.edges.set(index, {
1022
+ ...edgeData,
1023
+ data: result.value
1024
+ })
1025
+ } else {
1026
+ // Mark for removal
1027
+ edgesToRemove.push(index)
1028
+ }
1029
+ }
1030
+
1031
+ // Second pass: remove filtered out edges
1032
+ for (const edgeIndex of edgesToRemove) {
1033
+ removeEdge(mutable, edgeIndex)
1034
+ }
1035
+ }
1036
+
1037
+ /**
1038
+ * Filters nodes by removing those that don't match the predicate.
1039
+ * This function modifies the mutable graph in place.
1040
+ *
1041
+ * @example
1042
+ * ```ts
1043
+ * import { Graph } from "effect"
1044
+ *
1045
+ * const graph = Graph.directed<string, number>((mutable) => {
1046
+ * Graph.addNode(mutable, "active")
1047
+ * Graph.addNode(mutable, "inactive")
1048
+ * Graph.addNode(mutable, "pending")
1049
+ * Graph.addNode(mutable, "active")
1050
+ *
1051
+ * // Keep only "active" nodes
1052
+ * Graph.filterNodes(mutable, (data) => data === "active")
1053
+ * })
1054
+ *
1055
+ * console.log(Graph.nodeCount(graph)) // 2 (only "active" nodes remain)
1056
+ * ```
1057
+ *
1058
+ * @since 3.18.0
1059
+ * @category transformations
1060
+ */
1061
+ export const filterNodes = <N, E, T extends Kind = "directed">(
1062
+ mutable: MutableGraph<N, E, T>,
1063
+ predicate: (data: N) => boolean
1064
+ ): void => {
1065
+ const nodesToRemove: Array<NodeIndex> = []
1066
+
1067
+ // Identify nodes to remove
1068
+ for (const [index, data] of mutable.nodes) {
1069
+ if (!predicate(data)) {
1070
+ nodesToRemove.push(index)
1071
+ }
1072
+ }
1073
+
1074
+ // Remove filtered out nodes (this also removes connected edges)
1075
+ for (const nodeIndex of nodesToRemove) {
1076
+ removeNode(mutable, nodeIndex)
1077
+ }
1078
+ }
1079
+
1080
+ /**
1081
+ * Filters edges by removing those that don't match the predicate.
1082
+ * This function modifies the mutable graph in place.
1083
+ *
1084
+ * @example
1085
+ * ```ts
1086
+ * import { Graph } from "effect"
1087
+ *
1088
+ * const graph = Graph.directed<string, number>((mutable) => {
1089
+ * const a = Graph.addNode(mutable, "A")
1090
+ * const b = Graph.addNode(mutable, "B")
1091
+ * const c = Graph.addNode(mutable, "C")
1092
+ *
1093
+ * Graph.addEdge(mutable, a, b, 5)
1094
+ * Graph.addEdge(mutable, b, c, 15)
1095
+ * Graph.addEdge(mutable, c, a, 25)
1096
+ *
1097
+ * // Keep only edges with weight >= 10
1098
+ * Graph.filterEdges(mutable, (data) => data >= 10)
1099
+ * })
1100
+ *
1101
+ * console.log(Graph.edgeCount(graph)) // 2 (edge with weight 5 removed)
1102
+ * ```
1103
+ *
1104
+ * @since 3.18.0
1105
+ * @category transformations
1106
+ */
1107
+ export const filterEdges = <N, E, T extends Kind = "directed">(
1108
+ mutable: MutableGraph<N, E, T>,
1109
+ predicate: (data: E) => boolean
1110
+ ): void => {
1111
+ const edgesToRemove: Array<EdgeIndex> = []
1112
+
1113
+ // Identify edges to remove
1114
+ for (const [index, edgeData] of mutable.edges) {
1115
+ if (!predicate(edgeData.data)) {
1116
+ edgesToRemove.push(index)
1117
+ }
1118
+ }
1119
+
1120
+ // Remove filtered out edges
1121
+ for (const edgeIndex of edgesToRemove) {
1122
+ removeEdge(mutable, edgeIndex)
1123
+ }
1124
+ }
1125
+
1126
+ // =============================================================================
1127
+ // Cycle Flag Management (Internal)
1128
+ // =============================================================================
1129
+
1130
+ /** @internal */
1131
+ const invalidateCycleFlagOnRemoval = <N, E, T extends Kind = "directed">(
1132
+ mutable: MutableGraph<N, E, T>
1133
+ ): void => {
1134
+ // Only invalidate if the graph had cycles (removing edges/nodes cannot introduce cycles in acyclic graphs)
1135
+ // If already unknown (null) or acyclic (true), no need to change
1136
+ if (Option.isSome(mutable.isAcyclic) && mutable.isAcyclic.value === false) {
1137
+ mutable.isAcyclic = Option.none()
1138
+ }
1139
+ }
1140
+
1141
+ /** @internal */
1142
+ const invalidateCycleFlagOnAddition = <N, E, T extends Kind = "directed">(
1143
+ mutable: MutableGraph<N, E, T>
1144
+ ): void => {
1145
+ // Only invalidate if the graph was acyclic (adding edges cannot remove cycles from cyclic graphs)
1146
+ // If already unknown (null) or cyclic (false), no need to change
1147
+ if (Option.isSome(mutable.isAcyclic) && mutable.isAcyclic.value === true) {
1148
+ mutable.isAcyclic = Option.none()
1149
+ }
1150
+ }
1151
+
1152
+ // =============================================================================
1153
+ // Edge Operations
1154
+ // =============================================================================
1155
+
1156
+ /**
1157
+ * Adds a new edge to a mutable graph and returns its index.
1158
+ *
1159
+ * @example
1160
+ * ```ts
1161
+ * import { Graph } from "effect"
1162
+ *
1163
+ * const result = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
1164
+ * const nodeA = Graph.addNode(mutable, "Node A")
1165
+ * const nodeB = Graph.addNode(mutable, "Node B")
1166
+ * const edge = Graph.addEdge(mutable, nodeA, nodeB, 42)
1167
+ * console.log(edge) // EdgeIndex with value 0
1168
+ * })
1169
+ * ```
1170
+ *
1171
+ * @since 3.18.0
1172
+ * @category mutations
1173
+ */
1174
+ export const addEdge = <N, E, T extends Kind = "directed">(
1175
+ mutable: MutableGraph<N, E, T>,
1176
+ source: NodeIndex,
1177
+ target: NodeIndex,
1178
+ data: E
1179
+ ): EdgeIndex => {
1180
+ // Validate that both nodes exist
1181
+ if (!mutable.nodes.has(source)) {
1182
+ throw missingNode(source)
1183
+ }
1184
+ if (!mutable.nodes.has(target)) {
1185
+ throw missingNode(target)
1186
+ }
1187
+
1188
+ const edgeIndex = mutable.nextEdgeIndex
1189
+
1190
+ // Create edge data
1191
+ const edgeData = new Edge({ source, target, data })
1192
+ mutable.edges.set(edgeIndex, edgeData)
1193
+
1194
+ // Update adjacency lists
1195
+ const sourceAdjacency = mutable.adjacency.get(source)
1196
+ if (sourceAdjacency !== undefined) {
1197
+ sourceAdjacency.push(edgeIndex)
1198
+ }
1199
+
1200
+ const targetReverseAdjacency = mutable.reverseAdjacency.get(target)
1201
+ if (targetReverseAdjacency !== undefined) {
1202
+ targetReverseAdjacency.push(edgeIndex)
1203
+ }
1204
+
1205
+ // For undirected graphs, add reverse connections
1206
+ if (mutable.type === "undirected") {
1207
+ const targetAdjacency = mutable.adjacency.get(target)
1208
+ if (targetAdjacency !== undefined) {
1209
+ targetAdjacency.push(edgeIndex)
1210
+ }
1211
+
1212
+ const sourceReverseAdjacency = mutable.reverseAdjacency.get(source)
1213
+ if (sourceReverseAdjacency !== undefined) {
1214
+ sourceReverseAdjacency.push(edgeIndex)
1215
+ }
1216
+ }
1217
+
1218
+ // Update allocators
1219
+ mutable.nextEdgeIndex = mutable.nextEdgeIndex + 1
1220
+
1221
+ // Only invalidate cycle flag if the graph was acyclic
1222
+ // Adding edges cannot remove cycles from cyclic graphs
1223
+ invalidateCycleFlagOnAddition(mutable)
1224
+
1225
+ return edgeIndex
1226
+ }
1227
+
1228
+ /**
1229
+ * Removes a node and all its incident edges from a mutable graph.
1230
+ *
1231
+ * @example
1232
+ * ```ts
1233
+ * import { Graph } from "effect"
1234
+ *
1235
+ * const result = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
1236
+ * const nodeA = Graph.addNode(mutable, "Node A")
1237
+ * const nodeB = Graph.addNode(mutable, "Node B")
1238
+ * Graph.addEdge(mutable, nodeA, nodeB, 42)
1239
+ *
1240
+ * // Remove nodeA and all edges connected to it
1241
+ * Graph.removeNode(mutable, nodeA)
1242
+ * })
1243
+ * ```
1244
+ *
1245
+ * @since 3.18.0
1246
+ * @category mutations
1247
+ */
1248
+ export const removeNode = <N, E, T extends Kind = "directed">(
1249
+ mutable: MutableGraph<N, E, T>,
1250
+ nodeIndex: NodeIndex
1251
+ ): void => {
1252
+ // Check if node exists
1253
+ if (!mutable.nodes.has(nodeIndex)) {
1254
+ return // Node doesn't exist, nothing to remove
1255
+ }
1256
+
1257
+ // Collect all incident edges for removal
1258
+ const edgesToRemove: Array<EdgeIndex> = []
1259
+
1260
+ // Get outgoing edges
1261
+ const outgoingEdges = mutable.adjacency.get(nodeIndex)
1262
+ if (outgoingEdges !== undefined) {
1263
+ for (const edge of outgoingEdges) {
1264
+ edgesToRemove.push(edge)
1265
+ }
1266
+ }
1267
+
1268
+ // Get incoming edges
1269
+ const incomingEdges = mutable.reverseAdjacency.get(nodeIndex)
1270
+ if (incomingEdges !== undefined) {
1271
+ for (const edge of incomingEdges) {
1272
+ edgesToRemove.push(edge)
1273
+ }
1274
+ }
1275
+
1276
+ // Remove all incident edges
1277
+ for (const edgeIndex of edgesToRemove) {
1278
+ removeEdgeInternal(mutable, edgeIndex)
1279
+ }
1280
+
1281
+ // Remove the node itself
1282
+ mutable.nodes.delete(nodeIndex)
1283
+ mutable.adjacency.delete(nodeIndex)
1284
+ mutable.reverseAdjacency.delete(nodeIndex)
1285
+
1286
+ // Only invalidate cycle flag if the graph wasn't already known to be acyclic
1287
+ // Removing nodes cannot introduce cycles in an acyclic graph
1288
+ invalidateCycleFlagOnRemoval(mutable)
1289
+ }
1290
+
1291
+ /**
1292
+ * Removes an edge from a mutable graph.
1293
+ *
1294
+ * @example
1295
+ * ```ts
1296
+ * import { Graph } from "effect"
1297
+ *
1298
+ * const result = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
1299
+ * const nodeA = Graph.addNode(mutable, "Node A")
1300
+ * const nodeB = Graph.addNode(mutable, "Node B")
1301
+ * const edge = Graph.addEdge(mutable, nodeA, nodeB, 42)
1302
+ *
1303
+ * // Remove the edge
1304
+ * Graph.removeEdge(mutable, edge)
1305
+ * })
1306
+ * ```
1307
+ *
1308
+ * @since 3.18.0
1309
+ * @category mutations
1310
+ */
1311
+ export const removeEdge = <N, E, T extends Kind = "directed">(
1312
+ mutable: MutableGraph<N, E, T>,
1313
+ edgeIndex: EdgeIndex
1314
+ ): void => {
1315
+ const wasRemoved = removeEdgeInternal(mutable, edgeIndex)
1316
+
1317
+ // Only invalidate cycle flag if an edge was actually removed
1318
+ // and only if the graph wasn't already known to be acyclic
1319
+ if (wasRemoved) {
1320
+ invalidateCycleFlagOnRemoval(mutable)
1321
+ }
1322
+ }
1323
+
1324
+ /** @internal */
1325
+ const removeEdgeInternal = <N, E, T extends Kind = "directed">(
1326
+ mutable: MutableGraph<N, E, T>,
1327
+ edgeIndex: EdgeIndex
1328
+ ): boolean => {
1329
+ // Get edge data
1330
+ const edge = mutable.edges.get(edgeIndex)
1331
+ if (edge === undefined) {
1332
+ return false // Edge doesn't exist, no mutation occurred
1333
+ }
1334
+
1335
+ const { source, target } = edge
1336
+
1337
+ // Remove from adjacency lists
1338
+ const sourceAdjacency = mutable.adjacency.get(source)
1339
+ if (sourceAdjacency !== undefined) {
1340
+ const index = sourceAdjacency.indexOf(edgeIndex)
1341
+ if (index !== -1) {
1342
+ sourceAdjacency.splice(index, 1)
1343
+ }
1344
+ }
1345
+
1346
+ const targetReverseAdjacency = mutable.reverseAdjacency.get(target)
1347
+ if (targetReverseAdjacency !== undefined) {
1348
+ const index = targetReverseAdjacency.indexOf(edgeIndex)
1349
+ if (index !== -1) {
1350
+ targetReverseAdjacency.splice(index, 1)
1351
+ }
1352
+ }
1353
+
1354
+ // For undirected graphs, remove reverse connections
1355
+ if (mutable.type === "undirected") {
1356
+ const targetAdjacency = mutable.adjacency.get(target)
1357
+ if (targetAdjacency !== undefined) {
1358
+ const index = targetAdjacency.indexOf(edgeIndex)
1359
+ if (index !== -1) {
1360
+ targetAdjacency.splice(index, 1)
1361
+ }
1362
+ }
1363
+
1364
+ const sourceReverseAdjacency = mutable.reverseAdjacency.get(source)
1365
+ if (sourceReverseAdjacency !== undefined) {
1366
+ const index = sourceReverseAdjacency.indexOf(edgeIndex)
1367
+ if (index !== -1) {
1368
+ sourceReverseAdjacency.splice(index, 1)
1369
+ }
1370
+ }
1371
+ }
1372
+
1373
+ // Remove edge data
1374
+ mutable.edges.delete(edgeIndex)
1375
+
1376
+ return true // Edge was successfully removed
1377
+ }
1378
+
1379
+ // =============================================================================
1380
+ // Edge Query Operations
1381
+ // =============================================================================
1382
+
1383
+ /**
1384
+ * Gets the edge data associated with an edge index, if it exists.
1385
+ *
1386
+ * @example
1387
+ * ```ts
1388
+ * import { Graph, Option } from "effect"
1389
+ *
1390
+ * const graph = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
1391
+ * const nodeA = Graph.addNode(mutable, "Node A")
1392
+ * const nodeB = Graph.addNode(mutable, "Node B")
1393
+ * Graph.addEdge(mutable, nodeA, nodeB, 42)
1394
+ * })
1395
+ *
1396
+ * const edgeIndex = 0
1397
+ * const edgeData = Graph.getEdge(graph, edgeIndex)
1398
+ *
1399
+ * if (Option.isSome(edgeData)) {
1400
+ * console.log(edgeData.value.data) // 42
1401
+ * console.log(edgeData.value.source) // NodeIndex(0)
1402
+ * console.log(edgeData.value.target) // NodeIndex(1)
1403
+ * }
1404
+ * ```
1405
+ *
1406
+ * @since 3.18.0
1407
+ * @category getters
1408
+ */
1409
+ export const getEdge = <N, E, T extends Kind = "directed">(
1410
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
1411
+ edgeIndex: EdgeIndex
1412
+ ): Option.Option<Edge<E>> => graph.edges.has(edgeIndex) ? Option.some(graph.edges.get(edgeIndex)!) : Option.none()
1413
+
1414
+ /**
1415
+ * Checks if an edge exists between two nodes in the graph.
1416
+ *
1417
+ * @example
1418
+ * ```ts
1419
+ * import { Graph } from "effect"
1420
+ *
1421
+ * const graph = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
1422
+ * const nodeA = Graph.addNode(mutable, "Node A")
1423
+ * const nodeB = Graph.addNode(mutable, "Node B")
1424
+ * const nodeC = Graph.addNode(mutable, "Node C")
1425
+ * Graph.addEdge(mutable, nodeA, nodeB, 42)
1426
+ * })
1427
+ *
1428
+ * const nodeA = 0
1429
+ * const nodeB = 1
1430
+ * const nodeC = 2
1431
+ *
1432
+ * const hasAB = Graph.hasEdge(graph, nodeA, nodeB)
1433
+ * console.log(hasAB) // true
1434
+ *
1435
+ * const hasAC = Graph.hasEdge(graph, nodeA, nodeC)
1436
+ * console.log(hasAC) // false
1437
+ * ```
1438
+ *
1439
+ * @since 3.18.0
1440
+ * @category getters
1441
+ */
1442
+ export const hasEdge = <N, E, T extends Kind = "directed">(
1443
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
1444
+ source: NodeIndex,
1445
+ target: NodeIndex
1446
+ ): boolean => {
1447
+ const adjacencyList = graph.adjacency.get(source)
1448
+ if (adjacencyList === undefined) {
1449
+ return false
1450
+ }
1451
+
1452
+ // Check if any edge in the adjacency list connects to the target
1453
+ for (const edgeIndex of adjacencyList) {
1454
+ const edge = graph.edges.get(edgeIndex)
1455
+ if (edge !== undefined && edge.target === target) {
1456
+ return true
1457
+ }
1458
+ }
1459
+
1460
+ return false
1461
+ }
1462
+
1463
+ /**
1464
+ * Returns the number of edges in the graph.
1465
+ *
1466
+ * @example
1467
+ * ```ts
1468
+ * import { Graph } from "effect"
1469
+ *
1470
+ * const emptyGraph = Graph.directed<string, number>()
1471
+ * console.log(Graph.edgeCount(emptyGraph)) // 0
1472
+ *
1473
+ * const graphWithEdges = Graph.mutate(emptyGraph, (mutable) => {
1474
+ * const nodeA = Graph.addNode(mutable, "Node A")
1475
+ * const nodeB = Graph.addNode(mutable, "Node B")
1476
+ * const nodeC = Graph.addNode(mutable, "Node C")
1477
+ * Graph.addEdge(mutable, nodeA, nodeB, 1)
1478
+ * Graph.addEdge(mutable, nodeB, nodeC, 2)
1479
+ * Graph.addEdge(mutable, nodeC, nodeA, 3)
1480
+ * })
1481
+ *
1482
+ * console.log(Graph.edgeCount(graphWithEdges)) // 3
1483
+ * ```
1484
+ *
1485
+ * @since 3.18.0
1486
+ * @category getters
1487
+ */
1488
+ export const edgeCount = <N, E, T extends Kind = "directed">(
1489
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>
1490
+ ): number => graph.edges.size
1491
+
1492
+ /**
1493
+ * Returns the neighboring nodes (targets of outgoing edges) for a given node.
1494
+ *
1495
+ * @example
1496
+ * ```ts
1497
+ * import { Graph } from "effect"
1498
+ *
1499
+ * const graph = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
1500
+ * const nodeA = Graph.addNode(mutable, "Node A")
1501
+ * const nodeB = Graph.addNode(mutable, "Node B")
1502
+ * const nodeC = Graph.addNode(mutable, "Node C")
1503
+ * Graph.addEdge(mutable, nodeA, nodeB, 1)
1504
+ * Graph.addEdge(mutable, nodeA, nodeC, 2)
1505
+ * })
1506
+ *
1507
+ * const nodeA = 0
1508
+ * const nodeB = 1
1509
+ * const nodeC = 2
1510
+ *
1511
+ * const neighborsA = Graph.neighbors(graph, nodeA)
1512
+ * console.log(neighborsA) // [NodeIndex(1), NodeIndex(2)]
1513
+ *
1514
+ * const neighborsB = Graph.neighbors(graph, nodeB)
1515
+ * console.log(neighborsB) // []
1516
+ * ```
1517
+ *
1518
+ * @since 3.18.0
1519
+ * @category getters
1520
+ */
1521
+ export const neighbors = <N, E, T extends Kind = "directed">(
1522
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
1523
+ nodeIndex: NodeIndex
1524
+ ): Array<NodeIndex> => {
1525
+ // For undirected graphs, use the specialized helper that returns the other endpoint
1526
+ if (graph.type === "undirected") {
1527
+ return getUndirectedNeighbors(graph as any, nodeIndex)
1528
+ }
1529
+
1530
+ const adjacencyList = graph.adjacency.get(nodeIndex)
1531
+ if (adjacencyList === undefined) {
1532
+ return []
1533
+ }
1534
+
1535
+ const result: Array<NodeIndex> = []
1536
+ for (const edgeIndex of adjacencyList) {
1537
+ const edge = graph.edges.get(edgeIndex)
1538
+ if (edge !== undefined) {
1539
+ result.push(edge.target)
1540
+ }
1541
+ }
1542
+
1543
+ return result
1544
+ }
1545
+
1546
+ /**
1547
+ * Get neighbors of a node in a specific direction for bidirectional traversal.
1548
+ *
1549
+ * @example
1550
+ * ```ts
1551
+ * import { Graph } from "effect"
1552
+ *
1553
+ * const graph = Graph.directed<string, string>((mutable) => {
1554
+ * const a = Graph.addNode(mutable, "A")
1555
+ * const b = Graph.addNode(mutable, "B")
1556
+ * Graph.addEdge(mutable, a, b, "A->B")
1557
+ * })
1558
+ *
1559
+ * const nodeA = 0
1560
+ * const nodeB = 1
1561
+ *
1562
+ * // Get outgoing neighbors (nodes that nodeA points to)
1563
+ * const outgoing = Graph.neighborsDirected(graph, nodeA, "outgoing")
1564
+ *
1565
+ * // Get incoming neighbors (nodes that point to nodeB)
1566
+ * const incoming = Graph.neighborsDirected(graph, nodeB, "incoming")
1567
+ * ```
1568
+ *
1569
+ * @since 3.18.0
1570
+ * @category queries
1571
+ */
1572
+ export const neighborsDirected = <N, E, T extends Kind = "directed">(
1573
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
1574
+ nodeIndex: NodeIndex,
1575
+ direction: Direction
1576
+ ): Array<NodeIndex> => {
1577
+ const adjacencyMap = direction === "incoming"
1578
+ ? graph.reverseAdjacency
1579
+ : graph.adjacency
1580
+
1581
+ const adjacencyList = adjacencyMap.get(nodeIndex)
1582
+ if (adjacencyList === undefined) {
1583
+ return []
1584
+ }
1585
+
1586
+ const result: Array<NodeIndex> = []
1587
+ for (const edgeIndex of adjacencyList) {
1588
+ const edge = graph.edges.get(edgeIndex)
1589
+ if (edge !== undefined) {
1590
+ // For incoming direction, we want the source node instead of target
1591
+ const neighborNode = direction === "incoming"
1592
+ ? edge.source
1593
+ : edge.target
1594
+ result.push(neighborNode)
1595
+ }
1596
+ }
1597
+
1598
+ return result
1599
+ }
1600
+
1601
+ // =============================================================================
1602
+ // GraphViz Export
1603
+ // =============================================================================
1604
+
1605
+ /**
1606
+ * Configuration options for GraphViz DOT format generation from graphs.
1607
+ *
1608
+ * @since 3.18.0
1609
+ * @category models
1610
+ */
1611
+ export interface GraphVizOptions<N, E> {
1612
+ readonly nodeLabel?: (data: N) => string
1613
+ readonly edgeLabel?: (data: E) => string
1614
+ readonly graphName?: string
1615
+ }
1616
+
1617
+ /**
1618
+ * Exports a graph to GraphViz DOT format for visualization.
1619
+ *
1620
+ * @example
1621
+ * ```ts
1622
+ * import { Graph } from "effect"
1623
+ *
1624
+ * const graph = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
1625
+ * const nodeA = Graph.addNode(mutable, "Node A")
1626
+ * const nodeB = Graph.addNode(mutable, "Node B")
1627
+ * const nodeC = Graph.addNode(mutable, "Node C")
1628
+ * Graph.addEdge(mutable, nodeA, nodeB, 1)
1629
+ * Graph.addEdge(mutable, nodeB, nodeC, 2)
1630
+ * Graph.addEdge(mutable, nodeC, nodeA, 3)
1631
+ * })
1632
+ *
1633
+ * const dot = Graph.toGraphViz(graph)
1634
+ * console.log(dot)
1635
+ * // digraph G {
1636
+ * // "0" [label="Node A"];
1637
+ * // "1" [label="Node B"];
1638
+ * // "2" [label="Node C"];
1639
+ * // "0" -> "1" [label="1"];
1640
+ * // "1" -> "2" [label="2"];
1641
+ * // "2" -> "0" [label="3"];
1642
+ * // }
1643
+ * ```
1644
+ *
1645
+ * @since 3.18.0
1646
+ * @category utils
1647
+ */
1648
+ export const toGraphViz = <N, E, T extends Kind = "directed">(
1649
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
1650
+ options?: GraphVizOptions<N, E>
1651
+ ): string => {
1652
+ const {
1653
+ edgeLabel = (data: E) => String(data),
1654
+ graphName = "G",
1655
+ nodeLabel = (data: N) => String(data)
1656
+ } = options ?? {}
1657
+
1658
+ const isDirected = graph.type === "directed"
1659
+ const graphType = isDirected ? "digraph" : "graph"
1660
+ const edgeOperator = isDirected ? "->" : "--"
1661
+
1662
+ const lines: Array<string> = []
1663
+ lines.push(`${graphType} ${graphName} {`)
1664
+
1665
+ // Add nodes
1666
+ for (const [nodeIndex, nodeData] of graph.nodes) {
1667
+ const label = nodeLabel(nodeData).replace(/"/g, "\\\"")
1668
+ lines.push(` "${nodeIndex}" [label="${label}"];`)
1669
+ }
1670
+
1671
+ // Add edges
1672
+ for (const [, edgeData] of graph.edges) {
1673
+ const label = edgeLabel(edgeData.data).replace(/"/g, "\\\"")
1674
+ lines.push(` "${edgeData.source}" ${edgeOperator} "${edgeData.target}" [label="${label}"];`)
1675
+ }
1676
+
1677
+ lines.push("}")
1678
+ return lines.join("\n")
1679
+ }
1680
+
1681
+ // =============================================================================
1682
+ // Mermaid Export
1683
+ // =============================================================================
1684
+
1685
+ /**
1686
+ * Mermaid node shape types.
1687
+ *
1688
+ * @since 3.18.0
1689
+ * @category models
1690
+ */
1691
+ export type MermaidNodeShape =
1692
+ | "rectangle"
1693
+ | "rounded"
1694
+ | "circle"
1695
+ | "diamond"
1696
+ | "hexagon"
1697
+ | "stadium"
1698
+ | "subroutine"
1699
+ | "cylindrical"
1700
+
1701
+ /**
1702
+ * Mermaid diagram direction types.
1703
+ *
1704
+ * @since 3.18.0
1705
+ * @category models
1706
+ */
1707
+ export type MermaidDirection = "TB" | "TD" | "BT" | "LR" | "RL"
1708
+
1709
+ /**
1710
+ * Mermaid diagram type.
1711
+ *
1712
+ * @since 3.18.0
1713
+ * @category models
1714
+ */
1715
+ export type MermaidDiagramType = "flowchart" | "graph"
1716
+
1717
+ /**
1718
+ * Configuration options for Mermaid diagram generation.
1719
+ *
1720
+ * @since 3.18.0
1721
+ * @category models
1722
+ */
1723
+ export interface MermaidOptions<N, E> {
1724
+ readonly nodeLabel?: (data: N) => string
1725
+ readonly edgeLabel?: (data: E) => string
1726
+ readonly diagramType?: MermaidDiagramType
1727
+ readonly direction?: MermaidDirection
1728
+ readonly nodeShape?: (data: N) => MermaidNodeShape
1729
+ }
1730
+
1731
+ /** @internal */
1732
+ const escapeMermaidLabel = (label: string): string => {
1733
+ // Escape special characters for Mermaid using HTML entity codes
1734
+ // According to: https://mermaid.js.org/syntax/flowchart.html#special-characters-that-break-syntax
1735
+ return label
1736
+ .replace(/#/g, "#35;")
1737
+ .replace(/"/g, "#quot;")
1738
+ .replace(/</g, "#lt;")
1739
+ .replace(/>/g, "#gt;")
1740
+ .replace(/&/g, "#amp;")
1741
+ .replace(/\[/g, "#91;")
1742
+ .replace(/\]/g, "#93;")
1743
+ .replace(/\{/g, "#123;")
1744
+ .replace(/\}/g, "#125;")
1745
+ .replace(/\(/g, "#40;")
1746
+ .replace(/\)/g, "#41;")
1747
+ .replace(/\|/g, "#124;")
1748
+ .replace(/\\/g, "#92;")
1749
+ .replace(/\n/g, "<br/>");
1750
+ }
1751
+
1752
+ /** @internal */
1753
+ const formatMermaidNode = (nodeId: string, label: string, shape: MermaidNodeShape): string => {
1754
+ switch (shape) {
1755
+ case "rectangle":
1756
+ return `${nodeId}["${label}"]`
1757
+ case "rounded":
1758
+ return `${nodeId}("${label}")`
1759
+ case "circle":
1760
+ return `${nodeId}(("${label}"))`
1761
+ case "diamond":
1762
+ return `${nodeId}{"${label}"}`
1763
+ case "hexagon":
1764
+ return `${nodeId}{{"${label}"}}`
1765
+ case "stadium":
1766
+ return `${nodeId}(["${label}"])`
1767
+ case "subroutine":
1768
+ return `${nodeId}[["${label}"]]`
1769
+ case "cylindrical":
1770
+ return `${nodeId}[("${label}")]`
1771
+ }
1772
+ }
1773
+
1774
+ /**
1775
+ * Exports a graph to Mermaid diagram format for visualization.
1776
+ *
1777
+ * @example
1778
+ * ```ts
1779
+ * import { Graph } from "effect"
1780
+ *
1781
+ * const graph = Graph.mutate(Graph.directed<string, number>(), (mutable) => {
1782
+ * const app = Graph.addNode(mutable, "App")
1783
+ * const db = Graph.addNode(mutable, "Database")
1784
+ * const cache = Graph.addNode(mutable, "Cache")
1785
+ * Graph.addEdge(mutable, app, db, 1)
1786
+ * Graph.addEdge(mutable, app, cache, 2)
1787
+ * })
1788
+ *
1789
+ * const mermaid = Graph.toMermaid(graph)
1790
+ * console.log(mermaid)
1791
+ * // flowchart TD
1792
+ * // 0["App"]
1793
+ * // 1["Database"]
1794
+ * // 2["Cache"]
1795
+ * // 0 -->|"1"| 1
1796
+ * // 0 -->|"2"| 2
1797
+ * ```
1798
+ *
1799
+ * @since 3.18.0
1800
+ * @category utils
1801
+ */
1802
+ export const toMermaid = <N, E, T extends Kind = "directed">(
1803
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
1804
+ options?: MermaidOptions<N, E>
1805
+ ): string => {
1806
+ // Extract and validate options with defaults
1807
+ const {
1808
+ diagramType,
1809
+ direction = "TD",
1810
+ edgeLabel = (data: E) => String(data),
1811
+ nodeLabel = (data: N) => String(data),
1812
+ nodeShape = () => "rectangle" as const
1813
+ } = options ?? {}
1814
+
1815
+ // Auto-detect diagram type if not specified
1816
+ const finalDiagramType = diagramType ??
1817
+ (graph.type === "directed" ? "flowchart" : "graph")
1818
+
1819
+ // Generate diagram header
1820
+ const lines: Array<string> = []
1821
+ lines.push(`${finalDiagramType} ${direction}`)
1822
+
1823
+ // Add nodes
1824
+ for (const [nodeIndex, nodeData] of graph.nodes) {
1825
+ const nodeId = String(nodeIndex)
1826
+ const label = escapeMermaidLabel(nodeLabel(nodeData))
1827
+ const shape = nodeShape(nodeData)
1828
+ const formattedNode = formatMermaidNode(nodeId, label, shape)
1829
+ lines.push(` ${formattedNode}`)
1830
+ }
1831
+
1832
+ // Add edges
1833
+ const edgeOperator = finalDiagramType === "flowchart" ? "-->" : "---"
1834
+ for (const [, edgeData] of graph.edges) {
1835
+ const sourceId = String(edgeData.source)
1836
+ const targetId = String(edgeData.target)
1837
+ const label = escapeMermaidLabel(edgeLabel(edgeData.data))
1838
+
1839
+ if (label) {
1840
+ lines.push(` ${sourceId} ${edgeOperator}|"${label}"| ${targetId}`)
1841
+ } else {
1842
+ lines.push(` ${sourceId} ${edgeOperator} ${targetId}`)
1843
+ }
1844
+ }
1845
+
1846
+ return lines.join("\n")
1847
+ }
1848
+
1849
+ // =============================================================================
1850
+ // Direction Types for Bidirectional Traversal
1851
+ // =============================================================================
1852
+
1853
+ /**
1854
+ * Direction for graph traversal, indicating which edges to follow.
1855
+ *
1856
+ * @example
1857
+ * ```ts
1858
+ * import { Graph } from "effect"
1859
+ *
1860
+ * const graph = Graph.directed<string, string>((mutable) => {
1861
+ * const a = Graph.addNode(mutable, "A")
1862
+ * const b = Graph.addNode(mutable, "B")
1863
+ * Graph.addEdge(mutable, a, b, "A->B")
1864
+ * })
1865
+ *
1866
+ * // Follow outgoing edges (normal direction)
1867
+ * const outgoingNodes = Array.from(Graph.indices(Graph.dfs(graph, { start: [0], direction: "outgoing" })))
1868
+ *
1869
+ * // Follow incoming edges (reverse direction)
1870
+ * const incomingNodes = Array.from(Graph.indices(Graph.dfs(graph, { start: [1], direction: "incoming" })))
1871
+ * ```
1872
+ *
1873
+ * @since 3.18.0
1874
+ * @category models
1875
+ */
1876
+ export type Direction = "outgoing" | "incoming"
1877
+
1878
+ // =============================================================================
1879
+
1880
+ // =============================================================================
1881
+ // Graph Structure Analysis Algorithms (Phase 5A)
1882
+ // =============================================================================
1883
+
1884
+ /**
1885
+ * Checks if the graph is acyclic (contains no cycles).
1886
+ *
1887
+ * Uses depth-first search to detect back edges, which indicate cycles.
1888
+ * For directed graphs, any back edge creates a cycle. For undirected graphs,
1889
+ * a back edge that doesn't go to the immediate parent creates a cycle.
1890
+ *
1891
+ * @example
1892
+ * ```ts
1893
+ * import { Graph } from "effect"
1894
+ *
1895
+ * // Acyclic directed graph (DAG)
1896
+ * const dag = Graph.directed<string, string>((mutable) => {
1897
+ * const a = Graph.addNode(mutable, "A")
1898
+ * const b = Graph.addNode(mutable, "B")
1899
+ * const c = Graph.addNode(mutable, "C")
1900
+ * Graph.addEdge(mutable, a, b, "A->B")
1901
+ * Graph.addEdge(mutable, b, c, "B->C")
1902
+ * })
1903
+ * console.log(Graph.isAcyclic(dag)) // true
1904
+ *
1905
+ * // Cyclic directed graph
1906
+ * const cyclic = Graph.directed<string, string>((mutable) => {
1907
+ * const a = Graph.addNode(mutable, "A")
1908
+ * const b = Graph.addNode(mutable, "B")
1909
+ * Graph.addEdge(mutable, a, b, "A->B")
1910
+ * Graph.addEdge(mutable, b, a, "B->A") // Creates cycle
1911
+ * })
1912
+ * console.log(Graph.isAcyclic(cyclic)) // false
1913
+ * ```
1914
+ *
1915
+ * @since 3.18.0
1916
+ * @category algorithms
1917
+ */
1918
+ export const isAcyclic = <N, E, T extends Kind = "directed">(
1919
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>
1920
+ ): boolean => {
1921
+ // Use existing cycle flag if available
1922
+ if (Option.isSome(graph.isAcyclic)) {
1923
+ return graph.isAcyclic.value
1924
+ }
1925
+
1926
+ // Stack-safe DFS cycle detection using iterative approach
1927
+ const visited = new Set<NodeIndex>()
1928
+ const recursionStack = new Set<NodeIndex>()
1929
+
1930
+ // Stack entry: [node, neighbors, neighborIndex, isFirstVisit]
1931
+ type DfsStackEntry = [NodeIndex, Array<NodeIndex>, number, boolean]
1932
+
1933
+ // Get all nodes to handle disconnected components
1934
+ for (const startNode of graph.nodes.keys()) {
1935
+ if (visited.has(startNode)) {
1936
+ continue // Already processed this component
1937
+ }
1938
+
1939
+ // Iterative DFS with explicit stack
1940
+ const stack: Array<DfsStackEntry> = [[startNode, [], 0, true]]
1941
+
1942
+ while (stack.length > 0) {
1943
+ const [node, neighbors, neighborIndex, isFirstVisit] = stack[stack.length - 1]
1944
+
1945
+ // First visit to this node
1946
+ if (isFirstVisit) {
1947
+ if (recursionStack.has(node)) {
1948
+ // Back edge found - cycle detected
1949
+ graph.isAcyclic = Option.some(false)
1950
+ return false
1951
+ }
1952
+
1953
+ if (visited.has(node)) {
1954
+ stack.pop()
1955
+ continue
1956
+ }
1957
+
1958
+ visited.add(node)
1959
+ recursionStack.add(node)
1960
+
1961
+ // Get neighbors for this node
1962
+ const nodeNeighbors = Array.from(neighborsDirected(graph, node, "outgoing"))
1963
+ stack[stack.length - 1] = [node, nodeNeighbors, 0, false]
1964
+ continue
1965
+ }
1966
+
1967
+ // Process next neighbor
1968
+ if (neighborIndex < neighbors.length) {
1969
+ const neighbor = neighbors[neighborIndex]
1970
+ stack[stack.length - 1] = [node, neighbors, neighborIndex + 1, false]
1971
+
1972
+ if (recursionStack.has(neighbor)) {
1973
+ // Back edge found - cycle detected
1974
+ graph.isAcyclic = Option.some(false)
1975
+ return false
1976
+ }
1977
+
1978
+ if (!visited.has(neighbor)) {
1979
+ stack.push([neighbor, [], 0, true])
1980
+ }
1981
+ } else {
1982
+ // Done with this node - backtrack
1983
+ recursionStack.delete(node)
1984
+ stack.pop()
1985
+ }
1986
+ }
1987
+ }
1988
+
1989
+ // Cache the result
1990
+ graph.isAcyclic = Option.some(true)
1991
+ return true
1992
+ }
1993
+
1994
+ /**
1995
+ * Checks if an undirected graph is bipartite.
1996
+ *
1997
+ * A bipartite graph is one whose vertices can be divided into two disjoint sets
1998
+ * such that no two vertices within the same set are adjacent. Uses BFS coloring
1999
+ * to determine bipartiteness.
2000
+ *
2001
+ * @example
2002
+ * ```ts
2003
+ * import { Graph } from "effect"
2004
+ *
2005
+ * // Bipartite graph (alternating coloring possible)
2006
+ * const bipartite = Graph.undirected<string, string>((mutable) => {
2007
+ * const a = Graph.addNode(mutable, "A")
2008
+ * const b = Graph.addNode(mutable, "B")
2009
+ * const c = Graph.addNode(mutable, "C")
2010
+ * const d = Graph.addNode(mutable, "D")
2011
+ * Graph.addEdge(mutable, a, b, "edge") // Set 1: {A, C}, Set 2: {B, D}
2012
+ * Graph.addEdge(mutable, b, c, "edge")
2013
+ * Graph.addEdge(mutable, c, d, "edge")
2014
+ * })
2015
+ * console.log(Graph.isBipartite(bipartite)) // true
2016
+ *
2017
+ * // Non-bipartite graph (odd cycle)
2018
+ * const triangle = Graph.undirected<string, string>((mutable) => {
2019
+ * const a = Graph.addNode(mutable, "A")
2020
+ * const b = Graph.addNode(mutable, "B")
2021
+ * const c = Graph.addNode(mutable, "C")
2022
+ * Graph.addEdge(mutable, a, b, "edge")
2023
+ * Graph.addEdge(mutable, b, c, "edge")
2024
+ * Graph.addEdge(mutable, c, a, "edge") // Triangle (3-cycle)
2025
+ * })
2026
+ * console.log(Graph.isBipartite(triangle)) // false
2027
+ * ```
2028
+ *
2029
+ * @since 3.18.0
2030
+ * @category algorithms
2031
+ */
2032
+ export const isBipartite = <N, E>(
2033
+ graph: Graph<N, E, "undirected"> | MutableGraph<N, E, "undirected">
2034
+ ): boolean => {
2035
+ const coloring = new Map<NodeIndex, 0 | 1>()
2036
+ const discovered = new Set<NodeIndex>()
2037
+ let isBipartiteGraph = true
2038
+
2039
+ // Get all nodes to handle disconnected components
2040
+ for (const startNode of graph.nodes.keys()) {
2041
+ if (!discovered.has(startNode)) {
2042
+ // Start BFS coloring from this component
2043
+ const queue: Array<NodeIndex> = [startNode]
2044
+ coloring.set(startNode, 0) // Color start node with 0
2045
+ discovered.add(startNode)
2046
+
2047
+ while (queue.length > 0 && isBipartiteGraph) {
2048
+ const current = queue.shift()!
2049
+ const currentColor = coloring.get(current)!
2050
+ const neighborColor: 0 | 1 = currentColor === 0 ? 1 : 0
2051
+
2052
+ // Get all neighbors for undirected graph
2053
+ const nodeNeighbors = getUndirectedNeighbors(graph, current)
2054
+ for (const neighbor of nodeNeighbors) {
2055
+ if (!discovered.has(neighbor)) {
2056
+ // Color unvisited neighbor with opposite color
2057
+ coloring.set(neighbor, neighborColor)
2058
+ discovered.add(neighbor)
2059
+ queue.push(neighbor)
2060
+ } else {
2061
+ // Check if neighbor has the same color (conflict)
2062
+ if (coloring.get(neighbor) === currentColor) {
2063
+ isBipartiteGraph = false
2064
+ break
2065
+ }
2066
+ }
2067
+ }
2068
+ }
2069
+
2070
+ // Early exit if not bipartite
2071
+ if (!isBipartiteGraph) {
2072
+ break
2073
+ }
2074
+ }
2075
+ }
2076
+
2077
+ return isBipartiteGraph
2078
+ }
2079
+
2080
+ /**
2081
+ * Get neighbors for undirected graphs by checking both adjacency and reverse adjacency.
2082
+ * For undirected graphs, we need to find the other endpoint of each edge incident to the node.
2083
+ */
2084
+ const getUndirectedNeighbors = <N, E>(
2085
+ graph: Graph<N, E, "undirected"> | MutableGraph<N, E, "undirected">,
2086
+ nodeIndex: NodeIndex
2087
+ ): Array<NodeIndex> => {
2088
+ const neighbors = new Set<NodeIndex>()
2089
+
2090
+ // Check edges where this node is the source
2091
+ const adjacencyList = graph.adjacency.get(nodeIndex)
2092
+ if (adjacencyList !== undefined) {
2093
+ for (const edgeIndex of adjacencyList) {
2094
+ const edge = graph.edges.get(edgeIndex)
2095
+ if (edge !== undefined) {
2096
+ // For undirected graphs, the neighbor is the other endpoint
2097
+ const otherNode = edge.source === nodeIndex ? edge.target : edge.source
2098
+ neighbors.add(otherNode)
2099
+ }
2100
+ }
2101
+ }
2102
+
2103
+ return Array.from(neighbors)
2104
+ }
2105
+
2106
+ /**
2107
+ * Find connected components in an undirected graph.
2108
+ * Each component is represented as an array of node indices.
2109
+ *
2110
+ * @example
2111
+ * ```ts
2112
+ * import { Graph } from "effect"
2113
+ *
2114
+ * const graph = Graph.undirected<string, string>((mutable) => {
2115
+ * const a = Graph.addNode(mutable, "A")
2116
+ * const b = Graph.addNode(mutable, "B")
2117
+ * const c = Graph.addNode(mutable, "C")
2118
+ * const d = Graph.addNode(mutable, "D")
2119
+ * Graph.addEdge(mutable, a, b, "edge") // Component 1: A-B
2120
+ * Graph.addEdge(mutable, c, d, "edge") // Component 2: C-D
2121
+ * })
2122
+ *
2123
+ * const components = Graph.connectedComponents(graph)
2124
+ * console.log(components) // [[0, 1], [2, 3]]
2125
+ * ```
2126
+ *
2127
+ * @since 3.18.0
2128
+ * @category algorithms
2129
+ */
2130
+ export const connectedComponents = <N, E>(
2131
+ graph: Graph<N, E, "undirected"> | MutableGraph<N, E, "undirected">
2132
+ ): Array<Array<NodeIndex>> => {
2133
+ const visited = new Set<NodeIndex>()
2134
+ const components: Array<Array<NodeIndex>> = []
2135
+ for (const startNode of graph.nodes.keys()) {
2136
+ if (!visited.has(startNode)) {
2137
+ // DFS to find all nodes in this component
2138
+ const component: Array<NodeIndex> = []
2139
+ const stack: Array<NodeIndex> = [startNode]
2140
+
2141
+ while (stack.length > 0) {
2142
+ const current = stack.pop()!
2143
+ if (!visited.has(current)) {
2144
+ visited.add(current)
2145
+ component.push(current)
2146
+
2147
+ // Add all unvisited neighbors to stack
2148
+ const nodeNeighbors = getUndirectedNeighbors(graph, current)
2149
+ for (const neighbor of nodeNeighbors) {
2150
+ if (!visited.has(neighbor)) {
2151
+ stack.push(neighbor)
2152
+ }
2153
+ }
2154
+ }
2155
+ }
2156
+
2157
+ components.push(component)
2158
+ }
2159
+ }
2160
+
2161
+ return components
2162
+ }
2163
+
2164
+ /**
2165
+ * Find strongly connected components in a directed graph using Kosaraju's algorithm.
2166
+ * Each SCC is represented as an array of node indices.
2167
+ *
2168
+ * @example
2169
+ * ```ts
2170
+ * import { Graph } from "effect"
2171
+ *
2172
+ * const graph = Graph.directed<string, string>((mutable) => {
2173
+ * const a = Graph.addNode(mutable, "A")
2174
+ * const b = Graph.addNode(mutable, "B")
2175
+ * const c = Graph.addNode(mutable, "C")
2176
+ * Graph.addEdge(mutable, a, b, "A->B")
2177
+ * Graph.addEdge(mutable, b, c, "B->C")
2178
+ * Graph.addEdge(mutable, c, a, "C->A") // Creates SCC: A-B-C
2179
+ * })
2180
+ *
2181
+ * const sccs = Graph.stronglyConnectedComponents(graph)
2182
+ * console.log(sccs) // [[0, 1, 2]]
2183
+ * ```
2184
+ *
2185
+ * @since 3.18.0
2186
+ * @category algorithms
2187
+ */
2188
+ export const stronglyConnectedComponents = <N, E, T extends Kind = "directed">(
2189
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>
2190
+ ): Array<Array<NodeIndex>> => {
2191
+ const visited = new Set<NodeIndex>()
2192
+ const finishOrder: Array<NodeIndex> = []
2193
+ // Iterate directly over node keys
2194
+
2195
+ // Step 1: Stack-safe DFS on original graph to get finish times
2196
+ // Stack entry: [node, neighbors, neighborIndex, isFirstVisit]
2197
+ type DfsStackEntry = [NodeIndex, Array<NodeIndex>, number, boolean]
2198
+
2199
+ for (const startNode of graph.nodes.keys()) {
2200
+ if (visited.has(startNode)) {
2201
+ continue
2202
+ }
2203
+
2204
+ const stack: Array<DfsStackEntry> = [[startNode, [], 0, true]]
2205
+
2206
+ while (stack.length > 0) {
2207
+ const [node, nodeNeighbors, neighborIndex, isFirstVisit] = stack[stack.length - 1]
2208
+
2209
+ if (isFirstVisit) {
2210
+ if (visited.has(node)) {
2211
+ stack.pop()
2212
+ continue
2213
+ }
2214
+
2215
+ visited.add(node)
2216
+ const nodeNeighborsList = neighbors(graph, node)
2217
+ stack[stack.length - 1] = [node, nodeNeighborsList, 0, false]
2218
+ continue
2219
+ }
2220
+
2221
+ // Process next neighbor
2222
+ if (neighborIndex < nodeNeighbors.length) {
2223
+ const neighbor = nodeNeighbors[neighborIndex]
2224
+ stack[stack.length - 1] = [node, nodeNeighbors, neighborIndex + 1, false]
2225
+
2226
+ if (!visited.has(neighbor)) {
2227
+ stack.push([neighbor, [], 0, true])
2228
+ }
2229
+ } else {
2230
+ // Done with this node - add to finish order (post-order)
2231
+ finishOrder.push(node)
2232
+ stack.pop()
2233
+ }
2234
+ }
2235
+ }
2236
+
2237
+ // Step 2: Stack-safe DFS on transpose graph in reverse finish order
2238
+ visited.clear()
2239
+ const sccs: Array<Array<NodeIndex>> = []
2240
+
2241
+ for (let i = finishOrder.length - 1; i >= 0; i--) {
2242
+ const startNode = finishOrder[i]
2243
+ if (visited.has(startNode)) {
2244
+ continue
2245
+ }
2246
+
2247
+ const scc: Array<NodeIndex> = []
2248
+ const stack: Array<NodeIndex> = [startNode]
2249
+
2250
+ while (stack.length > 0) {
2251
+ const node = stack.pop()!
2252
+
2253
+ if (visited.has(node)) {
2254
+ continue
2255
+ }
2256
+
2257
+ visited.add(node)
2258
+ scc.push(node)
2259
+
2260
+ // Use reverse adjacency (transpose graph)
2261
+ const reverseAdjacency = graph.reverseAdjacency.get(node)
2262
+ if (reverseAdjacency !== undefined) {
2263
+ for (const edgeIndex of reverseAdjacency) {
2264
+ const edge = graph.edges.get(edgeIndex)
2265
+ if (edge !== undefined) {
2266
+ const predecessor = edge.source
2267
+ if (!visited.has(predecessor)) {
2268
+ stack.push(predecessor)
2269
+ }
2270
+ }
2271
+ }
2272
+ }
2273
+ }
2274
+
2275
+ sccs.push(scc)
2276
+ }
2277
+
2278
+ return sccs
2279
+ }
2280
+
2281
+ // =============================================================================
2282
+ // Path Finding Algorithms (Phase 5B)
2283
+ // =============================================================================
2284
+
2285
+ /**
2286
+ * Result of a shortest path computation containing the path and total distance.
2287
+ *
2288
+ * @since 3.18.0
2289
+ * @category models
2290
+ */
2291
+ export interface PathResult<E> {
2292
+ readonly path: Array<NodeIndex>
2293
+ readonly distance: number
2294
+ readonly costs: Array<E>
2295
+ }
2296
+
2297
+ /**
2298
+ * Configuration for Dijkstra's algorithm.
2299
+ *
2300
+ * @since 3.18.0
2301
+ * @category models
2302
+ */
2303
+ export interface DijkstraConfig<E> {
2304
+ source: NodeIndex
2305
+ target: NodeIndex
2306
+ cost: (edgeData: E) => number
2307
+ }
2308
+
2309
+ /**
2310
+ * Configuration for A* algorithm.
2311
+ *
2312
+ * @since 3.18.0
2313
+ * @category models
2314
+ */
2315
+ export interface AstarConfig<E, N> {
2316
+ source: NodeIndex
2317
+ target: NodeIndex
2318
+ cost: (edgeData: E) => number
2319
+ heuristic: (sourceNodeData: N, targetNodeData: N) => number
2320
+ }
2321
+
2322
+ /**
2323
+ * Configuration for Bellman-Ford algorithm.
2324
+ *
2325
+ * @since 3.18.0
2326
+ * @category models
2327
+ */
2328
+ export interface BellmanFordConfig<E> {
2329
+ source: NodeIndex
2330
+ target: NodeIndex
2331
+ cost: (edgeData: E) => number
2332
+ }
2333
+
2334
+ /**
2335
+ * Find the shortest path between two nodes using Dijkstra's algorithm.
2336
+ *
2337
+ * Dijkstra's algorithm works with non-negative edge weights and finds the shortest
2338
+ * path from a source node to a target node in O((V + E) log V) time complexity.
2339
+ *
2340
+ * @example
2341
+ * ```ts
2342
+ * import { Graph, Option } from "effect"
2343
+ *
2344
+ * const graph = Graph.directed<string, number>((mutable) => {
2345
+ * const a = Graph.addNode(mutable, "A")
2346
+ * const b = Graph.addNode(mutable, "B")
2347
+ * const c = Graph.addNode(mutable, "C")
2348
+ * Graph.addEdge(mutable, a, b, 5)
2349
+ * Graph.addEdge(mutable, a, c, 10)
2350
+ * Graph.addEdge(mutable, b, c, 2)
2351
+ * })
2352
+ *
2353
+ * const result = Graph.dijkstra(graph, { source: 0, target: 2, cost: (edgeData) => edgeData })
2354
+ * if (Option.isSome(result)) {
2355
+ * console.log(result.value.path) // [0, 1, 2] - shortest path A->B->C
2356
+ * console.log(result.value.distance) // 7 - total distance
2357
+ * }
2358
+ * ```
2359
+ *
2360
+ * @since 3.18.0
2361
+ * @category algorithms
2362
+ */
2363
+ export const dijkstra = <N, E, T extends Kind = "directed">(
2364
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
2365
+ config: DijkstraConfig<E>
2366
+ ): Option.Option<PathResult<E>> => {
2367
+ const { cost, source, target } = config
2368
+ // Validate that source and target nodes exist
2369
+ if (!graph.nodes.has(source)) {
2370
+ throw missingNode(source)
2371
+ }
2372
+ if (!graph.nodes.has(target)) {
2373
+ throw missingNode(target)
2374
+ }
2375
+
2376
+ // Early return if source equals target
2377
+ if (source === target) {
2378
+ return Option.some({
2379
+ path: [source],
2380
+ distance: 0,
2381
+ costs: []
2382
+ })
2383
+ }
2384
+
2385
+ // Distance tracking and priority queue simulation
2386
+ const distances = new Map<NodeIndex, number>()
2387
+ const previous = new Map<NodeIndex, { node: NodeIndex; edgeData: E } | null>()
2388
+ const visited = new Set<NodeIndex>()
2389
+
2390
+ // Initialize distances
2391
+ // Iterate directly over node keys
2392
+ for (const node of graph.nodes.keys()) {
2393
+ distances.set(node, node === source ? 0 : Infinity)
2394
+ previous.set(node, null)
2395
+ }
2396
+
2397
+ // Simple priority queue using array (can be optimized with proper heap)
2398
+ const priorityQueue: Array<{ node: NodeIndex; distance: number }> = [
2399
+ { node: source, distance: 0 }
2400
+ ]
2401
+
2402
+ while (priorityQueue.length > 0) {
2403
+ // Find minimum distance node (priority queue extract-min)
2404
+ let minIndex = 0
2405
+ for (let i = 1; i < priorityQueue.length; i++) {
2406
+ if (priorityQueue[i].distance < priorityQueue[minIndex].distance) {
2407
+ minIndex = i
2408
+ }
2409
+ }
2410
+
2411
+ const current = priorityQueue.splice(minIndex, 1)[0]
2412
+ const currentNode = current.node
2413
+
2414
+ // Skip if already visited (can happen with duplicate entries)
2415
+ if (visited.has(currentNode)) {
2416
+ continue
2417
+ }
2418
+
2419
+ visited.add(currentNode)
2420
+
2421
+ // Early termination if we reached the target
2422
+ if (currentNode === target) {
2423
+ break
2424
+ }
2425
+
2426
+ // Get current distance
2427
+ const currentDistance = distances.get(currentNode)!
2428
+
2429
+ // Examine all outgoing edges
2430
+ const adjacencyList = graph.adjacency.get(currentNode)
2431
+ if (adjacencyList !== undefined) {
2432
+ for (const edgeIndex of adjacencyList) {
2433
+ const edge = graph.edges.get(edgeIndex)
2434
+ if (edge !== undefined) {
2435
+ const neighbor = edge.target
2436
+ const weight = cost(edge.data)
2437
+
2438
+ // Validate non-negative weights
2439
+ if (weight < 0) {
2440
+ throw new Error(`Dijkstra's algorithm requires non-negative edge weights, found ${weight}`)
2441
+ }
2442
+
2443
+ const newDistance = currentDistance + weight
2444
+ const neighborDistance = distances.get(neighbor)!
2445
+
2446
+ // Relaxation step
2447
+ if (newDistance < neighborDistance) {
2448
+ distances.set(neighbor, newDistance)
2449
+ previous.set(neighbor, { node: currentNode, edgeData: edge.data })
2450
+
2451
+ // Add to priority queue if not visited
2452
+ if (!visited.has(neighbor)) {
2453
+ priorityQueue.push({ node: neighbor, distance: newDistance })
2454
+ }
2455
+ }
2456
+ }
2457
+ }
2458
+ }
2459
+ }
2460
+
2461
+ // Check if target is reachable
2462
+ const targetDistance = distances.get(target)!
2463
+ if (targetDistance === Infinity) {
2464
+ return Option.none() // No path exists
2465
+ }
2466
+
2467
+ // Reconstruct path
2468
+ const path: Array<NodeIndex> = []
2469
+ const costs: Array<E> = []
2470
+ let currentNode: NodeIndex | null = target
2471
+
2472
+ while (currentNode !== null) {
2473
+ path.unshift(currentNode)
2474
+ const prev: { node: NodeIndex; edgeData: E } | null = previous.get(currentNode)!
2475
+ if (prev !== null) {
2476
+ costs.unshift(prev.edgeData)
2477
+ currentNode = prev.node
2478
+ } else {
2479
+ currentNode = null
2480
+ }
2481
+ }
2482
+
2483
+ return Option.some({
2484
+ path,
2485
+ distance: targetDistance,
2486
+ costs
2487
+ })
2488
+ }
2489
+
2490
+ /**
2491
+ * Result of all-pairs shortest path computation.
2492
+ *
2493
+ * @since 3.18.0
2494
+ * @category models
2495
+ */
2496
+ export interface AllPairsResult<E> {
2497
+ readonly distances: Map<NodeIndex, Map<NodeIndex, number>>
2498
+ readonly paths: Map<NodeIndex, Map<NodeIndex, Array<NodeIndex> | null>>
2499
+ readonly costs: Map<NodeIndex, Map<NodeIndex, Array<E>>>
2500
+ }
2501
+
2502
+ /**
2503
+ * Find shortest paths between all pairs of nodes using Floyd-Warshall algorithm.
2504
+ *
2505
+ * Floyd-Warshall algorithm computes shortest paths between all pairs of nodes in O(V³) time.
2506
+ * It can handle negative edge weights and detect negative cycles.
2507
+ *
2508
+ * @example
2509
+ * ```ts
2510
+ * import { Graph } from "effect"
2511
+ *
2512
+ * const graph = Graph.directed<string, number>((mutable) => {
2513
+ * const a = Graph.addNode(mutable, "A")
2514
+ * const b = Graph.addNode(mutable, "B")
2515
+ * const c = Graph.addNode(mutable, "C")
2516
+ * Graph.addEdge(mutable, a, b, 3)
2517
+ * Graph.addEdge(mutable, b, c, 2)
2518
+ * Graph.addEdge(mutable, a, c, 7)
2519
+ * })
2520
+ *
2521
+ * const result = Graph.floydWarshall(graph, (edgeData) => edgeData)
2522
+ * const distanceAToC = result.distances.get(0)?.get(2) // 5 (A->B->C)
2523
+ * const pathAToC = result.paths.get(0)?.get(2) // [0, 1, 2]
2524
+ * ```
2525
+ *
2526
+ * @since 3.18.0
2527
+ * @category algorithms
2528
+ */
2529
+ export const floydWarshall = <N, E, T extends Kind = "directed">(
2530
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
2531
+ cost: (edgeData: E) => number
2532
+ ): AllPairsResult<E> => {
2533
+ // Get all nodes for Floyd-Warshall algorithm (needs array for nested iteration)
2534
+ const allNodes = Array.from(graph.nodes.keys())
2535
+
2536
+ // Initialize distance matrix
2537
+ const dist = new Map<NodeIndex, Map<NodeIndex, number>>()
2538
+ const next = new Map<NodeIndex, Map<NodeIndex, NodeIndex | null>>()
2539
+ const edgeMatrix = new Map<NodeIndex, Map<NodeIndex, E | null>>()
2540
+
2541
+ // Initialize with infinity for all pairs
2542
+ for (const i of allNodes) {
2543
+ dist.set(i, new Map())
2544
+ next.set(i, new Map())
2545
+ edgeMatrix.set(i, new Map())
2546
+
2547
+ for (const j of allNodes) {
2548
+ dist.get(i)!.set(j, i === j ? 0 : Infinity)
2549
+ next.get(i)!.set(j, null)
2550
+ edgeMatrix.get(i)!.set(j, null)
2551
+ }
2552
+ }
2553
+
2554
+ // Set edge weights
2555
+ for (const [, edgeData] of graph.edges) {
2556
+ const weight = cost(edgeData.data)
2557
+ const i = edgeData.source
2558
+ const j = edgeData.target
2559
+
2560
+ // Use minimum weight if multiple edges exist
2561
+ const currentWeight = dist.get(i)!.get(j)!
2562
+ if (weight < currentWeight) {
2563
+ dist.get(i)!.set(j, weight)
2564
+ next.get(i)!.set(j, j)
2565
+ edgeMatrix.get(i)!.set(j, edgeData.data)
2566
+ }
2567
+ }
2568
+
2569
+ // Floyd-Warshall main loop
2570
+ for (const k of allNodes) {
2571
+ for (const i of allNodes) {
2572
+ for (const j of allNodes) {
2573
+ const distIK = dist.get(i)!.get(k)!
2574
+ const distKJ = dist.get(k)!.get(j)!
2575
+ const distIJ = dist.get(i)!.get(j)!
2576
+
2577
+ if (distIK !== Infinity && distKJ !== Infinity && distIK + distKJ < distIJ) {
2578
+ dist.get(i)!.set(j, distIK + distKJ)
2579
+ next.get(i)!.set(j, next.get(i)!.get(k)!)
2580
+ }
2581
+ }
2582
+ }
2583
+ }
2584
+
2585
+ // Check for negative cycles
2586
+ for (const i of allNodes) {
2587
+ if (dist.get(i)!.get(i)! < 0) {
2588
+ throw new Error(`Negative cycle detected involving node ${i}`)
2589
+ }
2590
+ }
2591
+
2592
+ // Build result paths and edge weights
2593
+ const paths = new Map<NodeIndex, Map<NodeIndex, Array<NodeIndex> | null>>()
2594
+ const resultCosts = new Map<NodeIndex, Map<NodeIndex, Array<E>>>()
2595
+
2596
+ for (const i of allNodes) {
2597
+ paths.set(i, new Map())
2598
+ resultCosts.set(i, new Map())
2599
+
2600
+ for (const j of allNodes) {
2601
+ if (i === j) {
2602
+ paths.get(i)!.set(j, [i])
2603
+ resultCosts.get(i)!.set(j, [])
2604
+ } else if (dist.get(i)!.get(j)! === Infinity) {
2605
+ paths.get(i)!.set(j, null)
2606
+ resultCosts.get(i)!.set(j, [])
2607
+ } else {
2608
+ // Reconstruct path iteratively
2609
+ const path: Array<NodeIndex> = []
2610
+ const weights: Array<E> = []
2611
+ let current = i
2612
+
2613
+ path.push(current)
2614
+ while (current !== j) {
2615
+ const nextNode = next.get(current)!.get(j)!
2616
+ if (nextNode === null) break
2617
+
2618
+ const edgeData = edgeMatrix.get(current)!.get(nextNode)!
2619
+ if (edgeData !== null) {
2620
+ weights.push(edgeData)
2621
+ }
2622
+
2623
+ current = nextNode
2624
+ path.push(current)
2625
+ }
2626
+
2627
+ paths.get(i)!.set(j, path)
2628
+ resultCosts.get(i)!.set(j, weights)
2629
+ }
2630
+ }
2631
+ }
2632
+
2633
+ return {
2634
+ distances: dist,
2635
+ paths,
2636
+ costs: resultCosts
2637
+ }
2638
+ }
2639
+
2640
+ /**
2641
+ * Find the shortest path between two nodes using A* pathfinding algorithm.
2642
+ *
2643
+ * A* is an extension of Dijkstra's algorithm that uses a heuristic function to guide
2644
+ * the search towards the target, potentially finding paths faster than Dijkstra's.
2645
+ * The heuristic must be admissible (never overestimate the actual cost).
2646
+ *
2647
+ * @example
2648
+ * ```ts
2649
+ * import { Graph, Option } from "effect"
2650
+ *
2651
+ * const graph = Graph.directed<{x: number, y: number}, number>((mutable) => {
2652
+ * const a = Graph.addNode(mutable, {x: 0, y: 0})
2653
+ * const b = Graph.addNode(mutable, {x: 1, y: 0})
2654
+ * const c = Graph.addNode(mutable, {x: 2, y: 0})
2655
+ * Graph.addEdge(mutable, a, b, 1)
2656
+ * Graph.addEdge(mutable, b, c, 1)
2657
+ * })
2658
+ *
2659
+ * // Manhattan distance heuristic
2660
+ * const heuristic = (nodeData: {x: number, y: number}, targetData: {x: number, y: number}) =>
2661
+ * Math.abs(nodeData.x - targetData.x) + Math.abs(nodeData.y - targetData.y)
2662
+ *
2663
+ * const result = Graph.astar(graph, { source: 0, target: 2, cost: (edgeData) => edgeData, heuristic })
2664
+ * if (Option.isSome(result)) {
2665
+ * console.log(result.value.path) // [0, 1, 2] - shortest path
2666
+ * console.log(result.value.distance) // 2 - total distance
2667
+ * }
2668
+ * ```
2669
+ *
2670
+ * @since 3.18.0
2671
+ * @category algorithms
2672
+ */
2673
+ export const astar = <N, E, T extends Kind = "directed">(
2674
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
2675
+ config: AstarConfig<E, N>
2676
+ ): Option.Option<PathResult<E>> => {
2677
+ const { cost, heuristic, source, target } = config
2678
+ // Validate that source and target nodes exist
2679
+ if (!graph.nodes.has(source)) {
2680
+ throw missingNode(source)
2681
+ }
2682
+ if (!graph.nodes.has(target)) {
2683
+ throw missingNode(target)
2684
+ }
2685
+
2686
+ // Early return if source equals target
2687
+ if (source === target) {
2688
+ return Option.some({
2689
+ path: [source],
2690
+ distance: 0,
2691
+ costs: []
2692
+ })
2693
+ }
2694
+
2695
+ // Get target node data for heuristic calculations
2696
+ const targetNodeData = graph.nodes.get(target)
2697
+ if (targetNodeData === undefined) {
2698
+ throw new Error(`Target node ${target} data not found`)
2699
+ }
2700
+
2701
+ // Distance tracking (g-score) and f-score (g + h)
2702
+ const gScore = new Map<NodeIndex, number>()
2703
+ const fScore = new Map<NodeIndex, number>()
2704
+ const previous = new Map<NodeIndex, { node: NodeIndex; edgeData: E } | null>()
2705
+ const visited = new Set<NodeIndex>()
2706
+
2707
+ // Initialize scores
2708
+ // Iterate directly over node keys
2709
+ for (const node of graph.nodes.keys()) {
2710
+ gScore.set(node, node === source ? 0 : Infinity)
2711
+ fScore.set(node, Infinity)
2712
+ previous.set(node, null)
2713
+ }
2714
+
2715
+ // Calculate initial f-score for source
2716
+ const sourceNodeData = graph.nodes.get(source)
2717
+ if (sourceNodeData !== undefined) {
2718
+ const h = heuristic(sourceNodeData, targetNodeData)
2719
+ fScore.set(source, h)
2720
+ }
2721
+
2722
+ // Priority queue using f-score (total estimated cost)
2723
+ const openSet: Array<{ node: NodeIndex; fScore: number }> = [
2724
+ { node: source, fScore: fScore.get(source)! }
2725
+ ]
2726
+
2727
+ while (openSet.length > 0) {
2728
+ // Find node with lowest f-score
2729
+ let minIndex = 0
2730
+ for (let i = 1; i < openSet.length; i++) {
2731
+ if (openSet[i].fScore < openSet[minIndex].fScore) {
2732
+ minIndex = i
2733
+ }
2734
+ }
2735
+
2736
+ const current = openSet.splice(minIndex, 1)[0]
2737
+ const currentNode = current.node
2738
+
2739
+ // Skip if already visited
2740
+ if (visited.has(currentNode)) {
2741
+ continue
2742
+ }
2743
+
2744
+ visited.add(currentNode)
2745
+
2746
+ // Early termination if we reached the target
2747
+ if (currentNode === target) {
2748
+ break
2749
+ }
2750
+
2751
+ // Get current g-score
2752
+ const currentGScore = gScore.get(currentNode)!
2753
+
2754
+ // Examine all outgoing edges
2755
+ const adjacencyList = graph.adjacency.get(currentNode)
2756
+ if (adjacencyList !== undefined) {
2757
+ for (const edgeIndex of adjacencyList) {
2758
+ const edge = graph.edges.get(edgeIndex)
2759
+ if (edge !== undefined) {
2760
+ const neighbor = edge.target
2761
+ const weight = cost(edge.data)
2762
+
2763
+ // Validate non-negative weights
2764
+ if (weight < 0) {
2765
+ throw new Error(`A* algorithm requires non-negative edge weights, found ${weight}`)
2766
+ }
2767
+
2768
+ const tentativeGScore = currentGScore + weight
2769
+ const neighborGScore = gScore.get(neighbor)!
2770
+
2771
+ // If this path to neighbor is better than any previous one
2772
+ if (tentativeGScore < neighborGScore) {
2773
+ // Update g-score and previous
2774
+ gScore.set(neighbor, tentativeGScore)
2775
+ previous.set(neighbor, { node: currentNode, edgeData: edge.data })
2776
+
2777
+ // Calculate f-score using heuristic
2778
+ const neighborNodeData = graph.nodes.get(neighbor)
2779
+ if (neighborNodeData !== undefined) {
2780
+ const h = heuristic(neighborNodeData, targetNodeData)
2781
+ const f = tentativeGScore + h
2782
+ fScore.set(neighbor, f)
2783
+
2784
+ // Add to open set if not visited
2785
+ if (!visited.has(neighbor)) {
2786
+ openSet.push({ node: neighbor, fScore: f })
2787
+ }
2788
+ }
2789
+ }
2790
+ }
2791
+ }
2792
+ }
2793
+ }
2794
+
2795
+ // Check if target is reachable
2796
+ const targetGScore = gScore.get(target)!
2797
+ if (targetGScore === Infinity) {
2798
+ return Option.none() // No path exists
2799
+ }
2800
+
2801
+ // Reconstruct path
2802
+ const path: Array<NodeIndex> = []
2803
+ const costs: Array<E> = []
2804
+ let currentNode: NodeIndex | null = target
2805
+
2806
+ while (currentNode !== null) {
2807
+ path.unshift(currentNode)
2808
+ const prev: { node: NodeIndex; edgeData: E } | null = previous.get(currentNode)!
2809
+ if (prev !== null) {
2810
+ costs.unshift(prev.edgeData)
2811
+ currentNode = prev.node
2812
+ } else {
2813
+ currentNode = null
2814
+ }
2815
+ }
2816
+
2817
+ return Option.some({
2818
+ path,
2819
+ distance: targetGScore,
2820
+ costs
2821
+ })
2822
+ }
2823
+
2824
+ /**
2825
+ * Find the shortest path between two nodes using Bellman-Ford algorithm.
2826
+ *
2827
+ * Bellman-Ford algorithm can handle negative edge weights and detects negative cycles.
2828
+ * It has O(VE) time complexity, slower than Dijkstra's but more versatile.
2829
+ * Returns Option.none() if a negative cycle is detected that affects the path.
2830
+ *
2831
+ * @example
2832
+ * ```ts
2833
+ * import { Graph, Option } from "effect"
2834
+ *
2835
+ * const graph = Graph.directed<string, number>((mutable) => {
2836
+ * const a = Graph.addNode(mutable, "A")
2837
+ * const b = Graph.addNode(mutable, "B")
2838
+ * const c = Graph.addNode(mutable, "C")
2839
+ * Graph.addEdge(mutable, a, b, -1) // Negative weight allowed
2840
+ * Graph.addEdge(mutable, b, c, 3)
2841
+ * Graph.addEdge(mutable, a, c, 5)
2842
+ * })
2843
+ *
2844
+ * const result = Graph.bellmanFord(graph, { source: 0, target: 2, cost: (edgeData) => edgeData })
2845
+ * if (Option.isSome(result)) {
2846
+ * console.log(result.value.path) // [0, 1, 2] - shortest path A->B->C
2847
+ * console.log(result.value.distance) // 2 - total distance
2848
+ * }
2849
+ * ```
2850
+ *
2851
+ * @since 3.18.0
2852
+ * @category algorithms
2853
+ */
2854
+ export const bellmanFord = <N, E, T extends Kind = "directed">(
2855
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
2856
+ config: BellmanFordConfig<E>
2857
+ ): Option.Option<PathResult<E>> => {
2858
+ const { cost, source, target } = config
2859
+ // Validate that source and target nodes exist
2860
+ if (!graph.nodes.has(source)) {
2861
+ throw missingNode(source)
2862
+ }
2863
+ if (!graph.nodes.has(target)) {
2864
+ throw missingNode(target)
2865
+ }
2866
+
2867
+ // Early return if source equals target
2868
+ if (source === target) {
2869
+ return Option.some({
2870
+ path: [source],
2871
+ distance: 0,
2872
+ costs: []
2873
+ })
2874
+ }
2875
+
2876
+ // Initialize distances and predecessors
2877
+ const distances = new Map<NodeIndex, number>()
2878
+ const previous = new Map<NodeIndex, { node: NodeIndex; edgeData: E } | null>()
2879
+ // Iterate directly over node keys
2880
+
2881
+ for (const node of graph.nodes.keys()) {
2882
+ distances.set(node, node === source ? 0 : Infinity)
2883
+ previous.set(node, null)
2884
+ }
2885
+
2886
+ // Collect all edges for relaxation
2887
+ const edges: Array<{ source: NodeIndex; target: NodeIndex; weight: number; edgeData: E }> = []
2888
+ for (const [, edgeData] of graph.edges) {
2889
+ const weight = cost(edgeData.data)
2890
+ edges.push({
2891
+ source: edgeData.source,
2892
+ target: edgeData.target,
2893
+ weight,
2894
+ edgeData: edgeData.data
2895
+ })
2896
+ }
2897
+
2898
+ // Relax edges up to V-1 times
2899
+ const nodeCount = graph.nodes.size
2900
+ for (let i = 0; i < nodeCount - 1; i++) {
2901
+ let hasUpdate = false
2902
+
2903
+ for (const edge of edges) {
2904
+ const sourceDistance = distances.get(edge.source)!
2905
+ const targetDistance = distances.get(edge.target)!
2906
+
2907
+ // Relaxation step
2908
+ if (sourceDistance !== Infinity && sourceDistance + edge.weight < targetDistance) {
2909
+ distances.set(edge.target, sourceDistance + edge.weight)
2910
+ previous.set(edge.target, { node: edge.source, edgeData: edge.edgeData })
2911
+ hasUpdate = true
2912
+ }
2913
+ }
2914
+
2915
+ // Early termination if no updates
2916
+ if (!hasUpdate) {
2917
+ break
2918
+ }
2919
+ }
2920
+
2921
+ // Check for negative cycles
2922
+ for (const edge of edges) {
2923
+ const sourceDistance = distances.get(edge.source)!
2924
+ const targetDistance = distances.get(edge.target)!
2925
+
2926
+ if (sourceDistance !== Infinity && sourceDistance + edge.weight < targetDistance) {
2927
+ // Negative cycle detected - check if it affects the path to target
2928
+ const affectedNodes = new Set<NodeIndex>()
2929
+ const queue = [edge.target]
2930
+
2931
+ while (queue.length > 0) {
2932
+ const node = queue.shift()!
2933
+ if (affectedNodes.has(node)) continue
2934
+ affectedNodes.add(node)
2935
+
2936
+ // Add all nodes reachable from this node
2937
+ const adjacencyList = graph.adjacency.get(node)
2938
+ if (adjacencyList !== undefined) {
2939
+ for (const edgeIndex of adjacencyList) {
2940
+ const edge = graph.edges.get(edgeIndex)
2941
+ if (edge !== undefined) {
2942
+ queue.push(edge.target)
2943
+ }
2944
+ }
2945
+ }
2946
+ }
2947
+
2948
+ // If target is affected by negative cycle, return null
2949
+ if (affectedNodes.has(target)) {
2950
+ return Option.none()
2951
+ }
2952
+ }
2953
+ }
2954
+
2955
+ // Check if target is reachable
2956
+ const targetDistance = distances.get(target)!
2957
+ if (targetDistance === Infinity) {
2958
+ return Option.none() // No path exists
2959
+ }
2960
+
2961
+ // Reconstruct path
2962
+ const path: Array<NodeIndex> = []
2963
+ const costs: Array<E> = []
2964
+ let currentNode: NodeIndex | null = target
2965
+
2966
+ while (currentNode !== null) {
2967
+ path.unshift(currentNode)
2968
+ const prev: { node: NodeIndex; edgeData: E } | null = previous.get(currentNode)!
2969
+ if (prev !== null) {
2970
+ costs.unshift(prev.edgeData)
2971
+ currentNode = prev.node
2972
+ } else {
2973
+ currentNode = null
2974
+ }
2975
+ }
2976
+
2977
+ return Option.some({
2978
+ path,
2979
+ distance: targetDistance,
2980
+ costs
2981
+ })
2982
+ }
2983
+
2984
+ /**
2985
+ * Concrete class for iterables that produce [NodeIndex, NodeData] tuples.
2986
+ *
2987
+ * This class provides a common abstraction for all iterables that return node data,
2988
+ * including traversal iterators (DFS, BFS, etc.) and element iterators (nodes, externals).
2989
+ * It uses a mapEntry function pattern for flexible iteration and transformation.
2990
+ *
2991
+ * @example
2992
+ * ```ts
2993
+ * import { Graph } from "effect"
2994
+ *
2995
+ * const graph = Graph.directed<string, number>((mutable) => {
2996
+ * const a = Graph.addNode(mutable, "A")
2997
+ * const b = Graph.addNode(mutable, "B")
2998
+ * Graph.addEdge(mutable, a, b, 1)
2999
+ * })
3000
+ *
3001
+ * // Both traversal and element iterators return NodeWalker
3002
+ * const dfsNodes: Graph.NodeWalker<string> = Graph.dfs(graph, { start: [0] })
3003
+ * const allNodes: Graph.NodeWalker<string> = Graph.nodes(graph)
3004
+ *
3005
+ * // Common interface for working with node iterables
3006
+ * function processNodes<N>(nodeIterable: Graph.NodeWalker<N>): Array<number> {
3007
+ * return Array.from(Graph.indices(nodeIterable))
3008
+ * }
3009
+ *
3010
+ * // Access node data using values() or entries()
3011
+ * const nodeData = Array.from(Graph.values(dfsNodes)) // ["A", "B"]
3012
+ * const nodeEntries = Array.from(Graph.entries(allNodes)) // [[0, "A"], [1, "B"]]
3013
+ * ```
3014
+ *
3015
+ * @since 3.18.0
3016
+ * @category models
3017
+ */
3018
+ export class Walker<T, N> implements Iterable<[T, N]> {
3019
+ /**
3020
+ * @since 3.18.0
3021
+ */
3022
+ // @ts-ignore
3023
+ readonly [Symbol.iterator]: () => Iterator<[T, N]>
3024
+
3025
+ /**
3026
+ * Visits each element and maps it to a value using the provided function.
3027
+ *
3028
+ * Takes a function that receives the index and data,
3029
+ * and returns an iterable of the mapped values. Skips elements that
3030
+ * no longer exist in the graph.
3031
+ *
3032
+ * @example
3033
+ * ```ts
3034
+ * import { Graph } from "effect"
3035
+ *
3036
+ * const graph = Graph.directed<string, number>((mutable) => {
3037
+ * const a = Graph.addNode(mutable, "A")
3038
+ * const b = Graph.addNode(mutable, "B")
3039
+ * Graph.addEdge(mutable, a, b, 1)
3040
+ * })
3041
+ *
3042
+ * const dfs = Graph.dfs(graph, { start: [0] })
3043
+ *
3044
+ * // Map to just the node data
3045
+ * const values = Array.from(dfs.visit((index, data) => data))
3046
+ * console.log(values) // ["A", "B"]
3047
+ *
3048
+ * // Map to custom objects
3049
+ * const custom = Array.from(dfs.visit((index, data) => ({ id: index, name: data })))
3050
+ * console.log(custom) // [{ id: 0, name: "A" }, { id: 1, name: "B" }]
3051
+ * ```
3052
+ *
3053
+ * @since 3.18.0
3054
+ * @category iterators
3055
+ */
3056
+ readonly visit: <U>(f: (index: T, data: N) => U) => Iterable<U>
3057
+
3058
+ constructor(
3059
+ /**
3060
+ * Visits each element and maps it to a value using the provided function.
3061
+ *
3062
+ * Takes a function that receives the index and data,
3063
+ * and returns an iterable of the mapped values. Skips elements that
3064
+ * no longer exist in the graph.
3065
+ *
3066
+ * @example
3067
+ * ```ts
3068
+ * import { Graph } from "effect"
3069
+ *
3070
+ * const graph = Graph.directed<string, number>((mutable) => {
3071
+ * const a = Graph.addNode(mutable, "A")
3072
+ * const b = Graph.addNode(mutable, "B")
3073
+ * Graph.addEdge(mutable, a, b, 1)
3074
+ * })
3075
+ *
3076
+ * const dfs = Graph.dfs(graph, { start: [0] })
3077
+ *
3078
+ * // Map to just the node data
3079
+ * const values = Array.from(dfs.visit((index, data) => data))
3080
+ * console.log(values) // ["A", "B"]
3081
+ *
3082
+ * // Map to custom objects
3083
+ * const custom = Array.from(dfs.visit((index, data) => ({ id: index, name: data })))
3084
+ * console.log(custom) // [{ id: 0, name: "A" }, { id: 1, name: "B" }]
3085
+ * ```
3086
+ *
3087
+ * @since 3.18.0
3088
+ * @category iterators
3089
+ */
3090
+ visit: <U>(f: (index: T, data: N) => U) => Iterable<U>
3091
+ ) {
3092
+ this.visit = visit
3093
+ this[Symbol.iterator] = visit((index, data) => [index, data] as [T, N])[Symbol.iterator]
3094
+ }
3095
+ }
3096
+
3097
+ /**
3098
+ * Type alias for node iteration using Walker.
3099
+ * NodeWalker is represented as Walker<NodeIndex, N>.
3100
+ *
3101
+ * @since 3.18.0
3102
+ * @category models
3103
+ */
3104
+ export type NodeWalker<N> = Walker<NodeIndex, N>
3105
+
3106
+ /**
3107
+ * Type alias for edge iteration using Walker.
3108
+ * EdgeWalker is represented as Walker<EdgeIndex, Edge<E>>.
3109
+ *
3110
+ * @since 3.18.0
3111
+ * @category models
3112
+ */
3113
+ export type EdgeWalker<E> = Walker<EdgeIndex, Edge<E>>
3114
+
3115
+ /**
3116
+ * Returns an iterator over the indices in the walker.
3117
+ *
3118
+ * @example
3119
+ * ```ts
3120
+ * import { Graph } from "effect"
3121
+ *
3122
+ * const graph = Graph.directed<string, number>((mutable) => {
3123
+ * const a = Graph.addNode(mutable, "A")
3124
+ * const b = Graph.addNode(mutable, "B")
3125
+ * Graph.addEdge(mutable, a, b, 1)
3126
+ * })
3127
+ *
3128
+ * const dfs = Graph.dfs(graph, { start: [0] })
3129
+ * const indices = Array.from(Graph.indices(dfs))
3130
+ * console.log(indices) // [0, 1]
3131
+ * ```
3132
+ *
3133
+ * @since 3.18.0
3134
+ * @category utilities
3135
+ */
3136
+ export const indices = <T, N>(walker: Walker<T, N>): Iterable<T> => walker.visit((index, _) => index)
3137
+
3138
+ /**
3139
+ * Returns an iterator over the values (data) in the walker.
3140
+ *
3141
+ * @example
3142
+ * ```ts
3143
+ * import { Graph } from "effect"
3144
+ *
3145
+ * const graph = Graph.directed<string, number>((mutable) => {
3146
+ * const a = Graph.addNode(mutable, "A")
3147
+ * const b = Graph.addNode(mutable, "B")
3148
+ * Graph.addEdge(mutable, a, b, 1)
3149
+ * })
3150
+ *
3151
+ * const dfs = Graph.dfs(graph, { start: [0] })
3152
+ * const values = Array.from(Graph.values(dfs))
3153
+ * console.log(values) // ["A", "B"]
3154
+ * ```
3155
+ *
3156
+ * @since 3.18.0
3157
+ * @category utilities
3158
+ */
3159
+ export const values = <T, N>(walker: Walker<T, N>): Iterable<N> => walker.visit((_, data) => data)
3160
+
3161
+ /**
3162
+ * Returns an iterator over [index, data] entries in the walker.
3163
+ *
3164
+ * @example
3165
+ * ```ts
3166
+ * import { Graph } from "effect"
3167
+ *
3168
+ * const graph = Graph.directed<string, number>((mutable) => {
3169
+ * const a = Graph.addNode(mutable, "A")
3170
+ * const b = Graph.addNode(mutable, "B")
3171
+ * Graph.addEdge(mutable, a, b, 1)
3172
+ * })
3173
+ *
3174
+ * const dfs = Graph.dfs(graph, { start: [0] })
3175
+ * const entries = Array.from(Graph.entries(dfs))
3176
+ * console.log(entries) // [[0, "A"], [1, "B"]]
3177
+ * ```
3178
+ *
3179
+ * @since 3.18.0
3180
+ * @category utilities
3181
+ */
3182
+ export const entries = <T, N>(walker: Walker<T, N>): Iterable<[T, N]> =>
3183
+ walker.visit((index, data) => [index, data] as [T, N])
3184
+
3185
+ /**
3186
+ * Configuration for graph search iterators.
3187
+ *
3188
+ * @since 3.18.0
3189
+ * @category models
3190
+ */
3191
+ export interface SearchConfig {
3192
+ readonly start?: Array<NodeIndex>
3193
+ readonly direction?: Direction
3194
+ }
3195
+
3196
+ /**
3197
+ * Creates a new DFS iterator with optional configuration.
3198
+ *
3199
+ * The iterator maintains a stack of nodes to visit and tracks discovered nodes.
3200
+ * It provides lazy evaluation of the depth-first search.
3201
+ *
3202
+ * @example
3203
+ * ```ts
3204
+ * import { Graph } from "effect"
3205
+ *
3206
+ * const graph = Graph.directed<string, number>((mutable) => {
3207
+ * const a = Graph.addNode(mutable, "A")
3208
+ * const b = Graph.addNode(mutable, "B")
3209
+ * const c = Graph.addNode(mutable, "C")
3210
+ * Graph.addEdge(mutable, a, b, 1)
3211
+ * Graph.addEdge(mutable, b, c, 1)
3212
+ * })
3213
+ *
3214
+ * // Start from a specific node
3215
+ * const dfs1 = Graph.dfs(graph, { start: [0] })
3216
+ * for (const nodeIndex of Graph.indices(dfs1)) {
3217
+ * console.log(nodeIndex) // Traverses in DFS order: 0, 1, 2
3218
+ * }
3219
+ *
3220
+ * // Empty iterator (no starting nodes)
3221
+ * const dfs2 = Graph.dfs(graph)
3222
+ * // Can be used programmatically
3223
+ * ```
3224
+ *
3225
+ * @since 3.18.0
3226
+ * @category iterators
3227
+ */
3228
+ export const dfs = <N, E, T extends Kind = "directed">(
3229
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
3230
+ config: SearchConfig = {}
3231
+ ): NodeWalker<N> => {
3232
+ const start = config.start ?? []
3233
+ const direction = config.direction ?? "outgoing"
3234
+
3235
+ // Validate that all start nodes exist
3236
+ for (const nodeIndex of start) {
3237
+ if (!hasNode(graph, nodeIndex)) {
3238
+ throw missingNode(nodeIndex)
3239
+ }
3240
+ }
3241
+
3242
+ return new Walker((f) => ({
3243
+ [Symbol.iterator]: () => {
3244
+ const stack = [...start]
3245
+ const discovered = new Set<NodeIndex>()
3246
+
3247
+ const nextMapped = () => {
3248
+ while (stack.length > 0) {
3249
+ const current = stack.pop()!
3250
+
3251
+ if (discovered.has(current)) {
3252
+ continue
3253
+ }
3254
+
3255
+ discovered.add(current)
3256
+
3257
+ const nodeDataOption = graph.nodes.get(current)
3258
+ if (nodeDataOption === undefined) {
3259
+ continue
3260
+ }
3261
+
3262
+ const neighbors = neighborsDirected(graph, current, direction)
3263
+ for (let i = neighbors.length - 1; i >= 0; i--) {
3264
+ const neighbor = neighbors[i]
3265
+ if (!discovered.has(neighbor)) {
3266
+ stack.push(neighbor)
3267
+ }
3268
+ }
3269
+
3270
+ return { done: false, value: f(current, nodeDataOption) }
3271
+ }
3272
+
3273
+ return { done: true, value: undefined } as const
3274
+ }
3275
+
3276
+ return { next: nextMapped }
3277
+ }
3278
+ }))
3279
+ }
3280
+
3281
+ /**
3282
+ * Creates a new BFS iterator with optional configuration.
3283
+ *
3284
+ * The iterator maintains a queue of nodes to visit and tracks discovered nodes.
3285
+ * It provides lazy evaluation of the breadth-first search.
3286
+ *
3287
+ * @example
3288
+ * ```ts
3289
+ * import { Graph } from "effect"
3290
+ *
3291
+ * const graph = Graph.directed<string, number>((mutable) => {
3292
+ * const a = Graph.addNode(mutable, "A")
3293
+ * const b = Graph.addNode(mutable, "B")
3294
+ * const c = Graph.addNode(mutable, "C")
3295
+ * Graph.addEdge(mutable, a, b, 1)
3296
+ * Graph.addEdge(mutable, b, c, 1)
3297
+ * })
3298
+ *
3299
+ * // Start from a specific node
3300
+ * const bfs1 = Graph.bfs(graph, { start: [0] })
3301
+ * for (const nodeIndex of Graph.indices(bfs1)) {
3302
+ * console.log(nodeIndex) // Traverses in BFS order: 0, 1, 2
3303
+ * }
3304
+ *
3305
+ * // Empty iterator (no starting nodes)
3306
+ * const bfs2 = Graph.bfs(graph)
3307
+ * // Can be used programmatically
3308
+ * ```
3309
+ *
3310
+ * @since 3.18.0
3311
+ * @category iterators
3312
+ */
3313
+ export const bfs = <N, E, T extends Kind = "directed">(
3314
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
3315
+ config: SearchConfig = {}
3316
+ ): NodeWalker<N> => {
3317
+ const start = config.start ?? []
3318
+ const direction = config.direction ?? "outgoing"
3319
+
3320
+ // Validate that all start nodes exist
3321
+ for (const nodeIndex of start) {
3322
+ if (!hasNode(graph, nodeIndex)) {
3323
+ throw missingNode(nodeIndex)
3324
+ }
3325
+ }
3326
+
3327
+ return new Walker((f) => ({
3328
+ [Symbol.iterator]: () => {
3329
+ const queue = [...start]
3330
+ const discovered = new Set<NodeIndex>()
3331
+
3332
+ const nextMapped = () => {
3333
+ while (queue.length > 0) {
3334
+ const current = queue.shift()!
3335
+
3336
+ if (!discovered.has(current)) {
3337
+ discovered.add(current)
3338
+
3339
+ const neighbors = neighborsDirected(graph, current, direction)
3340
+ for (const neighbor of neighbors) {
3341
+ if (!discovered.has(neighbor)) {
3342
+ queue.push(neighbor)
3343
+ }
3344
+ }
3345
+
3346
+ const nodeData = getNode(graph, current)
3347
+ if (Option.isSome(nodeData)) {
3348
+ return { done: false, value: f(current, nodeData.value) }
3349
+ }
3350
+ return nextMapped()
3351
+ }
3352
+ }
3353
+
3354
+ return { done: true, value: undefined } as const
3355
+ }
3356
+
3357
+ return { next: nextMapped }
3358
+ }
3359
+ }))
3360
+ }
3361
+
3362
+ /**
3363
+ * Configuration options for topological sort iterator.
3364
+ *
3365
+ * @since 3.18.0
3366
+ * @category models
3367
+ */
3368
+ export interface TopoConfig {
3369
+ readonly initials?: Array<NodeIndex>
3370
+ }
3371
+
3372
+ /**
3373
+ * Creates a new topological sort iterator with optional configuration.
3374
+ *
3375
+ * The iterator uses Kahn's algorithm to lazily produce nodes in topological order.
3376
+ * Throws an error if the graph contains cycles.
3377
+ *
3378
+ * @example
3379
+ * ```ts
3380
+ * import { Graph } from "effect"
3381
+ *
3382
+ * const graph = Graph.directed<string, number>((mutable) => {
3383
+ * const a = Graph.addNode(mutable, "A")
3384
+ * const b = Graph.addNode(mutable, "B")
3385
+ * const c = Graph.addNode(mutable, "C")
3386
+ * Graph.addEdge(mutable, a, b, 1)
3387
+ * Graph.addEdge(mutable, b, c, 1)
3388
+ * })
3389
+ *
3390
+ * // Standard topological sort
3391
+ * const topo1 = Graph.topo(graph)
3392
+ * for (const nodeIndex of Graph.indices(topo1)) {
3393
+ * console.log(nodeIndex) // 0, 1, 2 (topological order)
3394
+ * }
3395
+ *
3396
+ * // With initial nodes
3397
+ * const topo2 = Graph.topo(graph, { initials: [0] })
3398
+ *
3399
+ * // Throws error for cyclic graph
3400
+ * const cyclicGraph = Graph.directed<string, number>((mutable) => {
3401
+ * const a = Graph.addNode(mutable, "A")
3402
+ * const b = Graph.addNode(mutable, "B")
3403
+ * Graph.addEdge(mutable, a, b, 1)
3404
+ * Graph.addEdge(mutable, b, a, 2) // Creates cycle
3405
+ * })
3406
+ *
3407
+ * try {
3408
+ * Graph.topo(cyclicGraph) // Throws: "Cannot perform topological sort on cyclic graph"
3409
+ * } catch (error) {
3410
+ * console.log((error as Error).message)
3411
+ * }
3412
+ * ```
3413
+ *
3414
+ * @since 3.18.0
3415
+ * @category iterators
3416
+ */
3417
+ export const topo = <N, E, T extends Kind = "directed">(
3418
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
3419
+ config: TopoConfig = {}
3420
+ ): NodeWalker<N> => {
3421
+ // Check if graph is acyclic first
3422
+ if (!isAcyclic(graph)) {
3423
+ throw new Error("Cannot perform topological sort on cyclic graph")
3424
+ }
3425
+
3426
+ const initials = config.initials ?? []
3427
+
3428
+ // Validate that all initial nodes exist
3429
+ for (const nodeIndex of initials) {
3430
+ if (!hasNode(graph, nodeIndex)) {
3431
+ throw missingNode(nodeIndex)
3432
+ }
3433
+ }
3434
+
3435
+ return new Walker((f) => ({
3436
+ [Symbol.iterator]: () => {
3437
+ const inDegree = new Map<NodeIndex, number>()
3438
+ const remaining = new Set<NodeIndex>()
3439
+ const queue = [...initials]
3440
+
3441
+ // Initialize in-degree counts
3442
+ for (const [nodeIndex] of graph.nodes) {
3443
+ inDegree.set(nodeIndex, 0)
3444
+ remaining.add(nodeIndex)
3445
+ }
3446
+
3447
+ // Calculate in-degrees
3448
+ for (const [, edgeData] of graph.edges) {
3449
+ const currentInDegree = inDegree.get(edgeData.target) || 0
3450
+ inDegree.set(edgeData.target, currentInDegree + 1)
3451
+ }
3452
+
3453
+ // Add nodes with zero in-degree to queue if no initials provided
3454
+ if (initials.length === 0) {
3455
+ for (const [nodeIndex, degree] of inDegree) {
3456
+ if (degree === 0) {
3457
+ queue.push(nodeIndex)
3458
+ }
3459
+ }
3460
+ }
3461
+
3462
+ const nextMapped = () => {
3463
+ while (queue.length > 0) {
3464
+ const current = queue.shift()!
3465
+
3466
+ if (remaining.has(current)) {
3467
+ remaining.delete(current)
3468
+
3469
+ // Process outgoing edges, reducing in-degree of targets
3470
+ const neighbors = neighborsDirected(graph, current, "outgoing")
3471
+ for (const neighbor of neighbors) {
3472
+ if (remaining.has(neighbor)) {
3473
+ const currentInDegree = inDegree.get(neighbor) || 0
3474
+ const newInDegree = currentInDegree - 1
3475
+ inDegree.set(neighbor, newInDegree)
3476
+
3477
+ // If in-degree becomes 0, add to queue
3478
+ if (newInDegree === 0) {
3479
+ queue.push(neighbor)
3480
+ }
3481
+ }
3482
+ }
3483
+
3484
+ const nodeData = getNode(graph, current)
3485
+ if (Option.isSome(nodeData)) {
3486
+ return { done: false, value: f(current, nodeData.value) }
3487
+ }
3488
+ return nextMapped()
3489
+ }
3490
+ }
3491
+
3492
+ return { done: true, value: undefined } as const
3493
+ }
3494
+
3495
+ return { next: nextMapped }
3496
+ }
3497
+ }))
3498
+ }
3499
+
3500
+ /**
3501
+ * Creates a new DFS postorder iterator with optional configuration.
3502
+ *
3503
+ * The iterator maintains a stack with visit state tracking and emits nodes
3504
+ * in postorder (after all descendants have been processed). Essential for
3505
+ * dependency resolution and tree destruction algorithms.
3506
+ *
3507
+ * @example
3508
+ * ```ts
3509
+ * import { Graph } from "effect"
3510
+ *
3511
+ * const graph = Graph.directed<string, number>((mutable) => {
3512
+ * const root = Graph.addNode(mutable, "root")
3513
+ * const child1 = Graph.addNode(mutable, "child1")
3514
+ * const child2 = Graph.addNode(mutable, "child2")
3515
+ * Graph.addEdge(mutable, root, child1, 1)
3516
+ * Graph.addEdge(mutable, root, child2, 1)
3517
+ * })
3518
+ *
3519
+ * // Postorder: children before parents
3520
+ * const postOrder = Graph.dfsPostOrder(graph, { start: [0] })
3521
+ * for (const node of postOrder) {
3522
+ * console.log(node) // 1, 2, 0
3523
+ * }
3524
+ * ```
3525
+ *
3526
+ * @since 3.18.0
3527
+ * @category iterators
3528
+ */
3529
+ export const dfsPostOrder = <N, E, T extends Kind = "directed">(
3530
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
3531
+ config: SearchConfig = {}
3532
+ ): NodeWalker<N> => {
3533
+ const start = config.start ?? []
3534
+ const direction = config.direction ?? "outgoing"
3535
+
3536
+ // Validate that all start nodes exist
3537
+ for (const nodeIndex of start) {
3538
+ if (!hasNode(graph, nodeIndex)) {
3539
+ throw missingNode(nodeIndex)
3540
+ }
3541
+ }
3542
+
3543
+ return new Walker((f) => ({
3544
+ [Symbol.iterator]: () => {
3545
+ const stack: Array<{ node: NodeIndex; visitedChildren: boolean }> = []
3546
+ const discovered = new Set<NodeIndex>()
3547
+ const finished = new Set<NodeIndex>()
3548
+
3549
+ // Initialize stack with start nodes
3550
+ for (let i = start.length - 1; i >= 0; i--) {
3551
+ stack.push({ node: start[i], visitedChildren: false })
3552
+ }
3553
+
3554
+ const nextMapped = () => {
3555
+ while (stack.length > 0) {
3556
+ const current = stack[stack.length - 1]
3557
+
3558
+ if (!discovered.has(current.node)) {
3559
+ discovered.add(current.node)
3560
+ current.visitedChildren = false
3561
+ }
3562
+
3563
+ if (!current.visitedChildren) {
3564
+ current.visitedChildren = true
3565
+ const neighbors = neighborsDirected(graph, current.node, direction)
3566
+
3567
+ for (let i = neighbors.length - 1; i >= 0; i--) {
3568
+ const neighbor = neighbors[i]
3569
+ if (!discovered.has(neighbor) && !finished.has(neighbor)) {
3570
+ stack.push({ node: neighbor, visitedChildren: false })
3571
+ }
3572
+ }
3573
+ } else {
3574
+ const nodeToEmit = stack.pop()!.node
3575
+
3576
+ if (!finished.has(nodeToEmit)) {
3577
+ finished.add(nodeToEmit)
3578
+
3579
+ const nodeData = getNode(graph, nodeToEmit)
3580
+ if (Option.isSome(nodeData)) {
3581
+ return { done: false, value: f(nodeToEmit, nodeData.value) }
3582
+ }
3583
+ return nextMapped()
3584
+ }
3585
+ }
3586
+ }
3587
+
3588
+ return { done: true, value: undefined } as const
3589
+ }
3590
+
3591
+ return { next: nextMapped }
3592
+ }
3593
+ }))
3594
+ }
3595
+
3596
+ /**
3597
+ * Creates an iterator over all node indices in the graph.
3598
+ *
3599
+ * The iterator produces node indices in the order they were added to the graph.
3600
+ * This provides access to all nodes regardless of connectivity.
3601
+ *
3602
+ * @example
3603
+ * ```ts
3604
+ * import { Graph } from "effect"
3605
+ *
3606
+ * const graph = Graph.directed<string, number>((mutable) => {
3607
+ * const a = Graph.addNode(mutable, "A")
3608
+ * const b = Graph.addNode(mutable, "B")
3609
+ * const c = Graph.addNode(mutable, "C")
3610
+ * Graph.addEdge(mutable, a, b, 1)
3611
+ * })
3612
+ *
3613
+ * const indices = Array.from(Graph.indices(Graph.nodes(graph)))
3614
+ * console.log(indices) // [0, 1, 2]
3615
+ * ```
3616
+ *
3617
+ * @since 3.18.0
3618
+ * @category iterators
3619
+ */
3620
+ export const nodes = <N, E, T extends Kind = "directed">(
3621
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>
3622
+ ): NodeWalker<N> =>
3623
+ new Walker((f) => ({
3624
+ [Symbol.iterator]() {
3625
+ const nodeMap = graph.nodes
3626
+ const iterator = nodeMap.entries()
3627
+
3628
+ return {
3629
+ next() {
3630
+ const result = iterator.next()
3631
+ if (result.done) {
3632
+ return { done: true, value: undefined }
3633
+ }
3634
+ const [nodeIndex, nodeData] = result.value
3635
+ return { done: false, value: f(nodeIndex, nodeData) }
3636
+ }
3637
+ }
3638
+ }
3639
+ }))
3640
+
3641
+ /**
3642
+ * Creates an iterator over all edge indices in the graph.
3643
+ *
3644
+ * The iterator produces edge indices in the order they were added to the graph.
3645
+ * This provides access to all edges regardless of connectivity.
3646
+ *
3647
+ * @example
3648
+ * ```ts
3649
+ * import { Graph } from "effect"
3650
+ *
3651
+ * const graph = Graph.directed<string, number>((mutable) => {
3652
+ * const a = Graph.addNode(mutable, "A")
3653
+ * const b = Graph.addNode(mutable, "B")
3654
+ * const c = Graph.addNode(mutable, "C")
3655
+ * Graph.addEdge(mutable, a, b, 1)
3656
+ * Graph.addEdge(mutable, b, c, 2)
3657
+ * })
3658
+ *
3659
+ * const indices = Array.from(Graph.indices(Graph.edges(graph)))
3660
+ * console.log(indices) // [0, 1]
3661
+ * ```
3662
+ *
3663
+ * @since 3.18.0
3664
+ * @category iterators
3665
+ */
3666
+ export const edges = <N, E, T extends Kind = "directed">(
3667
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>
3668
+ ): EdgeWalker<E> =>
3669
+ new Walker((f) => ({
3670
+ [Symbol.iterator]() {
3671
+ const edgeMap = graph.edges
3672
+ const iterator = edgeMap.entries()
3673
+
3674
+ return {
3675
+ next() {
3676
+ const result = iterator.next()
3677
+ if (result.done) {
3678
+ return { done: true, value: undefined }
3679
+ }
3680
+ const [edgeIndex, edgeData] = result.value
3681
+ return { done: false, value: f(edgeIndex, edgeData) }
3682
+ }
3683
+ }
3684
+ }
3685
+ }))
3686
+
3687
+ /**
3688
+ * Configuration for externals iterator.
3689
+ *
3690
+ * @since 3.18.0
3691
+ * @category models
3692
+ */
3693
+ export interface ExternalsConfig {
3694
+ readonly direction?: Direction
3695
+ }
3696
+
3697
+ /**
3698
+ * Creates an iterator over external nodes (nodes without edges in specified direction).
3699
+ *
3700
+ * External nodes are nodes that have no outgoing edges (direction="outgoing") or
3701
+ * no incoming edges (direction="incoming"). These are useful for finding
3702
+ * sources, sinks, or isolated nodes.
3703
+ *
3704
+ * @example
3705
+ * ```ts
3706
+ * import { Graph } from "effect"
3707
+ *
3708
+ * const graph = Graph.directed<string, number>((mutable) => {
3709
+ * const source = Graph.addNode(mutable, "source") // 0 - no incoming
3710
+ * const middle = Graph.addNode(mutable, "middle") // 1 - has both
3711
+ * const sink = Graph.addNode(mutable, "sink") // 2 - no outgoing
3712
+ * const isolated = Graph.addNode(mutable, "isolated") // 3 - no edges
3713
+ *
3714
+ * Graph.addEdge(mutable, source, middle, 1)
3715
+ * Graph.addEdge(mutable, middle, sink, 2)
3716
+ * })
3717
+ *
3718
+ * // Nodes with no outgoing edges (sinks + isolated)
3719
+ * const sinks = Array.from(Graph.indices(Graph.externals(graph, { direction: "outgoing" })))
3720
+ * console.log(sinks) // [2, 3]
3721
+ *
3722
+ * // Nodes with no incoming edges (sources + isolated)
3723
+ * const sources = Array.from(Graph.indices(Graph.externals(graph, { direction: "incoming" })))
3724
+ * console.log(sources) // [0, 3]
3725
+ * ```
3726
+ *
3727
+ * @since 3.18.0
3728
+ * @category iterators
3729
+ */
3730
+ export const externals = <N, E, T extends Kind = "directed">(
3731
+ graph: Graph<N, E, T> | MutableGraph<N, E, T>,
3732
+ config: ExternalsConfig = {}
3733
+ ): NodeWalker<N> => {
3734
+ const direction = config.direction ?? "outgoing"
3735
+
3736
+ return new Walker((f) => ({
3737
+ [Symbol.iterator]: () => {
3738
+ const nodeMap = graph.nodes
3739
+ const adjacencyMap = direction === "incoming"
3740
+ ? graph.reverseAdjacency
3741
+ : graph.adjacency
3742
+
3743
+ const nodeIterator = nodeMap.entries()
3744
+
3745
+ const nextMapped = () => {
3746
+ let current = nodeIterator.next()
3747
+ while (!current.done) {
3748
+ const [nodeIndex, nodeData] = current.value
3749
+ const adjacencyList = adjacencyMap.get(nodeIndex)
3750
+
3751
+ // Node is external if it has no edges in the specified direction
3752
+ if (adjacencyList === undefined || adjacencyList.length === 0) {
3753
+ return { done: false, value: f(nodeIndex, nodeData) }
3754
+ }
3755
+ current = nodeIterator.next()
3756
+ }
3757
+
3758
+ return { done: true, value: undefined } as const
3759
+ }
3760
+
3761
+ return { next: nextMapped }
3762
+ }
3763
+ }))
3764
+ }