@lite-fsm/core 2.0.4 → 2.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/MachineManager.d.cts +1 -3
- package/dist/MachineManager.d.ts +1 -3
- package/dist/actor.d.cts +1 -7
- package/dist/actor.d.ts +1 -7
- package/dist/actorEffects.d.cts +2 -0
- package/dist/actorEffects.d.ts +2 -0
- package/dist/createMachine.d.cts +3 -34
- package/dist/createMachine.d.ts +3 -34
- package/dist/createMachine.types.d.cts +166 -0
- package/dist/createMachine.types.d.ts +166 -0
- package/dist/hydration.d.cts +2 -1
- package/dist/hydration.d.ts +2 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +1 -1
- package/dist/interfaces.d.cts +40 -19
- package/dist/interfaces.d.ts +40 -19
- package/dist/internal.d.cts +0 -1
- package/dist/internal.d.ts +0 -1
- package/dist/managerNormalize.d.cts +9 -2
- package/dist/managerNormalize.d.ts +9 -2
- package/dist/plugin.d.cts +81 -0
- package/dist/plugin.d.ts +81 -0
- package/dist/pluginHelpers.d.cts +68 -0
- package/dist/pluginHelpers.d.ts +68 -0
- package/dist/pluginNormalize.d.cts +16 -0
- package/dist/pluginNormalize.d.ts +16 -0
- package/dist/pluginStorage.d.cts +20 -0
- package/dist/pluginStorage.d.ts +20 -0
- package/dist/pluginStorageNormalize.d.cts +3 -0
- package/dist/pluginStorageNormalize.d.ts +3 -0
- package/dist/pluginStorageTypes.d.cts +326 -0
- package/dist/pluginStorageTypes.d.ts +326 -0
- package/dist/pluginTypes.d.cts +102 -0
- package/dist/pluginTypes.d.ts +102 -0
- package/dist/runtime/defaultPreset.d.cts +2 -0
- package/dist/runtime/defaultPreset.d.ts +2 -0
- package/dist/runtime/instance/manager.d.cts +37 -0
- package/dist/runtime/instance/manager.d.ts +37 -0
- package/dist/runtime/instance/plugin.d.cts +3 -0
- package/dist/runtime/instance/plugin.d.ts +3 -0
- package/dist/runtime/instance/storage.d.cts +3 -0
- package/dist/runtime/instance/storage.d.ts +3 -0
- package/dist/runtime/kernel/actionView.d.cts +2 -0
- package/dist/runtime/kernel/actionView.d.ts +2 -0
- package/dist/runtime/kernel/bucketRuntime.d.cts +34 -0
- package/dist/runtime/kernel/bucketRuntime.d.ts +34 -0
- package/dist/runtime/kernel/callbackValidation.d.cts +11 -0
- package/dist/runtime/kernel/callbackValidation.d.ts +11 -0
- package/dist/runtime/kernel/createMachineManagerFactory.d.cts +13 -0
- package/dist/runtime/kernel/createMachineManagerFactory.d.ts +13 -0
- package/dist/runtime/kernel/registry.d.cts +23 -0
- package/dist/runtime/kernel/registry.d.ts +23 -0
- package/dist/runtime/kernel/routing.d.cts +33 -0
- package/dist/runtime/kernel/routing.d.ts +33 -0
- package/dist/runtime/kernel/snapshot.d.cts +26 -0
- package/dist/runtime/kernel/snapshot.d.ts +26 -0
- package/dist/runtime/kernel/storage.d.cts +226 -0
- package/dist/runtime/kernel/storage.d.ts +226 -0
- package/dist/runtime/kernel/transitionGuard.d.cts +4 -0
- package/dist/runtime/kernel/transitionGuard.d.ts +4 -0
- package/dist/runtime/kernel/transitionTrace.d.cts +40 -0
- package/dist/runtime/kernel/transitionTrace.d.ts +40 -0
- package/dist/sidecar.d.cts +2 -2
- package/dist/sidecar.d.ts +2 -2
- package/dist/types.d.cts +35 -10
- package/dist/types.d.ts +35 -10
- package/dist/utils.d.cts +1 -1
- package/dist/utils.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { AnyEvent, MachineStore } from "./types";
|
|
3
|
-
export declare const MachineManager: <S extends MachineStore, P extends AnyEvent = MachineEvents<S>>(config: S, opts?: MachineManagerOptions<S, P>) => IMachineManager<S, P>;
|
|
1
|
+
export declare const MachineManager: import("./runtime/kernel/createMachineManagerFactory").MachineManagerFactory;
|
package/dist/MachineManager.d.ts
CHANGED
|
@@ -1,3 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { AnyEvent, MachineStore } from "./types";
|
|
3
|
-
export declare const MachineManager: <S extends MachineStore, P extends AnyEvent = MachineEvents<S>>(config: S, opts?: MachineManagerOptions<S, P>) => IMachineManager<S, P>;
|
|
1
|
+
export declare const MachineManager: import("./runtime/kernel/createMachineManagerFactory").MachineManagerFactory;
|
package/dist/actor.d.cts
CHANGED
|
@@ -23,7 +23,7 @@ export type Counters = {
|
|
|
23
23
|
};
|
|
24
24
|
export type NormalizeOptions = {
|
|
25
25
|
sender?: Self;
|
|
26
|
-
|
|
26
|
+
routingMode?: "default" | "unscoped";
|
|
27
27
|
};
|
|
28
28
|
export type RoutingScope = "actor" | "group" | "tag" | "unscoped";
|
|
29
29
|
export declare const EMPTY_ACTOR_RECORD: Record<string, RuntimeActorSlice>;
|
|
@@ -50,12 +50,6 @@ export declare const validateActorTemplateConfig: (templateKey: string, cfg: {
|
|
|
50
50
|
export declare const stripSenderFields: (meta: FSMEventMeta | undefined) => FSMEventMeta;
|
|
51
51
|
export declare const stripRouting: (meta: FSMEventMeta | undefined) => FSMEventMeta;
|
|
52
52
|
export declare const attachMeta: <P extends AnyEvent>(action: ManagerAction<P>, meta: FSMEventMeta) => ManagerAction<P>;
|
|
53
|
-
export declare const arrayify: <T>(value: T | T[]) => T[];
|
|
54
|
-
export declare const dedupe: <T>(values: T[]) => T[];
|
|
55
|
-
export declare const resolveRouting: (meta?: FSMEventMeta) => {
|
|
56
|
-
scope: RoutingScope;
|
|
57
|
-
targetSet: string[];
|
|
58
|
-
};
|
|
59
53
|
export declare const SPAWN_ID_SEP = "#";
|
|
60
54
|
export declare const parseSpawnId: (id: string) => {
|
|
61
55
|
owner: string | null;
|
package/dist/actor.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export type Counters = {
|
|
|
23
23
|
};
|
|
24
24
|
export type NormalizeOptions = {
|
|
25
25
|
sender?: Self;
|
|
26
|
-
|
|
26
|
+
routingMode?: "default" | "unscoped";
|
|
27
27
|
};
|
|
28
28
|
export type RoutingScope = "actor" | "group" | "tag" | "unscoped";
|
|
29
29
|
export declare const EMPTY_ACTOR_RECORD: Record<string, RuntimeActorSlice>;
|
|
@@ -50,12 +50,6 @@ export declare const validateActorTemplateConfig: (templateKey: string, cfg: {
|
|
|
50
50
|
export declare const stripSenderFields: (meta: FSMEventMeta | undefined) => FSMEventMeta;
|
|
51
51
|
export declare const stripRouting: (meta: FSMEventMeta | undefined) => FSMEventMeta;
|
|
52
52
|
export declare const attachMeta: <P extends AnyEvent>(action: ManagerAction<P>, meta: FSMEventMeta) => ManagerAction<P>;
|
|
53
|
-
export declare const arrayify: <T>(value: T | T[]) => T[];
|
|
54
|
-
export declare const dedupe: <T>(values: T[]) => T[];
|
|
55
|
-
export declare const resolveRouting: (meta?: FSMEventMeta) => {
|
|
56
|
-
scope: RoutingScope;
|
|
57
|
-
targetSet: string[];
|
|
58
|
-
};
|
|
59
53
|
export declare const SPAWN_ID_SEP = "#";
|
|
60
54
|
export declare const parseSpawnId: (id: string) => {
|
|
61
55
|
owner: string | null;
|
package/dist/actorEffects.d.cts
CHANGED
|
@@ -2,6 +2,7 @@ import type { ActorRuntime, NormalizeOptions } from "./actor";
|
|
|
2
2
|
import { REGISTER_BAG_DISPOSE } from "./internal";
|
|
3
3
|
import type { SidecarState } from "./sidecar";
|
|
4
4
|
import type { AnyEvent, AnyRecord, ManagerAction } from "./types";
|
|
5
|
+
import type { ScopedInvocationContext } from "./plugin";
|
|
5
6
|
export type InternalActorEffectDeps = {
|
|
6
7
|
self?: {
|
|
7
8
|
actorId: string;
|
|
@@ -26,6 +27,7 @@ export type ActorEffectsDeps<P extends AnyEvent> = {
|
|
|
26
27
|
domainKeys: readonly string[];
|
|
27
28
|
refs: ActorEffectsRefs<P>;
|
|
28
29
|
onTransition: (cb: EffectSubscriber<P>) => () => void;
|
|
30
|
+
createScopedDeps: (baseDeps: AnyRecord, ctx: ScopedInvocationContext) => AnyRecord;
|
|
29
31
|
onError?: (err: unknown) => void;
|
|
30
32
|
};
|
|
31
33
|
export type ActorEffectsRuntime<P extends AnyEvent> = {
|
package/dist/actorEffects.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { ActorRuntime, NormalizeOptions } from "./actor";
|
|
|
2
2
|
import { REGISTER_BAG_DISPOSE } from "./internal";
|
|
3
3
|
import type { SidecarState } from "./sidecar";
|
|
4
4
|
import type { AnyEvent, AnyRecord, ManagerAction } from "./types";
|
|
5
|
+
import type { ScopedInvocationContext } from "./plugin";
|
|
5
6
|
export type InternalActorEffectDeps = {
|
|
6
7
|
self?: {
|
|
7
8
|
actorId: string;
|
|
@@ -26,6 +27,7 @@ export type ActorEffectsDeps<P extends AnyEvent> = {
|
|
|
26
27
|
domainKeys: readonly string[];
|
|
27
28
|
refs: ActorEffectsRefs<P>;
|
|
28
29
|
onTransition: (cb: EffectSubscriber<P>) => () => void;
|
|
30
|
+
createScopedDeps: (baseDeps: AnyRecord, ctx: ScopedInvocationContext) => AnyRecord;
|
|
29
31
|
onError?: (err: unknown) => void;
|
|
30
32
|
};
|
|
31
33
|
export type ActorEffectsRuntime<P extends AnyEvent> = {
|
package/dist/createMachine.d.cts
CHANGED
|
@@ -1,34 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
type
|
|
3
|
-
|
|
4
|
-
type CapturedPersistence = ActorPersistence | undefined;
|
|
5
|
-
type WithCapturedPersistence<Persistence> = [Persistence] extends [undefined] ? {} : {
|
|
6
|
-
persistence: Persistence;
|
|
7
|
-
};
|
|
8
|
-
type Prettify<T> = {
|
|
9
|
-
[K in keyof T]: T[K];
|
|
10
|
-
} & {};
|
|
11
|
-
type CreateMachineResult<C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot, Persistence> = HasLiteralInit<C> extends true ? Prettify<MachineConfig<C, T, P, D, Snapshot> & WithCapturedPersistence<Persistence>> : MachineConfig<C, T, P, D, Snapshot>;
|
|
12
|
-
type ConfigKeys<C extends object> = StateName<C> | WILDCARD | "__INIT";
|
|
13
|
-
type ConfigTargetStates<C extends object> = StateName<C> | WILDCARD;
|
|
14
|
-
type MachineBaseInput<C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot> = Pick<MachineConfig<C, T, P, D, Snapshot>, "config" | "initialState" | "initialContext" | "reducer" | "effects">;
|
|
15
|
-
type ActorSnapshotHooks<C extends object, T extends AnyRecord, Snapshot> = {
|
|
16
|
-
hydrate?: ActorHydrateHook<C, T, Snapshot>;
|
|
17
|
-
dehydrate?: ActorDehydrateHook<C, T, Snapshot>;
|
|
18
|
-
};
|
|
19
|
-
type ActorPersistenceInput<C extends object, T extends AnyRecord, Snapshot> = {
|
|
20
|
-
persistence?: ActorPersistence;
|
|
21
|
-
groupTag?: string;
|
|
22
|
-
} & ActorSnapshotHooks<C, T, Snapshot> & ({
|
|
23
|
-
persistence?: "runtime";
|
|
24
|
-
hydrate?: never;
|
|
25
|
-
dehydrate?: never;
|
|
26
|
-
} | {
|
|
27
|
-
persistence: "snapshot";
|
|
28
|
-
});
|
|
29
|
-
type CreateMachineInput<C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot, Persistence> = HasLiteralInit<C> extends true ? MachineBaseInput<C, T, P, D, Snapshot> & ActorPersistenceInput<C, T, Snapshot> & {
|
|
30
|
-
persistence?: Persistence | ActorPersistence;
|
|
31
|
-
} : MachineConfig<C, T, P, D, Snapshot>;
|
|
32
|
-
export type TypedCreateMachineFn<P extends AnyEvent = AnyEvent, D extends AnyRecord = {}> = <C extends CFG<C, P, ConfigKeys<C>, ConfigTargetStates<C>>, T extends AnyRecord, Snapshot = DefaultSnapshotForConfig<C, T>, Persistence extends CapturedPersistence = undefined>(cfg: CreateMachineInput<C, T, P, D, Snapshot, Persistence>) => CreateMachineResult<C, T, P, D, Snapshot, Persistence>;
|
|
33
|
-
export declare function createMachine<P extends AnyEvent = AnyEvent, D extends AnyRecord = {}, C extends CFG<C, P, ConfigKeys<C>, ConfigTargetStates<C>> = Record<string, never>, T extends AnyRecord = {}, Snapshot = DefaultSnapshotForConfig<C, T>, Persistence extends CapturedPersistence = undefined>(cfg: CreateMachineInput<C, T, P, D, Snapshot, Persistence>): CreateMachineResult<C, T, P, D, Snapshot, Persistence>;
|
|
34
|
-
export {};
|
|
1
|
+
import type { CreateMachineFn } from "./createMachine.types";
|
|
2
|
+
export type { TypedCreateMachineFn } from "./createMachine.types";
|
|
3
|
+
export declare const createMachine: CreateMachineFn;
|
package/dist/createMachine.d.ts
CHANGED
|
@@ -1,34 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
type
|
|
3
|
-
|
|
4
|
-
type CapturedPersistence = ActorPersistence | undefined;
|
|
5
|
-
type WithCapturedPersistence<Persistence> = [Persistence] extends [undefined] ? {} : {
|
|
6
|
-
persistence: Persistence;
|
|
7
|
-
};
|
|
8
|
-
type Prettify<T> = {
|
|
9
|
-
[K in keyof T]: T[K];
|
|
10
|
-
} & {};
|
|
11
|
-
type CreateMachineResult<C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot, Persistence> = HasLiteralInit<C> extends true ? Prettify<MachineConfig<C, T, P, D, Snapshot> & WithCapturedPersistence<Persistence>> : MachineConfig<C, T, P, D, Snapshot>;
|
|
12
|
-
type ConfigKeys<C extends object> = StateName<C> | WILDCARD | "__INIT";
|
|
13
|
-
type ConfigTargetStates<C extends object> = StateName<C> | WILDCARD;
|
|
14
|
-
type MachineBaseInput<C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot> = Pick<MachineConfig<C, T, P, D, Snapshot>, "config" | "initialState" | "initialContext" | "reducer" | "effects">;
|
|
15
|
-
type ActorSnapshotHooks<C extends object, T extends AnyRecord, Snapshot> = {
|
|
16
|
-
hydrate?: ActorHydrateHook<C, T, Snapshot>;
|
|
17
|
-
dehydrate?: ActorDehydrateHook<C, T, Snapshot>;
|
|
18
|
-
};
|
|
19
|
-
type ActorPersistenceInput<C extends object, T extends AnyRecord, Snapshot> = {
|
|
20
|
-
persistence?: ActorPersistence;
|
|
21
|
-
groupTag?: string;
|
|
22
|
-
} & ActorSnapshotHooks<C, T, Snapshot> & ({
|
|
23
|
-
persistence?: "runtime";
|
|
24
|
-
hydrate?: never;
|
|
25
|
-
dehydrate?: never;
|
|
26
|
-
} | {
|
|
27
|
-
persistence: "snapshot";
|
|
28
|
-
});
|
|
29
|
-
type CreateMachineInput<C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot, Persistence> = HasLiteralInit<C> extends true ? MachineBaseInput<C, T, P, D, Snapshot> & ActorPersistenceInput<C, T, Snapshot> & {
|
|
30
|
-
persistence?: Persistence | ActorPersistence;
|
|
31
|
-
} : MachineConfig<C, T, P, D, Snapshot>;
|
|
32
|
-
export type TypedCreateMachineFn<P extends AnyEvent = AnyEvent, D extends AnyRecord = {}> = <C extends CFG<C, P, ConfigKeys<C>, ConfigTargetStates<C>>, T extends AnyRecord, Snapshot = DefaultSnapshotForConfig<C, T>, Persistence extends CapturedPersistence = undefined>(cfg: CreateMachineInput<C, T, P, D, Snapshot, Persistence>) => CreateMachineResult<C, T, P, D, Snapshot, Persistence>;
|
|
33
|
-
export declare function createMachine<P extends AnyEvent = AnyEvent, D extends AnyRecord = {}, C extends CFG<C, P, ConfigKeys<C>, ConfigTargetStates<C>> = Record<string, never>, T extends AnyRecord = {}, Snapshot = DefaultSnapshotForConfig<C, T>, Persistence extends CapturedPersistence = undefined>(cfg: CreateMachineInput<C, T, P, D, Snapshot, Persistence>): CreateMachineResult<C, T, P, D, Snapshot, Persistence>;
|
|
34
|
-
export {};
|
|
1
|
+
import type { CreateMachineFn } from "./createMachine.types";
|
|
2
|
+
export type { TypedCreateMachineFn } from "./createMachine.types";
|
|
3
|
+
export declare const createMachine: CreateMachineFn;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { AnyEvent, AnyRecord, ActorDehydrateHook, ActorHydrateHook, ActorPersistence, CFG, DefaultActorSnapshot, EffectStateName, MachineConfig, MachineEffect, ManagerAction, MachineReducerInputState, MachineReducerState, StateName, StateType, TransitionNextState, WILDCARD } from "./types";
|
|
2
|
+
import type { LiteFsmPlugin } from "./plugin";
|
|
3
|
+
import type { StorageTypingExtensionsForPluginSource } from "./pluginHelpers";
|
|
4
|
+
import type { StorageDependentField, StorageDependentTypeLambda, StorageMachineTypingExtension } from "./pluginStorageTypes";
|
|
5
|
+
type HasLiteralInit<C extends object> = string extends keyof C ? false : "__INIT" extends keyof C ? true : false;
|
|
6
|
+
type DefaultSnapshotForConfig<C extends object, T extends AnyRecord> = HasLiteralInit<C> extends true ? DefaultActorSnapshot<C, T> : StateType<C, T>;
|
|
7
|
+
type CapturedPersistence = ActorPersistence | undefined;
|
|
8
|
+
type WithCapturedPersistence<Persistence> = [Persistence] extends [undefined] ? {} : {
|
|
9
|
+
persistence: Persistence;
|
|
10
|
+
};
|
|
11
|
+
type Prettify<T> = {
|
|
12
|
+
[K in keyof T]: T[K];
|
|
13
|
+
} & {};
|
|
14
|
+
export type CoreCreateMachineResult<C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot, Persistence> = HasLiteralInit<C> extends true ? Prettify<MachineConfig<C, T, P, D, Snapshot> & WithCapturedPersistence<Persistence>> : MachineConfig<C, T, P, D, Snapshot>;
|
|
15
|
+
export type ConfigKeys<C extends object> = StateName<C> | WILDCARD | "__INIT";
|
|
16
|
+
export type ConfigTargetStates<C extends object> = StateName<C> | WILDCARD;
|
|
17
|
+
type MachineBaseInput<C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot> = Pick<MachineConfig<C, T, P, D, Snapshot>, "storage" | "config" | "initialState" | "initialContext" | "reducer" | "effects">;
|
|
18
|
+
type ActorSnapshotHooks<C extends object, T extends AnyRecord, Snapshot> = {
|
|
19
|
+
hydrate?: ActorHydrateHook<C, T, Snapshot>;
|
|
20
|
+
dehydrate?: ActorDehydrateHook<C, T, Snapshot>;
|
|
21
|
+
};
|
|
22
|
+
type ActorPersistenceInput<C extends object, T extends AnyRecord, Snapshot> = {
|
|
23
|
+
persistence?: ActorPersistence;
|
|
24
|
+
groupTag?: string;
|
|
25
|
+
} & ActorSnapshotHooks<C, T, Snapshot> & ({
|
|
26
|
+
persistence?: "runtime";
|
|
27
|
+
hydrate?: never;
|
|
28
|
+
dehydrate?: never;
|
|
29
|
+
} | {
|
|
30
|
+
persistence: "snapshot";
|
|
31
|
+
});
|
|
32
|
+
export type CoreCreateMachineInput<C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot, Persistence> = HasLiteralInit<C> extends true ? MachineBaseInput<C, T, P, D, Snapshot> & ActorPersistenceInput<C, T, Snapshot> & {
|
|
33
|
+
persistence?: Persistence | ActorPersistence;
|
|
34
|
+
} : MachineConfig<C, T, P, D, Snapshot>;
|
|
35
|
+
type PluginSource = LiteFsmPlugin<any, any, any> | readonly LiteFsmPlugin<any, any, any>[];
|
|
36
|
+
type ExtensionWithStorage<Extensions extends StorageMachineTypingExtension> = Extensions extends unknown ? "storage" extends keyof Extensions ? NonNullable<Extensions["storage"]> extends string ? Extensions & {
|
|
37
|
+
readonly storage: NonNullable<Extensions["storage"]>;
|
|
38
|
+
} : never : never : never;
|
|
39
|
+
type ExtensionStorageKind<Extension extends StorageMachineTypingExtension> = "storage" extends keyof Extension ? NonNullable<Extension["storage"]> & string : never;
|
|
40
|
+
type ExtensionStorageValues<Extensions extends StorageMachineTypingExtension> = Extensions extends unknown ? ExtensionStorageKind<Extensions> : never;
|
|
41
|
+
type ExtensionForStorage<Extensions extends StorageMachineTypingExtension, Storage extends string> = Extensions extends unknown ? (ExtensionStorageKind<Extensions> extends Storage ? Extensions : never) : never;
|
|
42
|
+
type ExtensionDeclaredInput<Extension extends StorageMachineTypingExtension> = "input" extends keyof Extension ? NonNullable<Extension["input"]> extends infer Input ? Input extends object ? Input : {} : {} : {};
|
|
43
|
+
type ExtensionInput<Extension extends StorageMachineTypingExtension> = Omit<ExtensionDeclaredInput<Extension>, "storage">;
|
|
44
|
+
type ConcreteStorageInput<StorageKind extends string, Input extends object> = Prettify<{
|
|
45
|
+
readonly storage: StorageKind;
|
|
46
|
+
} & Input>;
|
|
47
|
+
type CreateMachineStructuralInputKey = "storage" | "config" | "initialState" | "initialContext" | "reducer" | "effects" | "reactions" | "persistence" | "groupTag" | "hydrate" | "dehydrate";
|
|
48
|
+
type ExactExtensionInput<Input extends object, InputShape extends object, StorageInput extends object> = StorageInput & {
|
|
49
|
+
readonly [Key in Exclude<keyof Input, keyof InputShape | CreateMachineStructuralInputKey>]-?: never;
|
|
50
|
+
};
|
|
51
|
+
type ResolvedExtensionInput<Input extends object, InputShape extends object> = {
|
|
52
|
+
readonly [Key in keyof InputShape]: Key extends keyof Input ? Input[Key] : InputShape[Key];
|
|
53
|
+
};
|
|
54
|
+
type ExtensionCreateMachineCfg<Storage extends string> = {
|
|
55
|
+
readonly storage: Storage;
|
|
56
|
+
readonly config: object;
|
|
57
|
+
readonly initialState: string;
|
|
58
|
+
readonly initialContext: unknown;
|
|
59
|
+
};
|
|
60
|
+
type CfgIdentity<Cfg extends object> = {
|
|
61
|
+
readonly [Key in keyof Cfg]: Cfg[Key];
|
|
62
|
+
};
|
|
63
|
+
type CfgConfig<Cfg extends object> = Cfg extends {
|
|
64
|
+
readonly config: infer Config extends object;
|
|
65
|
+
} ? Config : Record<string, never>;
|
|
66
|
+
type CfgContext<Cfg extends object, T extends AnyRecord, StorageInput extends object> = StorageInput extends {
|
|
67
|
+
readonly initialContext: infer Context extends AnyRecord;
|
|
68
|
+
} ? Context : Cfg extends {
|
|
69
|
+
readonly initialContext: infer Context extends AnyRecord;
|
|
70
|
+
} ? Context : T;
|
|
71
|
+
type ResolveDependentResultByName<Key extends PropertyKey, Value, ConcreteInput extends object> = Key extends keyof ConcreteInput ? ConcreteInput[Key] : Key extends `${string}Context${string}` | `${string}context${string}` ? ConcreteInput extends {
|
|
72
|
+
readonly initialContext: infer Context;
|
|
73
|
+
} ? Context : Value : Key extends `${string}Spawn${string}` | `${string}spawn${string}` | `${string}Payload${string}` | `${string}payload${string}` ? ConcreteInput extends {
|
|
74
|
+
readonly spawnSchema: infer Spawn;
|
|
75
|
+
} ? Spawn : Value : Value;
|
|
76
|
+
type ResolveDependentResultValue<Key extends PropertyKey, Value, ConcreteInput extends object> = Value extends (...args: infer Args) => infer Result ? (...args: Args) => ResolveDependentResultByName<Key, Result, ConcreteInput> : ResolveDependentResultByName<Key, Value, ConcreteInput>;
|
|
77
|
+
type ResolveDependentResult<Result, ConcreteInput extends object> = Result extends object ? {
|
|
78
|
+
readonly [Key in keyof Result]: ResolveDependentResultValue<Key, Result[Key], ConcreteInput>;
|
|
79
|
+
} : Result;
|
|
80
|
+
type ApplyStorageDependentLambda<Lambda extends StorageDependentTypeLambda, ConcreteInput extends object> = (Lambda & {
|
|
81
|
+
readonly input: ConcreteInput;
|
|
82
|
+
})["type"];
|
|
83
|
+
type ApplyExtensionField<Field, ConcreteInput extends object> = Field extends StorageDependentField<infer Lambda> ? ApplyStorageDependentLambda<Lambda, ConcreteInput> : Field extends {
|
|
84
|
+
<Input extends ConcreteInput>(input: Input): infer Result;
|
|
85
|
+
} ? ResolveDependentResult<Result, ConcreteInput> : Field extends (input: ConcreteInput) => infer Result ? ResolveDependentResult<Result, ConcreteInput> : Field;
|
|
86
|
+
type ExtensionObjectField<Extension extends StorageMachineTypingExtension, Key extends keyof StorageMachineTypingExtension, ConcreteInput extends object> = Key extends keyof Extension ? ApplyExtensionField<NonNullable<Extension[Key]>, ConcreteInput> extends infer Result ? Result extends object ? Result : {} : {} : {};
|
|
87
|
+
type ExtensionAnyRecordField<Extension extends StorageMachineTypingExtension, Key extends keyof StorageMachineTypingExtension, ConcreteInput extends object> = Key extends keyof Extension ? ApplyExtensionField<NonNullable<Extension[Key]>, ConcreteInput> extends infer Result ? Result extends AnyRecord ? Result : {} : {} : {};
|
|
88
|
+
type ExtensionInternalEvents<Extension extends StorageMachineTypingExtension> = "internalEvents" extends keyof Extension ? NonNullable<Extension["internalEvents"]> extends infer Events ? Events extends AnyEvent ? Events : never : never : never;
|
|
89
|
+
type ExtensionReducerContext<Extension extends StorageMachineTypingExtension, ConcreteInput extends object> = ExtensionObjectField<Extension, "reducerContext", ConcreteInput>;
|
|
90
|
+
type ExtensionEffectDeps<Extension extends StorageMachineTypingExtension, ConcreteInput extends object> = ExtensionAnyRecordField<Extension, "effectDeps", ConcreteInput>;
|
|
91
|
+
type ExtensionReactionDeps<Extension extends StorageMachineTypingExtension, ConcreteInput extends object> = ExtensionAnyRecordField<Extension, "reactionDeps", ConcreteInput>;
|
|
92
|
+
type ExtensionResultMetadata<Extension extends StorageMachineTypingExtension, ConcreteInput extends object> = ExtensionObjectField<Extension, "resultMetadata", ConcreteInput>;
|
|
93
|
+
type ExtensionPublicState<Extension extends StorageMachineTypingExtension, ConcreteInput extends object> = "publicState" extends keyof Extension ? ApplyExtensionField<NonNullable<Extension["publicState"]>, ConcreteInput> : never;
|
|
94
|
+
type HasExtensionResultMetadata<Extension extends StorageMachineTypingExtension> = "resultMetadata" extends keyof Extension ? true : false;
|
|
95
|
+
type HasExtensionPublicState<Extension extends StorageMachineTypingExtension> = "publicState" extends keyof Extension ? true : false;
|
|
96
|
+
type HasExtensionEffectDeps<Extension extends StorageMachineTypingExtension> = "effectDeps" extends keyof Extension ? true : false;
|
|
97
|
+
type HasExtensionReactionDeps<Extension extends StorageMachineTypingExtension> = "reactionDeps" extends keyof Extension ? true : false;
|
|
98
|
+
type ExtensionDefaultContext<Extension extends StorageMachineTypingExtension> = ExtensionInput<Extension> extends {
|
|
99
|
+
initialContext: infer Context extends AnyRecord;
|
|
100
|
+
} ? Context : AnyRecord;
|
|
101
|
+
type ExtensionContext<T extends AnyRecord, Input extends object> = Input extends {
|
|
102
|
+
initialContext: infer Context extends AnyRecord;
|
|
103
|
+
} ? Context : T;
|
|
104
|
+
type ExtensionEvents<P extends AnyEvent, Extension extends StorageMachineTypingExtension> = P | ExtensionInternalEvents<Extension>;
|
|
105
|
+
type ExtensionInvocationDeps<D extends AnyRecord, Extension extends StorageMachineTypingExtension, ConcreteInput extends object> = D & ExtensionEffectDeps<Extension, ConcreteInput> & ExtensionReactionDeps<Extension, ConcreteInput>;
|
|
106
|
+
type ExtensionReducer<C extends object, T extends AnyRecord, P extends AnyEvent, Extension extends StorageMachineTypingExtension, ConcreteInput extends object> = (state: MachineReducerInputState<C, T>, payload: P, meta: {
|
|
107
|
+
nextState: TransitionNextState<C>;
|
|
108
|
+
config: C;
|
|
109
|
+
} & ExtensionReducerContext<Extension, ConcreteInput>) => MachineReducerState<C, T> | void;
|
|
110
|
+
type ExtensionEffects<C extends object, P extends AnyEvent, D extends AnyRecord> = {
|
|
111
|
+
[key in EffectStateName<C>]?: MachineEffect<key, C, P, D>;
|
|
112
|
+
};
|
|
113
|
+
type ExtensionReactions<P extends AnyEvent, D extends AnyRecord> = {
|
|
114
|
+
[EventType in P["type"]]?: (deps: D) => unknown;
|
|
115
|
+
};
|
|
116
|
+
type ExtensionReactionsInput<InputShape extends object, P extends AnyEvent, D extends AnyRecord> = "reactions" extends keyof InputShape ? {
|
|
117
|
+
reactions?: ExtensionReactions<P, D>;
|
|
118
|
+
} : {};
|
|
119
|
+
type ExtensionFallbackInput<Input extends object, Key extends string, Fallback extends object> = Key extends keyof Input ? {} : Fallback;
|
|
120
|
+
type ExtensionCreateMachineInput<Cfg extends object, C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot, Persistence, Extension extends StorageMachineTypingExtension, InputShape extends object = ExtensionInput<Extension>, StorageInput extends object = ResolvedExtensionInput<Cfg, InputShape>, Context extends AnyRecord = ExtensionContext<T, StorageInput>, Events extends AnyEvent = ExtensionEvents<P, Extension>, StorageKind extends string = ExtensionStorageKind<Extension>> = CfgIdentity<Cfg> & Omit<CoreCreateMachineInput<C, Context, P, D, Snapshot, Persistence>, "storage" | "config" | "initialContext" | "reducer" | "effects" | keyof InputShape> & {
|
|
121
|
+
storage: StorageKind;
|
|
122
|
+
config: C & CFG<C, Events, ConfigKeys<C>, ConfigTargetStates<C>>;
|
|
123
|
+
} & ExtensionFallbackInput<InputShape, "initialContext", {
|
|
124
|
+
initialContext: Context;
|
|
125
|
+
}> & ExtensionFallbackInput<InputShape, "reducer", {
|
|
126
|
+
reducer?: ExtensionReducer<C, Context, ManagerAction<Events>, Extension, ConcreteStorageInput<StorageKind, StorageInput>>;
|
|
127
|
+
}> & ExtensionFallbackInput<InputShape, "effects", {
|
|
128
|
+
effects?: ExtensionEffects<C, Events, ExtensionInvocationDeps<D, Extension, ConcreteStorageInput<StorageKind, StorageInput>>>;
|
|
129
|
+
}> & ExtensionReactionsInput<InputShape, Events, ExtensionReactionDeps<Extension, ConcreteStorageInput<StorageKind, StorageInput>>> & ExactExtensionInput<Cfg, InputShape, StorageInput>;
|
|
130
|
+
type ExtensionRuntimeMetadata<Extension extends StorageMachineTypingExtension, P extends AnyEvent, ConcreteInput extends object> = {
|
|
131
|
+
readonly storage: ExtensionStorageKind<Extension>;
|
|
132
|
+
readonly publicEvents: P;
|
|
133
|
+
} & (HasExtensionResultMetadata<Extension> extends true ? {
|
|
134
|
+
readonly resultMetadata: ExtensionResultMetadata<Extension, ConcreteInput>;
|
|
135
|
+
} : {}) & (HasExtensionEffectDeps<Extension> extends true ? {
|
|
136
|
+
readonly effectDeps: ExtensionEffectDeps<Extension, ConcreteInput>;
|
|
137
|
+
} : {}) & (HasExtensionReactionDeps<Extension> extends true ? {
|
|
138
|
+
readonly reactionDeps: ExtensionReactionDeps<Extension, ConcreteInput>;
|
|
139
|
+
} : {}) & (HasExtensionPublicState<Extension> extends true ? {
|
|
140
|
+
readonly publicState: ExtensionPublicState<Extension, ConcreteInput>;
|
|
141
|
+
} : {});
|
|
142
|
+
type RuntimeResultPhantom<Extension extends StorageMachineTypingExtension, P extends AnyEvent, D extends AnyRecord, ConcreteInput extends object> = {
|
|
143
|
+
readonly __liteFsmRuntime?: ExtensionRuntimeMetadata<Extension, P, ConcreteInput>;
|
|
144
|
+
readonly __liteFsmDependencies?: D;
|
|
145
|
+
};
|
|
146
|
+
type ExtensionCreateMachineResult<C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot, Persistence, Extension extends StorageMachineTypingExtension, StorageInput extends object = ExtensionInput<Extension>, Context extends AnyRecord = ExtensionContext<T, StorageInput>> = Prettify<Omit<CoreCreateMachineResult<C, Context, P, D, Snapshot, Persistence>, "storage" | keyof ExtensionInput<Extension>> & {
|
|
147
|
+
storage: ExtensionStorageKind<Extension>;
|
|
148
|
+
} & StorageInput & RuntimeResultPhantom<Extension, P, D, ConcreteStorageInput<ExtensionStorageKind<Extension>, StorageInput>>>;
|
|
149
|
+
type InvalidStorageTypingExtensionKeys<Extensions extends StorageMachineTypingExtension> = Extensions extends unknown ? Exclude<keyof Extensions, keyof StorageMachineTypingExtension> : never;
|
|
150
|
+
type MissingStorageTypingExtensionKeys<Extensions extends StorageMachineTypingExtension> = Extensions extends unknown ? [keyof Extensions] extends [never] ? never : "storage" extends keyof Extensions ? never : keyof Extensions : never;
|
|
151
|
+
type ValidStorageTypingExtensions<Extensions extends StorageMachineTypingExtension> = [
|
|
152
|
+
InvalidStorageTypingExtensionKeys<Extensions> | MissingStorageTypingExtensionKeys<Extensions>
|
|
153
|
+
] extends [never] ? Extensions : never;
|
|
154
|
+
type PluginStorageTypingExtensions<Plugins extends PluginSource> = ValidStorageTypingExtensions<StorageTypingExtensionsForPluginSource<Plugins>>;
|
|
155
|
+
type CoreTypedCreateMachineFn<P extends AnyEvent = AnyEvent, D extends AnyRecord = {}> = <C extends CFG<C, P, ConfigKeys<C>, ConfigTargetStates<C>>, T extends AnyRecord, Snapshot = DefaultSnapshotForConfig<C, T>, Persistence extends CapturedPersistence = undefined>(cfg: CoreCreateMachineInput<C, T, P, D, Snapshot, Persistence>) => CoreCreateMachineResult<C, T, P, D, Snapshot, Persistence>;
|
|
156
|
+
interface ExtensionTypedCreateMachineFnHolder<P extends AnyEvent, D extends AnyRecord, Extensions extends StorageMachineTypingExtension> {
|
|
157
|
+
call<Storage extends ExtensionStorageValues<ExtensionWithStorage<Extensions>>, Extension extends ExtensionForStorage<ExtensionWithStorage<Extensions>, Storage> = ExtensionForStorage<ExtensionWithStorage<Extensions>, Storage>, const Cfg extends ExtensionCreateMachineCfg<Storage> = ExtensionCreateMachineCfg<Storage>, InputShape extends object = ExtensionInput<Extension>, StorageInput extends object = ResolvedExtensionInput<Cfg, InputShape>, C extends object = CfgConfig<Cfg>, T extends AnyRecord = ExtensionDefaultContext<Extension>, Context extends AnyRecord = CfgContext<Cfg, T, StorageInput>, Snapshot = DefaultSnapshotForConfig<C, Context>, Persistence extends CapturedPersistence = undefined>(cfg: ExtensionCreateMachineInput<Cfg, C, T, P, D, Snapshot, Persistence, Extension, InputShape, StorageInput, Context, ExtensionEvents<P, Extension>, Storage>): ExtensionCreateMachineResult<C, T, P, D, Snapshot, Persistence, Extension, StorageInput, Context>;
|
|
158
|
+
}
|
|
159
|
+
type ExtensionTypedCreateMachineFn<P extends AnyEvent, D extends AnyRecord, Extensions extends StorageMachineTypingExtension> = ExtensionTypedCreateMachineFnHolder<P, D, Extensions>["call"];
|
|
160
|
+
export type TypedCreateMachineFn<P extends AnyEvent = AnyEvent, D extends AnyRecord = {}, Plugins extends PluginSource = never> = [Plugins] extends [never] ? CoreTypedCreateMachineFn<P, D> : [PluginStorageTypingExtensions<Plugins>] extends [never] ? CoreTypedCreateMachineFn<P, D> : CoreTypedCreateMachineFn<P, D> & ExtensionTypedCreateMachineFn<P, D, PluginStorageTypingExtensions<Plugins>>;
|
|
161
|
+
type DirectCreateMachineFn = <P extends AnyEvent = AnyEvent, D extends AnyRecord = {}, C extends CFG<C, P, ConfigKeys<C>, ConfigTargetStates<C>> = Record<string, never>, T extends AnyRecord = {}, Snapshot = DefaultSnapshotForConfig<C, T>, Persistence extends CapturedPersistence = undefined>(cfg: CoreCreateMachineInput<C, T, P, D, Snapshot, Persistence>) => CoreCreateMachineResult<C, T, P, D, Snapshot, Persistence>;
|
|
162
|
+
type AnyExtensionCreateMachineFn = {
|
|
163
|
+
<P extends AnyEvent = AnyEvent, D extends AnyRecord = {}, Plugins extends PluginSource = never, Extensions extends StorageMachineTypingExtension = PluginStorageTypingExtensions<Plugins>, Storage extends ExtensionStorageValues<ExtensionWithStorage<Extensions>> = ExtensionStorageValues<ExtensionWithStorage<Extensions>>, Extension extends ExtensionForStorage<ExtensionWithStorage<Extensions>, Storage> = ExtensionForStorage<ExtensionWithStorage<Extensions>, Storage>, const Cfg extends ExtensionCreateMachineCfg<Storage> = ExtensionCreateMachineCfg<Storage>, InputShape extends object = ExtensionInput<Extension>, StorageInput extends object = ResolvedExtensionInput<Cfg, InputShape>, C extends object = CfgConfig<Cfg>, T extends AnyRecord = ExtensionDefaultContext<Extension>, Context extends AnyRecord = CfgContext<Cfg, T, StorageInput>, Snapshot = DefaultSnapshotForConfig<C, Context>, Persistence extends CapturedPersistence = undefined>(cfg: ExtensionCreateMachineInput<Cfg, C, T, P, D, Snapshot, Persistence, Extension, InputShape, StorageInput, Context, ExtensionEvents<P, Extension>, Storage>): ExtensionCreateMachineResult<C, T, P, D, Snapshot, Persistence, Extension, StorageInput, Context>;
|
|
164
|
+
};
|
|
165
|
+
export type CreateMachineFn = DirectCreateMachineFn & AnyExtensionCreateMachineFn;
|
|
166
|
+
export {};
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { AnyEvent, AnyRecord, ActorDehydrateHook, ActorHydrateHook, ActorPersistence, CFG, DefaultActorSnapshot, EffectStateName, MachineConfig, MachineEffect, ManagerAction, MachineReducerInputState, MachineReducerState, StateName, StateType, TransitionNextState, WILDCARD } from "./types";
|
|
2
|
+
import type { LiteFsmPlugin } from "./plugin";
|
|
3
|
+
import type { StorageTypingExtensionsForPluginSource } from "./pluginHelpers";
|
|
4
|
+
import type { StorageDependentField, StorageDependentTypeLambda, StorageMachineTypingExtension } from "./pluginStorageTypes";
|
|
5
|
+
type HasLiteralInit<C extends object> = string extends keyof C ? false : "__INIT" extends keyof C ? true : false;
|
|
6
|
+
type DefaultSnapshotForConfig<C extends object, T extends AnyRecord> = HasLiteralInit<C> extends true ? DefaultActorSnapshot<C, T> : StateType<C, T>;
|
|
7
|
+
type CapturedPersistence = ActorPersistence | undefined;
|
|
8
|
+
type WithCapturedPersistence<Persistence> = [Persistence] extends [undefined] ? {} : {
|
|
9
|
+
persistence: Persistence;
|
|
10
|
+
};
|
|
11
|
+
type Prettify<T> = {
|
|
12
|
+
[K in keyof T]: T[K];
|
|
13
|
+
} & {};
|
|
14
|
+
export type CoreCreateMachineResult<C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot, Persistence> = HasLiteralInit<C> extends true ? Prettify<MachineConfig<C, T, P, D, Snapshot> & WithCapturedPersistence<Persistence>> : MachineConfig<C, T, P, D, Snapshot>;
|
|
15
|
+
export type ConfigKeys<C extends object> = StateName<C> | WILDCARD | "__INIT";
|
|
16
|
+
export type ConfigTargetStates<C extends object> = StateName<C> | WILDCARD;
|
|
17
|
+
type MachineBaseInput<C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot> = Pick<MachineConfig<C, T, P, D, Snapshot>, "storage" | "config" | "initialState" | "initialContext" | "reducer" | "effects">;
|
|
18
|
+
type ActorSnapshotHooks<C extends object, T extends AnyRecord, Snapshot> = {
|
|
19
|
+
hydrate?: ActorHydrateHook<C, T, Snapshot>;
|
|
20
|
+
dehydrate?: ActorDehydrateHook<C, T, Snapshot>;
|
|
21
|
+
};
|
|
22
|
+
type ActorPersistenceInput<C extends object, T extends AnyRecord, Snapshot> = {
|
|
23
|
+
persistence?: ActorPersistence;
|
|
24
|
+
groupTag?: string;
|
|
25
|
+
} & ActorSnapshotHooks<C, T, Snapshot> & ({
|
|
26
|
+
persistence?: "runtime";
|
|
27
|
+
hydrate?: never;
|
|
28
|
+
dehydrate?: never;
|
|
29
|
+
} | {
|
|
30
|
+
persistence: "snapshot";
|
|
31
|
+
});
|
|
32
|
+
export type CoreCreateMachineInput<C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot, Persistence> = HasLiteralInit<C> extends true ? MachineBaseInput<C, T, P, D, Snapshot> & ActorPersistenceInput<C, T, Snapshot> & {
|
|
33
|
+
persistence?: Persistence | ActorPersistence;
|
|
34
|
+
} : MachineConfig<C, T, P, D, Snapshot>;
|
|
35
|
+
type PluginSource = LiteFsmPlugin<any, any, any> | readonly LiteFsmPlugin<any, any, any>[];
|
|
36
|
+
type ExtensionWithStorage<Extensions extends StorageMachineTypingExtension> = Extensions extends unknown ? "storage" extends keyof Extensions ? NonNullable<Extensions["storage"]> extends string ? Extensions & {
|
|
37
|
+
readonly storage: NonNullable<Extensions["storage"]>;
|
|
38
|
+
} : never : never : never;
|
|
39
|
+
type ExtensionStorageKind<Extension extends StorageMachineTypingExtension> = "storage" extends keyof Extension ? NonNullable<Extension["storage"]> & string : never;
|
|
40
|
+
type ExtensionStorageValues<Extensions extends StorageMachineTypingExtension> = Extensions extends unknown ? ExtensionStorageKind<Extensions> : never;
|
|
41
|
+
type ExtensionForStorage<Extensions extends StorageMachineTypingExtension, Storage extends string> = Extensions extends unknown ? (ExtensionStorageKind<Extensions> extends Storage ? Extensions : never) : never;
|
|
42
|
+
type ExtensionDeclaredInput<Extension extends StorageMachineTypingExtension> = "input" extends keyof Extension ? NonNullable<Extension["input"]> extends infer Input ? Input extends object ? Input : {} : {} : {};
|
|
43
|
+
type ExtensionInput<Extension extends StorageMachineTypingExtension> = Omit<ExtensionDeclaredInput<Extension>, "storage">;
|
|
44
|
+
type ConcreteStorageInput<StorageKind extends string, Input extends object> = Prettify<{
|
|
45
|
+
readonly storage: StorageKind;
|
|
46
|
+
} & Input>;
|
|
47
|
+
type CreateMachineStructuralInputKey = "storage" | "config" | "initialState" | "initialContext" | "reducer" | "effects" | "reactions" | "persistence" | "groupTag" | "hydrate" | "dehydrate";
|
|
48
|
+
type ExactExtensionInput<Input extends object, InputShape extends object, StorageInput extends object> = StorageInput & {
|
|
49
|
+
readonly [Key in Exclude<keyof Input, keyof InputShape | CreateMachineStructuralInputKey>]-?: never;
|
|
50
|
+
};
|
|
51
|
+
type ResolvedExtensionInput<Input extends object, InputShape extends object> = {
|
|
52
|
+
readonly [Key in keyof InputShape]: Key extends keyof Input ? Input[Key] : InputShape[Key];
|
|
53
|
+
};
|
|
54
|
+
type ExtensionCreateMachineCfg<Storage extends string> = {
|
|
55
|
+
readonly storage: Storage;
|
|
56
|
+
readonly config: object;
|
|
57
|
+
readonly initialState: string;
|
|
58
|
+
readonly initialContext: unknown;
|
|
59
|
+
};
|
|
60
|
+
type CfgIdentity<Cfg extends object> = {
|
|
61
|
+
readonly [Key in keyof Cfg]: Cfg[Key];
|
|
62
|
+
};
|
|
63
|
+
type CfgConfig<Cfg extends object> = Cfg extends {
|
|
64
|
+
readonly config: infer Config extends object;
|
|
65
|
+
} ? Config : Record<string, never>;
|
|
66
|
+
type CfgContext<Cfg extends object, T extends AnyRecord, StorageInput extends object> = StorageInput extends {
|
|
67
|
+
readonly initialContext: infer Context extends AnyRecord;
|
|
68
|
+
} ? Context : Cfg extends {
|
|
69
|
+
readonly initialContext: infer Context extends AnyRecord;
|
|
70
|
+
} ? Context : T;
|
|
71
|
+
type ResolveDependentResultByName<Key extends PropertyKey, Value, ConcreteInput extends object> = Key extends keyof ConcreteInput ? ConcreteInput[Key] : Key extends `${string}Context${string}` | `${string}context${string}` ? ConcreteInput extends {
|
|
72
|
+
readonly initialContext: infer Context;
|
|
73
|
+
} ? Context : Value : Key extends `${string}Spawn${string}` | `${string}spawn${string}` | `${string}Payload${string}` | `${string}payload${string}` ? ConcreteInput extends {
|
|
74
|
+
readonly spawnSchema: infer Spawn;
|
|
75
|
+
} ? Spawn : Value : Value;
|
|
76
|
+
type ResolveDependentResultValue<Key extends PropertyKey, Value, ConcreteInput extends object> = Value extends (...args: infer Args) => infer Result ? (...args: Args) => ResolveDependentResultByName<Key, Result, ConcreteInput> : ResolveDependentResultByName<Key, Value, ConcreteInput>;
|
|
77
|
+
type ResolveDependentResult<Result, ConcreteInput extends object> = Result extends object ? {
|
|
78
|
+
readonly [Key in keyof Result]: ResolveDependentResultValue<Key, Result[Key], ConcreteInput>;
|
|
79
|
+
} : Result;
|
|
80
|
+
type ApplyStorageDependentLambda<Lambda extends StorageDependentTypeLambda, ConcreteInput extends object> = (Lambda & {
|
|
81
|
+
readonly input: ConcreteInput;
|
|
82
|
+
})["type"];
|
|
83
|
+
type ApplyExtensionField<Field, ConcreteInput extends object> = Field extends StorageDependentField<infer Lambda> ? ApplyStorageDependentLambda<Lambda, ConcreteInput> : Field extends {
|
|
84
|
+
<Input extends ConcreteInput>(input: Input): infer Result;
|
|
85
|
+
} ? ResolveDependentResult<Result, ConcreteInput> : Field extends (input: ConcreteInput) => infer Result ? ResolveDependentResult<Result, ConcreteInput> : Field;
|
|
86
|
+
type ExtensionObjectField<Extension extends StorageMachineTypingExtension, Key extends keyof StorageMachineTypingExtension, ConcreteInput extends object> = Key extends keyof Extension ? ApplyExtensionField<NonNullable<Extension[Key]>, ConcreteInput> extends infer Result ? Result extends object ? Result : {} : {} : {};
|
|
87
|
+
type ExtensionAnyRecordField<Extension extends StorageMachineTypingExtension, Key extends keyof StorageMachineTypingExtension, ConcreteInput extends object> = Key extends keyof Extension ? ApplyExtensionField<NonNullable<Extension[Key]>, ConcreteInput> extends infer Result ? Result extends AnyRecord ? Result : {} : {} : {};
|
|
88
|
+
type ExtensionInternalEvents<Extension extends StorageMachineTypingExtension> = "internalEvents" extends keyof Extension ? NonNullable<Extension["internalEvents"]> extends infer Events ? Events extends AnyEvent ? Events : never : never : never;
|
|
89
|
+
type ExtensionReducerContext<Extension extends StorageMachineTypingExtension, ConcreteInput extends object> = ExtensionObjectField<Extension, "reducerContext", ConcreteInput>;
|
|
90
|
+
type ExtensionEffectDeps<Extension extends StorageMachineTypingExtension, ConcreteInput extends object> = ExtensionAnyRecordField<Extension, "effectDeps", ConcreteInput>;
|
|
91
|
+
type ExtensionReactionDeps<Extension extends StorageMachineTypingExtension, ConcreteInput extends object> = ExtensionAnyRecordField<Extension, "reactionDeps", ConcreteInput>;
|
|
92
|
+
type ExtensionResultMetadata<Extension extends StorageMachineTypingExtension, ConcreteInput extends object> = ExtensionObjectField<Extension, "resultMetadata", ConcreteInput>;
|
|
93
|
+
type ExtensionPublicState<Extension extends StorageMachineTypingExtension, ConcreteInput extends object> = "publicState" extends keyof Extension ? ApplyExtensionField<NonNullable<Extension["publicState"]>, ConcreteInput> : never;
|
|
94
|
+
type HasExtensionResultMetadata<Extension extends StorageMachineTypingExtension> = "resultMetadata" extends keyof Extension ? true : false;
|
|
95
|
+
type HasExtensionPublicState<Extension extends StorageMachineTypingExtension> = "publicState" extends keyof Extension ? true : false;
|
|
96
|
+
type HasExtensionEffectDeps<Extension extends StorageMachineTypingExtension> = "effectDeps" extends keyof Extension ? true : false;
|
|
97
|
+
type HasExtensionReactionDeps<Extension extends StorageMachineTypingExtension> = "reactionDeps" extends keyof Extension ? true : false;
|
|
98
|
+
type ExtensionDefaultContext<Extension extends StorageMachineTypingExtension> = ExtensionInput<Extension> extends {
|
|
99
|
+
initialContext: infer Context extends AnyRecord;
|
|
100
|
+
} ? Context : AnyRecord;
|
|
101
|
+
type ExtensionContext<T extends AnyRecord, Input extends object> = Input extends {
|
|
102
|
+
initialContext: infer Context extends AnyRecord;
|
|
103
|
+
} ? Context : T;
|
|
104
|
+
type ExtensionEvents<P extends AnyEvent, Extension extends StorageMachineTypingExtension> = P | ExtensionInternalEvents<Extension>;
|
|
105
|
+
type ExtensionInvocationDeps<D extends AnyRecord, Extension extends StorageMachineTypingExtension, ConcreteInput extends object> = D & ExtensionEffectDeps<Extension, ConcreteInput> & ExtensionReactionDeps<Extension, ConcreteInput>;
|
|
106
|
+
type ExtensionReducer<C extends object, T extends AnyRecord, P extends AnyEvent, Extension extends StorageMachineTypingExtension, ConcreteInput extends object> = (state: MachineReducerInputState<C, T>, payload: P, meta: {
|
|
107
|
+
nextState: TransitionNextState<C>;
|
|
108
|
+
config: C;
|
|
109
|
+
} & ExtensionReducerContext<Extension, ConcreteInput>) => MachineReducerState<C, T> | void;
|
|
110
|
+
type ExtensionEffects<C extends object, P extends AnyEvent, D extends AnyRecord> = {
|
|
111
|
+
[key in EffectStateName<C>]?: MachineEffect<key, C, P, D>;
|
|
112
|
+
};
|
|
113
|
+
type ExtensionReactions<P extends AnyEvent, D extends AnyRecord> = {
|
|
114
|
+
[EventType in P["type"]]?: (deps: D) => unknown;
|
|
115
|
+
};
|
|
116
|
+
type ExtensionReactionsInput<InputShape extends object, P extends AnyEvent, D extends AnyRecord> = "reactions" extends keyof InputShape ? {
|
|
117
|
+
reactions?: ExtensionReactions<P, D>;
|
|
118
|
+
} : {};
|
|
119
|
+
type ExtensionFallbackInput<Input extends object, Key extends string, Fallback extends object> = Key extends keyof Input ? {} : Fallback;
|
|
120
|
+
type ExtensionCreateMachineInput<Cfg extends object, C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot, Persistence, Extension extends StorageMachineTypingExtension, InputShape extends object = ExtensionInput<Extension>, StorageInput extends object = ResolvedExtensionInput<Cfg, InputShape>, Context extends AnyRecord = ExtensionContext<T, StorageInput>, Events extends AnyEvent = ExtensionEvents<P, Extension>, StorageKind extends string = ExtensionStorageKind<Extension>> = CfgIdentity<Cfg> & Omit<CoreCreateMachineInput<C, Context, P, D, Snapshot, Persistence>, "storage" | "config" | "initialContext" | "reducer" | "effects" | keyof InputShape> & {
|
|
121
|
+
storage: StorageKind;
|
|
122
|
+
config: C & CFG<C, Events, ConfigKeys<C>, ConfigTargetStates<C>>;
|
|
123
|
+
} & ExtensionFallbackInput<InputShape, "initialContext", {
|
|
124
|
+
initialContext: Context;
|
|
125
|
+
}> & ExtensionFallbackInput<InputShape, "reducer", {
|
|
126
|
+
reducer?: ExtensionReducer<C, Context, ManagerAction<Events>, Extension, ConcreteStorageInput<StorageKind, StorageInput>>;
|
|
127
|
+
}> & ExtensionFallbackInput<InputShape, "effects", {
|
|
128
|
+
effects?: ExtensionEffects<C, Events, ExtensionInvocationDeps<D, Extension, ConcreteStorageInput<StorageKind, StorageInput>>>;
|
|
129
|
+
}> & ExtensionReactionsInput<InputShape, Events, ExtensionReactionDeps<Extension, ConcreteStorageInput<StorageKind, StorageInput>>> & ExactExtensionInput<Cfg, InputShape, StorageInput>;
|
|
130
|
+
type ExtensionRuntimeMetadata<Extension extends StorageMachineTypingExtension, P extends AnyEvent, ConcreteInput extends object> = {
|
|
131
|
+
readonly storage: ExtensionStorageKind<Extension>;
|
|
132
|
+
readonly publicEvents: P;
|
|
133
|
+
} & (HasExtensionResultMetadata<Extension> extends true ? {
|
|
134
|
+
readonly resultMetadata: ExtensionResultMetadata<Extension, ConcreteInput>;
|
|
135
|
+
} : {}) & (HasExtensionEffectDeps<Extension> extends true ? {
|
|
136
|
+
readonly effectDeps: ExtensionEffectDeps<Extension, ConcreteInput>;
|
|
137
|
+
} : {}) & (HasExtensionReactionDeps<Extension> extends true ? {
|
|
138
|
+
readonly reactionDeps: ExtensionReactionDeps<Extension, ConcreteInput>;
|
|
139
|
+
} : {}) & (HasExtensionPublicState<Extension> extends true ? {
|
|
140
|
+
readonly publicState: ExtensionPublicState<Extension, ConcreteInput>;
|
|
141
|
+
} : {});
|
|
142
|
+
type RuntimeResultPhantom<Extension extends StorageMachineTypingExtension, P extends AnyEvent, D extends AnyRecord, ConcreteInput extends object> = {
|
|
143
|
+
readonly __liteFsmRuntime?: ExtensionRuntimeMetadata<Extension, P, ConcreteInput>;
|
|
144
|
+
readonly __liteFsmDependencies?: D;
|
|
145
|
+
};
|
|
146
|
+
type ExtensionCreateMachineResult<C extends object, T extends AnyRecord, P extends AnyEvent, D extends AnyRecord, Snapshot, Persistence, Extension extends StorageMachineTypingExtension, StorageInput extends object = ExtensionInput<Extension>, Context extends AnyRecord = ExtensionContext<T, StorageInput>> = Prettify<Omit<CoreCreateMachineResult<C, Context, P, D, Snapshot, Persistence>, "storage" | keyof ExtensionInput<Extension>> & {
|
|
147
|
+
storage: ExtensionStorageKind<Extension>;
|
|
148
|
+
} & StorageInput & RuntimeResultPhantom<Extension, P, D, ConcreteStorageInput<ExtensionStorageKind<Extension>, StorageInput>>>;
|
|
149
|
+
type InvalidStorageTypingExtensionKeys<Extensions extends StorageMachineTypingExtension> = Extensions extends unknown ? Exclude<keyof Extensions, keyof StorageMachineTypingExtension> : never;
|
|
150
|
+
type MissingStorageTypingExtensionKeys<Extensions extends StorageMachineTypingExtension> = Extensions extends unknown ? [keyof Extensions] extends [never] ? never : "storage" extends keyof Extensions ? never : keyof Extensions : never;
|
|
151
|
+
type ValidStorageTypingExtensions<Extensions extends StorageMachineTypingExtension> = [
|
|
152
|
+
InvalidStorageTypingExtensionKeys<Extensions> | MissingStorageTypingExtensionKeys<Extensions>
|
|
153
|
+
] extends [never] ? Extensions : never;
|
|
154
|
+
type PluginStorageTypingExtensions<Plugins extends PluginSource> = ValidStorageTypingExtensions<StorageTypingExtensionsForPluginSource<Plugins>>;
|
|
155
|
+
type CoreTypedCreateMachineFn<P extends AnyEvent = AnyEvent, D extends AnyRecord = {}> = <C extends CFG<C, P, ConfigKeys<C>, ConfigTargetStates<C>>, T extends AnyRecord, Snapshot = DefaultSnapshotForConfig<C, T>, Persistence extends CapturedPersistence = undefined>(cfg: CoreCreateMachineInput<C, T, P, D, Snapshot, Persistence>) => CoreCreateMachineResult<C, T, P, D, Snapshot, Persistence>;
|
|
156
|
+
interface ExtensionTypedCreateMachineFnHolder<P extends AnyEvent, D extends AnyRecord, Extensions extends StorageMachineTypingExtension> {
|
|
157
|
+
call<Storage extends ExtensionStorageValues<ExtensionWithStorage<Extensions>>, Extension extends ExtensionForStorage<ExtensionWithStorage<Extensions>, Storage> = ExtensionForStorage<ExtensionWithStorage<Extensions>, Storage>, const Cfg extends ExtensionCreateMachineCfg<Storage> = ExtensionCreateMachineCfg<Storage>, InputShape extends object = ExtensionInput<Extension>, StorageInput extends object = ResolvedExtensionInput<Cfg, InputShape>, C extends object = CfgConfig<Cfg>, T extends AnyRecord = ExtensionDefaultContext<Extension>, Context extends AnyRecord = CfgContext<Cfg, T, StorageInput>, Snapshot = DefaultSnapshotForConfig<C, Context>, Persistence extends CapturedPersistence = undefined>(cfg: ExtensionCreateMachineInput<Cfg, C, T, P, D, Snapshot, Persistence, Extension, InputShape, StorageInput, Context, ExtensionEvents<P, Extension>, Storage>): ExtensionCreateMachineResult<C, T, P, D, Snapshot, Persistence, Extension, StorageInput, Context>;
|
|
158
|
+
}
|
|
159
|
+
type ExtensionTypedCreateMachineFn<P extends AnyEvent, D extends AnyRecord, Extensions extends StorageMachineTypingExtension> = ExtensionTypedCreateMachineFnHolder<P, D, Extensions>["call"];
|
|
160
|
+
export type TypedCreateMachineFn<P extends AnyEvent = AnyEvent, D extends AnyRecord = {}, Plugins extends PluginSource = never> = [Plugins] extends [never] ? CoreTypedCreateMachineFn<P, D> : [PluginStorageTypingExtensions<Plugins>] extends [never] ? CoreTypedCreateMachineFn<P, D> : CoreTypedCreateMachineFn<P, D> & ExtensionTypedCreateMachineFn<P, D, PluginStorageTypingExtensions<Plugins>>;
|
|
161
|
+
type DirectCreateMachineFn = <P extends AnyEvent = AnyEvent, D extends AnyRecord = {}, C extends CFG<C, P, ConfigKeys<C>, ConfigTargetStates<C>> = Record<string, never>, T extends AnyRecord = {}, Snapshot = DefaultSnapshotForConfig<C, T>, Persistence extends CapturedPersistence = undefined>(cfg: CoreCreateMachineInput<C, T, P, D, Snapshot, Persistence>) => CoreCreateMachineResult<C, T, P, D, Snapshot, Persistence>;
|
|
162
|
+
type AnyExtensionCreateMachineFn = {
|
|
163
|
+
<P extends AnyEvent = AnyEvent, D extends AnyRecord = {}, Plugins extends PluginSource = never, Extensions extends StorageMachineTypingExtension = PluginStorageTypingExtensions<Plugins>, Storage extends ExtensionStorageValues<ExtensionWithStorage<Extensions>> = ExtensionStorageValues<ExtensionWithStorage<Extensions>>, Extension extends ExtensionForStorage<ExtensionWithStorage<Extensions>, Storage> = ExtensionForStorage<ExtensionWithStorage<Extensions>, Storage>, const Cfg extends ExtensionCreateMachineCfg<Storage> = ExtensionCreateMachineCfg<Storage>, InputShape extends object = ExtensionInput<Extension>, StorageInput extends object = ResolvedExtensionInput<Cfg, InputShape>, C extends object = CfgConfig<Cfg>, T extends AnyRecord = ExtensionDefaultContext<Extension>, Context extends AnyRecord = CfgContext<Cfg, T, StorageInput>, Snapshot = DefaultSnapshotForConfig<C, Context>, Persistence extends CapturedPersistence = undefined>(cfg: ExtensionCreateMachineInput<Cfg, C, T, P, D, Snapshot, Persistence, Extension, InputShape, StorageInput, Context, ExtensionEvents<P, Extension>, Storage>): ExtensionCreateMachineResult<C, T, P, D, Snapshot, Persistence, Extension, StorageInput, Context>;
|
|
164
|
+
};
|
|
165
|
+
export type CreateMachineFn = DirectCreateMachineFn & AnyExtensionCreateMachineFn;
|
|
166
|
+
export {};
|
package/dist/hydration.d.cts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { DehydrateOptions, HydrateStrategy, MachineManagerSnapshot, MachinesState, MachineStore, UnknownMachineKeyContext } from "./types";
|
|
2
2
|
import type { SidecarState } from "./sidecar";
|
|
3
|
-
type SnapshotEnvelope = {
|
|
3
|
+
export type SnapshotEnvelope = {
|
|
4
4
|
schemaVersion?: number;
|
|
5
5
|
machines: Record<string, unknown>;
|
|
6
|
+
storage?: Record<string, unknown>;
|
|
6
7
|
};
|
|
7
8
|
type MachineKey<S extends MachineStore> = Extract<keyof S, string>;
|
|
8
9
|
export type ApplySnapshotMode = "preview" | "commit";
|
package/dist/hydration.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { DehydrateOptions, HydrateStrategy, MachineManagerSnapshot, MachinesState, MachineStore, UnknownMachineKeyContext } from "./types";
|
|
2
2
|
import type { SidecarState } from "./sidecar";
|
|
3
|
-
type SnapshotEnvelope = {
|
|
3
|
+
export type SnapshotEnvelope = {
|
|
4
4
|
schemaVersion?: number;
|
|
5
5
|
machines: Record<string, unknown>;
|
|
6
|
+
storage?: Record<string, unknown>;
|
|
6
7
|
};
|
|
7
8
|
type MachineKey<S extends MachineStore> = Extract<keyof S, string>;
|
|
8
9
|
export type ApplySnapshotMode = "preview" | "commit";
|