@typed/fx 1.22.2 → 1.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/AsyncData.js.map +1 -1
- package/dist/cjs/Form.js.map +1 -1
- package/dist/cjs/FormEntry.js.map +1 -1
- package/dist/cjs/Fx.js +1 -1
- package/dist/cjs/Fx.js.map +1 -1
- package/dist/cjs/Idle.js.map +1 -1
- package/dist/cjs/Match.js.map +1 -1
- package/dist/cjs/Pull.js +5 -3
- package/dist/cjs/Pull.js.map +1 -1
- package/dist/cjs/RefArray.js.map +1 -1
- package/dist/cjs/RefChunk.js.map +1 -1
- package/dist/cjs/RefHashSet.js.map +1 -1
- package/dist/cjs/RefSubject.js +3 -2
- package/dist/cjs/RefSubject.js.map +1 -1
- package/dist/cjs/Sink.js.map +1 -1
- package/dist/cjs/Subject.js.map +1 -1
- package/dist/cjs/Versioned.js.map +1 -1
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/helpers.js.map +1 -1
- package/dist/cjs/internal/keyed.js +1 -1
- package/dist/cjs/internal/keyed.js.map +1 -1
- package/dist/cjs/internal/provide.js.map +1 -1
- package/dist/cjs/internal/share.js.map +1 -1
- package/dist/cjs/internal/sync-producer.js.map +1 -1
- package/dist/dts/AsyncData.d.ts +53 -53
- package/dist/dts/AsyncData.d.ts.map +1 -1
- package/dist/dts/Emitter.d.ts +7 -7
- package/dist/dts/Emitter.d.ts.map +1 -1
- package/dist/dts/Form.d.ts +14 -14
- package/dist/dts/Form.d.ts.map +1 -1
- package/dist/dts/FormEntry.d.ts +11 -11
- package/dist/dts/FormEntry.d.ts.map +1 -1
- package/dist/dts/Fx.d.ts +417 -417
- package/dist/dts/Fx.d.ts.map +1 -1
- package/dist/dts/Guard.d.ts +21 -21
- package/dist/dts/Guard.d.ts.map +1 -1
- package/dist/dts/Idle.d.ts +12 -12
- package/dist/dts/Idle.d.ts.map +1 -1
- package/dist/dts/Match.d.ts +16 -16
- package/dist/dts/Match.d.ts.map +1 -1
- package/dist/dts/Pull.d.ts +5 -5
- package/dist/dts/Pull.d.ts.map +1 -1
- package/dist/dts/Push.d.ts +40 -40
- package/dist/dts/Push.d.ts.map +1 -1
- package/dist/dts/RefArray.d.ts +59 -59
- package/dist/dts/RefArray.d.ts.map +1 -1
- package/dist/dts/RefChunk.d.ts +45 -45
- package/dist/dts/RefChunk.d.ts.map +1 -1
- package/dist/dts/RefHashMap.d.ts +35 -35
- package/dist/dts/RefHashMap.d.ts.map +1 -1
- package/dist/dts/RefHashSet.d.ts +17 -17
- package/dist/dts/RefHashSet.d.ts.map +1 -1
- package/dist/dts/RefSubject.d.ts +136 -136
- package/dist/dts/RefSubject.d.ts.map +1 -1
- package/dist/dts/Sink.d.ts +63 -63
- package/dist/dts/Sink.d.ts.map +1 -1
- package/dist/dts/Stream.d.ts +11 -11
- package/dist/dts/Stream.d.ts.map +1 -1
- package/dist/dts/Subject.d.ts +13 -13
- package/dist/dts/Subject.d.ts.map +1 -1
- package/dist/dts/Typeclass.d.ts +1 -1
- package/dist/dts/Typeclass.d.ts.map +1 -1
- package/dist/dts/Versioned.d.ts +33 -33
- package/dist/dts/Versioned.d.ts.map +1 -1
- package/dist/dts/index.d.ts +1 -1
- package/dist/dts/internal/DeferredRef.d.ts +8 -8
- package/dist/dts/internal/DeferredRef.d.ts.map +1 -1
- package/dist/dts/internal/core.d.ts +191 -191
- package/dist/dts/internal/core.d.ts.map +1 -1
- package/dist/dts/internal/effect-loop-operator.d.ts +6 -6
- package/dist/dts/internal/effect-loop-operator.d.ts.map +1 -1
- package/dist/dts/internal/effect-operator.d.ts +16 -16
- package/dist/dts/internal/effect-operator.d.ts.map +1 -1
- package/dist/dts/internal/effect-producer.d.ts +13 -13
- package/dist/dts/internal/effect-producer.d.ts.map +1 -1
- package/dist/dts/internal/helpers.d.ts +26 -26
- package/dist/dts/internal/helpers.d.ts.map +1 -1
- package/dist/dts/internal/keyed.d.ts +1 -1
- package/dist/dts/internal/keyed.d.ts.map +1 -1
- package/dist/dts/internal/loop-operator.d.ts +2 -2
- package/dist/dts/internal/loop-operator.d.ts.map +1 -1
- package/dist/dts/internal/operator.d.ts +2 -2
- package/dist/dts/internal/operator.d.ts.map +1 -1
- package/dist/dts/internal/protos.d.ts +12 -12
- package/dist/dts/internal/protos.d.ts.map +1 -1
- package/dist/dts/internal/provide.d.ts +15 -15
- package/dist/dts/internal/provide.d.ts.map +1 -1
- package/dist/dts/internal/share.d.ts +11 -11
- package/dist/dts/internal/share.d.ts.map +1 -1
- package/dist/dts/internal/sync-operator.d.ts +2 -2
- package/dist/dts/internal/sync-operator.d.ts.map +1 -1
- package/dist/dts/internal/sync-producer.d.ts +6 -6
- package/dist/dts/internal/sync-producer.d.ts.map +1 -1
- package/dist/dts/internal/withKey.d.ts +1 -1
- package/dist/dts/internal/withKey.d.ts.map +1 -1
- package/dist/esm/AsyncData.js.map +1 -1
- package/dist/esm/Form.js.map +1 -1
- package/dist/esm/FormEntry.js.map +1 -1
- package/dist/esm/Fx.js +1 -1
- package/dist/esm/Fx.js.map +1 -1
- package/dist/esm/Idle.js.map +1 -1
- package/dist/esm/Match.js.map +1 -1
- package/dist/esm/Pull.js +3 -3
- package/dist/esm/Pull.js.map +1 -1
- package/dist/esm/RefArray.js.map +1 -1
- package/dist/esm/RefChunk.js.map +1 -1
- package/dist/esm/RefHashSet.js.map +1 -1
- package/dist/esm/RefSubject.js +3 -1
- package/dist/esm/RefSubject.js.map +1 -1
- package/dist/esm/Sink.js.map +1 -1
- package/dist/esm/Subject.js.map +1 -1
- package/dist/esm/Versioned.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/helpers.js.map +1 -1
- package/dist/esm/internal/keyed.js +1 -1
- package/dist/esm/internal/keyed.js.map +1 -1
- package/dist/esm/internal/provide.js.map +1 -1
- package/dist/esm/internal/share.js.map +1 -1
- package/dist/esm/internal/sync-producer.js.map +1 -1
- package/package.json +6 -6
- package/src/AsyncData.ts +142 -144
- package/src/Emitter.ts +13 -13
- package/src/Form.ts +55 -55
- package/src/FormEntry.ts +39 -39
- package/src/Fx.ts +788 -789
- package/src/Guard.ts +43 -43
- package/src/Idle.ts +26 -26
- package/src/Match.ts +60 -61
- package/src/Pull.ts +42 -43
- package/src/Push.ts +195 -195
- package/src/RefArray.ts +121 -119
- package/src/RefChunk.ts +98 -97
- package/src/RefHashMap.ts +79 -79
- package/src/RefHashSet.ts +40 -39
- package/src/RefSubject.ts +574 -565
- package/src/Sink.ts +303 -303
- package/src/Stream.ts +27 -27
- package/src/Subject.ts +48 -46
- package/src/Typeclass.ts +2 -2
- package/src/Versioned.ts +97 -97
- package/src/index.ts +1 -1
- package/src/internal/DeferredRef.ts +7 -7
- package/src/internal/core.ts +768 -781
- package/src/internal/effect-loop-operator.ts +7 -7
- package/src/internal/effect-operator.ts +23 -23
- package/src/internal/effect-producer.ts +38 -38
- package/src/internal/helpers.ts +51 -51
- package/src/internal/keyed.ts +21 -21
- package/src/internal/loop-operator.ts +2 -2
- package/src/internal/operator.ts +2 -2
- package/src/internal/protos.ts +15 -15
- package/src/internal/provide.ts +27 -27
- package/src/internal/share.ts +25 -25
- package/src/internal/sync-operator.ts +4 -4
- package/src/internal/sync-producer.ts +15 -15
- package/src/internal/withKey.ts +13 -13
package/src/AsyncData.ts
CHANGED
|
@@ -20,7 +20,7 @@ import { RefSubjectTypeId } from "./TypeId.js"
|
|
|
20
20
|
/**
|
|
21
21
|
* @since 1.20.0
|
|
22
22
|
*/
|
|
23
|
-
export function asyncDataRequest<
|
|
23
|
+
export function asyncDataRequest<A, E, R>(effect: Effect.Effect<A, E, R>): Fx.Fx<AsyncData.AsyncData<A, E>, never, R> {
|
|
24
24
|
return Fx.make((sink) =>
|
|
25
25
|
Effect.flatMap(
|
|
26
26
|
Effect.zipRight(sink.onSuccess(AsyncData.loading()), Effect.exit(effect)),
|
|
@@ -32,23 +32,25 @@ export function asyncDataRequest<R, E, A>(effect: Effect.Effect<R, E, A>): Fx.Fx
|
|
|
32
32
|
/**
|
|
33
33
|
* @since 1.20.0
|
|
34
34
|
*/
|
|
35
|
-
export interface RefAsyncData<
|
|
35
|
+
export interface RefAsyncData<A, E = never, R = never>
|
|
36
|
+
extends RefSubject.RefSubject<AsyncData.AsyncData<A, E>, never, R>
|
|
37
|
+
{}
|
|
36
38
|
|
|
37
39
|
/**
|
|
38
40
|
* @since 1.20.0
|
|
39
41
|
*/
|
|
40
42
|
export const runAsyncData: {
|
|
41
|
-
<R2,
|
|
42
|
-
effect: Effect.Effect<
|
|
43
|
-
): <R>(ref: RefAsyncData<
|
|
44
|
-
<
|
|
45
|
-
ref: RefAsyncData<
|
|
46
|
-
effect: Effect.Effect<
|
|
47
|
-
): Effect.Effect<
|
|
48
|
-
} = dual(2, function runAsyncData<
|
|
49
|
-
ref: RefAsyncData<
|
|
50
|
-
effect: Effect.Effect<
|
|
51
|
-
): Effect.Effect<
|
|
43
|
+
<R2, A, E>(
|
|
44
|
+
effect: Effect.Effect<A, E, R2>
|
|
45
|
+
): <R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
|
|
46
|
+
<A, E, R, R2>(
|
|
47
|
+
ref: RefAsyncData<A, E, R>,
|
|
48
|
+
effect: Effect.Effect<A, E, R2>
|
|
49
|
+
): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
|
|
50
|
+
} = dual(2, function runAsyncData<A, E, R, R2>(
|
|
51
|
+
ref: RefAsyncData<A, E, R>,
|
|
52
|
+
effect: Effect.Effect<A, E, R2>
|
|
53
|
+
): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2> {
|
|
52
54
|
return ref.runUpdates(({ get, set }) =>
|
|
53
55
|
Effect.uninterruptibleMask((restore) =>
|
|
54
56
|
Effect.flatMap(
|
|
@@ -66,52 +68,52 @@ export const runAsyncData: {
|
|
|
66
68
|
* @since 1.20.0
|
|
67
69
|
*/
|
|
68
70
|
export const matchAsyncData: {
|
|
69
|
-
<E1, A,
|
|
71
|
+
<E1, A, B, E2, R2, C, E3, R3, D, E4, R4, F, E5, R5>(
|
|
70
72
|
matchers: {
|
|
71
|
-
readonly NoData: Fx.Fx<
|
|
72
|
-
readonly Loading: (progress: RefSubject.Filtered<
|
|
73
|
-
readonly Failure: (error: RefSubject.Computed<
|
|
74
|
-
readonly Success: (value: RefSubject.RefSubject<
|
|
73
|
+
readonly NoData: Fx.Fx<B, E2, R2>
|
|
74
|
+
readonly Loading: (progress: RefSubject.Filtered<Progress>) => Fx.Fx<C, E3, R3>
|
|
75
|
+
readonly Failure: (error: RefSubject.Computed<E1>) => Fx.Fx<D, E4, R4>
|
|
76
|
+
readonly Success: (value: RefSubject.RefSubject<A>) => Fx.Fx<F, E5, R5>
|
|
75
77
|
}
|
|
76
|
-
): <
|
|
77
|
-
fx: Fx.Fx<
|
|
78
|
-
) => Fx.Fx<
|
|
78
|
+
): <E, R>(
|
|
79
|
+
fx: Fx.Fx<AsyncData.AsyncData<A, E1>, E, R>
|
|
80
|
+
) => Fx.Fx<B | C | D | F, E | E2 | E3 | E4 | E5, R | R2 | R3 | R4 | R5>
|
|
79
81
|
|
|
80
|
-
<R, E, E1, A,
|
|
81
|
-
readonly NoData: Fx.Fx<
|
|
82
|
-
readonly Loading: (progress: RefSubject.Filtered<
|
|
83
|
-
readonly Failure: (error: RefSubject.Computed<
|
|
84
|
-
readonly Success: (value: RefSubject.RefSubject<
|
|
85
|
-
}): Fx.Fx<
|
|
86
|
-
} = dual(2, function matchAsyncData<R, E, E1, A,
|
|
87
|
-
fx: Fx.Fx<
|
|
82
|
+
<R, E, E1, A, B, E2, R2, C, E3, R3, D, E4, R4, F, E5, R5>(fx: Fx.Fx<AsyncData.AsyncData<A, E1>, E, R>, matchers: {
|
|
83
|
+
readonly NoData: Fx.Fx<B, E2, R2>
|
|
84
|
+
readonly Loading: (progress: RefSubject.Filtered<Progress>) => Fx.Fx<C, E3, R3>
|
|
85
|
+
readonly Failure: (error: RefSubject.Computed<E1>) => Fx.Fx<D, E4, R4>
|
|
86
|
+
readonly Success: (value: RefSubject.RefSubject<A>) => Fx.Fx<F, E5, R5>
|
|
87
|
+
}): Fx.Fx<B | C | D | F, E | E2 | E3 | E4 | E5, R | R2 | R3 | R4 | R5>
|
|
88
|
+
} = dual(2, function matchAsyncData<R, E, E1, A, B, E2, R2, C, E3, R3, D, E4, R4, F, E5, R5>(
|
|
89
|
+
fx: Fx.Fx<AsyncData.AsyncData<A, E1>, E, R>,
|
|
88
90
|
matchers: {
|
|
89
|
-
readonly NoData: Fx.Fx<
|
|
90
|
-
readonly Loading: (progress: RefSubject.Filtered<
|
|
91
|
+
readonly NoData: Fx.Fx<B, E2, R2>
|
|
92
|
+
readonly Loading: (progress: RefSubject.Filtered<Progress>) => Fx.Fx<C, E3, R3>
|
|
91
93
|
readonly Failure: (
|
|
92
|
-
error: RefSubject.Computed<
|
|
93
|
-
failure: RefSubject.RefSubject<
|
|
94
|
-
) => Fx.Fx<
|
|
94
|
+
error: RefSubject.Computed<E1>,
|
|
95
|
+
failure: RefSubject.RefSubject<AsyncData.Failure<E1>>
|
|
96
|
+
) => Fx.Fx<D, E4, R4>
|
|
95
97
|
readonly Success: (
|
|
96
|
-
value: RefSubject.RefSubject<
|
|
97
|
-
data: RefSubject.RefSubject<
|
|
98
|
-
) => Fx.Fx<
|
|
98
|
+
value: RefSubject.RefSubject<A>,
|
|
99
|
+
data: RefSubject.RefSubject<AsyncData.Success<A> | AsyncData.Optimistic<A, E1>>
|
|
100
|
+
) => Fx.Fx<F, E5, R5>
|
|
99
101
|
}
|
|
100
|
-
): Fx.Fx<
|
|
102
|
+
): Fx.Fx<B | C | D | F, E | E2 | E3 | E4 | E5, R | R2 | R3 | R4 | R5> {
|
|
101
103
|
return Fx.withKey(
|
|
102
104
|
fx,
|
|
103
105
|
{
|
|
104
|
-
getKey: (a: AsyncData.AsyncData<
|
|
105
|
-
onValue: (ref, key): Fx.Fx<
|
|
106
|
+
getKey: (a: AsyncData.AsyncData<A, E1>) => a._tag === "Optimistic" ? "Success" : a._tag,
|
|
107
|
+
onValue: (ref, key): Fx.Fx<B | C | D | F, E | E2 | E3 | E4 | E5, R | R2 | R3 | R4 | R5> => {
|
|
106
108
|
switch (key) {
|
|
107
109
|
case "NoData":
|
|
108
110
|
return matchers.NoData
|
|
109
111
|
case "Loading":
|
|
110
112
|
return matchers.Loading(
|
|
111
|
-
RefSubject.filterMap(ref as RefSubject.RefSubject<
|
|
113
|
+
RefSubject.filterMap(ref as RefSubject.RefSubject<AsyncData.Loading>, (l) => l.progress)
|
|
112
114
|
)
|
|
113
115
|
case "Failure": {
|
|
114
|
-
const failure = ref as RefSubject.RefSubject<
|
|
116
|
+
const failure = ref as RefSubject.RefSubject<AsyncData.Failure<E1>>
|
|
115
117
|
return matchers.Failure(
|
|
116
118
|
RefSubject.mapEffect(
|
|
117
119
|
failure,
|
|
@@ -125,11 +127,7 @@ export const matchAsyncData: {
|
|
|
125
127
|
)
|
|
126
128
|
}
|
|
127
129
|
case "Success": {
|
|
128
|
-
const success = ref as RefSubject.RefSubject<
|
|
129
|
-
never,
|
|
130
|
-
never,
|
|
131
|
-
AsyncData.Success<A> | AsyncData.Optimistic<E1, A>
|
|
132
|
-
>
|
|
130
|
+
const success = ref as RefSubject.RefSubject<AsyncData.Success<A> | AsyncData.Optimistic<A, E1>>
|
|
133
131
|
|
|
134
132
|
return matchers.Success(
|
|
135
133
|
RefSubject.transformOrFail(
|
|
@@ -138,7 +136,7 @@ export const matchAsyncData: {
|
|
|
138
136
|
(value) =>
|
|
139
137
|
Effect.map(
|
|
140
138
|
success,
|
|
141
|
-
(d) => AsyncData.map(d, () => value) as AsyncData.Success<A> | AsyncData.Optimistic<
|
|
139
|
+
(d) => AsyncData.map(d, () => value) as AsyncData.Success<A> | AsyncData.Optimistic<A, E1>
|
|
142
140
|
)
|
|
143
141
|
),
|
|
144
142
|
success
|
|
@@ -154,43 +152,43 @@ export const matchAsyncData: {
|
|
|
154
152
|
* @since 1.20.0
|
|
155
153
|
*/
|
|
156
154
|
export const matchAsyncDataArray: {
|
|
157
|
-
<E1, A, K extends PropertyKey,
|
|
155
|
+
<E1, A, K extends PropertyKey, B, E2, R2, C, E3, R3, D, E4, R4, F, E5, R5>(
|
|
158
156
|
getKey: (a: A) => K,
|
|
159
157
|
matchers: {
|
|
160
|
-
readonly NoData: Fx.Fx<
|
|
161
|
-
readonly Loading: (progress: RefSubject.Filtered<
|
|
162
|
-
readonly Failure: (error: RefSubject.Computed<
|
|
163
|
-
readonly Success: (value: RefSubject.RefSubject<
|
|
158
|
+
readonly NoData: Fx.Fx<B, E2, R2>
|
|
159
|
+
readonly Loading: (progress: RefSubject.Filtered<Progress>) => Fx.Fx<C, E3, R3>
|
|
160
|
+
readonly Failure: (error: RefSubject.Computed<E1>) => Fx.Fx<D, E4, R4>
|
|
161
|
+
readonly Success: (value: RefSubject.RefSubject<A>, key: K) => Fx.Fx<F, E5, R5>
|
|
164
162
|
}
|
|
165
|
-
): <
|
|
166
|
-
fx: Fx.Fx<
|
|
167
|
-
) => Fx.Fx<
|
|
163
|
+
): <E, R>(
|
|
164
|
+
fx: Fx.Fx<AsyncData.AsyncData<ReadonlyArray<A>, E1>, E, R>
|
|
165
|
+
) => Fx.Fx<B | C | D | ReadonlyArray<F>, E | E2 | E3 | E4 | E5, Scope.Scope | R | R2 | R3 | R4 | R5>
|
|
168
166
|
|
|
169
|
-
<R, E, E1, A, K extends PropertyKey,
|
|
170
|
-
fx: Fx.Fx<
|
|
167
|
+
<R, E, E1, A, K extends PropertyKey, B, E2, R2, C, E3, R3, D, E4, R4, F, E5, R5>(
|
|
168
|
+
fx: Fx.Fx<AsyncData.AsyncData<ReadonlyArray<A>, E1>, E, R>,
|
|
171
169
|
getKey: (a: A) => K,
|
|
172
170
|
matchers: {
|
|
173
|
-
readonly NoData: Fx.Fx<
|
|
174
|
-
readonly Loading: (progress: RefSubject.Filtered<
|
|
175
|
-
readonly Failure: (error: RefSubject.Computed<
|
|
176
|
-
readonly Success: (value: RefSubject.RefSubject<
|
|
171
|
+
readonly NoData: Fx.Fx<B, E2, R2>
|
|
172
|
+
readonly Loading: (progress: RefSubject.Filtered<Progress>) => Fx.Fx<C, E3, R3>
|
|
173
|
+
readonly Failure: (error: RefSubject.Computed<E1>) => Fx.Fx<D, E4, R4>
|
|
174
|
+
readonly Success: (value: RefSubject.RefSubject<A>, key: K) => Fx.Fx<F, E5, R5>
|
|
177
175
|
}
|
|
178
|
-
): Fx.Fx<
|
|
176
|
+
): Fx.Fx<B | C | D | ReadonlyArray<F>, E | E2 | E3 | E4 | E5, Scope.Scope | R | R2 | R3 | R4 | R5>
|
|
179
177
|
} = dual(
|
|
180
178
|
3,
|
|
181
|
-
function matchAsyncDataArray<R, E, E1, A, K extends PropertyKey,
|
|
182
|
-
fx: Fx.Fx<
|
|
179
|
+
function matchAsyncDataArray<R, E, E1, A, K extends PropertyKey, B, E2, R2, C, E3, R3, D, E4, R4, F, E5, R5>(
|
|
180
|
+
fx: Fx.Fx<AsyncData.AsyncData<ReadonlyArray<A>, E1>, E, R>,
|
|
183
181
|
getKey: (a: A) => K,
|
|
184
182
|
matchers: {
|
|
185
|
-
readonly NoData: Fx.Fx<
|
|
186
|
-
readonly Loading: (progress: RefSubject.Filtered<
|
|
183
|
+
readonly NoData: Fx.Fx<B, E2, R2>
|
|
184
|
+
readonly Loading: (progress: RefSubject.Filtered<Progress>) => Fx.Fx<C, E3, R3>
|
|
187
185
|
readonly Failure: (
|
|
188
|
-
error: RefSubject.Computed<
|
|
189
|
-
) => Fx.Fx<
|
|
186
|
+
error: RefSubject.Computed<E1>
|
|
187
|
+
) => Fx.Fx<D, E4, R4>
|
|
190
188
|
readonly Success: (
|
|
191
|
-
value: RefSubject.RefSubject<
|
|
189
|
+
value: RefSubject.RefSubject<A>,
|
|
192
190
|
key: K
|
|
193
|
-
) => Fx.Fx<
|
|
191
|
+
) => Fx.Fx<F, E5, R5>
|
|
194
192
|
}
|
|
195
193
|
) {
|
|
196
194
|
return matchAsyncData(fx, {
|
|
@@ -206,17 +204,17 @@ export const matchAsyncDataArray: {
|
|
|
206
204
|
* @since 1.20.0
|
|
207
205
|
*/
|
|
208
206
|
export const runIfNoData: {
|
|
209
|
-
<R2,
|
|
210
|
-
effect: Effect.Effect<
|
|
211
|
-
): <R>(ref: RefAsyncData<
|
|
212
|
-
<
|
|
213
|
-
ref: RefAsyncData<
|
|
214
|
-
effect: Effect.Effect<
|
|
215
|
-
): Effect.Effect<
|
|
216
|
-
} = dual(2, function runIfNoData<
|
|
217
|
-
ref: RefAsyncData<
|
|
218
|
-
effect: Effect.Effect<
|
|
219
|
-
): Effect.Effect<
|
|
207
|
+
<R2, A, E>(
|
|
208
|
+
effect: Effect.Effect<A, E, R2>
|
|
209
|
+
): <R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
|
|
210
|
+
<A, E, R, R2>(
|
|
211
|
+
ref: RefAsyncData<A, E, R>,
|
|
212
|
+
effect: Effect.Effect<A, E, R2>
|
|
213
|
+
): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
|
|
214
|
+
} = dual(2, function runIfNoData<A, E, R, R2>(
|
|
215
|
+
ref: RefAsyncData<A, E, R>,
|
|
216
|
+
effect: Effect.Effect<A, E, R2>
|
|
217
|
+
): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2> {
|
|
220
218
|
return Effect.flatMap(
|
|
221
219
|
ref,
|
|
222
220
|
(current) => AsyncData.isNoData(current) ? runAsyncData(ref, effect) : Effect.succeed(current)
|
|
@@ -227,21 +225,21 @@ export const runIfNoData: {
|
|
|
227
225
|
* @since 1.20.0
|
|
228
226
|
*/
|
|
229
227
|
export const runIfExpired: {
|
|
230
|
-
<R2,
|
|
231
|
-
effect: Effect.Effect<
|
|
228
|
+
<R2, A, E>(
|
|
229
|
+
effect: Effect.Effect<A, E, R2>,
|
|
232
230
|
options: { readonly ttl: Duration.DurationInput; readonly now?: number }
|
|
233
|
-
): <R>(ref: RefAsyncData<
|
|
231
|
+
): <R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
|
|
234
232
|
|
|
235
|
-
<
|
|
236
|
-
ref: RefAsyncData<
|
|
237
|
-
effect: Effect.Effect<
|
|
233
|
+
<A, E, R, R2>(
|
|
234
|
+
ref: RefAsyncData<A, E, R>,
|
|
235
|
+
effect: Effect.Effect<A, E, R2>,
|
|
238
236
|
options: { readonly ttl: Duration.DurationInput; readonly now?: number }
|
|
239
|
-
): Effect.Effect<
|
|
240
|
-
} = dual(3, function runIfExpired<
|
|
241
|
-
ref: RefAsyncData<
|
|
242
|
-
effect: Effect.Effect<
|
|
237
|
+
): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2>
|
|
238
|
+
} = dual(3, function runIfExpired<A, E, R, R2>(
|
|
239
|
+
ref: RefAsyncData<A, E, R>,
|
|
240
|
+
effect: Effect.Effect<A, E, R2>,
|
|
243
241
|
{ now, ttl }: { readonly ttl: Duration.DurationInput; readonly now?: number }
|
|
244
|
-
): Effect.Effect<
|
|
242
|
+
): Effect.Effect<AsyncData.AsyncData<A, E>, never, R | R2> {
|
|
245
243
|
return Effect.flatMap(
|
|
246
244
|
ref,
|
|
247
245
|
(current) => AsyncData.isExpired(current, ttl, now) ? runAsyncData(ref, effect) : Effect.succeed(current)
|
|
@@ -253,9 +251,9 @@ export const runIfExpired: {
|
|
|
253
251
|
* @since 1.20.0
|
|
254
252
|
* @category updates
|
|
255
253
|
*/
|
|
256
|
-
export const awaitLoading = <
|
|
257
|
-
data: RefAsyncData<
|
|
258
|
-
): Effect.Effect<
|
|
254
|
+
export const awaitLoading = <A, E, R>(
|
|
255
|
+
data: RefAsyncData<A, E, R>
|
|
256
|
+
): Effect.Effect<Exclude<AsyncData.AsyncData<A, E>, AsyncData.Loading>, never, R | Scope.Scope> =>
|
|
259
257
|
data.pipe(
|
|
260
258
|
Fx.dropWhile(AsyncData.isLoading),
|
|
261
259
|
Fx.take(1),
|
|
@@ -268,9 +266,9 @@ export const awaitLoading = <R, E, A>(
|
|
|
268
266
|
* @since 1.20.0
|
|
269
267
|
* @category updates
|
|
270
268
|
*/
|
|
271
|
-
export const awaitLoadingOrRefreshing = <
|
|
272
|
-
data: RefAsyncData<
|
|
273
|
-
): Effect.Effect<
|
|
269
|
+
export const awaitLoadingOrRefreshing = <A, E, R>(
|
|
270
|
+
data: RefAsyncData<A, E, R>
|
|
271
|
+
): Effect.Effect<Exclude<AsyncData.AsyncData<A, E>, AsyncData.Loading>, never, R | Scope.Scope> =>
|
|
274
272
|
data.pipe(
|
|
275
273
|
Fx.dropWhile(AsyncData.isLoadingOrRefreshing),
|
|
276
274
|
Fx.take(1),
|
|
@@ -283,9 +281,9 @@ export const awaitLoadingOrRefreshing = <R, E, A>(
|
|
|
283
281
|
* @since 1.20.0
|
|
284
282
|
* @category updates
|
|
285
283
|
*/
|
|
286
|
-
export const startLoading: <
|
|
287
|
-
ref: RefAsyncData<
|
|
288
|
-
) => Effect.Effect<
|
|
284
|
+
export const startLoading: <A, E, R>(
|
|
285
|
+
ref: RefAsyncData<A, E, R>
|
|
286
|
+
) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R> = <A, E, R>(ref: RefAsyncData<A, E, R>) =>
|
|
289
287
|
RefSubject.update(ref, AsyncData.startLoading)
|
|
290
288
|
|
|
291
289
|
/**
|
|
@@ -293,9 +291,9 @@ export const startLoading: <R, E, A>(
|
|
|
293
291
|
* @since 1.20.0
|
|
294
292
|
* @category updates
|
|
295
293
|
*/
|
|
296
|
-
export const stopLoading: <
|
|
297
|
-
ref: RefAsyncData<
|
|
298
|
-
) => Effect.Effect<
|
|
294
|
+
export const stopLoading: <A, E, R>(
|
|
295
|
+
ref: RefAsyncData<A, E, R>
|
|
296
|
+
) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R> = <A, E, R>(ref: RefAsyncData<A, E, R>) =>
|
|
299
297
|
RefSubject.update(ref, AsyncData.stopLoading)
|
|
300
298
|
|
|
301
299
|
/**
|
|
@@ -303,7 +301,7 @@ export const stopLoading: <R, E, A>(
|
|
|
303
301
|
* @since 1.20.0
|
|
304
302
|
* @category conversions
|
|
305
303
|
*/
|
|
306
|
-
export const asSink = <
|
|
304
|
+
export const asSink = <A, E, R>(ref: RefAsyncData<A, E, R>): Sink.Sink<A, E, R> =>
|
|
307
305
|
Sink.make(
|
|
308
306
|
(cause) => RefSubject.set(ref, AsyncData.failCause(cause)),
|
|
309
307
|
(a) => RefSubject.set(ref, AsyncData.success(a))
|
|
@@ -313,19 +311,19 @@ export const asSink = <R, E, A>(ref: RefAsyncData<R, E, A>): Sink.Sink<R, E, A>
|
|
|
313
311
|
* Map the input value using an Effect
|
|
314
312
|
* @since 1.20.0
|
|
315
313
|
*/
|
|
316
|
-
export const mapInputEffect = <
|
|
317
|
-
ref: RefAsyncData<
|
|
318
|
-
f: (b: B) => Effect.Effect<
|
|
319
|
-
): Sink.Sink<R | R2
|
|
314
|
+
export const mapInputEffect = <A, E, R, R2, B>(
|
|
315
|
+
ref: RefAsyncData<A, E, R>,
|
|
316
|
+
f: (b: B) => Effect.Effect<A, E, R2>
|
|
317
|
+
): Sink.Sink<B, E, R | R2> => Sink.mapEffect(asSink(ref), f)
|
|
320
318
|
|
|
321
319
|
/**
|
|
322
320
|
* Map the input value
|
|
323
321
|
* @since 1.20.0
|
|
324
322
|
*/
|
|
325
|
-
export const mapInput = <
|
|
326
|
-
ref: RefAsyncData<
|
|
323
|
+
export const mapInput = <A, E, R, B>(
|
|
324
|
+
ref: RefAsyncData<A, E, R>,
|
|
327
325
|
f: (b: B) => A
|
|
328
|
-
): Sink.Sink<
|
|
326
|
+
): Sink.Sink<B, E, R> => Sink.map(asSink(ref), f)
|
|
329
327
|
|
|
330
328
|
const isRefFirst = (args: IArguments) => args.length === 3 || RefSubjectTypeId in args[0]
|
|
331
329
|
|
|
@@ -337,15 +335,15 @@ export const failCause: {
|
|
|
337
335
|
<E>(
|
|
338
336
|
cause: Cause.Cause<E>,
|
|
339
337
|
options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
|
|
340
|
-
): <R, A>(ref: RefAsyncData<
|
|
338
|
+
): <R, A>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
|
|
341
339
|
|
|
342
|
-
<
|
|
343
|
-
ref: RefAsyncData<
|
|
340
|
+
<A, E, R>(
|
|
341
|
+
ref: RefAsyncData<A, E, R>,
|
|
344
342
|
cause: Cause.Cause<E>,
|
|
345
343
|
options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
|
|
346
|
-
): Effect.Effect<
|
|
347
|
-
} = dual(isRefFirst, <
|
|
348
|
-
ref: RefAsyncData<
|
|
344
|
+
): Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
|
|
345
|
+
} = dual(isRefFirst, <A, E, R>(
|
|
346
|
+
ref: RefAsyncData<A, E, R>,
|
|
349
347
|
cause: Cause.Cause<E>,
|
|
350
348
|
options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
|
|
351
349
|
) => RefSubject.set(ref, AsyncData.failCause(cause, options)))
|
|
@@ -358,15 +356,15 @@ export const fail: {
|
|
|
358
356
|
<E>(
|
|
359
357
|
error: E,
|
|
360
358
|
options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
|
|
361
|
-
): <R, A>(ref: RefAsyncData<
|
|
359
|
+
): <R, A>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
|
|
362
360
|
|
|
363
|
-
<
|
|
364
|
-
ref: RefAsyncData<
|
|
361
|
+
<A, E, R>(
|
|
362
|
+
ref: RefAsyncData<A, E, R>,
|
|
365
363
|
error: E,
|
|
366
364
|
options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
|
|
367
|
-
): Effect.Effect<
|
|
368
|
-
} = dual(isRefFirst, <
|
|
369
|
-
ref: RefAsyncData<
|
|
365
|
+
): Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
|
|
366
|
+
} = dual(isRefFirst, <A, E, R>(
|
|
367
|
+
ref: RefAsyncData<A, E, R>,
|
|
370
368
|
error: E,
|
|
371
369
|
options?: AsyncData.OptionalPartial<AsyncData.FailureOptions>
|
|
372
370
|
) => RefSubject.set(ref, AsyncData.fail(error, options)))
|
|
@@ -379,17 +377,17 @@ export const succeed: {
|
|
|
379
377
|
<A>(
|
|
380
378
|
value: A,
|
|
381
379
|
options?: AsyncData.OptionalPartial<AsyncData.SuccessOptions>
|
|
382
|
-
): <
|
|
380
|
+
): <E, R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
|
|
383
381
|
|
|
384
|
-
<
|
|
385
|
-
ref: RefAsyncData<
|
|
382
|
+
<A, E, R>(
|
|
383
|
+
ref: RefAsyncData<A, E, R>,
|
|
386
384
|
value: A,
|
|
387
385
|
options?: AsyncData.OptionalPartial<AsyncData.SuccessOptions>
|
|
388
|
-
): Effect.Effect<
|
|
386
|
+
): Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
|
|
389
387
|
} = dual(
|
|
390
388
|
isRefFirst,
|
|
391
|
-
<
|
|
392
|
-
ref: RefAsyncData<
|
|
389
|
+
<A, E, R>(
|
|
390
|
+
ref: RefAsyncData<A, E, R>,
|
|
393
391
|
value: A,
|
|
394
392
|
options?: AsyncData.OptionalPartial<AsyncData.SuccessOptions>
|
|
395
393
|
) => RefSubject.set(ref, AsyncData.success(value, options))
|
|
@@ -403,17 +401,17 @@ export const optimistic: {
|
|
|
403
401
|
<A>(
|
|
404
402
|
value: A,
|
|
405
403
|
options?: AsyncData.OptionalPartial<AsyncData.OptimisticOptions>
|
|
406
|
-
): <
|
|
404
|
+
): <E, R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
|
|
407
405
|
|
|
408
|
-
<
|
|
409
|
-
ref: RefAsyncData<
|
|
406
|
+
<A, E, R>(
|
|
407
|
+
ref: RefAsyncData<A, E, R>,
|
|
410
408
|
value: A,
|
|
411
409
|
options?: AsyncData.OptionalPartial<AsyncData.OptimisticOptions>
|
|
412
|
-
): Effect.Effect<
|
|
410
|
+
): Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
|
|
413
411
|
} = dual(
|
|
414
412
|
isRefFirst,
|
|
415
|
-
<
|
|
416
|
-
ref: RefAsyncData<
|
|
413
|
+
<A, E, R>(
|
|
414
|
+
ref: RefAsyncData<A, E, R>,
|
|
417
415
|
value: A,
|
|
418
416
|
options?: AsyncData.OptionalPartial<AsyncData.OptimisticOptions>
|
|
419
417
|
) => RefSubject.update(ref, AsyncData.optimistic(value, options))
|
|
@@ -424,13 +422,13 @@ export const optimistic: {
|
|
|
424
422
|
* @since 1.20.0
|
|
425
423
|
*/
|
|
426
424
|
export const done: {
|
|
427
|
-
<E, A>(exit: Exit.Exit<
|
|
428
|
-
<
|
|
425
|
+
<E, A>(exit: Exit.Exit<A, E>): <R>(ref: RefAsyncData<A, E, R>) => Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
|
|
426
|
+
<A, E, R>(ref: RefAsyncData<A, E, R>, exit: Exit.Exit<A, E>): Effect.Effect<AsyncData.AsyncData<A, E>, never, R>
|
|
429
427
|
} = dual(
|
|
430
428
|
2,
|
|
431
|
-
<
|
|
432
|
-
ref: RefAsyncData<
|
|
433
|
-
exit: Exit.Exit<
|
|
429
|
+
<A, E, R>(
|
|
430
|
+
ref: RefAsyncData<A, E, R>,
|
|
431
|
+
exit: Exit.Exit<A, E>
|
|
434
432
|
) => RefSubject.set(ref, AsyncData.done(exit))
|
|
435
433
|
)
|
|
436
434
|
|
|
@@ -438,12 +436,12 @@ export const done: {
|
|
|
438
436
|
* @since 1.20.0
|
|
439
437
|
* @category Filtered
|
|
440
438
|
*/
|
|
441
|
-
export const getFailure = <
|
|
439
|
+
export const getFailure = <A, E, R>(ref: RefAsyncData<A, E, R>): RefSubject.Filtered<E, never, R> =>
|
|
442
440
|
RefSubject.filterMap(ref, AsyncData.getFailure)
|
|
443
441
|
|
|
444
442
|
/**
|
|
445
443
|
* @since 1.20.0
|
|
446
444
|
* @category Filtered
|
|
447
445
|
*/
|
|
448
|
-
export const getSuccess = <
|
|
446
|
+
export const getSuccess = <A, E, R>(ref: RefAsyncData<A, E, R>): RefSubject.Filtered<A, never, R> =>
|
|
449
447
|
RefSubject.filterMap(ref, AsyncData.getSuccess)
|
package/src/Emitter.ts
CHANGED
|
@@ -14,34 +14,34 @@ import * as Sink from "./Sink.js"
|
|
|
14
14
|
/**
|
|
15
15
|
* @since 1.20.0
|
|
16
16
|
*/
|
|
17
|
-
export interface Emitter<in
|
|
18
|
-
readonly succeed: (value: A) => Promise<Exit.Exit<
|
|
19
|
-
readonly failCause: (cause: Cause.Cause<E>) => Promise<Exit.Exit<
|
|
20
|
-
readonly fail: (error: E) => Promise<Exit.Exit<
|
|
21
|
-
readonly die: (error: unknown) => Promise<Exit.Exit<
|
|
22
|
-
readonly end: () => Promise<Exit.Exit<
|
|
17
|
+
export interface Emitter<in A, in E> {
|
|
18
|
+
readonly succeed: (value: A) => Promise<Exit.Exit<unknown>>
|
|
19
|
+
readonly failCause: (cause: Cause.Cause<E>) => Promise<Exit.Exit<unknown>>
|
|
20
|
+
readonly fail: (error: E) => Promise<Exit.Exit<unknown>>
|
|
21
|
+
readonly die: (error: unknown) => Promise<Exit.Exit<unknown>>
|
|
22
|
+
readonly end: () => Promise<Exit.Exit<unknown>>
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* @since 1.20.0
|
|
27
27
|
*/
|
|
28
|
-
export function withEmitter<
|
|
29
|
-
sink: Sink.Sink<
|
|
30
|
-
f: (emitter: Emitter<
|
|
31
|
-
): Effect.Effect<R | R2 | Scope.Scope
|
|
28
|
+
export function withEmitter<A, E, R, R2, B>(
|
|
29
|
+
sink: Sink.Sink<A, E, R>,
|
|
30
|
+
f: (emitter: Emitter<A, E>) => Effect.Effect<B, E, R2>
|
|
31
|
+
): Effect.Effect<void, never, R | R2 | Scope.Scope> {
|
|
32
32
|
return withScope(
|
|
33
33
|
(scope) =>
|
|
34
34
|
Sink.withEarlyExit(
|
|
35
35
|
sink,
|
|
36
|
-
(sink): Effect.Effect<R | R2
|
|
36
|
+
(sink): Effect.Effect<B, E, R | R2> => {
|
|
37
37
|
return Effect.flatMap(Effect.runtime<R>(), (runtime) => {
|
|
38
38
|
const runFork = Runtime.runFork(runtime)
|
|
39
|
-
const run = <E, A>(effect: Effect.Effect<
|
|
39
|
+
const run = <E, A>(effect: Effect.Effect<A, E, R>): Promise<Exit.Exit<A, E>> =>
|
|
40
40
|
new Promise((resolve) => {
|
|
41
41
|
const fiber = runFork(effect, { scope })
|
|
42
42
|
fiber.addObserver(resolve)
|
|
43
43
|
})
|
|
44
|
-
const emitter: Emitter<
|
|
44
|
+
const emitter: Emitter<A, E> = {
|
|
45
45
|
succeed: (value) => run(sink.onSuccess(value)),
|
|
46
46
|
failCause: (cause) => run(sink.onFailure(cause)),
|
|
47
47
|
fail: (error) => run(sink.onFailure(Cause.fail(error))),
|