import type { CollectionAfterChangeHook, CollectionAfterDeleteHook } from 'payload'; import type { I18nConfig } from '../i18n/index.js'; type RevalidateFn = (path: string) => void; type BuildRevalidateHookArgs = { config: I18nConfig; /** Home slug (string or per-locale map) — home revalidates the root. */ homeSlug?: Record | string; /** * next/cache revalidatePath, INJECTED by the project. The plugin never imports * next/cache itself — that would crash when Payload runs as plain Node * (generate:importmap). The project passes it: `revalidatePath` from 'next/cache'. */ revalidatePath: RevalidateFn; }; /** * Builds afterChange + afterDelete hooks that revalidate a page's ISR cache when * an editor saves or deletes it — so changes appear immediately instead of * waiting for the revalidate window. Without this, ISR means editors wait; with * it, ISR is usable for a CMS. * * Handles every locale, the root (home), AND a changed slug (revalidates both the * old and new path so neither goes stale). revalidatePath is injected — the * plugin never imports next/cache (safe under generate:importmap / plain Node). * * // in your Media/Pages collection config, from a project file that CAN import next/cache: * import { revalidatePath } from 'next/cache' * import { buildRevalidateHook } from '@intecion/ipal-kit' * const { afterChange, afterDelete } = buildRevalidateHook({ revalidatePath, config: i18nConfig }) * // hooks: { afterChange: [afterChange], afterDelete: [afterDelete] } */ export declare function buildRevalidateHook({ config, homeSlug, revalidatePath, }: BuildRevalidateHookArgs): { afterChange: CollectionAfterChangeHook; afterDelete: CollectionAfterDeleteHook; }; export {};