@playfast/reform 1.3.0 → 1.4.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/README.md +15 -6
- package/dist/calc/asyncCalc.d.ts +3 -1
- package/dist/calc/asyncCalc.d.ts.map +1 -1
- package/dist/calc/asyncCalc.js +15 -5
- package/dist/calc/asyncCalc.js.map +1 -1
- package/dist/calc/asyncCalcTypes.d.ts +2 -0
- package/dist/calc/asyncCalcTypes.d.ts.map +1 -1
- package/dist/calc/calcFamily.d.ts.map +1 -1
- package/dist/calc/calcFamily.js +77 -34
- package/dist/calc/calcFamily.js.map +1 -1
- package/dist/calc/queryState.d.ts +3 -1
- package/dist/calc/queryState.d.ts.map +1 -1
- package/dist/calc/queryState.js +31 -9
- package/dist/calc/queryState.js.map +1 -1
- package/dist/channel/channel.d.ts.map +1 -1
- package/dist/channel/channel.js +6 -1
- package/dist/channel/channel.js.map +1 -1
- package/dist/compose/composition.d.ts.map +1 -1
- package/dist/compose/composition.js +7 -1
- package/dist/compose/composition.js.map +1 -1
- package/dist/compose/structure.d.ts.map +1 -1
- package/dist/compose/structure.js +33 -8
- package/dist/compose/structure.js.map +1 -1
- package/dist/compose/ui.d.ts.map +1 -1
- package/dist/compose/ui.js +16 -5
- package/dist/compose/ui.js.map +1 -1
- package/dist/event/event.d.ts.map +1 -1
- package/dist/event/event.js +23 -2
- package/dist/event/event.js.map +1 -1
- package/dist/internal/familyKeys.d.ts +16 -0
- package/dist/internal/familyKeys.d.ts.map +1 -0
- package/dist/internal/familyKeys.js +35 -0
- package/dist/internal/familyKeys.js.map +1 -0
- package/dist/internal/platform.d.ts +43 -0
- package/dist/internal/platform.d.ts.map +1 -0
- package/dist/internal/platform.js +68 -0
- package/dist/internal/platform.js.map +1 -0
- package/dist/internal/queryDriver.d.ts.map +1 -1
- package/dist/internal/queryDriver.js +88 -64
- package/dist/internal/queryDriver.js.map +1 -1
- package/dist/internal/queryDriverConsume.d.ts +9 -0
- package/dist/internal/queryDriverConsume.d.ts.map +1 -0
- package/dist/internal/queryDriverConsume.js +16 -0
- package/dist/internal/queryDriverConsume.js.map +1 -0
- package/dist/internal/queryDriverHydrate.d.ts.map +1 -1
- package/dist/internal/queryDriverHydrate.js +9 -3
- package/dist/internal/queryDriverHydrate.js.map +1 -1
- package/dist/internal/queryDriverPersist.d.ts +16 -0
- package/dist/internal/queryDriverPersist.d.ts.map +1 -0
- package/dist/internal/queryDriverPersist.js +15 -0
- package/dist/internal/queryDriverPersist.js.map +1 -0
- package/dist/internal/queryDriverPersistWarn.d.ts +12 -0
- package/dist/internal/queryDriverPersistWarn.d.ts.map +1 -0
- package/dist/internal/queryDriverPersistWarn.js +31 -0
- package/dist/internal/queryDriverPersistWarn.js.map +1 -0
- package/dist/internal/queryDriverSettle.d.ts +23 -0
- package/dist/internal/queryDriverSettle.d.ts.map +1 -0
- package/dist/internal/queryDriverSettle.js +52 -0
- package/dist/internal/queryDriverSettle.js.map +1 -0
- package/dist/internal/queryDriverStore.d.ts +2 -28
- package/dist/internal/queryDriverStore.d.ts.map +1 -1
- package/dist/internal/queryDriverStore.js +5 -29
- package/dist/internal/queryDriverStore.js.map +1 -1
- package/dist/internal/queryDriverTypes.d.ts +3 -0
- package/dist/internal/queryDriverTypes.d.ts.map +1 -1
- package/dist/internal/scheduler.d.ts +1 -0
- package/dist/internal/scheduler.d.ts.map +1 -1
- package/dist/internal/scheduler.js +69 -6
- package/dist/internal/scheduler.js.map +1 -1
- package/dist/internal.d.ts +1 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -0
- package/dist/internal.js.map +1 -1
- package/dist/reducer/reducer.js +3 -3
- package/dist/reducer/reducer.js.map +1 -1
- package/dist/remote/pendingQueue.d.ts +4 -2
- package/dist/remote/pendingQueue.d.ts.map +1 -1
- package/dist/remote/pendingQueue.js +20 -4
- package/dist/remote/pendingQueue.js.map +1 -1
- package/dist/remote/remoteState.d.ts.map +1 -1
- package/dist/remote/remoteState.js +27 -14
- package/dist/remote/remoteState.js.map +1 -1
- package/dist/remote/remoteStateSend.d.ts +3 -1
- package/dist/remote/remoteStateSend.d.ts.map +1 -1
- package/dist/remote/remoteStateSend.js +19 -3
- package/dist/remote/remoteStateSend.js.map +1 -1
- package/dist/remote/remoteStateTypes.d.ts +3 -0
- package/dist/remote/remoteStateTypes.d.ts.map +1 -1
- package/dist/runtime/bus.d.ts +5 -0
- package/dist/runtime/bus.d.ts.map +1 -1
- package/dist/runtime/bus.js +1 -1
- package/dist/runtime/bus.js.map +1 -1
- package/dist/runtime/capturedAppRuntime.d.ts.map +1 -1
- package/dist/runtime/capturedAppRuntime.js +37 -51
- package/dist/runtime/capturedAppRuntime.js.map +1 -1
- package/dist/runtime/eventBudget.d.ts.map +1 -1
- package/dist/runtime/eventBudget.js +2 -1
- package/dist/runtime/eventBudget.js.map +1 -1
- package/dist/runtime/featureMount.d.ts +34 -2
- package/dist/runtime/featureMount.d.ts.map +1 -1
- package/dist/runtime/featureMount.js +66 -2
- package/dist/runtime/featureMount.js.map +1 -1
- package/dist/runtime/loop.d.ts +12 -0
- package/dist/runtime/loop.d.ts.map +1 -1
- package/dist/runtime/loop.js +8 -5
- package/dist/runtime/loop.js.map +1 -1
- package/dist/state/state.d.ts +2 -2
- package/dist/state/state.d.ts.map +1 -1
- package/dist/state/state.js +2 -2
- package/dist/state/state.js.map +1 -1
- package/dist/state/stateFamily.d.ts +2 -2
- package/dist/state/stateFamily.d.ts.map +1 -1
- package/dist/state/stateFamily.js +80 -32
- package/dist/state/stateFamily.js.map +1 -1
- package/dist/state/stateGroup.d.ts +5 -5
- package/dist/state/stateGroup.d.ts.map +1 -1
- package/dist/state/stateGroup.js +1 -1
- package/dist/state/stateGroup.js.map +1 -1
- package/dist/testkit/flight.testkit.d.ts.map +1 -1
- package/dist/testkit/flight.testkit.js +2 -1
- package/dist/testkit/flight.testkit.js.map +1 -1
- package/dist/wire/tree.d.ts.map +1 -1
- package/dist/wire/tree.js +6 -1
- package/dist/wire/tree.js.map +1 -1
- package/package.json +1 -1
- package/src/calc/asyncCalc-key-attribution.test.ts +182 -0
- package/src/calc/asyncCalc-registry-name.test.ts +82 -0
- package/src/calc/asyncCalc.superseded-commit.test.ts +162 -0
- package/src/calc/asyncCalc.test.ts +35 -7
- package/src/calc/asyncCalc.ts +33 -10
- package/src/calc/asyncCalcTypes.ts +6 -0
- package/src/calc/calcFamily.ts +81 -34
- package/src/calc/family-identity.test.ts +231 -0
- package/src/calc/queryState.ts +36 -5
- package/src/channel/channel-throttle-frames.test.ts +163 -0
- package/src/channel/channel.ts +5 -0
- package/src/compose/compose-identity.test.ts +175 -0
- package/src/compose/composition.ts +8 -4
- package/src/compose/structure.ts +45 -13
- package/src/compose/ui.ts +22 -5
- package/src/event/event.ts +31 -2
- package/src/event/syncTrigger.test.ts +66 -0
- package/src/internal/familyKeys.ts +41 -0
- package/src/internal/platform.test.ts +55 -0
- package/src/internal/platform.ts +72 -0
- package/src/internal/queryDriver-defect-attribution.test.ts +107 -0
- package/src/internal/queryDriver-persist-key.test.ts +118 -0
- package/src/internal/queryDriver.persistence-staleness.test.ts +209 -0
- package/src/internal/queryDriver.ts +92 -80
- package/src/internal/queryDriverConsume.ts +42 -0
- package/src/internal/queryDriverHydrate.ts +9 -3
- package/src/internal/queryDriverPersist.ts +42 -0
- package/src/internal/queryDriverPersistWarn.ts +61 -0
- package/src/internal/queryDriverSettle.ts +85 -0
- package/src/internal/queryDriverStore.ts +9 -74
- package/src/internal/queryDriverTypes.ts +10 -0
- package/src/internal/queryState-and-scheduler-audit.test.ts +170 -0
- package/src/internal/scheduler-multi-source-wake.test.ts +111 -0
- package/src/internal/scheduler.ts +80 -6
- package/src/internal.ts +1 -0
- package/src/reducer/reducer.ts +3 -3
- package/src/remote/pendingQueue.ts +35 -5
- package/src/remote/remoteState.intent-key-stamp.test.ts +207 -0
- package/src/remote/remoteState.key-attribution.test.ts +174 -0
- package/src/remote/remoteState.ts +27 -15
- package/src/remote/remoteStateSend.ts +29 -8
- package/src/remote/remoteStateTypes.ts +7 -0
- package/src/runtime/bus.ts +6 -1
- package/src/runtime/capturedAppRuntime.ts +134 -110
- package/src/runtime/eventBudget.ts +2 -1
- package/src/runtime/feature-mount-ownership.test.ts +539 -0
- package/src/runtime/featureMount.ts +110 -3
- package/src/runtime/loop.ts +29 -6
- package/src/runtime/mount-inflight-ownership.test.ts +361 -0
- package/src/runtime/mount-scope-hardening.test.ts +440 -0
- package/src/runtime/runtime.schema-identity.test.ts +188 -0
- package/src/state/state.ts +8 -4
- package/src/state/stateFamily.ts +86 -36
- package/src/state/stateGroup.ts +24 -6
- package/src/testkit/flight.testkit.ts +2 -1
- package/src/wire/tree-key-presence.test.ts +46 -0
- package/src/wire/tree.ts +9 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Cause, Context, Effect, Exit, Fiber, Option, Scope } from 'effect';
|
|
1
|
+
import { Cause, Context, Effect, ExecutionStrategy, Exit, Fiber, MutableRef, Option, Scope, } from 'effect';
|
|
2
2
|
import { FeatureLoadFailed } from '../internal/errors.js';
|
|
3
|
+
import { CurrentInstrumentation } from './instrumentation.js';
|
|
3
4
|
import { EngineRequirements } from './loop.js';
|
|
4
5
|
const isObjectLike = (candidate) => (typeof candidate === 'object' || typeof candidate === 'function') && candidate !== null;
|
|
5
6
|
const isContextTag = (candidate) => isObjectLike(candidate) &&
|
|
@@ -25,12 +26,74 @@ const requirementAvailable = (context, requirement) => {
|
|
|
25
26
|
export const hasFeatureRequirements = (context, requires) => EngineRequirements.every((tag) => requirementAvailable(context, tag)) &&
|
|
26
27
|
requires.every((requirement) => requirementAvailable(context, requirement));
|
|
27
28
|
export const featureMountFailure = (message) => new FeatureLoadFailed({ cause: message });
|
|
29
|
+
export const missingHostServices = (name) => Effect.fail(featureMountFailure(`Feature ${name} requires services missing from the host runtime`));
|
|
30
|
+
export const invalidMountProps = (name) => Effect.fail(featureMountFailure(`Feature ${name} received invalid props`));
|
|
31
|
+
/**
|
|
32
|
+
* `ManagedRuntime.make` captures its runtime outside `profiledScene`'s
|
|
33
|
+
* `Layer.locally`, so anything forked onto it later would build against the no-op
|
|
34
|
+
* sink and its state, calc, query and render spans would vanish from the report.
|
|
35
|
+
*/
|
|
36
|
+
export const withInstrumentation = (instrumentation) => (effect) => Effect.locally(effect, CurrentInstrumentation, instrumentation);
|
|
37
|
+
/**
|
|
38
|
+
* Every scope a runtime mints for something it mounts is forked from an owner, so
|
|
39
|
+
* closing the owner closes the mount. A forked scope deregisters itself from its
|
|
40
|
+
* owner when it closes first, so mount churn does not accumulate finalizers.
|
|
41
|
+
*
|
|
42
|
+
* Forking a *closed* owner is not an error in Effect — it hands back an already-closed
|
|
43
|
+
* scope, against which a layer builds successfully while releasing everything at the
|
|
44
|
+
* instant it is acquired. A mount reported live over finalized services is worse than
|
|
45
|
+
* no mount, so that case is refused. A finalizer added to a closed scope runs
|
|
46
|
+
* immediately, which is how the state is read without reaching into Effect's internals.
|
|
47
|
+
*/
|
|
48
|
+
export const forkMountScope = (owner) => Effect.runSync(Effect.gen(function* () {
|
|
49
|
+
const scope = yield* Scope.fork(owner, ExecutionStrategy.sequential);
|
|
50
|
+
const alive = MutableRef.make(true);
|
|
51
|
+
yield* Scope.addFinalizer(scope, Effect.sync(() => MutableRef.set(alive, false)));
|
|
52
|
+
return MutableRef.get(alive) ? Option.some(scope) : Option.none();
|
|
53
|
+
}));
|
|
54
|
+
/**
|
|
55
|
+
* Build a composition activation into a scope forked from `ownerScope` and hand back
|
|
56
|
+
* its disposer, which is also registered with `disposers` so the host's own teardown
|
|
57
|
+
* reaches it.
|
|
58
|
+
*/
|
|
59
|
+
/**
|
|
60
|
+
* Guard shared by every mount path: a runtime that is going away, or an owner scope
|
|
61
|
+
* that has already closed, refuses the mount rather than reporting a dead one live.
|
|
62
|
+
*/
|
|
63
|
+
export const startMount = (host, ownerScope, start) => host.isDisposed()
|
|
64
|
+
? () => { }
|
|
65
|
+
: Option.match(forkMountScope(ownerScope), { onNone: () => () => { }, onSome: start });
|
|
66
|
+
export const mountActivation = (host, disposers, build, ownerScope) => startMount(host, ownerScope, (scope) => {
|
|
67
|
+
const liveness = { active: true };
|
|
68
|
+
// Same ordering as `forkFeatureMount`: forked first so it finalizes last, and the
|
|
69
|
+
// fiber registered with `scope` so an owner closing mid-build stops it rather than
|
|
70
|
+
// letting it acquire against a scope that is already gone.
|
|
71
|
+
const buildScope = Effect.runSync(Scope.fork(scope, ExecutionStrategy.sequential));
|
|
72
|
+
const fiber = host.runFork(Effect.provideService(build, Scope.Scope, buildScope));
|
|
73
|
+
Effect.runSync(Scope.addFinalizer(scope, Fiber.interrupt(fiber)));
|
|
74
|
+
const dispose = () => {
|
|
75
|
+
if (!liveness.active) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
liveness.active = false;
|
|
79
|
+
fiber.unsafeInterruptAsFork(fiber.id());
|
|
80
|
+
const close = Fiber.await(fiber).pipe(Effect.zipRight(Scope.close(scope, Exit.succeed(undefined))), Effect.ensuring(Effect.sync(() => disposers.delete(dispose))));
|
|
81
|
+
Effect.runFork(close);
|
|
82
|
+
};
|
|
83
|
+
disposers.add(dispose);
|
|
84
|
+
return dispose;
|
|
85
|
+
});
|
|
28
86
|
/**
|
|
29
87
|
* Fork a feature mount onto the host runtime and hand back its disposer. Both
|
|
30
88
|
* the typed and captured mount paths settle failures and tear down identically.
|
|
31
89
|
*/
|
|
32
90
|
export const forkFeatureMount = (host, scope, mount, onFailed) => {
|
|
33
|
-
|
|
91
|
+
// Forked before the mount fiber so it finalizes after it. Closing `scope` — which the
|
|
92
|
+
// owner does when it closes — must interrupt a mount still in flight before releasing
|
|
93
|
+
// what it has already built; the mount runs on a deferred `runFork`, so an owner that
|
|
94
|
+
// closes after the fork would otherwise let it go live against finalized services.
|
|
95
|
+
const buildScope = Effect.runSync(Scope.fork(scope, ExecutionStrategy.sequential));
|
|
96
|
+
const fiber = host.runFork(mount.pipe(Effect.provideService(Scope.Scope, buildScope), Effect.matchCause({
|
|
34
97
|
onFailure: (cause) => {
|
|
35
98
|
// Disposer interruption is cancellation, not a failed feature.
|
|
36
99
|
if (!Cause.isInterruptedOnly(cause)) {
|
|
@@ -39,6 +102,7 @@ export const forkFeatureMount = (host, scope, mount, onFailed) => {
|
|
|
39
102
|
},
|
|
40
103
|
onSuccess: () => undefined,
|
|
41
104
|
})));
|
|
105
|
+
Effect.runSync(Scope.addFinalizer(scope, Fiber.interrupt(fiber)));
|
|
42
106
|
return () => {
|
|
43
107
|
// Interrupt first, then await finalizer registration before closing the scope.
|
|
44
108
|
fiber.unsafeInterruptAsFork(fiber.id());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"featureMount.js","sourceRoot":"","sources":["../../src/runtime/featureMount.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"featureMount.js","sourceRoot":"","sources":["../../src/runtime/featureMount.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/loop.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Context, Layer } from 'effect';
|
|
2
2
|
import { Channels, Procedures } from '../channel/channel.js';
|
|
3
3
|
import { Bus, type Tagged } from './bus.js';
|
|
4
|
+
import { type Instrumentation } from './instrumentation.js';
|
|
4
5
|
import { Queries } from './queries.js';
|
|
5
6
|
export interface ReducerEntry {
|
|
6
7
|
readonly name: string;
|
|
@@ -8,6 +9,7 @@ export interface ReducerEntry {
|
|
|
8
9
|
readonly apply: (event: Tagged) => void;
|
|
9
10
|
}
|
|
10
11
|
export interface ReducerRegistry {
|
|
12
|
+
readonly instrumentation: Instrumentation;
|
|
11
13
|
readonly entries: Array<ReducerEntry>;
|
|
12
14
|
readonly byName: Map<string, Set<ReducerEntry>>;
|
|
13
15
|
readonly byTag: Map<string, Set<ReducerEntry>>;
|
|
@@ -18,6 +20,16 @@ export interface ReducerRegistry {
|
|
|
18
20
|
declare const ReducersBase: Context.TagClass<Reducers, 'reform/Reducers', ReducerRegistry>;
|
|
19
21
|
export declare class Reducers extends ReducersBase {
|
|
20
22
|
}
|
|
23
|
+
export interface ApplyReducersInput {
|
|
24
|
+
readonly registry: ReducerRegistry;
|
|
25
|
+
readonly event: Tagged;
|
|
26
|
+
}
|
|
27
|
+
export interface ReducerFailure {
|
|
28
|
+
readonly event: Tagged;
|
|
29
|
+
readonly error: unknown;
|
|
30
|
+
}
|
|
31
|
+
/** Run every reducer registered for one event. A defect in one must not skip the rest. */
|
|
32
|
+
export declare const applyReducers: (input: ApplyReducersInput) => ReadonlyArray<ReducerFailure>;
|
|
21
33
|
export declare const reducersLayer: Layer.Layer<Reducers>;
|
|
22
34
|
export declare const Engine: Layer.Layer<Bus | Reducers | Channels | Procedures | Queries>;
|
|
23
35
|
export declare const EngineRequirements: readonly [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/runtime/loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,OAAO,EAAU,KAAK,EAAyB,MAAM,QAAQ,CAAA;AAClG,OAAO,EAAE,QAAQ,EAAiB,UAAU,EAAmB,MAAM,oBAAoB,CAAA;AAGzF,OAAO,EAAE,GAAG,EAA2B,KAAK,MAAM,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/runtime/loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,OAAO,EAAU,KAAK,EAAyB,MAAM,QAAQ,CAAA;AAClG,OAAO,EAAE,QAAQ,EAAiB,UAAU,EAAmB,MAAM,oBAAoB,CAAA;AAGzF,OAAO,EAAE,GAAG,EAA2B,KAAK,MAAM,EAAE,MAAM,OAAO,CAAA;AAEjE,OAAO,EAAE,KAAK,eAAe,EAA0B,MAAM,mBAAmB,CAAA;AAChF,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAA;AAEjD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC;AAED,MAAM,WAAW,eAAe;IAI9B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAA;IACzC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;IAC/C,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;IAC9C,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,aAAa,CAAC,YAAY,CAAC,CAAA;IAC7D,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IAChD,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;CACnD;AAED,QAAA,MAAM,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,EAAE,eAAe,CAEnD,CAAA;AAC9B,qBAAa,QAAS,SAAQ,YAAY;CAAG;AAoF7C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAA;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CACxB;AAED,0FAA0F;AAC1F,eAAO,MAAM,aAAa,GAAI,OAAO,kBAAkB,KAAG,aAAa,CAAC,cAAc,CAGnF,CAAA;AAEH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAG/C,CAAA;AA6ED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAY9E,CAAA;AAEH,eAAO,MAAM,kBAAkB,EAAE,SAAS;IACxC,OAAO,GAAG;IACV,OAAO,QAAQ;IACf,OAAO,QAAQ;IACf,OAAO,UAAU;IACjB,OAAO,OAAO;CACkC,CAAA;AAElD,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC,CAAA"}
|
package/dist/runtime/loop.js
CHANGED
|
@@ -19,7 +19,7 @@ const dropFromBuckets = (map, key, target) => {
|
|
|
19
19
|
map.delete(key);
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
|
-
const makeReducerRegistry = () => {
|
|
22
|
+
const makeReducerRegistry = (instrumentation) => {
|
|
23
23
|
const entries = new Set();
|
|
24
24
|
const byName = new Map();
|
|
25
25
|
const byTag = new Map();
|
|
@@ -28,6 +28,7 @@ const makeReducerRegistry = () => {
|
|
|
28
28
|
value: Option.some([]),
|
|
29
29
|
};
|
|
30
30
|
return {
|
|
31
|
+
instrumentation,
|
|
31
32
|
get entries() {
|
|
32
33
|
return Option.getOrElse(snapshot.value, () => {
|
|
33
34
|
const current = Array.from(entries);
|
|
@@ -77,7 +78,9 @@ const isolateApply = (reducer, event, instrumentation) => {
|
|
|
77
78
|
onSuccess: () => Option.none(),
|
|
78
79
|
}));
|
|
79
80
|
};
|
|
80
|
-
|
|
81
|
+
/** Run every reducer registered for one event. A defect in one must not skip the rest. */
|
|
82
|
+
export const applyReducers = (input) => Arr.filterMap(input.registry.tagged(input.event._tag), (reducer) => isolateApply(reducer, input.event, input.registry.instrumentation));
|
|
83
|
+
export const reducersLayer = Layer.effect(Reducers, Effect.map(resolveInstrumentation, makeReducerRegistry));
|
|
81
84
|
// Partitioning keeps dispatch order stable within each priority.
|
|
82
85
|
const rank = (priority) => (priority === 'High' ? 0 : 1);
|
|
83
86
|
const drain = Effect.gen(function* () {
|
|
@@ -103,9 +106,9 @@ const drain = Effect.gen(function* () {
|
|
|
103
106
|
const failures = yield* Effect.sync(() => {
|
|
104
107
|
const endFrame = instrumentation.frame(ordered.length);
|
|
105
108
|
ordered.forEach((envelope) => instrumentation.eventDispatched(envelope.event._tag, envelope.priority));
|
|
106
|
-
const collected = Arr.flatMap(ordered, (envelope) =>
|
|
107
|
-
|
|
108
|
-
|
|
109
|
+
const collected = Arr.flatMap(ordered, (envelope) => envelope.reduced
|
|
110
|
+
? []
|
|
111
|
+
: applyReducers({ registry: reducers, event: envelope.event }));
|
|
109
112
|
ordered.forEach((envelope) => {
|
|
110
113
|
// channelsFor is distinct; per-procedure offers would double-run shared channels.
|
|
111
114
|
procedures.channelsFor(envelope.event._tag).forEach((channelName) => {
|
package/dist/runtime/loop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/runtime/loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAClG,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,GAAG,EAAE,QAAQ,EAA8B,MAAM,OAAO,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AACzF,OAAO,EAAwB,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAChF,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/runtime/loop.ts"],"names":[],"mappings":"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"}
|
package/dist/state/state.d.ts
CHANGED
|
@@ -34,8 +34,8 @@ interface StateStatics<N extends string, A> {
|
|
|
34
34
|
readonly name: N;
|
|
35
35
|
readonly capture: <Result>(visit: StateCapture<Result>) => Result;
|
|
36
36
|
readonly store: Context.Tag<StateStore<N, A>, Store<A>>;
|
|
37
|
-
readonly
|
|
38
|
-
readonly
|
|
37
|
+
readonly validate: (input: unknown) => Effect.Effect<A, ParseResult.ParseError, never>;
|
|
38
|
+
readonly validateSync: (input: unknown) => A;
|
|
39
39
|
readonly decodeUnknownOption: (input: unknown) => Option.Option<A>;
|
|
40
40
|
}
|
|
41
41
|
export interface StateClass<N extends string, A> extends EffectType<A, never, StateStore<N, A>>, StateStatics<N, A> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAY,KAAK,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC3F,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,KAAK,QAAQ,EAAkB,MAAM,0BAA0B,CAAA;AAKxE,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAGzD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AACD,MAAM,MAAM,YAAY,GAAG,uBAAuB,CAAA;AAGlD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAA;CAC9D;AAED,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,QAAQ;IAC1E,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAA;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AACD,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,IAAI,wBAAwB,CAAC,CAAC,CAAC,CAAA;AAEzE,eAAO,MAAM,gBAAgB,EAAE,OAAO,MAAwC,CAAA;AAC9E,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAA;AAEtD,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAC;IACtE,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;CAC/B;AAED,MAAM,MAAM,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAA;AAE3F,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,CAAA;IACV,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACxC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,MAAM,CAAA;CAClE;AAED,UAAU,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IAEnC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,MAAM,CAAA;IACjE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"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"}
|
package/dist/state/state.js
CHANGED
|
@@ -23,8 +23,8 @@ export const make = (name, schema, options = {}) => {
|
|
|
23
23
|
manifest,
|
|
24
24
|
name,
|
|
25
25
|
store,
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
validate: Schema.validate(schema),
|
|
27
|
+
validateSync: Schema.validateSync(schema),
|
|
28
28
|
decodeUnknownOption: Schema.decodeUnknownOption(schema),
|
|
29
29
|
capture: (visit) => visit(state),
|
|
30
30
|
});
|
package/dist/state/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAoB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE3F,OAAO,EAAiB,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,SAAS,EAAc,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAsB/C,MAAM,CAAC,MAAM,gBAAgB,GAAkB,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,8 +43,8 @@ export interface StateFamilyClass<N extends string, K, V> {
|
|
|
43
43
|
readonly manifest: StateFamilyManifest<N>;
|
|
44
44
|
readonly capture: <Result>(visit: StateFamilyCapture<Result>) => Result;
|
|
45
45
|
readonly store: Context.Tag<StateFamilyStore<N, K, V>, FamilyStore<K, V>>;
|
|
46
|
-
readonly
|
|
47
|
-
readonly
|
|
46
|
+
readonly validateKeySync: (input: unknown) => K;
|
|
47
|
+
readonly validateValueSync: (input: unknown) => V;
|
|
48
48
|
}
|
|
49
49
|
export type FamilyName<F> = F extends StateFamilyClass<infer N, infer _K, infer _V> ? N : never;
|
|
50
50
|
export type FamilyKey<F> = F extends StateFamilyClass<infer _N, infer K, infer _V> ? K : never;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stateFamily.d.ts","sourceRoot":"","sources":["../../src/state/stateFamily.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"stateFamily.d.ts","sourceRoot":"","sources":["../../src/state/stateFamily.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,60 +1,108 @@
|
|
|
1
|
-
import { Context, Effect, Layer,
|
|
1
|
+
import { Context, Effect, Layer, MutableRef, Schema } from 'effect';
|
|
2
2
|
import { definitionClass } from '../definition/definition.js';
|
|
3
|
+
import { makeKeyCanonicalizer } from '../internal/familyKeys.js';
|
|
3
4
|
import { resolveScheduler } from '../internal/scheduler.js';
|
|
4
5
|
import { claimStateTag } from '../internal/stateRegistry.js';
|
|
5
6
|
import { resolveInstrumentation, stateUpdateHook } from '../runtime/instrumentation.js';
|
|
6
7
|
import { makeStore } from '../internal/store.js';
|
|
7
8
|
import { readTracked } from '../internal/track.js';
|
|
9
|
+
import { microtask } from '../internal/platform.js';
|
|
8
10
|
export const Tombstone = Symbol.for('reform/StateFamily/Tombstone');
|
|
9
11
|
const makeFamilyStore = (seed, scheduler, options = {}, onChange = () => { }) => {
|
|
10
12
|
const entries = new Map();
|
|
13
|
+
const keys = makeKeyCanonicalizer();
|
|
11
14
|
const evictWhenUnused = options.evictWhenUnused === true;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
// Stamps identify a store *instance*, not a key: `forget` lets one key hold a
|
|
16
|
+
// succession of stores, and a stale unsubscribe from an earlier one must not
|
|
17
|
+
// decrement — or evict — the one that replaced it.
|
|
18
|
+
const stamps = new Map();
|
|
19
|
+
const nextStamp = MutableRef.make(0);
|
|
20
|
+
// A forgotten key's store is orphaned — `at(key)` mints a fresh one — so its
|
|
21
|
+
// subscribers must be woken to re-read, or they hold a store nothing writes to
|
|
22
|
+
// again and never hear about the key another way.
|
|
23
|
+
const wakers = new Map();
|
|
24
|
+
const wakersFor = (key) => {
|
|
25
|
+
const existing = wakers.get(key);
|
|
26
|
+
if (existing !== undefined) {
|
|
27
|
+
return existing;
|
|
28
|
+
}
|
|
29
|
+
const created = new Set();
|
|
30
|
+
wakers.set(key, created);
|
|
31
|
+
return created;
|
|
32
|
+
};
|
|
33
|
+
const wakeable = (key, store) => ({
|
|
15
34
|
...store,
|
|
16
35
|
subscribe: (listener) => {
|
|
17
|
-
|
|
36
|
+
const registered = wakersFor(key);
|
|
37
|
+
registered.add(listener);
|
|
18
38
|
const off = store.subscribe(listener);
|
|
19
|
-
const released = { done: false };
|
|
20
39
|
return () => {
|
|
21
|
-
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
released.done = true;
|
|
40
|
+
registered.delete(listener);
|
|
25
41
|
off();
|
|
26
|
-
const remaining = (subscribers.get(key) ?? 1) - 1;
|
|
27
|
-
if (remaining > 0) {
|
|
28
|
-
subscribers.set(key, remaining);
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
subscribers.delete(key);
|
|
32
|
-
queueMicrotask(() => {
|
|
33
|
-
if (liveSubscriberCount(key) === 0) {
|
|
34
|
-
entries.delete(key);
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
42
|
};
|
|
38
43
|
},
|
|
39
44
|
});
|
|
45
|
+
const dropKey = (key) => {
|
|
46
|
+
entries.delete(key);
|
|
47
|
+
stamps.delete(key);
|
|
48
|
+
keys.release(key);
|
|
49
|
+
const woken = wakers.get(key);
|
|
50
|
+
wakers.delete(key);
|
|
51
|
+
if (woken !== undefined && woken.size > 0) {
|
|
52
|
+
scheduler.schedule(woken);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const refCounted = (key, store, stamp) => {
|
|
56
|
+
const count = MutableRef.make(0);
|
|
57
|
+
return {
|
|
58
|
+
...store,
|
|
59
|
+
subscribe: (listener) => {
|
|
60
|
+
MutableRef.update(count, (current) => current + 1);
|
|
61
|
+
const off = store.subscribe(listener);
|
|
62
|
+
const released = { done: false };
|
|
63
|
+
return () => {
|
|
64
|
+
if (released.done) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
released.done = true;
|
|
68
|
+
off();
|
|
69
|
+
MutableRef.update(count, (current) => Math.max(0, current - 1));
|
|
70
|
+
if (MutableRef.get(count) > 0) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
microtask(() => {
|
|
74
|
+
// Still unused, and still the store this key holds.
|
|
75
|
+
if (MutableRef.get(count) === 0 && stamps.get(key) === stamp) {
|
|
76
|
+
entries.delete(key);
|
|
77
|
+
stamps.delete(key);
|
|
78
|
+
keys.release(key);
|
|
79
|
+
if (wakersFor(key).size === 0) {
|
|
80
|
+
wakers.delete(key);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
};
|
|
40
88
|
return {
|
|
41
|
-
at: (
|
|
89
|
+
at: (rawKey) => {
|
|
90
|
+
const key = keys.canonical(rawKey);
|
|
42
91
|
const existing = entries.get(key);
|
|
43
92
|
if (existing !== undefined) {
|
|
44
93
|
return existing;
|
|
45
94
|
}
|
|
95
|
+
const stamp = MutableRef.updateAndGet(nextStamp, (current) => current + 1);
|
|
46
96
|
const base = makeStore(seed(key), scheduler, onChange);
|
|
47
|
-
const created = evictWhenUnused ? refCounted(key, base) : base;
|
|
97
|
+
const created = wakeable(key, evictWhenUnused ? refCounted(key, base, stamp) : base);
|
|
48
98
|
entries.set(key, created);
|
|
99
|
+
stamps.set(key, stamp);
|
|
49
100
|
return created;
|
|
50
101
|
},
|
|
51
|
-
forget: (key) =>
|
|
52
|
-
entries.delete(key);
|
|
53
|
-
subscribers.delete(key);
|
|
54
|
-
},
|
|
102
|
+
forget: (key) => dropKey(keys.canonical(key)),
|
|
55
103
|
clear: () => {
|
|
56
|
-
entries.
|
|
57
|
-
|
|
104
|
+
Array.from(entries.keys()).forEach(dropKey);
|
|
105
|
+
keys.reset();
|
|
58
106
|
},
|
|
59
107
|
size: () => entries.size,
|
|
60
108
|
};
|
|
@@ -75,8 +123,8 @@ export const make = (name, key, valueSchema, options = {}) => {
|
|
|
75
123
|
const family = definitionClass({
|
|
76
124
|
manifest,
|
|
77
125
|
store,
|
|
78
|
-
|
|
79
|
-
|
|
126
|
+
validateKeySync: Schema.validateSync(key),
|
|
127
|
+
validateValueSync: Schema.validateSync(valueSchema),
|
|
80
128
|
capture: (visit) => visit(family),
|
|
81
129
|
});
|
|
82
130
|
return family;
|
|
@@ -84,7 +132,7 @@ export const make = (name, key, valueSchema, options = {}) => {
|
|
|
84
132
|
export const read = (family, key) => Effect.flatMap(family.store, (familyStore) => readTracked(familyStore.at(key)));
|
|
85
133
|
export const live = (family, initial, options = {}) => {
|
|
86
134
|
const seed = (key) => typeof initial === 'function'
|
|
87
|
-
? family.
|
|
135
|
+
? family.validateValueSync(Reflect.apply(initial, undefined, [key]))
|
|
88
136
|
: initial;
|
|
89
137
|
return Layer.effect(family.store, Effect.zipWith(resolveScheduler, resolveInstrumentation, (scheduler, instrumentation) => makeFamilyStore(seed, scheduler, options, stateUpdateHook(instrumentation, family.manifest.name))));
|
|
90
138
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stateFamily.js","sourceRoot":"","sources":["../../src/state/stateFamily.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"stateFamily.js","sourceRoot":"","sources":["../../src/state/stateFamily.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,13 +16,13 @@ export interface StateGroupClass<Members extends ReadonlyArray<AnyState>> {
|
|
|
16
16
|
}
|
|
17
17
|
export type AnyStateGroup = StateGroupClass<ReadonlyArray<AnyState>>;
|
|
18
18
|
type DuplicateStateName<N extends string> = readonly ['reform: duplicate state name in group', N];
|
|
19
|
-
type NoDuplicateNames<Members extends ReadonlyArray<AnyState>, Seen extends string = never> = Members extends readonly [
|
|
19
|
+
type NoDuplicateNames<Members extends ReadonlyArray<AnyState>, Seen extends string = never, Acc extends ReadonlyArray<unknown> = readonly []> = Members extends readonly [
|
|
20
20
|
infer Head extends AnyState,
|
|
21
21
|
...infer Tail extends ReadonlyArray<AnyState>
|
|
22
|
-
] ? readonly [
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
] :
|
|
22
|
+
] ? NoDuplicateNames<Tail, Seen | StateName<Head>, readonly [
|
|
23
|
+
...Acc,
|
|
24
|
+
StateName<Head> extends Seen ? DuplicateStateName<StateName<Head>> : Head
|
|
25
|
+
]> : Acc;
|
|
26
26
|
export type GroupSeeds<G extends AnyStateGroup> = G extends StateGroupClass<infer Members> ? {
|
|
27
27
|
readonly [N in StateName<Members[number]>]: ValueForName<Members, N>;
|
|
28
28
|
} : never;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stateGroup.d.ts","sourceRoot":"","sources":["../../src/state/stateGroup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,EAAU,MAAM,QAAQ,CAAA;AAGrE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAEnD,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEpC,KAAK,aAAa,CAAC,OAAO,SAAS,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI,OAAO,CACrF,OAAO,CAAC,MAAM,CAAC,EACf;IAAE,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;KAAE,CAAA;CAAE,CAC5C,CAAA;AAED,KAAK,YAAY,CAAC,OAAO,SAAS,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI,UAAU,CACvF,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAC1B,CAAA;AAED,MAAM,WAAW,eAAe,CAAC,OAAO,SAAS,aAAa,CAAC,QAAQ,CAAC;IACtE,QAAQ,EAAE,CAAA;IACV,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;CAC/C;AAED,MAAM,MAAM,aAAa,GAAG,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAA;AAEpE,KAAK,kBAAkB,CAAC,CAAC,SAAS,MAAM,IAAI,SAAS,CAAC,uCAAuC,EAAE,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"stateGroup.d.ts","sourceRoot":"","sources":["../../src/state/stateGroup.ts"],"names":[],"mappings":"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"}
|
package/dist/state/stateGroup.js
CHANGED
|
@@ -27,7 +27,7 @@ export const select = (group, name) => {
|
|
|
27
27
|
return new StateToken(name, store);
|
|
28
28
|
};
|
|
29
29
|
export function live(group, seeds) {
|
|
30
|
-
const layers = group.members.map((member) => member.capture((state) => Layer.unwrapEffect(state.
|
|
30
|
+
const layers = group.members.map((member) => member.capture((state) => Layer.unwrapEffect(state.validate(seeds[state.manifest.name]).pipe(Effect.orDie, Effect.map((seed) => stateLive(state, seed))))));
|
|
31
31
|
return layers.reduce((merged, memberLayer) => Layer.merge(merged, memberLayer), Layer.empty);
|
|
32
32
|
}
|
|
33
33
|
//# sourceMappingURL=stateGroup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stateGroup.js","sourceRoot":"","sources":["../../src/state/stateGroup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAAiB,MAAM,qBAAqB,CAAA;AAEnD,OAAO,EAEL,IAAI,IAAI,SAAS,GAIlB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"stateGroup.js","sourceRoot":"","sources":["../../src/state/stateGroup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flight.testkit.d.ts","sourceRoot":"","sources":["../../src/testkit/flight.testkit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,MAAM,EAAsB,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"flight.testkit.d.ts","sourceRoot":"","sources":["../../src/testkit/flight.testkit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,MAAM,EAAsB,MAAM,QAAQ,CAAA;AAWvE,eAAO,MAAM,IAAI,GAAI,WAAO,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAsC,CAAA;AAMvF,eAAO,MAAM,KAAK,GAAI,cAAS,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAGjD,CAAA;AAEH,eAAO,MAAM,KAAK,GAAI,CAAC,EACrB,MAAM,MAAM,CAAC,EACb,WAAW,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,EAChC,eAAY,KACX,MAAM,CAAC,MAAM,CAAC,CAAC,CAMd,CAAA;AAEJ,MAAM,WAAW,UAAU;IACzB,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACnF,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAClC,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACrC,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3D,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,MAAM,CAAA;CAC/B;AAED,eAAO,MAAM,cAAc,QAAO,UAqCjC,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Deferred, Duration, Effect, MutableRef, Option } from 'effect';
|
|
2
|
+
import { microtask } from '../internal/platform.js';
|
|
2
3
|
// Coalescing/cancellation semantics are only meaningful while a query is still
|
|
3
4
|
// in flight. Tests used to build that overlap by racing wall-clock — a 25ms
|
|
4
5
|
// query delay against 5ms gaps between input writes — which silently stops
|
|
@@ -11,7 +12,7 @@ export const tick = (ms = 10) => Effect.sleep(Duration.millis(ms));
|
|
|
11
12
|
// so draining turns is exact where a duration is a guess: a microtask cannot be
|
|
12
13
|
// starved by host load the way a 10ms budget can. Use this to let the graph
|
|
13
14
|
// quiesce before asserting that something did NOT happen.
|
|
14
|
-
export const flush = (turns = 3) => Effect.promise(() => new Promise((resolve) =>
|
|
15
|
+
export const flush = (turns = 3) => Effect.promise(() => new Promise((resolve) => microtask(resolve))).pipe(Effect.repeatN(Math.max(turns - 1, 0)));
|
|
15
16
|
export const until = (read, predicate, rounds = 200) => Effect.suspend(() => {
|
|
16
17
|
const value = read();
|
|
17
18
|
return predicate(value) || rounds <= 0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flight.testkit.js","sourceRoot":"","sources":["../../src/testkit/flight.testkit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"flight.testkit.js","sourceRoot":"","sources":["../../src/testkit/flight.testkit.ts"],"names":[],"mappings":"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"}
|