Skip to content

Commit

Permalink
refactor: remove generics EnablePaging from KmoreQueryBuilder, QueryB…
Browse files Browse the repository at this point in the history
…uilder and others
  • Loading branch information
waitingsong committed Jul 15, 2024
1 parent b0de2ad commit 24e201e
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 100 deletions.
3 changes: 2 additions & 1 deletion packages/kmore/src/lib/builder.auto-paging.ts
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,8 @@ async function genBuilderForPaging(options: PagerOptions): Promise<GenBuilderFor

const total = await builderCounter
// eslint-disable-next-line @typescript-eslint/no-explicit-any
.then((rows: { total?: number | string }[]) => {
.then((rows: { total?: number | string, [k: string]: unknown }[]) => {
assert(Array.isArray(rows), 'rows should be an array, which is the result of count query of autoPaging')
if (rows.length > 0) {
const [row] = rows
if (row?.total) {
Expand Down
63 changes: 23 additions & 40 deletions packages/kmore/src/lib/builder.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ import type {
import type { DbDict } from 'kmore-types'
import type { Knex } from 'knex'

import type * as DeferredKeySelectionNS from './knex.deferred-key-selection-ns.types.js'
import type { AddPagingMeta, PagingCategory } from './paging.types.js'
import type { RowLockLevel, TrxPropagateOptions } from './trx.types.js'


Expand All @@ -35,16 +33,15 @@ export type DbQueryBuilder<


export type TbQueryBuilder<D extends object, CaseConvert extends CaseType, TRecord extends object, Context>
= (options?: Partial<TbQueryBuilderOptions<Context>>) => KmoreQueryBuilder<D, CaseConvert, 0, TRecord, TRecord[]>
= (options?: Partial<TbQueryBuilderOptions<Context>>) => KmoreQueryBuilder<D, CaseConvert, TRecord, TRecord[]>


export type KmoreQueryBuilder<
D extends object = object,
CaseConvert extends CaseType = CaseType,
EnablePaging extends PagingCategory = 0,
TRecord extends object = any,
TResult = unknown[],
> = QueryBuilder<D, CaseConvert, EnablePaging, TRecord, AddPagingMeta<TResult, EnablePaging>>
TResult = any[],
> = QueryBuilder<D, CaseConvert, TRecord, TResult>


export interface TbQueryBuilderOptions<Context> {
Expand Down Expand Up @@ -88,7 +85,6 @@ export interface QueryBuilderExtName<D extends object = object> {
export type SmartJoin<
D extends {} = {},
CaseConvert extends CaseType = CaseType,
EnablePaging extends PagingCategory = 0,
TResult = unknown[],
> = <
TRecord1 = UnwrapArrayMember<TResult>,
Expand All @@ -110,7 +106,7 @@ export type SmartJoin<
*/
scopedColumn: C1 extends C2 ? never : C1,
// @ts-expect-error
) => KmoreQueryBuilder<D, CaseConvert, EnablePaging, TResult2, TResult2[]>
) => KmoreQueryBuilder<D, CaseConvert, TResult2, TResult2[]>


export type CtxBuilderPreProcessor = (builder: KmoreQueryBuilder) => Promise<{ builder: KmoreQueryBuilder }>
Expand Down Expand Up @@ -139,61 +135,48 @@ export interface CtxExceptionHandlerOptions extends Omit<CtxBuilderResultPreProc
export interface QueryBuilder<
D extends object = object,
CaseConvert extends CaseType = CaseType,
EnablePaging extends PagingCategory = 0,
TRecord extends object = any,
TResult = unknown[],
> extends
// Knex.QueryInterface<TRecord, TResult>,
// Knex.QueryBuilder<TRecord, TResult>
ChainableInterface<TResult, EnablePaging>,
Knex.ChainableInterface<TResult>,
QueryBuilderExtName<D>,
Knex.QueryInterface<TRecord, TResult, D, CaseConvert, EnablePaging> {
Knex.QueryInterface<TRecord, TResult, D, CaseConvert> {

// methods of knex.QueryBuilder need to be redefined here

or: QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
not: QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
and: QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
or: QueryBuilder<D, CaseConvert, TRecord, TResult>
not: QueryBuilder<D, CaseConvert, TRecord, TResult>
and: QueryBuilder<D, CaseConvert, TRecord, TResult>

forUpdate(...tableNames: string[]): QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
forUpdate(tableNames: readonly string[]): QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
forUpdate(...tableNames: string[]): QueryBuilder<D, CaseConvert, TRecord, TResult>
forUpdate(tableNames: readonly string[]): QueryBuilder<D, CaseConvert, TRecord, TResult>

forShare(...tableNames: string[]): QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
forShare(tableNames: readonly string[]): QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
forShare(...tableNames: string[]): QueryBuilder<D, CaseConvert, TRecord, TResult>
forShare(tableNames: readonly string[]): QueryBuilder<D, CaseConvert, TRecord, TResult>

forNoKeyUpdate(...tableNames: string[]): QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
forNoKeyUpdate(...tableNames: string[]): QueryBuilder<D, CaseConvert, TRecord, TResult>
forNoKeyUpdate(
tableNames: readonly string[]
): QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
): QueryBuilder<D, CaseConvert, TRecord, TResult>

forKeyShare(...tableNames: string[]): QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
forKeyShare(tableNames: readonly string[]): QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
forKeyShare(...tableNames: string[]): QueryBuilder<D, CaseConvert, TRecord, TResult>
forKeyShare(tableNames: readonly string[]): QueryBuilder<D, CaseConvert, TRecord, TResult>

skipLocked(): QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
noWait(): QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
skipLocked(): QueryBuilder<D, CaseConvert, TRecord, TResult>
noWait(): QueryBuilder<D, CaseConvert, TRecord, TResult>

// eslint-disable-next-line @typescript-eslint/ban-types
on(event: string, callback: Function): QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
on(event: string, callback: Function): QueryBuilder<D, CaseConvert, TRecord, TResult>

queryContext(context: any): QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
queryContext(context: any): QueryBuilder<D, CaseConvert, TRecord, TResult>

clone(): QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
clone(): QueryBuilder<D, CaseConvert, TRecord, TResult>
timeout(
ms: number,
options?: { cancel?: boolean }
): QueryBuilder<D, CaseConvert, EnablePaging, TRecord, TResult>
): QueryBuilder<D, CaseConvert, TRecord, TResult>

}


type ChainableInterface<
TResult = any,
EnablePaging extends PagingCategory = 0,
> = Knex.ChainableInterface<AddPagingMeta<ResolveResult<TResult>, EnablePaging>>

// If we have more categories of deferred selection in future,
// this will combine all of them
type ResolveResult<S, EnablePaging extends PagingCategory = 0>
= AddPagingMeta<DeferredKeySelectionNS.Resolve<S>, EnablePaging>


Loading

0 comments on commit 24e201e

Please # to comment.