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
JavaScript
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