// import type { QueryBuilder } from 'knex' import type { SelectQueryBuilder } from 'kysely' import _ from 'lodash' // export function convertToReturning(obj: Record) { // return _.map(obj, (value, key) => _.isString(value) && `${value} as ${key}`).filter(_.identity) // } // export function columnAs(name: string, table: string, transformer = _.snakeCase) { // const transformed = transformer(name) // if (transformed !== name) { // // knex automagically wraps everything in ", so they are not needed around ${name} // return `${table ? table + '.' : ''}${transformed} as ${name}` // } // return table ? `${table}.${name}` : name // } // export function columnBuilder(builder: QueryBuilder, columns: Record, columnNames: string[]) { // for (const columnName of columnNames) { // const column = columns[columnName] // if (column) { // // @ts-ignore // builder.column(column) // } // } // return builder // } export function where(builder: SelectQueryBuilder, json: Record) { return _.reduce( json, (builder, value, key) => { if (value === null) { return builder.where(key, 'is', null) } else if (Array.isArray(value)) { return builder.where(key, 'in', value) } return builder.where(key, '=', value) }, builder, ) }