UNPKG

@dans98/prismabox

Version:

Typebox generator for prisma schema

72 lines (59 loc) 1.98 kB
import { getConfig } from "../config"; const PrimitiveFields = [ "Int", "BigInt", "Float", "Decimal", "String", "DateTime", "Json", "Boolean", "Bytes", ] as const; export type PrimitivePrismaFieldType = (typeof PrimitiveFields)[number]; export function isPrimitivePrismaFieldType( str: string, ): str is PrimitivePrismaFieldType { // biome-ignore lint/suspicious/noExplicitAny: we want to check if the string is a valid primitive field return PrimitiveFields.includes(str as any); } export function stringifyPrimitiveType({ fieldType, options, }: { fieldType: PrimitivePrismaFieldType; options: string; }) { if (["Int", "BigInt"].includes(fieldType)) { return `${getConfig().typeboxImportVariableName}.Integer(${options})`; } if (["Float", "Decimal"].includes(fieldType)) { return `${getConfig().typeboxImportVariableName}.Number(${options})`; } if (fieldType === "String") { return `${getConfig().typeboxImportVariableName}.String(${options})`; } if (["DateTime"].includes(fieldType)) { const config = getConfig(); let opts = options; if (config.useJsonTypes) { if (opts.includes("{") && opts.includes("}")) { opts = opts.replace("{", "{ type: 'string', format: 'date-time', "); } else { opts = `{ type: 'string', format: 'date-time' }`; } return `${config.typeboxImportVariableName}.Unsafe<Date>(${opts})`; } return `${getConfig().typeboxImportVariableName}.Date(${options})`; } if (fieldType === "Json") { return `${getConfig().typeboxImportVariableName}.Any(${options})`; } if (fieldType === "Boolean") { return `${getConfig().typeboxImportVariableName}.Boolean(${options})`; } if (fieldType === "Bytes") { return `${getConfig().typeboxImportVariableName}.Uint8Array(${options})`; } throw new Error("Invalid type for primitive generation"); }