Skip to content

Latest commit

 

History

History
134 lines (92 loc) · 3.47 KB

README.md

File metadata and controls

134 lines (92 loc) · 3.47 KB

Node CI Gitpod ready-to-code

Serverless Workflow Specification - Typescript SDK

Provides the Typescript API/SPI for the Serverless Workflow Specification

With the SDK you can:

  • Parse workflow JSON and YAML definitions
  • (WIP) Programmatically build workflow definitions
  • (WIP) Validate workflow definitions

Getting Started

Building locally

To build the project and run tests locally:

git clone https://github.com/serverlessworkflow/sdk-typescript.git
cd sdk-typescript
npm install && npm run test

Add as dependency to your project

You can use npm link to add the sdk-typescript as dependency in your project.

  • Clone the sdk-typescript project and build it:
git clone https://github.com/serverlessworkflow/sdk-typescript.git
cd sdk-typescript
npm install && npm run build
  • Make the package visible globally to npm. Inside the sdk-typescript project folder run:
npm link
  • Navigate to the folder/project in which you want to use the sdk, and run the following command:
npm link sdk-typescript

It will create a symbolic link from globally-installed sdk-typescript to node_modules/ of the current folder.

How to use

Create Workflow using builder API

    const workflow = new WorkflowBuilder()
        .withId("helloworld")
        .withVersion("1.0")
        .withName("Hello World Workflow")
        .withDescription("Inject Hello World")
        .withStart("Hello State")
        .withStates([new InjectStateBuilder()
            .withName("Hello State")
            .withData({
                "result": "Hello World!"
            })
            .withEnd(true).build()])
        .build();

Load a file JSON/YAML to a Workflow instance

    const workflow = BaseWorkflow.fromSource(source)

Where source is the file location.

Parse a Workflow instance to JSON/YAML

Having the following workflow instance:

    const workflow = new WorkflowBuilder()
        .withId("helloworld")
        .withVersion("1.0")
        .withName("Hello World Workflow")
        .withDescription("Inject Hello World")
        .withStart("Hello State")
        .withStates([new InjectStateBuilder()
            .withName("Hello State")
            .withData({
                "result": "Hello World!"
            })
            .withEnd(true).build()])
        .build();

You can convert it to its string representation in JSON or YAML format by using the static methods toJSON or toYAML respectively:

    const workflowAsJSON = BaseWorkflow.toJSON(workflow);
    const workflowAsYAML = BaseWorkflow.toYAML(workflow);

Validate workflow definitions

The sdk provides a way to validate if a workflow object is compliant with the serverlessworkflow specification.

WorkflowValidator class provides two methods:

  • isValid(): boolean
const isValid = new WorkflowValidator(workflow).isValid();
  • validate(): ValidationErrors
const validationErrors = new WorkflowValidator(workflow).validate();
validationErrors.errors().forEach(error => console.error(error.message()))