Cascade Multi-File Refactoring Pattern
Cascade multi-file refactoring pattern for coordinated changes across authentication files
// Cascade Pattern: Multi-File Authentication Refactoring
// 1. Select multiple files: lib/auth.ts, app/api/auth/route.ts, components/login-form.tsx
// 2. Open Cascade (Cmd/Ctrl+K)
// 3. Prompt: "Refactor authentication to use better-auth v1.3.9 instead of NextAuth.
// Maintain all existing functionality, update types, and ensure backward compatibility."
// Before: lib/auth.ts (NextAuth)
import NextAuth from 'next-auth';
import { authOptions } from '@/lib/auth/options';
export const { handlers, signIn, signOut, auth } = NextAuth(authOptions);
// After: lib/auth.ts (better-auth) - Cascade generates
import { betterAuth } from 'better-auth';
import { prismaAdapter } from 'better-auth/adapters/prisma';
import { prisma } from '@/lib/db';
export const auth = betterAuth({
database: prismaAdapter(prisma, {
provider: 'postgresql',
}),
emailAndPassword: {
enabled: true,
},
socialProviders: {
github: {
clientId: process.env.GITHUB_CLIENT_ID!,
clientSecret: process.env.GITHUB_CLIENT_SECRET!,
},
},
});
export const { signIn, signOut } = auth;
// Cascade automatically updates: app/api/auth/route.ts
import { auth } from '@/lib/auth';
export async function GET(request: Request) {
const session = await auth.api.getSession({ headers: request.headers });
return Response.json({ session });
}
// Cascade automatically updates: components/login-form.tsx
import { auth } from '@/lib/auth';
export function LoginForm() {
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
const formData = new FormData(e.currentTarget);
await auth.signIn.email({
email: formData.get('email') as string,
password: formData.get('password') as string,
});
};
return <form onSubmit={handleSubmit}>...</form>;
}