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/Effect.ts CHANGED
@@ -34,12 +34,13 @@ import * as defaultServices from "./internal/defaultServices.js"
34
34
  import * as circular from "./internal/effect/circular.js"
35
35
  import * as fiberRuntime from "./internal/fiberRuntime.js"
36
36
  import * as layer from "./internal/layer.js"
37
+ import * as option_ from "./internal/option.js"
37
38
  import * as query from "./internal/query.js"
38
39
  import * as runtime_ from "./internal/runtime.js"
39
40
  import * as schedule_ from "./internal/schedule.js"
40
41
  import * as internalTracer from "./internal/tracer.js"
41
42
  import type * as Layer from "./Layer.js"
42
- import type { LogLevel } from "./LogLevel.js"
43
+ import type * as LogLevel from "./LogLevel.js"
43
44
  import type * as ManagedRuntime from "./ManagedRuntime.js"
44
45
  import type * as Metric from "./Metric.js"
45
46
  import type * as MetricLabel from "./MetricLabel.js"
@@ -15002,10 +15003,7 @@ export const provideService: {
15002
15003
  * @since 2.0.0
15003
15004
  * @category Context
15004
15005
  */
15005
- <T extends Context.Tag<any, any>>(
15006
- tag: T,
15007
- service: Context.Tag.Service<T>
15008
- ): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, Exclude<R, Context.Tag.Identifier<T>>>
15006
+ <I, S>(tag: Context.Tag<I, S>, service: NoInfer<S>): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, Exclude<R, I>>
15009
15007
  /**
15010
15008
  * Provides an implementation for a service in the context of an effect.
15011
15009
  *
@@ -15058,11 +15056,7 @@ export const provideService: {
15058
15056
  * @since 2.0.0
15059
15057
  * @category Context
15060
15058
  */
15061
- <A, E, R, T extends Context.Tag<any, any>>(
15062
- self: Effect<A, E, R>,
15063
- tag: T,
15064
- service: Context.Tag.Service<T>
15065
- ): Effect<A, E, Exclude<R, Context.Tag.Identifier<T>>>
15059
+ <A, E, R, I, S>(self: Effect<A, E, R>, tag: Context.Tag<I, S>, service: NoInfer<S>): Effect<A, E, Exclude<R, I>>
15066
15060
  } = effect.provideService
15067
15061
 
15068
15062
  /**
@@ -15102,10 +15096,10 @@ export const provideServiceEffect: {
15102
15096
  * @since 2.0.0
15103
15097
  * @category Context
15104
15098
  */
15105
- <T extends Context.Tag<any, any>, E1, R1>(
15106
- tag: T,
15107
- effect: Effect<Context.Tag.Service<T>, E1, R1>
15108
- ): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E1 | E, R1 | Exclude<R, Context.Tag.Identifier<T>>>
15099
+ <I, S, E1, R1>(
15100
+ tag: Context.Tag<I, S>,
15101
+ effect: Effect<NoInfer<S>, E1, R1>
15102
+ ): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E | E1, R1 | Exclude<R, I>>
15109
15103
  /**
15110
15104
  * Dynamically provides an implementation for a service using an effect.
15111
15105
  *
@@ -15124,11 +15118,11 @@ export const provideServiceEffect: {
15124
15118
  * @since 2.0.0
15125
15119
  * @category Context
15126
15120
  */
15127
- <A, E, R, T extends Context.Tag<any, any>, E1, R1>(
15121
+ <A, E, R, I, S, E1, R1>(
15128
15122
  self: Effect<A, E, R>,
15129
- tag: T,
15130
- effect: Effect<Context.Tag.Service<T>, E1, R1>
15131
- ): Effect<A, E | E1, R1 | Exclude<R, Context.Tag.Identifier<T>>>
15123
+ tag: Context.Tag<I, S>,
15124
+ effect: Effect<NoInfer<S>, E1, R1>
15125
+ ): Effect<A, E | E1, R1 | Exclude<R, I>>
15132
15126
  } = effect.provideServiceEffect
15133
15127
 
15134
15128
  /**
@@ -15279,10 +15273,10 @@ export const updateService: {
15279
15273
  * @since 2.0.0
15280
15274
  * @category Context
15281
15275
  */
15282
- <T extends Context.Tag<any, any>>(
15283
- tag: T,
15284
- f: (service: Context.Tag.Service<T>) => Context.Tag.Service<T>
15285
- ): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R | Context.Tag.Identifier<T>>
15276
+ <I, S>(
15277
+ tag: Context.Tag<I, S>,
15278
+ f: (service: NoInfer<S>) => NoInfer<S>
15279
+ ): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R | I>
15286
15280
  /**
15287
15281
  * Updates a service in the context with a new implementation.
15288
15282
  *
@@ -15301,11 +15295,11 @@ export const updateService: {
15301
15295
  * @since 2.0.0
15302
15296
  * @category Context
15303
15297
  */
15304
- <A, E, R, T extends Context.Tag<any, any>>(
15298
+ <A, E, R, I, S>(
15305
15299
  self: Effect<A, E, R>,
15306
- tag: T,
15307
- f: (service: Context.Tag.Service<T>) => Context.Tag.Service<T>
15308
- ): Effect<A, E, R | Context.Tag.Identifier<T>>
15300
+ tag: Context.Tag<I, S>,
15301
+ f: (service: NoInfer<S>) => NoInfer<S>
15302
+ ): Effect<A, E, R | I>
15309
15303
  } = effect.updateService
15310
15304
 
15311
15305
  /**
@@ -16785,6 +16779,263 @@ export const filterOrFail: {
16785
16779
  <A, E, R>(self: Effect<A, E, R>, predicate: Predicate<A>): Effect<A, E | Cause.NoSuchElementException, R>
16786
16780
  } = effect.filterOrFail
16787
16781
 
16782
+ /**
16783
+ * Filters an effect with an effectful predicate, falling back to an alternative
16784
+ * effect if the predicate fails.
16785
+ *
16786
+ * **Details**
16787
+ *
16788
+ * This function applies a predicate to the result of an effect. If the
16789
+ * predicate evaluates to `false`, the effect falls back to the `orElse`
16790
+ * effect. The `orElse` effect can produce an alternative value or perform
16791
+ * additional computations.
16792
+ *
16793
+ * @example
16794
+ * ```ts
16795
+ * import { Effect, pipe } from "effect"
16796
+ *
16797
+ * // Define a user interface
16798
+ * interface User {
16799
+ * readonly name: string
16800
+ * }
16801
+ *
16802
+ * // Simulate an asynchronous authentication function
16803
+ * declare const auth: () => Promise<User | null>
16804
+ *
16805
+ * const program = pipe(
16806
+ * Effect.promise(() => auth()),
16807
+ * // Use filterEffectOrElse with an effectful predicate
16808
+ * Effect.filterEffectOrElse({
16809
+ * predicate: (user) => Effect.succeed(user !== null),
16810
+ * orElse: (user) => Effect.fail(new Error(`Unauthorized user: ${user}`))
16811
+ * }),
16812
+ * )
16813
+ * ```
16814
+ *
16815
+ * @since 3.13.0
16816
+ * @category Filtering
16817
+ */
16818
+ export const filterEffectOrElse: {
16819
+ /**
16820
+ * Filters an effect with an effectful predicate, falling back to an alternative
16821
+ * effect if the predicate fails.
16822
+ *
16823
+ * **Details**
16824
+ *
16825
+ * This function applies a predicate to the result of an effect. If the
16826
+ * predicate evaluates to `false`, the effect falls back to the `orElse`
16827
+ * effect. The `orElse` effect can produce an alternative value or perform
16828
+ * additional computations.
16829
+ *
16830
+ * @example
16831
+ * ```ts
16832
+ * import { Effect, pipe } from "effect"
16833
+ *
16834
+ * // Define a user interface
16835
+ * interface User {
16836
+ * readonly name: string
16837
+ * }
16838
+ *
16839
+ * // Simulate an asynchronous authentication function
16840
+ * declare const auth: () => Promise<User | null>
16841
+ *
16842
+ * const program = pipe(
16843
+ * Effect.promise(() => auth()),
16844
+ * // Use filterEffectOrElse with an effectful predicate
16845
+ * Effect.filterEffectOrElse({
16846
+ * predicate: (user) => Effect.succeed(user !== null),
16847
+ * orElse: (user) => Effect.fail(new Error(`Unauthorized user: ${user}`))
16848
+ * }),
16849
+ * )
16850
+ * ```
16851
+ *
16852
+ * @since 3.13.0
16853
+ * @category Filtering
16854
+ */
16855
+ <A, E2, R2, A2, E3, R3>(
16856
+ options: {
16857
+ readonly predicate: (a: NoInfer<A>) => Effect<boolean, E2, R2>
16858
+ readonly orElse: (a: NoInfer<A>) => Effect<A2, E3, R3>
16859
+ }
16860
+ ): <E, R>(self: Effect<A, E, R>) => Effect<A | A2, E | E2 | E3, R | R2 | R3>
16861
+ /**
16862
+ * Filters an effect with an effectful predicate, falling back to an alternative
16863
+ * effect if the predicate fails.
16864
+ *
16865
+ * **Details**
16866
+ *
16867
+ * This function applies a predicate to the result of an effect. If the
16868
+ * predicate evaluates to `false`, the effect falls back to the `orElse`
16869
+ * effect. The `orElse` effect can produce an alternative value or perform
16870
+ * additional computations.
16871
+ *
16872
+ * @example
16873
+ * ```ts
16874
+ * import { Effect, pipe } from "effect"
16875
+ *
16876
+ * // Define a user interface
16877
+ * interface User {
16878
+ * readonly name: string
16879
+ * }
16880
+ *
16881
+ * // Simulate an asynchronous authentication function
16882
+ * declare const auth: () => Promise<User | null>
16883
+ *
16884
+ * const program = pipe(
16885
+ * Effect.promise(() => auth()),
16886
+ * // Use filterEffectOrElse with an effectful predicate
16887
+ * Effect.filterEffectOrElse({
16888
+ * predicate: (user) => Effect.succeed(user !== null),
16889
+ * orElse: (user) => Effect.fail(new Error(`Unauthorized user: ${user}`))
16890
+ * }),
16891
+ * )
16892
+ * ```
16893
+ *
16894
+ * @since 3.13.0
16895
+ * @category Filtering
16896
+ */
16897
+ <A, E, R, E2, R2, A2, E3, R3>(
16898
+ self: Effect<A, E, R>,
16899
+ options: {
16900
+ readonly predicate: (a: A) => Effect<boolean, E2, R2>
16901
+ readonly orElse: (a: A) => Effect<A2, E3, R3>
16902
+ }
16903
+ ): Effect<A | A2, E | E2 | E3, R | R2 | R3>
16904
+ } = core.filterEffectOrElse
16905
+
16906
+ /**
16907
+ * Filters an effect with an effectful predicate, failing with a custom error if the predicate fails.
16908
+ *
16909
+ * **Details**
16910
+ *
16911
+ * This function applies a predicate to the result of an effect. If the
16912
+ * predicate evaluates to `false`, the effect fails with a custom error
16913
+ * generated by the `orFailWith` function.
16914
+ *
16915
+ * **When to Use**
16916
+ *
16917
+ * This is useful for enforcing constraints and treating violations as
16918
+ * recoverable errors.
16919
+ *
16920
+ * @example
16921
+ * ```ts
16922
+ * import { Effect, pipe } from "effect"
16923
+ *
16924
+ * // Define a user interface
16925
+ * interface User {
16926
+ * readonly name: string
16927
+ * }
16928
+ *
16929
+ * // Simulate an asynchronous authentication function
16930
+ * declare const auth: () => Promise<User | null>
16931
+ *
16932
+ * const program = pipe(
16933
+ * Effect.promise(() => auth()),
16934
+ * // Use filterEffectOrFail with an effectful predicate
16935
+ * Effect.filterEffectOrFail({
16936
+ * predicate: (user) => Effect.succeed(user !== null),
16937
+ * orFailWith: () => new Error("Unauthorized")
16938
+ * }),
16939
+ * )
16940
+ * ```
16941
+ *
16942
+ * @since 3.13.0
16943
+ * @category Filtering
16944
+ */
16945
+ export const filterEffectOrFail: {
16946
+ /**
16947
+ * Filters an effect with an effectful predicate, failing with a custom error if the predicate fails.
16948
+ *
16949
+ * **Details**
16950
+ *
16951
+ * This function applies a predicate to the result of an effect. If the
16952
+ * predicate evaluates to `false`, the effect fails with a custom error
16953
+ * generated by the `orFailWith` function.
16954
+ *
16955
+ * **When to Use**
16956
+ *
16957
+ * This is useful for enforcing constraints and treating violations as
16958
+ * recoverable errors.
16959
+ *
16960
+ * @example
16961
+ * ```ts
16962
+ * import { Effect, pipe } from "effect"
16963
+ *
16964
+ * // Define a user interface
16965
+ * interface User {
16966
+ * readonly name: string
16967
+ * }
16968
+ *
16969
+ * // Simulate an asynchronous authentication function
16970
+ * declare const auth: () => Promise<User | null>
16971
+ *
16972
+ * const program = pipe(
16973
+ * Effect.promise(() => auth()),
16974
+ * // Use filterEffectOrFail with an effectful predicate
16975
+ * Effect.filterEffectOrFail({
16976
+ * predicate: (user) => Effect.succeed(user !== null),
16977
+ * orFailWith: () => new Error("Unauthorized")
16978
+ * }),
16979
+ * )
16980
+ * ```
16981
+ *
16982
+ * @since 3.13.0
16983
+ * @category Filtering
16984
+ */
16985
+ <A, E2, R2, E3>(
16986
+ options: {
16987
+ readonly predicate: (a: NoInfer<A>) => Effect<boolean, E2, R2>
16988
+ readonly orFailWith: (a: NoInfer<A>) => E3
16989
+ }
16990
+ ): <E, R>(self: Effect<A, E, R>) => Effect<A, E | E2 | E3, R | R2>
16991
+ /**
16992
+ * Filters an effect with an effectful predicate, failing with a custom error if the predicate fails.
16993
+ *
16994
+ * **Details**
16995
+ *
16996
+ * This function applies a predicate to the result of an effect. If the
16997
+ * predicate evaluates to `false`, the effect fails with a custom error
16998
+ * generated by the `orFailWith` function.
16999
+ *
17000
+ * **When to Use**
17001
+ *
17002
+ * This is useful for enforcing constraints and treating violations as
17003
+ * recoverable errors.
17004
+ *
17005
+ * @example
17006
+ * ```ts
17007
+ * import { Effect, pipe } from "effect"
17008
+ *
17009
+ * // Define a user interface
17010
+ * interface User {
17011
+ * readonly name: string
17012
+ * }
17013
+ *
17014
+ * // Simulate an asynchronous authentication function
17015
+ * declare const auth: () => Promise<User | null>
17016
+ *
17017
+ * const program = pipe(
17018
+ * Effect.promise(() => auth()),
17019
+ * // Use filterEffectOrFail with an effectful predicate
17020
+ * Effect.filterEffectOrFail({
17021
+ * predicate: (user) => Effect.succeed(user !== null),
17022
+ * orFailWith: () => new Error("Unauthorized")
17023
+ * }),
17024
+ * )
17025
+ * ```
17026
+ *
17027
+ * @since 3.13.0
17028
+ * @category Filtering
17029
+ */
17030
+ <A, E, R, E2, R2, E3>(
17031
+ self: Effect<A, E, R>,
17032
+ options: {
17033
+ readonly predicate: (a: A) => Effect<boolean, E2, R2>
17034
+ readonly orFailWith: (a: A) => E3
17035
+ }
17036
+ ): Effect<A, E | E2 | E3, R | R2>
17037
+ } = core.filterEffectOrFail
17038
+
16788
17039
  /**
16789
17040
  * Executes an effect only if the condition is `false`.
16790
17041
  *
@@ -22762,7 +23013,7 @@ export const log: (...message: ReadonlyArray<any>) => Effect<void, never, never>
22762
23013
  * @category Logging
22763
23014
  */
22764
23015
  export const logWithLevel = (
22765
- level: LogLevel,
23016
+ level: LogLevel.LogLevel,
22766
23017
  ...message: ReadonlyArray<any>
22767
23018
  ): Effect<void> => effect.logWithLevel(level)(...message)
22768
23019
 
@@ -23378,7 +23629,7 @@ export const withUnhandledErrorLogLevel: {
23378
23629
  * @since 2.0.0
23379
23630
  * @category Logging
23380
23631
  */
23381
- (level: Option.Option<LogLevel>): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R>
23632
+ (level: Option.Option<LogLevel.LogLevel>): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R>
23382
23633
  /**
23383
23634
  * Configures whether child fibers will log unhandled errors and at what log
23384
23635
  * level.
@@ -23413,9 +23664,107 @@ export const withUnhandledErrorLogLevel: {
23413
23664
  * @since 2.0.0
23414
23665
  * @category Logging
23415
23666
  */
23416
- <A, E, R>(self: Effect<A, E, R>, level: Option.Option<LogLevel>): Effect<A, E, R>
23667
+ <A, E, R>(self: Effect<A, E, R>, level: Option.Option<LogLevel.LogLevel>): Effect<A, E, R>
23417
23668
  } = core.withUnhandledErrorLogLevel
23418
23669
 
23670
+ /**
23671
+ * Conditionally executes an effect based on the specified log level and currently enabled log level.
23672
+ *
23673
+ * **Details**
23674
+ *
23675
+ * This function runs the provided effect only if the specified log level is
23676
+ * enabled. If the log level is enabled, the effect is executed and its result
23677
+ * is wrapped in `Some`. If the log level is not enabled, the effect is not
23678
+ * executed and `None` is returned.
23679
+ *
23680
+ * This function is useful for conditionally executing logging-related effects
23681
+ * or other operations that depend on the current log level configuration.
23682
+ *
23683
+ * @example
23684
+ * ```ts
23685
+ * import { Effect, Logger, LogLevel } from "effect"
23686
+ *
23687
+ * const program = Effect.gen(function* () {
23688
+ * yield* Effect.whenLogLevel(Effect.logTrace("message1"), LogLevel.Trace); // returns `None`
23689
+ * yield* Effect.whenLogLevel(Effect.logDebug("message2"), LogLevel.Debug); // returns `Some`
23690
+ * }).pipe(Logger.withMinimumLogLevel(LogLevel.Debug));
23691
+ *
23692
+ * // Effect.runFork(program)
23693
+ * // timestamp=... level=DEBUG fiber=#0 message=message2
23694
+ * ```
23695
+ *
23696
+ * @see {@link FiberRef.minimumLogLevel} to retrieve the current minimum log level.
23697
+ *
23698
+ * @since 3.13.0
23699
+ * @category Logging
23700
+ */
23701
+ export const whenLogLevel: {
23702
+ /**
23703
+ * Conditionally executes an effect based on the specified log level and currently enabled log level.
23704
+ *
23705
+ * **Details**
23706
+ *
23707
+ * This function runs the provided effect only if the specified log level is
23708
+ * enabled. If the log level is enabled, the effect is executed and its result
23709
+ * is wrapped in `Some`. If the log level is not enabled, the effect is not
23710
+ * executed and `None` is returned.
23711
+ *
23712
+ * This function is useful for conditionally executing logging-related effects
23713
+ * or other operations that depend on the current log level configuration.
23714
+ *
23715
+ * @example
23716
+ * ```ts
23717
+ * import { Effect, Logger, LogLevel } from "effect"
23718
+ *
23719
+ * const program = Effect.gen(function* () {
23720
+ * yield* Effect.whenLogLevel(Effect.logTrace("message1"), LogLevel.Trace); // returns `None`
23721
+ * yield* Effect.whenLogLevel(Effect.logDebug("message2"), LogLevel.Debug); // returns `Some`
23722
+ * }).pipe(Logger.withMinimumLogLevel(LogLevel.Debug));
23723
+ *
23724
+ * // Effect.runFork(program)
23725
+ * // timestamp=... level=DEBUG fiber=#0 message=message2
23726
+ * ```
23727
+ *
23728
+ * @see {@link FiberRef.minimumLogLevel} to retrieve the current minimum log level.
23729
+ *
23730
+ * @since 3.13.0
23731
+ * @category Logging
23732
+ */
23733
+ (level: LogLevel.LogLevel | LogLevel.Literal): <A, E, R>(self: Effect<A, E, R>) => Effect<Option.Option<A>, E, R>
23734
+ /**
23735
+ * Conditionally executes an effect based on the specified log level and currently enabled log level.
23736
+ *
23737
+ * **Details**
23738
+ *
23739
+ * This function runs the provided effect only if the specified log level is
23740
+ * enabled. If the log level is enabled, the effect is executed and its result
23741
+ * is wrapped in `Some`. If the log level is not enabled, the effect is not
23742
+ * executed and `None` is returned.
23743
+ *
23744
+ * This function is useful for conditionally executing logging-related effects
23745
+ * or other operations that depend on the current log level configuration.
23746
+ *
23747
+ * @example
23748
+ * ```ts
23749
+ * import { Effect, Logger, LogLevel } from "effect"
23750
+ *
23751
+ * const program = Effect.gen(function* () {
23752
+ * yield* Effect.whenLogLevel(Effect.logTrace("message1"), LogLevel.Trace); // returns `None`
23753
+ * yield* Effect.whenLogLevel(Effect.logDebug("message2"), LogLevel.Debug); // returns `Some`
23754
+ * }).pipe(Logger.withMinimumLogLevel(LogLevel.Debug));
23755
+ *
23756
+ * // Effect.runFork(program)
23757
+ * // timestamp=... level=DEBUG fiber=#0 message=message2
23758
+ * ```
23759
+ *
23760
+ * @see {@link FiberRef.minimumLogLevel} to retrieve the current minimum log level.
23761
+ *
23762
+ * @since 3.13.0
23763
+ * @category Logging
23764
+ */
23765
+ <A, E, R>(self: Effect<A, E, R>, level: LogLevel.LogLevel | LogLevel.Literal): Effect<Option.Option<A>, E, R>
23766
+ } = fiberRuntime.whenLogLevel
23767
+
23419
23768
  /**
23420
23769
  * Converts an effect's failure into a fiber termination, removing the error
23421
23770
  * from the effect's type.
@@ -26658,7 +27007,7 @@ export const withParentSpan: {
26658
27007
  * ```
26659
27008
  *
26660
27009
  * @since 2.0.0
26661
- * @category Optional Wrapping
27010
+ * @category Optional Wrapping & Unwrapping
26662
27011
  */
26663
27012
  export const fromNullable: <A>(value: A) => Effect<NonNullable<A>, Cause.NoSuchElementException> = effect.fromNullable
26664
27013
 
@@ -26713,12 +27062,47 @@ export const fromNullable: <A>(value: A) => Effect<NonNullable<A>, Cause.NoSuchE
26713
27062
  * ```
26714
27063
  *
26715
27064
  * @since 2.0.0
26716
- * @category Optional Wrapping
27065
+ * @category Optional Wrapping & Unwrapping
26717
27066
  */
26718
27067
  export const optionFromOptional: <A, E, R>(
26719
27068
  self: Effect<A, E, R>
26720
27069
  ) => Effect<Option.Option<A>, Exclude<E, Cause.NoSuchElementException>, R> = effect.optionFromOptional
26721
27070
 
27071
+ /**
27072
+ * Converts an `Option` of an `Effect` into an `Effect` of an `Option`.
27073
+ *
27074
+ * **Details**
27075
+ *
27076
+ * This function transforms an `Option<Effect<A, E, R>>` into an
27077
+ * `Effect<Option<A>, E, R>`. If the `Option` is `None`, the resulting `Effect`
27078
+ * will immediately succeed with a `None` value. If the `Option` is `Some`, the
27079
+ * inner `Effect` will be executed, and its result wrapped in a `Some`.
27080
+ *
27081
+ * @example
27082
+ * ```ts
27083
+ * import { Effect, Option } from "effect"
27084
+ *
27085
+ * // ┌─── Option<Effect<number, never, never>>
27086
+ * // ▼
27087
+ * const maybe = Option.some(Effect.succeed(42))
27088
+ *
27089
+ * // ┌─── Effect<Option<number>, never, never>
27090
+ * // ▼
27091
+ * const result = Effect.transposeOption(maybe)
27092
+ *
27093
+ * console.log(Effect.runSync(result))
27094
+ * // Output: { _id: 'Option', _tag: 'Some', value: 42 }
27095
+ * ```
27096
+ *
27097
+ * @since 3.13.0
27098
+ * @category Optional Wrapping & Unwrapping
27099
+ */
27100
+ export const transposeOption = <A = never, E = never, R = never>(
27101
+ self: Option.Option<Effect<A, E, R>>
27102
+ ): Effect<Option.Option<A>, E, R> => {
27103
+ return option_.isNone(self) ? succeedNone : map(self.value, option_.some)
27104
+ }
27105
+
26722
27106
  /**
26723
27107
  * @since 2.0.0
26724
27108
  * @category Models
@@ -27229,7 +27613,8 @@ export namespace fn {
27229
27613
  AEff,
27230
27614
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27231
27615
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27232
- >
27616
+ >,
27617
+ ...args: Args
27233
27618
  ) => A
27234
27619
  ): (...args: Args) => A
27235
27620
  <Eff extends YieldWrap<Effect<any, any, any>>, AEff, Args extends Array<any>, A, B extends Effect<any, any, any>>(
@@ -27239,9 +27624,10 @@ export namespace fn {
27239
27624
  AEff,
27240
27625
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27241
27626
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27242
- >
27627
+ >,
27628
+ ...args: Args
27243
27629
  ) => A,
27244
- b: (_: A) => B
27630
+ b: (_: A, ...args: Args) => B
27245
27631
  ): (...args: Args) => B
27246
27632
  <
27247
27633
  Eff extends YieldWrap<Effect<any, any, any>>,
@@ -27257,10 +27643,11 @@ export namespace fn {
27257
27643
  AEff,
27258
27644
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27259
27645
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27260
- >
27646
+ >,
27647
+ ...args: Args
27261
27648
  ) => A,
27262
- b: (_: A) => B,
27263
- c: (_: B) => C
27649
+ b: (_: A, ...args: Args) => B,
27650
+ c: (_: B, ...args: Args) => C
27264
27651
  ): (...args: Args) => C
27265
27652
  <
27266
27653
  Eff extends YieldWrap<Effect<any, any, any>>,
@@ -27277,11 +27664,12 @@ export namespace fn {
27277
27664
  AEff,
27278
27665
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27279
27666
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27280
- >
27667
+ >,
27668
+ ...args: Args
27281
27669
  ) => A,
27282
- b: (_: A) => B,
27283
- c: (_: B) => C,
27284
- d: (_: C) => D
27670
+ b: (_: A, ...args: Args) => B,
27671
+ c: (_: B, ...args: Args) => C,
27672
+ d: (_: C, ...args: Args) => D
27285
27673
  ): (...args: Args) => D
27286
27674
  <
27287
27675
  Eff extends YieldWrap<Effect<any, any, any>>,
@@ -27299,12 +27687,13 @@ export namespace fn {
27299
27687
  AEff,
27300
27688
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27301
27689
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27302
- >
27690
+ >,
27691
+ ...args: Args
27303
27692
  ) => A,
27304
- b: (_: A) => B,
27305
- c: (_: B) => C,
27306
- d: (_: C) => D,
27307
- e: (_: D) => E
27693
+ b: (_: A, ...args: Args) => B,
27694
+ c: (_: B, ...args: Args) => C,
27695
+ d: (_: C, ...args: Args) => D,
27696
+ e: (_: D, ...args: Args) => E
27308
27697
  ): (...args: Args) => E
27309
27698
  <
27310
27699
  Eff extends YieldWrap<Effect<any, any, any>>,
@@ -27323,13 +27712,14 @@ export namespace fn {
27323
27712
  AEff,
27324
27713
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27325
27714
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27326
- >
27715
+ >,
27716
+ ...args: Args
27327
27717
  ) => A,
27328
- b: (_: A) => B,
27329
- c: (_: B) => C,
27330
- d: (_: C) => D,
27331
- e: (_: D) => E,
27332
- f: (_: E) => F
27718
+ b: (_: A, ...args: Args) => B,
27719
+ c: (_: B, ...args: Args) => C,
27720
+ d: (_: C, ...args: Args) => D,
27721
+ e: (_: D, ...args: Args) => E,
27722
+ f: (_: E, ...args: Args) => F
27333
27723
  ): (...args: Args) => F
27334
27724
  <
27335
27725
  Eff extends YieldWrap<Effect<any, any, any>>,
@@ -27349,14 +27739,15 @@ export namespace fn {
27349
27739
  AEff,
27350
27740
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27351
27741
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27352
- >
27742
+ >,
27743
+ ...args: Args
27353
27744
  ) => A,
27354
- b: (_: A) => B,
27355
- c: (_: B) => C,
27356
- d: (_: C) => D,
27357
- e: (_: D) => E,
27358
- f: (_: E) => F,
27359
- g: (_: F) => G
27745
+ b: (_: A, ...args: Args) => B,
27746
+ c: (_: B, ...args: Args) => C,
27747
+ d: (_: C, ...args: Args) => D,
27748
+ e: (_: D, ...args: Args) => E,
27749
+ f: (_: E, ...args: Args) => F,
27750
+ g: (_: F, ...args: Args) => G
27360
27751
  ): (...args: Args) => G
27361
27752
  <
27362
27753
  Eff extends YieldWrap<Effect<any, any, any>>,
@@ -27377,15 +27768,16 @@ export namespace fn {
27377
27768
  AEff,
27378
27769
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27379
27770
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27380
- >
27771
+ >,
27772
+ ...args: Args
27381
27773
  ) => A,
27382
- b: (_: A) => B,
27383
- c: (_: B) => C,
27384
- d: (_: C) => D,
27385
- e: (_: D) => E,
27386
- f: (_: E) => F,
27387
- g: (_: F) => G,
27388
- h: (_: G) => H
27774
+ b: (_: A, ...args: Args) => B,
27775
+ c: (_: B, ...args: Args) => C,
27776
+ d: (_: C, ...args: Args) => D,
27777
+ e: (_: D, ...args: Args) => E,
27778
+ f: (_: E, ...args: Args) => F,
27779
+ g: (_: F, ...args: Args) => G,
27780
+ h: (_: G, ...args: Args) => H
27389
27781
  ): (...args: Args) => H
27390
27782
  <
27391
27783
  Eff extends YieldWrap<Effect<any, any, any>>,
@@ -27407,16 +27799,17 @@ export namespace fn {
27407
27799
  AEff,
27408
27800
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27409
27801
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27410
- >
27802
+ >,
27803
+ ...args: Args
27411
27804
  ) => A,
27412
- b: (_: A) => B,
27413
- c: (_: B) => C,
27414
- d: (_: C) => D,
27415
- e: (_: D) => E,
27416
- f: (_: E) => F,
27417
- g: (_: F) => G,
27418
- h: (_: G) => H,
27419
- i: (_: H) => I
27805
+ b: (_: A, ...args: Args) => B,
27806
+ c: (_: B, ...args: Args) => C,
27807
+ d: (_: C, ...args: Args) => D,
27808
+ e: (_: D, ...args: Args) => E,
27809
+ f: (_: E, ...args: Args) => F,
27810
+ g: (_: F, ...args: Args) => G,
27811
+ h: (_: G, ...args: Args) => H,
27812
+ i: (_: H, ...args: Args) => I
27420
27813
  ): (...args: Args) => I
27421
27814
  }
27422
27815
 
@@ -27430,75 +27823,75 @@ export namespace fn {
27430
27823
  ): (...args: Args) => Eff
27431
27824
  <Eff extends Effect<any, any, any>, A, Args extends Array<any>>(
27432
27825
  body: (...args: Args) => A,
27433
- a: (_: A) => Eff
27826
+ a: (_: A, ...args: Args) => Eff
27434
27827
  ): (...args: Args) => Eff
27435
27828
  <Eff extends Effect<any, any, any>, A, B, Args extends Array<any>>(
27436
27829
  body: (...args: Args) => A,
27437
- a: (_: A) => B,
27438
- b: (_: B) => Eff
27830
+ a: (_: A, ...args: Args) => B,
27831
+ b: (_: B, ...args: Args) => Eff
27439
27832
  ): (...args: Args) => Eff
27440
27833
  <Eff extends Effect<any, any, any>, A, B, C, Args extends Array<any>>(
27441
27834
  body: (...args: Args) => A,
27442
- a: (_: A) => B,
27443
- b: (_: B) => C,
27444
- c: (_: C) => Eff
27835
+ a: (_: A, ...args: Args) => B,
27836
+ b: (_: B, ...args: Args) => C,
27837
+ c: (_: C, ...args: Args) => Eff
27445
27838
  ): (...args: Args) => Eff
27446
27839
  <Eff extends Effect<any, any, any>, A, B, C, D, Args extends Array<any>>(
27447
27840
  body: (...args: Args) => A,
27448
- a: (_: A) => B,
27449
- b: (_: B) => C,
27450
- c: (_: C) => D,
27451
- d: (_: D) => Eff
27841
+ a: (_: A, ...args: Args) => B,
27842
+ b: (_: B, ...args: Args) => C,
27843
+ c: (_: C, ...args: Args) => D,
27844
+ d: (_: D, ...args: Args) => Eff
27452
27845
  ): (...args: Args) => Eff
27453
27846
  <Eff extends Effect<any, any, any>, A, B, C, D, E, Args extends Array<any>>(
27454
27847
  body: (...args: Args) => A,
27455
- a: (_: A) => B,
27456
- b: (_: B) => C,
27457
- c: (_: C) => D,
27458
- d: (_: D) => E,
27459
- e: (_: E) => Eff
27848
+ a: (_: A, ...args: Args) => B,
27849
+ b: (_: B, ...args: Args) => C,
27850
+ c: (_: C, ...args: Args) => D,
27851
+ d: (_: D, ...args: Args) => E,
27852
+ e: (_: E, ...args: Args) => Eff
27460
27853
  ): (...args: Args) => Eff
27461
27854
  <Eff extends Effect<any, any, any>, A, B, C, D, E, F, Args extends Array<any>>(
27462
27855
  body: (...args: Args) => A,
27463
- a: (_: A) => B,
27464
- b: (_: B) => C,
27465
- c: (_: C) => D,
27466
- d: (_: D) => E,
27467
- e: (_: E) => F,
27468
- f: (_: E) => Eff
27856
+ a: (_: A, ...args: Args) => B,
27857
+ b: (_: B, ...args: Args) => C,
27858
+ c: (_: C, ...args: Args) => D,
27859
+ d: (_: D, ...args: Args) => E,
27860
+ e: (_: E, ...args: Args) => F,
27861
+ f: (_: F, ...args: Args) => Eff
27469
27862
  ): (...args: Args) => Eff
27470
27863
  <Eff extends Effect<any, any, any>, A, B, C, D, E, F, G, Args extends Array<any>>(
27471
27864
  body: (...args: Args) => A,
27472
- a: (_: A) => B,
27473
- b: (_: B) => C,
27474
- c: (_: C) => D,
27475
- d: (_: D) => E,
27476
- e: (_: E) => F,
27477
- f: (_: E) => G,
27478
- g: (_: G) => Eff
27865
+ a: (_: A, ...args: Args) => B,
27866
+ b: (_: B, ...args: Args) => C,
27867
+ c: (_: C, ...args: Args) => D,
27868
+ d: (_: D, ...args: Args) => E,
27869
+ e: (_: E, ...args: Args) => F,
27870
+ f: (_: F, ...args: Args) => G,
27871
+ g: (_: G, ...args: Args) => Eff
27479
27872
  ): (...args: Args) => Eff
27480
27873
  <Eff extends Effect<any, any, any>, A, B, C, D, E, F, G, H, Args extends Array<any>>(
27481
27874
  body: (...args: Args) => A,
27482
- a: (_: A) => B,
27483
- b: (_: B) => C,
27484
- c: (_: C) => D,
27485
- d: (_: D) => E,
27486
- e: (_: E) => F,
27487
- f: (_: E) => G,
27488
- g: (_: G) => H,
27489
- h: (_: H) => Eff
27875
+ a: (_: A, ...args: Args) => B,
27876
+ b: (_: B, ...args: Args) => C,
27877
+ c: (_: C, ...args: Args) => D,
27878
+ d: (_: D, ...args: Args) => E,
27879
+ e: (_: E, ...args: Args) => F,
27880
+ f: (_: F, ...args: Args) => G,
27881
+ g: (_: G, ...args: Args) => H,
27882
+ h: (_: H, ...args: Args) => Eff
27490
27883
  ): (...args: Args) => Eff
27491
27884
  <Eff extends Effect<any, any, any>, A, B, C, D, E, F, G, H, I, Args extends Array<any>>(
27492
27885
  body: (...args: Args) => A,
27493
- a: (_: A) => B,
27494
- b: (_: B) => C,
27495
- c: (_: C) => D,
27496
- d: (_: D) => E,
27497
- e: (_: E) => F,
27498
- f: (_: E) => G,
27499
- g: (_: G) => H,
27500
- h: (_: H) => I,
27501
- i: (_: H) => Eff
27886
+ a: (_: A, ...args: Args) => B,
27887
+ b: (_: B, ...args: Args) => C,
27888
+ c: (_: C, ...args: Args) => D,
27889
+ d: (_: D, ...args: Args) => E,
27890
+ e: (_: E, ...args: Args) => F,
27891
+ f: (_: F, ...args: Args) => G,
27892
+ g: (_: G, ...args: Args) => H,
27893
+ h: (_: H, ...args: Args) => I,
27894
+ i: (_: H, ...args: Args) => Eff
27502
27895
  ): (...args: Args) => Eff
27503
27896
  }
27504
27897
  }
@@ -27590,7 +27983,7 @@ export const fn:
27590
27983
  const errorDef = new Error()
27591
27984
  Error.stackTraceLimit = limit
27592
27985
  if (typeof nameOrBody !== "string") {
27593
- return function(this: any, ...args: Array<any>) {
27986
+ return defineLength(nameOrBody.length, function(this: any, ...args: Array<any>) {
27594
27987
  const limit = Error.stackTraceLimit
27595
27988
  Error.stackTraceLimit = 2
27596
27989
  const errorCall = new Error()
@@ -27607,12 +28000,12 @@ export const fn:
27607
28000
  errorDef,
27608
28001
  errorCall
27609
28002
  })
27610
- } as any
28003
+ }) as any
27611
28004
  }
27612
28005
  const name = nameOrBody
27613
28006
  const options = pipeables[0]
27614
- return (body: Function, ...pipeables: Array<any>) => {
27615
- return function(this: any, ...args: Array<any>) {
28007
+ return (body: Function, ...pipeables: Array<any>) =>
28008
+ defineLength(body.length, function(this: any, ...args: Array<any>) {
27616
28009
  const limit = Error.stackTraceLimit
27617
28010
  Error.stackTraceLimit = 2
27618
28011
  const errorCall = new Error()
@@ -27627,10 +28020,16 @@ export const fn:
27627
28020
  errorDef,
27628
28021
  errorCall
27629
28022
  })
27630
- }
27631
- }
28023
+ })
27632
28024
  }
27633
28025
 
28026
+ function defineLength<F extends Function>(length: number, fn: F) {
28027
+ return Object.defineProperty(fn, "length", {
28028
+ value: length,
28029
+ configurable: true
28030
+ })
28031
+ }
28032
+
27634
28033
  function fnApply(options: {
27635
28034
  readonly self: any
27636
28035
  readonly body: Function
@@ -27656,7 +28055,7 @@ function fnApply(options: {
27656
28055
  if (options.pipeables.length > 0) {
27657
28056
  try {
27658
28057
  for (const x of options.pipeables) {
27659
- effect = x(effect)
28058
+ effect = x(effect, ...options.args)
27660
28059
  }
27661
28060
  } catch (error) {
27662
28061
  effect = fnError
@@ -27694,15 +28093,4 @@ function fnApply(options: {
27694
28093
  * @since 3.12.0
27695
28094
  * @category Tracing
27696
28095
  */
27697
- export const fnUntraced: fn.Gen = (body: Function, ...pipeables: Array<any>) =>
27698
- pipeables.length === 0
27699
- ? function(this: any, ...args: Array<any>) {
27700
- return core.fromIterator(() => body.apply(this, args))
27701
- }
27702
- : function(this: any, ...args: Array<any>) {
27703
- let effect = core.fromIterator(() => body.apply(this, args))
27704
- for (const x of pipeables) {
27705
- effect = x(effect)
27706
- }
27707
- return effect
27708
- }
28096
+ export const fnUntraced: fn.Gen = core.fnUntraced