UNPKG

rwsdk

Version:

Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime

41 lines (40 loc) 1.86 kB
import { resolve } from "node:path"; import { addOptimizeDepsPlugin } from "./addOptimizeDepsPlugin.mjs"; import { checkPrismaStatus } from "./checkIsUsingPrisma.mjs"; import { ensureAliasArray } from "./ensureAliasArray.mjs"; import { invalidateCacheIfPrismaClientChanged } from "./invalidateCacheIfPrismaClientChanged.mjs"; export const prismaPlugin = async ({ projectRootDir, }) => { if (!checkPrismaStatus({ projectRootDir }).isUsingPrisma) { return; } // context(justinvdm, 10 Mar 2025): We need to use vite optimizeDeps for all deps to work with @cloudflare/vite-plugin. // Thing is, @prisma/client has generated code. So users end up with a stale @prisma/client // when they change their prisma schema and regenerate the client, until clearing out node_modules/.vite // We can't exclude @prisma/client from optimizeDeps since we need it there for @cloudflare/vite-plugin to work. // But we can manually invalidate the cache if the prisma schema changes. await invalidateCacheIfPrismaClientChanged({ projectRootDir, }); return { name: "rwsdk:prisma", configEnvironment(name, config) { if (name !== "worker" || !process.env.VITE_IS_DEV_SERVER) { return; } const wasmPath = resolve(projectRootDir, "node_modules/.prisma/client/wasm.js"); const prismaFilter = /^.prisma\/client\/default/; addOptimizeDepsPlugin(config, { name: "rwsdk:prisma", resolveId(id) { if (prismaFilter.test(id)) { return wasmPath; } }, }); ensureAliasArray(config).push({ find: /^\.prisma\/client\/default/, replacement: wasmPath, }); }, }; };