UNPKG

prisma-frontend

Version:

A Prisma generator for creating frontend-friendly exports (types and enums).

52 lines (51 loc) 2.28 kB
import { log } from '@augment-vir/common'; import generatorHelper from '@prisma/generator-helper'; import prismaInternals from '@prisma/internals'; import { resolve } from 'node:path'; import { readThisPackageJson } from '../util/package-file.js'; import { generate } from './generate.js'; import { waitForClientJs } from './wait-for-client-js.js'; /** * Registers the generator with Prisma so it can be triggered via a `prisma generate` command. * * @category Prisma Generator */ export function registerGenerator() { generatorHelper.generatorHandler({ onManifest() { return { /** * There's no way to convince Prisma to print a different output path other than * this default, so we just have to leave it as is even though the generator will be * much more intelligent about where to generate the output. */ defaultOutput: '-', requiresGenerators: ['prisma-client-js'], prettyName: 'Frontend Generator', version: readThisPackageJson().version, }; }, async onGenerate({ generator, otherGenerators, schemaPath }) { const jsGenerator = otherGenerators.find((generator) => generator.provider.value === 'prisma-client-js'); if (!jsGenerator) { throw new Error('Cannot use prisma-frontend generator without prisma-client-js generator.'); } else if (!jsGenerator.output) { throw new Error('Cannot find prisma-client-js output path.'); } const jsOutputDir = prismaInternals.parseEnvValue(jsGenerator.output); log.faint(`Waiting for JS client generation...`); const jsClientPath = await waitForClientJs(schemaPath, jsOutputDir); const frontendOutputDir = generator.isCustomOutput && generator.output ? prismaInternals.parseEnvValue(generator.output) : resolve(jsOutputDir, 'frontend'); try { await generate(jsClientPath, frontendOutputDir); } catch (error) { console.error(error); throw error; } }, }); }