json-api-nestjs
Version:
JsonApi Plugin for NestJs
51 lines • 2.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.zodRelationships = zodRelationships;
const zod_1 = require("zod");
const nestjs_shared_1 = require("../../../../utils/nestjs-shared");
const rel_data_1 = require("./rel-data");
const zod_utils_1 = require("../zod-utils");
function getZodRuleForData(typeName, primaryType, isPatch) {
if (isPatch) {
return (0, rel_data_1.zodRelData)(typeName, primaryType).nullable();
}
return (0, rel_data_1.zodRelData)(typeName, primaryType);
}
function getZodRuleForArrayData(typeName, primaryType, isPatch) {
const dataArraySchema = getZodRuleForData(typeName, primaryType, false).array();
if (isPatch) {
return dataArraySchema;
}
return dataArraySchema.nonempty();
}
function getZodDataShape(typeName, primaryType, isArray, isPatch) {
return isArray
? getZodRuleForArrayData(typeName, primaryType, isPatch)
: getZodRuleForData(typeName, primaryType, isPatch);
}
function getZodResultData(typeName, primaryType, isPatch) {
return zod_1.z
.object({
data: getZodDataShape(typeName, primaryType, false, isPatch),
})
.optional();
}
function getZodResultDataArray(typeName, primaryType, isPatch) {
return zod_1.z
.object({
data: getZodDataShape(typeName, primaryType, true, isPatch),
})
.optional();
}
function zodRelationships(relationArrayProps, relationPopsName, primaryColumnType, isPatch) {
const shape = {};
for (const [props, value] of nestjs_shared_1.ObjectTyped.entries(relationArrayProps)) {
const typeName = (0, nestjs_shared_1.camelToKebab)(relationPopsName[props]);
const primaryType = primaryColumnType[props];
shape[props] = (value === true
? getZodResultDataArray(typeName, primaryType, isPatch)
: getZodResultData(typeName, primaryType, isPatch));
}
return zod_1.z.object(shape).strict().refine((0, zod_utils_1.nonEmptyObject)());
}
//# sourceMappingURL=relationships.js.map