github
DocsBlog
fontcolor_theme
package

API @deepkit/workflow

npm install @deepkit/workflow

Classes

WorkflowEvent [source]
export class WorkflowEvent extends BaseEvent {
    nextState?: any;
    nextStateEvent?: any;
    clearNext();
    /**
     * @see WorkflowNextEvent.next
     */
    next(nextState: string, event?: any);
    hasNext(): boolean;
}
WorkflowDefinition [source]
export class WorkflowDefinition<T extends WorkflowPlaces> {
    transitions: WorkflowTransition<T>[];
    tokens: {
        [name in keyof T]?: EventToken<any>;
    };
    next: {
        [name in keyof T]?: (keyof T & string)[];
    };
    symbol;
    constructor(public readonly name: string, public readonly places: T, transitions: WorkflowTransitions<T> = {});
    getEventToken<K extends keyof T>(name: K): EventToken<ExtractClassType<T[K]>>;
    addTransition(from: keyof T & string, to: keyof T & string, label?: string);
    create(state: keyof T & string, eventDispatcher: EventDispatcher, injector?: InjectorContext, stopwatch?: Stopwatch): Workflow<T>;
    getTransitionsFrom(state: keyof T & string): (keyof T & string)[];
    buildApplier(eventDispatcher: EventDispatcher);
}
WorkflowStateSubject [source]
export class WorkflowStateSubject<T extends WorkflowPlaces> implements WorkflowState<T> {
    constructor(public value: keyof T & string);
    get();
    set(v: keyof T & string);
}
Workflow [source]
export class Workflow<T extends WorkflowPlaces> {
    constructor(public definition: WorkflowDefinition<T>, public state: WorkflowState<T>, private eventDispatcher: EventDispatcher, private injector: InjectorContext, private stopwatch?: Stopwatch);
    can(nextState: keyof T & string): boolean;
    /**
     * @throws WorkflowError when next state is not possible to apply.
     */
    apply<K extends keyof T>(nextState: K, event?: ExtractClassType<T[K]>): Promise<void>;
    isDone(): boolean;
}

Errors

WorkflowError [source]
export class WorkflowError extends CustomError {
}

Functions

createWorkflow [source]
<T extends WorkflowPlaces>(name: string, definition: T, transitions?: WorkflowTransitions<T>): WorkflowDefinition<T> & WorkflowDefinitionEvents<T>

Types

WorkflowPlaces [source]
type WorkflowPlaces = { [name: string]: ClassType<WorkflowEvent> };
WorkflowNextEvent [source]
interface WorkflowNextEvent<T extends WorkflowPlaces> {
    nextState?: keyof T & string;

    /**
     * Schedule to apply the next workflow step when all event listeners have been called.
     */
    next<S extends keyof T & string>(nextState: S, event?: ExtractClassType<T[S]>): void;
}
WorkflowDefinitionEvents [source]
type WorkflowDefinitionEvents<T extends WorkflowPlaces> = {
    [K in keyof T & string as `on${Capitalize<K>}`]: EventToken<BaseEvent & Omit<ExtractClassType<T[K]>, 'next' | 'nextState'> & WorkflowNextEvent<T>>
}
WorkflowState [source]
interface WorkflowState<T> {
    get(): keyof T & string;

    set(v: keyof T & string): void;
}