effect 3.8.5 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/dist/cjs/Array.js +24 -3
  2. package/dist/cjs/Array.js.map +1 -1
  3. package/dist/cjs/BigDecimal.js +3 -0
  4. package/dist/cjs/BigDecimal.js.map +1 -1
  5. package/dist/cjs/Chunk.js +3 -0
  6. package/dist/cjs/Chunk.js.map +1 -1
  7. package/dist/cjs/Context.js.map +1 -1
  8. package/dist/cjs/Cron.js +3 -0
  9. package/dist/cjs/Cron.js.map +1 -1
  10. package/dist/cjs/DateTime.js +6 -0
  11. package/dist/cjs/DateTime.js.map +1 -1
  12. package/dist/cjs/Duration.js +3 -0
  13. package/dist/cjs/Duration.js.map +1 -1
  14. package/dist/cjs/Effect.js +122 -35
  15. package/dist/cjs/Effect.js.map +1 -1
  16. package/dist/cjs/FiberHandle.js +3 -0
  17. package/dist/cjs/FiberHandle.js.map +1 -1
  18. package/dist/cjs/FiberMap.js +3 -0
  19. package/dist/cjs/FiberMap.js.map +1 -1
  20. package/dist/cjs/FiberSet.js +3 -0
  21. package/dist/cjs/FiberSet.js.map +1 -1
  22. package/dist/cjs/HashMap.js.map +1 -1
  23. package/dist/cjs/Inspectable.js +15 -1
  24. package/dist/cjs/Inspectable.js.map +1 -1
  25. package/dist/cjs/Layer.js.map +1 -1
  26. package/dist/cjs/List.js +6 -0
  27. package/dist/cjs/List.js.map +1 -1
  28. package/dist/cjs/ManagedRuntime.js +16 -1
  29. package/dist/cjs/ManagedRuntime.js.map +1 -1
  30. package/dist/cjs/Micro.js +6 -0
  31. package/dist/cjs/Micro.js.map +1 -1
  32. package/dist/cjs/MutableHashMap.js +3 -0
  33. package/dist/cjs/MutableHashMap.js.map +1 -1
  34. package/dist/cjs/MutableHashSet.js +3 -0
  35. package/dist/cjs/MutableHashSet.js.map +1 -1
  36. package/dist/cjs/MutableList.js +3 -0
  37. package/dist/cjs/MutableList.js.map +1 -1
  38. package/dist/cjs/MutableQueue.js +3 -0
  39. package/dist/cjs/MutableQueue.js.map +1 -1
  40. package/dist/cjs/MutableRef.js +3 -0
  41. package/dist/cjs/MutableRef.js.map +1 -1
  42. package/dist/cjs/Pool.js.map +1 -1
  43. package/dist/cjs/Predicate.js +18 -2
  44. package/dist/cjs/Predicate.js.map +1 -1
  45. package/dist/cjs/RegExp.js +20 -1
  46. package/dist/cjs/RegExp.js.map +1 -1
  47. package/dist/cjs/Resource.js.map +1 -1
  48. package/dist/cjs/ScopedRef.js.map +1 -1
  49. package/dist/cjs/SortedMap.js +3 -0
  50. package/dist/cjs/SortedMap.js.map +1 -1
  51. package/dist/cjs/SortedSet.js +3 -0
  52. package/dist/cjs/SortedSet.js.map +1 -1
  53. package/dist/cjs/Tuple.js +21 -2
  54. package/dist/cjs/Tuple.js.map +1 -1
  55. package/dist/cjs/Unify.js.map +1 -1
  56. package/dist/cjs/internal/cause.js +3 -0
  57. package/dist/cjs/internal/cause.js.map +1 -1
  58. package/dist/cjs/internal/context.js +6 -1
  59. package/dist/cjs/internal/context.js.map +1 -1
  60. package/dist/cjs/internal/core-effect.js.map +1 -1
  61. package/dist/cjs/internal/core.js +12 -0
  62. package/dist/cjs/internal/core.js.map +1 -1
  63. package/dist/cjs/internal/effect/circular.js +5 -1
  64. package/dist/cjs/internal/effect/circular.js.map +1 -1
  65. package/dist/cjs/internal/fiberId.js +9 -0
  66. package/dist/cjs/internal/fiberId.js.map +1 -1
  67. package/dist/cjs/internal/hashMap.js +3 -0
  68. package/dist/cjs/internal/hashMap.js.map +1 -1
  69. package/dist/cjs/internal/hashSet.js +3 -0
  70. package/dist/cjs/internal/hashSet.js.map +1 -1
  71. package/dist/cjs/internal/layer.js +33 -19
  72. package/dist/cjs/internal/layer.js.map +1 -1
  73. package/dist/cjs/internal/mailbox.js +3 -0
  74. package/dist/cjs/internal/mailbox.js.map +1 -1
  75. package/dist/cjs/internal/managedRuntime/circular.js +10 -0
  76. package/dist/cjs/internal/managedRuntime/circular.js.map +1 -0
  77. package/dist/cjs/internal/managedRuntime.js +23 -9
  78. package/dist/cjs/internal/managedRuntime.js.map +1 -1
  79. package/dist/cjs/internal/option.js +3 -0
  80. package/dist/cjs/internal/option.js.map +1 -1
  81. package/dist/cjs/internal/pool.js +6 -1
  82. package/dist/cjs/internal/pool.js.map +1 -1
  83. package/dist/cjs/internal/redBlackTree.js +3 -0
  84. package/dist/cjs/internal/redBlackTree.js.map +1 -1
  85. package/dist/cjs/internal/resource.js +15 -5
  86. package/dist/cjs/internal/resource.js.map +1 -1
  87. package/dist/cjs/internal/runtime.js +3 -0
  88. package/dist/cjs/internal/runtime.js.map +1 -1
  89. package/dist/cjs/internal/scopedRef.js +11 -8
  90. package/dist/cjs/internal/scopedRef.js.map +1 -1
  91. package/dist/cjs/internal/stm/core.js +1 -2
  92. package/dist/cjs/internal/stm/core.js.map +1 -1
  93. package/dist/cjs/internal/trie.js +3 -0
  94. package/dist/cjs/internal/trie.js.map +1 -1
  95. package/dist/cjs/internal/version.js +1 -1
  96. package/dist/dts/Array.d.ts +51 -2
  97. package/dist/dts/Array.d.ts.map +1 -1
  98. package/dist/dts/BigDecimal.d.ts.map +1 -1
  99. package/dist/dts/Chunk.d.ts.map +1 -1
  100. package/dist/dts/Context.d.ts +2 -3
  101. package/dist/dts/Context.d.ts.map +1 -1
  102. package/dist/dts/Cron.d.ts.map +1 -1
  103. package/dist/dts/DateTime.d.ts.map +1 -1
  104. package/dist/dts/Deferred.d.ts +1 -1
  105. package/dist/dts/Deferred.d.ts.map +1 -1
  106. package/dist/dts/Duration.d.ts.map +1 -1
  107. package/dist/dts/Effect.d.ts +233 -10
  108. package/dist/dts/Effect.d.ts.map +1 -1
  109. package/dist/dts/FiberHandle.d.ts.map +1 -1
  110. package/dist/dts/FiberMap.d.ts.map +1 -1
  111. package/dist/dts/FiberSet.d.ts.map +1 -1
  112. package/dist/dts/HashMap.d.ts +15 -0
  113. package/dist/dts/HashMap.d.ts.map +1 -1
  114. package/dist/dts/Inspectable.d.ts +15 -0
  115. package/dist/dts/Inspectable.d.ts.map +1 -1
  116. package/dist/dts/Layer.d.ts +46 -5
  117. package/dist/dts/Layer.d.ts.map +1 -1
  118. package/dist/dts/List.d.ts.map +1 -1
  119. package/dist/dts/ManagedRuntime.d.ts +41 -2
  120. package/dist/dts/ManagedRuntime.d.ts.map +1 -1
  121. package/dist/dts/Micro.d.ts.map +1 -1
  122. package/dist/dts/MutableHashMap.d.ts.map +1 -1
  123. package/dist/dts/MutableHashSet.d.ts.map +1 -1
  124. package/dist/dts/MutableList.d.ts.map +1 -1
  125. package/dist/dts/MutableQueue.d.ts.map +1 -1
  126. package/dist/dts/MutableRef.d.ts.map +1 -1
  127. package/dist/dts/Pool.d.ts +21 -1
  128. package/dist/dts/Pool.d.ts.map +1 -1
  129. package/dist/dts/Predicate.d.ts +15 -0
  130. package/dist/dts/Predicate.d.ts.map +1 -1
  131. package/dist/dts/Queue.d.ts +2 -2
  132. package/dist/dts/Queue.d.ts.map +1 -1
  133. package/dist/dts/RegExp.d.ts +12 -2
  134. package/dist/dts/RegExp.d.ts.map +1 -1
  135. package/dist/dts/Resource.d.ts +21 -1
  136. package/dist/dts/Resource.d.ts.map +1 -1
  137. package/dist/dts/ScopedRef.d.ts +21 -1
  138. package/dist/dts/ScopedRef.d.ts.map +1 -1
  139. package/dist/dts/SortedMap.d.ts.map +1 -1
  140. package/dist/dts/SortedSet.d.ts.map +1 -1
  141. package/dist/dts/Tuple.d.ts +59 -0
  142. package/dist/dts/Tuple.d.ts.map +1 -1
  143. package/dist/dts/Types.d.ts +39 -0
  144. package/dist/dts/Types.d.ts.map +1 -1
  145. package/dist/dts/Unify.d.ts +8 -13
  146. package/dist/dts/Unify.d.ts.map +1 -1
  147. package/dist/dts/internal/core.d.ts.map +1 -1
  148. package/dist/dts/internal/hashMap.d.ts.map +1 -1
  149. package/dist/dts/internal/layer.d.ts.map +1 -1
  150. package/dist/dts/internal/managedRuntime/circular.d.ts +2 -0
  151. package/dist/dts/internal/managedRuntime/circular.d.ts.map +1 -0
  152. package/dist/esm/Array.js +21 -0
  153. package/dist/esm/Array.js.map +1 -1
  154. package/dist/esm/BigDecimal.js +4 -1
  155. package/dist/esm/BigDecimal.js.map +1 -1
  156. package/dist/esm/Chunk.js +4 -1
  157. package/dist/esm/Chunk.js.map +1 -1
  158. package/dist/esm/Context.js.map +1 -1
  159. package/dist/esm/Cron.js +4 -1
  160. package/dist/esm/Cron.js.map +1 -1
  161. package/dist/esm/DateTime.js +6 -0
  162. package/dist/esm/DateTime.js.map +1 -1
  163. package/dist/esm/Duration.js +4 -1
  164. package/dist/esm/Duration.js.map +1 -1
  165. package/dist/esm/Effect.js +116 -30
  166. package/dist/esm/Effect.js.map +1 -1
  167. package/dist/esm/FiberHandle.js +3 -0
  168. package/dist/esm/FiberHandle.js.map +1 -1
  169. package/dist/esm/FiberMap.js +3 -0
  170. package/dist/esm/FiberMap.js.map +1 -1
  171. package/dist/esm/FiberSet.js +3 -0
  172. package/dist/esm/FiberSet.js.map +1 -1
  173. package/dist/esm/HashMap.js.map +1 -1
  174. package/dist/esm/Inspectable.js +14 -0
  175. package/dist/esm/Inspectable.js.map +1 -1
  176. package/dist/esm/Layer.js.map +1 -1
  177. package/dist/esm/List.js +7 -1
  178. package/dist/esm/List.js.map +1 -1
  179. package/dist/esm/ManagedRuntime.js +15 -0
  180. package/dist/esm/ManagedRuntime.js.map +1 -1
  181. package/dist/esm/Micro.js +7 -1
  182. package/dist/esm/Micro.js.map +1 -1
  183. package/dist/esm/MutableHashMap.js +4 -1
  184. package/dist/esm/MutableHashMap.js.map +1 -1
  185. package/dist/esm/MutableHashSet.js +4 -1
  186. package/dist/esm/MutableHashSet.js.map +1 -1
  187. package/dist/esm/MutableList.js +4 -1
  188. package/dist/esm/MutableList.js.map +1 -1
  189. package/dist/esm/MutableQueue.js +4 -1
  190. package/dist/esm/MutableQueue.js.map +1 -1
  191. package/dist/esm/MutableRef.js +4 -1
  192. package/dist/esm/MutableRef.js.map +1 -1
  193. package/dist/esm/Pool.js.map +1 -1
  194. package/dist/esm/Predicate.js +15 -0
  195. package/dist/esm/Predicate.js.map +1 -1
  196. package/dist/esm/RegExp.js +16 -0
  197. package/dist/esm/RegExp.js.map +1 -1
  198. package/dist/esm/Resource.js.map +1 -1
  199. package/dist/esm/ScopedRef.js.map +1 -1
  200. package/dist/esm/SortedMap.js +4 -1
  201. package/dist/esm/SortedMap.js.map +1 -1
  202. package/dist/esm/SortedSet.js +4 -1
  203. package/dist/esm/SortedSet.js.map +1 -1
  204. package/dist/esm/Tuple.js +19 -0
  205. package/dist/esm/Tuple.js.map +1 -1
  206. package/dist/esm/Unify.js.map +1 -1
  207. package/dist/esm/internal/cause.js +4 -1
  208. package/dist/esm/internal/cause.js.map +1 -1
  209. package/dist/esm/internal/context.js +7 -2
  210. package/dist/esm/internal/context.js.map +1 -1
  211. package/dist/esm/internal/core-effect.js.map +1 -1
  212. package/dist/esm/internal/core.js +13 -1
  213. package/dist/esm/internal/core.js.map +1 -1
  214. package/dist/esm/internal/effect/circular.js +5 -1
  215. package/dist/esm/internal/effect/circular.js.map +1 -1
  216. package/dist/esm/internal/fiberId.js +10 -1
  217. package/dist/esm/internal/fiberId.js.map +1 -1
  218. package/dist/esm/internal/hashMap.js +4 -1
  219. package/dist/esm/internal/hashMap.js.map +1 -1
  220. package/dist/esm/internal/hashSet.js +4 -1
  221. package/dist/esm/internal/hashSet.js.map +1 -1
  222. package/dist/esm/internal/layer.js +32 -18
  223. package/dist/esm/internal/layer.js.map +1 -1
  224. package/dist/esm/internal/mailbox.js +3 -0
  225. package/dist/esm/internal/mailbox.js.map +1 -1
  226. package/dist/esm/internal/managedRuntime/circular.js +4 -0
  227. package/dist/esm/internal/managedRuntime/circular.js.map +1 -0
  228. package/dist/esm/internal/managedRuntime.js +21 -8
  229. package/dist/esm/internal/managedRuntime.js.map +1 -1
  230. package/dist/esm/internal/option.js +4 -1
  231. package/dist/esm/internal/option.js.map +1 -1
  232. package/dist/esm/internal/pool.js +6 -1
  233. package/dist/esm/internal/pool.js.map +1 -1
  234. package/dist/esm/internal/redBlackTree.js +4 -1
  235. package/dist/esm/internal/redBlackTree.js.map +1 -1
  236. package/dist/esm/internal/resource.js +15 -5
  237. package/dist/esm/internal/resource.js.map +1 -1
  238. package/dist/esm/internal/runtime.js +3 -0
  239. package/dist/esm/internal/runtime.js.map +1 -1
  240. package/dist/esm/internal/scopedRef.js +11 -8
  241. package/dist/esm/internal/scopedRef.js.map +1 -1
  242. package/dist/esm/internal/stm/core.js +1 -2
  243. package/dist/esm/internal/stm/core.js.map +1 -1
  244. package/dist/esm/internal/trie.js +4 -1
  245. package/dist/esm/internal/trie.js.map +1 -1
  246. package/dist/esm/internal/version.js +1 -1
  247. package/package.json +1 -1
  248. package/src/Array.ts +68 -4
  249. package/src/BigDecimal.ts +4 -1
  250. package/src/Chunk.ts +4 -1
  251. package/src/Context.ts +2 -3
  252. package/src/Cron.ts +4 -1
  253. package/src/DateTime.ts +6 -0
  254. package/src/Deferred.ts +1 -1
  255. package/src/Duration.ts +4 -1
  256. package/src/Effect.ts +435 -56
  257. package/src/FiberHandle.ts +3 -0
  258. package/src/FiberMap.ts +3 -0
  259. package/src/FiberSet.ts +3 -0
  260. package/src/HashMap.ts +16 -0
  261. package/src/Inspectable.ts +22 -0
  262. package/src/Layer.ts +49 -8
  263. package/src/List.ts +7 -1
  264. package/src/ManagedRuntime.ts +46 -2
  265. package/src/Micro.ts +7 -1
  266. package/src/MutableHashMap.ts +4 -1
  267. package/src/MutableHashSet.ts +4 -1
  268. package/src/MutableList.ts +4 -1
  269. package/src/MutableQueue.ts +4 -1
  270. package/src/MutableRef.ts +4 -1
  271. package/src/Pool.ts +26 -1
  272. package/src/Predicate.ts +16 -0
  273. package/src/Queue.ts +2 -2
  274. package/src/RegExp.ts +17 -0
  275. package/src/Resource.ts +22 -1
  276. package/src/ScopedRef.ts +22 -1
  277. package/src/SortedMap.ts +4 -1
  278. package/src/SortedSet.ts +4 -1
  279. package/src/Tuple.ts +66 -0
  280. package/src/Types.ts +41 -0
  281. package/src/Unify.ts +9 -14
  282. package/src/internal/cause.ts +4 -1
  283. package/src/internal/context.ts +7 -2
  284. package/src/internal/core-effect.ts +7 -7
  285. package/src/internal/core.ts +13 -1
  286. package/src/internal/effect/circular.ts +8 -2
  287. package/src/internal/fiberId.ts +10 -1
  288. package/src/internal/hashMap.ts +4 -1
  289. package/src/internal/hashSet.ts +4 -1
  290. package/src/internal/layer.ts +105 -38
  291. package/src/internal/mailbox.ts +3 -0
  292. package/src/internal/managedRuntime/circular.ts +6 -0
  293. package/src/internal/managedRuntime.ts +36 -22
  294. package/src/internal/option.ts +4 -1
  295. package/src/internal/pool.ts +7 -1
  296. package/src/internal/redBlackTree.ts +4 -1
  297. package/src/internal/resource.ts +16 -5
  298. package/src/internal/runtime.ts +3 -0
  299. package/src/internal/scopedRef.ts +12 -8
  300. package/src/internal/stm/core.ts +2 -3
  301. package/src/internal/trie.ts +4 -1
  302. package/src/internal/version.ts +1 -1
package/src/Effect.ts CHANGED
@@ -38,6 +38,7 @@ import * as _runtime from "./internal/runtime.js"
38
38
  import * as _schedule from "./internal/schedule.js"
39
39
  import type * as Layer from "./Layer.js"
40
40
  import type { LogLevel } from "./LogLevel.js"
41
+ import type * as ManagedRuntime from "./ManagedRuntime.js"
41
42
  import type * as Metric from "./Metric.js"
42
43
  import type * as MetricLabel from "./MetricLabel.js"
43
44
  import type * as Option from "./Option.js"
@@ -56,7 +57,7 @@ import * as Scheduler from "./Scheduler.js"
56
57
  import type * as Scope from "./Scope.js"
57
58
  import type * as Supervisor from "./Supervisor.js"
58
59
  import type * as Tracer from "./Tracer.js"
59
- import type { Concurrency, Covariant, NoInfer, NotFunction } from "./Types.js"
60
+ import type { Concurrency, Contravariant, Covariant, NoExcessProperties, NoInfer, NotFunction } from "./Types.js"
60
61
  import type * as Unify from "./Unify.js"
61
62
  import type { YieldWrap } from "./Utils.js"
62
63
 
@@ -3328,10 +3329,10 @@ export const mapAccum: {
3328
3329
  * @since 2.0.0
3329
3330
  * @category mapping
3330
3331
  */
3331
- <S, A, B, E, R>(
3332
+ <S, A, B, E, R, I extends Iterable<A> = Iterable<A>>(
3332
3333
  zero: S,
3333
- f: (s: S, a: A, i: number) => Effect<readonly [S, B], E, R>
3334
- ): (elements: Iterable<A>) => Effect<[S, Array<B>], E, R>
3334
+ f: (s: S, a: RA.ReadonlyArray.Infer<I>, i: number) => Effect<readonly [S, B], E, R>
3335
+ ): (elements: I) => Effect<[S, RA.ReadonlyArray.With<I, B>], E, R>
3335
3336
  /**
3336
3337
  * Statefully and effectfully maps over the elements of this chunk to produce
3337
3338
  * new elements.
@@ -3339,11 +3340,11 @@ export const mapAccum: {
3339
3340
  * @since 2.0.0
3340
3341
  * @category mapping
3341
3342
  */
3342
- <A, S, B, E, R>(
3343
- elements: Iterable<A>,
3343
+ <A, S, B, E, R, I extends Iterable<A> = Iterable<A>>(
3344
+ elements: I,
3344
3345
  zero: S,
3345
- f: (s: S, a: A, i: number) => Effect<readonly [S, B], E, R>
3346
- ): Effect<[S, Array<B>], E, R>
3346
+ f: (s: S, a: RA.ReadonlyArray.Infer<I>, i: number) => Effect<readonly [S, B], E, R>
3347
+ ): Effect<[S, RA.ReadonlyArray.With<I, B>], E, R>
3347
3348
  } = effect.mapAccum
3348
3349
 
3349
3350
  /**
@@ -4938,6 +4939,21 @@ export const mapInputContext: {
4938
4939
  * @category context
4939
4940
  */
4940
4941
  export const provide: {
4942
+ /**
4943
+ * Splits the context into two parts, providing one part using the
4944
+ * specified layer/context/runtime and leaving the remainder `R0`
4945
+ *
4946
+ * @since 2.0.0
4947
+ * @category context
4948
+ */
4949
+ <const Layers extends [Layer.Layer.Any, ...Array<Layer.Layer.Any>]>(layers: Layers): <A, E, R>(
4950
+ self: Effect<A, E, R>
4951
+ ) => Effect<
4952
+ A,
4953
+ E | { [k in keyof Layers]: Layer.Layer.Error<Layers[k]> }[number],
4954
+ | { [k in keyof Layers]: Layer.Layer.Context<Layers[k]> }[number]
4955
+ | Exclude<R, { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]>
4956
+ >
4941
4957
  /**
4942
4958
  * Splits the context into two parts, providing one part using the
4943
4959
  * specified layer/context/runtime and leaving the remainder `R0`
@@ -4947,7 +4963,7 @@ export const provide: {
4947
4963
  */
4948
4964
  <ROut, E2, RIn>(
4949
4965
  layer: Layer.Layer<ROut, E2, RIn>
4950
- ): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E2 | E, RIn | Exclude<R, ROut>>
4966
+ ): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E | E2, RIn | Exclude<R, ROut>>
4951
4967
  /**
4952
4968
  * Splits the context into two parts, providing one part using the
4953
4969
  * specified layer/context/runtime and leaving the remainder `R0`
@@ -4964,6 +4980,32 @@ export const provide: {
4964
4980
  * @category context
4965
4981
  */
4966
4982
  <R2>(runtime: Runtime.Runtime<R2>): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, Exclude<R, R2>>
4983
+ /**
4984
+ * Splits the context into two parts, providing one part using the
4985
+ * specified layer/context/runtime and leaving the remainder `R0`
4986
+ *
4987
+ * @since 2.0.0
4988
+ * @category context
4989
+ */
4990
+ <E2, R2>(
4991
+ managedRuntime: ManagedRuntime.ManagedRuntime<R2, E2>
4992
+ ): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E | E2, Exclude<R, R2>>
4993
+ /**
4994
+ * Splits the context into two parts, providing one part using the
4995
+ * specified layer/context/runtime and leaving the remainder `R0`
4996
+ *
4997
+ * @since 2.0.0
4998
+ * @category context
4999
+ */
5000
+ <A, E, R, const Layers extends [Layer.Layer.Any, ...Array<Layer.Layer.Any>]>(
5001
+ self: Effect<A, E, R>,
5002
+ layers: Layers
5003
+ ): Effect<
5004
+ A,
5005
+ E | { [k in keyof Layers]: Layer.Layer.Error<Layers[k]> }[number],
5006
+ | { [k in keyof Layers]: Layer.Layer.Context<Layers[k]> }[number]
5007
+ | Exclude<R, { [k in keyof Layers]: Layer.Layer.Success<Layers[k]> }[number]>
5008
+ >
4967
5009
  /**
4968
5010
  * Splits the context into two parts, providing one part using the
4969
5011
  * specified layer/context/runtime and leaving the remainder `R0`
@@ -4991,6 +5033,17 @@ export const provide: {
4991
5033
  * @category context
4992
5034
  */
4993
5035
  <A, E, R, R2>(self: Effect<A, E, R>, runtime: Runtime.Runtime<R2>): Effect<A, E, Exclude<R, R2>>
5036
+ /**
5037
+ * Splits the context into two parts, providing one part using the
5038
+ * specified layer/context/runtime and leaving the remainder `R0`
5039
+ *
5040
+ * @since 2.0.0
5041
+ * @category context
5042
+ */
5043
+ <A, E, E2, R, R2>(
5044
+ self: Effect<A, E, R>,
5045
+ runtime: ManagedRuntime.ManagedRuntime<R2, E2>
5046
+ ): Effect<A, E | E2, Exclude<R, R2>>
4994
5047
  } = layer.effect_provide
4995
5048
 
4996
5049
  /**
@@ -9102,7 +9155,7 @@ export const makeSemaphore: (permits: number) => Effect<Semaphore> = circular.ma
9102
9155
  * @category latch
9103
9156
  * @since 3.8.0
9104
9157
  */
9105
- export interface Latch {
9158
+ export interface Latch extends Effect<void> {
9106
9159
  /** open the latch, releasing all fibers waiting on it */
9107
9160
  readonly open: Effect<void>
9108
9161
  /** release all fibers waiting on the latch, without opening it */
@@ -9113,6 +9166,26 @@ export interface Latch {
9113
9166
  readonly close: Effect<void>
9114
9167
  /** only run the given effect when the latch is open */
9115
9168
  readonly whenOpen: <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R>
9169
+
9170
+ readonly [Unify.typeSymbol]?: unknown
9171
+ readonly [Unify.unifySymbol]?: LatchUnify<this>
9172
+ readonly [Unify.ignoreSymbol]?: LatchUnifyIgnore
9173
+ }
9174
+
9175
+ /**
9176
+ * @category models
9177
+ * @since 3.8.0
9178
+ */
9179
+ export interface LatchUnify<A extends { [Unify.typeSymbol]?: any }> extends EffectUnify<A> {
9180
+ Latch?: () => Latch
9181
+ }
9182
+
9183
+ /**
9184
+ * @category models
9185
+ * @since 3.8.0
9186
+ */
9187
+ export interface LatchUnifyIgnore extends EffectUnifyIgnore {
9188
+ Effect?: true
9116
9189
  }
9117
9190
 
9118
9191
  /**
@@ -10362,12 +10435,13 @@ export declare namespace Tag {
10362
10435
  Service?: `property "Service" is forbidden`
10363
10436
  Identifier?: `property "Identifier" is forbidden`
10364
10437
  _op?: `property "_op" is forbidden`
10365
- _tag?: `property "_tag" is forbidden`
10366
10438
  of?: `property "of" is forbidden`
10367
10439
  context?: `property "context" is forbidden`
10368
10440
  key?: `property "key" is forbidden`
10369
10441
  stack?: `property "stack" is forbidden`
10370
10442
  name?: `property "name" is forbidden`
10443
+ pipe?: `property "pipe" is forbidden`
10444
+ use?: `property "use" is forbidden`
10371
10445
  }
10372
10446
 
10373
10447
  /**
@@ -10375,29 +10449,62 @@ export declare namespace Tag {
10375
10449
  * @category models
10376
10450
  */
10377
10451
  export type AllowedType = (Record<PropertyKey, any> & ProhibitedType) | string | number | symbol
10452
+
10453
+ /**
10454
+ * @since 3.9.0
10455
+ * @category models
10456
+ */
10457
+ export type Proxy<Self, Type> = {
10458
+ [
10459
+ k in keyof Type as Type[k] extends ((...args: [...infer Args]) => infer Ret) ?
10460
+ ((...args: Readonly<Args>) => Ret) extends Type[k] ? k : never
10461
+ : k
10462
+ ]: Type[k] extends (...args: [...infer Args]) => Effect<infer A, infer E, infer R> ?
10463
+ (...args: Readonly<Args>) => Effect<A, E, Self | R>
10464
+ : Type[k] extends (...args: [...infer Args]) => infer A ? (...args: Readonly<Args>) => Effect<A, never, Self>
10465
+ : Type[k] extends Effect<infer A, infer E, infer R> ? Effect<A, E, Self | R>
10466
+ : Effect<Type[k], never, Self>
10467
+ }
10468
+ }
10469
+
10470
+ const makeTagProxy = (TagClass: Context.Tag<any, any> & Record<PropertyKey, any>) => {
10471
+ const cache = new Map()
10472
+ return new Proxy(TagClass, {
10473
+ get(target: any, prop: any, receiver) {
10474
+ if (prop in target) {
10475
+ return Reflect.get(target, prop, receiver)
10476
+ }
10477
+ if (cache.has(prop)) {
10478
+ return cache.get(prop)
10479
+ }
10480
+ const fn = (...args: Array<any>) =>
10481
+ core.andThen(target, (s: any) => {
10482
+ if (typeof s[prop] === "function") {
10483
+ cache.set(prop, (...args: Array<any>) => core.andThen(target, (s: any) => s[prop](...args)))
10484
+ return s[prop](...args)
10485
+ }
10486
+ cache.set(prop, core.andThen(target, (s: any) => s[prop]))
10487
+ return s[prop]
10488
+ })
10489
+ const cn = core.andThen(target, (s: any) => s[prop])
10490
+ Object.assign(fn, cn)
10491
+ Object.setPrototypeOf(fn, Object.getPrototypeOf(cn))
10492
+ cache.set(prop, fn)
10493
+ return fn
10494
+ }
10495
+ })
10378
10496
  }
10379
10497
 
10380
10498
  /**
10381
10499
  * @since 2.0.0
10382
- * @category constructors
10500
+ * @category context
10383
10501
  */
10384
10502
  export const Tag: <const Id extends string>(id: Id) => <
10385
10503
  Self,
10386
10504
  Type extends Tag.AllowedType
10387
10505
  >() =>
10388
10506
  & Context.TagClass<Self, Id, Type>
10389
- & (Type extends Record<PropertyKey, any> ? {
10390
- [
10391
- k in keyof Type as Type[k] extends ((...args: [...infer Args]) => infer Ret) ?
10392
- ((...args: Readonly<Args>) => Ret) extends Type[k] ? k : never
10393
- : k
10394
- ]: Type[k] extends (...args: [...infer Args]) => Effect<infer A, infer E, infer R> ?
10395
- (...args: Readonly<Args>) => Effect<A, E, Self | R>
10396
- : Type[k] extends (...args: [...infer Args]) => infer A ? (...args: Readonly<Args>) => Effect<A, never, Self>
10397
- : Type[k] extends Effect<infer A, infer E, infer R> ? Effect<A, E, Self | R>
10398
- : Effect<Type[k], never, Self>
10399
- } :
10400
- {})
10507
+ & (Type extends Record<PropertyKey, any> ? Tag.Proxy<Self, Type> : {})
10401
10508
  & {
10402
10509
  use: <X>(
10403
10510
  body: (_: Type) => X
@@ -10410,44 +10517,316 @@ export const Tag: <const Id extends string>(id: Id) => <
10410
10517
  function TagClass() {}
10411
10518
  Object.setPrototypeOf(TagClass, TagProto)
10412
10519
  TagClass.key = id
10520
+ Object.defineProperty(TagClass, "use", {
10521
+ get() {
10522
+ return (body: (_: any) => any) => core.andThen(this, body)
10523
+ }
10524
+ })
10413
10525
  Object.defineProperty(TagClass, "stack", {
10414
10526
  get() {
10415
10527
  return creationError.stack
10416
10528
  }
10417
10529
  })
10418
- const cache = new Map()
10419
- const done = new Proxy(TagClass, {
10420
- get(_target: any, prop: any, _receiver) {
10421
- if (prop === "use") {
10422
- // @ts-expect-error
10423
- return (body) => core.andThen(TagClass, body)
10424
- }
10425
- if (prop in TagClass) {
10426
- // @ts-expect-error
10427
- return TagClass[prop]
10428
- }
10429
- if (cache.has(prop)) {
10430
- return cache.get(prop)
10530
+ return makeTagProxy(TagClass as any)
10531
+ }
10532
+
10533
+ /**
10534
+ * @since 3.9.0
10535
+ * @category context
10536
+ * @experimental might be up for breaking changes
10537
+ */
10538
+ export const Service: <Self>() => {
10539
+ <
10540
+ const Key extends string,
10541
+ const Make extends
10542
+ | {
10543
+ readonly scoped: Effect<Service.AllowedType<Key, Make>, any, any>
10544
+ readonly dependencies?: ReadonlyArray<Layer.Layer.Any>
10545
+ readonly accessors?: boolean
10546
+ /** @deprecated */
10547
+ readonly ಠ_ಠ: never
10548
+ }
10549
+ | {
10550
+ readonly effect: Effect<Service.AllowedType<Key, Make>, any, any>
10551
+ readonly dependencies?: ReadonlyArray<Layer.Layer.Any>
10552
+ readonly accessors?: boolean
10553
+ /** @deprecated */
10554
+ readonly ಠ_ಠ: never
10555
+ }
10556
+ | {
10557
+ readonly sync: LazyArg<Service.AllowedType<Key, Make>>
10558
+ readonly dependencies?: ReadonlyArray<Layer.Layer.Any>
10559
+ readonly accessors?: boolean
10560
+ /** @deprecated */
10561
+ readonly ಠ_ಠ: never
10562
+ }
10563
+ | {
10564
+ readonly succeed: Service.AllowedType<Key, Make>
10565
+ readonly dependencies?: ReadonlyArray<Layer.Layer.Any>
10566
+ readonly accessors?: boolean
10567
+ /** @deprecated */
10568
+ readonly ಠ_ಠ: never
10569
+ }
10570
+ >(
10571
+ key: Key,
10572
+ make: Make
10573
+ ): Service.Class<Self, Key, Make>
10574
+ <
10575
+ const Key extends string,
10576
+ const Make extends NoExcessProperties<{
10577
+ readonly scoped: Effect<Service.AllowedType<Key, Make>, any, any>
10578
+ readonly dependencies?: ReadonlyArray<Layer.Layer.Any>
10579
+ readonly accessors?: boolean
10580
+ }, Make>
10581
+ >(
10582
+ key: Key,
10583
+ make: Make
10584
+ ): Service.Class<Self, Key, Make>
10585
+ <
10586
+ const Key extends string,
10587
+ const Make extends NoExcessProperties<{
10588
+ readonly effect: Effect<Service.AllowedType<Key, Make>, any, any>
10589
+ readonly dependencies?: ReadonlyArray<Layer.Layer.Any>
10590
+ readonly accessors?: boolean
10591
+ }, Make>
10592
+ >(
10593
+ key: Key,
10594
+ make: Make
10595
+ ): Service.Class<Self, Key, Make>
10596
+ <
10597
+ const Key extends string,
10598
+ const Make extends NoExcessProperties<{
10599
+ readonly sync: LazyArg<Service.AllowedType<Key, Make>>
10600
+ readonly dependencies?: ReadonlyArray<Layer.Layer.Any>
10601
+ readonly accessors?: boolean
10602
+ }, Make>
10603
+ >(
10604
+ key: Key,
10605
+ make: Make
10606
+ ): Service.Class<Self, Key, Make>
10607
+ <
10608
+ const Key extends string,
10609
+ const Make extends NoExcessProperties<{
10610
+ readonly succeed: Service.AllowedType<Key, Make>
10611
+ readonly dependencies?: ReadonlyArray<Layer.Layer.Any>
10612
+ readonly accessors?: boolean
10613
+ }, Make>
10614
+ >(
10615
+ key: Key,
10616
+ make: Make
10617
+ ): Service.Class<Self, Key, Make>
10618
+ } = function() {
10619
+ return function() {
10620
+ const [id, maker] = arguments
10621
+ const proxy = "accessors" in maker ? maker["accessors"] : false
10622
+ const limit = Error.stackTraceLimit
10623
+ Error.stackTraceLimit = 2
10624
+ const creationError = new Error()
10625
+ Error.stackTraceLimit = limit
10626
+
10627
+ let patchState: "unchecked" | "plain" | "patched" = "unchecked"
10628
+ const TagClass: any = function(this: any, service: any) {
10629
+ if (patchState === "unchecked") {
10630
+ const proto = Object.getPrototypeOf(service)
10631
+ if (proto === Object.prototype || proto === null) {
10632
+ patchState = "plain"
10633
+ } else {
10634
+ const selfProto = Object.getPrototypeOf(this)
10635
+ Object.setPrototypeOf(selfProto, proto)
10636
+ patchState = "patched"
10431
10637
  }
10432
- const fn = (...args: Array<any>) =>
10433
- // @ts-expect-error
10434
- core.andThen(TagClass, (s: any) => {
10435
- if (typeof s[prop] === "function") {
10436
- // @ts-expect-error
10437
- cache.set(prop, (...args: Array<any>) => core.andThen(TagClass, (s: any) => s[prop](...args)))
10438
- return s[prop](...args)
10439
- }
10440
- // @ts-expect-error
10441
- cache.set(prop, core.andThen(TagClass, (s) => s[prop]))
10442
- return s[prop]
10443
- })
10444
- // @ts-expect-error
10445
- const cn = core.andThen(TagClass, (s) => s[prop])
10446
- Object.assign(fn, cn)
10447
- Object.setPrototypeOf(fn, Object.getPrototypeOf(cn))
10448
- cache.set(prop, fn)
10449
- return fn
10638
+ }
10639
+ if (patchState === "plain") {
10640
+ Object.assign(this, service)
10641
+ } else if (patchState === "patched") {
10642
+ Object.setPrototypeOf(service, Object.getPrototypeOf(this))
10643
+ return service
10644
+ }
10645
+ }
10646
+
10647
+ TagClass.prototype._tag = id
10648
+ Object.defineProperty(TagClass, "make", {
10649
+ get() {
10650
+ return (service: any) => new this(service)
10651
+ }
10652
+ })
10653
+ Object.defineProperty(TagClass, "use", {
10654
+ get() {
10655
+ return (body: any) => core.andThen(this, body)
10450
10656
  }
10451
10657
  })
10452
- return done
10658
+ TagClass.key = id
10659
+
10660
+ Object.assign(TagClass, TagProto)
10661
+
10662
+ Object.defineProperty(TagClass, "stack", {
10663
+ get() {
10664
+ return creationError.stack
10665
+ }
10666
+ })
10667
+
10668
+ const hasDeps = "dependencies" in maker && maker.dependencies.length > 0
10669
+ const layerName = hasDeps ? "DefaultWithoutDependencies" : "Default"
10670
+ let layerCache: Layer.Layer.Any | undefined
10671
+ if ("effect" in maker) {
10672
+ Object.defineProperty(TagClass, layerName, {
10673
+ get(this: any) {
10674
+ return layerCache ??= layer.fromEffect(TagClass, map(maker.effect, (_) => new this(_)))
10675
+ }
10676
+ })
10677
+ } else if ("scoped" in maker) {
10678
+ Object.defineProperty(TagClass, layerName, {
10679
+ get(this: any) {
10680
+ return layerCache ??= layer.scoped(TagClass, map(maker.scoped, (_) => new this(_)))
10681
+ }
10682
+ })
10683
+ } else if ("sync" in maker) {
10684
+ Object.defineProperty(TagClass, layerName, {
10685
+ get(this: any) {
10686
+ return layerCache ??= layer.sync(TagClass, () => new this(maker.sync()))
10687
+ }
10688
+ })
10689
+ } else {
10690
+ Object.defineProperty(TagClass, layerName, {
10691
+ get(this: any) {
10692
+ return layerCache ??= layer.succeed(TagClass, new this(maker.succeed))
10693
+ }
10694
+ })
10695
+ }
10696
+
10697
+ if (hasDeps) {
10698
+ let layerWithDepsCache: Layer.Layer.Any | undefined
10699
+ Object.defineProperty(TagClass, "Default", {
10700
+ get(this: any) {
10701
+ return layerWithDepsCache ??= layer.provide(
10702
+ this.DefaultWithoutDependencies,
10703
+ maker.dependencies
10704
+ )
10705
+ }
10706
+ })
10707
+ }
10708
+
10709
+ return proxy === true ? makeTagProxy(TagClass) : TagClass
10453
10710
  }
10711
+ }
10712
+
10713
+ /**
10714
+ * @since 3.9.0
10715
+ * @category context
10716
+ */
10717
+ export declare namespace Service {
10718
+ /**
10719
+ * @since 3.9.0
10720
+ */
10721
+ export interface ProhibitedType {
10722
+ Service?: `property "Service" is forbidden`
10723
+ Identifier?: `property "Identifier" is forbidden`
10724
+ Default?: `property "Default" is forbidden`
10725
+ DefaultWithoutDependencies?: `property "DefaultWithoutDependencies" is forbidden`
10726
+ _op_layer?: `property "_op_layer" is forbidden`
10727
+ _op?: `property "_op" is forbidden`
10728
+ of?: `property "of" is forbidden`
10729
+ make?: `property "make" is forbidden`
10730
+ context?: `property "context" is forbidden`
10731
+ key?: `property "key" is forbidden`
10732
+ stack?: `property "stack" is forbidden`
10733
+ name?: `property "name" is forbidden`
10734
+ pipe?: `property "pipe" is forbidden`
10735
+ use?: `property "use" is forbidden`
10736
+ _tag?: `property "_tag" is forbidden`
10737
+ }
10738
+
10739
+ /**
10740
+ * @since 3.9.0
10741
+ */
10742
+ export type AllowedType<Key extends string, Make> = MakeAccessors<Make> extends true ?
10743
+ & Record<PropertyKey, any>
10744
+ & {
10745
+ readonly [K in Extract<keyof MakeService<Make>, keyof ProhibitedType>]: K extends "_tag" ? Key
10746
+ : ProhibitedType[K]
10747
+ }
10748
+ : Record<PropertyKey, any> & { readonly _tag?: Key }
10749
+
10750
+ /**
10751
+ * @since 3.9.0
10752
+ */
10753
+ export type Class<
10754
+ Self,
10755
+ Key extends string,
10756
+ Make
10757
+ > =
10758
+ & {
10759
+ new(_: MakeService<Make>): MakeService<Make> & {
10760
+ readonly _tag: Key
10761
+ }
10762
+ readonly use: <X>(
10763
+ body: (_: Self) => X
10764
+ ) => X extends Effect<infer A, infer E, infer R> ? Effect<A, E, R | Self> : Effect<X, never, Self>
10765
+ readonly make: (_: MakeService<Make>) => Self
10766
+ }
10767
+ & Context.Tag<Self, Self>
10768
+ & (MakeAccessors<Make> extends true ? Tag.Proxy<Self, MakeService<Make>> : {})
10769
+ & (MakeDeps<Make> extends never ? {
10770
+ readonly Default: Layer.Layer<Self, MakeError<Make>, MakeContext<Make>>
10771
+ } :
10772
+ {
10773
+ readonly DefaultWithoutDependencies: Layer.Layer<Self, MakeError<Make>, MakeContext<Make>>
10774
+ readonly Default: Layer.Layer<
10775
+ Self,
10776
+ MakeError<Make> | MakeDepsE<Make>,
10777
+ | Exclude<MakeContext<Make>, MakeDepsOut<Make>>
10778
+ | MakeDepsIn<Make>
10779
+ >
10780
+ })
10781
+
10782
+ /**
10783
+ * @since 3.9.0
10784
+ */
10785
+ export type MakeService<Make> = Make extends { readonly effect: Effect<infer _A, infer _E, infer _R> } ? _A
10786
+ : Make extends { readonly scoped: Effect<infer _A, infer _E, infer _R> } ? _A
10787
+ : Make extends { readonly sync: LazyArg<infer A> } ? A
10788
+ : Make extends { readonly succeed: infer A } ? A
10789
+ : never
10790
+
10791
+ /**
10792
+ * @since 3.9.0
10793
+ */
10794
+ export type MakeError<Make> = Make extends { readonly effect: Effect<infer _A, infer _E, infer _R> } ? _E
10795
+ : Make extends { readonly scoped: Effect<infer _A, infer _E, infer _R> } ? _E
10796
+ : never
10797
+
10798
+ /**
10799
+ * @since 3.9.0
10800
+ */
10801
+ export type MakeContext<Make> = Make extends { readonly effect: Effect<infer _A, infer _E, infer _R> } ? _R
10802
+ : Make extends { readonly scoped: Effect<infer _A, infer _E, infer _R> } ? Exclude<_R, Scope.Scope>
10803
+ : never
10804
+
10805
+ /**
10806
+ * @since 3.9.0
10807
+ */
10808
+ export type MakeDeps<Make> = Make extends { readonly dependencies: ReadonlyArray<Layer.Layer.Any> }
10809
+ ? Make["dependencies"][number]
10810
+ : never
10811
+
10812
+ /**
10813
+ * @since 3.9.0
10814
+ */
10815
+ export type MakeDepsOut<Make> = Contravariant.Type<MakeDeps<Make>[Layer.LayerTypeId]["_ROut"]>
10816
+
10817
+ /**
10818
+ * @since 3.9.0
10819
+ */
10820
+ export type MakeDepsE<Make> = Covariant.Type<MakeDeps<Make>[Layer.LayerTypeId]["_E"]>
10821
+
10822
+ /**
10823
+ * @since 3.9.0
10824
+ */
10825
+ export type MakeDepsIn<Make> = Covariant.Type<MakeDeps<Make>[Layer.LayerTypeId]["_RIn"]>
10826
+
10827
+ /**
10828
+ * @since 3.9.0
10829
+ */
10830
+ export type MakeAccessors<Make> = Make extends { readonly accessors: true } ? true
10831
+ : false
10832
+ }
@@ -64,6 +64,9 @@ const Proto = {
64
64
  state: this.state
65
65
  }
66
66
  },
67
+ [Inspectable.DenoInspectSymbol](this: FiberHandle) {
68
+ return this.toJSON()
69
+ },
67
70
  [Inspectable.NodeInspectSymbol](this: FiberHandle) {
68
71
  return this.toJSON()
69
72
  },
package/src/FiberMap.ts CHANGED
@@ -74,6 +74,9 @@ const Proto = {
74
74
  state: this.state
75
75
  }
76
76
  },
77
+ [Inspectable.DenoInspectSymbol](this: FiberMap<unknown>) {
78
+ return this.toJSON()
79
+ },
77
80
  [Inspectable.NodeInspectSymbol](this: FiberMap<unknown>) {
78
81
  return this.toJSON()
79
82
  },
package/src/FiberSet.ts CHANGED
@@ -72,6 +72,9 @@ const Proto = {
72
72
  state: this.state
73
73
  }
74
74
  },
75
+ [Inspectable.DenoInspectSymbol](this: FiberSet<unknown, unknown>) {
76
+ return this.toJSON()
77
+ },
75
78
  [Inspectable.NodeInspectSymbol](this: FiberSet<unknown, unknown>) {
76
79
  return this.toJSON()
77
80
  },
package/src/HashMap.ts CHANGED
@@ -66,6 +66,22 @@ export declare namespace HashMap {
66
66
  * @category type-level
67
67
  */
68
68
  export type Value<T extends HashMap<any, any>> = [T] extends [HashMap<infer _K, infer _V>] ? _V : never
69
+
70
+ /**
71
+ * This type-level utility extracts the entry type `[K, V]` from a `HashMap<K, V>` type.
72
+ *
73
+ * @example
74
+ * import { HashMap } from "effect"
75
+ *
76
+ * declare const hm: HashMap.HashMap<string, number>
77
+ *
78
+ * // $ExpectType [string, number]
79
+ * type V = HashMap.HashMap.Entry<typeof hm>
80
+ *
81
+ * @since 3.9.0
82
+ * @category type-level
83
+ */
84
+ export type Entry<T extends HashMap<any, any>> = [Key<T>, Value<T>]
69
85
  }
70
86
 
71
87
  /**