prisma-docs-generator
Version:
Documentation reference generator for Prisma Schema
54 lines (48 loc) • 1.48 kB
text/typescript
import { generatorHandler } from '@prisma/generator-helper';
import HTMLPrinter from './printer';
import transformDMMF from './generator/transformDMMF';
import * as fs from 'fs';
import * as path from 'path';
generatorHandler({
onManifest() {
return {
defaultOutput: './docs',
prettyName: 'Prisma Docs Generator',
};
},
async onGenerate(options) {
const { config } = options.generator;
const includeRelationFields = config.includeRelationFields === 'false' ? false : true;
const dmmf = transformDMMF(options.dmmf, {
includeRelationFields,
});
const html = new HTMLPrinter(dmmf);
const output = options.generator.output?.value;
if (output) {
const styleFile = await fs.promises.readFile(
path.join(__dirname, 'styles', 'main.css')
);
try {
await fs.promises.mkdir(output, {
recursive: true,
});
await fs.promises.mkdir(path.join(output, 'styles'), {
recursive: true,
});
await fs.promises.writeFile(
path.join(output, 'index.html'),
html.toHTML()
);
await fs.promises.writeFile(
path.join(output, 'styles', 'main.css'),
styleFile
);
} catch (e) {
console.error('Error: unable to write files for Prisma Docs Generator');
throw e;
}
} else {
throw new Error('No output was specified for Prisma Docs Generator');
}
},
});