dbos-transact-ts
dbos-transact-ts copied to clipboard
Simplify UserDatabase/UserDatabaseQuery/UserDatabaseTransaction declarations
During review of #448, we considered simplifying several interfaces/types related to UserDatabase.
export interface UserDatabase {
transaction<R, T extends unknown[]>(transactionFunction: UserDatabaseTransaction<R, T>, config: TransactionConfig, ...args: T): Promise<R>;
queryFunction<C extends UserDatabaseClient, R, T extends unknown[]>(queryFunction: UserDatabaseQuery<C, R, T>, ...params: T): Promise<R>;
query<R, T extends unknown[]>(sql: string, ...params: T): Promise<R[]>;
queryWithClient<R, T extends unknown[] = unknown[]>(client: UserDatabaseClient, sql: string, ...params: T): Promise<R[]>;
// other members omitted for clarity
}
type UserDatabaseQuery<C extends UserDatabaseClient, R, T extends unknown[]> = (ctxt: C, ...args: T) => Promise<R>;
type UserDatabaseTransaction<R, T extends unknown[]> = (ctxt: UserDatabaseClient, ...args: T) => Promise<R>;
Having a type argument T extending unknown[] doesn't provide much value. I think this type argument could be removed, simplifying the definitions. The new definitions would look something like this:
export interface UserDatabase {
transaction<R>(transactionFunction: UserDatabaseTransaction<R, T>, config: TransactionConfig, ...args: unknown[]): Promise<R>;
queryFunction<C extends UserDatabaseClient, R>(queryFunction: UserDatabaseQuery<C, R, T>, ...params: unknown[]): Promise<R>;
query<R>(sql: string, ...params: unknown[]): Promise<R[]>;
queryWithClient<R>(client: UserDatabaseClient, sql: string, ...params: unknown[]): Promise<R[]>;
// other members omitted for clarity
}
type UserDatabaseQuery<C extends UserDatabaseClient, R> = (ctxt: C, ...args: unknown[]) => Promise<R>;
type UserDatabaseTransaction<R> = (ctxt: UserDatabaseClient, ...args: unknown[]) => Promise<R>;
This should probably be closed or assigned a label for v2 as it will change the signature of the related functions.
I would say this is moot with v3 API, anyone disagree?
Agree. We still have this issue but it is moot when we remove the user db from core in favor of data sources