import type { TupleIndices } from "../../lib/types"; import type { BaseNfaMachineConfig } from "../../feat/factory/config"; import { DEFAULT_STATE_NAME } from "../../feat/factory/state"; import type { INVALID_VAR_NAME, VarNameCandidateTuple, VarNameTuple } from "../factory/types"; import type { EventEmitter, EventHandlers, SelectFn, Selectors } from "../factory/nfa-types"; export type NfaConfig, D extends any, H extends Selectors> = BaseNfaMachineConfig; /** * @description helps: * - type inference * - debugging, testing * - possibly middlewares, even custom ones * * definitely optional */ export declare const createNfaConfig: = {}, D extends any = never, Se extends Selectors = {}>(config: NfaConfig) => { [K2 in Extract, (Exclude extends undefined ? never : "data") | (Exclude<{ readonly [K in keyof E]: E[K] extends EventHandlers[K] ? E[K] : import("../factory/nfa-types").EventHandler; }, undefined> extends never ? never : "events") | (Exclude<{ readonly [K_1 in keyof Se]: Se[K_1] extends Selectors[K_1] ? Se[K_1] : import("../factory/nfa-types").Selector; }, undefined> extends never ? never : "selectors") | (Exclude, undefined>[number] extends INVALID_VAR_NAME ? never : "states")>]-?: Exclude[K2], undefined>; } & { [K3 in Exclude, ((Exclude extends undefined ? never : "data") | (Exclude<{ readonly [K in keyof E]: E[K] extends EventHandlers[K] ? E[K] : import("../factory/nfa-types").EventHandler; }, undefined> extends never ? never : "events") | (Exclude<{ readonly [K_1 in keyof Se]: Se[K_1] extends Selectors[K_1] ? Se[K_1] : import("../factory/nfa-types").Selector; }, undefined> extends never ? never : "selectors") | (Exclude, undefined>[number] extends INVALID_VAR_NAME ? never : "states")) | "transitionRules">]?: NfaConfig[K3]; } & ({ readonly only?: { readonly [K in S[number]]?: readonly Exclude[] | undefined; } | undefined; readonly deny?: { readonly [K_1 in S[number]]?: readonly Exclude[] | undefined; } | undefined; } | undefined extends undefined ? {} : { transitionRules: { [K4 in ({ readonly [K in S[number]]?: readonly Exclude[] | undefined; } | undefined extends undefined ? never : "only") | ({ readonly [K_1 in S[number]]?: readonly Exclude[] | undefined; } | undefined extends undefined ? never : "deny")]: { readonly only?: { readonly [K in S[number]]?: readonly Exclude[] | undefined; } | undefined; readonly deny?: { readonly [K_1 in S[number]]?: readonly Exclude[] | undefined; } | undefined; }[K4]; }; }); export declare const createNfa: = {}, Data extends any = never, SEs extends Selectors = {}>(config: NfaConfig, rerender?: () => void) => ({ id: symbol; } & (Data extends undefined ? {} : { data: Data; }) & { state: number; STATE: { readonly [K in TupleIndices as States[K]]: number; }; setState: (state: number) => number | false; setData: (updater: (draft: Data) => void) => void; availableTransitions: number; subscribeEvents: (onEvents: (eventPayloadTuple: [T, Parameters[1], boolean?]) => void) => () => void; _setRerenderer: (fn: typeof rerender) => void; _initializer: (() => void) | undefined; }) & (EHs extends undefined ? {} : { event: { [K_1 in keyof EHs]: EventEmitter; }; }) & (SEs extends undefined ? {} : { select: { [K_2 in keyof SEs]: SelectFn; }; });