From 24e201e1673dbc6262f59c1337e6650496bef021 Mon Sep 17 00:00:00 2001 From: waiting <1661926154@qq.com> Date: Mon, 15 Jul 2024 20:41:29 +0800 Subject: [PATCH] refactor: remove generics EnablePaging from KmoreQueryBuilder, QueryBuilder and others --- packages/kmore/src/lib/builder.auto-paging.ts | 3 +- packages/kmore/src/lib/builder.types.ts | 63 ++++------ packages/kmore/src/lib/knex.patch.types.ts | 116 +++++++++--------- .../src/lib/proxy/db-manager.ref.ts | 1 - 4 files changed, 83 insertions(+), 100 deletions(-) diff --git a/packages/kmore/src/lib/builder.auto-paging.ts b/packages/kmore/src/lib/builder.auto-paging.ts index e27fa26cf..59171d08c 100644 --- a/packages/kmore/src/lib/builder.auto-paging.ts +++ b/packages/kmore/src/lib/builder.auto-paging.ts @@ -196,7 +196,8 @@ async function genBuilderForPaging(options: PagerOptions): Promise { + .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) { diff --git a/packages/kmore/src/lib/builder.types.ts b/packages/kmore/src/lib/builder.types.ts index 6f0701813..9bd7c6aca 100644 --- a/packages/kmore/src/lib/builder.types.ts +++ b/packages/kmore/src/lib/builder.types.ts @@ -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' @@ -35,16 +33,15 @@ export type DbQueryBuilder< export type TbQueryBuilder - = (options?: Partial>) => KmoreQueryBuilder + = (options?: Partial>) => KmoreQueryBuilder export type KmoreQueryBuilder< D extends object = object, CaseConvert extends CaseType = CaseType, - EnablePaging extends PagingCategory = 0, TRecord extends object = any, - TResult = unknown[], -> = QueryBuilder> + TResult = any[], +> = QueryBuilder export interface TbQueryBuilderOptions { @@ -88,7 +85,6 @@ export interface QueryBuilderExtName { export type SmartJoin< D extends {} = {}, CaseConvert extends CaseType = CaseType, - EnablePaging extends PagingCategory = 0, TResult = unknown[], > = < TRecord1 = UnwrapArrayMember, @@ -110,7 +106,7 @@ export type SmartJoin< */ scopedColumn: C1 extends C2 ? never : C1, // @ts-expect-error -) => KmoreQueryBuilder +) => KmoreQueryBuilder export type CtxBuilderPreProcessor = (builder: KmoreQueryBuilder) => Promise<{ builder: KmoreQueryBuilder }> @@ -139,61 +135,48 @@ export interface CtxExceptionHandlerOptions extends Omit extends // Knex.QueryInterface, // Knex.QueryBuilder - ChainableInterface, + Knex.ChainableInterface, QueryBuilderExtName, - Knex.QueryInterface { + Knex.QueryInterface { // methods of knex.QueryBuilder need to be redefined here - or: QueryBuilder - not: QueryBuilder - and: QueryBuilder + or: QueryBuilder + not: QueryBuilder + and: QueryBuilder - forUpdate(...tableNames: string[]): QueryBuilder - forUpdate(tableNames: readonly string[]): QueryBuilder + forUpdate(...tableNames: string[]): QueryBuilder + forUpdate(tableNames: readonly string[]): QueryBuilder - forShare(...tableNames: string[]): QueryBuilder - forShare(tableNames: readonly string[]): QueryBuilder + forShare(...tableNames: string[]): QueryBuilder + forShare(tableNames: readonly string[]): QueryBuilder - forNoKeyUpdate(...tableNames: string[]): QueryBuilder + forNoKeyUpdate(...tableNames: string[]): QueryBuilder forNoKeyUpdate( tableNames: readonly string[] - ): QueryBuilder + ): QueryBuilder - forKeyShare(...tableNames: string[]): QueryBuilder - forKeyShare(tableNames: readonly string[]): QueryBuilder + forKeyShare(...tableNames: string[]): QueryBuilder + forKeyShare(tableNames: readonly string[]): QueryBuilder - skipLocked(): QueryBuilder - noWait(): QueryBuilder + skipLocked(): QueryBuilder + noWait(): QueryBuilder // eslint-disable-next-line @typescript-eslint/ban-types - on(event: string, callback: Function): QueryBuilder + on(event: string, callback: Function): QueryBuilder - queryContext(context: any): QueryBuilder + queryContext(context: any): QueryBuilder - clone(): QueryBuilder + clone(): QueryBuilder timeout( ms: number, options?: { cancel?: boolean } - ): QueryBuilder + ): QueryBuilder } - -type ChainableInterface< - TResult = any, - EnablePaging extends PagingCategory = 0, -> = Knex.ChainableInterface, EnablePaging>> - -// If we have more categories of deferred selection in future, -// this will combine all of them -type ResolveResult - = AddPagingMeta, EnablePaging> - - diff --git a/packages/kmore/src/lib/knex.patch.types.ts b/packages/kmore/src/lib/knex.patch.types.ts index 0d79414c0..492cc38cb 100644 --- a/packages/kmore/src/lib/knex.patch.types.ts +++ b/packages/kmore/src/lib/knex.patch.types.ts @@ -12,7 +12,7 @@ import type { Knex } from 'knex' import type { KmoreQueryBuilder, QueryBuilder, SmartJoin } from './builder.types.js' import type * as DeferredKeySelectionNS from './knex.deferred-key-selection-ns.types.js' import type { ArrayIfAlready, ArrayMember, ComparisonOperator, Dict, IncompatibleToAlt, SafePartial } from './knex.types.js' -import type { CalcPagingCat, PagingCategory, PagingOptions } from './paging.types.js' +import type { AddPagingMeta, CalcPagingCat, PagingCategory, PagingOptions } from './paging.types.js' declare module 'knex/types/index.js' { @@ -22,15 +22,14 @@ declare module 'knex/types/index.js' { TRecord extends object = any, TResult = any, D extends object = any, CaseConvert extends CaseType = CaseType, - EnablePaging extends PagingCategory = 0, - > extends QueryBuilderExtMethod, - QueryInterfacePatch { + > extends + QueryBuilderExtMethod, + QueryInterfacePatch { dummy: < D2 extends object = D, CaseConvert2 extends CaseType = CaseConvert, - EnablePaging2 extends PagingCategory = EnablePaging, - >() => KmoreQueryBuilder + >() => KmoreQueryBuilder } } } @@ -39,15 +38,14 @@ declare module 'knex/types/index.js' { export interface QueryBuilderExtMethod< D extends object = object, CaseConvert extends CaseType = CaseType, - EnablePaging extends PagingCategory = 0, TRecord extends object = any, TResult = unknown[], > { - smartCrossJoin: SmartJoin - smartInnerJoin: SmartJoin - smartJoin: SmartJoin - smartLeftJoin: SmartJoin - smartRightJoin: SmartJoin + smartCrossJoin: SmartJoin + smartInnerJoin: SmartJoin + smartJoin: SmartJoin + smartLeftJoin: SmartJoin + smartRightJoin: SmartJoin /** * @note Should be called as late as possible, and before then() */ @@ -60,22 +58,31 @@ type AutoPaging< TRecord extends object = any, TResult = unknown[], > = (options?: Partial, wrapOutput?: Wrap) -=> KmoreQueryBuilder, TRecord, TResult> +=> KmoreQueryBuilder>> + +// If we have more categories of deferred selection in future, +// this will combine all of them +type ResolveResult + = AddPagingMeta, EnablePaging> + +// type ChainableInterface< +// TResult = any, +// EnablePaging extends PagingCategory = 0, +// > = Knex.ChainableInterface, EnablePaging>> interface QueryInterfacePatch< D extends object = object, CaseConvert extends CaseType = CaseType, - EnablePaging extends PagingCategory = 0, TRecord extends object = any, TResult = any, > { - select: Select - where: Where - orderBy: OrderBy - columns: Select + select: Select + where: Where + orderBy: OrderBy + columns: Select } /* ---------------- re-declare types of Knex ---------------- */ @@ -83,36 +90,34 @@ interface QueryInterfacePatch< interface Select< D extends object = object, CaseConvert extends CaseType = CaseType, - EnablePaging extends PagingCategory = 0, TRecord extends object = any, TResult = unknown[], > extends - AliasQueryBuilder, - ColumnNameQueryBuilder { + AliasQueryBuilder, + ColumnNameQueryBuilder { - (): KmoreQueryBuilder + (): KmoreQueryBuilder < TResult2 = ArrayIfAlready, TInnerRecord extends {} = any, TInnerResult = any, >( - ...subQueryBuilders: readonly KmoreQueryBuilder[] - ): KmoreQueryBuilder + ...subQueryBuilders: readonly KmoreQueryBuilder[] + ): KmoreQueryBuilder < TResult2 = ArrayIfAlready, TInnerRecord extends {} = any, TInnerResult = any, >( - subQueryBuilders: readonly KmoreQueryBuilder[] - ): KmoreQueryBuilder + subQueryBuilders: readonly KmoreQueryBuilder[] + ): KmoreQueryBuilder } interface AliasQueryBuilder< D extends {} = {}, CaseConvert extends CaseType = CaseType, - EnablePaging extends PagingCategory = 0, TRecord extends {} = any, TResult = unknown[], > { @@ -128,7 +133,7 @@ interface AliasQueryBuilder< >, >( ...aliases: AliasUT - ): KmoreQueryBuilder + ): KmoreQueryBuilder < AliasUT extends Knex.InferrableColumnDescriptor>[], @@ -141,7 +146,7 @@ interface AliasQueryBuilder< >, >( aliases: AliasUT - ): KmoreQueryBuilder + ): KmoreQueryBuilder < AliasUT extends (Dict | string)[], @@ -154,7 +159,7 @@ interface AliasQueryBuilder< >, >( ...aliases: AliasUT - ): KmoreQueryBuilder + ): KmoreQueryBuilder < AliasUT extends (Dict | string)[], @@ -167,14 +172,13 @@ interface AliasQueryBuilder< >, >( aliases: AliasUT - ): KmoreQueryBuilder + ): KmoreQueryBuilder } // commons interface ColumnNameQueryBuilder< D extends {} = {}, CaseConvert extends CaseType = CaseType, - EnablePaging extends PagingCategory = 0, TRecord extends {} = any, TResult = unknown[], > { @@ -184,7 +188,6 @@ interface ColumnNameQueryBuilder< (columnName: '*'): KmoreQueryBuilder< D, CaseConvert, - EnablePaging, TRecord, ArrayIfAlready> > @@ -198,7 +201,7 @@ interface ColumnNameQueryBuilder< >[], >( ...columnNames: readonly ColNameUT[] - ): KmoreQueryBuilder + ): KmoreQueryBuilder < ColNameUT extends keyof Knex.ResolveTableType, @@ -209,7 +212,7 @@ interface ColumnNameQueryBuilder< >[], >( columnNames: readonly ColNameUT[] - ): KmoreQueryBuilder + ): KmoreQueryBuilder // For non-inferrable column selection, we will allow consumer to // specify result type and if not widen the result to entire record type with any omissions permitted @@ -221,7 +224,7 @@ interface ColumnNameQueryBuilder< >[], >( ...columnNames: readonly Knex.ColumnDescriptor[] - ): KmoreQueryBuilder + ): KmoreQueryBuilder < TResult2 = DeferredKeySelectionNS.Augment< @@ -231,14 +234,13 @@ interface ColumnNameQueryBuilder< >[], >( columnNames: readonly Knex.ColumnDescriptor[] - ): KmoreQueryBuilder + ): KmoreQueryBuilder } interface OrderBy< D extends {} = {}, CaseConvert extends CaseType = CaseType, - EnablePaging extends PagingCategory = 0, TRecord extends {} = any, TResult = unknown[], > { @@ -247,13 +249,13 @@ interface OrderBy< columnName: keyof TRecord | QueryBuilder, order?: 'asc' | 'desc' | undefined, nulls?: 'first' | 'last' | undefined - ): KmoreQueryBuilder + ): KmoreQueryBuilder ( columnName: string | QueryBuilder, order?: string | undefined, nulls?: string | undefined - ): KmoreQueryBuilder + ): KmoreQueryBuilder ( columnDefs: ( @@ -263,7 +265,7 @@ interface OrderBy< order?: 'asc' | 'desc' | undefined, nulls?: 'first' | 'last' | undefined, }>)[] - ): KmoreQueryBuilder + ): KmoreQueryBuilder ( columnDefs: ( @@ -273,7 +275,7 @@ interface OrderBy< order?: string | undefined, nulls?: string | undefined, }>)[] - ): KmoreQueryBuilder + ): KmoreQueryBuilder } @@ -281,34 +283,33 @@ interface OrderBy< interface Where< D extends {} = {}, CaseConvert extends CaseType = CaseType, - EnablePaging extends PagingCategory = 0, TRecord extends {} = any, TResult = any, -> extends WhereRaw { +> extends WhereRaw { - (raw: Knex.Raw): KmoreQueryBuilder + (raw: Knex.Raw): KmoreQueryBuilder - (callback: Knex.QueryCallback): KmoreQueryBuilder + (callback: Knex.QueryCallback): KmoreQueryBuilder - (object: Knex.DbRecord>): KmoreQueryBuilder + (object: Knex.DbRecord>): KmoreQueryBuilder - (object: Readonly): KmoreQueryBuilder + (object: Readonly): KmoreQueryBuilder >( columnName: T, value: Knex.DbColumn[T]> | null - ): KmoreQueryBuilder + ): KmoreQueryBuilder - (columnName: string, value: Knex.Value | null): KmoreQueryBuilder + (columnName: string, value: Knex.Value | null): KmoreQueryBuilder >( columnName: T, operator: ComparisonOperator, value: Knex.DbColumn[T]> | null - ): KmoreQueryBuilder + ): KmoreQueryBuilder (columnName: string, operator: string, value: Knex.Value | null): - KmoreQueryBuilder + KmoreQueryBuilder < T extends keyof Knex.ResolveTableType, @@ -318,32 +319,31 @@ interface Where< columnName: T, operator: ComparisonOperator, value: Knex.QueryBuilder - ): KmoreQueryBuilder + ): KmoreQueryBuilder ( columnName: string, operator: string, value: Knex.QueryBuilder - ): KmoreQueryBuilder + ): KmoreQueryBuilder - (left: Knex.Raw, operator: string, right: Knex.Value | null): KmoreQueryBuilder + (left: Knex.Raw, operator: string, right: Knex.Value | null): KmoreQueryBuilder ( left: Knex.Raw, operator: string, right: Knex.QueryBuilder - ): KmoreQueryBuilder + ): KmoreQueryBuilder } interface WhereRaw< D extends {} = {}, CaseConvert extends CaseType = CaseType, - EnablePaging extends PagingCategory = 0, TRecord extends {} = any, TResult = unknown[], > extends Knex.RawQueryBuilder { - (condition: boolean): KmoreQueryBuilder + (condition: boolean): KmoreQueryBuilder } diff --git a/packages/midway-component-kmore/src/lib/proxy/db-manager.ref.ts b/packages/midway-component-kmore/src/lib/proxy/db-manager.ref.ts index 6d6f8efeb..055857901 100644 --- a/packages/midway-component-kmore/src/lib/proxy/db-manager.ref.ts +++ b/packages/midway-component-kmore/src/lib/proxy/db-manager.ref.ts @@ -68,7 +68,6 @@ export function proxyRef(options: ProxyRefOptions): Dbqb { ctxExceptionHandler, } - // @ts-expect-error // eslint-disable-next-line @typescript-eslint/ban-types, @typescript-eslint/no-unsafe-return const queryBuilderCreator: TbQueryBuilder = inputOptions => proxyRefTableFn(inputOptions, opts) return queryBuilderCreator