FaasJS
Home
  • Guide
  • Documents
  • Templates
  • Changelog
  • Ecosystem

    • Docker Images
  • Github
  • Contributing
  • Sponsor
  • Security
Home
  • Guide
  • Documents
  • Templates
  • Changelog
  • Ecosystem

    • Docker Images
  • Github
  • Contributing
  • Sponsor
  • Security

Documents / @faasjs/workflow / defineWorkflow

Function: defineWorkflow()

Call Signature

defineWorkflow<TSchemas, TRoot>(options): WorkflowDefinition<WorkflowSchemaSteps<TSchemas>, TRoot, TSchemas>

Define a workflow. The definition is explicit and is not registered globally. When schemas is provided, each step's params are validated with its Zod schema before the handler runs, and context.params is inferred from that schema's output type.

Type Parameters

TSchemas

TSchemas extends WorkflowStepSchemas

TRoot

TRoot extends string

Parameters

options

DefineWorkflowOptions<WorkflowSchemaSteps<TSchemas>, TRoot, TSchemas>

Workflow type, root step name, and step handlers.

Returns

WorkflowDefinition<WorkflowSchemaSteps<TSchemas>, TRoot, TSchemas>

Example

import { defineWorkflow, done, next } from '@faasjs/workflow'
import { z } from '@faasjs/utils'

export const orderWorkflow = defineWorkflow({
  type: 'order_fulfillment',
  root: 'reserveInventory',
  schemas: {
    reserveInventory: z.object({
      orderId: z.string(),
    }),
    capturePayment: z.object({
      orderId: z.string(),
    }),
  },
  steps: {
    async reserveInventory({ params }) {
      await orders.reserveInventory(params.orderId)

      return next('capturePayment', {
        orderId: params.orderId,
      })
    },
    async capturePayment({ params }) {
      await payments.capture(params.orderId)

      return done({
        orderId: params.orderId,
      })
    },
  },
})

Call Signature

defineWorkflow<TSteps, TRoot>(options): WorkflowDefinition<TSteps, TRoot>

Define a workflow. The definition is explicit and is not registered globally. When schemas is provided, each step's params are validated with its Zod schema before the handler runs, and context.params is inferred from that schema's output type.

Type Parameters

TSteps

TSteps extends WorkflowSteps

TRoot

TRoot extends string

Parameters

options

DefineWorkflowOptions<TSteps, TRoot>

Workflow type, root step name, and step handlers.

Returns

WorkflowDefinition<TSteps, TRoot>

Example

import { defineWorkflow, done, next } from '@faasjs/workflow'
import { z } from '@faasjs/utils'

export const orderWorkflow = defineWorkflow({
  type: 'order_fulfillment',
  root: 'reserveInventory',
  schemas: {
    reserveInventory: z.object({
      orderId: z.string(),
    }),
    capturePayment: z.object({
      orderId: z.string(),
    }),
  },
  steps: {
    async reserveInventory({ params }) {
      await orders.reserveInventory(params.orderId)

      return next('capturePayment', {
        orderId: params.orderId,
      })
    },
    async capturePayment({ params }) {
      await payments.capture(params.orderId)

      return done({
        orderId: params.orderId,
      })
    },
  },
})