@typed/fx 1.20.0 → 1.20.2
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/Fx.js +5 -1
- package/dist/cjs/Fx.js.map +1 -1
- package/dist/cjs/Idle.js +8 -6
- package/dist/cjs/Idle.js.map +1 -1
- package/dist/cjs/Push.js.map +1 -1
- package/dist/cjs/RefHashMap.js.map +1 -1
- package/dist/cjs/RefSubject.js +13 -9
- package/dist/cjs/RefSubject.js.map +1 -1
- package/dist/cjs/Subject.js +7 -3
- package/dist/cjs/Subject.js.map +1 -1
- package/dist/cjs/Versioned.js.map +1 -1
- package/dist/cjs/internal/DeferredRef.js +1 -1
- package/dist/cjs/internal/DeferredRef.js.map +1 -1
- package/dist/cjs/internal/core.js +2 -1
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/diff.js +28 -20
- package/dist/cjs/internal/diff.js.map +1 -1
- package/dist/cjs/internal/helpers.js +5 -1
- package/dist/cjs/internal/helpers.js.map +1 -1
- package/dist/cjs/internal/keyed.js +13 -14
- package/dist/cjs/internal/keyed.js.map +1 -1
- package/dist/cjs/internal/share.js +4 -1
- package/dist/cjs/internal/share.js.map +1 -1
- package/dist/dts/Emitter.d.ts +1 -1
- package/dist/dts/Emitter.d.ts.map +1 -1
- package/dist/dts/Form.d.ts +2 -2
- package/dist/dts/Form.d.ts.map +1 -1
- package/dist/dts/Fx.d.ts.map +1 -1
- package/dist/dts/Guard.d.ts +1 -1
- package/dist/dts/Guard.d.ts.map +1 -1
- package/dist/dts/Idle.d.ts.map +1 -1
- package/dist/dts/Match.d.ts +2 -2
- package/dist/dts/Match.d.ts.map +1 -1
- package/dist/dts/Pull.d.ts +1 -1
- package/dist/dts/Pull.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 -1
- package/dist/dts/RefArray.d.ts.map +1 -1
- package/dist/dts/RefChunk.d.ts +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 +1 -1
- package/dist/dts/RefHashSet.d.ts.map +1 -1
- package/dist/dts/RefSubject.d.ts +24 -4
- package/dist/dts/RefSubject.d.ts.map +1 -1
- package/dist/dts/Subject.d.ts +1 -1
- package/dist/dts/Subject.d.ts.map +1 -1
- package/dist/dts/Versioned.d.ts +1 -1
- package/dist/dts/Versioned.d.ts.map +1 -1
- package/dist/dts/internal/core.d.ts.map +1 -1
- package/dist/dts/internal/diff.d.ts +20 -16
- package/dist/dts/internal/diff.d.ts.map +1 -1
- package/dist/dts/internal/helpers.d.ts +2 -1
- package/dist/dts/internal/helpers.d.ts.map +1 -1
- package/dist/dts/internal/keyed.d.ts.map +1 -1
- package/dist/dts/internal/share.d.ts.map +1 -1
- package/dist/esm/Fx.js +5 -1
- package/dist/esm/Fx.js.map +1 -1
- package/dist/esm/Idle.js +8 -6
- package/dist/esm/Idle.js.map +1 -1
- package/dist/esm/Push.js.map +1 -1
- package/dist/esm/RefHashMap.js.map +1 -1
- package/dist/esm/RefSubject.js +11 -9
- package/dist/esm/RefSubject.js.map +1 -1
- package/dist/esm/Subject.js +7 -3
- package/dist/esm/Subject.js.map +1 -1
- package/dist/esm/Versioned.js.map +1 -1
- package/dist/esm/internal/DeferredRef.js +1 -1
- package/dist/esm/internal/DeferredRef.js.map +1 -1
- package/dist/esm/internal/core.js +2 -1
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/diff.js +26 -16
- package/dist/esm/internal/diff.js.map +1 -1
- package/dist/esm/internal/helpers.js +5 -1
- package/dist/esm/internal/helpers.js.map +1 -1
- package/dist/esm/internal/keyed.js +14 -15
- package/dist/esm/internal/keyed.js.map +1 -1
- package/dist/esm/internal/share.js +4 -1
- package/dist/esm/internal/share.js.map +1 -1
- package/package.json +8 -8
- package/src/Emitter.ts +1 -1
- package/src/Form.ts +2 -2
- package/src/Fx.ts +5 -4
- package/src/Guard.ts +1 -1
- package/src/Idle.ts +9 -13
- package/src/Match.ts +2 -2
- package/src/Pull.ts +1 -1
- package/src/Push.ts +6 -1
- package/src/RefArray.ts +1 -1
- package/src/RefChunk.ts +1 -1
- package/src/RefHashMap.ts +3 -1
- package/src/RefHashSet.ts +1 -1
- package/src/RefSubject.ts +54 -25
- package/src/Subject.ts +24 -6
- package/src/Versioned.ts +4 -2
- package/src/internal/DeferredRef.ts +1 -1
- package/src/internal/core.ts +5 -1
- package/src/internal/diff.ts +56 -42
- package/src/internal/helpers.ts +7 -2
- package/src/internal/keyed.ts +19 -21
- package/src/internal/share.ts +6 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Context, Effect, ExecutionStrategy, Option, Scope } from "effect";
|
|
1
|
+
import { Context, Effect, ExecutionStrategy, Exit, Option, Scope } from "effect";
|
|
2
2
|
import * as RefSubject from "../RefSubject.js";
|
|
3
3
|
import * as Sink from "../Sink.js";
|
|
4
4
|
import { diffIterator } from "./diff.js";
|
|
@@ -24,7 +24,7 @@ function emptyKeyedState() {
|
|
|
24
24
|
return {
|
|
25
25
|
entries: new Map(),
|
|
26
26
|
indices: new Map(),
|
|
27
|
-
|
|
27
|
+
previousValues: []
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
30
|
function runKeyed(fx, options, sink, id) {
|
|
@@ -34,13 +34,12 @@ function runKeyed(fx, options, sink, id) {
|
|
|
34
34
|
const scheduleNextEmit = forkDebounce(Effect.suspend(() => sink.onSuccess(getReadyIndices(state))));
|
|
35
35
|
function diffAndPatch(values) {
|
|
36
36
|
return Effect.gen(function* (_) {
|
|
37
|
-
const previous = state.
|
|
38
|
-
|
|
39
|
-
state.previousKeys = keys;
|
|
37
|
+
const previous = state.previousValues;
|
|
38
|
+
state.previousValues = values;
|
|
40
39
|
let added = false;
|
|
41
40
|
let done = false;
|
|
42
41
|
let scheduled = false;
|
|
43
|
-
for (const patch of diffIterator(previous,
|
|
42
|
+
for (const patch of diffIterator(previous, values, options)) {
|
|
44
43
|
if (patch._tag === "Remove") {
|
|
45
44
|
yield* _(removeValue(state, patch));
|
|
46
45
|
}
|
|
@@ -84,9 +83,9 @@ class KeyedEntry {
|
|
|
84
83
|
this.interrupt = interrupt;
|
|
85
84
|
}
|
|
86
85
|
}
|
|
87
|
-
function getReadyIndices({ entries, indices,
|
|
86
|
+
function getReadyIndices({ entries, indices, previousValues }) {
|
|
88
87
|
const output = [];
|
|
89
|
-
for (let i = 0; i <
|
|
88
|
+
for (let i = 0; i < previousValues.length; ++i) {
|
|
90
89
|
const key = indices.get(i);
|
|
91
90
|
if (key === undefined)
|
|
92
91
|
break;
|
|
@@ -110,24 +109,24 @@ function addValue({ entries, indices }, values, patch, id, parentScope, options,
|
|
|
110
109
|
scope: childScope,
|
|
111
110
|
id
|
|
112
111
|
}));
|
|
113
|
-
const entry = new KeyedEntry(value, patch.index, Option.none(), ref, ref.interrupt);
|
|
114
|
-
entries.set(patch.value, entry);
|
|
115
|
-
indices.set(patch.index, patch.value);
|
|
116
112
|
yield* _(Scope.addFinalizer(childScope, ref.interrupt));
|
|
117
|
-
|
|
113
|
+
const entry = new KeyedEntry(value, patch.index, Option.none(), ref, Scope.close(childScope, Exit.interrupt(id)));
|
|
114
|
+
entries.set(patch.key, entry);
|
|
115
|
+
indices.set(patch.index, patch.key);
|
|
116
|
+
yield* _(Effect.forkIn(options.onValue(ref, patch.key).run(Sink.make((cause) => sink.onFailure(cause), (output) => {
|
|
118
117
|
entry.output = Option.some(output);
|
|
119
118
|
return scheduleNextEmit;
|
|
120
119
|
})), parentScope));
|
|
121
120
|
});
|
|
122
121
|
}
|
|
123
122
|
function removeValue({ entries, indices }, patch) {
|
|
124
|
-
const interrupt = entries.get(patch.
|
|
125
|
-
entries.delete(patch.
|
|
123
|
+
const interrupt = entries.get(patch.key).interrupt;
|
|
124
|
+
entries.delete(patch.key);
|
|
126
125
|
indices.delete(patch.index);
|
|
127
126
|
return interrupt;
|
|
128
127
|
}
|
|
129
128
|
function updateValue({ entries, indices }, values, patch) {
|
|
130
|
-
const key = patch.
|
|
129
|
+
const key = patch.key;
|
|
131
130
|
const entry = entries.get(key);
|
|
132
131
|
if (patch._tag === "Moved") {
|
|
133
132
|
const currentKey = indices.get(patch.index);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyed.js","sourceRoot":"","sources":["../../../src/internal/keyed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"keyed.js","sourceRoot":"","sources":["../../../src/internal/keyed.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,10 @@ export class Share extends FxBase {
|
|
|
35
35
|
initialize() {
|
|
36
36
|
return Effect.suspend(() => {
|
|
37
37
|
if (this._RefCount.increment() === 1) {
|
|
38
|
-
return this.i0.run(this.i1).pipe(Effect.onExit(() => Effect.
|
|
38
|
+
return this.i0.run(this.i1).pipe(Effect.onExit(() => Effect.suspend(() => {
|
|
39
|
+
MutableRef.set(this._FxFiber, Option.none());
|
|
40
|
+
return this.i1.interrupt;
|
|
41
|
+
})), Effect.interruptible, Effect.forkDaemon, Effect.tap((fiber) => Effect.sync(() => MutableRef.set(this._FxFiber, Option.some(fiber)))), Effect.flatMap(Fiber.join));
|
|
39
42
|
}
|
|
40
43
|
else {
|
|
41
44
|
return Option.match(MutableRef.get(this._FxFiber), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"share.js","sourceRoot":"","sources":["../../../src/internal/share.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAc,MAAM,QAAQ,CAAA;AACtD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,UAAU,KAAK,CACnB,EAAe,EACf,OAAkC;IAElC,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU;IACd,SAAS,GAAkC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAE7D,SAAS;QACP,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED,SAAS;QACP,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC3E,CAAC;CACF;AAED,MAAM,OAAO,KAAmB,SAAQ,MAAkC;IAK7D;IACA;IALX,QAAQ,GAAsE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5G,SAAS,GAAG,IAAI,UAAU,EAAE,CAAA;IAE5B,YACW,EAAe,EACf,EAA6B;QAEtC,KAAK,EAAE,CAAA;QAHE,OAAE,GAAF,EAAE,CAAa;QACf,OAAE,GAAF,EAAE,CAA2B;IAGxC,CAAC;IAED,GAAG,CAAK,IAAoB;QAC1B,OAAO,cAAc,CACnB,CAAC,IAAI,EAAE,EAAE,CACP,MAAM,CAAC,OAAO,CACZ,IAAI,CACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAC1G,EACD,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CACxB,EACH,iBAAiB,CAAC,UAAU,CAC7B,CAAA;IACH,CAAC;IAEO,UAAU;QAChB,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;YACzB,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAC9B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"share.js","sourceRoot":"","sources":["../../../src/internal/share.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typed/fx",
|
|
3
|
-
"version": "1.20.
|
|
3
|
+
"version": "1.20.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -10,16 +10,16 @@
|
|
|
10
10
|
"sideEffects": [],
|
|
11
11
|
"author": "Typed contributors",
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@effect/schema": "0.
|
|
14
|
-
"@effect/typeclass": "0.22.
|
|
15
|
-
"effect": "^2.0
|
|
13
|
+
"@effect/schema": "0.60.2",
|
|
14
|
+
"@effect/typeclass": "0.22.6",
|
|
15
|
+
"effect": "^2.1.0",
|
|
16
16
|
"fast-deep-equal": "^3.1.3",
|
|
17
|
-
"@typed/async-data": "0.3.
|
|
18
|
-
"@typed/context": "0.21.
|
|
17
|
+
"@typed/async-data": "0.3.1",
|
|
18
|
+
"@typed/context": "0.21.1"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
|
-
"@effect/typeclass": "0.22.
|
|
22
|
-
"effect": "^2.0
|
|
21
|
+
"@effect/typeclass": "0.22.6",
|
|
22
|
+
"effect": "^2.1.0"
|
|
23
23
|
},
|
|
24
24
|
"main": "./dist/cjs/index.js",
|
|
25
25
|
"module": "./dist/esm/index.js",
|
package/src/Emitter.ts
CHANGED
|
@@ -16,7 +16,7 @@ import * as Sink from "./Sink.js"
|
|
|
16
16
|
/**
|
|
17
17
|
* @since 1.20.0
|
|
18
18
|
*/
|
|
19
|
-
export interface Emitter<E, A> {
|
|
19
|
+
export interface Emitter<in E, in A> {
|
|
20
20
|
readonly succeed: (value: A) => Promise<Exit.Exit<never, unknown>>
|
|
21
21
|
readonly failCause: (cause: Cause.Cause<E>) => Promise<Exit.Exit<never, unknown>>
|
|
22
22
|
readonly fail: (error: E) => Promise<Exit.Exit<never, unknown>>
|
package/src/Form.ts
CHANGED
|
@@ -35,7 +35,7 @@ type AnyObjectWithKeys<K extends PropertyKey> = Readonly<Record<K, any>>
|
|
|
35
35
|
/**
|
|
36
36
|
* @since 1.18.0
|
|
37
37
|
*/
|
|
38
|
-
export interface Form<R, Entries extends Form.AnyEntries> extends
|
|
38
|
+
export interface Form<out R, in out Entries extends Form.AnyEntries> extends
|
|
39
39
|
Form.Base<
|
|
40
40
|
R | Form.Context<Entries>,
|
|
41
41
|
Form.Error<Entries>,
|
|
@@ -55,7 +55,7 @@ export namespace Form {
|
|
|
55
55
|
/**
|
|
56
56
|
* @since 1.18.0
|
|
57
57
|
*/
|
|
58
|
-
export interface Base<R, E, I, O, Entries extends Form.AnyEntries>
|
|
58
|
+
export interface Base<out R, out E, in out I, in out O, in out Entries extends Form.AnyEntries>
|
|
59
59
|
extends Versioned.Versioned<R, never, R | Scope.Scope, E | ParseError, I, R, E | ParseError, I>
|
|
60
60
|
{
|
|
61
61
|
readonly [FormTypeId]: FormTypeId
|
package/src/Fx.ts
CHANGED
|
@@ -2444,10 +2444,11 @@ export function fromDequeue<A>(dequeue: Queue.Dequeue<A>): Fx<never, never, A>
|
|
|
2444
2444
|
export function fromDequeue<I, A>(dequeue: Ctx.Dequeue<I, A>): Fx<I, never, A>
|
|
2445
2445
|
export function fromDequeue<I, A>(dequeue: Ctx.Dequeue<I, A> | Queue.Dequeue<A>): Fx<I, never, A> {
|
|
2446
2446
|
return core.make((sink) =>
|
|
2447
|
-
Effect.
|
|
2448
|
-
|
|
2449
|
-
|
|
2450
|
-
|
|
2447
|
+
Effect.gen(function*(_) {
|
|
2448
|
+
while (yield* _(dequeueIsActive(dequeue))) {
|
|
2449
|
+
yield* _(dequeue.take, Effect.matchCauseEffect(sink))
|
|
2450
|
+
}
|
|
2451
|
+
})
|
|
2451
2452
|
)
|
|
2452
2453
|
}
|
|
2453
2454
|
|
package/src/Guard.ts
CHANGED
|
@@ -10,7 +10,7 @@ import * as Option from "effect/Option"
|
|
|
10
10
|
/**
|
|
11
11
|
* @since 1.18.0
|
|
12
12
|
*/
|
|
13
|
-
export type Guard<I, R, E, O> = (input: I) => Effect.Effect<R, E, Option.Option<O>>
|
|
13
|
+
export type Guard<in I, out R, out E, out O> = (input: I) => Effect.Effect<R, E, Option.Option<O>>
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* @since 1.18.0
|
package/src/Idle.ts
CHANGED
|
@@ -9,7 +9,6 @@ import * as Effect from "effect/Effect"
|
|
|
9
9
|
import * as ExecutionStrategy from "effect/ExecutionStrategy"
|
|
10
10
|
import * as Exit from "effect/Exit"
|
|
11
11
|
import type * as Fiber from "effect/Fiber"
|
|
12
|
-
import { constant, constVoid } from "effect/Function"
|
|
13
12
|
import { globalValue } from "effect/GlobalValue"
|
|
14
13
|
import * as Layer from "effect/Layer"
|
|
15
14
|
import type * as Queue from "effect/Queue"
|
|
@@ -160,18 +159,15 @@ export interface WhileIdleRequestOptions<R, E, R2, E2> extends IdleRequestOption
|
|
|
160
159
|
export const whileIdle = <R, E, R2, E2>(
|
|
161
160
|
options: WhileIdleRequestOptions<R, E, R2, E2>
|
|
162
161
|
): Effect.Effect<Scope.Scope | R | R2, E | E2, void> =>
|
|
163
|
-
Effect.
|
|
164
|
-
|
|
165
|
-
whenIdle(options)
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
),
|
|
173
|
-
constant(options.while)
|
|
174
|
-
)
|
|
162
|
+
Effect.gen(function*(_) {
|
|
163
|
+
while (yield* _(options.while)) {
|
|
164
|
+
const deadline = yield* _(whenIdle(options))
|
|
165
|
+
|
|
166
|
+
while (shouldContinue(deadline)) {
|
|
167
|
+
yield* _(options.body)
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
})
|
|
175
171
|
|
|
176
172
|
/**
|
|
177
173
|
* Dequeue values and perform an Effect while the event loop is not busy with any other work.
|
package/src/Match.ts
CHANGED
|
@@ -33,7 +33,7 @@ export type MatcherTypeId = typeof MatcherTypeId
|
|
|
33
33
|
/**
|
|
34
34
|
* @since 1.18.0
|
|
35
35
|
*/
|
|
36
|
-
export interface TypeMatcher<R, E, I, O> {
|
|
36
|
+
export interface TypeMatcher<out R, out E, in out I, out O> {
|
|
37
37
|
readonly _tag: "TypeMatcher"
|
|
38
38
|
|
|
39
39
|
readonly [MatcherTypeId]: Matcher.Variance<R, E, I, O>
|
|
@@ -56,7 +56,7 @@ export interface TypeMatcher<R, E, I, O> {
|
|
|
56
56
|
/**
|
|
57
57
|
* @since 1.18.0
|
|
58
58
|
*/
|
|
59
|
-
export interface ValueMatcher<R, E, I, O> extends Fx.Fx<R | Scope.Scope, E, Option.Option<O>> {
|
|
59
|
+
export interface ValueMatcher<out R, out E, in out I, out O> extends Fx.Fx<R | Scope.Scope, E, Option.Option<O>> {
|
|
60
60
|
readonly _tag: "ValueMatcher"
|
|
61
61
|
|
|
62
62
|
readonly [MatcherTypeId]: Matcher.Variance<R, E, I, O>
|
package/src/Pull.ts
CHANGED
|
@@ -19,7 +19,7 @@ import type { Sink } from "./Sink.js"
|
|
|
19
19
|
* An Effect which can be used to pull values of a Stream.
|
|
20
20
|
* @since 1.18.0
|
|
21
21
|
*/
|
|
22
|
-
export interface Pull<R, E, A> extends Effect.Effect<R, Option.Option<E>, Chunk.Chunk<A>> {}
|
|
22
|
+
export interface Pull<out R, out E, out A> extends Effect.Effect<R, Option.Option<E>, Chunk.Chunk<A>> {}
|
|
23
23
|
|
|
24
24
|
function schedulePull<R, E, A, R2, R3>(
|
|
25
25
|
pull: Pull<R, E, A>,
|
package/src/Push.ts
CHANGED
|
@@ -13,9 +13,14 @@ import { FxBase } from "./internal/protos.js"
|
|
|
13
13
|
import * as Sink from "./Sink.js"
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
|
+
* Push is an abstract type which represents a Type which is both an Fx and a Sink. The type parameters
|
|
17
|
+
* are decoupled from one another and allow mapping over the input and output of the Push separately for
|
|
18
|
+
* more complex use cases.
|
|
16
19
|
* @since 1.20.0
|
|
17
20
|
*/
|
|
18
|
-
export interface Push<R, E, A, R2, E2, B>
|
|
21
|
+
export interface Push<out R, in E, in A, out R2, out E2, out B>
|
|
22
|
+
extends Sink.Sink<R, E, A>, Fx<R2, E2, B>, Pipeable.Pipeable
|
|
23
|
+
{}
|
|
19
24
|
|
|
20
25
|
/**
|
|
21
26
|
* @since 1.20.0
|
package/src/RefArray.ts
CHANGED
|
@@ -20,7 +20,7 @@ import * as RefSubject from "./RefSubject.js"
|
|
|
20
20
|
* @since 1.18.0
|
|
21
21
|
* @category models
|
|
22
22
|
*/
|
|
23
|
-
export interface RefArray<R, E, A> extends RefSubject.RefSubject<R, E, ReadonlyArray<A>> {}
|
|
23
|
+
export interface RefArray<out R, in out E, in out A> extends RefSubject.RefSubject<R, E, ReadonlyArray<A>> {}
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* Construct a new RefArray with the given initial value.
|
package/src/RefChunk.ts
CHANGED
|
@@ -18,7 +18,7 @@ import * as RefSubject from "./RefSubject.js"
|
|
|
18
18
|
* @since 1.18.0
|
|
19
19
|
* @category models
|
|
20
20
|
*/
|
|
21
|
-
export interface RefChunk<R, E, A> extends RefSubject.RefSubject<R, E, Chunk.Chunk<A>> {}
|
|
21
|
+
export interface RefChunk<out R, in out E, in out A> extends RefSubject.RefSubject<R, E, Chunk.Chunk<A>> {}
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Construct a new RefChunk with the given initial value.
|
package/src/RefHashMap.ts
CHANGED
|
@@ -17,7 +17,9 @@ import * as RefSubject from "./RefSubject.js"
|
|
|
17
17
|
* @since 1.18.0
|
|
18
18
|
* @category models
|
|
19
19
|
*/
|
|
20
|
-
export interface RefHashMap<R, E,
|
|
20
|
+
export interface RefHashMap<out R, in out E, in out K, in out V>
|
|
21
|
+
extends RefSubject.RefSubject<R, E, HashMap.HashMap<K, V>>
|
|
22
|
+
{}
|
|
21
23
|
|
|
22
24
|
/**
|
|
23
25
|
* Construct a new RefHashMap with the given initial value.
|
package/src/RefHashSet.ts
CHANGED
|
@@ -16,7 +16,7 @@ import * as RefSubject from "./RefSubject.js"
|
|
|
16
16
|
* @since 1.18.0
|
|
17
17
|
* @category models
|
|
18
18
|
*/
|
|
19
|
-
export interface RefHashSet<R, E, A> extends RefSubject.RefSubject<R, E, HashSet.HashSet<A>> {}
|
|
19
|
+
export interface RefHashSet<out R, in out E, in out A> extends RefSubject.RefSubject<R, E, HashSet.HashSet<A>> {}
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* @since 1.18.0
|
package/src/RefSubject.ts
CHANGED
|
@@ -123,7 +123,10 @@ export namespace RefSubject {
|
|
|
123
123
|
/**
|
|
124
124
|
* @since 1.20.0
|
|
125
125
|
*/
|
|
126
|
-
readonly make: <R>(
|
|
126
|
+
readonly make: <R>(
|
|
127
|
+
fxOrEffect: Fx<R, E, A> | Effect.Effect<R, E, A>,
|
|
128
|
+
options?: RefSubjectOptions<A>
|
|
129
|
+
) => Layer.Layer<R, never, I>
|
|
127
130
|
}
|
|
128
131
|
|
|
129
132
|
/**
|
|
@@ -134,22 +137,48 @@ export namespace RefSubject {
|
|
|
134
137
|
export interface Derived<R, E, A> extends RefSubject<R, E, A> {
|
|
135
138
|
readonly persist: Effect.Effect<R, never, void>
|
|
136
139
|
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* @since 1.20.0
|
|
143
|
+
*/
|
|
144
|
+
export type Context<T> = T extends RefSubject<infer R, infer _E, infer _A> ? R : never
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @since 1.20.0
|
|
148
|
+
*/
|
|
149
|
+
|
|
150
|
+
export type Error<T> = T extends RefSubject<infer _R, infer E, infer _A> ? E : never
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* @since 1.20.0
|
|
154
|
+
*/
|
|
155
|
+
export type Success<T> = T extends RefSubject<infer _R, infer _E, infer A> ? A : never
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* @since 1.20.0
|
|
159
|
+
*/
|
|
160
|
+
export type Identifier<T> = T extends RefSubject.Tagged<infer R, infer _E, infer _A> ? R : never
|
|
137
161
|
}
|
|
138
162
|
|
|
139
163
|
/**
|
|
140
164
|
* @since 1.20.0
|
|
141
165
|
*/
|
|
142
|
-
export type Context<T> =
|
|
166
|
+
export type Context<T> = RefSubject.Context<T>
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* @since 1.20.0
|
|
170
|
+
*/
|
|
171
|
+
export type Error<T> = RefSubject.Error<T>
|
|
143
172
|
|
|
144
173
|
/**
|
|
145
174
|
* @since 1.20.0
|
|
146
175
|
*/
|
|
147
|
-
export type
|
|
176
|
+
export type Success<T> = RefSubject.Success<T>
|
|
148
177
|
|
|
149
178
|
/**
|
|
150
179
|
* @since 1.20.0
|
|
151
180
|
*/
|
|
152
|
-
export type
|
|
181
|
+
export type Identifier<T> = RefSubject.Identifier<T>
|
|
153
182
|
|
|
154
183
|
/**
|
|
155
184
|
* @since 1.20.0
|
|
@@ -331,7 +360,7 @@ class RefSubjectImpl<R, E, A, R2> extends FxEffectBase<Exclude<R, R2> | Scope.Sc
|
|
|
331
360
|
super()
|
|
332
361
|
|
|
333
362
|
this.version = Effect.sync(() => core.deferredRef.version)
|
|
334
|
-
this.interrupt = interruptCore(core)
|
|
363
|
+
this.interrupt = Effect.provide(interruptCore(core), core.context)
|
|
335
364
|
this.subscriberCount = Effect.provide(core.subject.subscriberCount, core.context)
|
|
336
365
|
this.getSetDelete = getSetDelete(core)
|
|
337
366
|
|
|
@@ -341,17 +370,16 @@ class RefSubjectImpl<R, E, A, R2> extends FxEffectBase<Exclude<R, R2> | Scope.Sc
|
|
|
341
370
|
}
|
|
342
371
|
|
|
343
372
|
run<R3>(sink: Sink.Sink<R3, E, A>): Effect.Effect<Exclude<R, R2> | R3 | Scope.Scope, never, unknown> {
|
|
344
|
-
return Effect.matchCauseEffect(this.
|
|
373
|
+
return Effect.matchCauseEffect(getOrInitializeCore(this.core, true), {
|
|
345
374
|
onFailure: (cause) => sink.onFailure(cause),
|
|
346
375
|
onSuccess: () => Effect.provide(this.core.subject.run(sink), this.core.context)
|
|
347
376
|
})
|
|
348
377
|
}
|
|
349
378
|
|
|
350
379
|
runUpdates<R3, E3, B>(
|
|
351
|
-
run: (ref: GetSetDelete<Exclude<R, R2>, E, A>) => Effect.Effect<R3, E3, B
|
|
352
|
-
lock: boolean = true
|
|
380
|
+
run: (ref: GetSetDelete<Exclude<R, R2>, E, A>) => Effect.Effect<R3, E3, B>
|
|
353
381
|
) {
|
|
354
|
-
return
|
|
382
|
+
return this.core.semaphore.withPermits(1)(run(this.getSetDelete))
|
|
355
383
|
}
|
|
356
384
|
|
|
357
385
|
onSuccess(value: A): Effect.Effect<Exclude<R, R2>, never, unknown> {
|
|
@@ -636,11 +664,11 @@ function initializeCoreEffect<R, E, A, R2>(
|
|
|
636
664
|
): Effect.Effect<Exclude<R, R2>, never, Fiber.Fiber<E, A>> {
|
|
637
665
|
const initialize = Effect.onExit(
|
|
638
666
|
Effect.provide(core.initial, core.context),
|
|
639
|
-
(exit) =>
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
667
|
+
(exit) =>
|
|
668
|
+
Effect.sync(() => {
|
|
669
|
+
core._fiber = undefined
|
|
670
|
+
core.deferredRef.done(exit)
|
|
671
|
+
})
|
|
644
672
|
)
|
|
645
673
|
|
|
646
674
|
return Effect.flatMap(
|
|
@@ -718,11 +746,15 @@ function onFailureCore<R, E, A, R2>(core: RefSubjectCore<R, E, A, R2>, cause: Ca
|
|
|
718
746
|
})
|
|
719
747
|
}
|
|
720
748
|
|
|
721
|
-
function interruptCore<R, E, A, R2>(core: RefSubjectCore<R, E, A, R2>): Effect.Effect<
|
|
749
|
+
function interruptCore<R, E, A, R2>(core: RefSubjectCore<R, E, A, R2>): Effect.Effect<R, never, void> {
|
|
722
750
|
return Effect.fiberIdWith((id) => {
|
|
723
751
|
core.deferredRef.reset()
|
|
724
752
|
|
|
725
|
-
|
|
753
|
+
const closeScope = Scope.close(core.scope, Exit.interrupt(id))
|
|
754
|
+
const interruptFiber = core._fiber ? Fiber.interrupt(core._fiber) : Effect.unit
|
|
755
|
+
const interruptSubject = core.subject.interrupt
|
|
756
|
+
|
|
757
|
+
return Effect.all([closeScope, interruptFiber, interruptSubject], { discard: true })
|
|
726
758
|
})
|
|
727
759
|
}
|
|
728
760
|
|
|
@@ -989,12 +1021,7 @@ class ComputedImpl<R0, E0, R, E, A, R2, E2, R3, E3, C> extends Versioned.Version
|
|
|
989
1021
|
) {
|
|
990
1022
|
super(
|
|
991
1023
|
input,
|
|
992
|
-
(fx) =>
|
|
993
|
-
share.hold(core.mapEffect(fx, f)) as Fx<
|
|
994
|
-
R0 | Exclude<R, Scope.Scope> | R2 | R3 | Scope.Scope,
|
|
995
|
-
E0 | E | E2 | E3,
|
|
996
|
-
C
|
|
997
|
-
>,
|
|
1024
|
+
(fx) => share.hold(core.mapEffect(fx, f)) as any,
|
|
998
1025
|
Effect.flatMap(f)
|
|
999
1026
|
)
|
|
1000
1027
|
}
|
|
@@ -1031,7 +1058,7 @@ class FilteredImpl<R0, E0, R, E, A, R2, E2, R3, E3, C> extends Versioned.Version
|
|
|
1031
1058
|
) {
|
|
1032
1059
|
super(
|
|
1033
1060
|
input,
|
|
1034
|
-
(fx) => share.hold(core.filterMapEffect(fx, f) as any
|
|
1061
|
+
(fx) => share.hold(core.filterMapEffect(fx, f)) as any,
|
|
1035
1062
|
(effect) => Effect.flatten(Effect.flatMap(effect, f))
|
|
1036
1063
|
)
|
|
1037
1064
|
}
|
|
@@ -1757,8 +1784,10 @@ class RefSubjectTagged<I, E, A> extends FxEffectBase<
|
|
|
1757
1784
|
return this.tag.withEffect((ref) => ref.onSuccess(value))
|
|
1758
1785
|
}
|
|
1759
1786
|
|
|
1760
|
-
make = <R>(
|
|
1761
|
-
|
|
1787
|
+
make = <R>(
|
|
1788
|
+
fxOrEffect: Fx<R, E, A> | Effect.Effect<R, E, A>,
|
|
1789
|
+
options?: RefSubjectOptions<A>
|
|
1790
|
+
): Layer.Layer<R, never, I> => this.tag.scoped(make(fxOrEffect, options))
|
|
1762
1791
|
}
|
|
1763
1792
|
|
|
1764
1793
|
/**
|
package/src/Subject.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import * as C from "@typed/context"
|
|
7
7
|
import type { Cause, Layer, Pipeable } from "effect"
|
|
8
|
-
import * as Context from "effect/Context"
|
|
8
|
+
import type * as Context from "effect/Context"
|
|
9
9
|
import * as Effect from "effect/Effect"
|
|
10
10
|
import * as ExecutionStrategy from "effect/ExecutionStrategy"
|
|
11
11
|
import * as Exit from "effect/Exit"
|
|
@@ -26,9 +26,7 @@ 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<R, E, A>
|
|
30
|
-
extends Push<R, E, A, R | Scope.Scope, E, A>, Fx<R | Scope.Scope, E, A>, Pipeable.Pipeable
|
|
31
|
-
{
|
|
29
|
+
export interface Subject<out R, in out E, in out A> extends Push<R, E, A, R | Scope.Scope, E, A>, Pipeable.Pipeable {
|
|
32
30
|
readonly subscriberCount: Effect.Effect<R, never, number>
|
|
33
31
|
readonly interrupt: Effect.Effect<R, never, void>
|
|
34
32
|
}
|
|
@@ -102,7 +100,13 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
|
|
|
102
100
|
}
|
|
103
101
|
|
|
104
102
|
readonly interrupt = Effect.fiberIdWith((id) =>
|
|
105
|
-
Effect.
|
|
103
|
+
Effect.tap(
|
|
104
|
+
Effect.forEach(this.scopes, (scope) => Scope.close(scope, Exit.interrupt(id)), DISCARD),
|
|
105
|
+
() => {
|
|
106
|
+
this.sinks.clear()
|
|
107
|
+
this.scopes.clear()
|
|
108
|
+
}
|
|
109
|
+
)
|
|
106
110
|
)
|
|
107
111
|
|
|
108
112
|
protected addSink<R, R2, B>(
|
|
@@ -112,7 +116,7 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
|
|
|
112
116
|
return withScope(
|
|
113
117
|
(innerScope) =>
|
|
114
118
|
Effect.contextWithEffect((ctx) => {
|
|
115
|
-
const entry = [sink,
|
|
119
|
+
const entry = [sink, ctx] as const
|
|
116
120
|
const add = Effect.sync(() => {
|
|
117
121
|
this.sinks.add(entry)
|
|
118
122
|
this.scopes.add(innerScope)
|
|
@@ -170,6 +174,13 @@ export class HoldSubjectImpl<E, A> extends SubjectImpl<E, A> implements Subject<
|
|
|
170
174
|
onSome: (a) => Effect.zipRight(sink.onSuccess(a), awaitScopeClose(scope))
|
|
171
175
|
}))
|
|
172
176
|
}
|
|
177
|
+
|
|
178
|
+
readonly interrupt = Effect.fiberIdWith((id) =>
|
|
179
|
+
Effect.tap(
|
|
180
|
+
Effect.forEach(this.scopes, (scope) => Scope.close(scope, Exit.interrupt(id)), DISCARD),
|
|
181
|
+
() => MutableRef.set(this.lastValue, Option.none())
|
|
182
|
+
)
|
|
183
|
+
)
|
|
173
184
|
}
|
|
174
185
|
|
|
175
186
|
/**
|
|
@@ -194,6 +205,13 @@ export class ReplaySubjectImpl<E, A> extends SubjectImpl<E, A> {
|
|
|
194
205
|
(scope) => Effect.zipRight(this.buffer.forEach((a) => sink.onSuccess(a)), awaitScopeClose(scope))
|
|
195
206
|
)
|
|
196
207
|
}
|
|
208
|
+
|
|
209
|
+
readonly interrupt = Effect.fiberIdWith((id) =>
|
|
210
|
+
Effect.tap(
|
|
211
|
+
Effect.forEach(this.scopes, (scope) => Scope.close(scope, Exit.interrupt(id)), DISCARD),
|
|
212
|
+
() => this.buffer.clear()
|
|
213
|
+
)
|
|
214
|
+
)
|
|
197
215
|
}
|
|
198
216
|
|
|
199
217
|
/**
|
package/src/Versioned.ts
CHANGED
|
@@ -25,7 +25,9 @@ import type { Sink } from "./Sink.js"
|
|
|
25
25
|
/**
|
|
26
26
|
* @since 1.0.0
|
|
27
27
|
*/
|
|
28
|
-
export interface Versioned<R1, E1, R2, E2, A2, R3, E3,
|
|
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<R3, E3, A3>
|
|
30
|
+
{
|
|
29
31
|
readonly version: Effect.Effect<R1, E1, number>
|
|
30
32
|
}
|
|
31
33
|
|
|
@@ -112,7 +114,7 @@ export class VersionedTransform<R0, E0, R, E, A, R2, E2, B, R3, E3, C, R4, E4, D
|
|
|
112
114
|
{
|
|
113
115
|
protected _version = -1
|
|
114
116
|
protected _currentValue: Option.Option<D> = Option.none()
|
|
115
|
-
|
|
117
|
+
protected _fx: Fx<R3, E3, C>
|
|
116
118
|
|
|
117
119
|
constructor(
|
|
118
120
|
readonly input: Versioned<R0, E0, R, E, A, R2, E2, B>,
|
package/src/internal/core.ts
CHANGED
|
@@ -19,6 +19,7 @@ import * as Deferred from "effect/Deferred"
|
|
|
19
19
|
import * as Effect from "effect/Effect"
|
|
20
20
|
import * as Either from "effect/Either"
|
|
21
21
|
import * as Equal from "effect/Equal"
|
|
22
|
+
import { boolean } from "effect/Equivalence"
|
|
22
23
|
import * as ExecutionStrategy from "effect/ExecutionStrategy"
|
|
23
24
|
import * as Exit from "effect/Exit"
|
|
24
25
|
import * as Fiber from "effect/Fiber"
|
|
@@ -2712,7 +2713,10 @@ function if_<R, E, R2, E2, B, R3, E3, C>(
|
|
|
2712
2713
|
readonly onFalse: Fx<R3, E3, C>
|
|
2713
2714
|
}
|
|
2714
2715
|
): Fx<R | R2 | R3 | Scope.Scope, E | E2 | E3, B | C> {
|
|
2715
|
-
return switchMap(
|
|
2716
|
+
return switchMap(
|
|
2717
|
+
skipRepeatsWith(bool, boolean),
|
|
2718
|
+
(b): Fx<R2 | R3, E2 | E3, B | C> => b ? options.onTrue : options.onFalse
|
|
2719
|
+
)
|
|
2716
2720
|
}
|
|
2717
2721
|
|
|
2718
2722
|
export { if_ as if }
|