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

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