@forgeframework/flow
v2.0.0
Published
BPMN workflow engine for the Forge Framework.
Maintainers
Readme
@forgeframework/flow
BPMN workflow engine for the Forge Framework.
Part of the Forge Framework — a TypeScript framework for backend microservices and web applications.
Installation
npm install @forgeframework/flowUsage
import { WorkflowEngine, WorkflowDefinition } from '@forgeframework/flow';
import { ServiceTask, UserTask, StartEvent, EndEvent, ExclusiveGateway } from '@forgeframework/flow';
import { UserTaskPhase, WorkflowContext } from '@forgeframework/flow';
const definition: WorkflowDefinition = {
id: 'order-approval',
name: 'Order Approval',
version: 1,
elements: [
{ id: 'start', type: BpmnElementType.START_EVENT, name: 'Start', properties: {} },
{ id: 'validate', type: BpmnElementType.SERVICE_TASK, name: 'Validate Order', properties: {}, handlerRef: 'validate-order' },
{ id: 'approve', type: BpmnElementType.USER_TASK, name: 'Manager Approval', properties: {}, handlerRef: 'approve-order' },
{ id: 'check', type: BpmnElementType.EXCLUSIVE_GATEWAY, name: 'Check Approval', properties: {}, handlerRef: 'check-approval' },
{ id: 'process', type: BpmnElementType.SERVICE_TASK, name: 'Process Order', properties: {}, handlerRef: 'process-order' },
{ id: 'reject', type: BpmnElementType.SERVICE_TASK, name: 'Reject Order', properties: {}, handlerRef: 'reject-order' },
{ id: 'end', type: BpmnElementType.END_EVENT, name: 'End', properties: {} },
],
connections: [
{ id: 'c1', sourceId: 'start', targetId: 'validate' },
{ id: 'c2', sourceId: 'validate', targetId: 'approve' },
{ id: 'c3', sourceId: 'approve', targetId: 'check' },
{ id: 'c4', sourceId: 'check', targetId: 'process', condition: 'approved === true' },
{ id: 'c5', sourceId: 'check', targetId: 'reject', condition: 'approved === false' },
{ id: 'c6', sourceId: 'process', targetId: 'end' },
{ id: 'c7', sourceId: 'reject', targetId: 'end' },
],
variables: [
{ name: 'orderId', type: 'string', required: true },
{ name: 'approved', type: 'boolean', required: false, defaultValue: false },
],
};
const engine = container.resolve<WorkflowEngine>('WorkflowEngine');
const instance = await engine.create(definition);
const result = await engine.execute(instance.id, { orderId: 'ORD-001' });
if (result.status === WorkflowInstanceStatus.WAITING) {
const resumed = await engine.resume(instance.id, 'approve', { approved: true });
}
const history = await engine.getHistory(instance.id);Documentation
Full API reference and guides: https://carbonforge.io/framework/docs/flow/flow
(Documentation site launching soon.)
License
MIT © Carbon Forge
