@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,817 @@
1
+ import * as Cause from "../../Cause.js"
2
+ import * as Context from "../../Context.js"
3
+ import * as Effect from "../../Effect.js"
4
+ import * as Either from "../../Either.js"
5
+ import * as Equal from "../../Equal.js"
6
+ import * as Exit from "../../Exit.js"
7
+ import type * as FiberId from "../../FiberId.js"
8
+ import * as FiberRef from "../../FiberRef.js"
9
+ import type { LazyArg } from "../../Function.js"
10
+ import { constVoid, dual, pipe } from "../../Function.js"
11
+ import * as Hash from "../../Hash.js"
12
+ import type * as Option from "../../Option.js"
13
+ import { pipeArguments } from "../../Pipeable.js"
14
+ import { hasProperty } from "../../Predicate.js"
15
+ import type * as Scheduler from "../../Scheduler.js"
16
+ import type * as STM from "../../STM.js"
17
+ import { internalCall, YieldWrap } from "../../Utils.js"
18
+ import { ChannelTypeId } from "../core-stream.js"
19
+ import { withFiberRuntime } from "../core.js"
20
+ import { effectVariance, StreamTypeId } from "../effectable.js"
21
+ import { OP_COMMIT } from "../opCodes/effect.js"
22
+ import { SingleShotGen } from "../singleShotGen.js"
23
+ import { SinkTypeId } from "../sink.js"
24
+ import * as Journal from "./journal.js"
25
+ import * as OpCodes from "./opCodes/stm.js"
26
+ import * as TExitOpCodes from "./opCodes/tExit.js"
27
+ import * as TryCommitOpCodes from "./opCodes/tryCommit.js"
28
+ import * as STMState from "./stmState.js"
29
+ import * as TExit from "./tExit.js"
30
+ import * as TryCommit from "./tryCommit.js"
31
+ import * as TxnId from "./txnId.js"
32
+
33
+ /** @internal */
34
+ const STMSymbolKey = "effect/STM"
35
+
36
+ /** @internal */
37
+ export const STMTypeId: STM.STMTypeId = Symbol.for(
38
+ STMSymbolKey
39
+ ) as STM.STMTypeId
40
+
41
+ /** @internal */
42
+ export type Primitive =
43
+ | STMEffect
44
+ | STMOnFailure
45
+ | STMOnRetry
46
+ | STMOnSuccess
47
+ | STMProvide
48
+ | STMSync
49
+ | STMSucceed
50
+ | STMRetry
51
+ | STMFail
52
+ | STMDie
53
+ | STMInterrupt
54
+
55
+ /** @internal */
56
+ type Op<Tag extends string, Body = {}> = STM.STM<never> & Body & {
57
+ readonly _op: OP_COMMIT
58
+ readonly effect_instruction_i0: Tag
59
+ }
60
+
61
+ /** @internal */
62
+ interface STMEffect extends
63
+ Op<OpCodes.OP_WITH_STM_RUNTIME, {
64
+ readonly effect_instruction_i1: (
65
+ runtime: STMDriver<unknown, unknown, unknown>
66
+ ) => STM.STM<unknown, unknown, unknown>
67
+ }>
68
+ {}
69
+
70
+ /** @internal */
71
+ interface STMOnFailure extends
72
+ Op<OpCodes.OP_ON_FAILURE, {
73
+ readonly effect_instruction_i1: STM.STM<unknown, unknown, unknown>
74
+ readonly effect_instruction_i2: (error: unknown) => STM.STM<unknown, unknown, unknown>
75
+ }>
76
+ {}
77
+
78
+ /** @internal */
79
+ interface STMOnRetry extends
80
+ Op<OpCodes.OP_ON_RETRY, {
81
+ readonly effect_instruction_i1: STM.STM<unknown, unknown, unknown>
82
+ readonly effect_instruction_i2: () => STM.STM<unknown, unknown, unknown>
83
+ }>
84
+ {}
85
+
86
+ /** @internal */
87
+ interface STMOnSuccess extends
88
+ Op<OpCodes.OP_ON_SUCCESS, {
89
+ readonly effect_instruction_i1: STM.STM<unknown, unknown, unknown>
90
+ readonly effect_instruction_i2: (a: unknown) => STM.STM<unknown, unknown, unknown>
91
+ }>
92
+ {}
93
+
94
+ /** @internal */
95
+ interface STMProvide extends
96
+ Op<OpCodes.OP_PROVIDE, {
97
+ readonly effect_instruction_i1: STM.STM<unknown, unknown, unknown>
98
+ readonly effect_instruction_i2: (context: Context.Context<unknown>) => Context.Context<unknown>
99
+ }>
100
+ {}
101
+
102
+ /** @internal */
103
+ interface STMSync extends
104
+ Op<OpCodes.OP_SYNC, {
105
+ readonly effect_instruction_i1: () => unknown
106
+ }>
107
+ {}
108
+
109
+ /** @internal */
110
+ interface STMSucceed extends
111
+ Op<OpCodes.OP_SUCCEED, {
112
+ readonly effect_instruction_i1: unknown
113
+ }>
114
+ {}
115
+
116
+ /** @internal */
117
+ interface STMRetry extends Op<OpCodes.OP_RETRY, {}> {}
118
+
119
+ /** @internal */
120
+ interface STMFail extends
121
+ Op<OpCodes.OP_FAIL, {
122
+ readonly effect_instruction_i1: LazyArg<unknown>
123
+ }>
124
+ {}
125
+
126
+ /** @internal */
127
+ interface STMDie extends
128
+ Op<OpCodes.OP_DIE, {
129
+ readonly effect_instruction_i1: LazyArg<unknown>
130
+ }>
131
+ {}
132
+
133
+ /** @internal */
134
+ interface STMInterrupt extends
135
+ Op<OpCodes.OP_INTERRUPT, {
136
+ readonly effect_instruction_i1: FiberId.Runtime
137
+ }>
138
+ {}
139
+
140
+ const stmVariance = {
141
+ /* c8 ignore next */
142
+ _R: (_: never) => _,
143
+ /* c8 ignore next */
144
+ _E: (_: never) => _,
145
+ /* c8 ignore next */
146
+ _A: (_: never) => _
147
+ }
148
+
149
+ /** @internal */
150
+ class STMPrimitive implements STM.STM<any, any, any> {
151
+ public _op = OP_COMMIT
152
+ public effect_instruction_i1: any = undefined
153
+ public effect_instruction_i2: any = undefined;
154
+ [Effect.EffectTypeId]: any;
155
+ [StreamTypeId]: any;
156
+ [SinkTypeId]: any;
157
+ [ChannelTypeId]: any
158
+ get [STMTypeId]() {
159
+ return stmVariance
160
+ }
161
+ constructor(readonly effect_instruction_i0: Primitive["effect_instruction_i0"]) {
162
+ this[Effect.EffectTypeId] = effectVariance
163
+ this[StreamTypeId] = stmVariance
164
+ this[SinkTypeId] = stmVariance
165
+ this[ChannelTypeId] = stmVariance
166
+ }
167
+ [Equal.symbol](this: {}, that: unknown) {
168
+ return this === that
169
+ }
170
+ [Hash.symbol](this: {}) {
171
+ return Hash.cached(this, Hash.random(this))
172
+ }
173
+ [Symbol.iterator]() {
174
+ return new SingleShotGen(new YieldWrap(this)) as any
175
+ }
176
+ commit(this: STM.STM<any, any, any>): Effect.Effect<any, any, any> {
177
+ return unsafeAtomically(this, constVoid, constVoid)
178
+ }
179
+ pipe() {
180
+ return pipeArguments(this, arguments)
181
+ }
182
+ }
183
+
184
+ /** @internal */
185
+ export const isSTM = (u: unknown): u is STM.STM<unknown, unknown, unknown> => hasProperty(u, STMTypeId)
186
+
187
+ /** @internal */
188
+ export const commit = <A, E, R>(self: STM.STM<A, E, R>): Effect.Effect<A, E, R> =>
189
+ unsafeAtomically(self, constVoid, constVoid)
190
+
191
+ /** @internal */
192
+ export const unsafeAtomically = <A, E, R>(
193
+ self: STM.STM<A, E, R>,
194
+ onDone: (exit: Exit.Exit<A, E>) => unknown,
195
+ onInterrupt: LazyArg<unknown>
196
+ ): Effect.Effect<A, E, R> =>
197
+ withFiberRuntime((state) => {
198
+ const fiberId = state.id()
199
+ const env = state.getFiberRef(FiberRef.currentContext) as Context.Context<R>
200
+ const scheduler = state.getFiberRef(FiberRef.currentScheduler)
201
+ const priority = state.getFiberRef(FiberRef.currentSchedulingPriority)
202
+ const commitResult = tryCommitSync(fiberId, self, env, scheduler, priority)
203
+ switch (commitResult._tag) {
204
+ case TryCommitOpCodes.OP_DONE: {
205
+ onDone(commitResult.exit)
206
+ return commitResult.exit
207
+ }
208
+ case TryCommitOpCodes.OP_SUSPEND: {
209
+ const txnId = TxnId.make()
210
+ const state: { value: STMState.STMState<A, E> } = { value: STMState.running }
211
+ const effect = Effect.async(
212
+ (k: (effect: Effect.Effect<A, E, R>) => unknown): void =>
213
+ tryCommitAsync(fiberId, self, txnId, state, env, scheduler, priority, k)
214
+ )
215
+ return Effect.uninterruptibleMask((restore) =>
216
+ pipe(
217
+ restore(effect),
218
+ Effect.catchAllCause((cause) => {
219
+ let currentState = state.value
220
+ if (STMState.isRunning(currentState)) {
221
+ state.value = STMState.interrupted
222
+ }
223
+ currentState = state.value
224
+ if (STMState.isDone(currentState)) {
225
+ onDone(currentState.exit)
226
+ return currentState.exit
227
+ }
228
+ onInterrupt()
229
+ return Effect.failCause(cause)
230
+ })
231
+ )
232
+ )
233
+ }
234
+ }
235
+ })
236
+
237
+ /** @internal */
238
+ const tryCommit = <A, E, R>(
239
+ fiberId: FiberId.FiberId,
240
+ stm: STM.STM<A, E, R>,
241
+ state: { value: STMState.STMState<A, E> },
242
+ env: Context.Context<R>,
243
+ scheduler: Scheduler.Scheduler,
244
+ priority: number
245
+ ): TryCommit.TryCommit<A, E> => {
246
+ const journal: Journal.Journal = new Map()
247
+ const tExit = new STMDriver(stm, journal, fiberId, env).run()
248
+ const analysis = Journal.analyzeJournal(journal)
249
+
250
+ if (analysis === Journal.JournalAnalysisReadWrite) {
251
+ Journal.commitJournal(journal)
252
+ } else if (analysis === Journal.JournalAnalysisInvalid) {
253
+ throw new Error(
254
+ "BUG: STM.TryCommit.tryCommit - please report an issue at https://github.com/Effect-TS/effect/issues"
255
+ )
256
+ }
257
+
258
+ switch (tExit._tag) {
259
+ case TExitOpCodes.OP_SUCCEED: {
260
+ state.value = STMState.fromTExit(tExit)
261
+ return completeTodos(Exit.succeed(tExit.value), journal, scheduler, priority)
262
+ }
263
+ case TExitOpCodes.OP_FAIL: {
264
+ state.value = STMState.fromTExit(tExit)
265
+ const cause = Cause.fail(tExit.error)
266
+ return completeTodos(
267
+ Exit.failCause(cause),
268
+ journal,
269
+ scheduler,
270
+ priority
271
+ )
272
+ }
273
+ case TExitOpCodes.OP_DIE: {
274
+ state.value = STMState.fromTExit(tExit)
275
+ const cause = Cause.die(tExit.defect)
276
+ return completeTodos(
277
+ Exit.failCause(cause),
278
+ journal,
279
+ scheduler,
280
+ priority
281
+ )
282
+ }
283
+ case TExitOpCodes.OP_INTERRUPT: {
284
+ state.value = STMState.fromTExit(tExit)
285
+ const cause = Cause.interrupt(fiberId)
286
+ return completeTodos(
287
+ Exit.failCause(cause),
288
+ journal,
289
+ scheduler,
290
+ priority
291
+ )
292
+ }
293
+ case TExitOpCodes.OP_RETRY: {
294
+ return TryCommit.suspend(journal)
295
+ }
296
+ }
297
+ }
298
+
299
+ /** @internal */
300
+ const tryCommitSync = <A, E, R>(
301
+ fiberId: FiberId.FiberId,
302
+ stm: STM.STM<A, E, R>,
303
+ env: Context.Context<R>,
304
+ scheduler: Scheduler.Scheduler,
305
+ priority: number
306
+ ): TryCommit.TryCommit<A, E> => {
307
+ const journal: Journal.Journal = new Map()
308
+ const tExit = new STMDriver(stm, journal, fiberId, env).run()
309
+ const analysis = Journal.analyzeJournal(journal)
310
+
311
+ if (analysis === Journal.JournalAnalysisReadWrite && TExit.isSuccess(tExit)) {
312
+ Journal.commitJournal(journal)
313
+ } else if (analysis === Journal.JournalAnalysisInvalid) {
314
+ throw new Error(
315
+ "BUG: STM.TryCommit.tryCommitSync - please report an issue at https://github.com/Effect-TS/effect/issues"
316
+ )
317
+ }
318
+
319
+ switch (tExit._tag) {
320
+ case TExitOpCodes.OP_SUCCEED: {
321
+ return completeTodos(Exit.succeed(tExit.value), journal, scheduler, priority)
322
+ }
323
+ case TExitOpCodes.OP_FAIL: {
324
+ const cause = Cause.fail(tExit.error)
325
+ return completeTodos(
326
+ Exit.failCause(cause),
327
+ journal,
328
+ scheduler,
329
+ priority
330
+ )
331
+ }
332
+ case TExitOpCodes.OP_DIE: {
333
+ const cause = Cause.die(tExit.defect)
334
+ return completeTodos(
335
+ Exit.failCause(cause),
336
+ journal,
337
+ scheduler,
338
+ priority
339
+ )
340
+ }
341
+ case TExitOpCodes.OP_INTERRUPT: {
342
+ const cause = Cause.interrupt(fiberId)
343
+ return completeTodos(
344
+ Exit.failCause(cause),
345
+ journal,
346
+ scheduler,
347
+ priority
348
+ )
349
+ }
350
+ case TExitOpCodes.OP_RETRY: {
351
+ return TryCommit.suspend(journal)
352
+ }
353
+ }
354
+ }
355
+
356
+ /** @internal */
357
+ const tryCommitAsync = <A, E, R>(
358
+ fiberId: FiberId.FiberId,
359
+ self: STM.STM<A, E, R>,
360
+ txnId: TxnId.TxnId,
361
+ state: { value: STMState.STMState<A, E> },
362
+ context: Context.Context<R>,
363
+ scheduler: Scheduler.Scheduler,
364
+ priority: number,
365
+ k: (effect: Effect.Effect<A, E, R>) => unknown
366
+ ) => {
367
+ if (STMState.isRunning(state.value)) {
368
+ const result = tryCommit(fiberId, self, state, context, scheduler, priority)
369
+ switch (result._tag) {
370
+ case TryCommitOpCodes.OP_DONE: {
371
+ completeTryCommit(result.exit, k)
372
+ break
373
+ }
374
+ case TryCommitOpCodes.OP_SUSPEND: {
375
+ Journal.addTodo(
376
+ txnId,
377
+ result.journal,
378
+ () => tryCommitAsync(fiberId, self, txnId, state, context, scheduler, priority, k)
379
+ )
380
+ break
381
+ }
382
+ }
383
+ }
384
+ }
385
+
386
+ /** @internal */
387
+ const completeTodos = <A, E>(
388
+ exit: Exit.Exit<A, E>,
389
+ journal: Journal.Journal,
390
+ scheduler: Scheduler.Scheduler,
391
+ priority: number
392
+ ): TryCommit.TryCommit<A, E> => {
393
+ const todos = Journal.collectTodos(journal)
394
+ if (todos.size > 0) {
395
+ scheduler.scheduleTask(() => Journal.execTodos(todos), priority)
396
+ }
397
+ return TryCommit.done(exit)
398
+ }
399
+
400
+ /** @internal */
401
+ const completeTryCommit = <A, E, R>(
402
+ exit: Exit.Exit<A, E>,
403
+ k: (effect: Effect.Effect<A, E, R>) => unknown
404
+ ): void => {
405
+ k(exit)
406
+ }
407
+
408
+ /** @internal */
409
+ type Continuation = STMOnFailure | STMOnSuccess | STMOnRetry
410
+
411
+ /** @internal */
412
+ export const context = <R>(): STM.STM<Context.Context<R>, never, R> =>
413
+ effect<R, Context.Context<R>>((_, __, env) => env)
414
+
415
+ /** @internal */
416
+ export const contextWith = <R0, R>(f: (environment: Context.Context<R0>) => R): STM.STM<R, never, R0> =>
417
+ map(context<R0>(), f)
418
+
419
+ /** @internal */
420
+ export const contextWithSTM = <R0, A, E, R>(
421
+ f: (environment: Context.Context<R0>) => STM.STM<A, E, R>
422
+ ): STM.STM<A, E, R0 | R> => flatMap(context<R0>(), f)
423
+
424
+ /** @internal */
425
+ export class STMDriver<in out R, out E, out A> {
426
+ private contStack: Array<Continuation> = []
427
+ private env: Context.Context<unknown>
428
+
429
+ constructor(
430
+ readonly self: STM.STM<A, E, R>,
431
+ readonly journal: Journal.Journal,
432
+ readonly fiberId: FiberId.FiberId,
433
+ r0: Context.Context<R>
434
+ ) {
435
+ this.env = r0 as Context.Context<unknown>
436
+ }
437
+
438
+ getEnv(): Context.Context<R> {
439
+ return this.env
440
+ }
441
+
442
+ pushStack(cont: Continuation) {
443
+ this.contStack.push(cont)
444
+ }
445
+
446
+ popStack() {
447
+ return this.contStack.pop()
448
+ }
449
+
450
+ nextSuccess() {
451
+ let current = this.popStack()
452
+ while (current !== undefined && current.effect_instruction_i0 !== OpCodes.OP_ON_SUCCESS) {
453
+ current = this.popStack()
454
+ }
455
+ return current
456
+ }
457
+
458
+ nextFailure() {
459
+ let current = this.popStack()
460
+ while (current !== undefined && current.effect_instruction_i0 !== OpCodes.OP_ON_FAILURE) {
461
+ current = this.popStack()
462
+ }
463
+ return current
464
+ }
465
+
466
+ nextRetry() {
467
+ let current = this.popStack()
468
+ while (current !== undefined && current.effect_instruction_i0 !== OpCodes.OP_ON_RETRY) {
469
+ current = this.popStack()
470
+ }
471
+ return current
472
+ }
473
+
474
+ run(): TExit.TExit<A, E> {
475
+ let curr = this.self as Primitive | Context.Tag<any, any> | Either.Either<any, any> | Option.Option<any> | undefined
476
+ let exit: TExit.TExit<unknown, unknown> | undefined = undefined
477
+ while (exit === undefined && curr !== undefined) {
478
+ try {
479
+ const current = curr
480
+ if (current) {
481
+ switch (current._op) {
482
+ case "Tag": {
483
+ curr = effect((_, __, env) => Context.unsafeGet(env, current)) as Primitive
484
+ break
485
+ }
486
+ case "Left": {
487
+ curr = fail(current.left) as Primitive
488
+ break
489
+ }
490
+ case "None": {
491
+ curr = fail(new Cause.NoSuchElementException()) as Primitive
492
+ break
493
+ }
494
+ case "Right": {
495
+ curr = succeed(current.right) as Primitive
496
+ break
497
+ }
498
+ case "Some": {
499
+ curr = succeed(current.value) as Primitive
500
+ break
501
+ }
502
+ case "Commit": {
503
+ switch (current.effect_instruction_i0) {
504
+ case OpCodes.OP_DIE: {
505
+ exit = TExit.die(internalCall(() => current.effect_instruction_i1()))
506
+ break
507
+ }
508
+ case OpCodes.OP_FAIL: {
509
+ const cont = this.nextFailure()
510
+ if (cont === undefined) {
511
+ exit = TExit.fail(internalCall(() => current.effect_instruction_i1()))
512
+ } else {
513
+ curr = internalCall(() =>
514
+ cont.effect_instruction_i2(
515
+ internalCall(() => current.effect_instruction_i1())
516
+ ) as Primitive
517
+ )
518
+ }
519
+ break
520
+ }
521
+ case OpCodes.OP_RETRY: {
522
+ const cont = this.nextRetry()
523
+ if (cont === undefined) {
524
+ exit = TExit.retry
525
+ } else {
526
+ curr = internalCall(() => cont.effect_instruction_i2() as Primitive)
527
+ }
528
+ break
529
+ }
530
+ case OpCodes.OP_INTERRUPT: {
531
+ exit = TExit.interrupt(this.fiberId)
532
+ break
533
+ }
534
+ case OpCodes.OP_WITH_STM_RUNTIME: {
535
+ curr = internalCall(() =>
536
+ current.effect_instruction_i1(this as STMDriver<unknown, unknown, unknown>) as Primitive
537
+ )
538
+ break
539
+ }
540
+ case OpCodes.OP_ON_SUCCESS:
541
+ case OpCodes.OP_ON_FAILURE:
542
+ case OpCodes.OP_ON_RETRY: {
543
+ this.pushStack(current)
544
+ curr = current.effect_instruction_i1 as Primitive
545
+ break
546
+ }
547
+ case OpCodes.OP_PROVIDE: {
548
+ const env = this.env
549
+ this.env = internalCall(() => current.effect_instruction_i2(env))
550
+ curr = pipe(
551
+ current.effect_instruction_i1,
552
+ ensuring(sync(() => (this.env = env)))
553
+ ) as Primitive
554
+ break
555
+ }
556
+ case OpCodes.OP_SUCCEED: {
557
+ const value = current.effect_instruction_i1
558
+ const cont = this.nextSuccess()
559
+ if (cont === undefined) {
560
+ exit = TExit.succeed(value)
561
+ } else {
562
+ curr = internalCall(() => cont.effect_instruction_i2(value) as Primitive)
563
+ }
564
+ break
565
+ }
566
+ case OpCodes.OP_SYNC: {
567
+ const value = internalCall(() => current.effect_instruction_i1())
568
+ const cont = this.nextSuccess()
569
+ if (cont === undefined) {
570
+ exit = TExit.succeed(value)
571
+ } else {
572
+ curr = internalCall(() => cont.effect_instruction_i2(value) as Primitive)
573
+ }
574
+ break
575
+ }
576
+ }
577
+ break
578
+ }
579
+ }
580
+ }
581
+ } catch (e) {
582
+ curr = die(e) as Primitive
583
+ }
584
+ }
585
+ return exit as TExit.TExit<A, E>
586
+ }
587
+ }
588
+
589
+ /** @internal */
590
+ export const catchAll = dual<
591
+ <E, B, E1, R1>(
592
+ f: (e: E) => STM.STM<B, E1, R1>
593
+ ) => <A, R>(
594
+ self: STM.STM<A, E, R>
595
+ ) => STM.STM<B | A, E1, R1 | R>,
596
+ <A, E, R, B, E1, R1>(
597
+ self: STM.STM<A, E, R>,
598
+ f: (e: E) => STM.STM<B, E1, R1>
599
+ ) => STM.STM<B | A, E1, R1 | R>
600
+ >(2, (self, f) => {
601
+ const stm = new STMPrimitive(OpCodes.OP_ON_FAILURE)
602
+ stm.effect_instruction_i1 = self
603
+ stm.effect_instruction_i2 = f
604
+ return stm
605
+ })
606
+
607
+ /** @internal */
608
+ export const mapInputContext = dual<
609
+ <R0, R>(
610
+ f: (context: Context.Context<R0>) => Context.Context<R>
611
+ ) => <A, E>(
612
+ self: STM.STM<A, E, R>
613
+ ) => STM.STM<A, E, R0>,
614
+ <A, E, R0, R>(
615
+ self: STM.STM<A, E, R>,
616
+ f: (context: Context.Context<R0>) => Context.Context<R>
617
+ ) => STM.STM<A, E, R0>
618
+ >(2, (self, f) => {
619
+ const stm = new STMPrimitive(OpCodes.OP_PROVIDE)
620
+ stm.effect_instruction_i1 = self
621
+ stm.effect_instruction_i2 = f
622
+ return stm
623
+ })
624
+
625
+ /** @internal */
626
+ export const die = (defect: unknown): STM.STM<never> => dieSync(() => defect)
627
+
628
+ /** @internal */
629
+ export const dieMessage = (message: string): STM.STM<never> => dieSync(() => new Cause.RuntimeException(message))
630
+
631
+ /** @internal */
632
+ export const dieSync = (evaluate: LazyArg<unknown>): STM.STM<never> => {
633
+ const stm = new STMPrimitive(OpCodes.OP_DIE)
634
+ stm.effect_instruction_i1 = evaluate
635
+ return stm as any
636
+ }
637
+
638
+ /** @internal */
639
+ export const effect = <R, A>(
640
+ f: (journal: Journal.Journal, fiberId: FiberId.FiberId, environment: Context.Context<R>) => A
641
+ ): STM.STM<A, never, R> => withSTMRuntime((_) => succeed(f(_.journal, _.fiberId, _.getEnv())))
642
+
643
+ /** @internal */
644
+ export const ensuring = dual<
645
+ <R1, B>(finalizer: STM.STM<B, never, R1>) => <A, E, R>(self: STM.STM<A, E, R>) => STM.STM<A, E, R1 | R>,
646
+ <A, E, R, R1, B>(self: STM.STM<A, E, R>, finalizer: STM.STM<B, never, R1>) => STM.STM<A, E, R1 | R>
647
+ >(2, (self, finalizer) =>
648
+ matchSTM(self, {
649
+ onFailure: (e) => zipRight(finalizer, fail(e)),
650
+ onSuccess: (a) => zipRight(finalizer, succeed(a))
651
+ }))
652
+
653
+ /** @internal */
654
+ export const fail = <E>(error: E): STM.STM<never, E> => failSync(() => error)
655
+
656
+ /** @internal */
657
+ export const failSync = <E>(evaluate: LazyArg<E>): STM.STM<never, E> => {
658
+ const stm = new STMPrimitive(OpCodes.OP_FAIL)
659
+ stm.effect_instruction_i1 = evaluate
660
+ return stm as any
661
+ }
662
+
663
+ /** @internal */
664
+ export const flatMap = dual<
665
+ <A, A2, E1, R1>(f: (a: A) => STM.STM<A2, E1, R1>) => <E, R>(self: STM.STM<A, E, R>) => STM.STM<A2, E1 | E, R1 | R>,
666
+ <A, E, R, A2, E1, R1>(self: STM.STM<A, E, R>, f: (a: A) => STM.STM<A2, E1, R1>) => STM.STM<A2, E1 | E, R1 | R>
667
+ >(2, (self, f) => {
668
+ const stm = new STMPrimitive(OpCodes.OP_ON_SUCCESS)
669
+ stm.effect_instruction_i1 = self
670
+ stm.effect_instruction_i2 = f
671
+ return stm
672
+ })
673
+
674
+ /** @internal */
675
+ export const matchSTM = dual<
676
+ <E, A1, E1, R1, A, A2, E2, R2>(
677
+ options: {
678
+ readonly onFailure: (e: E) => STM.STM<A1, E1, R1>
679
+ readonly onSuccess: (a: A) => STM.STM<A2, E2, R2>
680
+ }
681
+ ) => <R>(self: STM.STM<A, E, R>) => STM.STM<A1 | A2, E1 | E2, R1 | R2 | R>,
682
+ <A, E, R, A1, E1, R1, A2, E2, R2>(
683
+ self: STM.STM<A, E, R>,
684
+ options: {
685
+ readonly onFailure: (e: E) => STM.STM<A1, E1, R1>
686
+ readonly onSuccess: (a: A) => STM.STM<A2, E2, R2>
687
+ }
688
+ ) => STM.STM<A1 | A2, E1 | E2, R1 | R2 | R>
689
+ >(2, <A, E, R, A1, E1, R1, A2, E2, R2>(
690
+ self: STM.STM<A, E, R>,
691
+ { onFailure, onSuccess }: {
692
+ readonly onFailure: (e: E) => STM.STM<A1, E1, R1>
693
+ readonly onSuccess: (a: A) => STM.STM<A2, E2, R2>
694
+ }
695
+ ): STM.STM<A1 | A2, E1 | E2, R1 | R2 | R> =>
696
+ pipe(
697
+ self,
698
+ map(Either.right),
699
+ catchAll((e) => pipe(onFailure(e), map(Either.left))),
700
+ flatMap((either): STM.STM<A1 | A2, E1 | E2, R | R1 | R2> => {
701
+ switch (either._tag) {
702
+ case "Left": {
703
+ return succeed(either.left)
704
+ }
705
+ case "Right": {
706
+ return onSuccess(either.right)
707
+ }
708
+ }
709
+ })
710
+ ))
711
+
712
+ /** @internal */
713
+ export const withSTMRuntime = <A, E = never, R = never>(
714
+ f: (runtime: STMDriver<unknown, unknown, unknown>) => STM.STM<A, E, R>
715
+ ): STM.STM<A, E, R> => {
716
+ const stm = new STMPrimitive(OpCodes.OP_WITH_STM_RUNTIME)
717
+ stm.effect_instruction_i1 = f
718
+ return stm
719
+ }
720
+
721
+ /** @internal */
722
+ export const interrupt: STM.STM<never> = withSTMRuntime((_) => {
723
+ const stm = new STMPrimitive(OpCodes.OP_INTERRUPT)
724
+ stm.effect_instruction_i1 = _.fiberId
725
+ return stm as any
726
+ })
727
+
728
+ /** @internal */
729
+ export const interruptAs = (fiberId: FiberId.FiberId): STM.STM<never> => {
730
+ const stm = new STMPrimitive(OpCodes.OP_INTERRUPT)
731
+ stm.effect_instruction_i1 = fiberId
732
+ return stm as any
733
+ }
734
+
735
+ /** @internal */
736
+ export const map = dual<
737
+ <A, B>(f: (a: A) => B) => <E, R>(self: STM.STM<A, E, R>) => STM.STM<B, E, R>,
738
+ <A, E, R, B>(self: STM.STM<A, E, R>, f: (a: A) => B) => STM.STM<B, E, R>
739
+ >(2, (self, f) => pipe(self, flatMap((a) => sync(() => f(a)))))
740
+
741
+ /** @internal */
742
+ export const orTry = dual<
743
+ <A1, E1, R1>(
744
+ that: LazyArg<STM.STM<A1, E1, R1>>
745
+ ) => <A, E, R>(
746
+ self: STM.STM<A, E, R>
747
+ ) => STM.STM<A1 | A, E1 | E, R1 | R>,
748
+ <A, E, R, A1, E1, R1>(
749
+ self: STM.STM<A, E, R>,
750
+ that: LazyArg<STM.STM<A1, E1, R1>>
751
+ ) => STM.STM<A1 | A, E1 | E, R1 | R>
752
+ >(2, (self, that) => {
753
+ const stm = new STMPrimitive(OpCodes.OP_ON_RETRY)
754
+ stm.effect_instruction_i1 = self
755
+ stm.effect_instruction_i2 = that
756
+ return stm
757
+ })
758
+
759
+ /** @internal */
760
+ export const retry: STM.STM<never> = new STMPrimitive(OpCodes.OP_RETRY)
761
+
762
+ /** @internal */
763
+ export const succeed = <A>(value: A): STM.STM<A> => {
764
+ const stm = new STMPrimitive(OpCodes.OP_SUCCEED)
765
+ stm.effect_instruction_i1 = value
766
+ return stm as any
767
+ }
768
+
769
+ /** @internal */
770
+ export const sync = <A>(evaluate: () => A): STM.STM<A> => {
771
+ const stm = new STMPrimitive(OpCodes.OP_SYNC)
772
+ stm.effect_instruction_i1 = evaluate
773
+ return stm as any
774
+ }
775
+
776
+ /** @internal */
777
+ export const zip = dual<
778
+ <A1, E1, R1>(
779
+ that: STM.STM<A1, E1, R1>
780
+ ) => <A, E, R>(
781
+ self: STM.STM<A, E, R>
782
+ ) => STM.STM<[A, A1], E1 | E, R1 | R>,
783
+ <A, E, R, A1, E1, R1>(
784
+ self: STM.STM<A, E, R>,
785
+ that: STM.STM<A1, E1, R1>
786
+ ) => STM.STM<[A, A1], E1 | E, R1 | R>
787
+ >(2, (self, that) => pipe(self, zipWith(that, (a, a1) => [a, a1])))
788
+
789
+ /** @internal */
790
+ export const zipLeft = dual<
791
+ <A1, E1, R1>(that: STM.STM<A1, E1, R1>) => <A, E, R>(self: STM.STM<A, E, R>) => STM.STM<A, E1 | E, R1 | R>,
792
+ <A, E, R, A1, E1, R1>(self: STM.STM<A, E, R>, that: STM.STM<A1, E1, R1>) => STM.STM<A, E1 | E, R1 | R>
793
+ >(2, (self, that) => pipe(self, flatMap((a) => pipe(that, map(() => a)))))
794
+
795
+ /** @internal */
796
+ export const zipRight = dual<
797
+ <A1, E1, R1>(that: STM.STM<A1, E1, R1>) => <A, E, R>(self: STM.STM<A, E, R>) => STM.STM<A1, E1 | E, R1 | R>,
798
+ <A, E, R, A1, E1, R1>(self: STM.STM<A, E, R>, that: STM.STM<A1, E1, R1>) => STM.STM<A1, E1 | E, R1 | R>
799
+ >(2, (self, that) => pipe(self, flatMap(() => that)))
800
+
801
+ /** @internal */
802
+ export const zipWith = dual<
803
+ <A1, E1, R1, A, A2>(
804
+ that: STM.STM<A1, E1, R1>,
805
+ f: (a: A, b: A1) => A2
806
+ ) => <E, R>(
807
+ self: STM.STM<A, E, R>
808
+ ) => STM.STM<A2, E1 | E, R1 | R>,
809
+ <A, E, R, A1, E1, R1, A2>(
810
+ self: STM.STM<A, E, R>,
811
+ that: STM.STM<A1, E1, R1>,
812
+ f: (a: A, b: A1) => A2
813
+ ) => STM.STM<A2, E1 | E, R1 | R>
814
+ >(
815
+ 3,
816
+ (self, that, f) => pipe(self, flatMap((a) => pipe(that, map((b) => f(a, b)))))
817
+ )