effect 2.4.16 → 2.4.18

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 (76) hide show
  1. package/Iterable/package.json +6 -0
  2. package/dist/cjs/Effect.js +11 -4
  3. package/dist/cjs/Effect.js.map +1 -1
  4. package/dist/cjs/Inspectable.js +23 -1
  5. package/dist/cjs/Inspectable.js.map +1 -1
  6. package/dist/cjs/Iterable.js +938 -0
  7. package/dist/cjs/Iterable.js.map +1 -0
  8. package/dist/cjs/Logger.js +11 -1
  9. package/dist/cjs/Logger.js.map +1 -1
  10. package/dist/cjs/ReadonlyArray.js +2 -17
  11. package/dist/cjs/ReadonlyArray.js.map +1 -1
  12. package/dist/cjs/index.js +4 -2
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/cjs/internal/core-effect.js.map +1 -1
  15. package/dist/cjs/internal/effect/circular.js.map +1 -1
  16. package/dist/cjs/internal/fiberRuntime.js +19 -25
  17. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  18. package/dist/cjs/internal/logger.js +8 -22
  19. package/dist/cjs/internal/logger.js.map +1 -1
  20. package/dist/cjs/internal/runtime.js +42 -50
  21. package/dist/cjs/internal/runtime.js.map +1 -1
  22. package/dist/cjs/internal/schedule.js.map +1 -1
  23. package/dist/cjs/internal/version.js +1 -1
  24. package/dist/dts/Config.d.ts +2 -2
  25. package/dist/dts/Config.d.ts.map +1 -1
  26. package/dist/dts/Effect.d.ts +30 -20
  27. package/dist/dts/Effect.d.ts.map +1 -1
  28. package/dist/dts/Inspectable.d.ts +8 -0
  29. package/dist/dts/Inspectable.d.ts.map +1 -1
  30. package/dist/dts/Iterable.d.ts +495 -0
  31. package/dist/dts/Iterable.d.ts.map +1 -0
  32. package/dist/dts/Logger.d.ts +10 -0
  33. package/dist/dts/Logger.d.ts.map +1 -1
  34. package/dist/dts/ReadonlyArray.d.ts.map +1 -1
  35. package/dist/dts/index.d.ts +6 -0
  36. package/dist/dts/index.d.ts.map +1 -1
  37. package/dist/dts/internal/logger.d.ts +0 -1
  38. package/dist/dts/internal/logger.d.ts.map +1 -1
  39. package/dist/esm/Effect.js +7 -0
  40. package/dist/esm/Effect.js.map +1 -1
  41. package/dist/esm/Inspectable.js +20 -0
  42. package/dist/esm/Inspectable.js.map +1 -1
  43. package/dist/esm/Iterable.js +893 -0
  44. package/dist/esm/Iterable.js.map +1 -0
  45. package/dist/esm/Logger.js +10 -0
  46. package/dist/esm/Logger.js.map +1 -1
  47. package/dist/esm/ReadonlyArray.js +2 -17
  48. package/dist/esm/ReadonlyArray.js.map +1 -1
  49. package/dist/esm/index.js +6 -0
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/internal/core-effect.js.map +1 -1
  52. package/dist/esm/internal/effect/circular.js.map +1 -1
  53. package/dist/esm/internal/fiberRuntime.js +16 -23
  54. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  55. package/dist/esm/internal/logger.js +6 -19
  56. package/dist/esm/internal/logger.js.map +1 -1
  57. package/dist/esm/internal/runtime.js +42 -50
  58. package/dist/esm/internal/runtime.js.map +1 -1
  59. package/dist/esm/internal/schedule.js.map +1 -1
  60. package/dist/esm/internal/version.js +1 -1
  61. package/package.json +9 -1
  62. package/src/Config.ts +2 -2
  63. package/src/Effect.ts +64 -47
  64. package/src/Inspectable.ts +30 -0
  65. package/src/Iterable.ts +1009 -0
  66. package/src/Logger.ts +12 -0
  67. package/src/ReadonlyArray.ts +2 -20
  68. package/src/index.ts +7 -0
  69. package/src/internal/config.ts +2 -2
  70. package/src/internal/core-effect.ts +11 -9
  71. package/src/internal/effect/circular.ts +19 -7
  72. package/src/internal/fiberRuntime.ts +63 -54
  73. package/src/internal/logger.ts +6 -28
  74. package/src/internal/runtime.ts +45 -52
  75. package/src/internal/schedule.ts +3 -3
  76. package/src/internal/version.ts +1 -1
package/src/Effect.ts CHANGED
@@ -476,15 +476,15 @@ export declare namespace All {
476
476
  * @since 2.0.0
477
477
  * @category collecting & elements
478
478
  */
479
- export const allSuccesses: <A, E, R>(
480
- elements: Iterable<Effect<A, E, R>>,
479
+ export const allSuccesses: <X extends Effect<any, any, any>>(
480
+ elements: Iterable<X>,
481
481
  options?:
482
482
  | {
483
483
  readonly concurrency?: Concurrency | undefined
484
484
  readonly batching?: boolean | "inherit" | undefined
485
485
  }
486
486
  | undefined
487
- ) => Effect<Array<A>, never, R> = fiberRuntime.allSuccesses
487
+ ) => Effect<Array<Effect.Success<X>>, never, Effect.Context<X>> = fiberRuntime.allSuccesses
488
488
 
489
489
  /**
490
490
  * Drops all elements until the effectful predicate returns true.
@@ -579,6 +579,22 @@ export const filter: {
579
579
  ): Effect<Array<A>, E, R>
580
580
  } = fiberRuntime.filter
581
581
 
582
+ /**
583
+ * Performs a filter and map in a single step.
584
+ *
585
+ * @since 2.0.0
586
+ * @category collecting & elements
587
+ */
588
+ export const filterMap: {
589
+ <Eff extends Effect<any, any, any>, B>(
590
+ pf: (a: Effect.Success<Eff>) => Option.Option<B>
591
+ ): (elements: Iterable<Eff>) => Effect<Array<B>, Effect.Error<Eff>, Effect.Context<Eff>>
592
+ <Eff extends Effect<any, any, any>, B>(
593
+ elements: Iterable<Eff>,
594
+ pf: (a: Effect.Success<Eff>) => Option.Option<B>
595
+ ): Effect<Array<B>, Effect.Error<Eff>, Effect.Context<Eff>>
596
+ } = effect.filterMap
597
+
582
598
  /**
583
599
  * Returns the first element that satisfies the effectful predicate.
584
600
  *
@@ -614,7 +630,9 @@ export const findFirst: {
614
630
  * @since 2.0.0
615
631
  * @category collecting & elements
616
632
  */
617
- export const firstSuccessOf: <A, E, R>(effects: Iterable<Effect<A, E, R>>) => Effect<A, E, R> = effect.firstSuccessOf
633
+ export const firstSuccessOf: <Eff extends Effect<any, any, any>>(
634
+ effects: Iterable<Eff>
635
+ ) => Effect<Effect.Success<Eff>, Effect.Error<Eff>, Effect.Context<Eff>> = effect.firstSuccessOf
618
636
 
619
637
  /**
620
638
  * @since 2.0.0
@@ -675,21 +693,21 @@ export const head: <A, E, R>(self: Effect<Iterable<A>, E, R>) => Effect<A, Cause
675
693
  * @category collecting & elements
676
694
  */
677
695
  export const mergeAll: {
678
- <Z, A>(
696
+ <Z, Eff extends Effect<any, any, any>>(
679
697
  zero: Z,
680
- f: (z: Z, a: A, i: number) => Z,
698
+ f: (z: Z, a: Effect.Success<Eff>, i: number) => Z,
681
699
  options?:
682
700
  | { readonly concurrency?: Concurrency | undefined; readonly batching?: boolean | "inherit" | undefined }
683
701
  | undefined
684
- ): <E, R>(elements: Iterable<Effect<A, E, R>>) => Effect<Z, E, R>
685
- <A, E, R, Z>(
686
- elements: Iterable<Effect<A, E, R>>,
702
+ ): (elements: Iterable<Eff>) => Effect<Z, Effect.Error<Eff>, Effect.Context<Eff>>
703
+ <Eff extends Effect<any, any, any>, Z>(
704
+ elements: Iterable<Eff>,
687
705
  zero: Z,
688
- f: (z: Z, a: A, i: number) => Z,
706
+ f: (z: Z, a: Effect.Success<Eff>, i: number) => Z,
689
707
  options?:
690
708
  | { readonly concurrency?: Concurrency | undefined; readonly batching?: boolean | "inherit" | undefined }
691
709
  | undefined
692
- ): Effect<Z, E, R>
710
+ ): Effect<Z, Effect.Error<Eff>, Effect.Context<Eff>>
693
711
  } = fiberRuntime.mergeAll
694
712
 
695
713
  /**
@@ -734,23 +752,21 @@ export const reduce: {
734
752
  * @category collecting & elements
735
753
  */
736
754
  export const reduceEffect: {
737
- <A, E, R>(
738
- zero: Effect<A, E, R>,
739
- f: (acc: NoInfer<A>, a: NoInfer<A>, i: number) => A,
740
- options?: {
741
- readonly concurrency?: Concurrency | undefined
742
- readonly batching?: boolean | "inherit" | undefined
743
- }
744
- ): (elements: Iterable<Effect<A, E, R>>) => Effect<A, E, R>
745
- <A, E, R>(
746
- elements: Iterable<Effect<A, E, R>>,
747
- zero: Effect<A, E, R>,
748
- f: (acc: NoInfer<A>, a: NoInfer<A>, i: number) => A,
749
- options?: {
750
- readonly concurrency?: Concurrency | undefined
751
- readonly batching?: boolean | "inherit" | undefined
752
- }
753
- ): Effect<A, E, R>
755
+ <Z, E, R, Eff extends Effect<any, any, any>>(
756
+ zero: Effect<Z, E, R>,
757
+ f: (acc: NoInfer<Z>, a: Effect.Success<Eff>, i: number) => Z,
758
+ options?:
759
+ | { readonly concurrency?: Concurrency | undefined; readonly batching?: boolean | "inherit" | undefined }
760
+ | undefined
761
+ ): (elements: Iterable<Eff>) => Effect<Z, E | Effect.Error<Eff>, R | Effect.Context<Eff>>
762
+ <Eff extends Effect<any, any, any>, Z, E, R>(
763
+ elements: Iterable<Eff>,
764
+ zero: Effect<Z, E, R>,
765
+ f: (acc: NoInfer<Z>, a: Effect.Success<Eff>, i: number) => Z,
766
+ options?:
767
+ | { readonly concurrency?: Concurrency | undefined; readonly batching?: boolean | "inherit" | undefined }
768
+ | undefined
769
+ ): Effect<Z, E | Effect.Error<Eff>, R | Effect.Context<Eff>>
754
770
  } = fiberRuntime.reduceEffect
755
771
 
756
772
  /**
@@ -1822,12 +1838,12 @@ export const retryOrElse: {
1822
1838
  <A1, E, R1, A2, E2, R2>(
1823
1839
  policy: Schedule.Schedule<A1, NoInfer<E>, R1>,
1824
1840
  orElse: (e: NoInfer<E>, out: A1) => Effect<A2, E2, R2>
1825
- ): <A, R>(self: Effect<A, E, R>) => Effect<A2 | A, E | E2, R1 | R2 | R>
1841
+ ): <A, R>(self: Effect<A, E, R>) => Effect<A2 | A, E2, R1 | R2 | R>
1826
1842
  <A, E, R, A1, R1, A2, E2, R2>(
1827
1843
  self: Effect<A, E, R>,
1828
1844
  policy: Schedule.Schedule<A1, NoInfer<E>, R1>,
1829
1845
  orElse: (e: NoInfer<E>, out: A1) => Effect<A2, E2, R2>
1830
- ): Effect<A | A2, E | E2, R | R1 | R2>
1846
+ ): Effect<A | A2, E2, R | R1 | R2>
1831
1847
  } = _schedule.retryOrElse_Effect
1832
1848
 
1833
1849
  const try_: {
@@ -2617,22 +2633,21 @@ export const forkDaemon: <A, E, R>(self: Effect<A, E, R>) => Effect<Fiber.Runtim
2617
2633
  */
2618
2634
  export const forkAll: {
2619
2635
  (
2620
- options?: {
2621
- readonly discard?: false | undefined
2622
- }
2623
- ): <A, E, R>(effects: Iterable<Effect<A, E, R>>) => Effect<Fiber.Fiber<Array<A>, E>, never, R>
2624
- (options: {
2625
- readonly discard: true
2626
- }): <A, E, R>(effects: Iterable<Effect<A, E, R>>) => Effect<void, never, R>
2627
- <A, E, R>(
2628
- effects: Iterable<Effect<A, E, R>>,
2629
- options?: {
2630
- readonly discard?: false | undefined
2631
- }
2632
- ): Effect<Fiber.Fiber<Array<A>, E>, never, R>
2633
- <A, E, R>(effects: Iterable<Effect<A, E, R>>, options: {
2634
- readonly discard: true
2635
- }): Effect<void, never, R>
2636
+ options?: { readonly discard?: false | undefined } | undefined
2637
+ ): <Eff extends Effect<any, any, any>>(
2638
+ effects: Iterable<Eff>
2639
+ ) => Effect<Fiber.Fiber<Array<Effect.Success<Eff>>, Effect.Error<Eff>>, never, Effect.Context<Eff>>
2640
+ (
2641
+ options: { readonly discard: true }
2642
+ ): <Eff extends Effect<any, any, any>>(effects: Iterable<Eff>) => Effect<void, never, Effect.Context<Eff>>
2643
+ <Eff extends Effect<any, any, any>>(
2644
+ effects: Iterable<Eff>,
2645
+ options?: { readonly discard?: false | undefined } | undefined
2646
+ ): Effect<Fiber.Fiber<Array<Effect.Success<Eff>>, Effect.Error<Eff>>, never, Effect.Context<Eff>>
2647
+ <Eff extends Effect<any, any, any>>(
2648
+ effects: Iterable<Eff>,
2649
+ options: { readonly discard: true }
2650
+ ): Effect<void, never, Effect.Context<Eff>>
2636
2651
  } = circular.forkAll
2637
2652
 
2638
2653
  /**
@@ -3644,7 +3659,9 @@ export const flatten: <A, E1, R1, E, R>(self: Effect<Effect<A, E1, R1>, E, R>) =
3644
3659
  * @since 2.0.0
3645
3660
  * @category sequencing
3646
3661
  */
3647
- export const raceAll: <A, E, R>(effects: Iterable<Effect<A, E, R>>) => Effect<A, E, R> = fiberRuntime.raceAll
3662
+ export const raceAll: <Eff extends Effect<any, any, any>>(
3663
+ all: Iterable<Eff>
3664
+ ) => Effect<Effect.Success<Eff>, Effect.Error<Eff>, Effect.Context<Eff>> = fiberRuntime.raceAll
3648
3665
 
3649
3666
  /**
3650
3667
  * Returns an effect that races this effect with the specified effect,
@@ -82,3 +82,33 @@ export abstract class Class {
82
82
  return format(this.toJSON())
83
83
  }
84
84
  }
85
+
86
+ /**
87
+ * @since 2.0.0
88
+ */
89
+ export const toStringUnknown = (u: unknown, whitespace: number | string | undefined = 2): string => {
90
+ try {
91
+ return typeof u === "object" ? stringifyCircular(u, whitespace) : String(u)
92
+ } catch (_) {
93
+ return String(u)
94
+ }
95
+ }
96
+
97
+ /**
98
+ * @since 2.0.0
99
+ */
100
+ export const stringifyCircular = (obj: unknown, whitespace?: number | string | undefined): string => {
101
+ let cache: Array<unknown> = []
102
+ const retVal = JSON.stringify(
103
+ obj,
104
+ (_key, value) =>
105
+ typeof value === "object" && value !== null
106
+ ? cache.includes(value)
107
+ ? undefined // circular reference
108
+ : cache.push(value) && value
109
+ : value,
110
+ whitespace
111
+ )
112
+ ;(cache as any) = undefined
113
+ return retVal
114
+ }