diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2df3026..a3a40a7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -121,33 +121,28 @@
```ts
// sanity.config.ts
- import {
- defineArrayMember,
- defineConfig,
- defineField,
- defineType,
- } from "sanity";
+ import {defineArrayMember, defineConfig, defineField, defineType} from 'sanity'
export default defineConfig({
- name: "default",
- projectId: "abc123",
- dataset: "production",
+ name: 'default',
+ projectId: 'abc123',
+ dataset: 'production',
schema: {
types: [
defineType({
- name: "post",
- type: "document",
+ name: 'post',
+ type: 'document',
fields: [
- defineField({ name: "title", type: "string" }),
+ defineField({name: 'title', type: 'string'}),
defineField({
- name: "content",
- type: "array",
+ name: 'content',
+ type: 'array',
of: [
- defineArrayMember({ type: "block" }),
+ defineArrayMember({type: 'block'}),
defineArrayMember({
- type: "image",
- options: { hotspot: true },
- fields: [defineField({ name: "alt", type: "string" })],
+ type: 'image',
+ options: {hotspot: true},
+ fields: [defineField({name: 'alt', type: 'string'})],
}),
],
}),
@@ -155,7 +150,7 @@
}),
],
},
- });
+ })
```
#### Before: hand-typing handlers
@@ -164,26 +159,24 @@
```tsx
// app/[slug]/page.tsx
- import { createClient } from "@sanity/client";
- import { createImageUrlBuilder } from "@sanity/image-url";
- import { PortableText } from "@portabletext/react";
- import { defineQuery } from "groq";
+ import {createClient} from '@sanity/client'
+ import {createImageUrlBuilder} from '@sanity/image-url'
+ import {PortableText} from '@portabletext/react'
+ import {defineQuery} from 'groq'
const client = createClient({
- projectId: "abc123",
- dataset: "production",
+ projectId: 'abc123',
+ dataset: 'production',
useCdn: true,
- apiVersion: "2026-05-04",
- });
- const builder = createImageUrlBuilder(client);
+ apiVersion: '2026-05-04',
+ })
+ const builder = createImageUrlBuilder(client)
- export default async function Page({ slug }: { slug: string }) {
- const query = defineQuery(
- `*[_type == "post" && slug.current == $slug][0]{title,content}`
- );
- const data = await client.fetch(query, { slug });
+ export default async function Page({slug}: {slug: string}) {
+ const query = defineQuery(`*[_type == "post" && slug.current == $slug][0]{title,content}`)
+ const data = await client.fetch(query, {slug})
- if (!data) return notFound();
+ if (!data) return notFound()
return (
@@ -196,37 +189,35 @@
}: {
value: {
asset?: {
- _ref: string;
- _type: "reference";
- _weak?: boolean;
- };
+ _ref: string
+ _type: 'reference'
+ _weak?: boolean
+ }
hotspot?: {
- _type: "sanity.imageHotspot";
- x?: number;
- y?: number;
- height?: number;
- width?: number;
- };
+ _type: 'sanity.imageHotspot'
+ x?: number
+ y?: number
+ height?: number
+ width?: number
+ }
crop?: {
- _type: "sanity.imageCrop";
- top?: number;
- bottom?: number;
- left?: number;
- right?: number;
- };
- alt?: string;
- _type: "image";
- _key: string;
- };
- }) => (
-
- ),
+ _type: 'sanity.imageCrop'
+ top?: number
+ bottom?: number
+ left?: number
+ right?: number
+ }
+ alt?: string
+ _type: 'image'
+ _key: string
+ }
+ }) =>
,
},
}}
value={data.content}
/>
- );
+ )
}
```
@@ -236,26 +227,24 @@
```tsx
// app/[slug]/page.tsx
- import { createClient } from "@sanity/client";
- import { createImageUrlBuilder } from "@sanity/image-url";
- import { PortableText } from "@portabletext/react";
- import { defineQuery } from "groq";
+ import {createClient} from '@sanity/client'
+ import {createImageUrlBuilder} from '@sanity/image-url'
+ import {PortableText} from '@portabletext/react'
+ import {defineQuery} from 'groq'
const client = createClient({
- projectId: "abc123",
- dataset: "production",
+ projectId: 'abc123',
+ dataset: 'production',
useCdn: true,
- apiVersion: "2026-05-04",
- });
- const builder = createImageUrlBuilder(client);
+ apiVersion: '2026-05-04',
+ })
+ const builder = createImageUrlBuilder(client)
- export default async function Page({ slug }: { slug: string }) {
- const query = defineQuery(
- `*[_type == "post" && slug.current == $slug][0]{title,content}`
- );
- const data = await client.fetch(query, { slug });
+ export default async function Page({slug}: {slug: string}) {
+ const query = defineQuery(`*[_type == "post" && slug.current == $slug][0]{title,content}`)
+ const data = await client.fetch(query, {slug})
- if (!data) return notFound();
+ if (!data) return notFound()
return (
@@ -264,15 +253,13 @@
components={{
types: {
// value is fully typed from the query result, no annotation needed
- image: ({ value }) => (
-
- ),
+ image: ({value}) =>
,
},
}}
value={data.content}
/>
- );
+ )
}
```
@@ -282,41 +269,37 @@
```tsx
// app/[slug]/page.tsx
- import { createClient } from "@sanity/client";
- import { createImageUrlBuilder } from "@sanity/image-url";
- import { PortableText, type InferComponents } from "@portabletext/react";
- import { defineQuery } from "groq";
+ import {createClient} from '@sanity/client'
+ import {createImageUrlBuilder} from '@sanity/image-url'
+ import {PortableText, type InferComponents} from '@portabletext/react'
+ import {defineQuery} from 'groq'
const client = createClient({
- projectId: "abc123",
- dataset: "production",
+ projectId: 'abc123',
+ dataset: 'production',
useCdn: true,
- apiVersion: "2026-05-04",
- });
- const builder = createImageUrlBuilder(client);
+ apiVersion: '2026-05-04',
+ })
+ const builder = createImageUrlBuilder(client)
- export default async function Page({ slug }: { slug: string }) {
- const query = defineQuery(
- `*[_type == "post" && slug.current == $slug][0]{title,content}`
- );
- const data = await client.fetch(query, { slug });
+ export default async function Page({slug}: {slug: string}) {
+ const query = defineQuery(`*[_type == "post" && slug.current == $slug][0]{title,content}`)
+ const data = await client.fetch(query, {slug})
- if (!data) return notFound();
+ if (!data) return notFound()
const components = {
types: {
- image: ({ value }) => (
-
- ),
+ image: ({value}) =>
,
},
- } satisfies InferComponents;
+ } satisfies InferComponents
return (
{data.title}
- );
+ )
}
```
@@ -326,56 +309,46 @@
```tsx
// app/[slug]/page.tsx
- import { createClient, type SanityQueries } from "@sanity/client";
- import { createImageUrlBuilder } from "@sanity/image-url";
- import {
- PortableText,
- type InferStrictComponents,
- type InferValue,
- } from "@portabletext/react";
- import { defineQuery } from "groq";
+ import {createClient, type SanityQueries} from '@sanity/client'
+ import {createImageUrlBuilder} from '@sanity/image-url'
+ import {PortableText, type InferStrictComponents, type InferValue} from '@portabletext/react'
+ import {defineQuery} from 'groq'
const client = createClient({
- projectId: "abc123",
- dataset: "production",
+ projectId: 'abc123',
+ dataset: 'production',
useCdn: true,
- apiVersion: "2026-05-04",
- });
- const builder = createImageUrlBuilder(client);
+ apiVersion: '2026-05-04',
+ })
+ const builder = createImageUrlBuilder(client)
// Array value type for every Portable Text item shape across all registered queries.
- type PortableTextValue = InferValue;
+ type PortableTextValue = InferValue
- function CustomPortableText({ value }: { value: PortableTextValue }) {
+ function CustomPortableText({value}: {value: PortableTextValue}) {
const components = {
types: {
- image: ({ value }) => (
-
- ),
+ image: ({value}) =>
,
},
- } satisfies InferStrictComponents;
+ } satisfies InferStrictComponents
// ^ TypeScript errors when the schema gains a custom type, mark, or list
// style without a matching handler defined here
- return ;
+ return
}
- export default async function Page({ slug }: { slug: string }) {
- const query = defineQuery(
- `*[_type == "post" && slug.current == $slug][0]{title,content}`
- );
- const data = await client.fetch(query, { slug });
+ export default async function Page({slug}: {slug: string}) {
+ const query = defineQuery(`*[_type == "post" && slug.current == $slug][0]{title,content}`)
+ const data = await client.fetch(query, {slug})
- if (!data) return notFound();
+ if (!data) return notFound()
return (
{data.title}
- {Array.isArray(data.content) && (
-
- )}
+ {Array.isArray(data.content) && }
- );
+ )
}
```