WorkflowJS is a lightweight and flexible library for building workflows and processes with NodeJS. It allows you to define processes using BPMN 2.0.
This is a JavaScript library for building and executing workflows. It provides a simple, declarative syntax for defining processes, and offers a flexible and extensible framework for handling workflow events and activities.
npm install --save @vhidvz/wfjs
* | Concept | Description | Type | Decorator | Required |
---|---|---|---|---|---|
1 | Process | is a BPMN lane, a collection of flow objects. | Class | @Process | Yes |
2 | Node | is a functionality of Activity in a workflow. |
Method | @Node | Yes |
3 | Activity | is a Flow Object or a Node of a workflow process. | Param | @Act() | Yes |
4 | Context | is storing the state of the machine during execution. | Param | @Ctx() | No |
5 | Token | has a history of the execution State , tokens are needed. |
Param | @Sign() | No |
6 | history | is an array of the State of a flow object or node in a token. |
-- | @Sign() | No |
7 | State | it contains the state of each node or flows object in history . |
-- | @Sign() | No |
8 | Data | is a shared space across the execution context. | Param | @Data() | Maybe |
9 | Value | is an isolated space for each flow object or node. | Param | @Value() | Maybe |
Note: if you
return
a value in aNode
the value is passed to the next availableNode
as aValue
in a specific execution.
To define a BPMN schema, you need to create a file with the extension .bpmn
and define the schema using the BPMN 2.0 standard or use the online BPMN editor. Here's an example of a simple BPMN schema:
The full definition of the simple workflow schema
.bpmn
file located in this link.
To create a new workflow, you need to define a class with methods that represent the different steps of the workflow. You can use decorators to define the nodes and activities of the workflow. Here's an example of a simple workflow:
import { Act, Node, Process } from "@vhidvz/wfjs/common";
import { EventActivity } from "@vhidvz/wfjs/core";
@Process({ name: 'Simple Workflow' })
class SimpleWorkflow {
@Node({ name: 'Start' })
async start(@Act() activity: EventActivity) {
activity.takeOutgoing();
}
}
Once you have defined the workflow, you can build and execute it using the WorkflowJS library. Here's how you can do it:
import { parse, readFile, WorkflowJS } from '@vhidvz/wfjs';
(async () => {
const workflow = WorkflowJS.build();
const { context } = await workflow.execute({
factory: () => new SimpleWorkflow(),
xml: readFile('./example/simple-workflow.bpmn'),
});
console.debug('\nContext is:', JSON.stringify(context.serialize(), null, 2));
})()
Projects:
- workflow-template is an example of creating a simple workflow microservice.
This project is licensed under the MIT License - SEE the LICENSE file for details