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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. package/SourceLocation/package.json +6 -0
  2. package/dist/cjs/Effect.js +2 -28
  3. package/dist/cjs/Effect.js.map +1 -1
  4. package/dist/cjs/FiberRef.js +12 -1
  5. package/dist/cjs/FiberRef.js.map +1 -1
  6. package/dist/cjs/Layer.js +2 -24
  7. package/dist/cjs/Layer.js.map +1 -1
  8. package/dist/cjs/RuntimeFlags.js +1 -29
  9. package/dist/cjs/RuntimeFlags.js.map +1 -1
  10. package/dist/cjs/SourceLocation.js +60 -0
  11. package/dist/cjs/SourceLocation.js.map +1 -0
  12. package/dist/cjs/Tracer.js +1 -15
  13. package/dist/cjs/Tracer.js.map +1 -1
  14. package/dist/cjs/Utils.js +1 -1
  15. package/dist/cjs/Utils.js.map +1 -1
  16. package/dist/cjs/index.js +3 -1
  17. package/dist/cjs/index.js.map +1 -1
  18. package/dist/cjs/internal/clock.js +1 -1
  19. package/dist/cjs/internal/clock.js.map +1 -1
  20. package/dist/cjs/internal/core.js +17 -50
  21. package/dist/cjs/internal/core.js.map +1 -1
  22. package/dist/cjs/internal/effect/circular.js +18 -30
  23. package/dist/cjs/internal/effect/circular.js.map +1 -1
  24. package/dist/cjs/internal/fiberRuntime.js +16 -65
  25. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  26. package/dist/cjs/internal/layer/circular.js +1 -5
  27. package/dist/cjs/internal/layer/circular.js.map +1 -1
  28. package/dist/cjs/internal/layer.js +1 -3
  29. package/dist/cjs/internal/layer.js.map +1 -1
  30. package/dist/cjs/internal/logger.js +25 -2
  31. package/dist/cjs/internal/logger.js.map +1 -1
  32. package/dist/cjs/internal/runtimeFlags.js +2 -11
  33. package/dist/cjs/internal/runtimeFlags.js.map +1 -1
  34. package/dist/cjs/internal/tracer.js +1 -114
  35. package/dist/cjs/internal/tracer.js.map +1 -1
  36. package/dist/dts/Config.d.ts +2 -2
  37. package/dist/dts/Config.d.ts.map +1 -1
  38. package/dist/dts/Effect.d.ts +8 -29
  39. package/dist/dts/Effect.d.ts.map +1 -1
  40. package/dist/dts/FiberRef.d.ts +12 -0
  41. package/dist/dts/FiberRef.d.ts.map +1 -1
  42. package/dist/dts/Layer.d.ts +0 -22
  43. package/dist/dts/Layer.d.ts.map +1 -1
  44. package/dist/dts/RuntimeFlags.d.ts +0 -28
  45. package/dist/dts/RuntimeFlags.d.ts.map +1 -1
  46. package/dist/dts/SourceLocation.d.ts +88 -0
  47. package/dist/dts/SourceLocation.d.ts.map +1 -0
  48. package/dist/dts/Tracer.d.ts +0 -15
  49. package/dist/dts/Tracer.d.ts.map +1 -1
  50. package/dist/dts/index.d.ts +6 -0
  51. package/dist/dts/index.d.ts.map +1 -1
  52. package/dist/dts/internal/core.d.ts.map +1 -1
  53. package/dist/dts/internal/layer.d.ts.map +1 -1
  54. package/dist/dts/internal/runtimeFlags.d.ts.map +1 -1
  55. package/dist/esm/Effect.js +0 -26
  56. package/dist/esm/Effect.js.map +1 -1
  57. package/dist/esm/FiberRef.js +11 -0
  58. package/dist/esm/FiberRef.js.map +1 -1
  59. package/dist/esm/Layer.js +0 -22
  60. package/dist/esm/Layer.js.map +1 -1
  61. package/dist/esm/RuntimeFlags.js +0 -28
  62. package/dist/esm/RuntimeFlags.js.map +1 -1
  63. package/dist/esm/SourceLocation.js +51 -0
  64. package/dist/esm/SourceLocation.js.map +1 -0
  65. package/dist/esm/Tracer.js +0 -14
  66. package/dist/esm/Tracer.js.map +1 -1
  67. package/dist/esm/Utils.js +1 -1
  68. package/dist/esm/Utils.js.map +1 -1
  69. package/dist/esm/index.js +6 -0
  70. package/dist/esm/index.js.map +1 -1
  71. package/dist/esm/internal/clock.js +1 -1
  72. package/dist/esm/internal/clock.js.map +1 -1
  73. package/dist/esm/internal/core.js +12 -45
  74. package/dist/esm/internal/core.js.map +1 -1
  75. package/dist/esm/internal/effect/circular.js +18 -30
  76. package/dist/esm/internal/effect/circular.js.map +1 -1
  77. package/dist/esm/internal/fiberRuntime.js +13 -60
  78. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  79. package/dist/esm/internal/layer/circular.js +0 -4
  80. package/dist/esm/internal/layer/circular.js.map +1 -1
  81. package/dist/esm/internal/layer.js +0 -2
  82. package/dist/esm/internal/layer.js.map +1 -1
  83. package/dist/esm/internal/logger.js +25 -2
  84. package/dist/esm/internal/logger.js.map +1 -1
  85. package/dist/esm/internal/runtimeFlags.js +1 -9
  86. package/dist/esm/internal/runtimeFlags.js.map +1 -1
  87. package/dist/esm/internal/tracer.js +0 -111
  88. package/dist/esm/internal/tracer.js.map +1 -1
  89. package/package.json +12 -1
  90. package/src/Arbitrary.ts +1101 -0
  91. package/src/Array.ts +3589 -0
  92. package/src/BigDecimal.ts +1349 -0
  93. package/src/BigInt.ts +643 -0
  94. package/src/Boolean.ts +287 -0
  95. package/src/Brand.ts +360 -0
  96. package/src/Cache.ts +281 -0
  97. package/src/Cause.ts +1555 -0
  98. package/src/Channel.ts +2355 -0
  99. package/src/ChildExecutorDecision.ts +146 -0
  100. package/src/Chunk.ts +1495 -0
  101. package/src/Clock.ts +111 -0
  102. package/src/Config.ts +542 -0
  103. package/src/ConfigError.ts +270 -0
  104. package/src/ConfigProvider.ts +333 -0
  105. package/src/ConfigProviderPathPatch.ts +100 -0
  106. package/src/Console.ts +226 -0
  107. package/src/Context.ts +585 -0
  108. package/src/Cron.ts +706 -0
  109. package/src/Data.ts +596 -0
  110. package/src/DateTime.ts +1686 -0
  111. package/src/DefaultServices.ts +34 -0
  112. package/src/Deferred.ts +301 -0
  113. package/src/Differ.ts +450 -0
  114. package/src/Duration.ts +1000 -0
  115. package/src/Effect.ts +14817 -0
  116. package/src/Effectable.ts +107 -0
  117. package/src/Either.ts +1040 -0
  118. package/src/Encoding.ts +195 -0
  119. package/src/Equal.ts +98 -0
  120. package/src/Equivalence.ts +235 -0
  121. package/src/ExecutionPlan.ts +308 -0
  122. package/src/ExecutionStrategy.ts +119 -0
  123. package/src/Exit.ts +467 -0
  124. package/src/FastCheck.ts +9 -0
  125. package/src/Fiber.ts +744 -0
  126. package/src/FiberHandle.ts +540 -0
  127. package/src/FiberId.ts +195 -0
  128. package/src/FiberMap.ts +656 -0
  129. package/src/FiberRef.ts +444 -0
  130. package/src/FiberRefs.ts +204 -0
  131. package/src/FiberRefsPatch.ts +105 -0
  132. package/src/FiberSet.ts +491 -0
  133. package/src/FiberStatus.ts +108 -0
  134. package/src/Function.ts +1222 -0
  135. package/src/GlobalValue.ts +53 -0
  136. package/src/Graph.ts +3732 -0
  137. package/src/GroupBy.ts +103 -0
  138. package/src/HKT.ts +45 -0
  139. package/src/Hash.ts +195 -0
  140. package/src/HashMap.ts +519 -0
  141. package/src/HashRing.ts +317 -0
  142. package/src/HashSet.ts +2346 -0
  143. package/src/Inspectable.ts +287 -0
  144. package/src/Iterable.ts +1119 -0
  145. package/src/JSONSchema.ts +1044 -0
  146. package/src/KeyedPool.ts +167 -0
  147. package/src/Layer.ts +1228 -0
  148. package/src/LayerMap.ts +436 -0
  149. package/src/List.ts +977 -0
  150. package/src/LogLevel.ts +285 -0
  151. package/src/LogSpan.ts +25 -0
  152. package/src/Logger.ts +702 -0
  153. package/src/Mailbox.ts +268 -0
  154. package/src/ManagedRuntime.ts +180 -0
  155. package/src/Match.ts +1477 -0
  156. package/src/MergeDecision.ts +95 -0
  157. package/src/MergeState.ts +172 -0
  158. package/src/MergeStrategy.ts +107 -0
  159. package/src/Metric.ts +780 -0
  160. package/src/MetricBoundaries.ts +69 -0
  161. package/src/MetricHook.ts +151 -0
  162. package/src/MetricKey.ts +224 -0
  163. package/src/MetricKeyType.ts +262 -0
  164. package/src/MetricLabel.ts +47 -0
  165. package/src/MetricPair.ts +71 -0
  166. package/src/MetricPolling.ts +148 -0
  167. package/src/MetricRegistry.ts +48 -0
  168. package/src/MetricState.ts +257 -0
  169. package/src/Micro.ts +4405 -0
  170. package/src/ModuleVersion.ts +18 -0
  171. package/src/MutableHashMap.ts +411 -0
  172. package/src/MutableHashSet.ts +706 -0
  173. package/src/MutableList.ts +297 -0
  174. package/src/MutableQueue.ts +227 -0
  175. package/src/MutableRef.ts +202 -0
  176. package/src/NonEmptyIterable.ts +32 -0
  177. package/src/Number.ts +1071 -0
  178. package/src/Option.ts +2170 -0
  179. package/src/Order.ts +373 -0
  180. package/src/Ordering.ts +111 -0
  181. package/src/ParseResult.ts +2031 -0
  182. package/src/PartitionedSemaphore.ts +200 -0
  183. package/src/Pipeable.ts +566 -0
  184. package/src/Pool.ts +204 -0
  185. package/src/Predicate.ts +1405 -0
  186. package/src/Pretty.ts +205 -0
  187. package/src/PrimaryKey.ts +23 -0
  188. package/src/PubSub.ts +182 -0
  189. package/src/Queue.ts +644 -0
  190. package/src/Random.ts +204 -0
  191. package/src/RateLimiter.ts +138 -0
  192. package/src/RcMap.ts +141 -0
  193. package/src/RcRef.ts +122 -0
  194. package/src/Readable.ts +93 -0
  195. package/src/Record.ts +1274 -0
  196. package/src/RedBlackTree.ts +421 -0
  197. package/src/Redacted.ts +144 -0
  198. package/src/Ref.ts +180 -0
  199. package/src/RegExp.ts +38 -0
  200. package/src/Reloadable.ts +127 -0
  201. package/src/Request.ts +347 -0
  202. package/src/RequestBlock.ts +118 -0
  203. package/src/RequestResolver.ts +366 -0
  204. package/src/Resource.ts +119 -0
  205. package/src/Runtime.ts +383 -0
  206. package/src/RuntimeFlags.ts +336 -0
  207. package/src/RuntimeFlagsPatch.ts +183 -0
  208. package/src/STM.ts +2045 -0
  209. package/src/Schedule.ts +2219 -0
  210. package/src/ScheduleDecision.ts +62 -0
  211. package/src/ScheduleInterval.ts +151 -0
  212. package/src/ScheduleIntervals.ts +122 -0
  213. package/src/Scheduler.ts +353 -0
  214. package/src/Schema.ts +10914 -0
  215. package/src/SchemaAST.ts +3043 -0
  216. package/src/Scope.ts +204 -0
  217. package/src/ScopedCache.ts +151 -0
  218. package/src/ScopedRef.ts +117 -0
  219. package/src/Secret.ts +88 -0
  220. package/src/SingleProducerAsyncInput.ts +67 -0
  221. package/src/Sink.ts +1461 -0
  222. package/src/SortedMap.ts +287 -0
  223. package/src/SortedSet.ts +390 -0
  224. package/src/SourceLocation.ts +108 -0
  225. package/src/Stream.ts +6468 -0
  226. package/src/StreamEmit.ts +136 -0
  227. package/src/StreamHaltStrategy.ts +123 -0
  228. package/src/Streamable.ts +45 -0
  229. package/src/String.ts +778 -0
  230. package/src/Struct.ts +243 -0
  231. package/src/Subscribable.ts +100 -0
  232. package/src/SubscriptionRef.ts +298 -0
  233. package/src/Supervisor.ts +240 -0
  234. package/src/Symbol.ts +29 -0
  235. package/src/SynchronizedRef.ts +270 -0
  236. package/src/TArray.ts +495 -0
  237. package/src/TDeferred.ts +100 -0
  238. package/src/TMap.ts +515 -0
  239. package/src/TPriorityQueue.ts +223 -0
  240. package/src/TPubSub.ts +200 -0
  241. package/src/TQueue.ts +432 -0
  242. package/src/TRandom.ts +129 -0
  243. package/src/TReentrantLock.ts +224 -0
  244. package/src/TRef.ts +178 -0
  245. package/src/TSemaphore.ts +129 -0
  246. package/src/TSet.ts +365 -0
  247. package/src/TSubscriptionRef.ts +192 -0
  248. package/src/Take.ts +258 -0
  249. package/src/TestAnnotation.ts +158 -0
  250. package/src/TestAnnotationMap.ts +119 -0
  251. package/src/TestAnnotations.ts +117 -0
  252. package/src/TestClock.ts +556 -0
  253. package/src/TestConfig.ts +47 -0
  254. package/src/TestContext.ts +36 -0
  255. package/src/TestLive.ts +53 -0
  256. package/src/TestServices.ts +390 -0
  257. package/src/TestSized.ts +55 -0
  258. package/src/Tracer.ts +182 -0
  259. package/src/Trie.ts +840 -0
  260. package/src/Tuple.ts +305 -0
  261. package/src/Types.ts +353 -0
  262. package/src/Unify.ts +113 -0
  263. package/src/UpstreamPullRequest.ts +117 -0
  264. package/src/UpstreamPullStrategy.ts +121 -0
  265. package/src/Utils.ts +809 -0
  266. package/src/index.ts +1568 -0
  267. package/src/internal/array.ts +8 -0
  268. package/src/internal/blockedRequests.ts +520 -0
  269. package/src/internal/cache.ts +733 -0
  270. package/src/internal/cause.ts +1050 -0
  271. package/src/internal/channel/channelExecutor.ts +1200 -0
  272. package/src/internal/channel/channelState.ts +134 -0
  273. package/src/internal/channel/childExecutorDecision.ts +96 -0
  274. package/src/internal/channel/continuation.ts +200 -0
  275. package/src/internal/channel/mergeDecision.ts +113 -0
  276. package/src/internal/channel/mergeState.ts +120 -0
  277. package/src/internal/channel/mergeStrategy.ts +72 -0
  278. package/src/internal/channel/singleProducerAsyncInput.ts +259 -0
  279. package/src/internal/channel/subexecutor.ts +229 -0
  280. package/src/internal/channel/upstreamPullRequest.ts +84 -0
  281. package/src/internal/channel/upstreamPullStrategy.ts +87 -0
  282. package/src/internal/channel.ts +2603 -0
  283. package/src/internal/clock.ts +95 -0
  284. package/src/internal/completedRequestMap.ts +9 -0
  285. package/src/internal/concurrency.ts +54 -0
  286. package/src/internal/config.ts +716 -0
  287. package/src/internal/configError.ts +304 -0
  288. package/src/internal/configProvider/pathPatch.ts +97 -0
  289. package/src/internal/configProvider.ts +799 -0
  290. package/src/internal/console.ts +153 -0
  291. package/src/internal/context.ts +337 -0
  292. package/src/internal/core-effect.ts +2293 -0
  293. package/src/internal/core-stream.ts +998 -0
  294. package/src/internal/core.ts +3189 -0
  295. package/src/internal/data.ts +36 -0
  296. package/src/internal/dataSource.ts +327 -0
  297. package/src/internal/dateTime.ts +1277 -0
  298. package/src/internal/defaultServices/console.ts +100 -0
  299. package/src/internal/defaultServices.ts +163 -0
  300. package/src/internal/deferred.ts +46 -0
  301. package/src/internal/differ/chunkPatch.ts +211 -0
  302. package/src/internal/differ/contextPatch.ts +232 -0
  303. package/src/internal/differ/hashMapPatch.ts +220 -0
  304. package/src/internal/differ/hashSetPatch.ts +176 -0
  305. package/src/internal/differ/orPatch.ts +311 -0
  306. package/src/internal/differ/readonlyArrayPatch.ts +210 -0
  307. package/src/internal/differ.ts +200 -0
  308. package/src/internal/doNotation.ts +80 -0
  309. package/src/internal/effect/circular.ts +895 -0
  310. package/src/internal/effectable.ts +131 -0
  311. package/src/internal/either.ts +110 -0
  312. package/src/internal/encoding/base64.ts +286 -0
  313. package/src/internal/encoding/base64Url.ts +29 -0
  314. package/src/internal/encoding/common.ts +51 -0
  315. package/src/internal/encoding/hex.ts +315 -0
  316. package/src/internal/errors.ts +7 -0
  317. package/src/internal/executionPlan.ts +114 -0
  318. package/src/internal/executionStrategy.ts +74 -0
  319. package/src/internal/fiber.ts +388 -0
  320. package/src/internal/fiberId.ts +267 -0
  321. package/src/internal/fiberMessage.ts +82 -0
  322. package/src/internal/fiberRefs/patch.ts +144 -0
  323. package/src/internal/fiberRefs.ts +297 -0
  324. package/src/internal/fiberRuntime.ts +3842 -0
  325. package/src/internal/fiberScope.ts +71 -0
  326. package/src/internal/fiberStatus.ts +119 -0
  327. package/src/internal/groupBy.ts +530 -0
  328. package/src/internal/hashMap/array.ts +49 -0
  329. package/src/internal/hashMap/bitwise.ts +32 -0
  330. package/src/internal/hashMap/config.ts +14 -0
  331. package/src/internal/hashMap/keySet.ts +8 -0
  332. package/src/internal/hashMap/node.ts +391 -0
  333. package/src/internal/hashMap.ts +586 -0
  334. package/src/internal/hashSet.ts +323 -0
  335. package/src/internal/keyedPool.ts +244 -0
  336. package/src/internal/layer/circular.ts +214 -0
  337. package/src/internal/layer.ts +1483 -0
  338. package/src/internal/logSpan.ts +20 -0
  339. package/src/internal/logger-circular.ts +24 -0
  340. package/src/internal/logger.ts +522 -0
  341. package/src/internal/mailbox.ts +561 -0
  342. package/src/internal/managedRuntime/circular.ts +6 -0
  343. package/src/internal/managedRuntime.ts +134 -0
  344. package/src/internal/matcher.ts +652 -0
  345. package/src/internal/metric/boundaries.ts +75 -0
  346. package/src/internal/metric/hook.ts +483 -0
  347. package/src/internal/metric/key.ts +167 -0
  348. package/src/internal/metric/keyType.ts +238 -0
  349. package/src/internal/metric/label.ts +41 -0
  350. package/src/internal/metric/pair.ts +48 -0
  351. package/src/internal/metric/polling.ts +149 -0
  352. package/src/internal/metric/registry.ts +187 -0
  353. package/src/internal/metric/state.ts +290 -0
  354. package/src/internal/metric.ts +577 -0
  355. package/src/internal/opCodes/cause.ts +35 -0
  356. package/src/internal/opCodes/channel.ts +83 -0
  357. package/src/internal/opCodes/channelChildExecutorDecision.ts +17 -0
  358. package/src/internal/opCodes/channelMergeDecision.ts +11 -0
  359. package/src/internal/opCodes/channelMergeState.ts +17 -0
  360. package/src/internal/opCodes/channelMergeStrategy.ts +11 -0
  361. package/src/internal/opCodes/channelState.ts +23 -0
  362. package/src/internal/opCodes/channelUpstreamPullRequest.ts +11 -0
  363. package/src/internal/opCodes/channelUpstreamPullStrategy.ts +11 -0
  364. package/src/internal/opCodes/config.ts +65 -0
  365. package/src/internal/opCodes/configError.ts +35 -0
  366. package/src/internal/opCodes/continuation.ts +11 -0
  367. package/src/internal/opCodes/deferred.ts +11 -0
  368. package/src/internal/opCodes/effect.ts +89 -0
  369. package/src/internal/opCodes/layer.ts +59 -0
  370. package/src/internal/opCodes/streamHaltStrategy.ts +23 -0
  371. package/src/internal/option.ts +80 -0
  372. package/src/internal/pool.ts +432 -0
  373. package/src/internal/pubsub.ts +1762 -0
  374. package/src/internal/query.ts +204 -0
  375. package/src/internal/queue.ts +766 -0
  376. package/src/internal/random.ts +161 -0
  377. package/src/internal/rateLimiter.ts +93 -0
  378. package/src/internal/rcMap.ts +285 -0
  379. package/src/internal/rcRef.ts +192 -0
  380. package/src/internal/redBlackTree/iterator.ts +200 -0
  381. package/src/internal/redBlackTree/node.ts +68 -0
  382. package/src/internal/redBlackTree.ts +1245 -0
  383. package/src/internal/redacted.ts +73 -0
  384. package/src/internal/ref.ts +171 -0
  385. package/src/internal/reloadable.ts +140 -0
  386. package/src/internal/request.ts +177 -0
  387. package/src/internal/resource.ts +76 -0
  388. package/src/internal/ringBuffer.ts +68 -0
  389. package/src/internal/runtime.ts +558 -0
  390. package/src/internal/runtimeFlags.ts +178 -0
  391. package/src/internal/runtimeFlagsPatch.ts +103 -0
  392. package/src/internal/schedule/decision.ts +47 -0
  393. package/src/internal/schedule/interval.ts +101 -0
  394. package/src/internal/schedule/intervals.ts +180 -0
  395. package/src/internal/schedule.ts +2199 -0
  396. package/src/internal/schema/errors.ts +191 -0
  397. package/src/internal/schema/schemaId.ts +106 -0
  398. package/src/internal/schema/util.ts +50 -0
  399. package/src/internal/scopedCache.ts +644 -0
  400. package/src/internal/scopedRef.ts +118 -0
  401. package/src/internal/secret.ts +89 -0
  402. package/src/internal/singleShotGen.ts +35 -0
  403. package/src/internal/sink.ts +2120 -0
  404. package/src/internal/stack.ts +10 -0
  405. package/src/internal/stm/core.ts +817 -0
  406. package/src/internal/stm/entry.ts +59 -0
  407. package/src/internal/stm/journal.ts +123 -0
  408. package/src/internal/stm/opCodes/stm.ts +71 -0
  409. package/src/internal/stm/opCodes/stmState.ts +17 -0
  410. package/src/internal/stm/opCodes/strategy.ts +17 -0
  411. package/src/internal/stm/opCodes/tExit.ts +29 -0
  412. package/src/internal/stm/opCodes/tryCommit.ts +11 -0
  413. package/src/internal/stm/stm.ts +1453 -0
  414. package/src/internal/stm/stmState.ts +136 -0
  415. package/src/internal/stm/tArray.ts +550 -0
  416. package/src/internal/stm/tDeferred.ts +81 -0
  417. package/src/internal/stm/tExit.ts +190 -0
  418. package/src/internal/stm/tMap.ts +824 -0
  419. package/src/internal/stm/tPriorityQueue.ts +267 -0
  420. package/src/internal/stm/tPubSub.ts +551 -0
  421. package/src/internal/stm/tQueue.ts +393 -0
  422. package/src/internal/stm/tRandom.ts +140 -0
  423. package/src/internal/stm/tReentrantLock.ts +352 -0
  424. package/src/internal/stm/tRef.ts +195 -0
  425. package/src/internal/stm/tSemaphore.ts +113 -0
  426. package/src/internal/stm/tSet.ts +259 -0
  427. package/src/internal/stm/tSubscriptionRef.ts +286 -0
  428. package/src/internal/stm/tryCommit.ts +34 -0
  429. package/src/internal/stm/txnId.ts +14 -0
  430. package/src/internal/stm/versioned.ts +4 -0
  431. package/src/internal/stream/debounceState.ts +57 -0
  432. package/src/internal/stream/emit.ts +123 -0
  433. package/src/internal/stream/haltStrategy.ts +94 -0
  434. package/src/internal/stream/handoff.ts +187 -0
  435. package/src/internal/stream/handoffSignal.ts +59 -0
  436. package/src/internal/stream/pull.ts +34 -0
  437. package/src/internal/stream/sinkEndReason.ts +30 -0
  438. package/src/internal/stream/zipAllState.ts +88 -0
  439. package/src/internal/stream/zipChunksState.ts +56 -0
  440. package/src/internal/stream.ts +8801 -0
  441. package/src/internal/string-utils.ts +107 -0
  442. package/src/internal/subscriptionRef.ts +138 -0
  443. package/src/internal/supervisor/patch.ts +190 -0
  444. package/src/internal/supervisor.ts +303 -0
  445. package/src/internal/synchronizedRef.ts +114 -0
  446. package/src/internal/take.ts +199 -0
  447. package/src/internal/testing/sleep.ts +27 -0
  448. package/src/internal/testing/suspendedWarningData.ts +85 -0
  449. package/src/internal/testing/warningData.ts +94 -0
  450. package/src/internal/tracer.ts +150 -0
  451. package/src/internal/trie.ts +722 -0
  452. package/src/internal/version.ts +7 -0
@@ -0,0 +1,72 @@
1
+ import { dual } from "../../Function.js"
2
+ import type * as MergeStrategy from "../../MergeStrategy.js"
3
+ import { hasProperty } from "../../Predicate.js"
4
+ import * as OpCodes from "../opCodes/channelMergeStrategy.js"
5
+
6
+ /** @internal */
7
+ const MergeStrategySymbolKey = "effect/ChannelMergeStrategy"
8
+
9
+ /** @internal */
10
+ export const MergeStrategyTypeId: MergeStrategy.MergeStrategyTypeId = Symbol.for(
11
+ MergeStrategySymbolKey
12
+ ) as MergeStrategy.MergeStrategyTypeId
13
+
14
+ /** @internal */
15
+ const proto = {
16
+ [MergeStrategyTypeId]: MergeStrategyTypeId
17
+ }
18
+
19
+ /** @internal */
20
+ export const BackPressure = (_: void): MergeStrategy.MergeStrategy => {
21
+ const op = Object.create(proto)
22
+ op._tag = OpCodes.OP_BACK_PRESSURE
23
+ return op
24
+ }
25
+
26
+ /** @internal */
27
+ export const BufferSliding = (_: void): MergeStrategy.MergeStrategy => {
28
+ const op = Object.create(proto)
29
+ op._tag = OpCodes.OP_BUFFER_SLIDING
30
+ return op
31
+ }
32
+
33
+ /** @internal */
34
+ export const isMergeStrategy = (u: unknown): u is MergeStrategy.MergeStrategy => hasProperty(u, MergeStrategyTypeId)
35
+
36
+ /** @internal */
37
+ export const isBackPressure = (self: MergeStrategy.MergeStrategy): self is MergeStrategy.BackPressure =>
38
+ self._tag === OpCodes.OP_BACK_PRESSURE
39
+
40
+ /** @internal */
41
+ export const isBufferSliding = (self: MergeStrategy.MergeStrategy): self is MergeStrategy.BufferSliding =>
42
+ self._tag === OpCodes.OP_BUFFER_SLIDING
43
+
44
+ /** @internal */
45
+ export const match = dual<
46
+ <A>(options: {
47
+ readonly onBackPressure: () => A
48
+ readonly onBufferSliding: () => A
49
+ }) => (self: MergeStrategy.MergeStrategy) => A,
50
+ <A>(
51
+ self: MergeStrategy.MergeStrategy,
52
+ options: {
53
+ readonly onBackPressure: () => A
54
+ readonly onBufferSliding: () => A
55
+ }
56
+ ) => A
57
+ >(2, <A>(
58
+ self: MergeStrategy.MergeStrategy,
59
+ { onBackPressure, onBufferSliding }: {
60
+ readonly onBackPressure: () => A
61
+ readonly onBufferSliding: () => A
62
+ }
63
+ ): A => {
64
+ switch (self._tag) {
65
+ case OpCodes.OP_BACK_PRESSURE: {
66
+ return onBackPressure()
67
+ }
68
+ case OpCodes.OP_BUFFER_SLIDING: {
69
+ return onBufferSliding()
70
+ }
71
+ }
72
+ })
@@ -0,0 +1,259 @@
1
+ import * as Cause from "../../Cause.js"
2
+ import * as Deferred from "../../Deferred.js"
3
+ import * as Effect from "../../Effect.js"
4
+ import * as Either from "../../Either.js"
5
+ import * as Exit from "../../Exit.js"
6
+ import { pipe } from "../../Function.js"
7
+ import * as Ref from "../../Ref.js"
8
+ import type * as SingleProducerAsyncInput from "../../SingleProducerAsyncInput.js"
9
+
10
+ /** @internal */
11
+ type State<Err, Elem, _Done> =
12
+ | Empty
13
+ | Emit<Err, Elem, _Done>
14
+ | Error<Err>
15
+ | Done<_Done>
16
+
17
+ /** @internal */
18
+ const OP_STATE_EMPTY = "Empty" as const
19
+
20
+ /** @internal */
21
+ type OP_STATE_EMPTY = typeof OP_STATE_EMPTY
22
+
23
+ /** @internal */
24
+ const OP_STATE_EMIT = "Emit" as const
25
+
26
+ /** @internal */
27
+ type OP_STATE_EMIT = typeof OP_STATE_EMIT
28
+
29
+ /** @internal */
30
+ const OP_STATE_ERROR = "Error" as const
31
+
32
+ /** @internal */
33
+ type OP_STATE_ERROR = typeof OP_STATE_ERROR
34
+
35
+ /** @internal */
36
+ const OP_STATE_DONE = "Done" as const
37
+
38
+ /** @internal */
39
+ type OP_STATE_DONE = typeof OP_STATE_DONE
40
+
41
+ /** @internal */
42
+ interface Empty {
43
+ readonly _tag: OP_STATE_EMPTY
44
+ readonly notifyProducer: Deferred.Deferred<void>
45
+ }
46
+
47
+ /** @internal */
48
+ interface Emit<Err, Elem, Done> {
49
+ readonly _tag: OP_STATE_EMIT
50
+ readonly notifyConsumers: ReadonlyArray<Deferred.Deferred<Either.Either<Elem, Done>, Err>>
51
+ }
52
+
53
+ /** @internal */
54
+ interface Error<Err> {
55
+ readonly _tag: OP_STATE_ERROR
56
+ readonly cause: Cause.Cause<Err>
57
+ }
58
+
59
+ /** @internal */
60
+ interface Done<_Done> {
61
+ readonly _tag: OP_STATE_DONE
62
+ readonly done: _Done
63
+ }
64
+
65
+ /** @internal */
66
+ const stateEmpty = (notifyProducer: Deferred.Deferred<void>): State<never, never, never> => ({
67
+ _tag: OP_STATE_EMPTY,
68
+ notifyProducer
69
+ })
70
+
71
+ /** @internal */
72
+ const stateEmit = <Err, Elem, Done>(
73
+ notifyConsumers: ReadonlyArray<Deferred.Deferred<Either.Either<Elem, Done>, Err>>
74
+ ): State<Err, Elem, Done> => ({
75
+ _tag: OP_STATE_EMIT,
76
+ notifyConsumers
77
+ })
78
+
79
+ /** @internal */
80
+ const stateError = <Err>(cause: Cause.Cause<Err>): State<Err, never, never> => ({
81
+ _tag: OP_STATE_ERROR,
82
+ cause
83
+ })
84
+
85
+ /** @internal */
86
+ const stateDone = <Done>(done: Done): State<never, never, Done> => ({
87
+ _tag: OP_STATE_DONE,
88
+ done
89
+ })
90
+
91
+ /** @internal */
92
+ class SingleProducerAsyncInputImpl<in out Err, in out Elem, in out Done>
93
+ implements SingleProducerAsyncInput.SingleProducerAsyncInput<Err, Elem, Done>
94
+ {
95
+ constructor(readonly ref: Ref.Ref<State<Err, Elem, Done>>) {
96
+ }
97
+
98
+ awaitRead(): Effect.Effect<unknown> {
99
+ return Effect.flatten(
100
+ Ref.modify(this.ref, (state) =>
101
+ state._tag === OP_STATE_EMPTY ?
102
+ [Deferred.await(state.notifyProducer), state as State<Err, Elem, Done>] :
103
+ [Effect.void, state])
104
+ )
105
+ }
106
+
107
+ get close(): Effect.Effect<unknown> {
108
+ return Effect.fiberIdWith((fiberId) => this.error(Cause.interrupt(fiberId)))
109
+ }
110
+
111
+ done(value: Done): Effect.Effect<unknown> {
112
+ return Effect.flatten(
113
+ Ref.modify(this.ref, (state) => {
114
+ switch (state._tag) {
115
+ case OP_STATE_EMPTY: {
116
+ return [Deferred.await(state.notifyProducer), state]
117
+ }
118
+ case OP_STATE_EMIT: {
119
+ return [
120
+ Effect.forEach(
121
+ state.notifyConsumers,
122
+ (deferred) => Deferred.succeed(deferred, Either.left(value)),
123
+ { discard: true }
124
+ ),
125
+ stateDone(value) as State<Err, Elem, Done>
126
+ ]
127
+ }
128
+ case OP_STATE_ERROR: {
129
+ return [Effect.interrupt, state]
130
+ }
131
+ case OP_STATE_DONE: {
132
+ return [Effect.interrupt, state]
133
+ }
134
+ }
135
+ })
136
+ )
137
+ }
138
+
139
+ emit(element: Elem): Effect.Effect<unknown> {
140
+ return Effect.flatMap(Deferred.make<void>(), (deferred) =>
141
+ Effect.flatten(
142
+ Ref.modify(this.ref, (state) => {
143
+ switch (state._tag) {
144
+ case OP_STATE_EMPTY: {
145
+ return [Deferred.await(state.notifyProducer), state]
146
+ }
147
+ case OP_STATE_EMIT: {
148
+ const notifyConsumer = state.notifyConsumers[0]
149
+ const notifyConsumers = state.notifyConsumers.slice(1)
150
+ if (notifyConsumer !== undefined) {
151
+ return [
152
+ Deferred.succeed(notifyConsumer, Either.right(element)),
153
+ (notifyConsumers.length === 0 ?
154
+ stateEmpty(deferred) :
155
+ stateEmit(notifyConsumers)) as State<Err, Elem, Done>
156
+ ]
157
+ }
158
+ throw new Error(
159
+ "Bug: Channel.SingleProducerAsyncInput.emit - Queue was empty! please report an issue at https://github.com/Effect-TS/effect/issues"
160
+ )
161
+ }
162
+ case OP_STATE_ERROR: {
163
+ return [Effect.interrupt, state]
164
+ }
165
+ case OP_STATE_DONE: {
166
+ return [Effect.interrupt, state]
167
+ }
168
+ }
169
+ })
170
+ ))
171
+ }
172
+
173
+ error(cause: Cause.Cause<Err>): Effect.Effect<unknown> {
174
+ return Effect.flatten(
175
+ Ref.modify(this.ref, (state) => {
176
+ switch (state._tag) {
177
+ case OP_STATE_EMPTY: {
178
+ return [Deferred.await(state.notifyProducer), state]
179
+ }
180
+ case OP_STATE_EMIT: {
181
+ return [
182
+ Effect.forEach(
183
+ state.notifyConsumers,
184
+ (deferred) => Deferred.failCause(deferred, cause),
185
+ { discard: true }
186
+ ),
187
+ stateError(cause) as State<Err, Elem, Done>
188
+ ]
189
+ }
190
+ case OP_STATE_ERROR: {
191
+ return [Effect.interrupt, state]
192
+ }
193
+ case OP_STATE_DONE: {
194
+ return [Effect.interrupt, state]
195
+ }
196
+ }
197
+ })
198
+ )
199
+ }
200
+
201
+ get take(): Effect.Effect<Exit.Exit<Elem, Either.Either<Done, Err>>> {
202
+ return this.takeWith(
203
+ (cause) => Exit.failCause(Cause.map(cause, Either.left)),
204
+ (elem) => Exit.succeed(elem) as Exit.Exit<Elem, Either.Either<Done, Err>>,
205
+ (done) => Exit.fail(Either.right(done))
206
+ )
207
+ }
208
+
209
+ takeWith<A>(
210
+ onError: (cause: Cause.Cause<Err>) => A,
211
+ onElement: (element: Elem) => A,
212
+ onDone: (value: Done) => A
213
+ ): Effect.Effect<A> {
214
+ return Effect.flatMap(Deferred.make<Either.Either<Elem, Done>, Err>(), (deferred) =>
215
+ Effect.flatten(
216
+ Ref.modify(this.ref, (state) => {
217
+ switch (state._tag) {
218
+ case OP_STATE_EMPTY: {
219
+ return [
220
+ Effect.zipRight(
221
+ Deferred.succeed(state.notifyProducer, void 0),
222
+ Effect.matchCause(Deferred.await(deferred), {
223
+ onFailure: onError,
224
+ onSuccess: Either.match({ onLeft: onDone, onRight: onElement })
225
+ })
226
+ ),
227
+ stateEmit([deferred])
228
+ ]
229
+ }
230
+ case OP_STATE_EMIT: {
231
+ return [
232
+ Effect.matchCause(Deferred.await(deferred), {
233
+ onFailure: onError,
234
+ onSuccess: Either.match({ onLeft: onDone, onRight: onElement })
235
+ }),
236
+ stateEmit([...state.notifyConsumers, deferred])
237
+ ]
238
+ }
239
+ case OP_STATE_ERROR: {
240
+ return [Effect.succeed(onError(state.cause)), state]
241
+ }
242
+ case OP_STATE_DONE: {
243
+ return [Effect.succeed(onDone(state.done)), state]
244
+ }
245
+ }
246
+ })
247
+ ))
248
+ }
249
+ }
250
+
251
+ /** @internal */
252
+ export const make = <Err, Elem, Done>(): Effect.Effect<
253
+ SingleProducerAsyncInput.SingleProducerAsyncInput<Err, Elem, Done>
254
+ > =>
255
+ pipe(
256
+ Deferred.make<void>(),
257
+ Effect.flatMap((deferred) => Ref.make(stateEmpty(deferred) as State<Err, Elem, Done>)),
258
+ Effect.map((ref) => new SingleProducerAsyncInputImpl(ref))
259
+ )
@@ -0,0 +1,229 @@
1
+ import type * as ChildExecutorDecision from "../../ChildExecutorDecision.js"
2
+ import * as Effect from "../../Effect.js"
3
+ import * as Exit from "../../Exit.js"
4
+ import { pipe } from "../../Function.js"
5
+ import type * as UpstreamPullRequest from "../../UpstreamPullRequest.js"
6
+ import type * as UpstreamPullStrategy from "../../UpstreamPullStrategy.js"
7
+ import type { ErasedChannel, ErasedExecutor } from "./channelExecutor.js"
8
+
9
+ /** @internal */
10
+ export interface Subexecutor<in out R> {
11
+ close(exit: Exit.Exit<unknown, unknown>): Effect.Effect<unknown, never, R> | undefined
12
+ enqueuePullFromChild(child: PullFromChild<R>): Subexecutor<R>
13
+ }
14
+
15
+ /** @internal */
16
+ export type Primitive<Env> = PullFromChild<Env> | PullFromUpstream<Env> | DrainChildExecutors<Env> | Emit<Env>
17
+
18
+ /** @internal */
19
+ export const OP_PULL_FROM_CHILD = "PullFromChild" as const
20
+
21
+ /** @internal */
22
+ export type OP_PULL_FROM_CHILD = typeof OP_PULL_FROM_CHILD
23
+
24
+ /** @internal */
25
+ export const OP_PULL_FROM_UPSTREAM = "PullFromUpstream" as const
26
+
27
+ /** @internal */
28
+ export type OP_PULL_FROM_UPSTREAM = typeof OP_PULL_FROM_UPSTREAM
29
+
30
+ /** @internal */
31
+ export const OP_DRAIN_CHILD_EXECUTORS = "DrainChildExecutors" as const
32
+
33
+ /** @internal */
34
+ export type OP_DRAIN_CHILD_EXECUTORS = typeof OP_DRAIN_CHILD_EXECUTORS
35
+
36
+ /** @internal */
37
+ export const OP_EMIT = "Emit" as const
38
+
39
+ /** @internal */
40
+ export type OP_EMIT = typeof OP_EMIT
41
+
42
+ /**
43
+ * Execute the `childExecutor` and on each emitted value, decide what to do by
44
+ * `onEmit`.
45
+ *
46
+ * @internal
47
+ */
48
+ export class PullFromChild<in out R> implements Subexecutor<R> {
49
+ readonly _tag: OP_PULL_FROM_CHILD = OP_PULL_FROM_CHILD
50
+
51
+ constructor(
52
+ readonly childExecutor: ErasedExecutor<R>,
53
+ readonly parentSubexecutor: Subexecutor<R>,
54
+ readonly onEmit: (value: unknown) => ChildExecutorDecision.ChildExecutorDecision
55
+ ) {
56
+ }
57
+
58
+ close(exit: Exit.Exit<unknown, unknown>): Effect.Effect<unknown, never, R> | undefined {
59
+ const fin1 = this.childExecutor.close(exit)
60
+ const fin2 = this.parentSubexecutor.close(exit)
61
+ if (fin1 !== undefined && fin2 !== undefined) {
62
+ return Effect.zipWith(
63
+ Effect.exit(fin1),
64
+ Effect.exit(fin2),
65
+ (exit1, exit2) => pipe(exit1, Exit.zipRight(exit2))
66
+ )
67
+ } else if (fin1 !== undefined) {
68
+ return fin1
69
+ } else if (fin2 !== undefined) {
70
+ return fin2
71
+ } else {
72
+ return undefined
73
+ }
74
+ }
75
+
76
+ enqueuePullFromChild(_child: PullFromChild<R>): Subexecutor<R> {
77
+ return this
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Execute `upstreamExecutor` and for each emitted element, spawn a child
83
+ * channel and continue with processing it by `PullFromChild`.
84
+ *
85
+ * @internal
86
+ */
87
+ export class PullFromUpstream<in out R> implements Subexecutor<R> {
88
+ readonly _tag: OP_PULL_FROM_UPSTREAM = OP_PULL_FROM_UPSTREAM
89
+
90
+ constructor(
91
+ readonly upstreamExecutor: ErasedExecutor<R>,
92
+ readonly createChild: (value: unknown) => ErasedChannel<R>,
93
+ readonly lastDone: unknown,
94
+ readonly activeChildExecutors: ReadonlyArray<PullFromChild<R> | undefined>,
95
+ readonly combineChildResults: (x: unknown, y: unknown) => unknown,
96
+ readonly combineWithChildResult: (x: unknown, y: unknown) => unknown,
97
+ readonly onPull: (
98
+ request: UpstreamPullRequest.UpstreamPullRequest<unknown>
99
+ ) => UpstreamPullStrategy.UpstreamPullStrategy<unknown>,
100
+ readonly onEmit: (value: unknown) => ChildExecutorDecision.ChildExecutorDecision
101
+ ) {
102
+ }
103
+
104
+ close(exit: Exit.Exit<unknown, unknown>): Effect.Effect<unknown, never, R> | undefined {
105
+ const fin1 = this.upstreamExecutor.close(exit)
106
+ const fins = [
107
+ ...this.activeChildExecutors.map((child) =>
108
+ child !== undefined ?
109
+ child.childExecutor.close(exit) :
110
+ undefined
111
+ ),
112
+ fin1
113
+ ]
114
+ const result = fins.reduce(
115
+ (acc: Effect.Effect<Exit.Exit<unknown, unknown>, never, R> | undefined, next) => {
116
+ if (acc !== undefined && next !== undefined) {
117
+ return Effect.zipWith(
118
+ acc,
119
+ Effect.exit(next),
120
+ (exit1, exit2) => Exit.zipRight(exit1, exit2)
121
+ )
122
+ } else if (acc !== undefined) {
123
+ return acc
124
+ } else if (next !== undefined) {
125
+ return Effect.exit(next)
126
+ } else {
127
+ return undefined
128
+ }
129
+ },
130
+ undefined
131
+ )
132
+ return result === undefined ? result : result
133
+ }
134
+
135
+ enqueuePullFromChild(child: PullFromChild<R>): Subexecutor<R> {
136
+ return new PullFromUpstream(
137
+ this.upstreamExecutor,
138
+ this.createChild,
139
+ this.lastDone,
140
+ [...this.activeChildExecutors, child],
141
+ this.combineChildResults,
142
+ this.combineWithChildResult,
143
+ this.onPull,
144
+ this.onEmit
145
+ )
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Transformed from `PullFromUpstream` when upstream has finished but there
151
+ * are still active child executors.
152
+ *
153
+ * @internal
154
+ */
155
+ export class DrainChildExecutors<in out R> implements Subexecutor<R> {
156
+ readonly _tag: OP_DRAIN_CHILD_EXECUTORS = OP_DRAIN_CHILD_EXECUTORS
157
+
158
+ constructor(
159
+ readonly upstreamExecutor: ErasedExecutor<R>,
160
+ readonly lastDone: unknown,
161
+ readonly activeChildExecutors: ReadonlyArray<PullFromChild<R> | undefined>,
162
+ readonly upstreamDone: Exit.Exit<unknown, unknown>,
163
+ readonly combineChildResults: (x: unknown, y: unknown) => unknown,
164
+ readonly combineWithChildResult: (x: unknown, y: unknown) => unknown,
165
+ readonly onPull: (
166
+ request: UpstreamPullRequest.UpstreamPullRequest<unknown>
167
+ ) => UpstreamPullStrategy.UpstreamPullStrategy<unknown>
168
+ ) {
169
+ }
170
+
171
+ close(exit: Exit.Exit<unknown, unknown>): Effect.Effect<unknown, never, R> | undefined {
172
+ const fin1 = this.upstreamExecutor.close(exit)
173
+ const fins = [
174
+ ...this.activeChildExecutors.map((child) => (child !== undefined ?
175
+ child.childExecutor.close(exit) :
176
+ undefined)
177
+ ),
178
+ fin1
179
+ ]
180
+ const result = fins.reduce(
181
+ (acc: Effect.Effect<Exit.Exit<unknown, unknown>, never, R> | undefined, next) => {
182
+ if (acc !== undefined && next !== undefined) {
183
+ return Effect.zipWith(
184
+ acc,
185
+ Effect.exit(next),
186
+ (exit1, exit2) => Exit.zipRight(exit1, exit2)
187
+ )
188
+ } else if (acc !== undefined) {
189
+ return acc
190
+ } else if (next !== undefined) {
191
+ return Effect.exit(next)
192
+ } else {
193
+ return undefined
194
+ }
195
+ },
196
+ undefined
197
+ )
198
+ return result === undefined ? result : result
199
+ }
200
+
201
+ enqueuePullFromChild(child: PullFromChild<R>): Subexecutor<R> {
202
+ return new DrainChildExecutors(
203
+ this.upstreamExecutor,
204
+ this.lastDone,
205
+ [...this.activeChildExecutors, child],
206
+ this.upstreamDone,
207
+ this.combineChildResults,
208
+ this.combineWithChildResult,
209
+ this.onPull
210
+ )
211
+ }
212
+ }
213
+
214
+ /** @internal */
215
+ export class Emit<in out R> implements Subexecutor<R> {
216
+ readonly _tag: OP_EMIT = OP_EMIT
217
+
218
+ constructor(readonly value: unknown, readonly next: Subexecutor<R>) {
219
+ }
220
+
221
+ close(exit: Exit.Exit<unknown, unknown>): Effect.Effect<unknown, never, R> | undefined {
222
+ const result = this.next.close(exit)
223
+ return result === undefined ? result : result
224
+ }
225
+
226
+ enqueuePullFromChild(_child: PullFromChild<R>): Subexecutor<R> {
227
+ return this
228
+ }
229
+ }
@@ -0,0 +1,84 @@
1
+ import { dual } from "../../Function.js"
2
+ import { hasProperty } from "../../Predicate.js"
3
+ import type * as UpstreamPullRequest from "../../UpstreamPullRequest.js"
4
+ import * as OpCodes from "../opCodes/channelUpstreamPullRequest.js"
5
+
6
+ /** @internal */
7
+ const UpstreamPullRequestSymbolKey = "effect/ChannelUpstreamPullRequest"
8
+
9
+ /** @internal */
10
+ export const UpstreamPullRequestTypeId: UpstreamPullRequest.UpstreamPullRequestTypeId = Symbol.for(
11
+ UpstreamPullRequestSymbolKey
12
+ ) as UpstreamPullRequest.UpstreamPullRequestTypeId
13
+
14
+ const upstreamPullRequestVariance = {
15
+ /* c8 ignore next */
16
+ _A: (_: never) => _
17
+ }
18
+
19
+ /** @internal */
20
+ const proto = {
21
+ [UpstreamPullRequestTypeId]: upstreamPullRequestVariance
22
+ }
23
+
24
+ /** @internal */
25
+ export const Pulled = <A>(value: A): UpstreamPullRequest.UpstreamPullRequest<A> => {
26
+ const op = Object.create(proto)
27
+ op._tag = OpCodes.OP_PULLED
28
+ op.value = value
29
+ return op
30
+ }
31
+
32
+ /** @internal */
33
+ export const NoUpstream = (activeDownstreamCount: number): UpstreamPullRequest.UpstreamPullRequest<never> => {
34
+ const op = Object.create(proto)
35
+ op._tag = OpCodes.OP_NO_UPSTREAM
36
+ op.activeDownstreamCount = activeDownstreamCount
37
+ return op
38
+ }
39
+
40
+ /** @internal */
41
+ export const isUpstreamPullRequest = (u: unknown): u is UpstreamPullRequest.UpstreamPullRequest<unknown> =>
42
+ hasProperty(u, UpstreamPullRequestTypeId)
43
+
44
+ /** @internal */
45
+ export const isPulled = <A>(
46
+ self: UpstreamPullRequest.UpstreamPullRequest<A>
47
+ ): self is UpstreamPullRequest.Pulled<A> => self._tag === OpCodes.OP_PULLED
48
+
49
+ /** @internal */
50
+ export const isNoUpstream = <A>(
51
+ self: UpstreamPullRequest.UpstreamPullRequest<A>
52
+ ): self is UpstreamPullRequest.NoUpstream => self._tag === OpCodes.OP_NO_UPSTREAM
53
+
54
+ /** @internal */
55
+ export const match = dual<
56
+ <A, Z>(
57
+ options: {
58
+ readonly onPulled: (value: A) => Z
59
+ readonly onNoUpstream: (activeDownstreamCount: number) => Z
60
+ }
61
+ ) => (self: UpstreamPullRequest.UpstreamPullRequest<A>) => Z,
62
+ <A, Z>(
63
+ self: UpstreamPullRequest.UpstreamPullRequest<A>,
64
+ options: {
65
+ readonly onPulled: (value: A) => Z
66
+ readonly onNoUpstream: (activeDownstreamCount: number) => Z
67
+ }
68
+ ) => Z
69
+ >(2, <A, Z>(
70
+ self: UpstreamPullRequest.UpstreamPullRequest<A>,
71
+ { onNoUpstream, onPulled }: {
72
+ readonly onPulled: (value: A) => Z
73
+ readonly onNoUpstream: (activeDownstreamCount: number) => Z
74
+ }
75
+ ): Z => {
76
+ switch (self._tag) {
77
+ case OpCodes.OP_PULLED: {
78
+ return onPulled(self.value)
79
+ }
80
+ case OpCodes.OP_NO_UPSTREAM: {
81
+ return onNoUpstream(self.activeDownstreamCount)
82
+ }
83
+ }
84
+ })