@typed/fx 1.20.1 → 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 +6 -7
- package/dist/cjs/RefSubject.js.map +1 -1
- package/dist/cjs/Subject.js +3 -2
- 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 +1 -1
- 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 +6 -7
- package/dist/esm/RefSubject.js.map +1 -1
- package/dist/esm/Subject.js +3 -2
- 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 +18 -19
- package/src/Subject.ts +17 -5
- 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
|
/**
|
|
@@ -367,17 +370,16 @@ class RefSubjectImpl<R, E, A, R2> extends FxEffectBase<Exclude<R, R2> | Scope.Sc
|
|
|
367
370
|
}
|
|
368
371
|
|
|
369
372
|
run<R3>(sink: Sink.Sink<R3, E, A>): Effect.Effect<Exclude<R, R2> | R3 | Scope.Scope, never, unknown> {
|
|
370
|
-
return Effect.matchCauseEffect(this.
|
|
373
|
+
return Effect.matchCauseEffect(getOrInitializeCore(this.core, true), {
|
|
371
374
|
onFailure: (cause) => sink.onFailure(cause),
|
|
372
375
|
onSuccess: () => Effect.provide(this.core.subject.run(sink), this.core.context)
|
|
373
376
|
})
|
|
374
377
|
}
|
|
375
378
|
|
|
376
379
|
runUpdates<R3, E3, B>(
|
|
377
|
-
run: (ref: GetSetDelete<Exclude<R, R2>, E, A>) => Effect.Effect<R3, E3, B
|
|
378
|
-
lock: boolean = true
|
|
380
|
+
run: (ref: GetSetDelete<Exclude<R, R2>, E, A>) => Effect.Effect<R3, E3, B>
|
|
379
381
|
) {
|
|
380
|
-
return
|
|
382
|
+
return this.core.semaphore.withPermits(1)(run(this.getSetDelete))
|
|
381
383
|
}
|
|
382
384
|
|
|
383
385
|
onSuccess(value: A): Effect.Effect<Exclude<R, R2>, never, unknown> {
|
|
@@ -662,11 +664,11 @@ function initializeCoreEffect<R, E, A, R2>(
|
|
|
662
664
|
): Effect.Effect<Exclude<R, R2>, never, Fiber.Fiber<E, A>> {
|
|
663
665
|
const initialize = Effect.onExit(
|
|
664
666
|
Effect.provide(core.initial, core.context),
|
|
665
|
-
(exit) =>
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
667
|
+
(exit) =>
|
|
668
|
+
Effect.sync(() => {
|
|
669
|
+
core._fiber = undefined
|
|
670
|
+
core.deferredRef.done(exit)
|
|
671
|
+
})
|
|
670
672
|
)
|
|
671
673
|
|
|
672
674
|
return Effect.flatMap(
|
|
@@ -1019,12 +1021,7 @@ class ComputedImpl<R0, E0, R, E, A, R2, E2, R3, E3, C> extends Versioned.Version
|
|
|
1019
1021
|
) {
|
|
1020
1022
|
super(
|
|
1021
1023
|
input,
|
|
1022
|
-
(fx) =>
|
|
1023
|
-
share.hold(core.mapEffect(fx, f)) as Fx<
|
|
1024
|
-
R0 | Exclude<R, Scope.Scope> | R2 | R3 | Scope.Scope,
|
|
1025
|
-
E0 | E | E2 | E3,
|
|
1026
|
-
C
|
|
1027
|
-
>,
|
|
1024
|
+
(fx) => share.hold(core.mapEffect(fx, f)) as any,
|
|
1028
1025
|
Effect.flatMap(f)
|
|
1029
1026
|
)
|
|
1030
1027
|
}
|
|
@@ -1061,7 +1058,7 @@ class FilteredImpl<R0, E0, R, E, A, R2, E2, R3, E3, C> extends Versioned.Version
|
|
|
1061
1058
|
) {
|
|
1062
1059
|
super(
|
|
1063
1060
|
input,
|
|
1064
|
-
(fx) => share.hold(core.filterMapEffect(fx, f) as any
|
|
1061
|
+
(fx) => share.hold(core.filterMapEffect(fx, f)) as any,
|
|
1065
1062
|
(effect) => Effect.flatten(Effect.flatMap(effect, f))
|
|
1066
1063
|
)
|
|
1067
1064
|
}
|
|
@@ -1787,8 +1784,10 @@ class RefSubjectTagged<I, E, A> extends FxEffectBase<
|
|
|
1787
1784
|
return this.tag.withEffect((ref) => ref.onSuccess(value))
|
|
1788
1785
|
}
|
|
1789
1786
|
|
|
1790
|
-
make = <R>(
|
|
1791
|
-
|
|
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))
|
|
1792
1791
|
}
|
|
1793
1792
|
|
|
1794
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
|
}
|
|
@@ -118,7 +116,7 @@ export class SubjectImpl<E, A> extends FxBase<Scope.Scope, E, A> implements Subj
|
|
|
118
116
|
return withScope(
|
|
119
117
|
(innerScope) =>
|
|
120
118
|
Effect.contextWithEffect((ctx) => {
|
|
121
|
-
const entry = [sink,
|
|
119
|
+
const entry = [sink, ctx] as const
|
|
122
120
|
const add = Effect.sync(() => {
|
|
123
121
|
this.sinks.add(entry)
|
|
124
122
|
this.scopes.add(innerScope)
|
|
@@ -176,6 +174,13 @@ export class HoldSubjectImpl<E, A> extends SubjectImpl<E, A> implements Subject<
|
|
|
176
174
|
onSome: (a) => Effect.zipRight(sink.onSuccess(a), awaitScopeClose(scope))
|
|
177
175
|
}))
|
|
178
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
|
+
)
|
|
179
184
|
}
|
|
180
185
|
|
|
181
186
|
/**
|
|
@@ -200,6 +205,13 @@ export class ReplaySubjectImpl<E, A> extends SubjectImpl<E, A> {
|
|
|
200
205
|
(scope) => Effect.zipRight(this.buffer.forEach((a) => sink.onSuccess(a)), awaitScopeClose(scope))
|
|
201
206
|
)
|
|
202
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
|
+
)
|
|
203
215
|
}
|
|
204
216
|
|
|
205
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 }
|