mirror of
https://github.com/versia-pub/server.git
synced 2025-12-06 16:38:19 +01:00
51 lines
1.6 KiB
TypeScript
51 lines
1.6 KiB
TypeScript
/**
|
|
* @file config.ts
|
|
* @summary Config system to retrieve and modify system configuration
|
|
* @description Can read from a hand-written file, config.toml, or from a machine-saved file, config.internal.toml
|
|
* Fuses both and provides a way to retrieve individual values
|
|
*/
|
|
|
|
import { file } from "bun";
|
|
import { loadConfig, watchConfig } from "c12";
|
|
import chalk from "chalk";
|
|
import type { z } from "zod";
|
|
import { fromZodError } from "zod-validation-error";
|
|
import { ConfigSchema } from "./classes/config/schema.ts";
|
|
|
|
if (!(await file("config/config.toml").exists())) {
|
|
throw new Error("config.toml does not or is not accessible.");
|
|
}
|
|
|
|
const { config } = await watchConfig<z.infer<typeof ConfigSchema>>({
|
|
configFile: "./config/config.toml",
|
|
overrides:
|
|
(
|
|
await loadConfig<z.infer<typeof ConfigSchema>>({
|
|
configFile: "./config/config.internal.toml",
|
|
})
|
|
).config ?? undefined,
|
|
});
|
|
|
|
const parsed = await ConfigSchema.safeParseAsync(config);
|
|
|
|
if (!parsed.success) {
|
|
console.error(
|
|
`⚠ Error encountered while loading ${chalk.gray("config.toml")}.`,
|
|
);
|
|
console.error(
|
|
"⚠ This is due to invalid, missing or incorrect values in the configuration file.",
|
|
);
|
|
console.error(
|
|
"⚠ Here is the error message, please fix the configuration file accordingly:",
|
|
);
|
|
const errorMessage = fromZodError(parsed.error).message;
|
|
|
|
console.info(errorMessage);
|
|
|
|
throw new Error("Configuration file is invalid.");
|
|
}
|
|
|
|
const exportedConfig = parsed.data;
|
|
|
|
export { exportedConfig as config };
|