"use strict"; const either = require("@validatem/either"); const arrayOf = require("@validatem/array-of"); const tagAsType = require("../tag-as-type"); module.exports = function (operations) { const isObjectType = require("./is-object-type")(operations); const isExpressionList = require("./is-expression-list")(operations); const isConditionList = require("./is-condition-list")(operations); const isWhereObjectList = require("./is-where-object-list")(operations); const isConditionValue = require("./is-condition-value")(operations); return either([ // Boolean AND/OR [ isExpressionList, tagAsType("expressions") ], // Combine (JOIN) // FIXME? // ... // Value-expression-only conditions (eg. `moreThan(anyOf(...))`) [ either([ arrayOf(isConditionValue), isObjectType("placeholder"), // for dynamically specified array of values isObjectType("sqlExpression"), // FIXME: Verify that this should be treated as a value, not an expression ]), tagAsType("values") ], // Multiple-choice conditions [ isWhereObjectList, tagAsType("expressions") ], [ isConditionList, tagAsType("conditions") ], ]); };