prisma-trpc-shield-generator
Version:
Prisma +2 generator to emit a tRPC shield from your Prisma schema
60 lines • 2.58 kB
JavaScript
;
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