effect 3.12.12 → 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 (133) hide show
  1. package/dist/cjs/DateTime.js +17 -1
  2. package/dist/cjs/DateTime.js.map +1 -1
  3. package/dist/cjs/Differ.js.map +1 -1
  4. package/dist/cjs/Duration.js +128 -1
  5. package/dist/cjs/Duration.js.map +1 -1
  6. package/dist/cjs/Effect.js +151 -17
  7. package/dist/cjs/Effect.js.map +1 -1
  8. package/dist/cjs/Either.js +2 -1
  9. package/dist/cjs/Either.js.map +1 -1
  10. package/dist/cjs/FiberHandle.js +54 -21
  11. package/dist/cjs/FiberHandle.js.map +1 -1
  12. package/dist/cjs/FiberMap.js +51 -24
  13. package/dist/cjs/FiberMap.js.map +1 -1
  14. package/dist/cjs/FiberSet.js +50 -17
  15. package/dist/cjs/FiberSet.js.map +1 -1
  16. package/dist/cjs/HashMap.js +19 -1
  17. package/dist/cjs/HashMap.js.map +1 -1
  18. package/dist/cjs/HashSet.js +9 -1
  19. package/dist/cjs/HashSet.js.map +1 -1
  20. package/dist/cjs/Layer.js +21 -1
  21. package/dist/cjs/Layer.js.map +1 -1
  22. package/dist/cjs/RcMap.js +11 -1
  23. package/dist/cjs/RcMap.js.map +1 -1
  24. package/dist/cjs/Schema.js +73 -1
  25. package/dist/cjs/Schema.js.map +1 -1
  26. package/dist/cjs/internal/core.js +27 -3
  27. package/dist/cjs/internal/core.js.map +1 -1
  28. package/dist/cjs/internal/dateTime.js +4 -1
  29. package/dist/cjs/internal/dateTime.js.map +1 -1
  30. package/dist/cjs/internal/differ.js +4 -0
  31. package/dist/cjs/internal/differ.js.map +1 -1
  32. package/dist/cjs/internal/fiberRuntime.js +15 -2
  33. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  34. package/dist/cjs/internal/hashMap.js +10 -1
  35. package/dist/cjs/internal/hashMap.js.map +1 -1
  36. package/dist/cjs/internal/keyedPool.js +1 -1
  37. package/dist/cjs/internal/keyedPool.js.map +1 -1
  38. package/dist/cjs/internal/rcMap.js +86 -56
  39. package/dist/cjs/internal/rcMap.js.map +1 -1
  40. package/dist/cjs/internal/version.js +1 -1
  41. package/dist/cjs/internal/version.js.map +1 -1
  42. package/dist/dts/DateTime.d.ts +16 -0
  43. package/dist/dts/DateTime.d.ts.map +1 -1
  44. package/dist/dts/Differ.d.ts +2 -1
  45. package/dist/dts/Differ.d.ts.map +1 -1
  46. package/dist/dts/Duration.d.ts +64 -0
  47. package/dist/dts/Duration.d.ts.map +1 -1
  48. package/dist/dts/Effect.d.ts +396 -24
  49. package/dist/dts/Effect.d.ts.map +1 -1
  50. package/dist/dts/Either.d.ts +7 -0
  51. package/dist/dts/Either.d.ts.map +1 -1
  52. package/dist/dts/FiberHandle.d.ts +26 -0
  53. package/dist/dts/FiberHandle.d.ts.map +1 -1
  54. package/dist/dts/FiberMap.d.ts +26 -0
  55. package/dist/dts/FiberMap.d.ts.map +1 -1
  56. package/dist/dts/FiberSet.d.ts +25 -0
  57. package/dist/dts/FiberSet.d.ts.map +1 -1
  58. package/dist/dts/HashMap.d.ts +38 -0
  59. package/dist/dts/HashMap.d.ts.map +1 -1
  60. package/dist/dts/HashSet.d.ts +7 -0
  61. package/dist/dts/HashSet.d.ts.map +1 -1
  62. package/dist/dts/Layer.d.ts +20 -1
  63. package/dist/dts/Layer.d.ts.map +1 -1
  64. package/dist/dts/RcMap.d.ts +32 -0
  65. package/dist/dts/RcMap.d.ts.map +1 -1
  66. package/dist/dts/Schema.d.ts +30 -0
  67. package/dist/dts/Schema.d.ts.map +1 -1
  68. package/dist/dts/Trie.d.ts +7 -7
  69. package/dist/dts/Trie.d.ts.map +1 -1
  70. package/dist/esm/DateTime.js +16 -0
  71. package/dist/esm/DateTime.js.map +1 -1
  72. package/dist/esm/Differ.js.map +1 -1
  73. package/dist/esm/Duration.js +124 -0
  74. package/dist/esm/Duration.js.map +1 -1
  75. package/dist/esm/Effect.js +146 -12
  76. package/dist/esm/Effect.js.map +1 -1
  77. package/dist/esm/Either.js +7 -0
  78. package/dist/esm/Either.js.map +1 -1
  79. package/dist/esm/FiberHandle.js +48 -18
  80. package/dist/esm/FiberHandle.js.map +1 -1
  81. package/dist/esm/FiberMap.js +46 -22
  82. package/dist/esm/FiberMap.js.map +1 -1
  83. package/dist/esm/FiberSet.js +45 -15
  84. package/dist/esm/FiberSet.js.map +1 -1
  85. package/dist/esm/HashMap.js +17 -0
  86. package/dist/esm/HashMap.js.map +1 -1
  87. package/dist/esm/HashSet.js +7 -0
  88. package/dist/esm/HashSet.js.map +1 -1
  89. package/dist/esm/Layer.js +20 -0
  90. package/dist/esm/Layer.js.map +1 -1
  91. package/dist/esm/RcMap.js +10 -0
  92. package/dist/esm/RcMap.js.map +1 -1
  93. package/dist/esm/Schema.js +71 -0
  94. package/dist/esm/Schema.js.map +1 -1
  95. package/dist/esm/internal/core.js +23 -0
  96. package/dist/esm/internal/core.js.map +1 -1
  97. package/dist/esm/internal/dateTime.js +2 -0
  98. package/dist/esm/internal/dateTime.js.map +1 -1
  99. package/dist/esm/internal/differ.js +4 -0
  100. package/dist/esm/internal/differ.js.map +1 -1
  101. package/dist/esm/internal/fiberRuntime.js +12 -0
  102. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  103. package/dist/esm/internal/hashMap.js +9 -0
  104. package/dist/esm/internal/hashMap.js.map +1 -1
  105. package/dist/esm/internal/keyedPool.js +1 -1
  106. package/dist/esm/internal/keyedPool.js.map +1 -1
  107. package/dist/esm/internal/rcMap.js +85 -55
  108. package/dist/esm/internal/rcMap.js.map +1 -1
  109. package/dist/esm/internal/version.js +1 -1
  110. package/dist/esm/internal/version.js.map +1 -1
  111. package/package.json +2 -1
  112. package/src/DateTime.ts +17 -8
  113. package/src/Differ.ts +2 -1
  114. package/src/Duration.ts +147 -0
  115. package/src/Effect.ts +498 -112
  116. package/src/Either.ts +9 -0
  117. package/src/FiberHandle.ts +95 -35
  118. package/src/FiberMap.ts +104 -39
  119. package/src/FiberSet.ts +93 -24
  120. package/src/HashMap.ts +40 -0
  121. package/src/HashSet.ts +8 -0
  122. package/src/Layer.ts +64 -1
  123. package/src/RcMap.ts +34 -0
  124. package/src/Schema.ts +77 -0
  125. package/src/Trie.ts +7 -7
  126. package/src/internal/core.ts +80 -0
  127. package/src/internal/dateTime.ts +3 -0
  128. package/src/internal/differ.ts +4 -0
  129. package/src/internal/fiberRuntime.ts +24 -0
  130. package/src/internal/hashMap.ts +16 -0
  131. package/src/internal/keyedPool.ts +1 -1
  132. package/src/internal/rcMap.ts +131 -89
  133. 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"
@@ -16778,6 +16779,263 @@ export const filterOrFail: {
16778
16779
  <A, E, R>(self: Effect<A, E, R>, predicate: Predicate<A>): Effect<A, E | Cause.NoSuchElementException, R>
16779
16780
  } = effect.filterOrFail
16780
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
+
16781
17039
  /**
16782
17040
  * Executes an effect only if the condition is `false`.
16783
17041
  *
@@ -22755,7 +23013,7 @@ export const log: (...message: ReadonlyArray<any>) => Effect<void, never, never>
22755
23013
  * @category Logging
22756
23014
  */
22757
23015
  export const logWithLevel = (
22758
- level: LogLevel,
23016
+ level: LogLevel.LogLevel,
22759
23017
  ...message: ReadonlyArray<any>
22760
23018
  ): Effect<void> => effect.logWithLevel(level)(...message)
22761
23019
 
@@ -23371,7 +23629,7 @@ export const withUnhandledErrorLogLevel: {
23371
23629
  * @since 2.0.0
23372
23630
  * @category Logging
23373
23631
  */
23374
- (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>
23375
23633
  /**
23376
23634
  * Configures whether child fibers will log unhandled errors and at what log
23377
23635
  * level.
@@ -23406,9 +23664,107 @@ export const withUnhandledErrorLogLevel: {
23406
23664
  * @since 2.0.0
23407
23665
  * @category Logging
23408
23666
  */
23409
- <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>
23410
23668
  } = core.withUnhandledErrorLogLevel
23411
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
+
23412
23768
  /**
23413
23769
  * Converts an effect's failure into a fiber termination, removing the error
23414
23770
  * from the effect's type.
@@ -26651,7 +27007,7 @@ export const withParentSpan: {
26651
27007
  * ```
26652
27008
  *
26653
27009
  * @since 2.0.0
26654
- * @category Optional Wrapping
27010
+ * @category Optional Wrapping & Unwrapping
26655
27011
  */
26656
27012
  export const fromNullable: <A>(value: A) => Effect<NonNullable<A>, Cause.NoSuchElementException> = effect.fromNullable
26657
27013
 
@@ -26706,12 +27062,47 @@ export const fromNullable: <A>(value: A) => Effect<NonNullable<A>, Cause.NoSuchE
26706
27062
  * ```
26707
27063
  *
26708
27064
  * @since 2.0.0
26709
- * @category Optional Wrapping
27065
+ * @category Optional Wrapping & Unwrapping
26710
27066
  */
26711
27067
  export const optionFromOptional: <A, E, R>(
26712
27068
  self: Effect<A, E, R>
26713
27069
  ) => Effect<Option.Option<A>, Exclude<E, Cause.NoSuchElementException>, R> = effect.optionFromOptional
26714
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
+
26715
27106
  /**
26716
27107
  * @since 2.0.0
26717
27108
  * @category Models
@@ -27222,7 +27613,8 @@ export namespace fn {
27222
27613
  AEff,
27223
27614
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27224
27615
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27225
- >
27616
+ >,
27617
+ ...args: Args
27226
27618
  ) => A
27227
27619
  ): (...args: Args) => A
27228
27620
  <Eff extends YieldWrap<Effect<any, any, any>>, AEff, Args extends Array<any>, A, B extends Effect<any, any, any>>(
@@ -27232,9 +27624,10 @@ export namespace fn {
27232
27624
  AEff,
27233
27625
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27234
27626
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27235
- >
27627
+ >,
27628
+ ...args: Args
27236
27629
  ) => A,
27237
- b: (_: A) => B
27630
+ b: (_: A, ...args: Args) => B
27238
27631
  ): (...args: Args) => B
27239
27632
  <
27240
27633
  Eff extends YieldWrap<Effect<any, any, any>>,
@@ -27250,10 +27643,11 @@ export namespace fn {
27250
27643
  AEff,
27251
27644
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27252
27645
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27253
- >
27646
+ >,
27647
+ ...args: Args
27254
27648
  ) => A,
27255
- b: (_: A) => B,
27256
- c: (_: B) => C
27649
+ b: (_: A, ...args: Args) => B,
27650
+ c: (_: B, ...args: Args) => C
27257
27651
  ): (...args: Args) => C
27258
27652
  <
27259
27653
  Eff extends YieldWrap<Effect<any, any, any>>,
@@ -27270,11 +27664,12 @@ export namespace fn {
27270
27664
  AEff,
27271
27665
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27272
27666
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27273
- >
27667
+ >,
27668
+ ...args: Args
27274
27669
  ) => A,
27275
- b: (_: A) => B,
27276
- c: (_: B) => C,
27277
- d: (_: C) => D
27670
+ b: (_: A, ...args: Args) => B,
27671
+ c: (_: B, ...args: Args) => C,
27672
+ d: (_: C, ...args: Args) => D
27278
27673
  ): (...args: Args) => D
27279
27674
  <
27280
27675
  Eff extends YieldWrap<Effect<any, any, any>>,
@@ -27292,12 +27687,13 @@ export namespace fn {
27292
27687
  AEff,
27293
27688
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27294
27689
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27295
- >
27690
+ >,
27691
+ ...args: Args
27296
27692
  ) => A,
27297
- b: (_: A) => B,
27298
- c: (_: B) => C,
27299
- d: (_: C) => D,
27300
- 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
27301
27697
  ): (...args: Args) => E
27302
27698
  <
27303
27699
  Eff extends YieldWrap<Effect<any, any, any>>,
@@ -27316,13 +27712,14 @@ export namespace fn {
27316
27712
  AEff,
27317
27713
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27318
27714
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27319
- >
27715
+ >,
27716
+ ...args: Args
27320
27717
  ) => A,
27321
- b: (_: A) => B,
27322
- c: (_: B) => C,
27323
- d: (_: C) => D,
27324
- e: (_: D) => E,
27325
- 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
27326
27723
  ): (...args: Args) => F
27327
27724
  <
27328
27725
  Eff extends YieldWrap<Effect<any, any, any>>,
@@ -27342,14 +27739,15 @@ export namespace fn {
27342
27739
  AEff,
27343
27740
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27344
27741
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27345
- >
27742
+ >,
27743
+ ...args: Args
27346
27744
  ) => A,
27347
- b: (_: A) => B,
27348
- c: (_: B) => C,
27349
- d: (_: C) => D,
27350
- e: (_: D) => E,
27351
- f: (_: E) => F,
27352
- 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
27353
27751
  ): (...args: Args) => G
27354
27752
  <
27355
27753
  Eff extends YieldWrap<Effect<any, any, any>>,
@@ -27370,15 +27768,16 @@ export namespace fn {
27370
27768
  AEff,
27371
27769
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27372
27770
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27373
- >
27771
+ >,
27772
+ ...args: Args
27374
27773
  ) => A,
27375
- b: (_: A) => B,
27376
- c: (_: B) => C,
27377
- d: (_: C) => D,
27378
- e: (_: D) => E,
27379
- f: (_: E) => F,
27380
- g: (_: F) => G,
27381
- 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
27382
27781
  ): (...args: Args) => H
27383
27782
  <
27384
27783
  Eff extends YieldWrap<Effect<any, any, any>>,
@@ -27400,16 +27799,17 @@ export namespace fn {
27400
27799
  AEff,
27401
27800
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? E : never,
27402
27801
  [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never
27403
- >
27802
+ >,
27803
+ ...args: Args
27404
27804
  ) => A,
27405
- b: (_: A) => B,
27406
- c: (_: B) => C,
27407
- d: (_: C) => D,
27408
- e: (_: D) => E,
27409
- f: (_: E) => F,
27410
- g: (_: F) => G,
27411
- h: (_: G) => H,
27412
- 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
27413
27813
  ): (...args: Args) => I
27414
27814
  }
27415
27815
 
@@ -27423,75 +27823,75 @@ export namespace fn {
27423
27823
  ): (...args: Args) => Eff
27424
27824
  <Eff extends Effect<any, any, any>, A, Args extends Array<any>>(
27425
27825
  body: (...args: Args) => A,
27426
- a: (_: A) => Eff
27826
+ a: (_: A, ...args: Args) => Eff
27427
27827
  ): (...args: Args) => Eff
27428
27828
  <Eff extends Effect<any, any, any>, A, B, Args extends Array<any>>(
27429
27829
  body: (...args: Args) => A,
27430
- a: (_: A) => B,
27431
- b: (_: B) => Eff
27830
+ a: (_: A, ...args: Args) => B,
27831
+ b: (_: B, ...args: Args) => Eff
27432
27832
  ): (...args: Args) => Eff
27433
27833
  <Eff extends Effect<any, any, any>, A, B, C, Args extends Array<any>>(
27434
27834
  body: (...args: Args) => A,
27435
- a: (_: A) => B,
27436
- b: (_: B) => C,
27437
- c: (_: C) => Eff
27835
+ a: (_: A, ...args: Args) => B,
27836
+ b: (_: B, ...args: Args) => C,
27837
+ c: (_: C, ...args: Args) => Eff
27438
27838
  ): (...args: Args) => Eff
27439
27839
  <Eff extends Effect<any, any, any>, A, B, C, D, Args extends Array<any>>(
27440
27840
  body: (...args: Args) => A,
27441
- a: (_: A) => B,
27442
- b: (_: B) => C,
27443
- c: (_: C) => D,
27444
- 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
27445
27845
  ): (...args: Args) => Eff
27446
27846
  <Eff extends Effect<any, any, any>, A, B, C, D, E, Args extends Array<any>>(
27447
27847
  body: (...args: Args) => A,
27448
- a: (_: A) => B,
27449
- b: (_: B) => C,
27450
- c: (_: C) => D,
27451
- d: (_: D) => E,
27452
- 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
27453
27853
  ): (...args: Args) => Eff
27454
27854
  <Eff extends Effect<any, any, any>, A, B, C, D, E, F, Args extends Array<any>>(
27455
27855
  body: (...args: Args) => A,
27456
- a: (_: A) => B,
27457
- b: (_: B) => C,
27458
- c: (_: C) => D,
27459
- d: (_: D) => E,
27460
- e: (_: E) => F,
27461
- 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
27462
27862
  ): (...args: Args) => Eff
27463
27863
  <Eff extends Effect<any, any, any>, A, B, C, D, E, F, G, Args extends Array<any>>(
27464
27864
  body: (...args: Args) => A,
27465
- a: (_: A) => B,
27466
- b: (_: B) => C,
27467
- c: (_: C) => D,
27468
- d: (_: D) => E,
27469
- e: (_: E) => F,
27470
- f: (_: E) => G,
27471
- 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
27472
27872
  ): (...args: Args) => Eff
27473
27873
  <Eff extends Effect<any, any, any>, A, B, C, D, E, F, G, H, Args extends Array<any>>(
27474
27874
  body: (...args: Args) => A,
27475
- a: (_: A) => B,
27476
- b: (_: B) => C,
27477
- c: (_: C) => D,
27478
- d: (_: D) => E,
27479
- e: (_: E) => F,
27480
- f: (_: E) => G,
27481
- g: (_: G) => H,
27482
- 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
27483
27883
  ): (...args: Args) => Eff
27484
27884
  <Eff extends Effect<any, any, any>, A, B, C, D, E, F, G, H, I, Args extends Array<any>>(
27485
27885
  body: (...args: Args) => A,
27486
- a: (_: A) => B,
27487
- b: (_: B) => C,
27488
- c: (_: C) => D,
27489
- d: (_: D) => E,
27490
- e: (_: E) => F,
27491
- f: (_: E) => G,
27492
- g: (_: G) => H,
27493
- h: (_: H) => I,
27494
- 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
27495
27895
  ): (...args: Args) => Eff
27496
27896
  }
27497
27897
  }
@@ -27655,7 +28055,7 @@ function fnApply(options: {
27655
28055
  if (options.pipeables.length > 0) {
27656
28056
  try {
27657
28057
  for (const x of options.pipeables) {
27658
- effect = x(effect)
28058
+ effect = x(effect, ...options.args)
27659
28059
  }
27660
28060
  } catch (error) {
27661
28061
  effect = fnError
@@ -27693,18 +28093,4 @@ function fnApply(options: {
27693
28093
  * @since 3.12.0
27694
28094
  * @category Tracing
27695
28095
  */
27696
- export const fnUntraced: fn.Gen = (body: Function, ...pipeables: Array<any>) =>
27697
- defineLength(
27698
- body.length,
27699
- pipeables.length === 0
27700
- ? function(this: any, ...args: Array<any>) {
27701
- return core.fromIterator(() => body.apply(this, args))
27702
- }
27703
- : function(this: any, ...args: Array<any>) {
27704
- let effect = core.fromIterator(() => body.apply(this, args))
27705
- for (const x of pipeables) {
27706
- effect = x(effect)
27707
- }
27708
- return effect
27709
- }
27710
- )
28096
+ export const fnUntraced: fn.Gen = core.fnUntraced