@typed/fx 1.22.2 → 1.23.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/Form.js.map +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.map +1 -1
- package/dist/cjs/Subject.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/share.js.map +1 -1
- package/dist/cjs/internal/sync-producer.js.map +1 -1
- package/dist/dts/AsyncData.d.ts +33 -33
- package/dist/dts/AsyncData.d.ts.map +1 -1
- package/dist/dts/Emitter.d.ts +6 -6
- package/dist/dts/Emitter.d.ts.map +1 -1
- package/dist/dts/Form.d.ts +12 -12
- package/dist/dts/Form.d.ts.map +1 -1
- package/dist/dts/FormEntry.d.ts +9 -9
- package/dist/dts/FormEntry.d.ts.map +1 -1
- package/dist/dts/Fx.d.ts +113 -113
- package/dist/dts/Fx.d.ts.map +1 -1
- package/dist/dts/Guard.d.ts +5 -5
- 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/Pull.d.ts +5 -5
- package/dist/dts/Pull.d.ts.map +1 -1
- package/dist/dts/Push.d.ts +20 -20
- package/dist/dts/Push.d.ts.map +1 -1
- package/dist/dts/RefArray.d.ts +33 -33
- package/dist/dts/RefArray.d.ts.map +1 -1
- package/dist/dts/RefChunk.d.ts +27 -27
- package/dist/dts/RefChunk.d.ts.map +1 -1
- package/dist/dts/RefHashMap.d.ts +17 -17
- package/dist/dts/RefHashMap.d.ts.map +1 -1
- package/dist/dts/RefHashSet.d.ts +5 -5
- package/dist/dts/RefHashSet.d.ts.map +1 -1
- package/dist/dts/RefSubject.d.ts +53 -53
- package/dist/dts/RefSubject.d.ts.map +1 -1
- package/dist/dts/Sink.d.ts +31 -31
- 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 +5 -5
- package/dist/dts/Subject.d.ts.map +1 -1
- package/dist/dts/Versioned.d.ts +11 -11
- package/dist/dts/Versioned.d.ts.map +1 -1
- package/dist/dts/internal/DeferredRef.d.ts +7 -7
- package/dist/dts/internal/core.d.ts +51 -51
- package/dist/dts/internal/core.d.ts.map +1 -1
- package/dist/dts/internal/effect-loop-operator.d.ts +4 -4
- package/dist/dts/internal/effect-loop-operator.d.ts.map +1 -1
- package/dist/dts/internal/effect-operator.d.ts +11 -11
- package/dist/dts/internal/effect-operator.d.ts.map +1 -1
- package/dist/dts/internal/effect-producer.d.ts +9 -9
- package/dist/dts/internal/effect-producer.d.ts.map +1 -1
- package/dist/dts/internal/helpers.d.ts +25 -25
- package/dist/dts/internal/helpers.d.ts.map +1 -1
- package/dist/dts/internal/protos.d.ts +9 -9
- package/dist/dts/internal/protos.d.ts.map +1 -1
- package/dist/dts/internal/provide.d.ts +10 -10
- package/dist/dts/internal/provide.d.ts.map +1 -1
- package/dist/dts/internal/share.d.ts +2 -2
- package/dist/dts/internal/share.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/esm/Form.js.map +1 -1
- package/dist/esm/FormEntry.js.map +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.map +1 -1
- package/dist/esm/RefSubject.js.map +1 -1
- package/dist/esm/Subject.js.map +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/share.js.map +1 -1
- package/dist/esm/internal/sync-producer.js.map +1 -1
- package/package.json +6 -6
- package/src/AsyncData.ts +86 -86
- package/src/Emitter.ts +9 -9
- package/src/Form.ts +39 -39
- package/src/FormEntry.ts +25 -25
- package/src/Fx.ts +122 -124
- package/src/Guard.ts +7 -7
- package/src/Idle.ts +23 -23
- package/src/Match.ts +3 -3
- package/src/Pull.ts +10 -10
- package/src/Push.ts +33 -33
- package/src/RefArray.ts +36 -36
- package/src/RefChunk.ts +30 -30
- package/src/RefHashMap.ts +24 -24
- package/src/RefHashSet.ts +6 -6
- package/src/RefSubject.ts +184 -184
- package/src/Sink.ts +91 -91
- package/src/Stream.ts +19 -19
- package/src/Subject.ts +21 -21
- package/src/Versioned.ts +23 -23
- package/src/internal/DeferredRef.ts +6 -6
- package/src/internal/core.ts +132 -132
- package/src/internal/effect-loop-operator.ts +4 -4
- package/src/internal/effect-operator.ts +13 -13
- package/src/internal/effect-producer.ts +14 -14
- package/src/internal/helpers.ts +36 -36
- package/src/internal/keyed.ts +3 -3
- package/src/internal/protos.ts +12 -12
- package/src/internal/provide.ts +10 -10
- package/src/internal/share.ts +4 -4
- package/src/internal/sync-producer.ts +12 -12
package/src/Stream.ts
CHANGED
|
@@ -19,8 +19,8 @@ import * as Sink from "./Sink.js"
|
|
|
19
19
|
* @since 1.18.0
|
|
20
20
|
* @category conversions
|
|
21
21
|
*/
|
|
22
|
-
export function toStream<R, E, A>(fx: Fx.Fx<R, E, A>): Stream.Stream<
|
|
23
|
-
return Stream.asyncScoped<R | Scope.Scope
|
|
22
|
+
export function toStream<R, E, A>(fx: Fx.Fx<R, E, A>): Stream.Stream<A, E, R> {
|
|
23
|
+
return Stream.asyncScoped<A, E, R | Scope.Scope>((emit) =>
|
|
24
24
|
fx.run(
|
|
25
25
|
Sink.make(
|
|
26
26
|
(cause) => Effect.promise(() => emit(Effect.failCause(Cause.map(cause, Option.some)))),
|
|
@@ -42,17 +42,17 @@ export function toStream<R, E, A>(fx: Fx.Fx<R, E, A>): Stream.Stream<R, E, A> {
|
|
|
42
42
|
*/
|
|
43
43
|
export const toStreamQueued: {
|
|
44
44
|
<E, A, R2, E2>(
|
|
45
|
-
make: Effect.Effect<
|
|
46
|
-
): <R>(fx: Fx.Fx<R, E, A>) => Stream.Stream<
|
|
45
|
+
make: Effect.Effect<Queue.Queue<Exit.Exit<A, Option.Option<E>>>, E2, R2>
|
|
46
|
+
): <R>(fx: Fx.Fx<R, E, A>) => Stream.Stream<A, E | E2, R | R2>
|
|
47
47
|
|
|
48
48
|
<R, E, A, R2, E2>(
|
|
49
49
|
fx: Fx.Fx<R, E, A>,
|
|
50
|
-
make: Effect.Effect<
|
|
51
|
-
): Stream.Stream<
|
|
50
|
+
make: Effect.Effect<Queue.Queue<Exit.Exit<A, Option.Option<E>>>, E2, R2>
|
|
51
|
+
): Stream.Stream<A, E | E2, R | R2>
|
|
52
52
|
} = dual(2, function toStreamQueued<R, E, A, R2, E2>(
|
|
53
53
|
fx: Fx.Fx<R, E, A>,
|
|
54
|
-
make: Effect.Effect<
|
|
55
|
-
): Stream.Stream<
|
|
54
|
+
make: Effect.Effect<Queue.Queue<Exit.Exit<A, Option.Option<E>>>, E2, R2>
|
|
55
|
+
): Stream.Stream<A, E | E2, R | R2> {
|
|
56
56
|
return make.pipe(
|
|
57
57
|
Effect.tap((queue) =>
|
|
58
58
|
fx.pipe(
|
|
@@ -76,11 +76,11 @@ export const toStreamQueued: {
|
|
|
76
76
|
* @category conversions
|
|
77
77
|
*/
|
|
78
78
|
export const toStreamSliding: {
|
|
79
|
-
(capacity: number): <R, E, A>(fx: Fx.Fx<R, E, A>) => Stream.Stream<
|
|
80
|
-
<R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<
|
|
79
|
+
(capacity: number): <R, E, A>(fx: Fx.Fx<R, E, A>) => Stream.Stream<A, E, R>
|
|
80
|
+
<R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<A, E, R>
|
|
81
81
|
} = dual(
|
|
82
82
|
2,
|
|
83
|
-
function toStreamSliding<R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<
|
|
83
|
+
function toStreamSliding<R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<A, E, R> {
|
|
84
84
|
return toStreamQueued(fx, Queue.sliding(capacity))
|
|
85
85
|
}
|
|
86
86
|
)
|
|
@@ -92,11 +92,11 @@ export const toStreamSliding: {
|
|
|
92
92
|
* @category conversions
|
|
93
93
|
*/
|
|
94
94
|
export const toStreamDropping: {
|
|
95
|
-
(capacity: number): <R, E, A>(fx: Fx.Fx<R, E, A>) => Stream.Stream<
|
|
96
|
-
<R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<
|
|
95
|
+
(capacity: number): <R, E, A>(fx: Fx.Fx<R, E, A>) => Stream.Stream<A, E, R>
|
|
96
|
+
<R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<A, E, R>
|
|
97
97
|
} = dual(
|
|
98
98
|
2,
|
|
99
|
-
function toStreamDropping<R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<
|
|
99
|
+
function toStreamDropping<R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<A, E, R> {
|
|
100
100
|
return toStreamQueued(fx, Queue.dropping(capacity))
|
|
101
101
|
}
|
|
102
102
|
)
|
|
@@ -108,11 +108,11 @@ export const toStreamDropping: {
|
|
|
108
108
|
* @category conversions
|
|
109
109
|
*/
|
|
110
110
|
export const toStreamBounded: {
|
|
111
|
-
(capacity: number): <R, E, A>(fx: Fx.Fx<R, E, A>) => Stream.Stream<
|
|
112
|
-
<R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<
|
|
111
|
+
(capacity: number): <R, E, A>(fx: Fx.Fx<R, E, A>) => Stream.Stream<A, E, R>
|
|
112
|
+
<R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<A, E, R>
|
|
113
113
|
} = dual(
|
|
114
114
|
2,
|
|
115
|
-
function toStreamBounded<R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<
|
|
115
|
+
function toStreamBounded<R, E, A>(fx: Fx.Fx<R, E, A>, capacity: number): Stream.Stream<A, E, R> {
|
|
116
116
|
return toStreamQueued(fx, Queue.bounded(capacity))
|
|
117
117
|
}
|
|
118
118
|
)
|
|
@@ -123,7 +123,7 @@ export const toStreamBounded: {
|
|
|
123
123
|
* @category conversions
|
|
124
124
|
*/
|
|
125
125
|
export function fromStream<R, E, A>(
|
|
126
|
-
stream: Stream.Stream<
|
|
126
|
+
stream: Stream.Stream<A, E, R>
|
|
127
127
|
): Fx.Fx<R, E, A> {
|
|
128
128
|
return Fx.make<R, E, A>((sink) => Effect.catchAllCause(Stream.runForEach(stream, sink.onSuccess), sink.onFailure))
|
|
129
129
|
}
|
|
@@ -133,7 +133,7 @@ export function fromStream<R, E, A>(
|
|
|
133
133
|
* @since 1.18.0
|
|
134
134
|
* @category conversions
|
|
135
135
|
*/
|
|
136
|
-
export function fromStreamChunked<R, E, A>(stream: Stream.Stream<
|
|
136
|
+
export function fromStreamChunked<R, E, A>(stream: Stream.Stream<A, E, R>): Fx.Fx<R, E, Chunk.Chunk<A>> {
|
|
137
137
|
return Fx.make<R, E, Chunk.Chunk<A>>((sink) =>
|
|
138
138
|
Effect.catchAllCause(Stream.runForEachChunk(stream, sink.onSuccess), sink.onFailure)
|
|
139
139
|
)
|
package/src/Subject.ts
CHANGED
|
@@ -27,8 +27,8 @@ import { TypeId } from "./TypeId.js"
|
|
|
27
27
|
* @since 1.20.0
|
|
28
28
|
*/
|
|
29
29
|
export interface Subject<out R, in out E, in out A> extends Push<R, E, A, R | Scope.Scope, E, A>, Pipeable.Pipeable {
|
|
30
|
-
readonly subscriberCount: Effect.Effect<
|
|
31
|
-
readonly interrupt: Effect.Effect<
|
|
30
|
+
readonly subscriberCount: Effect.Effect<number, never, R>
|
|
31
|
+
readonly interrupt: Effect.Effect<void, never, R>
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/**
|
|
@@ -41,7 +41,7 @@ export namespace Subject {
|
|
|
41
41
|
export interface Tagged<I, E, A> extends Subject<I, E, A> {
|
|
42
42
|
readonly tag: C.Tagged<I, Subject<never, E, A>>
|
|
43
43
|
|
|
44
|
-
readonly make: (replay?: number) => Layer.Layer<
|
|
44
|
+
readonly make: (replay?: number) => Layer.Layer<I>
|
|
45
45
|
readonly provide: Provide<I>
|
|
46
46
|
}
|
|
47
47
|
|
|
@@ -63,10 +63,10 @@ export namespace Subject {
|
|
|
63
63
|
) => Args extends readonly [infer _ extends number] ? <T extends Fx<any, any, any> | Effect.Effect<any, any, any>>(
|
|
64
64
|
fxOrEffect: T
|
|
65
65
|
) => [T] extends [Fx<infer R2, infer E2, infer B>] ? Fx<Exclude<R2, I>, E2, B>
|
|
66
|
-
: [T] extends [Effect.Effect<infer
|
|
66
|
+
: [T] extends [Effect.Effect<infer B, infer E2, infer R2>] ? Effect.Effect<B, E2, Exclude<R2, I>>
|
|
67
67
|
: never
|
|
68
68
|
: Args extends readonly [Fx<infer R2, infer E2, infer B>] ? Fx<Exclude<R2, I>, E2, B>
|
|
69
|
-
: Args extends readonly [Effect.Effect<infer
|
|
69
|
+
: Args extends readonly [Effect.Effect<infer B, infer E2, infer R2>] ? Effect.Effect<B, E2, Exclude<R2, I>>
|
|
70
70
|
: never
|
|
71
71
|
}
|
|
72
72
|
|
|
@@ -85,7 +85,7 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
|
|
|
85
85
|
this.onSuccess = this.onSuccess.bind(this)
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
run<R2>(sink: Sink<R2, E, A>): Effect.Effect<R2 | Scope.Scope
|
|
88
|
+
run<R2>(sink: Sink<R2, E, A>): Effect.Effect<unknown, never, R2 | Scope.Scope> {
|
|
89
89
|
return this.addSink(sink, awaitScopeClose)
|
|
90
90
|
}
|
|
91
91
|
|
|
@@ -111,8 +111,8 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
|
|
|
111
111
|
|
|
112
112
|
protected addSink<R, R2, B>(
|
|
113
113
|
sink: Sink<R, E, A>,
|
|
114
|
-
f: (scope: Scope.Scope) => Effect.Effect<
|
|
115
|
-
): Effect.Effect<R2 | Scope.Scope
|
|
114
|
+
f: (scope: Scope.Scope) => Effect.Effect<B, never, R2>
|
|
115
|
+
): Effect.Effect<B, never, R2 | Scope.Scope> {
|
|
116
116
|
return withScope(
|
|
117
117
|
(innerScope) =>
|
|
118
118
|
Effect.contextWithEffect((ctx) => {
|
|
@@ -135,7 +135,7 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
|
|
|
135
135
|
)
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
readonly subscriberCount: Effect.Effect<
|
|
138
|
+
readonly subscriberCount: Effect.Effect<number> = Effect.sync(() => this.sinks.size)
|
|
139
139
|
|
|
140
140
|
protected onEvent(a: A) {
|
|
141
141
|
if (this.sinks.size === 0) return Effect.unit
|
|
@@ -167,7 +167,7 @@ export class HoldSubjectImpl<E, A> extends SubjectImpl<E, A> implements Subject<
|
|
|
167
167
|
return this.onEvent(a)
|
|
168
168
|
})
|
|
169
169
|
|
|
170
|
-
run<R2>(sink: Sink<R2, E, A>): Effect.Effect<R2 | Scope.Scope
|
|
170
|
+
run<R2>(sink: Sink<R2, E, A>): Effect.Effect<unknown, never, R2 | Scope.Scope> {
|
|
171
171
|
return this.addSink(sink, (scope) =>
|
|
172
172
|
Option.match(MutableRef.get(this.lastValue), {
|
|
173
173
|
onNone: () => awaitScopeClose(scope),
|
|
@@ -199,7 +199,7 @@ export class ReplaySubjectImpl<E, A> extends SubjectImpl<E, A> {
|
|
|
199
199
|
return this.onEvent(a)
|
|
200
200
|
})
|
|
201
201
|
|
|
202
|
-
run<R2>(sink: Sink<R2, E, A>): Effect.Effect<R2 | Scope.Scope
|
|
202
|
+
run<R2>(sink: Sink<R2, E, A>): Effect.Effect<unknown, never, R2 | Scope.Scope> {
|
|
203
203
|
return this.addSink(
|
|
204
204
|
sink,
|
|
205
205
|
(scope) => Effect.zipRight(this.buffer.forEach((a) => sink.onSuccess(a)), awaitScopeClose(scope))
|
|
@@ -232,7 +232,7 @@ export function unsafeMake<E, A>(replay: number = 0): Subject<never, E, A> {
|
|
|
232
232
|
/**
|
|
233
233
|
* @since 1.20.0
|
|
234
234
|
*/
|
|
235
|
-
export function make<E, A>(replay?: number): Effect.Effect<
|
|
235
|
+
export function make<E, A>(replay?: number): Effect.Effect<Subject<never, E, A>, never, Scope.Scope> {
|
|
236
236
|
return Effect.acquireRelease(Effect.sync(() => unsafeMake(replay)), (subject) => subject.interrupt)
|
|
237
237
|
}
|
|
238
238
|
|
|
@@ -244,10 +244,10 @@ export function fromTag<I, S, R, E, A>(tag: C.Tag<I, S>, f: (s: S) => Subject<R,
|
|
|
244
244
|
}
|
|
245
245
|
|
|
246
246
|
class FromTag<I, S, R, E, A> extends FxBase<I | R | Scope.Scope, E, A> implements Subject<I | R, E, A> {
|
|
247
|
-
private get: Effect.Effect<
|
|
247
|
+
private get: Effect.Effect<Subject<R, E, A>, never, I>
|
|
248
248
|
|
|
249
|
-
readonly subscriberCount: Effect.Effect<I | R
|
|
250
|
-
readonly interrupt: Effect.Effect<I | R
|
|
249
|
+
readonly subscriberCount: Effect.Effect<number, never, I | R>
|
|
250
|
+
readonly interrupt: Effect.Effect<void, never, I | R>
|
|
251
251
|
|
|
252
252
|
constructor(readonly tag: C.Tag<I, S>, readonly f: (s: S) => Subject<R, E, A>) {
|
|
253
253
|
super()
|
|
@@ -257,15 +257,15 @@ class FromTag<I, S, R, E, A> extends FxBase<I | R | Scope.Scope, E, A> implement
|
|
|
257
257
|
this.interrupt = Effect.flatMap(this.get, (subject) => subject.interrupt)
|
|
258
258
|
}
|
|
259
259
|
|
|
260
|
-
run<R2>(sink: Sink<R2, E, A>): Effect.Effect<I | R | R2 | Scope.Scope
|
|
260
|
+
run<R2>(sink: Sink<R2, E, A>): Effect.Effect<unknown, never, I | R | R2 | Scope.Scope> {
|
|
261
261
|
return Effect.flatMap(this.get, (subject) => subject.run(sink))
|
|
262
262
|
}
|
|
263
263
|
|
|
264
|
-
onFailure(cause: Cause.Cause<E>): Effect.Effect<I | R
|
|
264
|
+
onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, I | R> {
|
|
265
265
|
return Effect.flatMap(this.get, (subject) => subject.onFailure(cause))
|
|
266
266
|
}
|
|
267
267
|
|
|
268
|
-
onSuccess(value: A): Effect.Effect<I | R
|
|
268
|
+
onSuccess(value: A): Effect.Effect<unknown, never, I | R> {
|
|
269
269
|
return Effect.flatMap(this.get, (subject) => subject.onSuccess(value))
|
|
270
270
|
}
|
|
271
271
|
}
|
|
@@ -291,14 +291,14 @@ class TaggedImpl<I, E, A> extends FromTag<I, Subject<never, E, A>, never, E, A>
|
|
|
291
291
|
|
|
292
292
|
this.provide = dual(
|
|
293
293
|
isDataFirst,
|
|
294
|
-
<R2, E2, B>(fxOrEffect: Fx<R2, E2, B> | Effect.Effect<
|
|
294
|
+
<R2, E2, B>(fxOrEffect: Fx<R2, E2, B> | Effect.Effect<B, E2, R2>, replay?: number) => {
|
|
295
295
|
if (TypeId in fxOrEffect) return provide(fxOrEffect as Fx<Exclude<R2, I>, E2, B>, this.make(replay))
|
|
296
|
-
else return Effect.provide(fxOrEffect as Effect.Effect<
|
|
296
|
+
else return Effect.provide(fxOrEffect as Effect.Effect<B, E2, R2>, this.make(replay))
|
|
297
297
|
}
|
|
298
298
|
)
|
|
299
299
|
}
|
|
300
300
|
|
|
301
|
-
make(replay?: number): Layer.Layer<
|
|
301
|
+
make(replay?: number): Layer.Layer<I> {
|
|
302
302
|
return this.tag.scoped(make(replay))
|
|
303
303
|
}
|
|
304
304
|
}
|
package/src/Versioned.ts
CHANGED
|
@@ -26,9 +26,9 @@ import type { Sink } from "./Sink.js"
|
|
|
26
26
|
* @since 1.0.0
|
|
27
27
|
*/
|
|
28
28
|
export interface Versioned<out R1, out E1, out R2, out E2, out A2, out R3, out E3, out A3>
|
|
29
|
-
extends Fx<R2, E2, A2>, Effect.Effect<
|
|
29
|
+
extends Fx<R2, E2, A2>, Effect.Effect<A3, E3, R3>
|
|
30
30
|
{
|
|
31
|
-
readonly version: Effect.Effect<
|
|
31
|
+
readonly version: Effect.Effect<number, E1, R1>
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/**
|
|
@@ -59,9 +59,9 @@ export namespace Versioned {
|
|
|
59
59
|
* @since 1.0.0
|
|
60
60
|
*/
|
|
61
61
|
export function make<R1, E1, R2, E2, A2, R3, E3, A3>(
|
|
62
|
-
version: Effect.Effect<
|
|
62
|
+
version: Effect.Effect<number, E1, R1>,
|
|
63
63
|
fx: Fx<R2, E2, A2>,
|
|
64
|
-
effect: Effect.Effect<
|
|
64
|
+
effect: Effect.Effect<A3, E3, R3>
|
|
65
65
|
): Versioned<R1, E1, R2, E2, A2, R3, E3, A3> {
|
|
66
66
|
return new VersionedImpl(version, fx, effect)
|
|
67
67
|
}
|
|
@@ -70,18 +70,18 @@ class VersionedImpl<R1, E1, R2, E2, A2, R3, E3, A3> extends FxEffectBase<R2, E2,
|
|
|
70
70
|
implements Versioned<R1, E1, R2, E2, A2, R3, E3, A3>
|
|
71
71
|
{
|
|
72
72
|
constructor(
|
|
73
|
-
readonly version: Effect.Effect<
|
|
73
|
+
readonly version: Effect.Effect<number, E1, R1>,
|
|
74
74
|
readonly fx: Fx<R2, E2, A2>,
|
|
75
|
-
readonly effect: Effect.Effect<
|
|
75
|
+
readonly effect: Effect.Effect<A3, E3, R3>
|
|
76
76
|
) {
|
|
77
77
|
super()
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
run<R3>(sink: Sink<R3, E2, A2>): Effect.Effect<R2 | R3
|
|
80
|
+
run<R3>(sink: Sink<R3, E2, A2>): Effect.Effect<unknown, never, R2 | R3> {
|
|
81
81
|
return this.fx.run(sink)
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
toEffect(): Effect.Effect<
|
|
84
|
+
toEffect(): Effect.Effect<A3, E3, R3> {
|
|
85
85
|
return this.effect
|
|
86
86
|
}
|
|
87
87
|
}
|
|
@@ -92,7 +92,7 @@ class VersionedImpl<R1, E1, R2, E2, A2, R3, E3, A3> extends FxEffectBase<R2, E2,
|
|
|
92
92
|
export function transform<R0, E0, R, E, A, R2, E2, B, R3, E3, C, R4, E4, D>(
|
|
93
93
|
input: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
94
94
|
transformFx: (fx: Fx<R, E, A>) => Fx<R3, E3, C>,
|
|
95
|
-
transformGet: (effect: Effect.Effect<
|
|
95
|
+
transformGet: (effect: Effect.Effect<B, E2, R2>) => Effect.Effect<D, E4, R4>
|
|
96
96
|
): Versioned<never, never, R3, E3, C, R0 | R4, E0 | E4, D> {
|
|
97
97
|
if (isVersionedTransform(input)) {
|
|
98
98
|
return new VersionedTransform(
|
|
@@ -119,7 +119,7 @@ export class VersionedTransform<R0, E0, R, E, A, R2, E2, B, R3, E3, C, R4, E4, D
|
|
|
119
119
|
constructor(
|
|
120
120
|
readonly input: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
121
121
|
readonly _transformFx: (fx: Fx<R, E, A>) => Fx<R3, E3, C>,
|
|
122
|
-
readonly _transformEffect: (effect: Effect.Effect<
|
|
122
|
+
readonly _transformEffect: (effect: Effect.Effect<B, E2, R2>) => Effect.Effect<D, E4, R4>
|
|
123
123
|
) {
|
|
124
124
|
super()
|
|
125
125
|
|
|
@@ -128,12 +128,12 @@ export class VersionedTransform<R0, E0, R, E, A, R2, E2, B, R3, E3, C, R4, E4, D
|
|
|
128
128
|
|
|
129
129
|
readonly version = Effect.sync(() => this._version)
|
|
130
130
|
|
|
131
|
-
run<R5>(sink: Sink<R5, E3, C>): Effect.Effect<R3 | R5
|
|
131
|
+
run<R5>(sink: Sink<R5, E3, C>): Effect.Effect<unknown, never, R3 | R5> {
|
|
132
132
|
return this._fx.run(sink)
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
toEffect(): Effect.Effect<
|
|
136
|
-
const transformed = this._transformEffect(this.input as any as Effect.Effect<
|
|
135
|
+
toEffect(): Effect.Effect<D, E0 | E4, R0 | R4> {
|
|
136
|
+
const transformed = this._transformEffect(this.input as any as Effect.Effect<B, E2, R2>)
|
|
137
137
|
const update = (v: number) =>
|
|
138
138
|
Effect.tap(
|
|
139
139
|
transformed,
|
|
@@ -199,20 +199,20 @@ export const map: {
|
|
|
199
199
|
*/
|
|
200
200
|
export const mapEffect: {
|
|
201
201
|
<A, R3, E3, C, B, R4, E4, D>(
|
|
202
|
-
options: { onFx: (a: A) => Effect.Effect<
|
|
202
|
+
options: { onFx: (a: A) => Effect.Effect<C, E3, R3>; onEffect: (b: B) => Effect.Effect<D, E4, R4> }
|
|
203
203
|
): <R0, E0, R, E, R2, E2>(
|
|
204
204
|
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
|
|
205
205
|
) => Versioned<never, never, R | R3, E | E3, C, R0 | R2 | R4, E0 | E2 | E4, D>
|
|
206
206
|
|
|
207
207
|
<R0, E0, R, E, A, R2, E2, B, R3, E3, C, R4, E4, D>(
|
|
208
208
|
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
209
|
-
options: { onFx: (a: A) => Effect.Effect<
|
|
209
|
+
options: { onFx: (a: A) => Effect.Effect<C, E3, R3>; onEffect: (b: B) => Effect.Effect<D, E4, R4> }
|
|
210
210
|
): Versioned<never, never, R | R3, E | E3, C, R0 | R2 | R4, E0 | E2 | E4, D>
|
|
211
211
|
} = dual(2, function mapEffect<R0, E0, R, E, A, R2, E2, B, R3, E3, C, R4, E4, D>(
|
|
212
212
|
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
213
213
|
options: {
|
|
214
|
-
onFx: (a: A) => Effect.Effect<
|
|
215
|
-
onEffect: (b: B) => Effect.Effect<
|
|
214
|
+
onFx: (a: A) => Effect.Effect<C, E3, R3>
|
|
215
|
+
onEffect: (b: B) => Effect.Effect<D, E4, R4>
|
|
216
216
|
}
|
|
217
217
|
): Versioned<never, never, R | R3, E | E3, C, R0 | R2 | R4, E0 | E2 | E4, D> {
|
|
218
218
|
return transform(versioned, (fx) => core.mapEffect(fx, options.onFx), Effect.flatMap(options.onEffect))
|
|
@@ -270,7 +270,7 @@ export const provide: {
|
|
|
270
270
|
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
|
|
271
271
|
) => Versioned<Exclude<R0, S>, E0, Exclude<R, S>, E, A, Exclude<R2, S>, E2, B>
|
|
272
272
|
|
|
273
|
-
<R3, S>(layer: Layer.Layer<
|
|
273
|
+
<R3, S>(layer: Layer.Layer<S, never, R3>): <R0, E0, R, E, A, R2, E2, B>(
|
|
274
274
|
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>
|
|
275
275
|
) => Versioned<R3 | Exclude<R0, S>, E0, R3 | Exclude<R, S>, E, A, R3 | Exclude<R2, S>, E2, B>
|
|
276
276
|
|
|
@@ -281,21 +281,21 @@ export const provide: {
|
|
|
281
281
|
|
|
282
282
|
<R0, E0, R, E, A, R2, E2, B, R3 = never, S = never>(
|
|
283
283
|
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
284
|
-
context: Layer.Layer<
|
|
284
|
+
context: Layer.Layer<S, never, R3>
|
|
285
285
|
): Versioned<R3 | Exclude<R0, S>, E0, R3 | Exclude<R, S>, E, A, R3 | Exclude<R2, S>, E2, B>
|
|
286
286
|
|
|
287
287
|
<R0, E0, R, E, A, R2, E2, B, R3 = never, S = never>(
|
|
288
288
|
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
289
|
-
context: Context.Context<S> | Runtime.Runtime<S> | Layer.Layer<
|
|
289
|
+
context: Context.Context<S> | Runtime.Runtime<S> | Layer.Layer<S, never, R3>
|
|
290
290
|
): Versioned<R3 | Exclude<R0, S>, E0, R3 | Exclude<R, S>, E, A, R3 | Exclude<R2, S>, E2, B>
|
|
291
291
|
} = dual(2, function provide<R0, E0, R, E, A, R2, E2, B, R3 = never, S = never>(
|
|
292
292
|
versioned: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
|
293
|
-
context: Context.Context<S> | Runtime.Runtime<S> | Layer.Layer<
|
|
293
|
+
context: Context.Context<S> | Runtime.Runtime<S> | Layer.Layer<S, never, R3>
|
|
294
294
|
): Versioned<R3 | Exclude<R0, S>, E0, R3 | Exclude<R, S>, E, A, R3 | Exclude<R2, S>, E2, B> {
|
|
295
295
|
return make(
|
|
296
|
-
Effect.provide(versioned.version, context as Layer.Layer<
|
|
296
|
+
Effect.provide(versioned.version, context as Layer.Layer<S, never, R3>),
|
|
297
297
|
core.provide(versioned, context),
|
|
298
|
-
Effect.provide(versioned, context as Layer.Layer<
|
|
298
|
+
Effect.provide(versioned, context as Layer.Layer<S, never, R3>)
|
|
299
299
|
)
|
|
300
300
|
})
|
|
301
301
|
|
|
@@ -7,11 +7,11 @@ import { EffectBase } from "./protos.js"
|
|
|
7
7
|
|
|
8
8
|
export class DeferredRef<E, A> extends EffectBase<never, E, A> {
|
|
9
9
|
// Keep track of the latest value emitted by the stream
|
|
10
|
-
public current!: Option.Option<Exit.Exit<
|
|
10
|
+
public current!: Option.Option<Exit.Exit<A, E>>
|
|
11
11
|
public version!: number
|
|
12
|
-
public deferred!: Deferred.Deferred<
|
|
12
|
+
public deferred!: Deferred.Deferred<A, E>
|
|
13
13
|
|
|
14
|
-
constructor(private id: FiberId.FiberId, private eq: Equivalence.Equivalence<Exit.Exit<
|
|
14
|
+
constructor(private id: FiberId.FiberId, private eq: Equivalence.Equivalence<Exit.Exit<A, E>>) {
|
|
15
15
|
super()
|
|
16
16
|
this.reset()
|
|
17
17
|
}
|
|
@@ -26,7 +26,7 @@ export class DeferredRef<E, A> extends EffectBase<never, E, A> {
|
|
|
26
26
|
})
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
done(exit: Exit.Exit<
|
|
29
|
+
done(exit: Exit.Exit<A, E>) {
|
|
30
30
|
const current = this.current
|
|
31
31
|
|
|
32
32
|
this.current = Option.some(exit)
|
|
@@ -53,10 +53,10 @@ export class DeferredRef<E, A> extends EffectBase<never, E, A> {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
export function make<E, A>(eq: Equivalence.Equivalence<Exit.Exit<
|
|
56
|
+
export function make<E, A>(eq: Equivalence.Equivalence<Exit.Exit<A, E>>) {
|
|
57
57
|
return Effect.map(Effect.fiberId, (id) => new DeferredRef(id, eq))
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
export function unsafeMake<E, A>(id: FiberId.FiberId, eq: Equivalence.Equivalence<Exit.Exit<
|
|
60
|
+
export function unsafeMake<E, A>(id: FiberId.FiberId, eq: Equivalence.Equivalence<Exit.Exit<A, E>>) {
|
|
61
61
|
return new DeferredRef(id, eq)
|
|
62
62
|
}
|