import type { CacheHandler } from "next/dist/server/lib/cache-handlers/types"; import { RedisCacheHandler } from "./redis-handler"; let handlerPromise: Promise | undefined; const createHandlerAsync = async (): Promise => { const useRedis = process.env.REDIS_HOST || process.env.REDIS_IS_EXTERNAL === "true"; if (useRedis) return new RedisCacheHandler(); const { createDefaultCacheHandler } = await import("next/dist/server/lib/cache-handlers/default"); return createDefaultCacheHandler(32 * 1024 * 1024); }; const getHandler = (): Promise => (handlerPromise ??= createHandlerAsync()); export default { get: async (...args: Parameters) => (await getHandler()).get(...args), set: async (...args: Parameters) => (await getHandler()).set(...args), refreshTags: async () => (await getHandler()).refreshTags(), getExpiration: async (...args: Parameters) => (await getHandler()).getExpiration(...args), updateTags: async (...args: Parameters) => (await getHandler()).updateTags(...args), } satisfies CacheHandler;