@dans98/prismabox
Version:
Typebox generator for prisma schema
50 lines (44 loc) • 1.64 kB
text/typescript
import { access, mkdir, rm } from "node:fs/promises";
import { generatorHandler } from "@prisma/generator-helper";
import { getConfig, setConfig } from "./config";
import { processEnums } from "./generators/enum";
import { processPlain } from "./generators/plain";
import { processPlainInput } from "./generators/plainInput";
import {
processRelations,
processRelationsInputCreate,
processRelationsInputUpdate,
} from "./generators/relations";
import { processWhere, processWhereUnique } from "./generators/where";
import { write } from "./writer";
generatorHandler({
onManifest() {
return {
defaultOutput: "./prismabox",
prettyName: "prismabox",
};
},
async onGenerate(options) {
setConfig({
...options.generator.config,
// for some reason, the output is an object with a value key
output: options.generator.output?.value,
});
try {
await access(getConfig().output);
await rm(getConfig().output, { recursive: true });
} catch (error) {}
await mkdir(getConfig().output, { recursive: true });
processEnums(options.dmmf.datamodel.enums);
processPlain(options.dmmf.datamodel.models);
processRelations(options.dmmf.datamodel.models);
processWhere(options.dmmf.datamodel.models);
processWhereUnique(options.dmmf.datamodel.models);
if (getConfig().inputModel) {
processPlainInput(options.dmmf.datamodel.models);
processRelationsInputCreate(options.dmmf.datamodel.models);
processRelationsInputUpdate(options.dmmf.datamodel.models);
}
await write();
},
});