next-sanity
Version:
Sanity.io toolkit for Next.js
97 lines • 2.95 kB
TypeScript
import { i as LivePerspective } from "./types.js";
import { cookies } from "next/headers";
import { SyncTag } from "@sanity/client";
/**
* This helper is intended for use with Next.js Cache Components (`cacheComponents: true`),
* where `cookies()` and `draftMode()` cannot be called inside `'use cache'` boundaries.
* Resolve the perspective once outside the cache boundary and pass it in as a prop / cache key.
*
* @example
* ```tsx
* import {cookies, draftMode} from 'next/headers'
* import {defineQuery} from 'next-sanity'
* import {resolvePerspectiveFromCookies, type LivePerspective} from 'next-sanity/live'
* import {sanityFetch, sanityFetchStaticParams} from '#sanity/live'
*
* export async function generateStaticParams() {
* const query = defineQuery(`*[_type == "page" && defined(slug.current)]{"slug": slug.current}`)
* return await sanityFetchStaticParams({query})
* }
*
* export default async function Page({params}: PageProps<'/[slug]'>) {
* const {isEnabled: isDraftMode} = await draftMode()
*
* if (isDraftMode) {
* return (
* <Suspense>
* <DynamicPage params={params} />
* </Suspense>
* )
* }
*
* const {slug} = await params
*
* return <CachedPage slug={slug} perspective="published" stega={false} />
* }
*
* async function DynamicPage({params}: Pick<PageProps<'/[slug]'>, 'params'>) {
* const {slug} = await params
* const perspective = await resolvePerspectiveFromCookies({cookies: await cookies()})
*
* return <CachedPage slug={slug} perspective={perspective} stega />
* }
*
* async function CachedPage({
* slug,
* perspective,
* stega,
* }: Awaited<PageProps<'/[slug]'>['params']> & {
* perspective: LivePerspective
* stega: boolean
* }) {
* 'use cache'
*
* const query = defineQuery(`*[_type == "page" && slug.current == $slug][0]`)
* const {data} = await sanityFetch({query, params: {slug}, perspective, stega})
*
* return <article>...</article>
* }
* ```
*
* @public
*/
declare function resolvePerspectiveFromCookies({
cookies: jar
}: {
cookies: Awaited<ReturnType<typeof cookies>>;
}): Promise<LivePerspective>;
declare const cacheTagPrefix: string;
interface ParsedTags {
tags: `${typeof cacheTagPrefix}${SyncTag}`[];
tagsWithoutPrefix: SyncTag[];
prefix: typeof cacheTagPrefix;
}
/**
* Prefixes live event tags according to the conventions used by `defineLive().sanityFetch()`
* so that they can be used with `import {updateTag} from 'next/cache'`.
*
* @example
* ```tsx
* import {updateTag} from 'next/cache'
* import {parseTags} from 'next-sanity/live'
* import {SanityLive} from '#sanity/live
*
* <SanityLive
* action={async (event, context) => {
* 'use server'
*
* for (const tag of parseTags(event.tags, context)) {
* updateTag(tag)
* }
* }}
* />
* ```
*/
declare function parseTags(unsafeTags: unknown): ParsedTags;
export { resolvePerspectiveFromCookies as n, parseTags as t };
//# sourceMappingURL=parseTags.d.ts.map