@typed/fx 1.27.3 → 1.28.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 +1 -1
- package/dist/cjs/AsyncData.js.map +1 -1
- package/dist/cjs/Emitter.js +3 -3
- package/dist/cjs/Emitter.js.map +1 -1
- package/dist/cjs/Form.js +15 -15
- package/dist/cjs/Form.js.map +1 -1
- package/dist/cjs/FormEntry.js +3 -3
- package/dist/cjs/FormEntry.js.map +1 -1
- package/dist/cjs/Fx.js +11 -9
- package/dist/cjs/Fx.js.map +1 -1
- package/dist/cjs/Idle.js +8 -8
- package/dist/cjs/Idle.js.map +1 -1
- package/dist/cjs/Match.js +17 -17
- package/dist/cjs/Match.js.map +1 -1
- package/dist/cjs/Pull.js +3 -3
- package/dist/cjs/Pull.js.map +1 -1
- package/dist/cjs/Push.js +1 -1
- package/dist/cjs/Push.js.map +1 -1
- package/dist/cjs/RefArray.js +2 -2
- package/dist/cjs/RefArray.js.map +1 -1
- package/dist/cjs/RefChunk.js +1 -1
- package/dist/cjs/RefChunk.js.map +1 -1
- package/dist/cjs/RefHashMap.js +1 -1
- package/dist/cjs/RefHashMap.js.map +1 -1
- package/dist/cjs/RefHashSet.js +1 -1
- package/dist/cjs/RefHashSet.js.map +1 -1
- package/dist/cjs/RefSubject.js +150 -75
- package/dist/cjs/RefSubject.js.map +1 -1
- package/dist/cjs/Sink.js +14 -14
- package/dist/cjs/Sink.js.map +1 -1
- package/dist/cjs/Stream.js +1 -1
- package/dist/cjs/Stream.js.map +1 -1
- package/dist/cjs/Subject.js +27 -22
- package/dist/cjs/Subject.js.map +1 -1
- package/dist/cjs/Typeclass.js +1 -1
- package/dist/cjs/Typeclass.js.map +1 -1
- package/dist/cjs/Versioned.js +4 -4
- package/dist/cjs/Versioned.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/DeferredRef.js +14 -11
- package/dist/cjs/internal/DeferredRef.js.map +1 -1
- package/dist/cjs/internal/core.js +71 -42
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/diff.js +1 -1
- package/dist/cjs/internal/diff.js.map +1 -1
- package/dist/cjs/internal/effect-loop-operator.js +1 -1
- package/dist/cjs/internal/effect-loop-operator.js.map +1 -1
- package/dist/cjs/internal/effect-operator.js +3 -3
- package/dist/cjs/internal/effect-operator.js.map +1 -1
- package/dist/cjs/internal/effect-producer.js +3 -3
- package/dist/cjs/internal/effect-producer.js.map +1 -1
- package/dist/cjs/internal/helpers.js +63 -42
- package/dist/cjs/internal/helpers.js.map +1 -1
- package/dist/cjs/internal/keyed.js +34 -26
- package/dist/cjs/internal/keyed.js.map +1 -1
- package/dist/cjs/internal/loop-operator.js +1 -1
- package/dist/cjs/internal/loop-operator.js.map +1 -1
- package/dist/cjs/internal/operator.js +1 -1
- package/dist/cjs/internal/operator.js.map +1 -1
- package/dist/cjs/internal/protos.js +1 -1
- package/dist/cjs/internal/protos.js.map +1 -1
- package/dist/cjs/internal/provide.js +1 -1
- package/dist/cjs/internal/provide.js.map +1 -1
- package/dist/cjs/internal/share.js +8 -13
- package/dist/cjs/internal/share.js.map +1 -1
- package/dist/cjs/internal/sync-operator.js +4 -4
- package/dist/cjs/internal/sync-operator.js.map +1 -1
- package/dist/cjs/internal/sync-producer.js +27 -23
- package/dist/cjs/internal/sync-producer.js.map +1 -1
- package/dist/cjs/internal/withKey.js +7 -7
- package/dist/cjs/internal/withKey.js.map +1 -1
- package/dist/dts/AsyncData.d.ts +2 -2
- package/dist/dts/AsyncData.d.ts.map +1 -1
- package/dist/dts/Emitter.d.ts +1 -1
- package/dist/dts/Emitter.d.ts.map +1 -1
- package/dist/dts/Fx.d.ts +39 -13
- package/dist/dts/Fx.d.ts.map +1 -1
- package/dist/dts/Idle.d.ts.map +1 -1
- package/dist/dts/Match.d.ts +1 -1
- package/dist/dts/Match.d.ts.map +1 -1
- package/dist/dts/Push.d.ts +4 -1
- package/dist/dts/Push.d.ts.map +1 -1
- package/dist/dts/RefArray.d.ts +1 -2
- package/dist/dts/RefArray.d.ts.map +1 -1
- package/dist/dts/RefChunk.d.ts.map +1 -1
- package/dist/dts/RefHashMap.d.ts +1 -1
- package/dist/dts/RefHashMap.d.ts.map +1 -1
- package/dist/dts/RefHashSet.d.ts.map +1 -1
- package/dist/dts/RefSubject.d.ts +64 -3
- package/dist/dts/RefSubject.d.ts.map +1 -1
- package/dist/dts/Sink.d.ts +2 -1
- package/dist/dts/Sink.d.ts.map +1 -1
- package/dist/dts/Subject.d.ts +2 -1
- package/dist/dts/Subject.d.ts.map +1 -1
- package/dist/dts/Versioned.d.ts +3 -1
- package/dist/dts/Versioned.d.ts.map +1 -1
- package/dist/dts/internal/DeferredRef.d.ts +6 -4
- package/dist/dts/internal/DeferredRef.d.ts.map +1 -1
- package/dist/dts/internal/core.d.ts +25 -12
- package/dist/dts/internal/core.d.ts.map +1 -1
- package/dist/dts/internal/diff.d.ts +1 -1
- package/dist/dts/internal/diff.d.ts.map +1 -1
- package/dist/dts/internal/effect-operator.d.ts.map +1 -1
- package/dist/dts/internal/helpers.d.ts +8 -6
- package/dist/dts/internal/helpers.d.ts.map +1 -1
- package/dist/dts/internal/keyed.d.ts +2 -2
- package/dist/dts/internal/keyed.d.ts.map +1 -1
- package/dist/dts/internal/loop-operator.d.ts +1 -1
- package/dist/dts/internal/loop-operator.d.ts.map +1 -1
- package/dist/dts/internal/protos.d.ts +1 -1
- package/dist/dts/internal/protos.d.ts.map +1 -1
- package/dist/dts/internal/provide.d.ts.map +1 -1
- package/dist/dts/internal/share.d.ts +1 -1
- package/dist/dts/internal/share.d.ts.map +1 -1
- package/dist/dts/internal/strategies.d.ts.map +1 -1
- package/dist/dts/internal/sync-operator.d.ts.map +1 -1
- package/dist/dts/internal/sync-producer.d.ts +4 -4
- package/dist/dts/internal/sync-producer.d.ts.map +1 -1
- package/dist/esm/Emitter.js +1 -1
- package/dist/esm/Emitter.js.map +1 -1
- package/dist/esm/Form.js +14 -14
- package/dist/esm/Form.js.map +1 -1
- package/dist/esm/FormEntry.js +2 -2
- package/dist/esm/FormEntry.js.map +1 -1
- package/dist/esm/Fx.js +16 -5
- package/dist/esm/Fx.js.map +1 -1
- package/dist/esm/Idle.js +7 -7
- package/dist/esm/Idle.js.map +1 -1
- package/dist/esm/Match.js +17 -17
- package/dist/esm/Match.js.map +1 -1
- package/dist/esm/Pull.js +2 -2
- package/dist/esm/Push.js.map +1 -1
- package/dist/esm/RefArray.js +1 -1
- package/dist/esm/RefArray.js.map +1 -1
- package/dist/esm/RefHashMap.js.map +1 -1
- package/dist/esm/RefSubject.js +140 -59
- package/dist/esm/RefSubject.js.map +1 -1
- package/dist/esm/Sink.js +13 -13
- package/dist/esm/Sink.js.map +1 -1
- package/dist/esm/Subject.js +29 -20
- package/dist/esm/Subject.js.map +1 -1
- package/dist/esm/Versioned.js +1 -1
- package/dist/esm/Versioned.js.map +1 -1
- package/dist/esm/internal/DeferredRef.js +13 -10
- package/dist/esm/internal/DeferredRef.js.map +1 -1
- package/dist/esm/internal/core.js +70 -37
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/diff.js.map +1 -1
- package/dist/esm/internal/effect-operator.js +2 -2
- package/dist/esm/internal/effect-producer.js +1 -1
- package/dist/esm/internal/helpers.js +62 -39
- package/dist/esm/internal/helpers.js.map +1 -1
- package/dist/esm/internal/keyed.js +26 -17
- package/dist/esm/internal/keyed.js.map +1 -1
- package/dist/esm/internal/share.js +7 -12
- package/dist/esm/internal/share.js.map +1 -1
- package/dist/esm/internal/sync-operator.js +3 -3
- package/dist/esm/internal/sync-operator.js.map +1 -1
- package/dist/esm/internal/sync-producer.js +7 -5
- package/dist/esm/internal/sync-producer.js.map +1 -1
- package/dist/esm/internal/withKey.js +6 -6
- package/dist/esm/internal/withKey.js.map +1 -1
- package/package.json +8 -7
- package/src/Emitter.ts +2 -1
- package/src/Form.ts +22 -30
- package/src/FormEntry.ts +2 -2
- package/src/Fx.ts +54 -36
- package/src/Idle.ts +7 -7
- package/src/Match.ts +24 -26
- package/src/Pull.ts +2 -2
- package/src/Push.ts +4 -1
- package/src/RefArray.ts +1 -1
- package/src/RefHashMap.ts +1 -1
- package/src/RefSubject.ts +262 -98
- package/src/Sink.ts +15 -14
- package/src/Subject.ts +55 -39
- package/src/Versioned.ts +4 -2
- package/src/internal/DeferredRef.ts +21 -11
- package/src/internal/core.ts +92 -61
- package/src/internal/diff.ts +1 -1
- package/src/internal/effect-operator.ts +2 -2
- package/src/internal/effect-producer.ts +3 -3
- package/src/internal/helpers.ts +89 -42
- package/src/internal/keyed.ts +47 -42
- package/src/internal/loop-operator.ts +1 -1
- package/src/internal/protos.ts +1 -1
- package/src/internal/share.ts +11 -26
- package/src/internal/sync-operator.ts +3 -3
- package/src/internal/sync-producer.ts +7 -5
- package/src/internal/withKey.ts +6 -6
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MutableRef } from "effect";
|
|
1
2
|
import * as Deferred from "effect/Deferred";
|
|
2
3
|
import * as Effect from "effect/Effect";
|
|
3
4
|
import * as Exit from "effect/Exit";
|
|
@@ -6,29 +7,31 @@ import { EffectBase } from "./protos.js";
|
|
|
6
7
|
export class DeferredRef extends EffectBase {
|
|
7
8
|
id;
|
|
8
9
|
eq;
|
|
9
|
-
// Keep track of the latest value emitted by the stream
|
|
10
10
|
current;
|
|
11
|
+
// Keep track of the latest value emitted by the stream
|
|
11
12
|
version;
|
|
12
13
|
deferred;
|
|
13
|
-
constructor(id, eq) {
|
|
14
|
+
constructor(id, eq, current) {
|
|
14
15
|
super();
|
|
15
16
|
this.id = id;
|
|
16
17
|
this.eq = eq;
|
|
18
|
+
this.current = current;
|
|
17
19
|
this.reset();
|
|
18
20
|
}
|
|
19
21
|
toEffect() {
|
|
20
22
|
return Effect.suspend(() => {
|
|
21
|
-
|
|
23
|
+
const current = MutableRef.get(this.current);
|
|
24
|
+
if (Option.isNone(current)) {
|
|
22
25
|
return Deferred.await(this.deferred);
|
|
23
26
|
}
|
|
24
27
|
else {
|
|
25
|
-
return
|
|
28
|
+
return current.value;
|
|
26
29
|
}
|
|
27
30
|
});
|
|
28
31
|
}
|
|
29
32
|
done(exit) {
|
|
30
|
-
const current = this.current;
|
|
31
|
-
this.current
|
|
33
|
+
const current = MutableRef.get(this.current);
|
|
34
|
+
MutableRef.set(this.current, Option.some(exit));
|
|
32
35
|
if (Option.isSome(current) && this.eq(current.value, exit)) {
|
|
33
36
|
return false;
|
|
34
37
|
}
|
|
@@ -37,7 +40,7 @@ export class DeferredRef extends EffectBase {
|
|
|
37
40
|
return true;
|
|
38
41
|
}
|
|
39
42
|
reset() {
|
|
40
|
-
this.current
|
|
43
|
+
MutableRef.set(this.current, Option.none());
|
|
41
44
|
this.version = -1;
|
|
42
45
|
if (this.deferred) {
|
|
43
46
|
Deferred.unsafeDone(this.deferred, Exit.interrupt(this.id));
|
|
@@ -46,9 +49,9 @@ export class DeferredRef extends EffectBase {
|
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
51
|
export function make(eq) {
|
|
49
|
-
return Effect.map(Effect.fiberId, (id) => new DeferredRef(id, eq));
|
|
52
|
+
return Effect.map(Effect.fiberId, (id) => new DeferredRef(id, eq, MutableRef.make(Option.none())));
|
|
50
53
|
}
|
|
51
|
-
export function unsafeMake(id, eq) {
|
|
52
|
-
return new DeferredRef(id, eq);
|
|
54
|
+
export function unsafeMake(id, eq, current) {
|
|
55
|
+
return new DeferredRef(id, eq, current);
|
|
53
56
|
}
|
|
54
57
|
//# sourceMappingURL=DeferredRef.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeferredRef.js","sourceRoot":"","sources":["../../../src/internal/DeferredRef.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DeferredRef.js","sourceRoot":"","sources":["../../../src/internal/DeferredRef.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AAEnC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,OAAO,WAAkB,SAAQ,UAAuB;IAMlD;IACA;IACC;IAPX,uDAAuD;IAChD,OAAO,CAAS;IAChB,QAAQ,CAA0B;IAEzC,YACU,EAAmB,EACnB,EAA4C,EAC3C,OAA8D;QAEvE,KAAK,EAAE,CAAA;QAJC,OAAE,GAAF,EAAE,CAAiB;QACnB,OAAE,GAAF,EAAE,CAA0C;QAC3C,YAAO,GAAP,OAAO,CAAuD;QAGvE,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;YACzB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC5C,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACtC,CAAC;iBAAM,CAAC;gBACN,OAAO,OAAO,CAAC,KAAK,CAAA;YACtB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC,IAAqB;QACxB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAE5C,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAE/C,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAA;QACd,CAAC;QAED,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QACxC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAA;QAEjB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK;QACH,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QAC3C,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;QAEjB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7D,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC9C,CAAC;CACF;AAED,MAAM,UAAU,IAAI,CAAO,EAA4C;IACrE,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AACpG,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,EAAmB,EACnB,EAA4C,EAC5C,OAA8D;IAE9D,OAAO,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACzC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as Context from "@typed/context";
|
|
2
|
-
import {
|
|
2
|
+
import { Data, Record } from "effect";
|
|
3
3
|
import * as Boolean from "effect/Boolean";
|
|
4
4
|
import * as Cause from "effect/Cause";
|
|
5
5
|
import * as Clock from "effect/Clock";
|
|
@@ -18,6 +18,7 @@ import * as Predicate from "effect/Predicate";
|
|
|
18
18
|
import * as Ref from "effect/Ref";
|
|
19
19
|
import * as Scope from "effect/Scope";
|
|
20
20
|
import * as Tracer from "effect/Tracer";
|
|
21
|
+
import * as Unify from "effect/Unify";
|
|
21
22
|
import * as Sink from "../Sink.js";
|
|
22
23
|
import { boundsFrom, isInfiniteBounds, isNilBounds, mergeBounds } from "./bounds.js";
|
|
23
24
|
import * as EffectLoopOp from "./effect-loop-operator.js";
|
|
@@ -194,7 +195,7 @@ export const filterMapLoop = (fx, seed, f) => Transformer.make(fx, SyncLoopOp.Fi
|
|
|
194
195
|
export const loopEffect = (fx, seed, f) => Transformer.make(fx, EffectLoopOp.LoopEffectOperator(seed, f));
|
|
195
196
|
export const filterMapLoopEffect = (fx, seed, f) => Transformer.make(fx, EffectLoopOp.FilterMapLoopEffectOperator(seed, f));
|
|
196
197
|
export const observe = (fx, f) => Observe.make(fx, f);
|
|
197
|
-
const constUnit = () => Effect.
|
|
198
|
+
const constUnit = () => Effect.void;
|
|
198
199
|
export const drain = (fx) => Observe.make(fx, constUnit);
|
|
199
200
|
class Observe extends EffectBase {
|
|
200
201
|
i0;
|
|
@@ -208,12 +209,12 @@ class Observe extends EffectBase {
|
|
|
208
209
|
return Effect.asyncEffect((resume) => {
|
|
209
210
|
const { i0: fx, i1: f } = this;
|
|
210
211
|
const onFailure = (cause) => Effect.sync(() => resume(Effect.failCause(cause)));
|
|
211
|
-
return Effect.zipRight(fx.run(Sink.make(onFailure, (a) => Effect.catchAllCause(f(a), onFailure))), Effect.sync(() => resume(Effect.
|
|
212
|
+
return Effect.zipRight(fx.run(Sink.make(onFailure, (a) => Effect.catchAllCause(f(a), onFailure))), Effect.sync(() => resume(Effect.void)));
|
|
212
213
|
});
|
|
213
214
|
}
|
|
214
215
|
static make(fx, f) {
|
|
215
216
|
if (isEmpty(fx)) {
|
|
216
|
-
return Effect.
|
|
217
|
+
return Effect.void;
|
|
217
218
|
}
|
|
218
219
|
else if (isNever(fx)) {
|
|
219
220
|
return Effect.never;
|
|
@@ -225,13 +226,13 @@ class Observe extends EffectBase {
|
|
|
225
226
|
return Op.matchOperator(fx.i1, {
|
|
226
227
|
SyncOperator: (op) => SyncOp.matchSyncOperator(op, {
|
|
227
228
|
Map: (op) => SyncProducer.effectOnce(() => SyncProducer.runEffect(fx.i0, (a) => f(op.f(a)))),
|
|
228
|
-
Filter: (op) => SyncProducer.effectOnce(() => SyncProducer.runEffect(fx.i0, Unify.unify((a) => op.f(a) ? f(a) : Effect.
|
|
229
|
-
FilterMap: (op) => SyncProducer.effectOnce(() => SyncProducer.runEffect(fx.i0, Unify.unify((a) => Option.match(op.f(a), { onNone: () => Effect.
|
|
229
|
+
Filter: (op) => SyncProducer.effectOnce(() => SyncProducer.runEffect(fx.i0, Unify.unify((a) => op.f(a) ? f(a) : Effect.void))),
|
|
230
|
+
FilterMap: (op) => SyncProducer.effectOnce(() => SyncProducer.runEffect(fx.i0, Unify.unify((a) => Option.match(op.f(a), { onNone: () => Effect.void, onSome: f }))))
|
|
230
231
|
}),
|
|
231
232
|
EffectOperator: (op) => EffectOp.matchEffectOperator(op, {
|
|
232
233
|
MapEffect: (op) => SyncProducer.runEffect(fx.i0, (a) => Effect.flatMap(op.f(a), f)),
|
|
233
|
-
FilterMapEffect: (op) => SyncProducer.runEffect(fx.i0, (a) => Effect.flatMap(op.f(a), Unify.unify(Option.match({ onNone: () => Effect.
|
|
234
|
-
FilterEffect: (op) => SyncProducer.runEffect(fx.i0, Unify.unify((a) => Effect.flatMap(op.f(a), Unify.unify((b) => b ? f(a) : Effect.
|
|
234
|
+
FilterMapEffect: (op) => SyncProducer.runEffect(fx.i0, (a) => Effect.flatMap(op.f(a), Unify.unify(Option.match({ onNone: () => Effect.void, onSome: f })))),
|
|
235
|
+
FilterEffect: (op) => SyncProducer.runEffect(fx.i0, Unify.unify((a) => Effect.flatMap(op.f(a), Unify.unify((b) => b ? f(a) : Effect.void)))),
|
|
235
236
|
TapEffect: (op) => SyncProducer.runEffect(fx.i0, (a) => Effect.flatMap(op.f(a), () => f(a)))
|
|
236
237
|
}),
|
|
237
238
|
SyncLoopOperator: (op) => SyncLoopOp.matchSyncLoopOperator(op, {
|
|
@@ -260,13 +261,13 @@ class Observe extends EffectBase {
|
|
|
260
261
|
return Op.matchOperator(fx.i1, {
|
|
261
262
|
SyncOperator: (op) => SyncOp.matchSyncOperator(op, {
|
|
262
263
|
Map: (op) => SyncProducer.effectOnce(() => EffectProducer.runEffect(fx.i0, (a) => f(op.f(a)))),
|
|
263
|
-
Filter: (op) => SyncProducer.effectOnce(() => EffectProducer.runEffect(fx.i0, Unify.unify((a) => op.f(a) ? f(a) : Effect.
|
|
264
|
-
FilterMap: (op) => SyncProducer.effectOnce(() => EffectProducer.runEffect(fx.i0, Unify.unify((a) => Option.match(op.f(a), { onNone: () => Effect.
|
|
264
|
+
Filter: (op) => SyncProducer.effectOnce(() => EffectProducer.runEffect(fx.i0, Unify.unify((a) => op.f(a) ? f(a) : Effect.void))),
|
|
265
|
+
FilterMap: (op) => SyncProducer.effectOnce(() => EffectProducer.runEffect(fx.i0, Unify.unify((a) => Option.match(op.f(a), { onNone: () => Effect.void, onSome: f }))))
|
|
265
266
|
}),
|
|
266
267
|
EffectOperator: (op) => EffectOp.matchEffectOperator(op, {
|
|
267
268
|
MapEffect: (op) => EffectProducer.runEffect(fx.i0, (a) => Effect.flatMap(op.f(a), f)),
|
|
268
|
-
FilterMapEffect: (op) => EffectProducer.runEffect(fx.i0, (a) => Effect.flatMap(op.f(a), Unify.unify(Option.match({ onNone: () => Effect.
|
|
269
|
-
FilterEffect: (op) => EffectProducer.runEffect(fx.i0, Unify.unify((a) => Effect.flatMap(op.f(a), Unify.unify((b) => b ? f(a) : Effect.
|
|
269
|
+
FilterMapEffect: (op) => EffectProducer.runEffect(fx.i0, (a) => Effect.flatMap(op.f(a), Unify.unify(Option.match({ onNone: () => Effect.void, onSome: f })))),
|
|
270
|
+
FilterEffect: (op) => EffectProducer.runEffect(fx.i0, Unify.unify((a) => Effect.flatMap(op.f(a), Unify.unify((b) => b ? f(a) : Effect.void)))),
|
|
270
271
|
TapEffect: (op) => EffectProducer.runEffect(fx.i0, (a) => Effect.flatMap(op.f(a), () => f(a)))
|
|
271
272
|
}),
|
|
272
273
|
SyncLoopOperator: (op) => SyncLoopOp.matchSyncLoopOperator(op, {
|
|
@@ -417,8 +418,43 @@ export function skipRepeatsWith(fx, eq) {
|
|
|
417
418
|
}
|
|
418
419
|
});
|
|
419
420
|
}
|
|
421
|
+
const toDeepEquals = (u) => {
|
|
422
|
+
switch (typeof u) {
|
|
423
|
+
case "object": {
|
|
424
|
+
if (Predicate.isNullable(u)) {
|
|
425
|
+
return u;
|
|
426
|
+
}
|
|
427
|
+
else if (Equal.symbol in u) {
|
|
428
|
+
return u;
|
|
429
|
+
}
|
|
430
|
+
else if (Array.isArray(u)) {
|
|
431
|
+
return Data.tuple(u.map(toDeepEquals));
|
|
432
|
+
}
|
|
433
|
+
else if (u instanceof Set) {
|
|
434
|
+
return Data.tuple(Array.from(u, toDeepEquals));
|
|
435
|
+
}
|
|
436
|
+
else if (u instanceof Map) {
|
|
437
|
+
return Data.tuple(Array.from(u, ([k, v]) => Data.tuple([toDeepEquals(k), toDeepEquals(v)])));
|
|
438
|
+
}
|
|
439
|
+
else {
|
|
440
|
+
return Data.struct(Record.map(u, toDeepEquals));
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
default:
|
|
444
|
+
return u;
|
|
445
|
+
}
|
|
446
|
+
};
|
|
447
|
+
/**
|
|
448
|
+
* @internal
|
|
449
|
+
*/
|
|
450
|
+
export const deepEquals = (a, b) => {
|
|
451
|
+
// Attempt reference equality first for performance
|
|
452
|
+
if (Object.is(a, b))
|
|
453
|
+
return true;
|
|
454
|
+
return Equal.equals(toDeepEquals(a), toDeepEquals(b));
|
|
455
|
+
};
|
|
420
456
|
export function skipRepeats(fx) {
|
|
421
|
-
return skipRepeatsWith(fx,
|
|
457
|
+
return skipRepeatsWith(fx, deepEquals);
|
|
422
458
|
}
|
|
423
459
|
class ProducerEffectTransformer extends FxBase {
|
|
424
460
|
i0;
|
|
@@ -440,7 +476,7 @@ export function isProducerEffectTransformer(fx) {
|
|
|
440
476
|
}
|
|
441
477
|
class Empty extends FxBase {
|
|
442
478
|
run() {
|
|
443
|
-
return Effect.
|
|
479
|
+
return Effect.void;
|
|
444
480
|
}
|
|
445
481
|
}
|
|
446
482
|
/**
|
|
@@ -709,10 +745,10 @@ class OrElse extends FxBase {
|
|
|
709
745
|
this.i1 = i1;
|
|
710
746
|
}
|
|
711
747
|
run(sink) {
|
|
712
|
-
return Effect.catchAll(Effect.asyncEffect((resume) => Effect.
|
|
748
|
+
return Effect.catchAll(Effect.asyncEffect((resume) => Effect.asVoid(Effect.zipRight(this.i0.run(Sink.make((cause) => Either.match(Cause.failureOrCause(cause), {
|
|
713
749
|
onLeft: (e) => Effect.succeed(resume(Effect.fail(e))),
|
|
714
750
|
onRight: (cause) => sink.onFailure(cause)
|
|
715
|
-
}), sink.onSuccess)), Effect.sync(() => resume(Effect.
|
|
751
|
+
}), sink.onSuccess)), Effect.sync(() => resume(Effect.void))))), (error) => this.i1(error).run(sink));
|
|
716
752
|
}
|
|
717
753
|
static make(fx, f) {
|
|
718
754
|
if (isEmpty(fx))
|
|
@@ -804,9 +840,9 @@ function runUnordered(fx, sink, concurrency) {
|
|
|
804
840
|
return Effect.forEach(fx, (fx) => fx.run(sink), { concurrency, discard: true });
|
|
805
841
|
}
|
|
806
842
|
function runOrdered(fx, sink, concurrency) {
|
|
807
|
-
return Effect.
|
|
808
|
-
const buffers = withBuffers(fx.length, sink);
|
|
809
|
-
return Effect.forEach(fx, (fx, i) => Effect.flatMap(fx.run(Sink.make((cause) => Cause.isInterruptedOnly(cause) ?
|
|
843
|
+
return Effect.fiberIdWith((id) => {
|
|
844
|
+
const buffers = withBuffers(fx.length, sink, id);
|
|
845
|
+
return Effect.forEach(fx, (fx, i) => Effect.flatMap(fx.run(Sink.make((cause) => Cause.isInterruptedOnly(cause) ? buffers.onEnd(i) : sink.onFailure(cause), (a) => buffers.onSuccess(i, a))), () => buffers.onEnd(i)), {
|
|
810
846
|
concurrency,
|
|
811
847
|
discard: true
|
|
812
848
|
});
|
|
@@ -985,7 +1021,7 @@ class During extends FxBase {
|
|
|
985
1021
|
return take(nested, 1).run(Sink.make(onFailure, () => s.earlyExit));
|
|
986
1022
|
}))), () => Effect.zipRight(
|
|
987
1023
|
// Allow fibers to start
|
|
988
|
-
adjustTime(1), this.i0.run(Sink.make(onFailure, (a) => taking ? s.onSuccess(a) : Effect.
|
|
1024
|
+
adjustTime(1), this.i0.run(Sink.make(onFailure, (a) => taking ? s.onSuccess(a) : Effect.void))));
|
|
989
1025
|
}), ExecutionStrategy.sequential);
|
|
990
1026
|
}
|
|
991
1027
|
static make(fx, window) {
|
|
@@ -1429,14 +1465,14 @@ class FromAsyncIterable extends FxBase {
|
|
|
1429
1465
|
return Effect.asyncEffect((cb) => {
|
|
1430
1466
|
const iterator = this.i0[Symbol.asyncIterator]();
|
|
1431
1467
|
const loop = (result) => result.done
|
|
1432
|
-
? Effect.sync(() => cb(Effect.
|
|
1468
|
+
? Effect.sync(() => cb(Effect.void))
|
|
1433
1469
|
: Effect.zipRight(sink.onSuccess(result.value), Effect.flatMap(Effect.promise(() => iterator.next()), loop));
|
|
1434
|
-
return Effect.
|
|
1470
|
+
return Effect.asVoid(Effect.flatMap(Effect.promise(() => iterator.next()), loop));
|
|
1435
1471
|
});
|
|
1436
1472
|
}
|
|
1437
1473
|
}
|
|
1438
1474
|
export function findFirst(fx, predicate) {
|
|
1439
|
-
return Effect.asyncEffect((cb) => observe(fx, (a) => predicate(a) ? Effect.sync(() => cb(Effect.succeed(a))) : Effect.
|
|
1475
|
+
return Effect.asyncEffect((cb) => observe(fx, (a) => predicate(a) ? Effect.sync(() => cb(Effect.succeed(a))) : Effect.void));
|
|
1440
1476
|
}
|
|
1441
1477
|
export function first(fx) {
|
|
1442
1478
|
return findFirst(fx, constTrue);
|
|
@@ -1473,9 +1509,9 @@ class MergeRace extends FxBase {
|
|
|
1473
1509
|
}
|
|
1474
1510
|
run(sink) {
|
|
1475
1511
|
return Effect.gen(this, function* (_) {
|
|
1476
|
-
const fiber1 = yield*
|
|
1477
|
-
const fiber2 = yield*
|
|
1478
|
-
return yield*
|
|
1512
|
+
const fiber1 = yield* Effect.fork(this.i0.run(Sink.make(sink.onFailure, (a) => Effect.flatMap(sink.onSuccess(a), () => Fiber.interrupt(fiber2)))));
|
|
1513
|
+
const fiber2 = yield* Effect.fork(this.i1.run(sink));
|
|
1514
|
+
return yield* Fiber.joinAll([fiber1, fiber2]);
|
|
1479
1515
|
});
|
|
1480
1516
|
}
|
|
1481
1517
|
}
|
|
@@ -1493,15 +1529,15 @@ class RaceAll extends FxBase {
|
|
|
1493
1529
|
}
|
|
1494
1530
|
run(sink) {
|
|
1495
1531
|
return Effect.gen(this, function* (_) {
|
|
1496
|
-
const winner = yield*
|
|
1532
|
+
const winner = yield* Deferred.make();
|
|
1497
1533
|
const fibers = [];
|
|
1498
1534
|
for (const fx of this.i0) {
|
|
1499
|
-
const fiber = yield*
|
|
1535
|
+
const fiber = yield* Effect.fork(fx.run(Sink.make(sink.onFailure, (a) => Effect.flatMap(Deferred.succeed(winner, fiber), () => sink.onSuccess(a)))));
|
|
1500
1536
|
fibers.push(fiber);
|
|
1501
1537
|
}
|
|
1502
|
-
const winningFiber = yield*
|
|
1503
|
-
yield*
|
|
1504
|
-
return yield*
|
|
1538
|
+
const winningFiber = yield* Deferred.await(winner);
|
|
1539
|
+
yield* Fiber.interruptAll(fibers.filter((x) => x !== winningFiber));
|
|
1540
|
+
return yield* Fiber.join(winningFiber);
|
|
1505
1541
|
});
|
|
1506
1542
|
}
|
|
1507
1543
|
}
|
|
@@ -1525,7 +1561,7 @@ class Snapshot extends FxBase {
|
|
|
1525
1561
|
return Effect.flatMap(Ref.make(Option.none()), (ref) => Effect.all([
|
|
1526
1562
|
this.i1.run(Sink.make(sink.onFailure, (b) => Ref.set(ref, Option.some(b)))),
|
|
1527
1563
|
this.i0.run(Sink.make(sink.onFailure, (a) => Effect.flatMap(Ref.get(ref), Option.match({
|
|
1528
|
-
onNone: () => Effect.
|
|
1564
|
+
onNone: () => Effect.void,
|
|
1529
1565
|
onSome: (b) => sink.onSuccess(this.i2(a, b))
|
|
1530
1566
|
}))))
|
|
1531
1567
|
], UNBOUNDED));
|
|
@@ -1546,7 +1582,7 @@ class SnapshotEffect extends FxBase {
|
|
|
1546
1582
|
}
|
|
1547
1583
|
run(sink) {
|
|
1548
1584
|
return Effect.flatMap(Ref.make(Option.none()), (ref) => Effect.flatMap(Effect.tap(Effect.fork(this.i1.run(Sink.make(sink.onFailure, (b) => Ref.set(ref, Option.some(b))))), () => this.i0.run(Sink.make(sink.onFailure, (a) => Effect.flatMap(Ref.get(ref), Option.match({
|
|
1549
|
-
onNone: () => Effect.
|
|
1585
|
+
onNone: () => Effect.void,
|
|
1550
1586
|
onSome: (b) => Effect.matchCauseEffect(this.i2(a, b), sink)
|
|
1551
1587
|
}))))), Fiber.interrupt));
|
|
1552
1588
|
}
|
|
@@ -1556,10 +1592,7 @@ function if_(bool, options) {
|
|
|
1556
1592
|
}
|
|
1557
1593
|
export { if_ as if };
|
|
1558
1594
|
export function when(bool, options) {
|
|
1559
|
-
return
|
|
1560
|
-
onTrue: succeed(options.onTrue),
|
|
1561
|
-
onFalse: succeed(options.onFalse)
|
|
1562
|
-
});
|
|
1595
|
+
return map(skipRepeatsWith(bool, boolean), (b) => (b ? options.onTrue : options.onFalse));
|
|
1563
1596
|
}
|
|
1564
1597
|
export function mapBoth(fx, f, g) {
|
|
1565
1598
|
return map(mapError(fx, f), g);
|