@dans98/prismabox
Version:
Typebox generator for prisma schema
38 lines (32 loc) • 1.14 kB
text/typescript
import type { DMMF } from "@prisma/generator-helper";
import { extractAnnotations } from "../annotations/annotations";
import { generateTypeboxOptions } from "../annotations/options";
import { getConfig } from "../config";
import type { ProcessedModel } from "../model";
import { makeUnion } from "./wrappers/union";
export const processedEnums: ProcessedModel[] = [];
export function processEnums(
enums: DMMF.DatamodelEnum[] | Readonly<DMMF.DatamodelEnum[]>,
) {
for (const e of enums) {
const stringRepresentation = stringifyEnum(e);
if (stringRepresentation) {
processedEnums.push({
name: e.name,
stringRepresentation,
});
}
}
Object.freeze(processedEnums);
}
export function stringifyEnum(data: DMMF.DatamodelEnum) {
const annotations = extractAnnotations(data.documentation);
if (annotations.isHidden) return undefined;
const variantsString = data.values.map(
(v) => `${getConfig().typeboxImportVariableName}.Literal('${v.name}')`,
);
return makeUnion(
variantsString,
generateTypeboxOptions({ input: annotations }),
);
}