From 40b5647e20408ad0084ef23dc66eec6d5fd85ef4 Mon Sep 17 00:00:00 2001 From: Shigma Date: Mon, 15 Apr 2024 15:22:53 +0800 Subject: [PATCH] fix(core): fix typing issues, support database generics --- packages/core/src/database.ts | 17 ++++++----------- packages/core/src/driver.ts | 2 +- packages/core/src/index.ts | 4 ++-- packages/core/src/model.ts | 9 ++------- packages/mysql/package.json | 2 +- 5 files changed, 12 insertions(+), 22 deletions(-) diff --git a/packages/core/src/database.ts b/packages/core/src/database.ts index ba8bf6d9..a8ea0f90 100644 --- a/packages/core/src/database.ts +++ b/packages/core/src/database.ts @@ -54,11 +54,7 @@ export namespace Database { export interface Types {} } -export class Database< - C extends Context = Context, - S extends C[typeof Database.Tables] = C[typeof Database.Tables], - N extends C[typeof Database.Types] = C[typeof Database.Types], -> extends Service { +export class Database extends Service { static [Service.provide] = 'model' static [Service.immediate] = true static readonly Tables = Symbol('minato.tables') @@ -202,13 +198,12 @@ export class Database< return type } - // FIXME - // define, Field.Type | 'object' | 'array'>>( - // name: K, - // field: Field.Definition | Field.Transform, - // ): K + define, Field.Type | 'object' | 'array'>>( + name: K, + field: Field.Definition | Field.Transform, + ): K - // define(field: Field.Definition | Field.Transform): Field.NewType + define(field: Field.Definition | Field.Transform): Field.NewType define(name: any, field?: any) { if (typeof name === 'object') { field = name diff --git a/packages/core/src/driver.ts b/packages/core/src/driver.ts index 508e0cdb..6e1ab6a4 100644 --- a/packages/core/src/driver.ts +++ b/packages/core/src/driver.ts @@ -61,7 +61,7 @@ export abstract class Driver { abstract upsert(sel: Selection.Mutable, data: any[], keys: string[]): Promise abstract withTransaction(callback: (driver: this) => Promise): Promise - public database: Database + public database: Database public logger: Logger public types: Dict = Object.create(null) diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 51804c06..21c06b82 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -18,8 +18,8 @@ declare module 'cordis' { interface Context { [Database.Tables]: Database.Tables [Database.Types]: Database.Types - database: Database - model: Database + database: Database + model: Database } } diff --git a/packages/core/src/model.ts b/packages/core/src/model.ts index f5950a10..e5d72ad6 100644 --- a/packages/core/src/model.ts +++ b/packages/core/src/model.ts @@ -3,14 +3,12 @@ import { Eval, isEvalExpr } from './eval.ts' import { Flatten, Keys, unravel } from './utils.ts' import { Type } from './type.ts' import { Driver } from './driver.ts' -import { Selection } from './selection.ts' export const Primary = Symbol('Primary') export type Primary = (string | number) & { [Primary]: true } export interface Field { - // FIXME Type - type: Field.Type | Type + type: Type deftype?: Field.Type length?: number nullable?: boolean @@ -77,11 +75,8 @@ export namespace Field { type: Type | Field['type'] } & Omit, 'type'> - // FIXME - // eslint-disable-next-line @typescript-eslint/no-unused-vars type MapField = { - // [K in keyof O]?: Literal | Definition | Transform - [K in keyof O]?: Field | Shorthand> | Selection.Callback + [K in keyof O]?: Literal | Definition | Transform } export type Extension = MapField, N> diff --git a/packages/mysql/package.json b/packages/mysql/package.json index 4d74d896..263dfe97 100644 --- a/packages/mysql/package.json +++ b/packages/mysql/package.json @@ -1,6 +1,6 @@ { "name": "@minatojs/driver-mysql", - "version": "3.1.0", + "version": "3.1.1", "description": "MySQL Driver for Minato", "type": "module", "main": "lib/index.cjs",