UNPKG

ethernet-ip

Version:

A feature-complete EtherNet/IP client for Rockwell ControlLogix/CompactLogix PLCs

34 lines 1.35 kB
/** * Generic state machine with type-safe state unions and optional transition validation. * * T must be a narrow string literal union (e.g. 'red' | 'green'), not plain `string`. * * Transition rules: * - Omit config entirely → any transition allowed * - Provide config → only declared transitions allowed (strict) * - `exits`: from a state, which states it can go to * - `entries`: which states can reach this state * - `'*'` means unrestricted on that side * - A transition passes if either `exits` or `entries` allows it * * Handler ordering: change handlers fire in registration order after state updates. */ export interface TransitionRules<T extends string> { exits?: Partial<Record<T, T[] | '*'>>; entries?: Partial<Record<T, T[] | '*'>>; } export declare class StateMachine<T extends string & (string extends T ? never : unknown)> { private _state; private _previous?; private readonly rules?; private readonly changeHandlers; constructor(initialState: T, rules?: TransitionRules<T>); get state(): T; get previous(): T | undefined; setState(next: T): void; is(state: T): boolean; was(state: T | undefined): boolean; onStateChange(handler: (prev: T | undefined, current: T) => void): void; private isAllowed; } //# sourceMappingURL=state-machine.d.ts.map