effect 3.12.11 → 3.13.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 (204) hide show
  1. package/README.md +38 -49
  2. package/dist/cjs/Channel.js.map +1 -1
  3. package/dist/cjs/DateTime.js +17 -1
  4. package/dist/cjs/DateTime.js.map +1 -1
  5. package/dist/cjs/Differ.js.map +1 -1
  6. package/dist/cjs/Duration.js +128 -1
  7. package/dist/cjs/Duration.js.map +1 -1
  8. package/dist/cjs/Effect.js +175 -37
  9. package/dist/cjs/Effect.js.map +1 -1
  10. package/dist/cjs/Either.js +2 -1
  11. package/dist/cjs/Either.js.map +1 -1
  12. package/dist/cjs/FiberHandle.js +54 -21
  13. package/dist/cjs/FiberHandle.js.map +1 -1
  14. package/dist/cjs/FiberMap.js +51 -24
  15. package/dist/cjs/FiberMap.js.map +1 -1
  16. package/dist/cjs/FiberSet.js +50 -17
  17. package/dist/cjs/FiberSet.js.map +1 -1
  18. package/dist/cjs/HashMap.js +19 -1
  19. package/dist/cjs/HashMap.js.map +1 -1
  20. package/dist/cjs/HashSet.js +9 -1
  21. package/dist/cjs/HashSet.js.map +1 -1
  22. package/dist/cjs/Layer.js +21 -1
  23. package/dist/cjs/Layer.js.map +1 -1
  24. package/dist/cjs/Match.js +659 -38
  25. package/dist/cjs/Match.js.map +1 -1
  26. package/dist/cjs/RcMap.js +11 -1
  27. package/dist/cjs/RcMap.js.map +1 -1
  28. package/dist/cjs/Reloadable.js.map +1 -1
  29. package/dist/cjs/STM.js.map +1 -1
  30. package/dist/cjs/Schedule.js +1074 -309
  31. package/dist/cjs/Schedule.js.map +1 -1
  32. package/dist/cjs/Schema.js +73 -1
  33. package/dist/cjs/Schema.js.map +1 -1
  34. package/dist/cjs/Stream.js.map +1 -1
  35. package/dist/cjs/internal/channel.js.map +1 -1
  36. package/dist/cjs/internal/core-effect.js.map +1 -1
  37. package/dist/cjs/internal/core.js +27 -3
  38. package/dist/cjs/internal/core.js.map +1 -1
  39. package/dist/cjs/internal/dateTime.js +4 -1
  40. package/dist/cjs/internal/dateTime.js.map +1 -1
  41. package/dist/cjs/internal/differ.js +4 -0
  42. package/dist/cjs/internal/differ.js.map +1 -1
  43. package/dist/cjs/internal/effect/circular.js +3 -2
  44. package/dist/cjs/internal/effect/circular.js.map +1 -1
  45. package/dist/cjs/internal/fiberRuntime.js +21 -7
  46. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  47. package/dist/cjs/internal/hashMap.js +10 -1
  48. package/dist/cjs/internal/hashMap.js.map +1 -1
  49. package/dist/cjs/internal/keyedPool.js +1 -1
  50. package/dist/cjs/internal/keyedPool.js.map +1 -1
  51. package/dist/cjs/internal/layer.js.map +1 -1
  52. package/dist/cjs/internal/rcMap.js +86 -56
  53. package/dist/cjs/internal/rcMap.js.map +1 -1
  54. package/dist/cjs/internal/reloadable.js.map +1 -1
  55. package/dist/cjs/internal/schedule.js.map +1 -1
  56. package/dist/cjs/internal/sink.js.map +1 -1
  57. package/dist/cjs/internal/stm/stm.js.map +1 -1
  58. package/dist/cjs/internal/stream.js.map +1 -1
  59. package/dist/cjs/internal/version.js +1 -1
  60. package/dist/cjs/internal/version.js.map +1 -1
  61. package/dist/dts/Channel.d.ts +4 -4
  62. package/dist/dts/Channel.d.ts.map +1 -1
  63. package/dist/dts/DateTime.d.ts +16 -0
  64. package/dist/dts/DateTime.d.ts.map +1 -1
  65. package/dist/dts/Differ.d.ts +2 -1
  66. package/dist/dts/Differ.d.ts.map +1 -1
  67. package/dist/dts/Duration.d.ts +64 -0
  68. package/dist/dts/Duration.d.ts.map +1 -1
  69. package/dist/dts/Effect.d.ts +402 -30
  70. package/dist/dts/Effect.d.ts.map +1 -1
  71. package/dist/dts/Either.d.ts +7 -0
  72. package/dist/dts/Either.d.ts.map +1 -1
  73. package/dist/dts/FiberHandle.d.ts +26 -0
  74. package/dist/dts/FiberHandle.d.ts.map +1 -1
  75. package/dist/dts/FiberMap.d.ts +26 -0
  76. package/dist/dts/FiberMap.d.ts.map +1 -1
  77. package/dist/dts/FiberSet.d.ts +25 -0
  78. package/dist/dts/FiberSet.d.ts.map +1 -1
  79. package/dist/dts/HashMap.d.ts +38 -0
  80. package/dist/dts/HashMap.d.ts.map +1 -1
  81. package/dist/dts/HashSet.d.ts +7 -0
  82. package/dist/dts/HashSet.d.ts.map +1 -1
  83. package/dist/dts/Layer.d.ts +32 -13
  84. package/dist/dts/Layer.d.ts.map +1 -1
  85. package/dist/dts/Match.d.ts +731 -48
  86. package/dist/dts/Match.d.ts.map +1 -1
  87. package/dist/dts/RcMap.d.ts +32 -0
  88. package/dist/dts/RcMap.d.ts.map +1 -1
  89. package/dist/dts/Reloadable.d.ts +13 -13
  90. package/dist/dts/Reloadable.d.ts.map +1 -1
  91. package/dist/dts/STM.d.ts +4 -4
  92. package/dist/dts/STM.d.ts.map +1 -1
  93. package/dist/dts/Schedule.d.ts +2294 -633
  94. package/dist/dts/Schedule.d.ts.map +1 -1
  95. package/dist/dts/Schema.d.ts +40 -4
  96. package/dist/dts/Schema.d.ts.map +1 -1
  97. package/dist/dts/Stream.d.ts +8 -8
  98. package/dist/dts/Stream.d.ts.map +1 -1
  99. package/dist/dts/Trie.d.ts +7 -7
  100. package/dist/dts/Trie.d.ts.map +1 -1
  101. package/dist/dts/index.d.ts +25 -0
  102. package/dist/dts/index.d.ts.map +1 -1
  103. package/dist/dts/internal/stm/stm.d.ts +2 -2
  104. package/dist/dts/internal/stm/stm.d.ts.map +1 -1
  105. package/dist/esm/Channel.js.map +1 -1
  106. package/dist/esm/DateTime.js +16 -0
  107. package/dist/esm/DateTime.js.map +1 -1
  108. package/dist/esm/Differ.js.map +1 -1
  109. package/dist/esm/Duration.js +124 -0
  110. package/dist/esm/Duration.js.map +1 -1
  111. package/dist/esm/Effect.js +170 -32
  112. package/dist/esm/Effect.js.map +1 -1
  113. package/dist/esm/Either.js +7 -0
  114. package/dist/esm/Either.js.map +1 -1
  115. package/dist/esm/FiberHandle.js +48 -18
  116. package/dist/esm/FiberHandle.js.map +1 -1
  117. package/dist/esm/FiberMap.js +46 -22
  118. package/dist/esm/FiberMap.js.map +1 -1
  119. package/dist/esm/FiberSet.js +45 -15
  120. package/dist/esm/FiberSet.js.map +1 -1
  121. package/dist/esm/HashMap.js +17 -0
  122. package/dist/esm/HashMap.js.map +1 -1
  123. package/dist/esm/HashSet.js +7 -0
  124. package/dist/esm/HashSet.js.map +1 -1
  125. package/dist/esm/Layer.js +20 -0
  126. package/dist/esm/Layer.js.map +1 -1
  127. package/dist/esm/Match.js +665 -40
  128. package/dist/esm/Match.js.map +1 -1
  129. package/dist/esm/RcMap.js +10 -0
  130. package/dist/esm/RcMap.js.map +1 -1
  131. package/dist/esm/Reloadable.js.map +1 -1
  132. package/dist/esm/STM.js.map +1 -1
  133. package/dist/esm/Schedule.js +1074 -309
  134. package/dist/esm/Schedule.js.map +1 -1
  135. package/dist/esm/Schema.js +71 -0
  136. package/dist/esm/Schema.js.map +1 -1
  137. package/dist/esm/Stream.js.map +1 -1
  138. package/dist/esm/index.js +25 -0
  139. package/dist/esm/index.js.map +1 -1
  140. package/dist/esm/internal/channel.js.map +1 -1
  141. package/dist/esm/internal/core-effect.js.map +1 -1
  142. package/dist/esm/internal/core.js +23 -0
  143. package/dist/esm/internal/core.js.map +1 -1
  144. package/dist/esm/internal/dateTime.js +2 -0
  145. package/dist/esm/internal/dateTime.js.map +1 -1
  146. package/dist/esm/internal/differ.js +4 -0
  147. package/dist/esm/internal/differ.js.map +1 -1
  148. package/dist/esm/internal/effect/circular.js +3 -2
  149. package/dist/esm/internal/effect/circular.js.map +1 -1
  150. package/dist/esm/internal/fiberRuntime.js +18 -5
  151. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  152. package/dist/esm/internal/hashMap.js +9 -0
  153. package/dist/esm/internal/hashMap.js.map +1 -1
  154. package/dist/esm/internal/keyedPool.js +1 -1
  155. package/dist/esm/internal/keyedPool.js.map +1 -1
  156. package/dist/esm/internal/layer.js.map +1 -1
  157. package/dist/esm/internal/rcMap.js +85 -55
  158. package/dist/esm/internal/rcMap.js.map +1 -1
  159. package/dist/esm/internal/reloadable.js.map +1 -1
  160. package/dist/esm/internal/schedule.js.map +1 -1
  161. package/dist/esm/internal/sink.js.map +1 -1
  162. package/dist/esm/internal/stm/stm.js.map +1 -1
  163. package/dist/esm/internal/stream.js.map +1 -1
  164. package/dist/esm/internal/version.js +1 -1
  165. package/dist/esm/internal/version.js.map +1 -1
  166. package/package.json +2 -1
  167. package/src/Channel.ts +14 -17
  168. package/src/DateTime.ts +17 -8
  169. package/src/Differ.ts +2 -1
  170. package/src/Duration.ts +147 -0
  171. package/src/Effect.ts +528 -140
  172. package/src/Either.ts +9 -0
  173. package/src/FiberHandle.ts +95 -35
  174. package/src/FiberMap.ts +104 -39
  175. package/src/FiberSet.ts +93 -24
  176. package/src/HashMap.ts +40 -0
  177. package/src/HashSet.ts +8 -0
  178. package/src/Layer.ts +94 -40
  179. package/src/Match.ts +733 -49
  180. package/src/RcMap.ts +34 -0
  181. package/src/Reloadable.ts +17 -27
  182. package/src/STM.ts +10 -17
  183. package/src/Schedule.ts +2325 -653
  184. package/src/Schema.ts +81 -4
  185. package/src/Stream.ts +26 -33
  186. package/src/Trie.ts +7 -7
  187. package/src/index.ts +25 -0
  188. package/src/internal/channel.ts +37 -39
  189. package/src/internal/core-effect.ts +84 -84
  190. package/src/internal/core.ts +80 -0
  191. package/src/internal/dateTime.ts +3 -0
  192. package/src/internal/differ.ts +4 -0
  193. package/src/internal/effect/circular.ts +3 -2
  194. package/src/internal/fiberRuntime.ts +31 -6
  195. package/src/internal/hashMap.ts +16 -0
  196. package/src/internal/keyedPool.ts +1 -1
  197. package/src/internal/layer.ts +52 -52
  198. package/src/internal/rcMap.ts +131 -89
  199. package/src/internal/reloadable.ts +25 -28
  200. package/src/internal/schedule.ts +29 -23
  201. package/src/internal/sink.ts +16 -15
  202. package/src/internal/stm/stm.ts +54 -46
  203. package/src/internal/stream.ts +100 -100
  204. package/src/internal/version.ts +1 -1
package/src/Layer.ts CHANGED
@@ -24,7 +24,7 @@ import * as Context from "./Context.js"
24
24
  import type * as Effect from "./Effect.js"
25
25
  import type * as Exit from "./Exit.js"
26
26
  import type { FiberRef } from "./FiberRef.js"
27
- import type { LazyArg } from "./Function.js"
27
+ import { dual, type LazyArg } from "./Function.js"
28
28
  import { clockTag } from "./internal/clock.js"
29
29
  import * as core from "./internal/core.js"
30
30
  import * as defaultServices from "./internal/defaultServices.js"
@@ -352,19 +352,14 @@ export const effect: {
352
352
  * @since 2.0.0
353
353
  * @category constructors
354
354
  */
355
- <T extends Context.Tag<any, any>>(
356
- tag: T
357
- ): <E, R>(effect: Effect.Effect<Context.Tag.Service<T>, E, R>) => Layer<Context.Tag.Identifier<T>, E, R>
355
+ <I, S>(tag: Context.Tag<I, S>): <E, R>(effect: Effect.Effect<Types.NoInfer<S>, E, R>) => Layer<I, E, R>
358
356
  /**
359
357
  * Constructs a layer from the specified effect.
360
358
  *
361
359
  * @since 2.0.0
362
360
  * @category constructors
363
361
  */
364
- <T extends Context.Tag<any, any>, E, R>(
365
- tag: T,
366
- effect: Effect.Effect<Context.Tag.Service<T>, E, R>
367
- ): Layer<Context.Tag.Identifier<T>, E, R>
362
+ <I, S, E, R>(tag: Context.Tag<I, S>, effect: Effect.Effect<Types.NoInfer<S>, E, R>): Layer<I, E, R>
368
363
  } = internal.fromEffect
369
364
 
370
365
  /**
@@ -496,11 +491,11 @@ export const flatten: {
496
491
  */
497
492
  export const fresh: <A, E, R>(self: Layer<A, E, R>) => Layer<A, E, R> = internal.fresh
498
493
 
499
- const fromFunction: <A extends Context.Tag<any, any>, B extends Context.Tag<any, any>>(
500
- tagA: A,
501
- tagB: B,
502
- f: (a: Context.Tag.Service<A>) => Context.Tag.Service<B>
503
- ) => Layer<Context.Tag.Identifier<B>, never, Context.Tag.Identifier<A>> = internal.fromFunction
494
+ const fromFunction: <I1, S1, I2, S2>(
495
+ tagA: Context.Tag<I1, S1>,
496
+ tagB: Context.Tag<I2, S2>,
497
+ f: (a: Types.NoInfer<S1>) => Types.NoInfer<S2>
498
+ ) => Layer<I2, never, I1> = internal.fromFunction
504
499
 
505
500
  export {
506
501
  /**
@@ -762,11 +757,11 @@ export const project: {
762
757
  * @since 2.0.0
763
758
  * @category utils
764
759
  */
765
- <A extends Context.Tag<any, any>, B extends Context.Tag<any, any>>(
766
- tagA: A,
767
- tagB: B,
768
- f: (a: Context.Tag.Service<A>) => Context.Tag.Service<B>
769
- ): <RIn, E>(self: Layer<Context.Tag.Identifier<A>, E, RIn>) => Layer<Context.Tag.Identifier<B>, E, RIn>
760
+ <I1, S1, I2, S2>(
761
+ tagA: Context.Tag<I1, S1>,
762
+ tagB: Context.Tag<I2, S2>,
763
+ f: (a: Types.NoInfer<S1>) => Types.NoInfer<S2>
764
+ ): <RIn, E>(self: Layer<I1, E, RIn>) => Layer<I2, E, RIn>
770
765
  /**
771
766
  * Projects out part of one of the services output by this layer using the
772
767
  * specified function.
@@ -774,12 +769,12 @@ export const project: {
774
769
  * @since 2.0.0
775
770
  * @category utils
776
771
  */
777
- <RIn, E, A extends Context.Tag<any, any>, B extends Context.Tag<any, any>>(
778
- self: Layer<Context.Tag.Identifier<A>, E, RIn>,
779
- tagA: A,
780
- tagB: B,
781
- f: (a: Context.Tag.Service<A>) => Context.Tag.Service<B>
782
- ): Layer<Context.Tag.Identifier<B>, E, RIn>
772
+ <RIn, E, I1, S1, I2, S2>(
773
+ self: Layer<I1, E, RIn>,
774
+ tagA: Context.Tag<I1, S1>,
775
+ tagB: Context.Tag<I2, S2>,
776
+ f: (a: Types.NoInfer<S1>) => Types.NoInfer<S2>
777
+ ): Layer<I2, E, RIn>
783
778
  } = internal.project
784
779
 
785
780
  /**
@@ -903,19 +898,19 @@ export const scoped: {
903
898
  * @since 2.0.0
904
899
  * @category constructors
905
900
  */
906
- <T extends Context.Tag<any, any>>(tag: T): <E, R>(
907
- effect: Effect.Effect<Context.Tag.Service<T>, E, R>
908
- ) => Layer<Context.Tag.Identifier<T>, E, Exclude<R, Scope.Scope>>
901
+ <I, S>(
902
+ tag: Context.Tag<I, S>
903
+ ): <E, R>(effect: Effect.Effect<Types.NoInfer<S>, E, R>) => Layer<I, E, Exclude<R, Scope.Scope>>
909
904
  /**
910
905
  * Constructs a layer from the specified scoped effect.
911
906
  *
912
907
  * @since 2.0.0
913
908
  * @category constructors
914
909
  */
915
- <T extends Context.Tag<any, any>, E, R>(
916
- tag: T,
917
- effect: Effect.Effect<Context.Tag.Service<T>, E, R>
918
- ): Layer<Context.Tag.Identifier<T>, E, Exclude<R, Scope.Scope>>
910
+ <I, S, E, R>(
911
+ tag: Context.Tag<I, S>,
912
+ effect: Effect.Effect<Types.NoInfer<S>, E, R>
913
+ ): Layer<I, E, Exclude<R, Scope.Scope>>
919
914
  } = internal.scoped
920
915
 
921
916
  /**
@@ -945,9 +940,7 @@ export const scopedContext: <A, E, R>(
945
940
  * @since 2.0.0
946
941
  * @category constructors
947
942
  */
948
- export const service: <T extends Context.Tag<any, any>>(
949
- tag: T
950
- ) => Layer<Context.Tag.Identifier<T>, never, Context.Tag.Identifier<T>> = internal.service
943
+ export const service: <I, S>(tag: Context.Tag<I, S>) => Layer<I, never, I> = internal.service
951
944
 
952
945
  /**
953
946
  * Constructs a layer from the specified value.
@@ -962,14 +955,14 @@ export const succeed: {
962
955
  * @since 2.0.0
963
956
  * @category constructors
964
957
  */
965
- <T extends Context.Tag<any, any>>(tag: T): (resource: Context.Tag.Service<T>) => Layer<Context.Tag.Identifier<T>>
958
+ <I, S>(tag: Context.Tag<I, S>): (resource: Types.NoInfer<S>) => Layer<I>
966
959
  /**
967
960
  * Constructs a layer from the specified value.
968
961
  *
969
962
  * @since 2.0.0
970
963
  * @category constructors
971
964
  */
972
- <T extends Context.Tag<any, any>>(tag: T, resource: Context.Tag.Service<T>): Layer<Context.Tag.Identifier<T>>
965
+ <I, S>(tag: Context.Tag<I, S>, resource: Types.NoInfer<S>): Layer<I>
973
966
  } = internal.succeed
974
967
 
975
968
  /**
@@ -1003,16 +996,14 @@ export const sync: {
1003
996
  * @since 2.0.0
1004
997
  * @category constructors
1005
998
  */
1006
- <T extends Context.Tag<any, any>>(
1007
- tag: T
1008
- ): (evaluate: LazyArg<Context.Tag.Service<T>>) => Layer<Context.Tag.Identifier<T>>
999
+ <I, S>(tag: Context.Tag<I, S>): (evaluate: LazyArg<Types.NoInfer<S>>) => Layer<I>
1009
1000
  /**
1010
1001
  * Lazily constructs a layer from the specified value.
1011
1002
  *
1012
1003
  * @since 2.0.0
1013
1004
  * @category constructors
1014
1005
  */
1015
- <T extends Context.Tag<any, any>>(tag: T, evaluate: LazyArg<Context.Tag.Service<T>>): Layer<Context.Tag.Identifier<T>>
1006
+ <I, S>(tag: Context.Tag<I, S>, evaluate: LazyArg<Types.NoInfer<S>>): Layer<I>
1016
1007
  } = internal.sync
1017
1008
 
1018
1009
  /**
@@ -1525,3 +1516,66 @@ export const buildWithMemoMap: {
1525
1516
  scope: Scope.Scope
1526
1517
  ): Effect.Effect<Context.Context<ROut>, E, RIn>
1527
1518
  } = internal.buildWithMemoMap
1519
+
1520
+ /**
1521
+ * Updates a service in the context with a new implementation.
1522
+ *
1523
+ * **Details**
1524
+ *
1525
+ * This function modifies the existing implementation of a service in the
1526
+ * context. It retrieves the current service, applies the provided
1527
+ * transformation function `f`, and replaces the old service with the
1528
+ * transformed one.
1529
+ *
1530
+ * **When to Use**
1531
+ *
1532
+ * This is useful for adapting or extending a service's behavior during the
1533
+ * creation of a layer.
1534
+ *
1535
+ * @since 3.13.0
1536
+ * @category utils
1537
+ */
1538
+ export const updateService = dual<
1539
+ /**
1540
+ * Updates a service in the context with a new implementation.
1541
+ *
1542
+ * **Details**
1543
+ *
1544
+ * This function modifies the existing implementation of a service in the
1545
+ * context. It retrieves the current service, applies the provided
1546
+ * transformation function `f`, and replaces the old service with the
1547
+ * transformed one.
1548
+ *
1549
+ * **When to Use**
1550
+ *
1551
+ * This is useful for adapting or extending a service's behavior during the
1552
+ * creation of a layer.
1553
+ *
1554
+ * @since 3.13.0
1555
+ * @category utils
1556
+ */
1557
+ <I, A>(tag: Context.Tag<I, A>, f: (a: A) => A) => <A1, E1, R1>(layer: Layer<A1, E1, R1>) => Layer<A1, E1, I | R1>,
1558
+ /**
1559
+ * Updates a service in the context with a new implementation.
1560
+ *
1561
+ * **Details**
1562
+ *
1563
+ * This function modifies the existing implementation of a service in the
1564
+ * context. It retrieves the current service, applies the provided
1565
+ * transformation function `f`, and replaces the old service with the
1566
+ * transformed one.
1567
+ *
1568
+ * **When to Use**
1569
+ *
1570
+ * This is useful for adapting or extending a service's behavior during the
1571
+ * creation of a layer.
1572
+ *
1573
+ * @since 3.13.0
1574
+ * @category utils
1575
+ */
1576
+ <A1, E1, R1, I, A>(layer: Layer<A1, E1, R1>, tag: Context.Tag<I, A>, f: (a: A) => A) => Layer<A1, E1, I | R1>
1577
+ >(3, (layer, tag, f) =>
1578
+ provide(
1579
+ layer,
1580
+ map(context(), (c) => Context.add(c, tag, f(Context.unsafeGet(c, tag))))
1581
+ ))