UNPKG

prisma-criteria

Version:

Parses, validates, and creates a criteria object that can be passed to the Prisma "findMany" method to query a list of resources matching the given filters, pagination and order.

49 lines 2.18 kB
import { checkScalarOperator } from './scalar-operator-check.js'; import { checkLogicOperator } from './logic-operator-check.js'; import { checkValue } from './value-check.js'; import { isValidationErr } from '../../shared/validation.util.js'; import { checkRelationalFilter } from './relational-filter-check.js'; export const isIntendedToBeARelationalFilter = (filterRule) => { return filterRule.relation !== undefined && filterRule.relationField !== undefined && filterRule.relationSide !== undefined; }; export const validateFilters = (filterProspects, filterRules) => { const evaluateFilterProspect = (filterProspect) => { if (filterProspect.field === undefined) return false; const filterRule = filterRules .find((fR) => fR.field === filterProspect.field); if (filterRule === undefined) return false; if (isIntendedToBeARelationalFilter(filterRule)) { const relationalFilterCheckResult = checkRelationalFilter(filterProspect, filterRule.relationSide); if (!relationalFilterCheckResult) return false; } else if (filterProspect.relationalFilter !== undefined) return false; const scalarOperatorCheckResult = checkScalarOperator(filterProspect, filterRule.expectedType); if (!scalarOperatorCheckResult) return false; const logicOperatorCheckResult = checkLogicOperator(filterProspect); if (!logicOperatorCheckResult) return false; const valueCheckResult = checkValue(filterProspect, filterRule); if (isValidationErr(valueCheckResult)) return false; return { field: filterProspect.field, logicOperator: filterProspect.logicOperator, relationFilter: filterProspect.relationalFilter, operator: filterProspect.operator, value: valueCheckResult.ok, prismaRules: filterRule }; }; const validFilters = filterProspects .map(evaluateFilterProspect) .filter(Boolean); return validFilters; }; //# sourceMappingURL=index.js.map