@fncts/io 0.0.49 → 0.0.50
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/IO/api/foreachExec.d.ts +18 -0
- package/Push/Bounds.d.ts +4 -0
- package/Push/FlattenStrategy.d.ts +47 -0
- package/Push/IndexedBuffer.d.ts +19 -0
- package/Push/MergeStrategy.d.ts +19 -0
- package/Push/Operator/IOLoopOperator.d.ts +61 -0
- package/Push/Operator/IOOperator.d.ts +63 -0
- package/Push/Operator/LoopOperator.d.ts +50 -0
- package/Push/Operator/SyncOperator.d.ts +41 -0
- package/Push/Operator.d.ts +4 -0
- package/Push/Producer/IOProducer.d.ts +41 -0
- package/Push/Producer/SyncProducer.d.ts +61 -0
- package/Push/Producer.d.ts +1 -0
- package/Push/Sink.d.ts +65 -0
- package/Push/api.d.ts +78 -161
- package/Push/definition.d.ts +92 -19
- package/Push/internal.d.ts +3 -0
- package/Push.d.ts +6 -0
- package/Ref/Synchronized/definition.d.ts +32 -9
- package/Ref/definition.d.ts +12 -0
- package/Scope/api.d.ts +16 -1
- package/Sink/definition.d.ts +5 -6
- package/Subject/Atomic.d.ts +19 -9
- package/Subject/DeferredRef.d.ts +17 -0
- package/Subject/Hold.d.ts +19 -0
- package/Subject/RefSubject/Atomic.d.ts +41 -0
- package/Subject/RefSubject/Derived.d.ts +43 -0
- package/Subject/RefSubject/RefSubject.d.ts +27 -0
- package/Subject/definition.d.ts +14 -2
- package/Subject.d.ts +2 -0
- package/SubscriptionRef.d.ts +0 -1
- package/_cjs/IO/api/foreachExec.cjs +29 -4
- package/_cjs/IO/api/foreachExec.cjs.map +1 -1
- package/_cjs/Push/Bounds.cjs +2 -0
- package/_cjs/Push/Bounds.cjs.map +1 -0
- package/_cjs/Push/FlattenStrategy.cjs +95 -0
- package/_cjs/Push/FlattenStrategy.cjs.map +1 -0
- package/_cjs/Push/IndexedBuffer.cjs +70 -0
- package/_cjs/Push/IndexedBuffer.cjs.map +1 -0
- package/_cjs/Push/MergeStrategy.cjs +45 -0
- package/_cjs/Push/MergeStrategy.cjs.map +1 -0
- package/_cjs/Push/Operator/IOLoopOperator.cjs +225 -0
- package/_cjs/Push/Operator/IOLoopOperator.cjs.map +1 -0
- package/_cjs/Push/Operator/IOOperator.cjs +104 -0
- package/_cjs/Push/Operator/IOOperator.cjs.map +1 -0
- package/_cjs/Push/Operator/LoopOperator.cjs +165 -0
- package/_cjs/Push/Operator/LoopOperator.cjs.map +1 -0
- package/_cjs/Push/Operator/SyncOperator.cjs +78 -0
- package/_cjs/Push/Operator/SyncOperator.cjs.map +1 -0
- package/_cjs/Push/Operator.cjs +2 -0
- package/_cjs/Push/Operator.cjs.map +1 -0
- package/_cjs/Push/Producer/IOProducer.cjs +67 -0
- package/_cjs/Push/Producer/IOProducer.cjs.map +1 -0
- package/_cjs/Push/Producer/SyncProducer.cjs +107 -0
- package/_cjs/Push/Producer/SyncProducer.cjs.map +1 -0
- package/_cjs/Push/Producer.cjs +2 -0
- package/_cjs/Push/Producer.cjs.map +1 -0
- package/_cjs/Push/Sink.cjs +219 -0
- package/_cjs/Push/Sink.cjs.map +1 -0
- package/_cjs/Push/api.cjs +339 -383
- package/_cjs/Push/api.cjs.map +1 -1
- package/_cjs/Push/definition.cjs +79 -22
- package/_cjs/Push/definition.cjs.map +1 -1
- package/_cjs/Push/internal.cjs +31 -26
- package/_cjs/Push/internal.cjs.map +1 -1
- package/_cjs/Push.cjs +66 -0
- package/_cjs/Push.cjs.map +1 -1
- package/_cjs/Ref/Synchronized/definition.cjs +12 -12
- package/_cjs/Ref/Synchronized/definition.cjs.map +1 -1
- package/_cjs/Ref/definition.cjs.map +1 -1
- package/_cjs/Scope/api.cjs +28 -7
- package/_cjs/Scope/api.cjs.map +1 -1
- package/_cjs/Sink/definition.cjs +2 -3
- package/_cjs/Sink/definition.cjs.map +1 -1
- package/_cjs/Stream/definition.cjs.map +1 -1
- package/_cjs/Subject/Atomic.cjs +45 -10
- package/_cjs/Subject/Atomic.cjs.map +1 -1
- package/_cjs/Subject/DeferredRef.cjs +53 -0
- package/_cjs/Subject/DeferredRef.cjs.map +1 -0
- package/_cjs/Subject/Hold.cjs +41 -0
- package/_cjs/Subject/Hold.cjs.map +1 -0
- package/_cjs/Subject/RefSubject/Atomic.cjs +130 -0
- package/_cjs/Subject/RefSubject/Atomic.cjs.map +1 -0
- package/_cjs/Subject/RefSubject/Derived.cjs +98 -0
- package/_cjs/Subject/RefSubject/Derived.cjs.map +1 -0
- package/_cjs/Subject/RefSubject/RefSubject.cjs +19 -0
- package/_cjs/Subject/RefSubject/RefSubject.cjs.map +1 -0
- package/_cjs/Subject/definition.cjs +16 -1
- package/_cjs/Subject/definition.cjs.map +1 -1
- package/_cjs/Subject.cjs +22 -0
- package/_cjs/Subject.cjs.map +1 -1
- package/_cjs/SubscriptionRef.cjs +0 -1
- package/_cjs/SubscriptionRef.cjs.map +1 -1
- package/_mjs/IO/api/foreachExec.mjs +27 -4
- package/_mjs/IO/api/foreachExec.mjs.map +1 -1
- package/_mjs/Push/Bounds.mjs +2 -0
- package/_mjs/Push/Bounds.mjs.map +1 -0
- package/_mjs/Push/FlattenStrategy.mjs +86 -0
- package/_mjs/Push/FlattenStrategy.mjs.map +1 -0
- package/_mjs/Push/IndexedBuffer.mjs +61 -0
- package/_mjs/Push/IndexedBuffer.mjs.map +1 -0
- package/_mjs/Push/MergeStrategy.mjs +34 -0
- package/_mjs/Push/MergeStrategy.mjs.map +1 -0
- package/_mjs/Push/Operator/IOLoopOperator.mjs +208 -0
- package/_mjs/Push/Operator/IOLoopOperator.mjs.map +1 -0
- package/_mjs/Push/Operator/IOOperator.mjs +91 -0
- package/_mjs/Push/Operator/IOOperator.mjs.map +1 -0
- package/_mjs/Push/Operator/LoopOperator.mjs +151 -0
- package/_mjs/Push/Operator/LoopOperator.mjs.map +1 -0
- package/_mjs/Push/Operator/SyncOperator.mjs +67 -0
- package/_mjs/Push/Operator/SyncOperator.mjs.map +1 -0
- package/_mjs/Push/Operator.mjs +2 -0
- package/_mjs/Push/Operator.mjs.map +1 -0
- package/_mjs/Push/Producer/IOProducer.mjs +55 -0
- package/_mjs/Push/Producer/IOProducer.mjs.map +1 -0
- package/_mjs/Push/Producer/SyncProducer.mjs +90 -0
- package/_mjs/Push/Producer/SyncProducer.mjs.map +1 -0
- package/_mjs/Push/Producer.mjs +2 -0
- package/_mjs/Push/Producer.mjs.map +1 -0
- package/_mjs/Push/Sink.mjs +206 -0
- package/_mjs/Push/Sink.mjs.map +1 -0
- package/_mjs/Push/api.mjs +311 -344
- package/_mjs/Push/api.mjs.map +1 -1
- package/_mjs/Push/definition.mjs +73 -18
- package/_mjs/Push/definition.mjs.map +1 -1
- package/_mjs/Push/internal.mjs +30 -26
- package/_mjs/Push/internal.mjs.map +1 -1
- package/_mjs/Push.mjs +7 -1
- package/_mjs/Push.mjs.map +1 -1
- package/_mjs/Ref/Synchronized/definition.mjs +12 -12
- package/_mjs/Ref/Synchronized/definition.mjs.map +1 -1
- package/_mjs/Ref/definition.mjs.map +1 -1
- package/_mjs/Scope/api.mjs +22 -4
- package/_mjs/Scope/api.mjs.map +1 -1
- package/_mjs/Sink/definition.mjs +2 -3
- package/_mjs/Sink/definition.mjs.map +1 -1
- package/_mjs/Stream/definition.mjs.map +1 -1
- package/_mjs/Subject/Atomic.mjs +46 -10
- package/_mjs/Subject/Atomic.mjs.map +1 -1
- package/_mjs/Subject/DeferredRef.mjs +45 -0
- package/_mjs/Subject/DeferredRef.mjs.map +1 -0
- package/_mjs/Subject/Hold.mjs +33 -0
- package/_mjs/Subject/Hold.mjs.map +1 -0
- package/_mjs/Subject/RefSubject/Atomic.mjs +122 -0
- package/_mjs/Subject/RefSubject/Atomic.mjs.map +1 -0
- package/_mjs/Subject/RefSubject/Derived.mjs +90 -0
- package/_mjs/Subject/RefSubject/Derived.mjs.map +1 -0
- package/_mjs/Subject/RefSubject/RefSubject.mjs +12 -0
- package/_mjs/Subject/RefSubject/RefSubject.mjs.map +1 -0
- package/_mjs/Subject/definition.mjs +14 -0
- package/_mjs/Subject/definition.mjs.map +1 -1
- package/_mjs/Subject.mjs +2 -0
- package/_mjs/Subject.mjs.map +1 -1
- package/_mjs/SubscriptionRef.mjs +0 -1
- package/_mjs/SubscriptionRef.mjs.map +1 -1
- package/_src/IO/api/foreachExec.ts +47 -0
- package/_src/Push/Bounds.ts +4 -0
- package/_src/Push/FlattenStrategy.ts +137 -0
- package/_src/Push/IndexedBuffer.ts +79 -0
- package/_src/Push/MergeStrategy.ts +59 -0
- package/_src/Push/Operator/IOLoopOperator.ts +413 -0
- package/_src/Push/Operator/IOOperator.ts +173 -0
- package/_src/Push/Operator/LoopOperator.ts +242 -0
- package/_src/Push/Operator/SyncOperator.ts +107 -0
- package/_src/Push/Operator.ts +7 -0
- package/_src/Push/Producer/IOProducer.ts +83 -0
- package/_src/Push/Producer/SyncProducer.ts +105 -0
- package/_src/Push/Producer.ts +0 -0
- package/_src/Push/Sink.ts +302 -0
- package/_src/Push/api.ts +387 -513
- package/_src/Push/definition.ts +216 -23
- package/_src/Push/internal.ts +11 -0
- package/_src/Push.ts +7 -1
- package/_src/Ref/Synchronized/definition.ts +81 -37
- package/_src/Ref/definition.ts +26 -0
- package/_src/Scope/api.ts +22 -0
- package/_src/Sink/definition.ts +4 -5
- package/_src/Stream/definition.ts +0 -1
- package/_src/Subject/Atomic.ts +68 -11
- package/_src/Subject/DeferredRef.ts +44 -0
- package/_src/Subject/Hold.ts +48 -0
- package/_src/Subject/RefSubject/Atomic.ts +193 -0
- package/_src/Subject/RefSubject/Derived.ts +179 -0
- package/_src/Subject/RefSubject/RefSubject.ts +90 -0
- package/_src/Subject/definition.ts +21 -3
- package/_src/Subject.ts +5 -3
- package/_src/SubscriptionRef.ts +1 -1
- package/_src/index.ts +49 -50
- package/index.d.ts +0 -1
- package/package.json +4 -4
- package/RefSubject/Atomic.d.ts +0 -34
- package/RefSubject/Synchronized/api.d.ts +0 -9
- package/RefSubject/Synchronized/definition.d.ts +0 -39
- package/RefSubject/api.d.ts +0 -120
- package/RefSubject/definition.d.ts +0 -52
- package/RefSubject.d.ts +0 -3
- package/_cjs/RefSubject/Atomic.cjs +0 -107
- package/_cjs/RefSubject/Atomic.cjs.map +0 -1
- package/_cjs/RefSubject/Synchronized/api.cjs +0 -22
- package/_cjs/RefSubject/Synchronized/api.cjs.map +0 -1
- package/_cjs/RefSubject/Synchronized/definition.cjs +0 -55
- package/_cjs/RefSubject/Synchronized/definition.cjs.map +0 -1
- package/_cjs/RefSubject/api.cjs +0 -251
- package/_cjs/RefSubject/api.cjs.map +0 -1
- package/_cjs/RefSubject/definition.cjs +0 -26
- package/_cjs/RefSubject/definition.cjs.map +0 -1
- package/_cjs/RefSubject.cjs +0 -39
- package/_cjs/RefSubject.cjs.map +0 -1
- package/_mjs/RefSubject/Atomic.mjs +0 -99
- package/_mjs/RefSubject/Atomic.mjs.map +0 -1
- package/_mjs/RefSubject/Synchronized/api.mjs +0 -15
- package/_mjs/RefSubject/Synchronized/api.mjs.map +0 -1
- package/_mjs/RefSubject/Synchronized/definition.mjs +0 -47
- package/_mjs/RefSubject/Synchronized/definition.mjs.map +0 -1
- package/_mjs/RefSubject/api.mjs +0 -229
- package/_mjs/RefSubject/api.mjs.map +0 -1
- package/_mjs/RefSubject/definition.mjs +0 -19
- package/_mjs/RefSubject/definition.mjs.map +0 -1
- package/_mjs/RefSubject.mjs +0 -5
- package/_mjs/RefSubject.mjs.map +0 -1
- package/_src/RefSubject/Atomic.ts +0 -129
- package/_src/RefSubject/Synchronized/api.ts +0 -14
- package/_src/RefSubject/Synchronized/definition.ts +0 -76
- package/_src/RefSubject/api.ts +0 -253
- package/_src/RefSubject/definition.ts +0 -70
- package/_src/RefSubject.ts +0 -5
package/_src/RefSubject/api.ts
DELETED
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
import { tuple } from "@fncts/base/data/function";
|
|
2
|
-
import { Sink } from "@fncts/io/Push";
|
|
3
|
-
import { AtomicRefSubject } from "@fncts/io/RefSubject/Atomic";
|
|
4
|
-
|
|
5
|
-
import { RefSubject } from "./definition.js";
|
|
6
|
-
import { RefSubjectInternal } from "./definition.js";
|
|
7
|
-
import { concrete } from "./definition.js";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @tsplus static fncts.io.Push.RefSubjectOps unsafeMake
|
|
11
|
-
*/
|
|
12
|
-
export function unsafeMake<A>(initial: A): RefSubject<never, never, A, A> {
|
|
13
|
-
return new AtomicRefSubject(initial);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* @tsplus static fncts.io.Push.RefSubjectOps make
|
|
18
|
-
* @tsplus static fncts.io.Push.RefSubjectOps __call
|
|
19
|
-
*/
|
|
20
|
-
export function make<A>(initial: Lazy<A>): UIO<RefSubject<never, never, A, A>> {
|
|
21
|
-
return IO(RefSubject.unsafeMake(initial()));
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Reads the value from the `Ref`.
|
|
26
|
-
*
|
|
27
|
-
* @tsplus getter fncts.io.Push.RefSubject get
|
|
28
|
-
*/
|
|
29
|
-
export function get<R, E, A, B>(self: RefSubject<R, E, A, B>, __tsplusTrace?: string): IO<R, never, B> {
|
|
30
|
-
concrete(self);
|
|
31
|
-
return self.get;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Writes a new value to the `Ref`, with a guarantee of immediate
|
|
36
|
-
* consistency (at some cost to performance).
|
|
37
|
-
*
|
|
38
|
-
* @tsplus pipeable fncts.io.Push.RefSubject set
|
|
39
|
-
*/
|
|
40
|
-
export function set<A>(a: A, __tsplusTrace?: string) {
|
|
41
|
-
return <R, E, B>(self: RefSubject<R, E, A, B>): IO<R, never, void> => {
|
|
42
|
-
concrete(self);
|
|
43
|
-
return self.set(a);
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
class Dimap<R, E, A, B, C, D> extends RefSubjectInternal<R, E, C, D> {
|
|
48
|
-
constructor(
|
|
49
|
-
readonly ref: RefSubjectInternal<R, E, A, B>,
|
|
50
|
-
readonly f: (c: C) => A,
|
|
51
|
-
readonly g: (b: B) => D,
|
|
52
|
-
) {
|
|
53
|
-
super();
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
get get(): IO<R, never, D> {
|
|
57
|
-
return this.ref.get.map(this.g);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
set(value: C): IO<R, never, void> {
|
|
61
|
-
return this.ref.set(this.f(value));
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
modify<F>(f: (d: D) => readonly [F, C], __tsplusTrace?: string | undefined): IO<R, never, F> {
|
|
65
|
-
return this.get.flatMap((c) => {
|
|
66
|
-
const o = f(c);
|
|
67
|
-
return this.set(o[1]) > IO.succeedNow(o[0]);
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
run<R1>(emitter: Sink<R1, E, D>): IO<R | R1, never, void> {
|
|
72
|
-
return this.ref.run(
|
|
73
|
-
Sink(
|
|
74
|
-
(value) => emitter.event(this.g(value)),
|
|
75
|
-
(cause) => emitter.error(cause),
|
|
76
|
-
),
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
event(value: C): IO<R, never, void> {
|
|
81
|
-
return this.ref.event(this.f(value));
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
error(cause: Cause<E>): IO<R, never, void> {
|
|
85
|
-
return this.ref.error(cause);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
get unsafeGet(): D {
|
|
89
|
-
return this.g(this.ref.unsafeGet);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Transforms both the `set` and `get` values of the `Ref` with the
|
|
95
|
-
* specified functions.
|
|
96
|
-
*
|
|
97
|
-
* @tsplus pipeable fncts.io.Push.RefSubject dimap
|
|
98
|
-
*/
|
|
99
|
-
export function dimap<A, B, C, D>(f: (_: C) => A, g: (_: B) => D, __tsplusTrace?: string) {
|
|
100
|
-
return <R, E>(self: RefSubject<R, E, A, B>): RefSubject<R, E, C, D> => {
|
|
101
|
-
concrete(self);
|
|
102
|
-
return new Dimap(self, f, g);
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Transforms the `set` value of the `Ref` with the specified function.
|
|
108
|
-
*
|
|
109
|
-
* @tsplus pipeable fncts.io.Push.RefSubject contramap
|
|
110
|
-
*/
|
|
111
|
-
export function contramap<A, C>(f: (_: C) => A, __tsplusTrace?: string) {
|
|
112
|
-
return <R, E, B>(self: RefSubject<R, E, A, B>): RefSubject<R, E, C, B> => {
|
|
113
|
-
return self.dimap(f, Function.identity);
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Transforms the `get` value of the `Ref` with the specified function.
|
|
119
|
-
*
|
|
120
|
-
* @tsplus pipeable fncts.io.Push.RefSubject map
|
|
121
|
-
*/
|
|
122
|
-
export function map<B, C>(f: (_: B) => C, __tsplusTrace?: string) {
|
|
123
|
-
return <R, E, A>(ref: RefSubject<R, E, A, B>): RefSubject<R, E, A, C> => {
|
|
124
|
-
return ref.dimap(Function.identity, f);
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Atomically modifies the `Ref` with the specified function, which
|
|
130
|
-
* computes a return value for the modification. This is a more powerful
|
|
131
|
-
* version of `update`.
|
|
132
|
-
*
|
|
133
|
-
* @tsplus pipeable fncts.io.Push.RefSubject modify
|
|
134
|
-
*/
|
|
135
|
-
export function modify<B, A>(f: (a: A) => readonly [B, A], __tsplusTrace?: string) {
|
|
136
|
-
return <R, E>(self: RefSubject<R, E, A, A>): IO<R, never, B> => {
|
|
137
|
-
concrete(self);
|
|
138
|
-
return self.modify(f);
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Atomically modifies the `Ref` with the specified partial function,
|
|
144
|
-
* which computes a return value for the modification if the function is
|
|
145
|
-
* defined on the current value otherwise it returns a default value. This
|
|
146
|
-
* is a more powerful version of `updateJust`.
|
|
147
|
-
*
|
|
148
|
-
* @tsplus pipeable fncts.io.Push.RefSubject modifyJust
|
|
149
|
-
*/
|
|
150
|
-
export function modifyJust<A, B>(def: B, f: (a: A) => Maybe<readonly [B, A]>, __tsplusTrace?: string) {
|
|
151
|
-
return <R, E>(self: RefSubject<R, E, A, A>): IO<R, never, B> => {
|
|
152
|
-
return self.modify((a) => f(a).getOrElse(tuple(def, a)));
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Atomically writes the specified value to the `Ref`, returning the value
|
|
158
|
-
* immediately before modification.
|
|
159
|
-
*
|
|
160
|
-
* @tsplus pipeable fncts.io.Push.RefSubject getAndSet
|
|
161
|
-
*/
|
|
162
|
-
export function getAndSet<A>(a: A, __tsplusTrace?: string) {
|
|
163
|
-
return <R, E>(self: RefSubject<R, E, A, A>): IO<R, never, A> => {
|
|
164
|
-
return self.modify((a0) => tuple(a0, a));
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Atomically modifies the `Ref` with the specified function, returning
|
|
170
|
-
* the value immediately before modification.
|
|
171
|
-
*
|
|
172
|
-
* @tsplus pipeable fncts.io.Push.RefSubject getAndUpdate
|
|
173
|
-
*/
|
|
174
|
-
export function getAndUpdate<A>(f: (a: A) => A, __tsplusTrace?: string) {
|
|
175
|
-
return <R, E>(self: RefSubject<R, E, A, A>): IO<R, E, A> => {
|
|
176
|
-
return self.modify((a0) => tuple(a0, f(a0)));
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Atomically modifies the `Ref` with the specified partial function,
|
|
182
|
-
* returning the value immediately before modification. If the function is
|
|
183
|
-
* undefined on the current value it doesn't change it.
|
|
184
|
-
*
|
|
185
|
-
* @tsplus pipeable fncts.io.Push.RefSubject getAndUpdateJust
|
|
186
|
-
*/
|
|
187
|
-
export function getAndUpdateJust<A>(f: (a: A) => Maybe<A>, __tsplusTrace?: string) {
|
|
188
|
-
return <R, E>(self: RefSubject<R, E, A, A>): IO<R, never, A> => {
|
|
189
|
-
return self.modify((a0) => tuple(a0, f(a0).getOrElse(a0)));
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* Atomically modifies the `Ref` with the specified function.
|
|
195
|
-
*
|
|
196
|
-
* @tsplus pipeable fncts.io.Push.RefSubject update
|
|
197
|
-
*/
|
|
198
|
-
export function update<A>(f: (a: A) => A, __tsplusTrace?: string) {
|
|
199
|
-
return <R, E>(self: RefSubject<R, E, A, A>): IO<R, never, void> => {
|
|
200
|
-
return self.modify((a0) => tuple(undefined, f(a0)));
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Atomically modifies the `Ref` with the specified function and returns
|
|
206
|
-
* the updated value.
|
|
207
|
-
*
|
|
208
|
-
* @tsplus pipeable fncts.io.Push.RefSubject updateAndGet
|
|
209
|
-
*/
|
|
210
|
-
export function updateAndGet<A>(f: (a: A) => A, __tsplusTrace?: string) {
|
|
211
|
-
return <R, E>(self: RefSubject<R, E, A, A>) => {
|
|
212
|
-
return self.modify((a0) => {
|
|
213
|
-
const r = f(a0);
|
|
214
|
-
return tuple(r, r);
|
|
215
|
-
});
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
/**
|
|
220
|
-
* Atomically modifies the `Ref` with the specified partial function. If
|
|
221
|
-
* the function is undefined on the current value it doesn't change it.
|
|
222
|
-
*
|
|
223
|
-
* @tsplus pipeable fncts.io.Push.RefSubject updateJust
|
|
224
|
-
*/
|
|
225
|
-
export function updateJust<A>(f: (a: A) => Maybe<A>, __tsplusTrace?: string) {
|
|
226
|
-
return <R, E>(self: RefSubject<R, E, A, A>): IO<R, never, void> => {
|
|
227
|
-
return self.modify((a0) => tuple(undefined, f(a0).getOrElse(a0)));
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* Atomically modifies the `Ref` with the specified partial function. If
|
|
233
|
-
* the function is undefined on the current value it returns the old value
|
|
234
|
-
* without changing it.
|
|
235
|
-
*
|
|
236
|
-
* @tsplus pipeable fncts.io.Push.RefSubject updateJustAndGet
|
|
237
|
-
*/
|
|
238
|
-
export function updateJustAndGet<A>(f: (a: A) => Maybe<A>, __tsplusTrace?: string) {
|
|
239
|
-
return <R, E>(self: RefSubject<R, E, A, A>): IO<R, never, A> => {
|
|
240
|
-
return self.modify((a0) => {
|
|
241
|
-
const r = f(a0).getOrElse(a0);
|
|
242
|
-
return tuple(r, r);
|
|
243
|
-
});
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* @tsplus getter fncts.io.Push.RefSubject unsafeGet
|
|
249
|
-
*/
|
|
250
|
-
export function unsafeGet<R, E, A, B>(self: RefSubject<R, E, A, B>): B {
|
|
251
|
-
concrete(self);
|
|
252
|
-
return self.unsafeGet;
|
|
253
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import type { Sink } from "../Push.js";
|
|
2
|
-
import type { Push } from "../Push.js";
|
|
3
|
-
import type { ModifiableRef, ReadableRef, WritableRef } from "../Ref.js";
|
|
4
|
-
import type { SynchronizedRefSubject } from "@fncts/io/RefSubject/Synchronized/definition";
|
|
5
|
-
|
|
6
|
-
import { PushTypeId } from "../Push.js";
|
|
7
|
-
import { PushVariance } from "../Push.js";
|
|
8
|
-
import { RefVariance } from "../Ref.js";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @tsplus type fncts.io.Push.RefSubject
|
|
12
|
-
*/
|
|
13
|
-
export interface RefSubject<out R, in out E, in A, out B> extends Push<R, E, B>, Sink<R, E, A> {}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* @tsplus type fncts.io.Push.RefSubjectOps
|
|
17
|
-
*/
|
|
18
|
-
export interface RefSubjectOps {}
|
|
19
|
-
|
|
20
|
-
export const RefSubject: RefSubjectOps = {};
|
|
21
|
-
|
|
22
|
-
export declare namespace RefSubject {
|
|
23
|
-
export type Synchronized<R, E, A, B> = SynchronizedRefSubject<R, E, A, B>;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export abstract class RefSubjectInternal<R, E, A, B>
|
|
27
|
-
implements
|
|
28
|
-
ReadableRef<R, never, B>,
|
|
29
|
-
WritableRef<R, never, A>,
|
|
30
|
-
ModifiableRef<R, R, never, never, A, B>,
|
|
31
|
-
Push<R, E, B>,
|
|
32
|
-
Sink<R, E, A>
|
|
33
|
-
{
|
|
34
|
-
readonly [PushTypeId]: PushTypeId = PushTypeId;
|
|
35
|
-
declare [RefVariance]: {
|
|
36
|
-
readonly _RA: (_: never) => R;
|
|
37
|
-
readonly _RB: (_: never) => R;
|
|
38
|
-
readonly _EA: (_: never) => never;
|
|
39
|
-
readonly _EB: (_: never) => never;
|
|
40
|
-
readonly _A: (_: A) => void;
|
|
41
|
-
readonly _B: (_: never) => B;
|
|
42
|
-
};
|
|
43
|
-
declare [PushVariance]: {
|
|
44
|
-
readonly _R: (_: never) => R;
|
|
45
|
-
readonly _E: (_: never) => E;
|
|
46
|
-
readonly _A: (_: A) => B;
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
abstract get get(): IO<R, never, B>;
|
|
50
|
-
|
|
51
|
-
abstract set(value: A): IO<R, never, void>;
|
|
52
|
-
|
|
53
|
-
abstract modify<C>(f: (b: B) => readonly [C, A], __tsplusTrace?: string): IO<R, never, C>;
|
|
54
|
-
|
|
55
|
-
abstract run<R1>(emitter: Sink<R1, E, B>): IO<R | R1, never, void>;
|
|
56
|
-
|
|
57
|
-
abstract error(cause: Cause<E>): IO<R, never, void>;
|
|
58
|
-
|
|
59
|
-
abstract event(value: A): IO<R, never, void>;
|
|
60
|
-
|
|
61
|
-
abstract get unsafeGet(): B;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* @tsplus static fncts.io.Push.RefSubjectOps concrete
|
|
66
|
-
* @tsplus macro remove
|
|
67
|
-
*/
|
|
68
|
-
export function concrete<R, E, A, B>(_: RefSubject<R, E, A, B>): asserts _ is RefSubjectInternal<R, E, A, B> {
|
|
69
|
-
//
|
|
70
|
-
}
|