Skip to content

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.

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()

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()

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()