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,
})
},
},
})