@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/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<
|
|
23
|
-
return Stream.asyncScoped<R | Scope.Scope
|
|
22
|
+
export function toStream<A, E, R>(fx: Fx.Fx<A, E, R>): 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<
|
|
45
|
+
make: Effect.Effect<Queue.Queue<Exit.Exit<A, Option.Option<E>>>, E2, R2>
|
|
46
|
+
): <R>(fx: Fx.Fx<A, E, R>) => Stream.Stream<A, E | E2, R | R2>
|
|
47
47
|
|
|
48
|
-
<
|
|
49
|
-
fx: Fx.Fx<
|
|
50
|
-
make: Effect.Effect<
|
|
51
|
-
): Stream.Stream<
|
|
52
|
-
} = dual(2, function toStreamQueued<
|
|
53
|
-
fx: Fx.Fx<
|
|
54
|
-
make: Effect.Effect<
|
|
55
|
-
): Stream.Stream<
|
|
48
|
+
<A, E, R, R2, E2>(
|
|
49
|
+
fx: Fx.Fx<A, E, R>,
|
|
50
|
+
make: Effect.Effect<Queue.Queue<Exit.Exit<A, Option.Option<E>>>, E2, R2>
|
|
51
|
+
): Stream.Stream<A, E | E2, R | R2>
|
|
52
|
+
} = dual(2, function toStreamQueued<A, E, R, R2, E2>(
|
|
53
|
+
fx: Fx.Fx<A, E, R>,
|
|
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): <
|
|
80
|
-
<
|
|
79
|
+
(capacity: number): <A, E, R>(fx: Fx.Fx<A, E, R>) => Stream.Stream<A, E, R>
|
|
80
|
+
<A, E, R>(fx: Fx.Fx<A, E, R>, capacity: number): Stream.Stream<A, E, R>
|
|
81
81
|
} = dual(
|
|
82
82
|
2,
|
|
83
|
-
function toStreamSliding<
|
|
83
|
+
function toStreamSliding<A, E, R>(fx: Fx.Fx<A, E, R>, 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): <
|
|
96
|
-
<
|
|
95
|
+
(capacity: number): <A, E, R>(fx: Fx.Fx<A, E, R>) => Stream.Stream<A, E, R>
|
|
96
|
+
<A, E, R>(fx: Fx.Fx<A, E, R>, capacity: number): Stream.Stream<A, E, R>
|
|
97
97
|
} = dual(
|
|
98
98
|
2,
|
|
99
|
-
function toStreamDropping<
|
|
99
|
+
function toStreamDropping<A, E, R>(fx: Fx.Fx<A, E, R>, 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): <
|
|
112
|
-
<
|
|
111
|
+
(capacity: number): <A, E, R>(fx: Fx.Fx<A, E, R>) => Stream.Stream<A, E, R>
|
|
112
|
+
<A, E, R>(fx: Fx.Fx<A, E, R>, capacity: number): Stream.Stream<A, E, R>
|
|
113
113
|
} = dual(
|
|
114
114
|
2,
|
|
115
|
-
function toStreamBounded<
|
|
115
|
+
function toStreamBounded<A, E, R>(fx: Fx.Fx<A, E, R>, capacity: number): Stream.Stream<A, E, R> {
|
|
116
116
|
return toStreamQueued(fx, Queue.bounded(capacity))
|
|
117
117
|
}
|
|
118
118
|
)
|
|
@@ -122,10 +122,10 @@ export const toStreamBounded: {
|
|
|
122
122
|
* @since 1.18.0
|
|
123
123
|
* @category conversions
|
|
124
124
|
*/
|
|
125
|
-
export function fromStream<
|
|
126
|
-
stream: Stream.Stream<
|
|
127
|
-
): Fx.Fx<
|
|
128
|
-
return Fx.make<
|
|
125
|
+
export function fromStream<A, E, R>(
|
|
126
|
+
stream: Stream.Stream<A, E, R>
|
|
127
|
+
): Fx.Fx<A, E, R> {
|
|
128
|
+
return Fx.make<A, E, R>((sink) => Effect.catchAllCause(Stream.runForEach(stream, sink.onSuccess), sink.onFailure))
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
/**
|
|
@@ -133,8 +133,8 @@ export function fromStream<R, E, A>(
|
|
|
133
133
|
* @since 1.18.0
|
|
134
134
|
* @category conversions
|
|
135
135
|
*/
|
|
136
|
-
export function fromStreamChunked<
|
|
137
|
-
return Fx.make<
|
|
136
|
+
export function fromStreamChunked<A, E, R>(stream: Stream.Stream<A, E, R>): Fx.Fx<Chunk.Chunk<A>, E, R> {
|
|
137
|
+
return Fx.make<Chunk.Chunk<A>, E, R>((sink) =>
|
|
138
138
|
Effect.catchAllCause(Stream.runForEachChunk(stream, sink.onSuccess), sink.onFailure)
|
|
139
139
|
)
|
|
140
140
|
}
|
package/src/Subject.ts
CHANGED
|
@@ -26,9 +26,11 @@ import { TypeId } from "./TypeId.js"
|
|
|
26
26
|
* Subject is an Fx type which can also be imperatively pushed into.
|
|
27
27
|
* @since 1.20.0
|
|
28
28
|
*/
|
|
29
|
-
export interface Subject<
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
export interface Subject<in out A, in out E = never, out R = never>
|
|
30
|
+
extends Push<A, E, R, A, E, R | Scope.Scope>, Pipeable.Pipeable
|
|
31
|
+
{
|
|
32
|
+
readonly subscriberCount: Effect.Effect<number, never, R>
|
|
33
|
+
readonly interrupt: Effect.Effect<void, never, R>
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
/**
|
|
@@ -38,10 +40,10 @@ export namespace Subject {
|
|
|
38
40
|
/**
|
|
39
41
|
* @since 1.20.0
|
|
40
42
|
*/
|
|
41
|
-
export interface Tagged<
|
|
42
|
-
readonly tag: C.Tagged<I, Subject<
|
|
43
|
+
export interface Tagged<A, E, I> extends Subject<A, E, I> {
|
|
44
|
+
readonly tag: C.Tagged<I, Subject<A, E>>
|
|
43
45
|
|
|
44
|
-
readonly make: (replay?: number) => Layer.Layer<
|
|
46
|
+
readonly make: (replay?: number) => Layer.Layer<I>
|
|
45
47
|
readonly provide: Provide<I>
|
|
46
48
|
}
|
|
47
49
|
|
|
@@ -62,11 +64,11 @@ export namespace Subject {
|
|
|
62
64
|
...args: Args
|
|
63
65
|
) => Args extends readonly [infer _ extends number] ? <T extends Fx<any, any, any> | Effect.Effect<any, any, any>>(
|
|
64
66
|
fxOrEffect: T
|
|
65
|
-
) => [T] extends [Fx<infer
|
|
66
|
-
: [T] extends [Effect.Effect<infer
|
|
67
|
+
) => [T] extends [Fx<infer B, infer E2, infer R2>] ? Fx<B, E2, Exclude<R2, I>>
|
|
68
|
+
: [T] extends [Effect.Effect<infer B, infer E2, infer R2>] ? Effect.Effect<B, E2, Exclude<R2, I>>
|
|
67
69
|
: never
|
|
68
|
-
: Args extends readonly [Fx<infer
|
|
69
|
-
: Args extends readonly [Effect.Effect<infer
|
|
70
|
+
: Args extends readonly [Fx<infer B, infer E2, infer R2>] ? Fx<B, E2, Exclude<R2, I>>
|
|
71
|
+
: Args extends readonly [Effect.Effect<infer B, infer E2, infer R2>] ? Effect.Effect<B, E2, Exclude<R2, I>>
|
|
70
72
|
: never
|
|
71
73
|
}
|
|
72
74
|
|
|
@@ -75,8 +77,8 @@ const DISCARD = { discard: true } as const
|
|
|
75
77
|
/**
|
|
76
78
|
* @internal
|
|
77
79
|
*/
|
|
78
|
-
export class SubjectImpl<
|
|
79
|
-
protected sinks: Set<readonly [Sink<
|
|
80
|
+
export class SubjectImpl<A, E> extends FxBase<A, E, Scope.Scope> implements Subject<A, E> {
|
|
81
|
+
protected sinks: Set<readonly [Sink<A, E, any>, Context.Context<any>]> = new Set()
|
|
80
82
|
protected scopes: Set<Scope.CloseableScope> = new Set()
|
|
81
83
|
|
|
82
84
|
constructor() {
|
|
@@ -85,7 +87,7 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
|
|
|
85
87
|
this.onSuccess = this.onSuccess.bind(this)
|
|
86
88
|
}
|
|
87
89
|
|
|
88
|
-
run<R2>(sink: Sink<
|
|
90
|
+
run<R2>(sink: Sink<A, E, R2>): Effect.Effect<unknown, never, R2 | Scope.Scope> {
|
|
89
91
|
return this.addSink(sink, awaitScopeClose)
|
|
90
92
|
}
|
|
91
93
|
|
|
@@ -110,9 +112,9 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
|
|
|
110
112
|
)
|
|
111
113
|
|
|
112
114
|
protected addSink<R, R2, B>(
|
|
113
|
-
sink: Sink<
|
|
114
|
-
f: (scope: Scope.Scope) => Effect.Effect<
|
|
115
|
-
): Effect.Effect<R2 | Scope.Scope
|
|
115
|
+
sink: Sink<A, E, R>,
|
|
116
|
+
f: (scope: Scope.Scope) => Effect.Effect<B, never, R2>
|
|
117
|
+
): Effect.Effect<B, never, R2 | Scope.Scope> {
|
|
116
118
|
return withScope(
|
|
117
119
|
(innerScope) =>
|
|
118
120
|
Effect.contextWithEffect((ctx) => {
|
|
@@ -135,7 +137,7 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
|
|
|
135
137
|
)
|
|
136
138
|
}
|
|
137
139
|
|
|
138
|
-
readonly subscriberCount: Effect.Effect<
|
|
140
|
+
readonly subscriberCount: Effect.Effect<number> = Effect.sync(() => this.sinks.size)
|
|
139
141
|
|
|
140
142
|
protected onEvent(a: A) {
|
|
141
143
|
if (this.sinks.size === 0) return Effect.unit
|
|
@@ -156,7 +158,7 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
|
|
|
156
158
|
/**
|
|
157
159
|
* @internal
|
|
158
160
|
*/
|
|
159
|
-
export class HoldSubjectImpl<
|
|
161
|
+
export class HoldSubjectImpl<A, E> extends SubjectImpl<A, E> implements Subject<A, E> {
|
|
160
162
|
private lastValue: MutableRef.MutableRef<Option.Option<A>> = MutableRef.make(Option.none())
|
|
161
163
|
|
|
162
164
|
// Emit an event to all sinks
|
|
@@ -167,7 +169,7 @@ export class HoldSubjectImpl<E, A> extends SubjectImpl<E, A> implements Subject<
|
|
|
167
169
|
return this.onEvent(a)
|
|
168
170
|
})
|
|
169
171
|
|
|
170
|
-
run<R2>(sink: Sink<
|
|
172
|
+
run<R2>(sink: Sink<A, E, R2>): Effect.Effect<unknown, never, R2 | Scope.Scope> {
|
|
171
173
|
return this.addSink(sink, (scope) =>
|
|
172
174
|
Option.match(MutableRef.get(this.lastValue), {
|
|
173
175
|
onNone: () => awaitScopeClose(scope),
|
|
@@ -186,7 +188,7 @@ export class HoldSubjectImpl<E, A> extends SubjectImpl<E, A> implements Subject<
|
|
|
186
188
|
/**
|
|
187
189
|
* @internal
|
|
188
190
|
*/
|
|
189
|
-
export class ReplaySubjectImpl<
|
|
191
|
+
export class ReplaySubjectImpl<A, E> extends SubjectImpl<A, E> {
|
|
190
192
|
constructor(readonly buffer: RingBuffer<A>) {
|
|
191
193
|
super()
|
|
192
194
|
}
|
|
@@ -199,7 +201,7 @@ export class ReplaySubjectImpl<E, A> extends SubjectImpl<E, A> {
|
|
|
199
201
|
return this.onEvent(a)
|
|
200
202
|
})
|
|
201
203
|
|
|
202
|
-
run<R2>(sink: Sink<
|
|
204
|
+
run<R2>(sink: Sink<A, E, R2>): Effect.Effect<unknown, never, R2 | Scope.Scope> {
|
|
203
205
|
return this.addSink(
|
|
204
206
|
sink,
|
|
205
207
|
(scope) => Effect.zipRight(this.buffer.forEach((a) => sink.onSuccess(a)), awaitScopeClose(scope))
|
|
@@ -217,39 +219,39 @@ export class ReplaySubjectImpl<E, A> extends SubjectImpl<E, A> {
|
|
|
217
219
|
/**
|
|
218
220
|
* @since 1.20.0
|
|
219
221
|
*/
|
|
220
|
-
export function unsafeMake<
|
|
222
|
+
export function unsafeMake<A, E = never>(replay: number = 0): Subject<A, E> {
|
|
221
223
|
replay = Math.max(0, replay)
|
|
222
224
|
|
|
223
225
|
if (replay === 0) {
|
|
224
|
-
return new SubjectImpl<
|
|
226
|
+
return new SubjectImpl<A, E>()
|
|
225
227
|
} else if (replay === 1) {
|
|
226
|
-
return new HoldSubjectImpl<
|
|
228
|
+
return new HoldSubjectImpl<A, E>()
|
|
227
229
|
} else {
|
|
228
|
-
return new ReplaySubjectImpl<
|
|
230
|
+
return new ReplaySubjectImpl<A, E>(new RingBuffer(replay))
|
|
229
231
|
}
|
|
230
232
|
}
|
|
231
233
|
|
|
232
234
|
/**
|
|
233
235
|
* @since 1.20.0
|
|
234
236
|
*/
|
|
235
|
-
export function make<
|
|
237
|
+
export function make<A, E>(replay?: number): Effect.Effect<Subject<A, E>, never, Scope.Scope> {
|
|
236
238
|
return Effect.acquireRelease(Effect.sync(() => unsafeMake(replay)), (subject) => subject.interrupt)
|
|
237
239
|
}
|
|
238
240
|
|
|
239
241
|
/**
|
|
240
242
|
* @since 1.20.0
|
|
241
243
|
*/
|
|
242
|
-
export function fromTag<I, S,
|
|
244
|
+
export function fromTag<I, S, A, E, R>(tag: C.Tag<I, S>, f: (s: S) => Subject<A, E, R>): Subject<A, E, I | R> {
|
|
243
245
|
return new FromTag(tag, f)
|
|
244
246
|
}
|
|
245
247
|
|
|
246
|
-
class FromTag<I, S,
|
|
247
|
-
private get: Effect.Effect<
|
|
248
|
+
class FromTag<I, S, A, E, R> extends FxBase<A, E, I | R | Scope.Scope> implements Subject<A, E, I | R> {
|
|
249
|
+
private get: Effect.Effect<Subject<A, E, R>, never, I>
|
|
248
250
|
|
|
249
|
-
readonly subscriberCount: Effect.Effect<I | R
|
|
250
|
-
readonly interrupt: Effect.Effect<I | R
|
|
251
|
+
readonly subscriberCount: Effect.Effect<number, never, I | R>
|
|
252
|
+
readonly interrupt: Effect.Effect<void, never, I | R>
|
|
251
253
|
|
|
252
|
-
constructor(readonly tag: C.Tag<I, S>, readonly f: (s: S) => Subject<
|
|
254
|
+
constructor(readonly tag: C.Tag<I, S>, readonly f: (s: S) => Subject<A, E, R>) {
|
|
253
255
|
super()
|
|
254
256
|
|
|
255
257
|
this.get = Effect.map(tag, f)
|
|
@@ -257,15 +259,15 @@ class FromTag<I, S, R, E, A> extends FxBase<I | R | Scope.Scope, E, A> implement
|
|
|
257
259
|
this.interrupt = Effect.flatMap(this.get, (subject) => subject.interrupt)
|
|
258
260
|
}
|
|
259
261
|
|
|
260
|
-
run<R2>(sink: Sink<
|
|
262
|
+
run<R2>(sink: Sink<A, E, R2>): Effect.Effect<unknown, never, I | R | R2 | Scope.Scope> {
|
|
261
263
|
return Effect.flatMap(this.get, (subject) => subject.run(sink))
|
|
262
264
|
}
|
|
263
265
|
|
|
264
|
-
onFailure(cause: Cause.Cause<E>): Effect.Effect<I | R
|
|
266
|
+
onFailure(cause: Cause.Cause<E>): Effect.Effect<unknown, never, I | R> {
|
|
265
267
|
return Effect.flatMap(this.get, (subject) => subject.onFailure(cause))
|
|
266
268
|
}
|
|
267
269
|
|
|
268
|
-
onSuccess(value: A): Effect.Effect<I | R
|
|
270
|
+
onSuccess(value: A): Effect.Effect<unknown, never, I | R> {
|
|
269
271
|
return Effect.flatMap(this.get, (subject) => subject.onSuccess(value))
|
|
270
272
|
}
|
|
271
273
|
}
|
|
@@ -273,32 +275,32 @@ class FromTag<I, S, R, E, A> extends FxBase<I | R | Scope.Scope, E, A> implement
|
|
|
273
275
|
/**
|
|
274
276
|
* @since 1.20.0
|
|
275
277
|
*/
|
|
276
|
-
export function tagged<
|
|
277
|
-
<const I extends C.IdentifierFactory<any>>(identifier: I): Subject.Tagged<C.IdentifierOf<I
|
|
278
|
-
<const I>(identifier: I): Subject.Tagged<C.IdentifierOf<I
|
|
278
|
+
export function tagged<A, E = never>(): {
|
|
279
|
+
<const I extends C.IdentifierFactory<any>>(identifier: I): Subject.Tagged<A, E, C.IdentifierOf<I>>
|
|
280
|
+
<const I>(identifier: I): Subject.Tagged<A, E, C.IdentifierOf<I>>
|
|
279
281
|
} {
|
|
280
|
-
return <const I>(identifier: I) => new TaggedImpl(C.Tagged<I, Subject<
|
|
282
|
+
return <const I>(identifier: I) => new TaggedImpl(C.Tagged<I, Subject<A, E>>(identifier))
|
|
281
283
|
}
|
|
282
284
|
|
|
283
285
|
const isDataFirst = (args: IArguments): boolean =>
|
|
284
286
|
args.length === 2 || Effect.isEffect(args[0]) || hasProperty(args[0], TypeId)
|
|
285
287
|
|
|
286
|
-
class TaggedImpl<
|
|
287
|
-
readonly provide: Subject.Tagged<
|
|
288
|
+
class TaggedImpl<A, E, I> extends FromTag<I, Subject<A, E>, A, E, never> implements Subject.Tagged<A, E, I> {
|
|
289
|
+
readonly provide: Subject.Tagged<A, E, I>["provide"]
|
|
288
290
|
|
|
289
|
-
constructor(readonly tag: C.Tagged<I, Subject<
|
|
291
|
+
constructor(readonly tag: C.Tagged<I, Subject<A, E>>) {
|
|
290
292
|
super(tag, identity)
|
|
291
293
|
|
|
292
294
|
this.provide = dual(
|
|
293
295
|
isDataFirst,
|
|
294
|
-
<
|
|
295
|
-
if (TypeId in fxOrEffect) return provide(fxOrEffect as Fx<Exclude<R2, I
|
|
296
|
-
else return Effect.provide(fxOrEffect as Effect.Effect<
|
|
296
|
+
<B, E2, R2>(fxOrEffect: Fx<B, E2, R2> | Effect.Effect<B, E2, R2>, replay?: number) => {
|
|
297
|
+
if (TypeId in fxOrEffect) return provide(fxOrEffect as Fx<B, E2, Exclude<R2, I>>, this.make(replay))
|
|
298
|
+
else return Effect.provide(fxOrEffect as Effect.Effect<B, E2, R2>, this.make(replay))
|
|
297
299
|
}
|
|
298
300
|
)
|
|
299
301
|
}
|
|
300
302
|
|
|
301
|
-
make(replay?: number): Layer.Layer<
|
|
303
|
+
make(replay?: number): Layer.Layer<I> {
|
|
302
304
|
return this.tag.scoped(make(replay))
|
|
303
305
|
}
|
|
304
306
|
}
|
package/src/Typeclass.ts
CHANGED
|
@@ -33,7 +33,7 @@ import { multicast } from "./internal/share.js"
|
|
|
33
33
|
* @category TypeLambda
|
|
34
34
|
*/
|
|
35
35
|
export interface FxTypeLambda extends HKT.TypeLambda {
|
|
36
|
-
readonly type: Fx.Fx<this["
|
|
36
|
+
readonly type: Fx.Fx<this["Target"], this["Out1"], this["Out2"]>
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
/**
|
|
@@ -302,7 +302,7 @@ export const Applicative: App.Applicative<FxTypeLambda> = {
|
|
|
302
302
|
* @category Filterable
|
|
303
303
|
*/
|
|
304
304
|
export const Filterable: Filter.Filterable<FxTypeLambda> = {
|
|
305
|
-
partitionMap: dual(2, <
|
|
305
|
+
partitionMap: dual(2, <A, E, R, B, C>(self: Fx.Fx<A, E, R>, f: (a: A) => Either<B, C>) => {
|
|
306
306
|
const m = multicast(Fx.map(self, f))
|
|
307
307
|
|
|
308
308
|
return [
|