From 728b4d8a32ce11df0655bb552baaa8f02c698c90 Mon Sep 17 00:00:00 2001 From: Shigma Date: Mon, 6 May 2024 20:51:44 +0800 Subject: [PATCH] feat(minato): enhance typings, add overloads --- packages/core/src/database.ts | 8 ++++++-- packages/core/src/index.ts | 4 ++++ packages/core/src/query.ts | 14 +++++++------- packages/core/src/selection.ts | 3 ++- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/packages/core/src/database.ts b/packages/core/src/database.ts index 0d0d367c..7882bc5d 100644 --- a/packages/core/src/database.ts +++ b/packages/core/src/database.ts @@ -265,12 +265,16 @@ export class Database extends Servi return this.select(sel) } + async get>(table: K, query: Query): Promise + async get, P extends FlatKeys = any>( table: K, query: Query, cursor?: Driver.Cursor

, - ): Promise[]> { - return this.select(table, query).execute(cursor) + ): Promise[]> + + async get>(table: K, query: Query, cursor?: any) { + return this.select(table, query).execute(cursor) as any } async eval, T>(table: K, expr: Selection.Callback, query?: Query): Promise { diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 630cf5bc..54ace897 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -27,7 +27,11 @@ declare module 'cordis' { namespace Context { const Minato: unique symbol const Database: unique symbol + // https://github.com/typescript-eslint/typescript-eslint/issues/6720 + // eslint-disable-next-line @typescript-eslint/no-unused-vars interface Minato {} + // https://github.com/typescript-eslint/typescript-eslint/issues/6720 + // eslint-disable-next-line @typescript-eslint/no-unused-vars interface Database {} } } diff --git a/packages/core/src/query.ts b/packages/core/src/query.ts index fc45e361..0c5ecdb0 100644 --- a/packages/core/src/query.ts +++ b/packages/core/src/query.ts @@ -8,9 +8,9 @@ export type Query = Query.Expr> | Query.Shorthand export namespace Query { export interface FieldExpr { // logical - $or?: FieldQuery[] - $and?: FieldQuery[] - $not?: FieldQuery + $or?: Field[] + $and?: Field[] + $not?: Field // existence $exists?: boolean @@ -28,7 +28,7 @@ export namespace Query { $lte?: Extract // list - $el?: T extends (infer U)[] ? FieldQuery : never + $el?: T extends (infer U)[] ? Field : never $size?: Extract // regexp @@ -55,10 +55,10 @@ export namespace Query { | Extract | Extract - export type FieldQuery = FieldExpr | Shorthand + export type Field = FieldExpr | Shorthand export type Expr = LogicalExpr & { - [K in keyof T]?: null | FieldQuery + [K in keyof T]?: null | Field } } @@ -102,7 +102,7 @@ const queryOperators: QueryOperators = { $size: (query, data) => data.length === query, } -function executeFieldQuery(query: Query.FieldQuery, data: any) { +function executeFieldQuery(query: Query.Field, data: any) { // shorthand syntax if (Array.isArray(query)) { return query.includes(data) diff --git a/packages/core/src/selection.ts b/packages/core/src/selection.ts index 4e5b78db..3b89b759 100644 --- a/packages/core/src/selection.ts +++ b/packages/core/src/selection.ts @@ -250,7 +250,8 @@ export class Selection extends Executable { return Eval.exec(selection._action('eval', expr)) } - execute = any>(cursor?: Driver.Cursor): Promise, S>[]> + execute(): Promise + execute = any>(cursor?: Driver.Cursor): Promise[]> execute(callback: Selection.Callback): Promise async execute(cursor?: any) { if (typeof cursor === 'function') {