"use strict"; const { validateArguments } = require("@validatem/core"); const required = require("@validatem/required"); const either = require("@validatem/either"); const isString = require("@validatem/is-string"); const nestedArrayOf = require("@validatem/nested-array-of"); const node = require("../ast-node"); const flatten = require("../validators/flatten"); module.exports = function (operations) { const isObjectType = require("../validators/operations/is-object-type")(operations); const isSelectClause = require("../validators/operations/is-select-clause")(operations); const wrapWithOperation = require("../validators/operations/wrap-with-operation")(operations); return function select(_table, _clauses) { let [ table, clauses ] = validateArguments(arguments, { table: [ required, either([ [ isObjectType("tableName") ], [ isString, wrapWithOperation("table") ] ])], clauses: [ required, nestedArrayOf(isSelectClause), flatten ] }); return node({ type: "select", table: table, clauses: clauses }); }; };