// @ts-nocheck // import { type Knex } from 'kysely' // import _ from 'lodash' // import { where } from './kysely_helpers.ts' // type QueryName = // | 'create' // | 'createMany' // | 'find' // | 'findOne' // | 'findById' // | 'getAll' // | 'paginate' // | 'remove' // | 'removeById' // | 'replace' // | 'update' // interface Options { // kysely: Knex // emitter?: ANY // pick?: QueryName[] // omit?: QueryName[] // columns: string[] // table: string // selects?: Record // } // export const count = ({ kysely, table, columns }: Pick) => // function count(query: Record, client = kysely) { // let builder = client.table(table) // if (!_.isEmpty(query)) { // builder = where(builder, _.pick(query, columns)) // } // return builder.count().then((count) => parseInt(count[0].count, 10)) // } export const find = ({ kysely, table, columns, allSelects, defaults = {}, }: Pick & { allSelects: string[]; defaults: Record }) => function find(json, select, client: Knex) { if (!client) { // TODO figure out if better, eg instanceof, check is possible if (select && select.andWhereNotBetween) { client = select select = null } else { client = kysely } } const { offset = defaults.offset, limit = defaults.limit, sort = defaults.sort, ...query } = json let builder = client.table(table).select(select ? _.pick(allSelects, select) : allSelects) if (!_.isEmpty(query)) { builder = where(builder, _.pick(query, columns)) } builder = builder.orderBy(sort || 'id', sort?.startsWith('-') ? 'desc' : 'asc') if (limit) { builder = builder.limit(limit) } if (offset) { builder = builder.offset(offset) } return builder }