UNPKG

@invisiblecities/sanity-edge-fetcher

Version:

Lightweight, Edge Runtime-compatible Sanity client for Next.js and Vercel Edge Functions

121 lines (115 loc) 4.07 kB
import { E as EdgeSanityFetchOptions, Q as QueryParams } from './core-zsRjuWVw.cjs'; export { S as StegaConfig, h as buildStegaConfig, g as createEdgeSanityFetcher, s as default, e as detectStegaRequest, f as edgeSanityFetch, s as sanityFetch, c as sanityFetchAuthenticated, d as sanityFetchHybrid, b as sanityFetchStatic, a as sanityFetchWithFallback, i as shouldEnableStega, j as stegaClean } from './core-zsRjuWVw.cjs'; /** * @file enhanced.ts * @description Enhanced Sanity fetcher with retry and real-time capabilities * @author Invisible Cities Agency * @license MIT */ /** * Fetches data from Sanity with automatic retry support * Falls back to single attempt if p-retry not installed */ declare function edgeSanityFetchWithRetry<T>(options: EdgeSanityFetchOptions, retryOptions?: { retries?: number; minTimeout?: number; maxTimeout?: number; }): Promise<T>; /** * Creates a cached Sanity fetcher * Note: Use cachedSanityFetch from cache.ts for full caching support */ declare function createCachedSanityFetcher(dataset: string, _revalidate?: number, _tags?: string[]): <T>(query: string, params?: QueryParams) => Promise<T>; /** * Creates an EventSource connection for real-time Sanity updates * Requires a server endpoint to handle SSE (see examples/vercel-sse.ts) */ declare function createSanityEventSource(query: string, dataset?: string, options?: { endpoint?: string; onMessage?: (data: unknown) => void; onError?: (error: Event) => void; }): EventSource; /** * Result type for batch fetching */ type BatchResult<T extends Record<string, unknown>> = { [K in keyof T]: T[K] | null; }; /** * Batch fetcher for multiple queries in a single request * Reduces API calls and improves performance */ declare function batchSanityFetch<T extends Record<string, unknown>>(queries: Record<string, { query: string; params?: QueryParams; }>, dataset: string, options?: { useAuth?: boolean; useCdn?: boolean; }): Promise<BatchResult<T>>; /** * @file cache.ts * @description Multi-layer caching for Sanity Edge Fetcher * @author Invisible Cities Agency * @license MIT */ interface CachedFetchOptions extends EdgeSanityFetchOptions { /** Cache configuration */ cache?: { /** Time to live in seconds */ ttl?: number; /** Cache key prefix */ prefix?: string; /** Force cache refresh */ force?: boolean; /** Enable Redis caching if available */ useRedis?: boolean; /** Enable Next.js cache */ useNextCache?: boolean; }; } /** * Fetches data from Sanity with multi-layer caching * * Cache layers (in order): * 1. In-memory LRU cache (fastest, ~1ms) * 2. Upstash Redis (if configured, ~10-30ms) * 3. Origin fetch with Next.js cache */ declare function cachedSanityFetch<T>(options: CachedFetchOptions): Promise<T>; /** * Create a cached fetcher with default options */ declare function createCachedFetcher(dataset: string, defaultCacheOptions?: CachedFetchOptions['cache']): <T>(query: string, params?: QueryParams, cacheOverrides?: CachedFetchOptions["cache"]) => Promise<T>; /** * Clear caches for a specific dataset or pattern */ declare function clearSanityCache(options?: { dataset?: string; pattern?: string; clearMemory?: boolean; clearRedis?: boolean; }): Promise<void>; /** * Warm cache by pre-fetching common queries */ declare function warmSanityCache(queries: Array<{ dataset: string; query: string; params?: QueryParams; ttl?: number; }>): Promise<void>; declare function getCacheStatus(): { memory: { available: boolean; size: number; }; redis: { available: boolean; configured: boolean; url: string | null; }; nextCache: { available: boolean; }; }; export { EdgeSanityFetchOptions, QueryParams, batchSanityFetch, cachedSanityFetch, clearSanityCache, createCachedFetcher, createCachedSanityFetcher, createSanityEventSource, edgeSanityFetchWithRetry, getCacheStatus, warmSanityCache };