UNPKG

payload

Version:

Node, React, Headless CMS and Application Framework built on Next.js

41 lines (40 loc) 1.88 kB
import { validOperatorSet } from '../types/constants.js'; /** * Validates that a "where" query is in a format in which the "where builder" can understand. * Even though basic queries are valid, we need to hoist them into the "and" / "or" format. * Use this function alongside `transformWhereQuery` to perform a transformation if the query is not valid. * @example * Inaccurate: [text][equals]=example%20post * Accurate: [or][0][and][0][text][equals]=example%20post */ export const validateWhereQuery = (whereQuery)=>{ if (whereQuery?.or && whereQuery?.or?.length > 0 && whereQuery?.or?.[0]?.and && whereQuery?.or?.[0]?.and?.length > 0) { // At this point we know that the whereQuery has 'or' and 'and' fields, // now let's check the structure and content of these fields. const isValid = whereQuery.or.every((orQuery)=>{ if (orQuery.and && Array.isArray(orQuery.and)) { return orQuery.and.every((andQuery)=>{ if (typeof andQuery !== 'object') { return false; } const andKeys = Object.keys(andQuery); // If there are no keys, it's not a valid WhereField. if (andKeys.length === 0) { return false; } for (const key of andKeys){ const operator = Object.keys(andQuery[key])[0]; // Check if the key is a valid Operator. if (!operator || !validOperatorSet.has(operator)) { return false; } } return true; }); } return false; }); return isValid; } return false; }; //# sourceMappingURL=validateWhereQuery.js.map