@sanity/functions
Helper methods and type definitions for Sanity Functions.
Installation
npm install @sanity/functions
Usage
Basic
import {documentEventHandler} from '@sanity/functions'
import {createClient} from '@sanity/client'
export const handler = documentEventHandler(async ({context, event}) => {
// Create a Sanity client using the context options
const client = createClient({
apiVersion: '2025-05-01',
...context.clientOptions,
})
// Access the event data
const data = event.data
// Your function implementation
console.log('Document updated:', data)
})
Typescript: Passing type for data
By default, the event.data
property is untyped (any
). If you know what the shape of the data that will be delivered is, you can specify it as a generic to the function:
interface NotificationData {
documentId: string
text: string
}
export const handler = documentEventHandler<NotificationData>(async ({event}) => {
console.log(event.data.text) // Typed as `string`
console.log(event.data.notSet) // Will yield type error
})
Type only (TypeScript)
import {type DocumentEventHandler} from '@sanity/functions'
import {createClient} from '@sanity/client'
export const handler: DocumentEventHandler = async ({context, event}) => {
// …
}
// …you can also define the data type:
export const handler: DocumentEventHandler<{text: string}> = async ({event}) => {
console.log(event.data.text)
}
Type only (JavaScript)
/** @type {import('@sanity/functions').DocumentEventHandler} */
export const handler = async ({context, event}) => {
console.log(event.data.text)
}
// …you can also define the data type:
/** @type {import('@sanity/functions').DocumentEventHandler<{text: string}>} */
export const handler = async ({event}) => {
console.log(event.data.text)
}
Development
To build this project:
npm run build
To run tests:
npm test
To run type checking:
npm run lint
Release automation
This repository uses conventional commits and release-please. Any relevant changes to main
will create a pull request for a new release. Approve it and merge it to trigger the actual release.
License
MIT © Sanity.io