@redwoodjs/sdk
Version: 
A full-stack webapp toolkit designed for TypeScript, Vite, and React Server Components
28 lines (27 loc) • 1.23 kB
JavaScript
import { resolve } from "node:path";
import { remove, pathExists } from "fs-extra";
import { stat } from "node:fs/promises";
export const invalidateCacheIfPrismaClientChanged = async ({ projectRootDir, }) => {
    const viteDepsCachePath = resolve(projectRootDir, "node_modules", ".vite", `deps_worker`, `@prisma_client.js`);
    // Get mtimes for comparison
    try {
        const schemaPath = resolve(projectRootDir, "prisma", "schema.prisma");
        if (!(await pathExists(schemaPath))) {
            return;
        }
        const [schemaStat, cacheStat] = await Promise.all([
            stat(schemaPath).catch(() => null),
            stat(viteDepsCachePath).catch(() => null),
        ]);
        // If schema exists and either cache doesn't exist or schema is newer
        if (schemaStat && (!cacheStat || schemaStat.mtime > cacheStat.mtime)) {
            // Clear the entire .vite cache directory
            await remove(resolve(projectRootDir, "node_modules", ".vite"));
            return;
        }
    }
    catch (error) {
        // If there's any error reading files, fall back to removing the entire .vite cache dir regardless
        await remove(resolve(projectRootDir, "node_modules", ".vite"));
    }
};