Observing your composition
A compose chain emits lifecycle events: start, complete, task failure. .meta({ name, hooks }) attaches callbacks for each: onStart, onComplete, onTaskFail. The name identifies each chain in logs and metrics.
onStart
Section titled “onStart”Fires when the compose chain starts.
import { compose, createTask } from "@grlt-hub/app-compose"
const auth = createTask({ name: "auth", run: { fn: () => { console.log("auth ran") return { id: 1 } }, },})
compose() .meta({ name: "auth-page", hooks: { onStart: (event) => { console.log(`${event.meta?.name} started`) }, }, }) .step(auth) .run()onComplete
Section titled “onComplete”Fires when the compose chain completes.
import { compose, createTask } from "@grlt-hub/app-compose"
const auth = createTask({ name: "auth", run: { fn: () => { console.log("auth ran") return { id: 1 } }, },})
compose() .meta({ name: "auth-page", hooks: { onComplete: (event) => { console.log(`${event.meta?.name} completed`) }, }, }) .step(auth) .run()onTaskFail
Section titled “onTaskFail”Fires when a task inside the compose chain fails.
import { compose, createTask } from "@grlt-hub/app-compose"
const auth = createTask({ name: "auth", run: { fn: () => { throw new Error("Ooops!") }, },})
compose() .meta({ name: "auth-page", hooks: { onTaskFail: (event) => { console.log(`Task ${event.task.name} failed`) console.log(`With an error: ${event.error}`) }, }, }) .step(auth) .run()