prisma-zod-generator
Version:
Prisma 2+ generator to emit Zod schemas from your Prisma schema
76 lines • 4.3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.addMissingInputObjectTypes = addMissingInputObjectTypes;
exports.resolveAddMissingInputObjectTypeOptions = resolveAddMissingInputObjectTypeOptions;
const transformer_1 = __importDefault(require("../transformer"));
const aggregate_helpers_1 = require("./aggregate-helpers");
const include_helpers_1 = require("./include-helpers");
const modelArgs_helpers_1 = require("./modelArgs-helpers");
const mongodb_helpers_1 = require("./mongodb-helpers");
const select_helpers_1 = require("./select-helpers");
const whereUniqueInput_helpers_1 = require("./whereUniqueInput-helpers");
function addMissingInputObjectTypes(inputObjectTypes, outputObjectTypes, models, modelOperations, dataSourceProvider, options) {
const cfg = transformer_1.default.getGeneratorConfig();
const isMinimal = (cfg === null || cfg === void 0 ? void 0 : cfg.mode) === 'minimal';
// TODO: remove once Prisma fix this issue: https://github.com/prisma/prisma/issues/14900
if (dataSourceProvider === 'mongodb') {
(0, mongodb_helpers_1.addMissingInputObjectTypesForMongoDbRawOpsAndQueries)(modelOperations, outputObjectTypes, inputObjectTypes);
}
// Filter out fieldRefTypes from input types to avoid generating non-existent schemas
filterFieldRefTypes(inputObjectTypes);
// Filter aggregate input types based on model and operation filtering
if (!isMinimal) {
const filteredTypes = (0, aggregate_helpers_1.filterAggregateInputTypes)(inputObjectTypes);
inputObjectTypes.length = 0;
inputObjectTypes.push(...filteredTypes);
}
if (!isMinimal) {
(0, aggregate_helpers_1.addMissingInputObjectTypesForAggregate)(inputObjectTypes, outputObjectTypes);
}
if (!isMinimal && options.isGenerateSelect) {
(0, select_helpers_1.addMissingInputObjectTypesForSelect)(inputObjectTypes, outputObjectTypes, models);
transformer_1.default.setIsGenerateSelect(true);
}
if (!isMinimal && (options.isGenerateSelect || options.isGenerateInclude)) {
(0, modelArgs_helpers_1.addMissingInputObjectTypesForModelArgs)(inputObjectTypes, models, options.isGenerateSelect, options.isGenerateInclude);
}
if (!isMinimal && options.isGenerateInclude) {
(0, include_helpers_1.addMissingInputObjectTypesForInclude)(inputObjectTypes, models, options.isGenerateSelect);
transformer_1.default.setIsGenerateInclude(true);
}
(0, whereUniqueInput_helpers_1.changeOptionalToRequiredFields)(inputObjectTypes);
}
function filterFieldRefTypes(inputObjectTypes) {
// Filter out fieldRefTypes from input types following zod-prisma-types approach
// This prevents generation of non-existent FieldRefInput schemas
for (const inputType of inputObjectTypes) {
const fields = inputType.fields;
for (const field of fields) {
if (field.inputTypes.some((inputType) => inputType.location === 'fieldRefTypes')) {
// Replace the entire inputTypes array with just the first input type
// This removes the fieldRefTypes reference while preserving functionality
field.inputTypes = [
field.inputTypes[0],
];
}
}
}
}
function resolveAddMissingInputObjectTypeOptions(generatorConfigOptions) {
return {
isGenerateSelect: generatorConfigOptions.isGenerateSelect === 'true',
isGenerateInclude: generatorConfigOptions.isGenerateInclude === 'true',
exportTypedSchemas: generatorConfigOptions.exportTypedSchemas === undefined
? true
: generatorConfigOptions.exportTypedSchemas === 'true', // default true
exportZodSchemas: generatorConfigOptions.exportZodSchemas === undefined
? true
: generatorConfigOptions.exportZodSchemas === 'true', // default true
typedSchemaSuffix: generatorConfigOptions.typedSchemaSuffix || 'Schema', // default 'Schema'
zodSchemaSuffix: generatorConfigOptions.zodSchemaSuffix || 'ZodSchema', // default 'ZodSchema'
};
}
//# sourceMappingURL=helpers.js.map