@typed/fx 2.0.0-beta.0 → 2.0.0-beta.1

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 (119) hide show
  1. package/README.md +24 -1
  2. package/dist/Fx/combinators/additive.d.ts +94 -0
  3. package/dist/Fx/combinators/additive.d.ts.map +1 -0
  4. package/dist/Fx/combinators/additive.js +92 -0
  5. package/dist/Fx/combinators/catch.d.ts +61 -0
  6. package/dist/Fx/combinators/catch.d.ts.map +1 -1
  7. package/dist/Fx/combinators/catch.js +54 -0
  8. package/dist/Fx/combinators/changesWithEffect.d.ts +20 -0
  9. package/dist/Fx/combinators/changesWithEffect.d.ts.map +1 -0
  10. package/dist/Fx/combinators/changesWithEffect.js +28 -0
  11. package/dist/Fx/combinators/dropUntil.d.ts +29 -0
  12. package/dist/Fx/combinators/dropUntil.d.ts.map +1 -0
  13. package/dist/Fx/combinators/dropUntil.js +23 -0
  14. package/dist/Fx/combinators/flatMapConcurrently.d.ts.map +1 -1
  15. package/dist/Fx/combinators/flatMapConcurrently.js +3 -2
  16. package/dist/Fx/combinators/index.d.ts +10 -0
  17. package/dist/Fx/combinators/index.d.ts.map +1 -1
  18. package/dist/Fx/combinators/index.js +10 -0
  19. package/dist/Fx/combinators/keyed.d.ts +1 -1
  20. package/dist/Fx/combinators/keyed.d.ts.map +1 -1
  21. package/dist/Fx/combinators/mapBoth.d.ts +21 -0
  22. package/dist/Fx/combinators/mapBoth.d.ts.map +1 -0
  23. package/dist/Fx/combinators/mapBoth.js +14 -0
  24. package/dist/Fx/combinators/mapError.d.ts +17 -0
  25. package/dist/Fx/combinators/mapError.d.ts.map +1 -0
  26. package/dist/Fx/combinators/mapError.js +16 -0
  27. package/dist/Fx/combinators/provide.d.ts +34 -1
  28. package/dist/Fx/combinators/provide.d.ts.map +1 -1
  29. package/dist/Fx/combinators/provide.js +27 -0
  30. package/dist/Fx/combinators/result.d.ts +23 -0
  31. package/dist/Fx/combinators/result.d.ts.map +1 -0
  32. package/dist/Fx/combinators/result.js +32 -0
  33. package/dist/Fx/combinators/scan.d.ts +33 -0
  34. package/dist/Fx/combinators/scan.d.ts.map +1 -0
  35. package/dist/Fx/combinators/scan.js +38 -0
  36. package/dist/Fx/combinators/skip.d.ts +13 -0
  37. package/dist/Fx/combinators/skip.d.ts.map +1 -1
  38. package/dist/Fx/combinators/skip.js +11 -0
  39. package/dist/Fx/combinators/skipWhile.d.ts +49 -0
  40. package/dist/Fx/combinators/skipWhile.d.ts.map +1 -0
  41. package/dist/Fx/combinators/skipWhile.js +66 -0
  42. package/dist/Fx/combinators/slice.d.ts +13 -0
  43. package/dist/Fx/combinators/slice.d.ts.map +1 -1
  44. package/dist/Fx/combinators/slice.js +11 -0
  45. package/dist/Fx/combinators/take.d.ts +13 -0
  46. package/dist/Fx/combinators/take.d.ts.map +1 -1
  47. package/dist/Fx/combinators/take.js +11 -0
  48. package/dist/Fx/combinators/takeUntil.d.ts +14 -0
  49. package/dist/Fx/combinators/takeUntil.d.ts.map +1 -1
  50. package/dist/Fx/combinators/takeUntil.js +14 -0
  51. package/dist/Fx/combinators/takeWhile.d.ts +29 -0
  52. package/dist/Fx/combinators/takeWhile.d.ts.map +1 -0
  53. package/dist/Fx/combinators/takeWhile.js +23 -0
  54. package/dist/Fx/combinators/zip.d.ts +75 -0
  55. package/dist/Fx/combinators/zip.d.ts.map +1 -0
  56. package/dist/Fx/combinators/zip.js +100 -0
  57. package/dist/Fx/constructors/at.d.ts +2 -2
  58. package/dist/Fx/constructors/at.d.ts.map +1 -1
  59. package/dist/Fx/constructors/periodic.d.ts +1 -1
  60. package/dist/Fx/constructors/periodic.d.ts.map +1 -1
  61. package/dist/Push/Push.d.ts +64 -1
  62. package/dist/Push/Push.d.ts.map +1 -1
  63. package/dist/Push/Push.js +57 -0
  64. package/dist/RefSubject/RefDateTime.d.ts +4 -4
  65. package/dist/RefSubject/RefDateTime.d.ts.map +1 -1
  66. package/dist/RefSubject/RefSubject.d.ts +47 -0
  67. package/dist/RefSubject/RefSubject.d.ts.map +1 -1
  68. package/dist/RefSubject/RefSubject.js +80 -1
  69. package/dist/Sink/combinators.d.ts +57 -0
  70. package/dist/Sink/combinators.d.ts.map +1 -1
  71. package/dist/Sink/combinators.js +104 -1
  72. package/dist/Versioned/Versioned.d.ts +30 -0
  73. package/dist/Versioned/Versioned.d.ts.map +1 -1
  74. package/dist/Versioned/Versioned.js +18 -0
  75. package/package.json +16 -12
  76. package/src/Fx/combinators/additive.ts +142 -0
  77. package/src/Fx/combinators/catch.ts +256 -0
  78. package/src/Fx/combinators/changesWithEffect.ts +66 -0
  79. package/src/Fx/combinators/dropUntil.ts +47 -0
  80. package/src/Fx/combinators/flatMapConcurrently.ts +5 -2
  81. package/src/Fx/combinators/index.ts +10 -0
  82. package/src/Fx/combinators/keyed.ts +2 -2
  83. package/src/Fx/combinators/mapBoth.ts +40 -0
  84. package/src/Fx/combinators/mapError.ts +28 -0
  85. package/src/Fx/combinators/provide.ts +63 -1
  86. package/src/Fx/combinators/result.ts +39 -0
  87. package/src/Fx/combinators/scan.ts +82 -0
  88. package/src/Fx/combinators/skip.ts +21 -0
  89. package/src/Fx/combinators/skipWhile.ts +100 -0
  90. package/src/Fx/combinators/slice.ts +23 -0
  91. package/src/Fx/combinators/take.ts +21 -0
  92. package/src/Fx/combinators/takeUntil.ts +38 -0
  93. package/src/Fx/combinators/takeWhile.ts +47 -0
  94. package/src/Fx/combinators/zip.ts +175 -0
  95. package/src/Fx/constructors/at.ts +3 -3
  96. package/src/Fx/constructors/periodic.ts +1 -1
  97. package/src/Fx.additive-combinators.test.ts +126 -0
  98. package/src/Fx.catch-additive.test.ts +206 -0
  99. package/src/Fx.catch.test.ts +1 -2
  100. package/src/Fx.dropUntil.test.ts +61 -0
  101. package/src/Fx.lifecycle.test.ts +1 -2
  102. package/src/Fx.mapError-mapBoth.test.ts +101 -0
  103. package/src/Fx.provide-combinators.test.ts +94 -0
  104. package/src/Fx.result-changesWithEffect.test.ts +112 -0
  105. package/src/Fx.scan.test.ts +73 -0
  106. package/src/Fx.takeWhile-skipWhile.test.ts +84 -0
  107. package/src/Fx.zip-merge-additive.test.ts +171 -0
  108. package/src/Fx.zip.test.ts +133 -0
  109. package/src/Push/Push.ts +170 -1
  110. package/src/Push.additive.test.ts +256 -0
  111. package/src/RefSubject/RefDateTime.ts +6 -6
  112. package/src/RefSubject/RefSubject.ts +104 -3
  113. package/src/RefSubject.additive-parity.test.ts +101 -0
  114. package/src/Sink/combinators.ts +123 -1
  115. package/src/Sink.combinators.test.ts +88 -0
  116. package/src/Sink.reduce-collect-head-last.test.ts +107 -0
  117. package/src/Versioned/Versioned.ts +76 -0
  118. package/src/Versioned.filterMap.test.ts +91 -0
  119. package/tsconfig.json +0 -6
package/README.md CHANGED
@@ -26,7 +26,7 @@ Fx.fromIterable([1, 2, 3]).pipe(
26
26
  Fx.filter((n) => n % 2 === 0),
27
27
  Fx.map((n) => n * 2),
28
28
  Fx.observe((n) => Effect.log(`emitted: ${n}`)),
29
- Effect.runPromise
29
+ Effect.runPromise,
30
30
  );
31
31
  ```
32
32
 
@@ -82,6 +82,8 @@ Reactive stream type with concurrency, error handling, and context, integrated w
82
82
 
83
83
  - `map(f)` — Transform emitted values.
84
84
  - `mapEffect(f)` — Transform with an Effect.
85
+ - `mapError(f)` — Transform typed failures.
86
+ - `mapBoth({ onSuccess, onFailure })` — Transform both success values and typed failures.
85
87
  - `flatMap(f)` — Map to inner Fx and merge (concurrent; like mergeMap).
86
88
  - `flatMapEffect(f)` — FlatMap with an Effect returning Fx.
87
89
  - `flatMapConcurrently(f, concurrency?)` — FlatMap with a concurrency limit.
@@ -98,19 +100,37 @@ Reactive stream type with concurrency, error handling, and context, integrated w
98
100
  - `filterMapEffect(f)` — FilterMap with Effect.
99
101
  - `compact` — Filter out `None`, unwrap `Some`.
100
102
  - `take(n)` — Take first n elements.
103
+ - `takeEffect(effect)` — Take first n elements, where n is computed by an Effect.
101
104
  - `takeUntil(fx)` — Take until another Fx emits.
105
+ - `takeUntilEffect(f)` — Take until an effectful predicate returns true.
106
+ - `takeWhile(f)` — Take while predicate holds.
107
+ - `takeWhileEffect(f)` — Take while effectful predicate holds.
102
108
  - `skip(n)` — Skip first n elements.
109
+ - `skipEffect(effect)` — Skip first n elements, where n is computed by an Effect.
110
+ - `skipWhile(f)` / `dropWhile(f)` — Skip while predicate holds.
111
+ - `skipWhileEffect(f)` / `dropWhileEffect(f)` — Skip while effectful predicate holds.
103
112
  - `slice(options)` — Skip/take by bounds.
113
+ - `sliceEffect(effect)` — Skip/take by bounds produced by an Effect.
104
114
  - `skipRepeats` — Drop consecutive duplicates (Equal).
105
115
  - `skipRepeatsWith(equiv)` — Drop consecutive duplicates with custom equivalence.
116
+ - `changesWithEffect(f)` — Effectful consecutive deduplication predicate.
117
+ - `merge(fx)` — Merge with another Fx.
106
118
  - `mergeAll(fxs)` — Merge multiple Fx streams.
107
119
  - `mergeOrdered(fxs)` — Merge with ordering guarantees.
120
+ - `concat(fx)` — Concatenate with another Fx (run second after first completes).
121
+ - `zip(fx)` / `zipWith(fx, f)` — Zip streams in lockstep.
122
+ - `zipLatest(fx)` / `zipLatestWith(fx, f)` — Zip latest values after both emit once.
108
123
  - `catch(f)` — Recover from errors.
124
+ - `catchIf(refinement, f)` — Recover conditionally from typed failures.
125
+ - `catchCauseIf(predicate, f)` — Recover conditionally from failure causes.
126
+ - `catchTags(handlers)` — Recover from multiple tagged failures with handler map.
109
127
  - `onError(f)` — Run an effect on failure.
110
128
  - `onExit(f)` — Run an effect on exit (success/failure/interrupt).
111
129
  - `onInterrupt(f)` — Run an effect on interrupt.
112
130
  - `ensuring(effect)` — Run effect when Fx ends (success, failure, or interrupt).
113
131
  - `provide(services)` — Provide context to the Fx.
132
+ - `provideService(tag, service)` — Provide a single service to the Fx.
133
+ - `provideServiceEffect(tag, effect)` — Provide a service produced by an Effect.
114
134
  - `when(condition, fx)` — Run Fx only when condition holds.
115
135
  - `unwrap` — Unwrap Fx of Fx (flatten one level).
116
136
  - `unwrapScoped` — Unwrap with Scope for inner Fx.
@@ -118,6 +138,8 @@ Reactive stream type with concurrency, error handling, and context, integrated w
118
138
  - `genScoped(f)` — gen with Scope.
119
139
  - `loop(initial, f)` — Loop with state and Option for continue/exit.
120
140
  - `loopEffect(initial, f)` — Loop with Effect.
141
+ - `scan(initial, f)` — Emit running accumulation (includes initial value).
142
+ - `scanEffect(initial, f)` — Effectful running accumulation.
121
143
  - `loopCause(initial, f)` — Loop with Cause handling.
122
144
  - `loopCauseEffect(initial, f)` — Loop with Cause and Effect.
123
145
  - `filterMapLoop(initial, f)` — Loop yielding Option.
@@ -127,6 +149,7 @@ Reactive stream type with concurrency, error handling, and context, integrated w
127
149
  - `keyed(keyFn, f)` — Keyed stream (e.g. by id) with inner Fx per key.
128
150
  - `tapEffect(f)` — Run effect for each value, pass value through.
129
151
  - `exit` — Turn Fx of Exit into Fx that fails/succeeds accordingly.
152
+ - `result` — Materialize successes/failures as `Result`.
130
153
  - `causes` — Expose failures as Cause emissions.
131
154
  - `continueWith(f)` — When Fx ends, continue with another Fx.
132
155
  - `flip` — Swap success and error types.
@@ -0,0 +1,94 @@
1
+ import type { Fx } from "../Fx.js";
2
+ /**
3
+ * Merges two Fx streams into a single Fx that emits values from both streams
4
+ * concurrently. Order of emission is non-deterministic.
5
+ *
6
+ * **Completion:** The merged stream completes when **both** input streams have
7
+ * completed.
8
+ *
9
+ * **Errors:** The first failure from either stream fails the merged stream;
10
+ * the other stream is interrupted.
11
+ *
12
+ * @param that - The second Fx stream.
13
+ * @returns An Fx that emits values from both streams.
14
+ * @since 1.0.0
15
+ * @category combinators
16
+ */
17
+ export declare const merge: {
18
+ <A2, E2, R2>(that: Fx<A2, E2, R2>): <A, E, R>(self: Fx<A, E, R>) => Fx<A | A2, E | E2, R | R2>;
19
+ <A, E, R, A2, E2, R2>(self: Fx<A, E, R>, that: Fx<A2, E2, R2>): Fx<A | A2, E | E2, R | R2>;
20
+ };
21
+ /**
22
+ * Concatenates two Fx streams: runs the first to completion, then runs the
23
+ * second. Emits all values from the first stream in order, then all values
24
+ * from the second stream in order.
25
+ *
26
+ * **Completion:** The concatenated stream completes when the **second** stream
27
+ * completes (the first must complete before the second starts).
28
+ *
29
+ * **Errors:** If the first stream fails, the concatenated stream fails and the
30
+ * second is never run. If the second stream fails, the concatenated stream
31
+ * fails after the first has already completed.
32
+ *
33
+ * @param that - The second Fx stream (run after the first completes).
34
+ * @returns An Fx that emits values from the first stream, then the second.
35
+ * @since 1.0.0
36
+ * @category combinators
37
+ */
38
+ export declare const concat: {
39
+ <A2, E2, R2>(that: Fx<A2, E2, R2>): <A, E, R>(self: Fx<A, E, R>) => Fx<A | A2, E | E2, R | R2>;
40
+ <A, E, R, A2, E2, R2>(self: Fx<A, E, R>, that: Fx<A2, E2, R2>): Fx<A | A2, E | E2, R | R2>;
41
+ };
42
+ /**
43
+ * Zips two Fx streams in strict lockstep and emits only the left value.
44
+ * Completes when the **first** of the two streams completes.
45
+ *
46
+ * @param that - The second Fx stream.
47
+ * @returns An Fx that emits values from the left stream only.
48
+ * @since 1.0.0
49
+ * @category combinators
50
+ */
51
+ export declare const zipLeft: {
52
+ <A2, E2, R2>(that: Fx<A2, E2, R2>): <A, E, R>(self: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;
53
+ <A, E, R, A2, E2, R2>(self: Fx<A, E, R>, that: Fx<A2, E2, R2>): Fx<A, E | E2, R | R2>;
54
+ };
55
+ /**
56
+ * Zips two Fx streams in strict lockstep and emits only the right value.
57
+ * Completes when the **first** of the two streams completes.
58
+ *
59
+ * @param that - The second Fx stream.
60
+ * @returns An Fx that emits values from the right stream only.
61
+ * @since 1.0.0
62
+ * @category combinators
63
+ */
64
+ export declare const zipRight: {
65
+ <A2, E2, R2>(that: Fx<A2, E2, R2>): <A, E, R>(self: Fx<A, E, R>) => Fx<A2, E | E2, R | R2>;
66
+ <A, E, R, A2, E2, R2>(self: Fx<A, E, R>, that: Fx<A2, E2, R2>): Fx<A2, E | E2, R | R2>;
67
+ };
68
+ /**
69
+ * Merges two Fx streams and emits only values from the left stream.
70
+ * Both streams run concurrently; completion when **both** complete.
71
+ *
72
+ * @param that - The second Fx stream (values are dropped).
73
+ * @returns An Fx that emits only values from the left stream.
74
+ * @since 1.0.0
75
+ * @category combinators
76
+ */
77
+ export declare const mergeLeft: {
78
+ <A2, E2, R2>(that: Fx<A2, E2, R2>): <A, E, R>(self: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;
79
+ <A, E, R, A2, E2, R2>(self: Fx<A, E, R>, that: Fx<A2, E2, R2>): Fx<A, E | E2, R | R2>;
80
+ };
81
+ /**
82
+ * Merges two Fx streams and emits only values from the right stream.
83
+ * Both streams run concurrently; completion when **both** complete.
84
+ *
85
+ * @param that - The second Fx stream.
86
+ * @returns An Fx that emits only values from the right stream.
87
+ * @since 1.0.0
88
+ * @category combinators
89
+ */
90
+ export declare const mergeRight: {
91
+ <A2, E2, R2>(that: Fx<A2, E2, R2>): <A, E, R>(self: Fx<A, E, R>) => Fx<A2, E | E2, R | R2>;
92
+ <A, E, R, A2, E2, R2>(self: Fx<A, E, R>, that: Fx<A2, E2, R2>): Fx<A2, E | E2, R | R2>;
93
+ };
94
+ //# sourceMappingURL=additive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"additive.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/additive.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAOnC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,KAAK,EAAE;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/F,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAK5F,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,MAAM,EAAE;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/F,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAK5F,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,EAAE;IACpB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1F,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAKvF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,EAAE;IACrB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3F,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAKxF,CAAC;AAKF;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,EAAE;IACtB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1F,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAUvF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,EAAE;IACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3F,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAUxF,CAAC"}
@@ -0,0 +1,92 @@
1
+ import { dual } from "effect/Function";
2
+ import { continueWith } from "./continueWith.js";
3
+ import { filter } from "./filter.js";
4
+ import { map } from "./map.js";
5
+ import { mergeAll } from "./mergeAll.js";
6
+ import { zip } from "./zip.js";
7
+ /**
8
+ * Merges two Fx streams into a single Fx that emits values from both streams
9
+ * concurrently. Order of emission is non-deterministic.
10
+ *
11
+ * **Completion:** The merged stream completes when **both** input streams have
12
+ * completed.
13
+ *
14
+ * **Errors:** The first failure from either stream fails the merged stream;
15
+ * the other stream is interrupted.
16
+ *
17
+ * @param that - The second Fx stream.
18
+ * @returns An Fx that emits values from both streams.
19
+ * @since 1.0.0
20
+ * @category combinators
21
+ */
22
+ export const merge = dual(2, (self, that) => mergeAll(self, that));
23
+ /**
24
+ * Concatenates two Fx streams: runs the first to completion, then runs the
25
+ * second. Emits all values from the first stream in order, then all values
26
+ * from the second stream in order.
27
+ *
28
+ * **Completion:** The concatenated stream completes when the **second** stream
29
+ * completes (the first must complete before the second starts).
30
+ *
31
+ * **Errors:** If the first stream fails, the concatenated stream fails and the
32
+ * second is never run. If the second stream fails, the concatenated stream
33
+ * fails after the first has already completed.
34
+ *
35
+ * @param that - The second Fx stream (run after the first completes).
36
+ * @returns An Fx that emits values from the first stream, then the second.
37
+ * @since 1.0.0
38
+ * @category combinators
39
+ */
40
+ export const concat = dual(2, (self, that) => continueWith(self, () => that));
41
+ /**
42
+ * Zips two Fx streams in strict lockstep and emits only the left value.
43
+ * Completes when the **first** of the two streams completes.
44
+ *
45
+ * @param that - The second Fx stream.
46
+ * @returns An Fx that emits values from the left stream only.
47
+ * @since 1.0.0
48
+ * @category combinators
49
+ */
50
+ export const zipLeft = dual(2, (self, that) => map(zip(self, that), (pair) => pair[0]));
51
+ /**
52
+ * Zips two Fx streams in strict lockstep and emits only the right value.
53
+ * Completes when the **first** of the two streams completes.
54
+ *
55
+ * @param that - The second Fx stream.
56
+ * @returns An Fx that emits values from the right stream only.
57
+ * @since 1.0.0
58
+ * @category combinators
59
+ */
60
+ export const zipRight = dual(2, (self, that) => map(zip(self, that), (pair) => pair[1]));
61
+ /**
62
+ * Merges two Fx streams and emits only values from the left stream.
63
+ * Both streams run concurrently; completion when **both** complete.
64
+ *
65
+ * @param that - The second Fx stream (values are dropped).
66
+ * @returns An Fx that emits only values from the left stream.
67
+ * @since 1.0.0
68
+ * @category combinators
69
+ */
70
+ export const mergeLeft = dual(2, (self, that) => {
71
+ const taggedLeft = map(self, (a) => ({ _tag: "Left", value: a }));
72
+ const taggedRight = map(that, (b) => ({ _tag: "Right", value: b }));
73
+ const merged = mergeAll(taggedLeft, taggedRight);
74
+ const leftOnly = filter(merged, (x) => x._tag === "Left");
75
+ return map(leftOnly, (x) => x.value);
76
+ });
77
+ /**
78
+ * Merges two Fx streams and emits only values from the right stream.
79
+ * Both streams run concurrently; completion when **both** complete.
80
+ *
81
+ * @param that - The second Fx stream.
82
+ * @returns An Fx that emits only values from the right stream.
83
+ * @since 1.0.0
84
+ * @category combinators
85
+ */
86
+ export const mergeRight = dual(2, (self, that) => {
87
+ const taggedLeft = map(self, (a) => ({ _tag: "Left", value: a }));
88
+ const taggedRight = map(that, (b) => ({ _tag: "Right", value: b }));
89
+ const merged = mergeAll(taggedLeft, taggedRight);
90
+ const rightOnly = filter(merged, (x) => x._tag === "Right");
91
+ return map(rightOnly, (x) => x.value);
92
+ });
@@ -50,4 +50,65 @@ export declare const catchTag: {
50
50
  <const K extends Tags<E> | Arr.NonEmptyReadonlyArray<Tags<E>>, E, A2, E2, R2>(k: K, f: (e: ExtractTag<NoInfer<E>, K extends Arr.NonEmptyReadonlyArray<string> ? K[number] : K>) => Fx<A2, E2, R2>): <A, R>(self: Fx<A, E, R>) => Fx<A | A2, E2 | ExcludeTag<E, K extends Arr.NonEmptyReadonlyArray<string> ? K[number] : K>, R | R2>;
51
51
  <A, E, R, const K extends Tags<E> | Arr.NonEmptyReadonlyArray<Tags<E>>, A2, E2, R2>(self: Fx<A, E, R>, k: K, f: (e: ExtractTag<E, K extends Arr.NonEmptyReadonlyArray<string> ? K[number] : K>) => Fx<A2, E2, R2>): Fx<A | A2, E2 | ExcludeTag<E, K extends Arr.NonEmptyReadonlyArray<string> ? K[number] : K>, R | R2>;
52
52
  };
53
+ /**
54
+ * Recovers from a typed failure when a predicate holds, by switching to a fallback Fx.
55
+ * Only applies to `Cause.Fail`; defects and interrupts are not caught.
56
+ *
57
+ * Mirrors `Effect.catchIf`.
58
+ *
59
+ * @since 1.0.0
60
+ * @category combinators
61
+ */
62
+ export declare const catchIf: {
63
+ <E, A2, E2, R2>(predicate: (e: E) => boolean, f: (e: E) => Fx<A2, E2, R2>): <A, R>(self: Fx<A, E, R>) => Fx<A | A2, E | E2, R | R2>;
64
+ <A, E, R, A2, E2, R2>(self: Fx<A, E, R>, predicate: (e: E) => boolean, f: (e: E) => Fx<A2, E2, R2>): Fx<A | A2, E | E2, R | R2>;
65
+ };
66
+ /**
67
+ * Recovers from a failure cause when a predicate on the cause holds,
68
+ * by switching to a fallback Fx.
69
+ *
70
+ * Mirrors `Effect.catchCauseIf`.
71
+ *
72
+ * @since 1.0.0
73
+ * @category combinators
74
+ */
75
+ export declare const catchCauseIf: {
76
+ <E, A2, E2, R2>(predicate: (cause: Cause.Cause<E>) => boolean, f: (cause: Cause.Cause<E>) => Fx<A2, E2, R2>): <A, R>(self: Fx<A, E, R>) => Fx<A | A2, E | E2, R | R2>;
77
+ <A, E, R, A2, E2, R2>(self: Fx<A, E, R>, predicate: (cause: Cause.Cause<E>) => boolean, f: (cause: Cause.Cause<E>) => Fx<A2, E2, R2>): Fx<A | A2, E | E2, R | R2>;
78
+ };
79
+ type TaggedCase<E> = {
80
+ [K in Extract<E, {
81
+ _tag: string;
82
+ }>["_tag"]]+?: (error: Extract<E, {
83
+ _tag: K;
84
+ }>) => Fx<unknown, unknown, unknown>;
85
+ };
86
+ /**
87
+ * Recovers from typed failures by matching on the `_tag` field with multiple handlers at once.
88
+ *
89
+ * Mirrors `Effect.catchTags`.
90
+ *
91
+ * @since 1.0.0
92
+ * @category combinators
93
+ */
94
+ export declare const catchTags: {
95
+ <E, Cases extends TaggedCase<E>>(cases: Cases): <A, R>(self: Fx<A, E, R>) => Fx<A | {
96
+ [K in keyof Cases]: Cases[K] extends (e: unknown) => Fx<infer A2, unknown, unknown> ? A2 : never;
97
+ }[keyof Cases], Exclude<E, {
98
+ _tag: keyof Cases;
99
+ }> | {
100
+ [K in keyof Cases]: Cases[K] extends (e: unknown) => Fx<unknown, infer E2, unknown> ? E2 : never;
101
+ }[keyof Cases], R | {
102
+ [K in keyof Cases]: Cases[K] extends (e: unknown) => Fx<unknown, unknown, infer R2> ? R2 : never;
103
+ }[keyof Cases]>;
104
+ <A, E, R, Cases extends TaggedCase<E>>(self: Fx<A, E, R>, cases: Cases): Fx<A | {
105
+ [K in keyof Cases]: Cases[K] extends (e: unknown) => Fx<infer A2, unknown, unknown> ? A2 : never;
106
+ }[keyof Cases], Exclude<E, {
107
+ _tag: keyof Cases;
108
+ }> | {
109
+ [K in keyof Cases]: Cases[K] extends (e: unknown) => Fx<unknown, infer E2, unknown> ? E2 : never;
110
+ }[keyof Cases], R | {
111
+ [K in keyof Cases]: Cases[K] extends (e: unknown) => Fx<unknown, unknown, infer R2> ? R2 : never;
112
+ }[keyof Cases]>;
113
+ };
53
114
  //# sourceMappingURL=catch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"catch.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/catch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catch.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/catch.ts"],"names":[],"mappings":"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"}
@@ -67,3 +67,57 @@ export const catchTag = dual(3, (self, k, f) => make((sink) => self.run(makeSink
67
67
  return sink.onFailure(cause);
68
68
  }
69
69
  }, sink.onSuccess))));
70
+ /**
71
+ * Recovers from a typed failure when a predicate holds, by switching to a fallback Fx.
72
+ * Only applies to `Cause.Fail`; defects and interrupts are not caught.
73
+ *
74
+ * Mirrors `Effect.catchIf`.
75
+ *
76
+ * @since 1.0.0
77
+ * @category combinators
78
+ */
79
+ export const catchIf = dual(3, (self, predicate, f) => make((sink) => self.run(makeSink((cause) => {
80
+ const result = Cause.findFail(cause);
81
+ if (Result.isFailure(result)) {
82
+ return sink.onFailure(result.failure);
83
+ }
84
+ const error = result.success.error;
85
+ if (predicate(error)) {
86
+ return f(error).run(sink);
87
+ }
88
+ return sink.onFailure(cause);
89
+ }, sink.onSuccess))));
90
+ /**
91
+ * Recovers from a failure cause when a predicate on the cause holds,
92
+ * by switching to a fallback Fx.
93
+ *
94
+ * Mirrors `Effect.catchCauseIf`.
95
+ *
96
+ * @since 1.0.0
97
+ * @category combinators
98
+ */
99
+ export const catchCauseIf = dual(3, (self, predicate, f) => make((sink) => self.run(makeSink((cause) => (predicate(cause) ? f(cause).run(sink) : sink.onFailure(cause)), sink.onSuccess))));
100
+ /**
101
+ * Recovers from typed failures by matching on the `_tag` field with multiple handlers at once.
102
+ *
103
+ * Mirrors `Effect.catchTags`.
104
+ *
105
+ * @since 1.0.0
106
+ * @category combinators
107
+ */
108
+ export const catchTags = dual(2, (self, cases) => make((sink) => self.run(makeSink((cause) => {
109
+ const result = Cause.findFail(cause);
110
+ if (Result.isFailure(result)) {
111
+ return sink.onFailure(result.failure);
112
+ }
113
+ const error = result.success.error;
114
+ if (!hasTag(error)) {
115
+ return sink.onFailure(cause);
116
+ }
117
+ const tag = error._tag;
118
+ const handler = cases[tag];
119
+ if (handler !== undefined) {
120
+ return handler(error).run(sink);
121
+ }
122
+ return sink.onFailure(cause);
123
+ }, sink.onSuccess))));
@@ -0,0 +1,20 @@
1
+ import * as Effect from "effect/Effect";
2
+ import type { Fx } from "../Fx.js";
3
+ /**
4
+ * Drops consecutive elements that are considered equal by an effectful predicate.
5
+ * When the effect returns `true`, the element is skipped; when `false`, it is emitted.
6
+ *
7
+ * This is the effectful variant of `skipRepeatsWith`: instead of a pure
8
+ * `Equivalence<A>`, you supply `(prev, next) => Effect<boolean>` where `true`
9
+ * means "equal" (skip) and `false` means "changed" (emit).
10
+ *
11
+ * @param f - Effectful function: `(prev, next) => Effect<boolean>`. Return `true` to skip (treat as duplicate), `false` to emit.
12
+ * @returns An `Fx` with consecutive "equal" elements removed.
13
+ * @since 1.0.0
14
+ * @category combinators
15
+ */
16
+ export declare const changesWithEffect: {
17
+ <A, E2, R2>(f: (prev: A, next: A) => Effect.Effect<boolean, E2, R2>): <E, R>(fx: Fx<A, E | E2, R>) => Fx<A, E | E2, R | R2>;
18
+ <A, E, R, E2, R2>(fx: Fx<A, E | E2, R>, f: (prev: A, next: A) => Effect.Effect<boolean, E2, R2>): Fx<A, E | E2, R | R2>;
19
+ };
20
+ //# sourceMappingURL=changesWithEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changesWithEffect.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/changesWithEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAMxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,EAAE;IAC9B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EACR,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,GACtD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAEzD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACd,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EACpB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,GACtD,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAoC1B,CAAC"}
@@ -0,0 +1,28 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { dual } from "effect/Function";
3
+ import * as Option from "effect/Option";
4
+ import * as sinkCore from "../../Sink/combinators.js";
5
+ import { make as makeSink } from "../../Sink/Sink.js";
6
+ import { make } from "../constructors/make.js";
7
+ /**
8
+ * Drops consecutive elements that are considered equal by an effectful predicate.
9
+ * When the effect returns `true`, the element is skipped; when `false`, it is emitted.
10
+ *
11
+ * This is the effectful variant of `skipRepeatsWith`: instead of a pure
12
+ * `Equivalence<A>`, you supply `(prev, next) => Effect<boolean>` where `true`
13
+ * means "equal" (skip) and `false` means "changed" (emit).
14
+ *
15
+ * @param f - Effectful function: `(prev, next) => Effect<boolean>`. Return `true` to skip (treat as duplicate), `false` to emit.
16
+ * @returns An `Fx` with consecutive "equal" elements removed.
17
+ * @since 1.0.0
18
+ * @category combinators
19
+ */
20
+ export const changesWithEffect = dual(2, (fx, f) => make((sink) => sinkCore.withStateSemaphore(sink, Option.none(), (s) => fx.run(makeSink(s.onFailure, (a2) => Effect.matchCauseEffect(Effect.flatMap(s.get, (state) => Option.match(state, {
21
+ onNone: () => Effect.flatMap(s.onSuccess(a2), () => s.updateEffect(() => Effect.succeed(Option.some(a2)))),
22
+ onSome: (prev) => Effect.matchCauseEffect(f(prev, a2), {
23
+ onFailure: (cause) => s.onFailure(cause),
24
+ onSuccess: (equal) => equal
25
+ ? s.updateEffect(() => Effect.succeed(Option.some(prev)))
26
+ : Effect.flatMap(s.onSuccess(a2), () => s.updateEffect(() => Effect.succeed(Option.some(a2)))),
27
+ }),
28
+ })), { onFailure: (cause) => s.onFailure(cause), onSuccess: () => Effect.void }))))));
@@ -0,0 +1,29 @@
1
+ import * as Effect from "effect/Effect";
2
+ import type { Fx } from "../Fx.js";
3
+ /**
4
+ * Drops elements from an Fx until a predicate returns true.
5
+ * Emits from the first element for which the predicate returns true (including that element) and all following elements.
6
+ *
7
+ * @param predicate - The predicate function.
8
+ * @returns An `Fx` that emits once the predicate first matches.
9
+ * @since 1.0.0
10
+ * @category combinators
11
+ */
12
+ export declare const dropUntil: {
13
+ <A>(predicate: (a: A) => boolean): <E, R>(fx: Fx<A, E, R>) => Fx<A, E, R>;
14
+ <A, E, R>(fx: Fx<A, E, R>, predicate: (a: A) => boolean): Fx<A, E, R>;
15
+ };
16
+ /**
17
+ * Drops elements from an Fx until an effectful predicate returns true.
18
+ * Emits from the first element for which the predicate effect succeeds with true (including that element) and all following elements.
19
+ *
20
+ * @param predicate - Effectful predicate function.
21
+ * @returns An `Fx` that emits once the predicate first matches.
22
+ * @since 1.0.0
23
+ * @category combinators
24
+ */
25
+ export declare const dropUntilEffect: {
26
+ <A, E2, R2>(predicate: (a: A) => Effect.Effect<boolean, E2, R2>): <E, R>(fx: Fx<A, E, R>) => Fx<A, E | E2, R | R2>;
27
+ <A, E, R, E2, R2>(fx: Fx<A, E, R>, predicate: (a: A) => Effect.Effect<boolean, E2, R2>): Fx<A, E | E2, R | R2>;
28
+ };
29
+ //# sourceMappingURL=dropUntil.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropUntil.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/dropUntil.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAGnC;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,EAAE;IACtB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CAKvE,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,EAAE;IAC5B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EACR,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,GAClD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACd,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACf,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,GAClD,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAO1B,CAAC"}
@@ -0,0 +1,23 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { dual } from "effect/Function";
3
+ import { skipWhile, skipWhileEffect } from "./skipWhile.js";
4
+ /**
5
+ * Drops elements from an Fx until a predicate returns true.
6
+ * Emits from the first element for which the predicate returns true (including that element) and all following elements.
7
+ *
8
+ * @param predicate - The predicate function.
9
+ * @returns An `Fx` that emits once the predicate first matches.
10
+ * @since 1.0.0
11
+ * @category combinators
12
+ */
13
+ export const dropUntil = dual(2, (fx, predicate) => skipWhile(fx, (a) => !predicate(a)));
14
+ /**
15
+ * Drops elements from an Fx until an effectful predicate returns true.
16
+ * Emits from the first element for which the predicate effect succeeds with true (including that element) and all following elements.
17
+ *
18
+ * @param predicate - Effectful predicate function.
19
+ * @returns An `Fx` that emits once the predicate first matches.
20
+ * @since 1.0.0
21
+ * @category combinators
22
+ */
23
+ export const dropUntilEffect = dual(2, (fx, predicate) => skipWhileEffect(fx, (a) => Effect.map(predicate(a), (b) => !b)));
@@ -1 +1 @@
1
- {"version":3,"file":"flatMapConcurrently.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/flatMapConcurrently.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAgBlE,CAAC"}
1
+ {"version":3,"file":"flatMapConcurrently.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/flatMapConcurrently.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAkBlE,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import * as Effect from "effect/Effect";
2
2
  import * as FiberSet from "effect/FiberSet";
3
+ import * as Semaphore from "effect/Semaphore";
3
4
  import { dual } from "effect/Function";
4
5
  import { make as makeSink } from "../../Sink/Sink.js";
5
6
  import { make } from "../constructors/make.js";
@@ -14,9 +15,9 @@ import { extendScope } from "../internal/scope.js";
14
15
  * @category combinators
15
16
  */
16
17
  export const flatMapConcurrently = dual(3, (self, f, concurrency) => make(Effect.fn(function* (sink) {
17
- const semaphore = yield* Effect.makeSemaphore(concurrency);
18
+ const semaphore = yield* Semaphore.make(concurrency);
18
19
  const lock = semaphore.withPermits(1);
19
20
  const set = yield* FiberSet.make();
20
- yield* self.run(makeSink(sink.onFailure, (a) => FiberSet.run(set, lock(f(a).run(sink)))));
21
+ yield* self.run(makeSink(sink.onFailure, (a) => FiberSet.run(set, lock(Effect.asVoid(f(a).run(sink))))));
21
22
  yield* FiberSet.awaitEmpty(set);
22
23
  }, extendScope)));
@@ -1,7 +1,10 @@
1
1
  export * from "./catch.js";
2
+ export * from "./changesWithEffect.js";
2
3
  export * from "./causes.js";
3
4
  export * from "./compact.js";
4
5
  export * from "./continueWith.js";
6
+ export * from "./dropUntil.js";
7
+ export * from "./additive.js";
5
8
  export * from "./ensuring.js";
6
9
  export * from "./exhaustLatestMap.js";
7
10
  export * from "./exhaustLatestMapEffect.js";
@@ -29,24 +32,31 @@ export * from "./loopCause.js";
29
32
  export * from "./loopCauseEffect.js";
30
33
  export * from "./loopEffect.js";
31
34
  export * from "./map.js";
35
+ export * from "./mapBoth.js";
32
36
  export * from "./mapEffect.js";
37
+ export * from "./mapError.js";
33
38
  export * from "./mergeAll.js";
34
39
  export * from "./mergeOrdered.js";
35
40
  export * from "./onError.js";
36
41
  export * from "./onExit.js";
37
42
  export * from "./onInterrupt.js";
38
43
  export * from "./provide.js";
44
+ export * from "./result.js";
45
+ export * from "./scan.js";
39
46
  export * from "./skip.js";
40
47
  export * from "./skipRepeats.js";
48
+ export * from "./skipWhile.js";
41
49
  export * from "./skipRepeatsWith.js";
42
50
  export * from "./slice.js";
43
51
  export * from "./switchMap.js";
44
52
  export * from "./switchMapEffect.js";
45
53
  export * from "./take.js";
46
54
  export * from "./takeUntil.js";
55
+ export * from "./takeWhile.js";
47
56
  export * from "./tapEffect.js";
48
57
  export * from "./tuple.js";
49
58
  export * from "./unwrap.js";
50
59
  export * from "./unwrapScoped.js";
51
60
  export * from "./when.js";
61
+ export * from "./zip.js";
52
62
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Fx/combinators/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}