rwsdk
Version:
Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime
41 lines (40 loc) • 1.86 kB
JavaScript
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,
});
},
};
};