@zpg6-test-pkgs/better-auth
Version:
The most comprehensive authentication library for TypeScript.
110 lines (107 loc) • 3.15 kB
JavaScript
'use strict';
const adapterRouter = (config) => {
return (options) => {
const fallbackAdapter = config.fallbackAdapter(options);
const getAdapterForModel = async (model, operation, data) => {
const routes = config.routes || [];
for (let i = 0; i < routes.length; i++) {
const routeCallback = routes[i];
const adapter = await routeCallback({
modelName: model,
data,
operation,
fallbackAdapter
});
if (adapter) {
if (config.debugLogs) {
console.log(
`[AdapterRouter] Route ${i} matched for model "${model}": ${adapter.name}`
);
}
return adapter(options);
}
}
if (config.debugLogs) {
console.log(
`[AdapterRouter] Using fallback adapter for model "${model}": ${fallbackAdapter.id}`
);
}
return fallbackAdapter;
};
return {
id: "adapter-router",
create: async (data) => {
const adapter = await getAdapterForModel(
data.model,
"create",
data.data
);
return await adapter.create(data);
},
findOne: async (data) => {
const adapter = await getAdapterForModel(
data.model,
"findOne",
data.where
);
return await adapter.findOne(data);
},
findMany: async (data) => {
const adapter = await getAdapterForModel(
data.model,
"findMany",
data.where
);
return await adapter.findMany(data);
},
count: async (data) => {
const adapter = await getAdapterForModel(data.model, "count");
return await adapter.count(data);
},
update: async (data) => {
const adapter = await getAdapterForModel(data.model, "update", {
where: data.where,
update: data.update
});
return await adapter.update(data);
},
updateMany: async (data) => {
const adapter = await getAdapterForModel(data.model, "updateMany", {
where: data.where,
update: data.update
});
return await adapter.updateMany(data);
},
delete: async (data) => {
const adapter = await getAdapterForModel(
data.model,
"delete",
data.where
);
return await adapter.delete(data);
},
deleteMany: async (data) => {
const adapter = await getAdapterForModel(
data.model,
"deleteMany",
data.where
);
return await adapter.deleteMany(data);
},
createSchema: async (options2, file) => {
if (fallbackAdapter.createSchema) {
return await fallbackAdapter.createSchema(options2, file);
}
throw new Error(
"[AdapterRouter] Fallback adapter does not support schema creation"
);
},
options: {
fallbackAdapter: config.fallbackAdapter,
routes: config.routes,
debugLogs: config.debugLogs
}
};
};
};
exports.adapterRouter = adapterRouter;