@vhidvz/wfjs
    Preparing search index...

    @vhidvz/wfjs

    WorkflowJS

    npm Coverage npm GitHub Chat on Matrix documentation Build, Test and Publish

    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 a Node the value is passed to the next available Node as a Value 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:

    Simple Workflow

    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:

    This project is licensed under the MIT License - SEE the LICENSE file for details