@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,161 @@
1
+ import type * as Arr from "../Array.js"
2
+ import * as Chunk from "../Chunk.js"
3
+ import * as Context from "../Context.js"
4
+ import type * as Effect from "../Effect.js"
5
+ import { pipe } from "../Function.js"
6
+ import * as Hash from "../Hash.js"
7
+ import type * as Random from "../Random.js"
8
+ import * as PCGRandom from "../Utils.js"
9
+ import * as core from "./core.js"
10
+
11
+ /** @internal */
12
+ const RandomSymbolKey = "effect/Random"
13
+
14
+ /** @internal */
15
+ export const RandomTypeId: Random.RandomTypeId = Symbol.for(
16
+ RandomSymbolKey
17
+ ) as Random.RandomTypeId
18
+
19
+ /** @internal */
20
+ export const randomTag: Context.Tag<Random.Random, Random.Random> = Context.GenericTag("effect/Random")
21
+ /** @internal */
22
+ class RandomImpl implements Random.Random {
23
+ readonly [RandomTypeId]: Random.RandomTypeId = RandomTypeId
24
+
25
+ readonly PRNG: PCGRandom.PCGRandom
26
+
27
+ constructor(readonly seed: number) {
28
+ this.PRNG = new PCGRandom.PCGRandom(seed)
29
+ }
30
+
31
+ get next(): Effect.Effect<number> {
32
+ return core.sync(() => this.PRNG.number())
33
+ }
34
+
35
+ get nextBoolean(): Effect.Effect<boolean> {
36
+ return core.map(this.next, (n) => n > 0.5)
37
+ }
38
+
39
+ get nextInt(): Effect.Effect<number> {
40
+ return core.sync(() => this.PRNG.integer(Number.MAX_SAFE_INTEGER))
41
+ }
42
+
43
+ nextRange(min: number, max: number): Effect.Effect<number> {
44
+ return core.map(this.next, (n) => (max - min) * n + min)
45
+ }
46
+
47
+ nextIntBetween(min: number, max: number): Effect.Effect<number> {
48
+ return core.sync(() => this.PRNG.integer(max - min) + min)
49
+ }
50
+
51
+ shuffle<A>(elements: Iterable<A>): Effect.Effect<Chunk.Chunk<A>> {
52
+ return shuffleWith(elements, (n) => this.nextIntBetween(0, n))
53
+ }
54
+ }
55
+
56
+ const shuffleWith = <A>(
57
+ elements: Iterable<A>,
58
+ nextIntBounded: (n: number) => Effect.Effect<number>
59
+ ): Effect.Effect<Chunk.Chunk<A>> => {
60
+ return core.suspend(() =>
61
+ pipe(
62
+ core.sync(() => Array.from(elements)),
63
+ core.flatMap((buffer) => {
64
+ const numbers: Array<number> = []
65
+ for (let i = buffer.length; i >= 2; i = i - 1) {
66
+ numbers.push(i)
67
+ }
68
+ return pipe(
69
+ numbers,
70
+ core.forEachSequentialDiscard((n) =>
71
+ pipe(
72
+ nextIntBounded(n),
73
+ core.map((k) => swap(buffer, n - 1, k))
74
+ )
75
+ ),
76
+ core.as(Chunk.fromIterable(buffer))
77
+ )
78
+ })
79
+ )
80
+ )
81
+ }
82
+
83
+ const swap = <A>(buffer: Array<A>, index1: number, index2: number): Array<A> => {
84
+ const tmp = buffer[index1]!
85
+ buffer[index1] = buffer[index2]!
86
+ buffer[index2] = tmp
87
+ return buffer
88
+ }
89
+
90
+ export const make = <A>(seed: A): Random.Random => new RandomImpl(Hash.hash(seed))
91
+
92
+ /** @internal */
93
+ class FixedRandomImpl implements Random.Random {
94
+ readonly [RandomTypeId]: Random.RandomTypeId = RandomTypeId
95
+
96
+ private index = 0
97
+
98
+ constructor(readonly values: Arr.NonEmptyArray<any>) {
99
+ if (values.length === 0) {
100
+ throw new Error("Requires at least one value")
101
+ }
102
+ }
103
+
104
+ private getNextValue(): any {
105
+ const value = this.values[this.index]
106
+ this.index = (this.index + 1) % this.values.length
107
+ return value
108
+ }
109
+
110
+ get next(): Effect.Effect<number> {
111
+ return core.sync(() => {
112
+ const value = this.getNextValue()
113
+ if (typeof value === "number") {
114
+ return Math.max(0, Math.min(1, value))
115
+ }
116
+ return Hash.hash(value) / 2147483647
117
+ })
118
+ }
119
+
120
+ get nextBoolean(): Effect.Effect<boolean> {
121
+ return core.sync(() => {
122
+ const value = this.getNextValue()
123
+ if (typeof value === "boolean") {
124
+ return value
125
+ }
126
+ return Hash.hash(value) % 2 === 0
127
+ })
128
+ }
129
+
130
+ get nextInt(): Effect.Effect<number> {
131
+ return core.sync(() => {
132
+ const value = this.getNextValue()
133
+ if (typeof value === "number" && Number.isFinite(value)) {
134
+ return Math.round(value)
135
+ }
136
+ return Math.abs(Hash.hash(value))
137
+ })
138
+ }
139
+
140
+ nextRange(min: number, max: number): Effect.Effect<number> {
141
+ return core.map(this.next, (n) => (max - min) * n + min)
142
+ }
143
+
144
+ nextIntBetween(min: number, max: number): Effect.Effect<number> {
145
+ return core.sync(() => {
146
+ const value = this.getNextValue()
147
+ if (typeof value === "number" && Number.isFinite(value)) {
148
+ return Math.max(min, Math.min(max - 1, Math.round(value)))
149
+ }
150
+ const hash = Math.abs(Hash.hash(value))
151
+ return min + (hash % (max - min))
152
+ })
153
+ }
154
+
155
+ shuffle<A>(elements: Iterable<A>): Effect.Effect<Chunk.Chunk<A>> {
156
+ return shuffleWith(elements, (n) => this.nextIntBetween(0, n))
157
+ }
158
+ }
159
+
160
+ /** @internal */
161
+ export const fixed = <T extends Arr.NonEmptyArray<any>>(values: T): Random.Random => new FixedRandomImpl(values)
@@ -0,0 +1,93 @@
1
+ import type { DurationInput } from "../Duration.js"
2
+ import * as Duration from "../Duration.js"
3
+ import * as Effect from "../Effect.js"
4
+ import * as FiberRef from "../FiberRef.js"
5
+ import { pipe } from "../Function.js"
6
+ import { globalValue } from "../GlobalValue.js"
7
+ import type * as RateLimiter from "../RateLimiter.js"
8
+ import type * as Scope from "../Scope.js"
9
+
10
+ /** @internal */
11
+ export const make = ({
12
+ algorithm = "token-bucket",
13
+ interval,
14
+ limit
15
+ }: RateLimiter.RateLimiter.Options): Effect.Effect<
16
+ RateLimiter.RateLimiter,
17
+ never,
18
+ Scope.Scope
19
+ > => {
20
+ switch (algorithm) {
21
+ case "fixed-window": {
22
+ return fixedWindow(limit, interval)
23
+ }
24
+ case "token-bucket": {
25
+ return tokenBucket(limit, interval)
26
+ }
27
+ }
28
+ }
29
+
30
+ const tokenBucket = (limit: number, window: DurationInput): Effect.Effect<
31
+ RateLimiter.RateLimiter,
32
+ never,
33
+ Scope.Scope
34
+ > =>
35
+ Effect.gen(function*() {
36
+ const millisPerToken = Math.ceil(Duration.toMillis(window) / limit)
37
+ const semaphore = yield* Effect.makeSemaphore(limit)
38
+ const latch = yield* Effect.makeSemaphore(0)
39
+ const refill: Effect.Effect<void> = Effect.sleep(millisPerToken).pipe(
40
+ Effect.zipRight(latch.releaseAll),
41
+ Effect.zipRight(semaphore.release(1)),
42
+ Effect.flatMap((free) => free === limit ? Effect.void : refill)
43
+ )
44
+ yield* pipe(
45
+ latch.take(1),
46
+ Effect.zipRight(refill),
47
+ Effect.forever,
48
+ Effect.forkScoped,
49
+ Effect.interruptible
50
+ )
51
+ const take = Effect.uninterruptibleMask((restore) =>
52
+ Effect.flatMap(
53
+ FiberRef.get(currentCost),
54
+ (cost) => Effect.zipRight(restore(semaphore.take(cost)), latch.release(1))
55
+ )
56
+ )
57
+ return (effect) => Effect.zipRight(take, effect)
58
+ })
59
+
60
+ const fixedWindow = (limit: number, window: DurationInput): Effect.Effect<
61
+ RateLimiter.RateLimiter,
62
+ never,
63
+ Scope.Scope
64
+ > =>
65
+ Effect.gen(function*() {
66
+ const semaphore = yield* Effect.makeSemaphore(limit)
67
+ const latch = yield* Effect.makeSemaphore(0)
68
+ yield* pipe(
69
+ latch.take(1),
70
+ Effect.zipRight(Effect.sleep(window)),
71
+ Effect.zipRight(latch.releaseAll),
72
+ Effect.zipRight(semaphore.releaseAll),
73
+ Effect.forever,
74
+ Effect.forkScoped,
75
+ Effect.interruptible
76
+ )
77
+ const take = Effect.uninterruptibleMask((restore) =>
78
+ Effect.flatMap(
79
+ FiberRef.get(currentCost),
80
+ (cost) => Effect.zipRight(restore(semaphore.take(cost)), latch.release(1))
81
+ )
82
+ )
83
+ return (effect) => Effect.zipRight(take, effect)
84
+ })
85
+
86
+ /** @internal */
87
+ const currentCost = globalValue(
88
+ Symbol.for("effect/RateLimiter/currentCost"),
89
+ () => FiberRef.unsafeMake(1)
90
+ )
91
+
92
+ /** @internal */
93
+ export const withCost = (cost: number) => Effect.locally(currentCost, cost)
@@ -0,0 +1,285 @@
1
+ import type * as Cause from "../Cause.js"
2
+ import * as Context from "../Context.js"
3
+ import type * as Deferred from "../Deferred.js"
4
+ import * as Duration from "../Duration.js"
5
+ import type { Effect } from "../Effect.js"
6
+ import type { RuntimeFiber } from "../Fiber.js"
7
+ import { dual, identity } from "../Function.js"
8
+ import * as MutableHashMap from "../MutableHashMap.js"
9
+ import { pipeArguments } from "../Pipeable.js"
10
+ import type * as RcMap from "../RcMap.js"
11
+ import type * as Scope from "../Scope.js"
12
+ import * as coreEffect from "./core-effect.js"
13
+ import * as core from "./core.js"
14
+ import * as circular from "./effect/circular.js"
15
+ import * as fiberRuntime from "./fiberRuntime.js"
16
+
17
+ /** @internal */
18
+ export const TypeId: RcMap.TypeId = Symbol.for("effect/RcMap") as RcMap.TypeId
19
+
20
+ type State<K, A, E> = State.Open<K, A, E> | State.Closed
21
+
22
+ declare namespace State {
23
+ interface Open<K, A, E> {
24
+ readonly _tag: "Open"
25
+ readonly map: MutableHashMap.MutableHashMap<K, Entry<A, E>>
26
+ }
27
+
28
+ interface Closed {
29
+ readonly _tag: "Closed"
30
+ }
31
+
32
+ interface Entry<A, E> {
33
+ readonly deferred: Deferred.Deferred<A, E>
34
+ readonly scope: Scope.CloseableScope
35
+ readonly finalizer: Effect<void>
36
+ fiber: RuntimeFiber<void, never> | undefined
37
+ expiresAt: number
38
+ refCount: number
39
+ }
40
+ }
41
+
42
+ const variance: RcMap.RcMap.Variance<any, any, any> = {
43
+ _K: identity,
44
+ _A: identity,
45
+ _E: identity
46
+ }
47
+
48
+ class RcMapImpl<K, A, E> implements RcMap.RcMap<K, A, E> {
49
+ readonly [TypeId]: RcMap.RcMap.Variance<K, A, E>
50
+
51
+ state: State<K, A, E> = {
52
+ _tag: "Open",
53
+ map: MutableHashMap.empty()
54
+ }
55
+ readonly semaphore = circular.unsafeMakeSemaphore(1)
56
+
57
+ constructor(
58
+ readonly lookup: (key: K) => Effect<A, E, Scope.Scope>,
59
+ readonly context: Context.Context<never>,
60
+ readonly scope: Scope.Scope,
61
+ readonly idleTimeToLive: Duration.Duration | undefined,
62
+ readonly capacity: number
63
+ ) {
64
+ this[TypeId] = variance
65
+ }
66
+
67
+ pipe() {
68
+ return pipeArguments(this, arguments)
69
+ }
70
+ }
71
+
72
+ /** @internal */
73
+ export const make: {
74
+ <K, A, E, R>(options: {
75
+ readonly lookup: (key: K) => Effect<A, E, R>
76
+ readonly idleTimeToLive?: Duration.DurationInput | undefined
77
+ readonly capacity?: undefined
78
+ }): Effect<RcMap.RcMap<K, A, E>, never, Scope.Scope | R>
79
+ <K, A, E, R>(options: {
80
+ readonly lookup: (key: K) => Effect<A, E, R>
81
+ readonly idleTimeToLive?: Duration.DurationInput | undefined
82
+ readonly capacity: number
83
+ }): Effect<RcMap.RcMap<K, A, E | Cause.ExceededCapacityException>, never, Scope.Scope | R>
84
+ } = <K, A, E, R>(options: {
85
+ readonly lookup: (key: K) => Effect<A, E, R>
86
+ readonly idleTimeToLive?: Duration.DurationInput | undefined
87
+ readonly capacity?: number | undefined
88
+ }) =>
89
+ core.withFiberRuntime<RcMap.RcMap<K, A, E>, never, R | Scope.Scope>((fiber) => {
90
+ const context = fiber.getFiberRef(core.currentContext) as Context.Context<R | Scope.Scope>
91
+ const scope = Context.get(context, fiberRuntime.scopeTag)
92
+ const self = new RcMapImpl<K, A, E>(
93
+ options.lookup as any,
94
+ context,
95
+ scope,
96
+ options.idleTimeToLive ? Duration.decode(options.idleTimeToLive) : undefined,
97
+ Math.max(options.capacity ?? Number.POSITIVE_INFINITY, 0)
98
+ )
99
+ return core.as(
100
+ scope.addFinalizer(() =>
101
+ core.suspend(() => {
102
+ if (self.state._tag === "Closed") {
103
+ return core.void
104
+ }
105
+ const map = self.state.map
106
+ self.state = { _tag: "Closed" }
107
+ return core.forEachSequentialDiscard(
108
+ map,
109
+ ([, entry]) => core.scopeClose(entry.scope, core.exitVoid)
110
+ ).pipe(
111
+ core.tap(() => {
112
+ MutableHashMap.clear(map)
113
+ }),
114
+ self.semaphore.withPermits(1)
115
+ )
116
+ })
117
+ ),
118
+ self
119
+ )
120
+ })
121
+
122
+ /** @internal */
123
+ export const get: {
124
+ <K>(key: K): <A, E>(self: RcMap.RcMap<K, A, E>) => Effect<A, E, Scope.Scope>
125
+ <K, A, E>(self: RcMap.RcMap<K, A, E>, key: K): Effect<A, E, Scope.Scope>
126
+ } = dual(2, <K, A, E>(self_: RcMap.RcMap<K, A, E>, key: K): Effect<A, E, Scope.Scope> => {
127
+ const self = self_ as RcMapImpl<K, A, E>
128
+ return core.uninterruptibleMask((restore) => getImpl(self, key, restore as any))
129
+ })
130
+
131
+ const getImpl = core.fnUntraced(function*<K, A, E>(self: RcMapImpl<K, A, E>, key: K, restore: <A>(a: A) => A) {
132
+ if (self.state._tag === "Closed") {
133
+ return yield* core.interrupt
134
+ }
135
+ const state = self.state
136
+ const o = MutableHashMap.get(state.map, key)
137
+ let entry: State.Entry<A, E>
138
+ if (o._tag === "Some") {
139
+ entry = o.value
140
+ entry.refCount++
141
+ } else if (Number.isFinite(self.capacity) && MutableHashMap.size(self.state.map) >= self.capacity) {
142
+ return yield* core.fail(
143
+ new core.ExceededCapacityException(`RcMap attempted to exceed capacity of ${self.capacity}`)
144
+ ) as Effect<never>
145
+ } else {
146
+ entry = yield* self.semaphore.withPermits(1)(acquire(self, key, restore))
147
+ }
148
+ const scope = yield* fiberRuntime.scopeTag
149
+ yield* scope.addFinalizer(() => entry.finalizer)
150
+ return yield* restore(core.deferredAwait(entry.deferred))
151
+ })
152
+
153
+ const acquire = core.fnUntraced(function*<K, A, E>(self: RcMapImpl<K, A, E>, key: K, restore: <A>(a: A) => A) {
154
+ const scope = yield* fiberRuntime.scopeMake()
155
+ const deferred = yield* core.deferredMake<A, E>()
156
+ const acquire = self.lookup(key)
157
+ const contextMap = new Map(self.context.unsafeMap)
158
+ yield* restore(core.mapInputContext(
159
+ acquire as Effect<A, E>,
160
+ (inputContext: Context.Context<never>) => {
161
+ inputContext.unsafeMap.forEach((value, key) => {
162
+ contextMap.set(key, value)
163
+ })
164
+ contextMap.set(fiberRuntime.scopeTag.key, scope)
165
+ return Context.unsafeMake(contextMap)
166
+ }
167
+ )).pipe(
168
+ core.exit,
169
+ core.flatMap((exit) => core.deferredDone(deferred, exit)),
170
+ circular.forkIn(scope)
171
+ )
172
+ const entry: State.Entry<A, E> = {
173
+ deferred,
174
+ scope,
175
+ finalizer: undefined as any,
176
+ fiber: undefined,
177
+ expiresAt: 0,
178
+ refCount: 1
179
+ }
180
+ ;(entry as any).finalizer = release(self, key, entry)
181
+ if (self.state._tag === "Open") {
182
+ MutableHashMap.set(self.state.map, key, entry)
183
+ }
184
+ return entry
185
+ })
186
+
187
+ const release = <K, A, E>(self: RcMapImpl<K, A, E>, key: K, entry: State.Entry<A, E>) =>
188
+ coreEffect.clockWith((clock) => {
189
+ entry.refCount--
190
+ if (entry.refCount > 0) {
191
+ return core.void
192
+ } else if (
193
+ self.state._tag === "Closed"
194
+ || !MutableHashMap.has(self.state.map, key)
195
+ || self.idleTimeToLive === undefined
196
+ ) {
197
+ if (self.state._tag === "Open") {
198
+ MutableHashMap.remove(self.state.map, key)
199
+ }
200
+ return core.scopeClose(entry.scope, core.exitVoid)
201
+ }
202
+
203
+ if (!Duration.isFinite(self.idleTimeToLive)) {
204
+ return core.void
205
+ }
206
+
207
+ entry.expiresAt = clock.unsafeCurrentTimeMillis() + Duration.toMillis(self.idleTimeToLive)
208
+ if (entry.fiber) return core.void
209
+
210
+ return core.interruptibleMask(function loop(restore): Effect<void> {
211
+ const now = clock.unsafeCurrentTimeMillis()
212
+ const remaining = entry.expiresAt - now
213
+ if (remaining <= 0) {
214
+ if (self.state._tag === "Closed" || entry.refCount > 0) return core.void
215
+ MutableHashMap.remove(self.state.map, key)
216
+ return restore(core.scopeClose(entry.scope, core.exitVoid))
217
+ }
218
+ return core.flatMap(clock.sleep(Duration.millis(remaining)), () => loop(restore))
219
+ }).pipe(
220
+ fiberRuntime.ensuring(core.sync(() => {
221
+ entry.fiber = undefined
222
+ })),
223
+ circular.forkIn(self.scope),
224
+ core.tap((fiber) => {
225
+ entry.fiber = fiber
226
+ }),
227
+ self.semaphore.withPermits(1)
228
+ )
229
+ })
230
+
231
+ /** @internal */
232
+ export const keys = <K, A, E>(self: RcMap.RcMap<K, A, E>): Effect<Array<K>> => {
233
+ const impl = self as RcMapImpl<K, A, E>
234
+ return core.suspend(() =>
235
+ impl.state._tag === "Closed" ? core.interrupt : core.succeed(MutableHashMap.keys(impl.state.map))
236
+ )
237
+ }
238
+
239
+ /** @internal */
240
+ export const invalidate: {
241
+ <K>(key: K): <A, E>(self: RcMap.RcMap<K, A, E>) => Effect<void>
242
+ <K, A, E>(self: RcMap.RcMap<K, A, E>, key: K): Effect<void>
243
+ } = dual(
244
+ 2,
245
+ core.fnUntraced(function*<K, A, E>(self_: RcMap.RcMap<K, A, E>, key: K) {
246
+ const self = self_ as RcMapImpl<K, A, E>
247
+ if (self.state._tag === "Closed") return
248
+ const o = MutableHashMap.get(self.state.map, key)
249
+ if (o._tag === "None") return
250
+ const entry = o.value
251
+ MutableHashMap.remove(self.state.map, key)
252
+ if (entry.refCount > 0) return
253
+ yield* core.scopeClose(entry.scope, core.exitVoid)
254
+ if (entry.fiber) yield* core.interruptFiber(entry.fiber)
255
+ })
256
+ )
257
+
258
+ /** @internal */
259
+ export const has: {
260
+ <K>(key: K): <A, E>(self: RcMap.RcMap<K, A, E>) => Effect<boolean>
261
+ <K, A, E>(self: RcMap.RcMap<K, A, E>, key: K): Effect<boolean>
262
+ } = dual(2, <K, A, E>(self_: RcMap.RcMap<K, A, E>, key: K): Effect<boolean> => {
263
+ const self = self_ as RcMapImpl<K, A, E>
264
+ return core.sync(() => {
265
+ if (self.state._tag === "Closed") return false
266
+ return MutableHashMap.has(self.state.map, key)
267
+ })
268
+ })
269
+
270
+ /** @internal */
271
+ export const touch: {
272
+ <K>(key: K): <A, E>(self: RcMap.RcMap<K, A, E>) => Effect<void>
273
+ <K, A, E>(self: RcMap.RcMap<K, A, E>, key: K): Effect<void>
274
+ } = dual(
275
+ 2,
276
+ <K, A, E>(self_: RcMap.RcMap<K, A, E>, key: K) =>
277
+ coreEffect.clockWith((clock) => {
278
+ const self = self_ as RcMapImpl<K, A, E>
279
+ if (!self.idleTimeToLive || self.state._tag === "Closed") return core.void
280
+ const o = MutableHashMap.get(self.state.map, key)
281
+ if (o._tag === "None") return core.void
282
+ o.value.expiresAt = clock.unsafeCurrentTimeMillis() + Duration.toMillis(self.idleTimeToLive)
283
+ return core.void
284
+ })
285
+ )