import * as schema from './schema' // make this point to your schema file import { PgEnum, PgTableWithColumns } from 'drizzle-orm/pg-core' import { createInsertSchema, createSelectSchema } from 'drizzle-zod' import { z } from 'zod' type ExtractPgTableKeys = { [K in keyof T]: T[K] extends PgTableWithColumns ? K : never }[keyof T] export const selects = Object.fromEntries( Object.entries(schema) .map(([key, table]) => '$inferSelect' in table ? [ key, createSelectSchema(table as any) .strict() .describe(`Fields for ${key}.`), ] : null ) .filter(Boolean) as any ) as { [key in ExtractPgTableKeys]: ReturnType< typeof createSelectSchema<(typeof schema)[key]> > } export const inserts = Object.fromEntries( Object.entries(schema) .map(([key, table]) => '$inferInsert' in table ? [ key, createInsertSchema(table as any) .describe(`Insert for ${key}.`) .strict(), ] : null ) .filter(Boolean) as any ) as { [key in ExtractPgTableKeys]: ReturnType< typeof createInsertSchema<(typeof schema)[key]> > } export const enums = Object.fromEntries( Object.entries(schema) .map(([key, enums]) => ('enumValues' in enums ? [key, z.enum(enums.enumValues)] : null)) .filter(Boolean) as any ) as { [key in ExtractPgEnumKeys]: Zod.ZodEnum<(typeof schema)[key]['enumValues']> }