UNPKG

prisma-trpc-shield-generator

Version:

Prisma +2 generator to emit a tRPC shield from your Prisma schema

60 lines 2.58 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generate = generate; const internals_1 = require("@prisma/internals"); const fs_1 = require("fs"); const path_1 = __importDefault(require("path")); const config_1 = require("./config"); const helpers_1 = require("./helpers"); const removeDir_1 = __importDefault(require("./utils/removeDir")); const writeFileSafely_1 = require("./utils/writeFileSafely"); async function generate(options) { const outputDir = (0, internals_1.parseEnvValue)(options.generator.output); const results = config_1.configSchema.safeParse(options.generator.config); if (!results.success) throw new Error('Invalid options passed'); const config = results.data; await fs_1.promises.mkdir(outputDir, { recursive: true }); await (0, removeDir_1.default)(outputDir, true); const prismaClientProvider = options.otherGenerators.find((it) => (0, internals_1.parseEnvValue)(it.provider) === 'prisma-client-js'); const prismaClientDmmf = await (0, internals_1.getDMMF)({ datamodel: options.datamodel, previewFeatures: prismaClientProvider === null || prismaClientProvider === void 0 ? void 0 : prismaClientProvider.previewFeatures, }); const queries = []; const mutations = []; const subscriptions = []; prismaClientDmmf.mappings.modelOperations.forEach((modelOperation) => { const { model, plural, ...operations } = modelOperation; for (const [opType, opNameWithModel] of Object.entries(operations)) { if ([ 'findUnique', 'findFirst', 'findMany', 'aggregate', 'groupBy', ].includes(opType)) { queries.push(opNameWithModel); } if ([ 'createOne', 'deleteOne', 'updateOne', 'deleteMany', 'updateMany', 'upsertOne', ].includes(opType)) { mutations.push(opNameWithModel); } } }); queries.sort(); mutations.sort(); subscriptions.sort(); const shieldText = (0, helpers_1.constructShield)({ queries, mutations, subscriptions }, config, options); await (0, writeFileSafely_1.writeFileSafely)(path_1.default.join(outputDir, 'shield.ts'), shieldText); } //# sourceMappingURL=prisma-generator.js.map