Initial commit
This commit is contained in:
47
src/config.ts
Normal file
47
src/config.ts
Normal file
@ -0,0 +1,47 @@
|
||||
import "dotenv/config";
|
||||
import z, { ZodError, ZodIssueCode } from "zod";
|
||||
|
||||
function parseJsonSafe(path: string) {
|
||||
return (value: unknown) => {
|
||||
try {
|
||||
return JSON.parse(String(value));
|
||||
} catch {
|
||||
throw new ZodError([
|
||||
{
|
||||
code: ZodIssueCode.custom,
|
||||
path: [path],
|
||||
fatal: true,
|
||||
message: "Invalid JSON",
|
||||
},
|
||||
]);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const configSchema = z.object({
|
||||
NODE_ENV: z.enum(["development", "production"]),
|
||||
LOG_LEVEL: z
|
||||
.enum(["trace", "debug", "info", "warn", "error", "fatal", "silent"])
|
||||
.default("info"),
|
||||
BOT_TOKEN: z.string(),
|
||||
BOT_ADMIN_USER_ID: z
|
||||
.preprocess(
|
||||
parseJsonSafe("BOT_ADMIN_USER_ID"),
|
||||
z.array(z.coerce.number().safe()).or(z.coerce.number().safe()),
|
||||
)
|
||||
.transform((v) => (Array.isArray(v) ? v : [v]))
|
||||
.default([]),
|
||||
});
|
||||
|
||||
const parseConfig = (environment: NodeJS.ProcessEnv) => {
|
||||
const config = configSchema.parse(environment);
|
||||
|
||||
return {
|
||||
...config,
|
||||
isDev: process.env.NODE_ENV === "development",
|
||||
isProd: process.env.NODE_ENV === "production",
|
||||
};
|
||||
};
|
||||
|
||||
export type Config = ReturnType<typeof parseConfig>;
|
||||
export const config = parseConfig(process.env);
|
Reference in New Issue
Block a user