@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.
- package/README.md +24 -1
- package/dist/Fx/combinators/additive.d.ts +94 -0
- package/dist/Fx/combinators/additive.d.ts.map +1 -0
- package/dist/Fx/combinators/additive.js +92 -0
- package/dist/Fx/combinators/catch.d.ts +61 -0
- package/dist/Fx/combinators/catch.d.ts.map +1 -1
- package/dist/Fx/combinators/catch.js +54 -0
- package/dist/Fx/combinators/changesWithEffect.d.ts +20 -0
- package/dist/Fx/combinators/changesWithEffect.d.ts.map +1 -0
- package/dist/Fx/combinators/changesWithEffect.js +28 -0
- package/dist/Fx/combinators/dropUntil.d.ts +29 -0
- package/dist/Fx/combinators/dropUntil.d.ts.map +1 -0
- package/dist/Fx/combinators/dropUntil.js +23 -0
- package/dist/Fx/combinators/flatMapConcurrently.d.ts.map +1 -1
- package/dist/Fx/combinators/flatMapConcurrently.js +3 -2
- package/dist/Fx/combinators/index.d.ts +10 -0
- package/dist/Fx/combinators/index.d.ts.map +1 -1
- package/dist/Fx/combinators/index.js +10 -0
- package/dist/Fx/combinators/keyed.d.ts +1 -1
- package/dist/Fx/combinators/keyed.d.ts.map +1 -1
- package/dist/Fx/combinators/mapBoth.d.ts +21 -0
- package/dist/Fx/combinators/mapBoth.d.ts.map +1 -0
- package/dist/Fx/combinators/mapBoth.js +14 -0
- package/dist/Fx/combinators/mapError.d.ts +17 -0
- package/dist/Fx/combinators/mapError.d.ts.map +1 -0
- package/dist/Fx/combinators/mapError.js +16 -0
- package/dist/Fx/combinators/provide.d.ts +34 -1
- package/dist/Fx/combinators/provide.d.ts.map +1 -1
- package/dist/Fx/combinators/provide.js +27 -0
- package/dist/Fx/combinators/result.d.ts +23 -0
- package/dist/Fx/combinators/result.d.ts.map +1 -0
- package/dist/Fx/combinators/result.js +32 -0
- package/dist/Fx/combinators/scan.d.ts +33 -0
- package/dist/Fx/combinators/scan.d.ts.map +1 -0
- package/dist/Fx/combinators/scan.js +38 -0
- package/dist/Fx/combinators/skip.d.ts +13 -0
- package/dist/Fx/combinators/skip.d.ts.map +1 -1
- package/dist/Fx/combinators/skip.js +11 -0
- package/dist/Fx/combinators/skipWhile.d.ts +49 -0
- package/dist/Fx/combinators/skipWhile.d.ts.map +1 -0
- package/dist/Fx/combinators/skipWhile.js +66 -0
- package/dist/Fx/combinators/slice.d.ts +13 -0
- package/dist/Fx/combinators/slice.d.ts.map +1 -1
- package/dist/Fx/combinators/slice.js +11 -0
- package/dist/Fx/combinators/take.d.ts +13 -0
- package/dist/Fx/combinators/take.d.ts.map +1 -1
- package/dist/Fx/combinators/take.js +11 -0
- package/dist/Fx/combinators/takeUntil.d.ts +14 -0
- package/dist/Fx/combinators/takeUntil.d.ts.map +1 -1
- package/dist/Fx/combinators/takeUntil.js +14 -0
- package/dist/Fx/combinators/takeWhile.d.ts +29 -0
- package/dist/Fx/combinators/takeWhile.d.ts.map +1 -0
- package/dist/Fx/combinators/takeWhile.js +23 -0
- package/dist/Fx/combinators/zip.d.ts +75 -0
- package/dist/Fx/combinators/zip.d.ts.map +1 -0
- package/dist/Fx/combinators/zip.js +100 -0
- package/dist/Fx/constructors/at.d.ts +2 -2
- package/dist/Fx/constructors/at.d.ts.map +1 -1
- package/dist/Fx/constructors/periodic.d.ts +1 -1
- package/dist/Fx/constructors/periodic.d.ts.map +1 -1
- package/dist/Push/Push.d.ts +64 -1
- package/dist/Push/Push.d.ts.map +1 -1
- package/dist/Push/Push.js +57 -0
- package/dist/RefSubject/RefDateTime.d.ts +4 -4
- package/dist/RefSubject/RefDateTime.d.ts.map +1 -1
- package/dist/RefSubject/RefSubject.d.ts +47 -0
- package/dist/RefSubject/RefSubject.d.ts.map +1 -1
- package/dist/RefSubject/RefSubject.js +80 -1
- package/dist/Sink/combinators.d.ts +57 -0
- package/dist/Sink/combinators.d.ts.map +1 -1
- package/dist/Sink/combinators.js +104 -1
- package/dist/Versioned/Versioned.d.ts +30 -0
- package/dist/Versioned/Versioned.d.ts.map +1 -1
- package/dist/Versioned/Versioned.js +18 -0
- package/package.json +16 -12
- package/src/Fx/combinators/additive.ts +142 -0
- package/src/Fx/combinators/catch.ts +256 -0
- package/src/Fx/combinators/changesWithEffect.ts +66 -0
- package/src/Fx/combinators/dropUntil.ts +47 -0
- package/src/Fx/combinators/flatMapConcurrently.ts +5 -2
- package/src/Fx/combinators/index.ts +10 -0
- package/src/Fx/combinators/keyed.ts +2 -2
- package/src/Fx/combinators/mapBoth.ts +40 -0
- package/src/Fx/combinators/mapError.ts +28 -0
- package/src/Fx/combinators/provide.ts +63 -1
- package/src/Fx/combinators/result.ts +39 -0
- package/src/Fx/combinators/scan.ts +82 -0
- package/src/Fx/combinators/skip.ts +21 -0
- package/src/Fx/combinators/skipWhile.ts +100 -0
- package/src/Fx/combinators/slice.ts +23 -0
- package/src/Fx/combinators/take.ts +21 -0
- package/src/Fx/combinators/takeUntil.ts +38 -0
- package/src/Fx/combinators/takeWhile.ts +47 -0
- package/src/Fx/combinators/zip.ts +175 -0
- package/src/Fx/constructors/at.ts +3 -3
- package/src/Fx/constructors/periodic.ts +1 -1
- package/src/Fx.additive-combinators.test.ts +126 -0
- package/src/Fx.catch-additive.test.ts +206 -0
- package/src/Fx.catch.test.ts +1 -2
- package/src/Fx.dropUntil.test.ts +61 -0
- package/src/Fx.lifecycle.test.ts +1 -2
- package/src/Fx.mapError-mapBoth.test.ts +101 -0
- package/src/Fx.provide-combinators.test.ts +94 -0
- package/src/Fx.result-changesWithEffect.test.ts +112 -0
- package/src/Fx.scan.test.ts +73 -0
- package/src/Fx.takeWhile-skipWhile.test.ts +84 -0
- package/src/Fx.zip-merge-additive.test.ts +171 -0
- package/src/Fx.zip.test.ts +133 -0
- package/src/Push/Push.ts +170 -1
- package/src/Push.additive.test.ts +256 -0
- package/src/RefSubject/RefDateTime.ts +6 -6
- package/src/RefSubject/RefSubject.ts +104 -3
- package/src/RefSubject.additive-parity.test.ts +101 -0
- package/src/Sink/combinators.ts +123 -1
- package/src/Sink.combinators.test.ts +88 -0
- package/src/Sink.reduce-collect-head-last.test.ts +107 -0
- package/src/Versioned/Versioned.ts +76 -0
- package/src/Versioned.filterMap.test.ts +91 -0
- 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":"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"}
|
|
@@ -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":"
|
|
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*
|
|
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"}
|