import { Knex } from 'knex' import moment from 'moment' import "@total-typescript/ts-reset/dist/filter-boolean" import { ModelTemplate } from '++/libs/models' import { PlataSql } from '..' declare global { namespace Sql { type SqlRawSelectColTypes = | 'number' | 'date' | 'string' ; type SqlRawSelectCamp = [col: (s: Knex.QueryBuilder) => Knex.QueryBuilder, type: SqlRawSelectColTypes, required?: 'required' ] ; type SqlRawSelectColTypesValues = V extends 'number' ? number : V extends 'date' ? Date : V extends 'string' ? string : never ; type isRequired = I extends 'required' ? undefined : null ; interface SqlRawSelectInfo { table: string cols: Record> query: (s: Knex.QueryBuilder, t: T) => Knex.QueryBuilder, comments?: Record } type ExtractSqlRawSelectInfo> = Prettify<{ [K in keyof I['cols']]: Exclude | isRequired, undefined> }> ; type SqlGetFunc = (builder: Sql.Builder, sql: PlataSql.Driver) => PlataPromise ; interface CacheTable { coluns: Record date: Date } interface InsertOptions { ignoreTrigger?: true comments?: Record } interface UpdateOptions { comments?: Record } interface SelectOptions { comments?: Record } type ModelQueryBuilder = Knex.QueryBuilder, Model.ExtractTemplateType[]> ; type Builder = (s: ModelQueryBuilder) => ModelQueryBuilder ; interface StreamHandler { close: () => PlataPromise row: (row: T) => Promise error?: (err) => Promise } type ModelList = PlataPromise<{ errors: undefined itens: Model.ExtractTemplateType[] } | { errors: PlataError[] itens: Model.ExtractTemplateTypeNotValid[] }> type EachRowCallBack = (x: Model.ModelValidateReturn) => PlataPromise ; type TimeZoneDate = Date & { __type: 'sql' } type TransactionFunction = (sql: T) => Promise type TransactionReturn = | boolean | string | number | Record | ((...args: any[]) => any) ; type TransactionResultFunction = (sql: T) => PlataPromise type Joins = 'JOIN' | `${ 'LEFT' | 'CROSS' | 'INNER' | 'OUTER' | 'RIGHT' | 'FULL OUTER' | 'LEFT OUTER' } JOIN` ; } }