Scaffold monorepo dev setup

This commit is contained in:
dirtydishes 2025-12-27 18:45:26 -05:00
commit d2a09e095a
47 changed files with 1033 additions and 0 deletions

View file

@ -0,0 +1,34 @@
import { z } from "zod";
export class EnvError extends Error {
readonly issues: z.ZodIssue[];
constructor(message: string, issues: z.ZodIssue[]) {
super(message);
this.name = "EnvError";
this.issues = issues;
}
}
const formatIssues = (issues: z.ZodIssue[]): string => {
return issues
.map((issue) => {
const path = issue.path.length > 0 ? issue.path.join(".") : "<root>";
return `${path}: ${issue.message}`;
})
.join("; ");
};
export const readEnv = <T extends z.ZodTypeAny>(
schema: T,
env: Record<string, string | undefined> = Bun.env
): z.infer<T> => {
const result = schema.safeParse(env);
if (!result.success) {
const details = formatIssues(result.error.issues);
throw new EnvError(`Invalid environment: ${details}`, result.error.issues);
}
return result.data;
};

View file

@ -0,0 +1 @@
export * from "./env";