in packages/cli/src/utils/get-config.ts [89:218]
export async function getConfig({
cwd,
configPath,
shouldThrowOnError = false,
}: {
cwd: string;
configPath?: string;
shouldThrowOnError?: boolean;
}) {
try {
let configFile: BetterAuthOptions | null = null;
if (configPath) {
let resolvedPath: string = path.join(cwd, configPath);
if (existsSync(configPath)) resolvedPath = configPath; // If the configPath is a file, use it as is, as it means the path wasn't relative.
const { config } = await loadConfig<{
auth: {
options: BetterAuthOptions;
};
default?: {
options: BetterAuthOptions;
};
}>({
configFile: resolvedPath,
dotenv: true,
jitiOptions: jitiOptions(cwd),
});
if (!config.auth && !config.default) {
if (shouldThrowOnError) {
throw new Error(
`Couldn't read your auth config in ${resolvedPath}. Make sure to default export your auth instance or to export as a variable named auth.`,
);
}
logger.error(
`[#better-auth]: Couldn't read your auth config in ${resolvedPath}. Make sure to default export your auth instance or to export as a variable named auth.`,
);
process.exit(1);
}
configFile = config.auth?.options || config.default?.options || null;
}
if (!configFile) {
for (const possiblePath of possiblePaths) {
try {
const { config } = await loadConfig<{
auth: {
options: BetterAuthOptions;
};
default?: {
options: BetterAuthOptions;
};
}>({
configFile: possiblePath,
jitiOptions: jitiOptions(cwd),
});
const hasConfig = Object.keys(config).length > 0;
if (hasConfig) {
configFile =
config.auth?.options || config.default?.options || null;
if (!configFile) {
if (shouldThrowOnError) {
throw new Error(
"Couldn't read your auth config. Make sure to default export your auth instance or to export as a variable named auth.",
);
}
logger.error("[#better-auth]: Couldn't read your auth config.");
console.log("");
logger.info(
"[#better-auth]: Make sure to default export your auth instance or to export as a variable named auth.",
);
process.exit(1);
}
break;
}
} catch (e) {
if (
typeof e === "object" &&
e &&
"message" in e &&
typeof e.message === "string" &&
e.message.includes(
"This module cannot be imported from a Client Component module",
)
) {
if (shouldThrowOnError) {
throw new Error(
`Please remove import 'server-only' from your auth config file temporarily. The CLI cannot resolve the configuration with it included. You can re-add it after running the CLI.`,
);
}
logger.error(
`Please remove import 'server-only' from your auth config file temporarily. The CLI cannot resolve the configuration with it included. You can re-add it after running the CLI.`,
);
process.exit(1);
}
if (shouldThrowOnError) {
throw e;
}
logger.error("[#better-auth]: Couldn't read your auth config.", e);
process.exit(1);
}
}
}
return configFile;
} catch (e) {
if (
typeof e === "object" &&
e &&
"message" in e &&
typeof e.message === "string" &&
e.message.includes(
"This module cannot be imported from a Client Component module",
)
) {
if (shouldThrowOnError) {
throw new Error(
`Please remove import 'server-only' from your auth config file temporarily. The CLI cannot resolve the configuration with it included. You can re-add it after running the CLI.`,
);
}
logger.error(
`Please remove import 'server-only' from your auth config file temporarily. The CLI cannot resolve the configuration with it included. You can re-add it after running the CLI.`,
);
process.exit(1);
}
if (shouldThrowOnError) {
throw e;
}
logger.error("Couldn't read your auth config.", e);
process.exit(1);
}
}