@dans98/prismabox
Version:
Typebox generator for prisma schema
72 lines (59 loc) • 1.98 kB
text/typescript
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");
}