@lite-fsm/core 2.0.5 → 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 +0 -6
- package/dist/actor.d.ts +0 -6
- 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 +5 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +1 -1
- package/dist/interfaces.d.cts +40 -19
- package/dist/interfaces.d.ts +40 -19
- 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/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
package/dist/interfaces.d.ts
CHANGED
|
@@ -1,45 +1,66 @@
|
|
|
1
|
-
import { AnyEvent, AnyRecord, DefaultDeps, GenerateSpawnIdFn, MachineConfig, MachineManagerDehydrateFn, MachineManagerRuntimeSnapshot, MachineManagerSnapshot, MachineStore, MachinesState, Reducer, StateName, StateType, TransitionSubscriber, HydrateOptions, HydratePreviewOptions, UnknownMachineKeyContext, Middleware, WILDCARD, ManagerAction } from "./types";
|
|
1
|
+
import { AnyEvent, AnyRecord, CoreActionMeta, DefaultDeps, GenerateSpawnIdFn, MachineConfig, MachineManagerDehydrateFn, MachineManagerRuntimeSnapshot, MachineManagerSnapshot, MachineRuntimeMetadata, MachineStore, MachinesState, Reducer, StateName, StateType, TransitionSubscriber, HydrateOptions, HydratePreviewOptions, UnknownMachineKeyContext, Middleware, WILDCARD, ManagerAction } from "./types";
|
|
2
|
+
import type { LiteFsmPlugin, ManagerActionMeta, ManagerTransitionEvents, PluginManagerExtensions, PluginScopedDeps, ScopedPluginDepsOf } from "./plugin";
|
|
2
3
|
type UnionToIntersection<U> = (U extends unknown ? (value: U) => void : never) extends (value: infer I) => void ? I : never;
|
|
3
|
-
type
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
4
|
+
type Prettify<T> = {
|
|
5
|
+
[K in keyof T]: T[K];
|
|
6
|
+
};
|
|
7
|
+
type MachineRuntimeOwnedDependencyKeys<E> = (MachineRuntimeMetadata<E> extends {
|
|
8
|
+
readonly effectDeps: infer Deps extends object;
|
|
9
|
+
} ? keyof Deps : never) | (MachineRuntimeMetadata<E> extends {
|
|
10
|
+
readonly reactionDeps: infer Deps extends object;
|
|
11
|
+
} ? keyof Deps : never);
|
|
12
|
+
type MachineDeclaredDependencies<E> = E extends {
|
|
13
|
+
readonly __liteFsmDependencies?: infer D extends AnyRecord;
|
|
14
|
+
} ? D : never;
|
|
15
|
+
type ConfigDependencies<E> = MachineDeclaredDependencies<E> extends never ? E extends MachineConfig<infer C, infer T, infer P, infer D, infer Snapshot> ? [C, T, P, D, Snapshot] extends [object, AnyRecord, AnyEvent, AnyRecord, unknown] ? D : never : Omit<E, "storage"> extends MachineConfig<infer C, infer T, infer P, infer D, infer Snapshot> ? [C, T, P, D, Snapshot] extends [object, AnyRecord, AnyEvent, AnyRecord, unknown] ? D : never : never : MachineDeclaredDependencies<E>;
|
|
16
|
+
type StripScopedDependencies<D, Plugins extends readonly LiteFsmPlugin<any, any, any>[], E> = Prettify<Omit<D, keyof DefaultDeps | "self" | keyof ScopedPluginDepsOf<D> | keyof PluginScopedDeps<Plugins> | MachineRuntimeOwnedDependencyKeys<E>>>;
|
|
17
|
+
type EffectFunctionDependencies<F, Plugins extends readonly LiteFsmPlugin<any, any, any>[], E> = NonNullable<F> extends (deps: infer D) => unknown ? StripScopedDependencies<D, Plugins, E> : {};
|
|
18
|
+
type EffectDependencies<E, Plugins extends readonly LiteFsmPlugin<any, any, any>[]> = "effects" extends keyof E ? keyof NonNullable<E["effects"]> extends never ? {} : [ConfigDependencies<E>] extends [never] ? UnionToIntersection<{
|
|
19
|
+
[key in keyof NonNullable<E["effects"]>]: EffectFunctionDependencies<NonNullable<E["effects"]>[key], Plugins, E>;
|
|
20
|
+
}[keyof NonNullable<E["effects"]>]> : StripScopedDependencies<ConfigDependencies<E>, Plugins, E> : {};
|
|
21
|
+
export type MachineDependencies<S extends MachineStore, Plugins extends readonly LiteFsmPlugin<any, any, any>[] = readonly []> = keyof S extends never ? {} : Prettify<Omit<UnionToIntersection<{
|
|
22
|
+
[key in keyof S]: EffectDependencies<S[key], Plugins>;
|
|
23
|
+
}[keyof S]>, keyof PluginScopedDeps<Plugins>>>;
|
|
11
24
|
type EventFromReducer<M> = M extends {
|
|
12
25
|
reducer: MachineConfig<infer C, infer T, infer P, infer D>["reducer"];
|
|
13
26
|
} ? [C, T, D] extends [object, AnyRecord, AnyRecord] ? P : never : never;
|
|
14
27
|
type EventFromMachineConfig<M> = M extends MachineConfig<infer C, infer T, infer P, infer D> ? [C, T, D] extends [object, AnyRecord, AnyRecord] ? P : never : never;
|
|
28
|
+
type EventFromRuntimeMetadata<M> = MachineRuntimeMetadata<M> extends {
|
|
29
|
+
readonly publicEvents: infer P extends AnyEvent;
|
|
30
|
+
} ? P : never;
|
|
15
31
|
export type MachineEvents<S extends MachineStore> = {
|
|
16
|
-
[key in keyof S]: EventFromReducer<S[key]> extends never ? EventFromMachineConfig<S[key]> extends never ? AnyEvent : EventFromMachineConfig<S[key]> : EventFromReducer<S[key]>;
|
|
32
|
+
[key in keyof S]: EventFromRuntimeMetadata<S[key]> extends never ? EventFromReducer<S[key]> extends never ? EventFromMachineConfig<S[key]> extends never ? AnyEvent : EventFromMachineConfig<S[key]> : EventFromReducer<S[key]> : EventFromRuntimeMetadata<S[key]>;
|
|
17
33
|
}[keyof S];
|
|
18
|
-
export type MachineManagerOptions<S extends MachineStore, P extends AnyEvent = MachineEvents<S
|
|
34
|
+
export type MachineManagerOptions<S extends MachineStore, P extends AnyEvent = MachineEvents<S>, Plugins extends readonly LiteFsmPlugin<any, any, any>[] = readonly []> = {
|
|
19
35
|
onError?: (err: unknown) => void;
|
|
20
|
-
middleware?: Middleware<MachinesState<S>, P
|
|
36
|
+
middleware?: Middleware<MachinesState<S>, ManagerTransitionEvents<P, Plugins>, ManagerActionMeta<Plugins>>[];
|
|
21
37
|
snapshot?: MachineManagerSnapshot<S>;
|
|
22
38
|
schemaVersion?: number;
|
|
23
39
|
onUnknownMachineKey?: (key: string, context: UnknownMachineKeyContext) => void;
|
|
24
40
|
onSchemaVersionMismatch?: (incoming: number | undefined, current: number | undefined) => void;
|
|
25
41
|
originId?: string;
|
|
26
|
-
generateActorId?: GenerateSpawnIdFn<P
|
|
27
|
-
generateGroupId?: GenerateSpawnIdFn<P
|
|
42
|
+
generateActorId?: GenerateSpawnIdFn<ManagerTransitionEvents<P, Plugins>>;
|
|
43
|
+
generateGroupId?: GenerateSpawnIdFn<ManagerTransitionEvents<P, Plugins>>;
|
|
44
|
+
plugins?: Plugins;
|
|
28
45
|
};
|
|
29
46
|
export type IMachine<C extends object, T extends AnyRecord = {}, P extends AnyEvent = AnyEvent, D extends AnyRecord = {}> = {
|
|
30
47
|
transition: (state: StateType<C, T>, action: P) => StateType<C, T>;
|
|
31
48
|
invokeEffect: (prevState: StateName<C>, currentState: StateName<C>, deps: D & DefaultDeps<StateName<C> | WILDCARD, C, P>) => Promise<void>;
|
|
32
49
|
config: C;
|
|
33
50
|
};
|
|
34
|
-
export type IMachineManager<S extends MachineStore, P extends AnyEvent = MachineEvents<S
|
|
35
|
-
transition: (payload: ManagerAction<P>) => ManagerAction<P>;
|
|
51
|
+
export type IMachineManager<S extends MachineStore, P extends AnyEvent = MachineEvents<S>, Meta extends object = CoreActionMeta, Plugins extends readonly LiteFsmPlugin<any, any, any>[] = readonly []> = {
|
|
52
|
+
transition: (payload: ManagerAction<P, Meta>) => ManagerAction<P, Meta>;
|
|
36
53
|
getState: () => MachinesState<S>;
|
|
37
54
|
getSnapshot: () => MachineManagerRuntimeSnapshot<S>;
|
|
38
55
|
getHydratedState: (snapshot: MachineManagerSnapshot<S>, opts?: HydratePreviewOptions<S>) => MachinesState<S>;
|
|
39
56
|
hydrate: (snapshot: MachineManagerSnapshot<S>, opts?: HydrateOptions) => void;
|
|
40
57
|
dehydrate: MachineManagerDehydrateFn<S>;
|
|
41
|
-
onTransition: (cb: TransitionSubscriber<S, P>) => () => void;
|
|
42
|
-
replaceReducer: (cb: (reducer: Reducer<MachinesState<S>, ManagerAction<P>>) => Reducer<MachinesState<S>, ManagerAction<P>>) => void;
|
|
43
|
-
setDependencies:
|
|
58
|
+
onTransition: (cb: TransitionSubscriber<S, P, Meta>) => () => void;
|
|
59
|
+
replaceReducer: (cb: (reducer: Reducer<MachinesState<S>, ManagerAction<P, Meta>>) => Reducer<MachinesState<S>, ManagerAction<P, Meta>>) => void;
|
|
60
|
+
setDependencies: {
|
|
61
|
+
(deps: MachineDependencies<S, Plugins>): void;
|
|
62
|
+
(updater: (deps: MachineDependencies<S, Plugins>) => MachineDependencies<S, Plugins>): void;
|
|
63
|
+
};
|
|
44
64
|
};
|
|
65
|
+
export type ManagerFromPlugins<S extends MachineStore, AppEvents extends AnyEvent, Plugins extends readonly LiteFsmPlugin<any, any, any>[]> = IMachineManager<S, ManagerTransitionEvents<AppEvents, Plugins>, ManagerActionMeta<Plugins>, Plugins> & PluginManagerExtensions<Plugins, S, ManagerTransitionEvents<AppEvents, Plugins>>;
|
|
45
66
|
export {};
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { type NormalizeOptions } from "./actor";
|
|
2
2
|
import type { DispatchContext } from "./dispatchContext";
|
|
3
|
+
import type { RoutingRuntime } from "./runtime/kernel/routing";
|
|
3
4
|
import type { SidecarState } from "./sidecar";
|
|
4
5
|
import type { AnyEvent, ManagerAction, MachineStore } from "./types";
|
|
5
|
-
export
|
|
6
|
+
export type NormalizeActionResult<P extends AnyEvent> = {
|
|
7
|
+
readonly type: "continue";
|
|
8
|
+
readonly action: ManagerAction<P>;
|
|
9
|
+
} | {
|
|
10
|
+
readonly type: "drop";
|
|
11
|
+
};
|
|
6
12
|
export type Normalizer<S extends MachineStore, P extends AnyEvent> = {
|
|
7
|
-
normalizeAction: (raw: ManagerAction<P>, opts?: NormalizeOptions) =>
|
|
13
|
+
normalizeAction: (raw: ManagerAction<P>, opts?: NormalizeOptions) => NormalizeActionResult<P>;
|
|
8
14
|
applyPostNormalize: (ctx: DispatchContext<S, P>, action: ManagerAction<P>) => void;
|
|
9
15
|
};
|
|
10
16
|
export declare const assertUserAction: (action: {
|
|
@@ -12,4 +18,5 @@ export declare const assertUserAction: (action: {
|
|
|
12
18
|
}) => void;
|
|
13
19
|
export declare const createNormalizer: <S extends MachineStore, P extends AnyEvent>(deps: {
|
|
14
20
|
sidecar: SidecarState;
|
|
21
|
+
routing: RoutingRuntime;
|
|
15
22
|
}) => Normalizer<S, P>;
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { type NormalizeOptions } from "./actor";
|
|
2
2
|
import type { DispatchContext } from "./dispatchContext";
|
|
3
|
+
import type { RoutingRuntime } from "./runtime/kernel/routing";
|
|
3
4
|
import type { SidecarState } from "./sidecar";
|
|
4
5
|
import type { AnyEvent, ManagerAction, MachineStore } from "./types";
|
|
5
|
-
export
|
|
6
|
+
export type NormalizeActionResult<P extends AnyEvent> = {
|
|
7
|
+
readonly type: "continue";
|
|
8
|
+
readonly action: ManagerAction<P>;
|
|
9
|
+
} | {
|
|
10
|
+
readonly type: "drop";
|
|
11
|
+
};
|
|
6
12
|
export type Normalizer<S extends MachineStore, P extends AnyEvent> = {
|
|
7
|
-
normalizeAction: (raw: ManagerAction<P>, opts?: NormalizeOptions) =>
|
|
13
|
+
normalizeAction: (raw: ManagerAction<P>, opts?: NormalizeOptions) => NormalizeActionResult<P>;
|
|
8
14
|
applyPostNormalize: (ctx: DispatchContext<S, P>, action: ManagerAction<P>) => void;
|
|
9
15
|
};
|
|
10
16
|
export declare const assertUserAction: (action: {
|
|
@@ -12,4 +18,5 @@ export declare const assertUserAction: (action: {
|
|
|
12
18
|
}) => void;
|
|
13
19
|
export declare const createNormalizer: <S extends MachineStore, P extends AnyEvent>(deps: {
|
|
14
20
|
sidecar: SidecarState;
|
|
21
|
+
routing: RoutingRuntime;
|
|
15
22
|
}) => Normalizer<S, P>;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { DispatchContext, DispatchHookPhase, ManagerExtensionFactory, NormalizedPlugin, RouteResolverContext, RouteResolverResult, ScopedInvocationContext } from "./pluginTypes";
|
|
2
|
+
import type { LiteFsmStorageRuntimeDefinition } from "./pluginStorage";
|
|
3
|
+
import type { AnyEvent, ManagerAction, ReadonlyManagerAction } from "./types";
|
|
4
|
+
export type { ActionInterceptor, ActionInterceptorResult, DispatchContext, DispatchHook, DispatchHookPhase, ManagerExtensionFactory, ManagerExtensionType, ManagerExtensionTypeLambda, ManagerRuntimeContext, NormalizedDispatchHook, NormalizedManagerEntry, NormalizedPlugin, NormalizedRouteMetaEntry, NormalizedScopedDepsEntry, NormalizedScopedTransitionEntry, NormalizedStorageEntry, RouteResolver, RouteResolverContext, RouteResolverResult, RoutingRegistry, ScopedInvocationContext, ScopedInvocationIndices, ScopedInvocationPhase, ScopedInvocationSource, } from "./pluginTypes";
|
|
5
|
+
export type { EffectDeps, ManagerActionMeta, ManagerTransitionEvents, PluginManagerEvents, PluginManagerExtensions, PluginRouteMeta, PluginScopedDeps, PluginScopedTransition, ScopedPluginDepsOf, } from "./pluginHelpers";
|
|
6
|
+
declare const liteFsmPluginMarker: unique symbol;
|
|
7
|
+
declare const liteFsmPluginPayload: unique symbol;
|
|
8
|
+
declare const liteFsmPluginEvents: unique symbol;
|
|
9
|
+
declare const liteFsmPluginDefinition: unique symbol;
|
|
10
|
+
export type LiteFsmPlugin<Name extends string = string, PluginEvents extends AnyEvent = never, Definition extends object = object> = {
|
|
11
|
+
readonly name: Name;
|
|
12
|
+
readonly [liteFsmPluginMarker]: true;
|
|
13
|
+
readonly [liteFsmPluginPayload]: NormalizedPlugin;
|
|
14
|
+
readonly [liteFsmPluginEvents]: PluginEvents;
|
|
15
|
+
readonly [liteFsmPluginDefinition]: Definition;
|
|
16
|
+
};
|
|
17
|
+
type PluginObservedEvents<PluginEvents extends AnyEvent, HostEvents extends AnyEvent> = [AnyEvent] extends [HostEvents] ? AnyEvent : HostEvents | PluginEvents;
|
|
18
|
+
type PluginDispatchContext<Events extends AnyEvent> = Omit<DispatchContext, "action" | "originalAction"> & {
|
|
19
|
+
readonly originalAction: ReadonlyManagerAction<Events>;
|
|
20
|
+
readonly action: ReadonlyManagerAction<Events>;
|
|
21
|
+
};
|
|
22
|
+
type PluginActionInterceptorResult<Events extends AnyEvent> = void | {
|
|
23
|
+
readonly action?: ManagerAction<Events>;
|
|
24
|
+
readonly skipDelivery?: boolean;
|
|
25
|
+
readonly stopInterceptors?: boolean;
|
|
26
|
+
};
|
|
27
|
+
type PluginActionInterceptor<Events extends AnyEvent> = (ctx: PluginDispatchContext<Events>) => PluginActionInterceptorResult<Events>;
|
|
28
|
+
type PluginDispatchHook<Events extends AnyEvent> = (ctx: PluginDispatchContext<Events>) => void;
|
|
29
|
+
type PluginRouteResolverContext<Key extends string, Events extends AnyEvent> = Omit<RouteResolverContext<Key>, "action"> & {
|
|
30
|
+
readonly action: ReadonlyManagerAction<Events>;
|
|
31
|
+
};
|
|
32
|
+
type PluginRouteResolver<Key extends string, Events extends AnyEvent, Value = unknown> = {
|
|
33
|
+
bivarianceHack(value: Value, ctx: PluginRouteResolverContext<Key, Events>): RouteResolverResult;
|
|
34
|
+
}["bivarianceHack"];
|
|
35
|
+
export type PluginScopedInvocationContext<Events extends AnyEvent, TransitionEvents extends AnyEvent> = Omit<ScopedInvocationContext, "event" | "transition"> & {
|
|
36
|
+
readonly event: ReadonlyManagerAction<Events>;
|
|
37
|
+
readonly transition: (action: ManagerAction<TransitionEvents>) => ManagerAction<TransitionEvents>;
|
|
38
|
+
};
|
|
39
|
+
type PluginScopedFactory<Events extends AnyEvent, TransitionEvents extends AnyEvent> = (ctx: PluginScopedInvocationContext<Events, TransitionEvents>) => unknown;
|
|
40
|
+
type PluginRouteMetaContext<RouteMetaValues extends object, Events extends AnyEvent> = {
|
|
41
|
+
readonly [Key in keyof RouteMetaValues]: Key extends string ? PluginRouteResolver<Key, Events, RouteMetaValues[Key]> : never;
|
|
42
|
+
};
|
|
43
|
+
type IsAny<Value> = 0 extends 1 & Value ? true : false;
|
|
44
|
+
type UnknownIfUnannotated<Value> = IsAny<Value> extends true ? unknown : [Value] extends [never] ? unknown : Value;
|
|
45
|
+
type RouteMetaValue<Resolver> = Resolver extends (value: infer Value, ...args: any[]) => unknown ? UnknownIfUnannotated<Value> : unknown;
|
|
46
|
+
type UnionToIntersection<Union> = (Union extends unknown ? (value: Union) => void : never) extends (value: infer Intersection) => void ? Intersection : never;
|
|
47
|
+
type StorageRouteMetaRequirements<Definition> = Definition extends {
|
|
48
|
+
readonly storage?: infer Storage extends readonly unknown[];
|
|
49
|
+
} ? UnionToIntersection<Storage[number] extends LiteFsmStorageRuntimeDefinition<any, any, infer RouteMetaRequirements> ? RouteMetaRequirements : never> : {};
|
|
50
|
+
type RequiredRouteMetaSection<RouteMetaResolvers extends object, RouteMetaRequirements extends object> = keyof RouteMetaRequirements extends never ? {} : {
|
|
51
|
+
readonly routeMeta: {
|
|
52
|
+
readonly [Key in keyof RouteMetaRequirements & string]: Key extends keyof RouteMetaResolvers ? RouteMetaValue<RouteMetaResolvers[Key]> extends RouteMetaRequirements[Key] ? unknown : never : never;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
type PluginRouteMetaSection<RouteMetaValues extends object, RouteMetaResolvers extends object, Events extends AnyEvent> = {
|
|
56
|
+
readonly routeMeta?: RouteMetaResolvers & PluginRouteMetaContext<RouteMetaValues, Events>;
|
|
57
|
+
};
|
|
58
|
+
type PluginDefinitionBase<PluginEvents extends AnyEvent, HostEvents extends AnyEvent, Name extends string = string, Events extends AnyEvent = PluginObservedEvents<PluginEvents, HostEvents>> = {
|
|
59
|
+
readonly name: Name;
|
|
60
|
+
readonly manager?: Record<string, ManagerExtensionFactory<PluginEvents>>;
|
|
61
|
+
readonly storage?: readonly [LiteFsmStorageRuntimeDefinition, ...LiteFsmStorageRuntimeDefinition[]];
|
|
62
|
+
readonly scopedDeps?: Record<string, PluginScopedFactory<Events, PluginEvents>>;
|
|
63
|
+
readonly scopedTransition?: Record<string, PluginScopedFactory<Events, PluginEvents>>;
|
|
64
|
+
readonly intercept?: PluginActionInterceptor<Events>;
|
|
65
|
+
readonly hooks?: Partial<Record<DispatchHookPhase, PluginDispatchHook<Events>>>;
|
|
66
|
+
};
|
|
67
|
+
type PluginDefinitionKey = "name" | "routeMeta" | "manager" | "storage" | "scopedDeps" | "scopedTransition" | "intercept" | "hooks";
|
|
68
|
+
type RejectUnknownKeys<Definition extends object> = {
|
|
69
|
+
readonly [Key in Exclude<keyof Definition, PluginDefinitionKey>]: never;
|
|
70
|
+
};
|
|
71
|
+
type PluginDefinitionOutput<Definition extends object, RouteMetaResolvers extends object> = Omit<Definition, "routeMeta"> & {
|
|
72
|
+
readonly routeMeta?: RouteMetaResolvers;
|
|
73
|
+
};
|
|
74
|
+
type PluginDefinitionInput<PluginEvents extends AnyEvent, HostEvents extends AnyEvent, RouteMetaValues extends object, RouteMetaResolvers extends object, Definition extends PluginDefinitionBase<PluginEvents, HostEvents>> = Definition & PluginRouteMetaSection<RouteMetaValues, RouteMetaResolvers, PluginObservedEvents<PluginEvents, HostEvents>> & RequiredRouteMetaSection<RouteMetaResolvers, StorageRouteMetaRequirements<Definition>> & RejectUnknownKeys<Definition & PluginRouteMetaSection<RouteMetaValues, RouteMetaResolvers, PluginObservedEvents<PluginEvents, HostEvents>>>;
|
|
75
|
+
type PluginCreate<PluginEvents extends AnyEvent, HostEvents extends AnyEvent> = <const RouteMetaValues extends object = {}, const RouteMetaResolvers extends object = {}, const Definition extends PluginDefinitionBase<PluginEvents, HostEvents> = PluginDefinitionBase<PluginEvents, HostEvents>>(definition: PluginDefinitionInput<PluginEvents, HostEvents, RouteMetaValues, RouteMetaResolvers, Definition>) => LiteFsmPlugin<Definition["name"], PluginEvents, PluginDefinitionOutput<Definition, RouteMetaResolvers>>;
|
|
76
|
+
export type PluginBuilder<PluginEvents extends AnyEvent, HostEvents extends AnyEvent> = {
|
|
77
|
+
create: PluginCreate<PluginEvents, HostEvents>;
|
|
78
|
+
};
|
|
79
|
+
export declare function definePlugin<PluginEvents extends AnyEvent = never, HostEvents extends AnyEvent = AnyEvent>(): PluginBuilder<PluginEvents, HostEvents>;
|
|
80
|
+
export declare const isLiteFsmPluginValue: (value: unknown) => value is LiteFsmPlugin;
|
|
81
|
+
export declare const getNormalizedPlugin: (plugin: LiteFsmPlugin) => NormalizedPlugin;
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { DispatchContext, DispatchHookPhase, ManagerExtensionFactory, NormalizedPlugin, RouteResolverContext, RouteResolverResult, ScopedInvocationContext } from "./pluginTypes";
|
|
2
|
+
import type { LiteFsmStorageRuntimeDefinition } from "./pluginStorage";
|
|
3
|
+
import type { AnyEvent, ManagerAction, ReadonlyManagerAction } from "./types";
|
|
4
|
+
export type { ActionInterceptor, ActionInterceptorResult, DispatchContext, DispatchHook, DispatchHookPhase, ManagerExtensionFactory, ManagerExtensionType, ManagerExtensionTypeLambda, ManagerRuntimeContext, NormalizedDispatchHook, NormalizedManagerEntry, NormalizedPlugin, NormalizedRouteMetaEntry, NormalizedScopedDepsEntry, NormalizedScopedTransitionEntry, NormalizedStorageEntry, RouteResolver, RouteResolverContext, RouteResolverResult, RoutingRegistry, ScopedInvocationContext, ScopedInvocationIndices, ScopedInvocationPhase, ScopedInvocationSource, } from "./pluginTypes";
|
|
5
|
+
export type { EffectDeps, ManagerActionMeta, ManagerTransitionEvents, PluginManagerEvents, PluginManagerExtensions, PluginRouteMeta, PluginScopedDeps, PluginScopedTransition, ScopedPluginDepsOf, } from "./pluginHelpers";
|
|
6
|
+
declare const liteFsmPluginMarker: unique symbol;
|
|
7
|
+
declare const liteFsmPluginPayload: unique symbol;
|
|
8
|
+
declare const liteFsmPluginEvents: unique symbol;
|
|
9
|
+
declare const liteFsmPluginDefinition: unique symbol;
|
|
10
|
+
export type LiteFsmPlugin<Name extends string = string, PluginEvents extends AnyEvent = never, Definition extends object = object> = {
|
|
11
|
+
readonly name: Name;
|
|
12
|
+
readonly [liteFsmPluginMarker]: true;
|
|
13
|
+
readonly [liteFsmPluginPayload]: NormalizedPlugin;
|
|
14
|
+
readonly [liteFsmPluginEvents]: PluginEvents;
|
|
15
|
+
readonly [liteFsmPluginDefinition]: Definition;
|
|
16
|
+
};
|
|
17
|
+
type PluginObservedEvents<PluginEvents extends AnyEvent, HostEvents extends AnyEvent> = [AnyEvent] extends [HostEvents] ? AnyEvent : HostEvents | PluginEvents;
|
|
18
|
+
type PluginDispatchContext<Events extends AnyEvent> = Omit<DispatchContext, "action" | "originalAction"> & {
|
|
19
|
+
readonly originalAction: ReadonlyManagerAction<Events>;
|
|
20
|
+
readonly action: ReadonlyManagerAction<Events>;
|
|
21
|
+
};
|
|
22
|
+
type PluginActionInterceptorResult<Events extends AnyEvent> = void | {
|
|
23
|
+
readonly action?: ManagerAction<Events>;
|
|
24
|
+
readonly skipDelivery?: boolean;
|
|
25
|
+
readonly stopInterceptors?: boolean;
|
|
26
|
+
};
|
|
27
|
+
type PluginActionInterceptor<Events extends AnyEvent> = (ctx: PluginDispatchContext<Events>) => PluginActionInterceptorResult<Events>;
|
|
28
|
+
type PluginDispatchHook<Events extends AnyEvent> = (ctx: PluginDispatchContext<Events>) => void;
|
|
29
|
+
type PluginRouteResolverContext<Key extends string, Events extends AnyEvent> = Omit<RouteResolverContext<Key>, "action"> & {
|
|
30
|
+
readonly action: ReadonlyManagerAction<Events>;
|
|
31
|
+
};
|
|
32
|
+
type PluginRouteResolver<Key extends string, Events extends AnyEvent, Value = unknown> = {
|
|
33
|
+
bivarianceHack(value: Value, ctx: PluginRouteResolverContext<Key, Events>): RouteResolverResult;
|
|
34
|
+
}["bivarianceHack"];
|
|
35
|
+
export type PluginScopedInvocationContext<Events extends AnyEvent, TransitionEvents extends AnyEvent> = Omit<ScopedInvocationContext, "event" | "transition"> & {
|
|
36
|
+
readonly event: ReadonlyManagerAction<Events>;
|
|
37
|
+
readonly transition: (action: ManagerAction<TransitionEvents>) => ManagerAction<TransitionEvents>;
|
|
38
|
+
};
|
|
39
|
+
type PluginScopedFactory<Events extends AnyEvent, TransitionEvents extends AnyEvent> = (ctx: PluginScopedInvocationContext<Events, TransitionEvents>) => unknown;
|
|
40
|
+
type PluginRouteMetaContext<RouteMetaValues extends object, Events extends AnyEvent> = {
|
|
41
|
+
readonly [Key in keyof RouteMetaValues]: Key extends string ? PluginRouteResolver<Key, Events, RouteMetaValues[Key]> : never;
|
|
42
|
+
};
|
|
43
|
+
type IsAny<Value> = 0 extends 1 & Value ? true : false;
|
|
44
|
+
type UnknownIfUnannotated<Value> = IsAny<Value> extends true ? unknown : [Value] extends [never] ? unknown : Value;
|
|
45
|
+
type RouteMetaValue<Resolver> = Resolver extends (value: infer Value, ...args: any[]) => unknown ? UnknownIfUnannotated<Value> : unknown;
|
|
46
|
+
type UnionToIntersection<Union> = (Union extends unknown ? (value: Union) => void : never) extends (value: infer Intersection) => void ? Intersection : never;
|
|
47
|
+
type StorageRouteMetaRequirements<Definition> = Definition extends {
|
|
48
|
+
readonly storage?: infer Storage extends readonly unknown[];
|
|
49
|
+
} ? UnionToIntersection<Storage[number] extends LiteFsmStorageRuntimeDefinition<any, any, infer RouteMetaRequirements> ? RouteMetaRequirements : never> : {};
|
|
50
|
+
type RequiredRouteMetaSection<RouteMetaResolvers extends object, RouteMetaRequirements extends object> = keyof RouteMetaRequirements extends never ? {} : {
|
|
51
|
+
readonly routeMeta: {
|
|
52
|
+
readonly [Key in keyof RouteMetaRequirements & string]: Key extends keyof RouteMetaResolvers ? RouteMetaValue<RouteMetaResolvers[Key]> extends RouteMetaRequirements[Key] ? unknown : never : never;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
type PluginRouteMetaSection<RouteMetaValues extends object, RouteMetaResolvers extends object, Events extends AnyEvent> = {
|
|
56
|
+
readonly routeMeta?: RouteMetaResolvers & PluginRouteMetaContext<RouteMetaValues, Events>;
|
|
57
|
+
};
|
|
58
|
+
type PluginDefinitionBase<PluginEvents extends AnyEvent, HostEvents extends AnyEvent, Name extends string = string, Events extends AnyEvent = PluginObservedEvents<PluginEvents, HostEvents>> = {
|
|
59
|
+
readonly name: Name;
|
|
60
|
+
readonly manager?: Record<string, ManagerExtensionFactory<PluginEvents>>;
|
|
61
|
+
readonly storage?: readonly [LiteFsmStorageRuntimeDefinition, ...LiteFsmStorageRuntimeDefinition[]];
|
|
62
|
+
readonly scopedDeps?: Record<string, PluginScopedFactory<Events, PluginEvents>>;
|
|
63
|
+
readonly scopedTransition?: Record<string, PluginScopedFactory<Events, PluginEvents>>;
|
|
64
|
+
readonly intercept?: PluginActionInterceptor<Events>;
|
|
65
|
+
readonly hooks?: Partial<Record<DispatchHookPhase, PluginDispatchHook<Events>>>;
|
|
66
|
+
};
|
|
67
|
+
type PluginDefinitionKey = "name" | "routeMeta" | "manager" | "storage" | "scopedDeps" | "scopedTransition" | "intercept" | "hooks";
|
|
68
|
+
type RejectUnknownKeys<Definition extends object> = {
|
|
69
|
+
readonly [Key in Exclude<keyof Definition, PluginDefinitionKey>]: never;
|
|
70
|
+
};
|
|
71
|
+
type PluginDefinitionOutput<Definition extends object, RouteMetaResolvers extends object> = Omit<Definition, "routeMeta"> & {
|
|
72
|
+
readonly routeMeta?: RouteMetaResolvers;
|
|
73
|
+
};
|
|
74
|
+
type PluginDefinitionInput<PluginEvents extends AnyEvent, HostEvents extends AnyEvent, RouteMetaValues extends object, RouteMetaResolvers extends object, Definition extends PluginDefinitionBase<PluginEvents, HostEvents>> = Definition & PluginRouteMetaSection<RouteMetaValues, RouteMetaResolvers, PluginObservedEvents<PluginEvents, HostEvents>> & RequiredRouteMetaSection<RouteMetaResolvers, StorageRouteMetaRequirements<Definition>> & RejectUnknownKeys<Definition & PluginRouteMetaSection<RouteMetaValues, RouteMetaResolvers, PluginObservedEvents<PluginEvents, HostEvents>>>;
|
|
75
|
+
type PluginCreate<PluginEvents extends AnyEvent, HostEvents extends AnyEvent> = <const RouteMetaValues extends object = {}, const RouteMetaResolvers extends object = {}, const Definition extends PluginDefinitionBase<PluginEvents, HostEvents> = PluginDefinitionBase<PluginEvents, HostEvents>>(definition: PluginDefinitionInput<PluginEvents, HostEvents, RouteMetaValues, RouteMetaResolvers, Definition>) => LiteFsmPlugin<Definition["name"], PluginEvents, PluginDefinitionOutput<Definition, RouteMetaResolvers>>;
|
|
76
|
+
export type PluginBuilder<PluginEvents extends AnyEvent, HostEvents extends AnyEvent> = {
|
|
77
|
+
create: PluginCreate<PluginEvents, HostEvents>;
|
|
78
|
+
};
|
|
79
|
+
export declare function definePlugin<PluginEvents extends AnyEvent = never, HostEvents extends AnyEvent = AnyEvent>(): PluginBuilder<PluginEvents, HostEvents>;
|
|
80
|
+
export declare const isLiteFsmPluginValue: (value: unknown) => value is LiteFsmPlugin;
|
|
81
|
+
export declare const getNormalizedPlugin: (plugin: LiteFsmPlugin) => NormalizedPlugin;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { LiteFsmStorageRuntimeDefinition } from "./pluginStorage";
|
|
2
|
+
import type { LiteFsmPlugin } from "./plugin";
|
|
3
|
+
import type { AnyEvent, CoreActionMeta, MachinesState, MachineStore } from "./types";
|
|
4
|
+
import type { ManagerExtensionType, ManagerExtensionTypeLambda, managerExtensionTypeMarker, ManagerRuntimeContext } from "./pluginTypes";
|
|
5
|
+
import type { StorageMachineTypingExtension } from "./pluginStorageTypes";
|
|
6
|
+
type UnionToIntersection<Union> = (Union extends unknown ? (value: Union) => void : never) extends (value: infer Intersection) => void ? Intersection : never;
|
|
7
|
+
type Prettify<Value> = {
|
|
8
|
+
[Key in keyof Value]: Value[Key];
|
|
9
|
+
};
|
|
10
|
+
type IsAny<Value> = 0 extends 1 & Value ? true : false;
|
|
11
|
+
type UnknownIfUnannotated<Value> = IsAny<Value> extends true ? unknown : [Value] extends [never] ? unknown : Value;
|
|
12
|
+
type FactoryReturn<Factory> = Factory extends (...args: any[]) => infer Result ? Result : never;
|
|
13
|
+
type RouteMetaValue<Resolver> = Resolver extends (value: infer Value, ...args: any[]) => unknown ? UnknownIfUnannotated<Value> : unknown;
|
|
14
|
+
type IsExactly<Value, Expected> = [Value] extends [Expected] ? [Expected] extends [Value] ? true : false : false;
|
|
15
|
+
type IsStoreReference<Value> = IsExactly<Value, MachineStore> extends true ? true : IsExactly<Value, MachinesState<MachineStore>> extends true ? true : false;
|
|
16
|
+
type HasStoreReferences<Value> = IsAny<Value> extends true ? false : [Value] extends [never] ? false : IsStoreReference<Value> extends true ? true : Value extends (...args: any[]) => infer Result ? HasStoreReferences<Result> : Value extends object ? keyof Value extends never ? false : true extends {
|
|
17
|
+
[Key in keyof Value]: HasStoreReferences<Value[Key]>;
|
|
18
|
+
}[keyof Value] ? true : false : false;
|
|
19
|
+
type SpecializeStoreReferences<Value, S extends MachineStore> = IsExactly<Value, MachineStore> extends true ? S : IsExactly<Value, MachinesState<MachineStore>> extends true ? MachinesState<S> : Value extends (...args: infer Args) => infer Result ? HasStoreReferences<Result> extends true ? (...args: Args) => SpecializeStoreReferences<Result, S> : Value : Value extends object ? HasStoreReferences<Value> extends true ? {
|
|
20
|
+
[Key in keyof Value]: SpecializeStoreReferences<Value[Key], S>;
|
|
21
|
+
} : Value : Value;
|
|
22
|
+
type PluginMember<Plugin> = Plugin extends readonly unknown[] ? Plugin[number] : Plugin;
|
|
23
|
+
type PluginDefinitionOf<Plugin> = Plugin extends LiteFsmPlugin<any, any, infer Definition> ? Definition : never;
|
|
24
|
+
type IntersectCapabilities<Capability> = [Capability] extends [never] ? {} : Prettify<UnionToIntersection<Capability>>;
|
|
25
|
+
type RouteMetaForPlugin<Plugin> = PluginDefinitionOf<Plugin> extends {
|
|
26
|
+
readonly routeMeta?: infer RouteMeta extends object;
|
|
27
|
+
} ? {
|
|
28
|
+
[Key in keyof RouteMeta]: RouteMetaValue<RouteMeta[Key]>;
|
|
29
|
+
} : {};
|
|
30
|
+
type ScopedDepsForPlugin<Plugin> = PluginDefinitionOf<Plugin> extends {
|
|
31
|
+
readonly scopedDeps?: infer ScopedDeps extends object;
|
|
32
|
+
} ? {
|
|
33
|
+
[Key in keyof ScopedDeps]: FactoryReturn<ScopedDeps[Key]>;
|
|
34
|
+
} : {};
|
|
35
|
+
type ScopedTransitionForPlugin<Plugin> = PluginDefinitionOf<Plugin> extends {
|
|
36
|
+
readonly scopedTransition?: infer ScopedTransition extends object;
|
|
37
|
+
} ? {
|
|
38
|
+
[Key in keyof ScopedTransition]: FactoryReturn<ScopedTransition[Key]>;
|
|
39
|
+
} : {};
|
|
40
|
+
type ApplyManagerExtensionType<Lambda extends ManagerExtensionTypeLambda, S extends MachineStore, Events extends AnyEvent> = (Lambda & {
|
|
41
|
+
readonly context: ManagerRuntimeContext<Events, S>;
|
|
42
|
+
})["type"];
|
|
43
|
+
type ManagerFactoryReturn<Factory, S extends MachineStore, Events extends AnyEvent> = typeof managerExtensionTypeMarker extends keyof Factory ? Factory extends ManagerExtensionType<infer Lambda> ? ApplyManagerExtensionType<Lambda, S, Events> : never : SpecializeStoreReferences<Factory extends (ctx: ManagerRuntimeContext<infer FactoryEvents, any>) => unknown ? Factory extends (ctx: ManagerRuntimeContext<FactoryEvents, S>) => infer Result ? Result : FactoryReturn<Factory> : FactoryReturn<Factory>, S>;
|
|
44
|
+
type ManagerExtensionsForPlugin<Plugin, S extends MachineStore, Events extends AnyEvent> = PluginDefinitionOf<Plugin> extends {
|
|
45
|
+
readonly manager?: infer Manager extends object;
|
|
46
|
+
} ? {
|
|
47
|
+
[Key in keyof Manager]: ManagerFactoryReturn<Manager[Key], S, Events>;
|
|
48
|
+
} : {};
|
|
49
|
+
type StorageTypingExtensionsForPlugin<Plugin> = PluginDefinitionOf<Plugin> extends {
|
|
50
|
+
readonly storage?: infer Storage extends readonly unknown[];
|
|
51
|
+
} ? Storage[number] extends LiteFsmStorageRuntimeDefinition<any, infer MachineExtension> ? MachineExtension : never : never;
|
|
52
|
+
declare const scopedEffectDeps: unique symbol;
|
|
53
|
+
export type ManagerActionMeta<Plugins extends readonly LiteFsmPlugin<any, any, any>[]> = Prettify<CoreActionMeta & Partial<PluginRouteMeta<Plugins>>>;
|
|
54
|
+
export type ScopedPluginDepsOf<Deps> = Deps extends {
|
|
55
|
+
readonly [scopedEffectDeps]?: infer PluginScopedDeps;
|
|
56
|
+
} ? PluginScopedDeps : {};
|
|
57
|
+
export type EffectDeps<AppDeps extends object, Plugin> = Prettify<AppDeps & PluginScopedDeps<Plugin> & {
|
|
58
|
+
readonly transition: PluginScopedTransition<Plugin>;
|
|
59
|
+
readonly [scopedEffectDeps]?: PluginScopedDeps<Plugin>;
|
|
60
|
+
}>;
|
|
61
|
+
export type ManagerTransitionEvents<AppEvents extends AnyEvent, Plugins extends readonly LiteFsmPlugin<any, any, any>[]> = AppEvents | PluginManagerEvents<Plugins>;
|
|
62
|
+
export type PluginRouteMeta<Plugin> = IntersectCapabilities<PluginMember<Plugin> extends infer Member ? Member extends LiteFsmPlugin<any, any, any> ? RouteMetaForPlugin<Member> : never : never>;
|
|
63
|
+
export type PluginScopedDeps<Plugin> = IntersectCapabilities<PluginMember<Plugin> extends infer Member ? Member extends LiteFsmPlugin<any, any, any> ? ScopedDepsForPlugin<Member> : never : never>;
|
|
64
|
+
export type PluginScopedTransition<Plugin> = IntersectCapabilities<PluginMember<Plugin> extends infer Member ? Member extends LiteFsmPlugin<any, any, any> ? ScopedTransitionForPlugin<Member> : never : never>;
|
|
65
|
+
export type PluginManagerExtensions<Plugin, S extends MachineStore = MachineStore, Events extends AnyEvent = AnyEvent> = IntersectCapabilities<PluginMember<Plugin> extends infer Member ? Member extends LiteFsmPlugin<any, any, any> ? ManagerExtensionsForPlugin<Member, S, Events> : never : never>;
|
|
66
|
+
export type PluginManagerEvents<Plugin> = PluginMember<Plugin> extends infer Member ? Member extends LiteFsmPlugin<any, infer PluginEvents, any> ? PluginEvents : never : never;
|
|
67
|
+
export type StorageTypingExtensionsForPluginSource<Plugin> = PluginMember<Plugin> extends infer Member ? Member extends LiteFsmPlugin<any, any, any> ? StorageTypingExtensionsForPlugin<Member> extends StorageMachineTypingExtension ? StorageTypingExtensionsForPlugin<Member> : never : never : never;
|
|
68
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { LiteFsmStorageRuntimeDefinition } from "./pluginStorage";
|
|
2
|
+
import type { LiteFsmPlugin } from "./plugin";
|
|
3
|
+
import type { AnyEvent, CoreActionMeta, MachinesState, MachineStore } from "./types";
|
|
4
|
+
import type { ManagerExtensionType, ManagerExtensionTypeLambda, managerExtensionTypeMarker, ManagerRuntimeContext } from "./pluginTypes";
|
|
5
|
+
import type { StorageMachineTypingExtension } from "./pluginStorageTypes";
|
|
6
|
+
type UnionToIntersection<Union> = (Union extends unknown ? (value: Union) => void : never) extends (value: infer Intersection) => void ? Intersection : never;
|
|
7
|
+
type Prettify<Value> = {
|
|
8
|
+
[Key in keyof Value]: Value[Key];
|
|
9
|
+
};
|
|
10
|
+
type IsAny<Value> = 0 extends 1 & Value ? true : false;
|
|
11
|
+
type UnknownIfUnannotated<Value> = IsAny<Value> extends true ? unknown : [Value] extends [never] ? unknown : Value;
|
|
12
|
+
type FactoryReturn<Factory> = Factory extends (...args: any[]) => infer Result ? Result : never;
|
|
13
|
+
type RouteMetaValue<Resolver> = Resolver extends (value: infer Value, ...args: any[]) => unknown ? UnknownIfUnannotated<Value> : unknown;
|
|
14
|
+
type IsExactly<Value, Expected> = [Value] extends [Expected] ? [Expected] extends [Value] ? true : false : false;
|
|
15
|
+
type IsStoreReference<Value> = IsExactly<Value, MachineStore> extends true ? true : IsExactly<Value, MachinesState<MachineStore>> extends true ? true : false;
|
|
16
|
+
type HasStoreReferences<Value> = IsAny<Value> extends true ? false : [Value] extends [never] ? false : IsStoreReference<Value> extends true ? true : Value extends (...args: any[]) => infer Result ? HasStoreReferences<Result> : Value extends object ? keyof Value extends never ? false : true extends {
|
|
17
|
+
[Key in keyof Value]: HasStoreReferences<Value[Key]>;
|
|
18
|
+
}[keyof Value] ? true : false : false;
|
|
19
|
+
type SpecializeStoreReferences<Value, S extends MachineStore> = IsExactly<Value, MachineStore> extends true ? S : IsExactly<Value, MachinesState<MachineStore>> extends true ? MachinesState<S> : Value extends (...args: infer Args) => infer Result ? HasStoreReferences<Result> extends true ? (...args: Args) => SpecializeStoreReferences<Result, S> : Value : Value extends object ? HasStoreReferences<Value> extends true ? {
|
|
20
|
+
[Key in keyof Value]: SpecializeStoreReferences<Value[Key], S>;
|
|
21
|
+
} : Value : Value;
|
|
22
|
+
type PluginMember<Plugin> = Plugin extends readonly unknown[] ? Plugin[number] : Plugin;
|
|
23
|
+
type PluginDefinitionOf<Plugin> = Plugin extends LiteFsmPlugin<any, any, infer Definition> ? Definition : never;
|
|
24
|
+
type IntersectCapabilities<Capability> = [Capability] extends [never] ? {} : Prettify<UnionToIntersection<Capability>>;
|
|
25
|
+
type RouteMetaForPlugin<Plugin> = PluginDefinitionOf<Plugin> extends {
|
|
26
|
+
readonly routeMeta?: infer RouteMeta extends object;
|
|
27
|
+
} ? {
|
|
28
|
+
[Key in keyof RouteMeta]: RouteMetaValue<RouteMeta[Key]>;
|
|
29
|
+
} : {};
|
|
30
|
+
type ScopedDepsForPlugin<Plugin> = PluginDefinitionOf<Plugin> extends {
|
|
31
|
+
readonly scopedDeps?: infer ScopedDeps extends object;
|
|
32
|
+
} ? {
|
|
33
|
+
[Key in keyof ScopedDeps]: FactoryReturn<ScopedDeps[Key]>;
|
|
34
|
+
} : {};
|
|
35
|
+
type ScopedTransitionForPlugin<Plugin> = PluginDefinitionOf<Plugin> extends {
|
|
36
|
+
readonly scopedTransition?: infer ScopedTransition extends object;
|
|
37
|
+
} ? {
|
|
38
|
+
[Key in keyof ScopedTransition]: FactoryReturn<ScopedTransition[Key]>;
|
|
39
|
+
} : {};
|
|
40
|
+
type ApplyManagerExtensionType<Lambda extends ManagerExtensionTypeLambda, S extends MachineStore, Events extends AnyEvent> = (Lambda & {
|
|
41
|
+
readonly context: ManagerRuntimeContext<Events, S>;
|
|
42
|
+
})["type"];
|
|
43
|
+
type ManagerFactoryReturn<Factory, S extends MachineStore, Events extends AnyEvent> = typeof managerExtensionTypeMarker extends keyof Factory ? Factory extends ManagerExtensionType<infer Lambda> ? ApplyManagerExtensionType<Lambda, S, Events> : never : SpecializeStoreReferences<Factory extends (ctx: ManagerRuntimeContext<infer FactoryEvents, any>) => unknown ? Factory extends (ctx: ManagerRuntimeContext<FactoryEvents, S>) => infer Result ? Result : FactoryReturn<Factory> : FactoryReturn<Factory>, S>;
|
|
44
|
+
type ManagerExtensionsForPlugin<Plugin, S extends MachineStore, Events extends AnyEvent> = PluginDefinitionOf<Plugin> extends {
|
|
45
|
+
readonly manager?: infer Manager extends object;
|
|
46
|
+
} ? {
|
|
47
|
+
[Key in keyof Manager]: ManagerFactoryReturn<Manager[Key], S, Events>;
|
|
48
|
+
} : {};
|
|
49
|
+
type StorageTypingExtensionsForPlugin<Plugin> = PluginDefinitionOf<Plugin> extends {
|
|
50
|
+
readonly storage?: infer Storage extends readonly unknown[];
|
|
51
|
+
} ? Storage[number] extends LiteFsmStorageRuntimeDefinition<any, infer MachineExtension> ? MachineExtension : never : never;
|
|
52
|
+
declare const scopedEffectDeps: unique symbol;
|
|
53
|
+
export type ManagerActionMeta<Plugins extends readonly LiteFsmPlugin<any, any, any>[]> = Prettify<CoreActionMeta & Partial<PluginRouteMeta<Plugins>>>;
|
|
54
|
+
export type ScopedPluginDepsOf<Deps> = Deps extends {
|
|
55
|
+
readonly [scopedEffectDeps]?: infer PluginScopedDeps;
|
|
56
|
+
} ? PluginScopedDeps : {};
|
|
57
|
+
export type EffectDeps<AppDeps extends object, Plugin> = Prettify<AppDeps & PluginScopedDeps<Plugin> & {
|
|
58
|
+
readonly transition: PluginScopedTransition<Plugin>;
|
|
59
|
+
readonly [scopedEffectDeps]?: PluginScopedDeps<Plugin>;
|
|
60
|
+
}>;
|
|
61
|
+
export type ManagerTransitionEvents<AppEvents extends AnyEvent, Plugins extends readonly LiteFsmPlugin<any, any, any>[]> = AppEvents | PluginManagerEvents<Plugins>;
|
|
62
|
+
export type PluginRouteMeta<Plugin> = IntersectCapabilities<PluginMember<Plugin> extends infer Member ? Member extends LiteFsmPlugin<any, any, any> ? RouteMetaForPlugin<Member> : never : never>;
|
|
63
|
+
export type PluginScopedDeps<Plugin> = IntersectCapabilities<PluginMember<Plugin> extends infer Member ? Member extends LiteFsmPlugin<any, any, any> ? ScopedDepsForPlugin<Member> : never : never>;
|
|
64
|
+
export type PluginScopedTransition<Plugin> = IntersectCapabilities<PluginMember<Plugin> extends infer Member ? Member extends LiteFsmPlugin<any, any, any> ? ScopedTransitionForPlugin<Member> : never : never>;
|
|
65
|
+
export type PluginManagerExtensions<Plugin, S extends MachineStore = MachineStore, Events extends AnyEvent = AnyEvent> = IntersectCapabilities<PluginMember<Plugin> extends infer Member ? Member extends LiteFsmPlugin<any, any, any> ? ManagerExtensionsForPlugin<Member, S, Events> : never : never>;
|
|
66
|
+
export type PluginManagerEvents<Plugin> = PluginMember<Plugin> extends infer Member ? Member extends LiteFsmPlugin<any, infer PluginEvents, any> ? PluginEvents : never : never;
|
|
67
|
+
export type StorageTypingExtensionsForPluginSource<Plugin> = PluginMember<Plugin> extends infer Member ? Member extends LiteFsmPlugin<any, any, any> ? StorageTypingExtensionsForPlugin<Member> extends StorageMachineTypingExtension ? StorageTypingExtensionsForPlugin<Member> : never : never : never;
|
|
68
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { NormalizedPlugin, NormalizedStorageEntry } from "./pluginTypes";
|
|
2
|
+
import type { StorageRuntime } from "./runtime/kernel/storage";
|
|
3
|
+
export type PlainRecord = Record<string, unknown>;
|
|
4
|
+
export type UnknownFunction = (...args: never[]) => unknown;
|
|
5
|
+
export declare const hasOwn: (value: object, key: string) => boolean;
|
|
6
|
+
export declare const isPlainObject: (value: unknown) => value is PlainRecord;
|
|
7
|
+
export declare const extractUserPlugins: (opts: unknown) => readonly unknown[];
|
|
8
|
+
export declare const invalidPluginDefinition: (message: string) => never;
|
|
9
|
+
export declare const assertNonEmptyString: (value: unknown, message: string) => string;
|
|
10
|
+
export declare const assertFunction: (value: unknown, message: string) => UnknownFunction;
|
|
11
|
+
type NormalizedStorageRuntimeEntry = NormalizedStorageEntry & {
|
|
12
|
+
readonly value: StorageRuntime;
|
|
13
|
+
};
|
|
14
|
+
export declare const getNormalizedStorageRuntimeEntries: (plugin: NormalizedPlugin) => readonly NormalizedStorageRuntimeEntry[];
|
|
15
|
+
export declare const normalizePluginDefinition: (value: unknown) => NormalizedPlugin;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { NormalizedPlugin, NormalizedStorageEntry } from "./pluginTypes";
|
|
2
|
+
import type { StorageRuntime } from "./runtime/kernel/storage";
|
|
3
|
+
export type PlainRecord = Record<string, unknown>;
|
|
4
|
+
export type UnknownFunction = (...args: never[]) => unknown;
|
|
5
|
+
export declare const hasOwn: (value: object, key: string) => boolean;
|
|
6
|
+
export declare const isPlainObject: (value: unknown) => value is PlainRecord;
|
|
7
|
+
export declare const extractUserPlugins: (opts: unknown) => readonly unknown[];
|
|
8
|
+
export declare const invalidPluginDefinition: (message: string) => never;
|
|
9
|
+
export declare const assertNonEmptyString: (value: unknown, message: string) => string;
|
|
10
|
+
export declare const assertFunction: (value: unknown, message: string) => UnknownFunction;
|
|
11
|
+
type NormalizedStorageRuntimeEntry = NormalizedStorageEntry & {
|
|
12
|
+
readonly value: StorageRuntime;
|
|
13
|
+
};
|
|
14
|
+
export declare const getNormalizedStorageRuntimeEntries: (plugin: NormalizedPlugin) => readonly NormalizedStorageRuntimeEntry[];
|
|
15
|
+
export declare const normalizePluginDefinition: (value: unknown) => NormalizedPlugin;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { StorageRuntimeExtension, StorageRuntimeBuilder, StorageMachineTypingExtension } from "./pluginStorageTypes";
|
|
2
|
+
declare const liteFsmStorageRuntimeMarker: unique symbol;
|
|
3
|
+
declare const liteFsmStorageRuntimePayload: unique symbol;
|
|
4
|
+
declare const liteFsmStorageRuntimeOpaquePayload: unique symbol;
|
|
5
|
+
declare const liteFsmStorageRuntimeExtension: unique symbol;
|
|
6
|
+
declare const liteFsmStorageRouteMetaRequirements: unique symbol;
|
|
7
|
+
type LiteFsmStorageRuntimePayload = {
|
|
8
|
+
readonly [liteFsmStorageRuntimeOpaquePayload]: never;
|
|
9
|
+
};
|
|
10
|
+
export type LiteFsmStorageRuntimeDefinition<Kind extends string = string, MachineExtension extends StorageMachineTypingExtension = StorageMachineTypingExtension, RouteMetaRequirements extends object = object> = {
|
|
11
|
+
readonly kind: Kind;
|
|
12
|
+
readonly [liteFsmStorageRuntimeMarker]: true;
|
|
13
|
+
readonly [liteFsmStorageRuntimePayload]: LiteFsmStorageRuntimePayload;
|
|
14
|
+
readonly [liteFsmStorageRuntimeExtension]: MachineExtension;
|
|
15
|
+
readonly [liteFsmStorageRouteMetaRequirements]: RouteMetaRequirements;
|
|
16
|
+
};
|
|
17
|
+
export declare const isLiteFsmStorageRuntimeDefinition: (value: unknown) => value is LiteFsmStorageRuntimeDefinition;
|
|
18
|
+
export declare const getStorageRuntimePayload: (definition: LiteFsmStorageRuntimeDefinition) => unknown;
|
|
19
|
+
export declare function defineStorageRuntime<Extension extends StorageRuntimeExtension = {}>(): StorageRuntimeBuilder<Extension>;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { StorageRuntimeExtension, StorageRuntimeBuilder, StorageMachineTypingExtension } from "./pluginStorageTypes";
|
|
2
|
+
declare const liteFsmStorageRuntimeMarker: unique symbol;
|
|
3
|
+
declare const liteFsmStorageRuntimePayload: unique symbol;
|
|
4
|
+
declare const liteFsmStorageRuntimeOpaquePayload: unique symbol;
|
|
5
|
+
declare const liteFsmStorageRuntimeExtension: unique symbol;
|
|
6
|
+
declare const liteFsmStorageRouteMetaRequirements: unique symbol;
|
|
7
|
+
type LiteFsmStorageRuntimePayload = {
|
|
8
|
+
readonly [liteFsmStorageRuntimeOpaquePayload]: never;
|
|
9
|
+
};
|
|
10
|
+
export type LiteFsmStorageRuntimeDefinition<Kind extends string = string, MachineExtension extends StorageMachineTypingExtension = StorageMachineTypingExtension, RouteMetaRequirements extends object = object> = {
|
|
11
|
+
readonly kind: Kind;
|
|
12
|
+
readonly [liteFsmStorageRuntimeMarker]: true;
|
|
13
|
+
readonly [liteFsmStorageRuntimePayload]: LiteFsmStorageRuntimePayload;
|
|
14
|
+
readonly [liteFsmStorageRuntimeExtension]: MachineExtension;
|
|
15
|
+
readonly [liteFsmStorageRouteMetaRequirements]: RouteMetaRequirements;
|
|
16
|
+
};
|
|
17
|
+
export declare const isLiteFsmStorageRuntimeDefinition: (value: unknown) => value is LiteFsmStorageRuntimeDefinition;
|
|
18
|
+
export declare const getStorageRuntimePayload: (definition: LiteFsmStorageRuntimeDefinition) => unknown;
|
|
19
|
+
export declare function defineStorageRuntime<Extension extends StorageRuntimeExtension = {}>(): StorageRuntimeBuilder<Extension>;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { StorageRuntime } from "./runtime/kernel/storage";
|
|
2
|
+
export declare const assertStorageRuntimeDefinition: (value: unknown) => StorageRuntime;
|
|
3
|
+
export declare const normalizePublicStorageRuntime: <Kind extends string>(kind: Kind, runtime: StorageRuntime) => StorageRuntime;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { StorageRuntime } from "./runtime/kernel/storage";
|
|
2
|
+
export declare const assertStorageRuntimeDefinition: (value: unknown) => StorageRuntime;
|
|
3
|
+
export declare const normalizePublicStorageRuntime: <Kind extends string>(kind: Kind, runtime: StorageRuntime) => StorageRuntime;
|