UNPKG

@tanstack/optimistic

Version:

Core optimistic updates library

147 lines (146 loc) 4.52 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const extractors = require("./extractors.cjs"); const utils = require("./utils.cjs"); function evaluateConditionOnNestedRow(nestedRow, condition, mainTableAlias, joinedTableAlias) { if (condition.length === 3 && !Array.isArray(condition[0])) { const [left, comparator, right] = condition; return evaluateSimpleConditionOnNestedRow( nestedRow, left, comparator, right, mainTableAlias, joinedTableAlias ); } if (condition.length > 3 && !Array.isArray(condition[0]) && typeof condition[1] === `string` && ![`and`, `or`].includes(condition[1])) { let result = evaluateSimpleConditionOnNestedRow( nestedRow, condition[0], condition[1], condition[2], mainTableAlias, joinedTableAlias ); for (let i = 3; i < condition.length; i += 4) { const logicalOp = condition[i]; if (i + 3 <= condition.length) { const nextResult = evaluateSimpleConditionOnNestedRow( nestedRow, condition[i + 1], condition[i + 2], condition[i + 3], mainTableAlias, joinedTableAlias ); if (logicalOp === `and`) { result = result && nextResult; } else { result = result || nextResult; } } } return result; } if (condition.length > 0 && Array.isArray(condition[0])) { let result = evaluateConditionOnNestedRow( nestedRow, condition[0], mainTableAlias, joinedTableAlias ); for (let i = 1; i < condition.length; i += 2) { if (i + 1 >= condition.length) break; const operator = condition[i]; const nextCondition = condition[i + 1]; if (operator === `and`) { result = result && evaluateConditionOnNestedRow( nestedRow, nextCondition, mainTableAlias, joinedTableAlias ); } else { result = result || evaluateConditionOnNestedRow( nestedRow, nextCondition, mainTableAlias, joinedTableAlias ); } } return result; } return true; } function evaluateSimpleConditionOnNestedRow(nestedRow, left, comparator, right, mainTableAlias, joinedTableAlias) { const leftValue = extractors.evaluateOperandOnNestedRow( nestedRow, left, mainTableAlias, joinedTableAlias ); const rightValue = extractors.evaluateOperandOnNestedRow( nestedRow, right, mainTableAlias, joinedTableAlias ); switch (comparator) { case `=`: return leftValue === rightValue; case `!=`: return leftValue !== rightValue; case `<`: return utils.compareValues(leftValue, rightValue, `<`); case `<=`: return utils.compareValues(leftValue, rightValue, `<=`); case `>`: return utils.compareValues(leftValue, rightValue, `>`); case `>=`: return utils.compareValues(leftValue, rightValue, `>=`); case `like`: case `not like`: if (typeof leftValue === `string` && typeof rightValue === `string`) { const pattern = utils.convertLikeToRegex(rightValue); const matches = new RegExp(`^${pattern}$`, `i`).test(leftValue); return comparator === `like` ? matches : !matches; } return comparator === `like` ? false : true; case `in`: if (!Array.isArray(rightValue)) { return false; } if (rightValue.length === 0) { return false; } if (Array.isArray(leftValue)) { return leftValue.some((item) => utils.isValueInArray(item, rightValue)); } return utils.isValueInArray(leftValue, rightValue); case `not in`: if (!Array.isArray(rightValue)) { return true; } if (rightValue.length === 0) { return true; } if (Array.isArray(leftValue)) { return !leftValue.some((item) => utils.isValueInArray(item, rightValue)); } return !utils.isValueInArray(leftValue, rightValue); case `is`: return leftValue === rightValue; case `is not`: if (rightValue === null) { return leftValue !== null && leftValue !== void 0; } return leftValue !== rightValue; default: return false; } } exports.evaluateConditionOnNestedRow = evaluateConditionOnNestedRow; exports.evaluateSimpleConditionOnNestedRow = evaluateSimpleConditionOnNestedRow; //# sourceMappingURL=evaluators.cjs.map