Files
impost/example-app/server/utils/config.ts
Zoe cfab3d0b8f Initial commit
Once again a weird place to commit, I have already done a lot of work, but I am just bad at using git, okay.
2025-11-17 16:12:26 +00:00

43 lines
1.1 KiB
TypeScript

import { readFileSync } from 'fs';
import { load } from 'js-toml';
import z from 'zod';
import { ChallengeStrategy } from "@impost/lib";
const LeadingZeroesSchema = z.object({
strategy: z.literal(ChallengeStrategy.LeadingZeroes),
leading_zeroes: z.object({
difficulty: z.number().int().min(1).max(64),
}),
});
const TargetNumberSchema = z.object({
strategy: z.literal(ChallengeStrategy.TargetNumber),
target_number: z.object({
max_number: z.number().int().min(1).max(100_000),
}),
});
export type Config = z.infer<typeof Config>;
export const Config = z.discriminatedUnion('strategy', [
LeadingZeroesSchema,
TargetNumberSchema,
]);
export let config: Config;
try {
config = Config.parse(load(readFileSync('./config.toml', 'utf-8')));
} catch (error: any) {
if (error instanceof z.ZodError) {
console.error("Failed to parse config:");
for (const issue of error.issues) {
console.error(issue.message, issue.path);
}
} else {
console.error("Failed to parse config:", error);
}
process.exit(1);
}