svelte-guardian
Version:
Batteries included authentication for SvelteKit applications.
71 lines (70 loc) • 2.65 kB
JavaScript
import { optionalImport } from './utils';
// Adapter creation utility
export const createDatabaseAdapter = async (config) => {
if (!config)
return null;
switch (config.type) {
case 'prisma': {
const { PrismaAdapter } = await optionalImport('@auth/prisma-adapter');
return PrismaAdapter(config.client);
}
case 'custom':
return config.adapter;
case 'drizzle': {
const { DrizzleAdapter } = await optionalImport('@auth/drizzle-adapter');
return DrizzleAdapter(config.client, config.schema);
}
case 'mongodb': {
const { MongoDBAdapter } = await optionalImport('@auth/mongodb-adapter');
return MongoDBAdapter(config.client, {
databaseName: config.databaseName
});
}
case 'postgres': {
const { PostgresAdapter } = await optionalImport('@auth/pg-adapter');
return PostgresAdapter(config.client);
}
case 'mysql': {
const { MySQLAdapter } = await optionalImport('@auth/mysql-adapter');
return MySQLAdapter(config.client);
}
case 'sqlite': {
const { SQLiteAdapter } = await optionalImport('@auth/sqlite-adapter');
return SQLiteAdapter(config.client);
}
case 'supabase': {
const { SupabaseAdapter } = await optionalImport('@auth/supabase-adapter');
return SupabaseAdapter(config.url, config.secret);
}
default:
throw new Error(`Unsupported database adapter: ${config.type}`);
}
};
// TODO Implement Database connection utility
export const getUserByCustomIdentifier = async (config, customField, identifier) => {
if (!config)
throw new Error('Database configuration is required');
if (!identifier)
return null;
let user = {};
switch (config.type) {
case 'prisma':
user = await config.client.user.findUnique({ where: { [customField]: identifier } });
console.log(user);
return user;
//For now, user has to supply getUserByCustomIdentifier function.
case 'custom':
user = await config.getUserByCustomIdentifier?.(identifier);
console.log(user);
return user;
//TODO Implement for these adapters
// case 'drizzle':
// case 'mongodb':
// case 'postgres':
// case 'mysql':
// case 'sqlite':
// case 'supabase':
default:
throw new Error(`Unsupported database adapter: ${config.type}`);
}
};