Helper methods and type definitions for Sanity Functions.
npm install @sanity/functionsimport {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)
})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
})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 {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)
}To build this project:
npm run buildTo run tests:
npm testTo run type checking:
npm run lintThis 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.
MIT © Sanity.io