@jescrich/nestjs-workflow
Version:
Workflow and State Machines for NestJS
38 lines (37 loc) • 1.23 kB
TypeScript
import { Provider, Type } from '@nestjs/common';
import { EntityService } from './entity.service';
export interface TransitionEvent<T, P, Event, States> {
event: Event | Event[];
from: States | States[];
to: States;
actions?: ((entity: T, payload?: P | T | object | string) => Promise<T>)[];
conditions?: ((entity: T, payload?: P | T | object | string) => boolean)[];
}
export interface KafkaEvent<Event> {
topic: string;
event: Event;
}
export interface WorkflowDefinition<T, P, Event, State> {
name?: string;
states: {
finals: State[];
idles: State[];
failed: State;
};
options?: {};
transitions: TransitionEvent<T, P, Event, State>[];
actions?: Type<any>[];
conditions?: Type<any>[];
kafka?: {
brokers: string;
events: KafkaEvent<Event>[];
};
entity: Provider<EntityService<T, State>> | Type<EntityService<T, State>> | {
new: () => T;
update: (entity: T, status: State) => Promise<T>;
load: (urn: string) => Promise<T>;
status: (entity: T) => State;
urn: (entity: T) => string;
};
fallback?: (entity: T, event: Event, payload?: P | T | object | string) => Promise<T>;
}