- Remove `export const dynamic` from 4 routes (incompatible with cacheComponents) - Static import for redis-handler (Turbopack can't resolve relative dynamic imports) - Simplify redis-handler: Buffer.concat, NonNullable, single connect promise - Inline single-use helpers in integration-data-cache - Non-greedy SVG regex to prevent ReDoS - Inline getDevelopmentServiceAliases in next.config - Remove restating comments
25 lines
1.2 KiB
TypeScript
25 lines
1.2 KiB
TypeScript
import type { CacheHandler } from "next/dist/server/lib/cache-handlers/types";
|
|
|
|
import { RedisCacheHandler } from "./redis-handler";
|
|
|
|
let handlerPromise: Promise<CacheHandler> | undefined;
|
|
|
|
const createHandlerAsync = async (): Promise<CacheHandler> => {
|
|
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<CacheHandler> => (handlerPromise ??= createHandlerAsync());
|
|
|
|
export default {
|
|
get: async (...args: Parameters<CacheHandler["get"]>) => (await getHandler()).get(...args),
|
|
set: async (...args: Parameters<CacheHandler["set"]>) => (await getHandler()).set(...args),
|
|
refreshTags: async () => (await getHandler()).refreshTags(),
|
|
getExpiration: async (...args: Parameters<CacheHandler["getExpiration"]>) =>
|
|
(await getHandler()).getExpiration(...args),
|
|
updateTags: async (...args: Parameters<CacheHandler["updateTags"]>) => (await getHandler()).updateTags(...args),
|
|
} satisfies CacheHandler;
|