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.
33 lines • 1.67 kB
JavaScript
import { PRISMA_COMMON_LIST_OPERATORS } from './consts.js';
import { POSTGRES_VALIDATIONS_AND_TRANSFORMATIONS } from './data-type-validations/postgres-validations-and-transformations.js';
import { isValidationOk, validationError, validationOk } from '../../shared/validation.util.js';
export const validateValue = (value, expectedType) => {
if (value.trim() === '')
return validationError(undefined);
if (!(expectedType in POSTGRES_VALIDATIONS_AND_TRANSFORMATIONS))
return validationError(undefined); // TODO - Logger Instead of this
return POSTGRES_VALIDATIONS_AND_TRANSFORMATIONS[expectedType](value);
};
export function checkValue(filterProspect, filterRule) {
const { value, operator } = filterProspect;
const { expectedType } = filterRule;
if (operator === undefined)
return validationError(undefined);
const isOperatorAListOperator = PRISMA_COMMON_LIST_OPERATORS
.includes(operator);
const isASingleValueFilter = typeof value === 'string' && !isOperatorAListOperator;
if (isASingleValueFilter)
return validateValue(value, expectedType);
const isAListValueFilter = value instanceof Array && isOperatorAListOperator;
if (!isAListValueFilter)
return validationError(undefined);
const validatedValueResults = value.map((val) => {
return validateValue(val, expectedType);
});
const isAListOfTheExpectedType = validatedValueResults
.every(res => isValidationOk(res));
if (!isAListOfTheExpectedType)
return validationError(undefined);
return validationOk(validatedValueResults.map(res => res.ok));
}
//# sourceMappingURL=value-check.js.map