UNPKG

json-api-nestjs

Version:
51 lines 2.05 kB
"use strict"; 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