54 lines
2.2 KiB
TypeScript
54 lines
2.2 KiB
TypeScript
export interface EntityType<TUnsaved = any, TSaved = any, TIds extends object = any> {
|
|
_saved: TSaved;
|
|
_unsaved: TUnsaved;
|
|
_idKeys: TIds;
|
|
idOf: (rec: TSaved) => TIds;
|
|
}
|
|
export declare type UnsavedR<T extends {
|
|
_unsaved: any;
|
|
}> = T["_unsaved"];
|
|
export declare type SavedR<T extends {
|
|
_saved: any;
|
|
}> = T["_saved"];
|
|
export declare type KeyType<R extends EntityType> = R["_idKeys"];
|
|
export interface PgRecordInfo<Unsaved = any, Saved extends Unsaved & IdType = any, IdType extends object = any> extends EntityType<Unsaved, Saved, IdType> {
|
|
tableName: string;
|
|
schemaName: string;
|
|
idKeys: (keyof Saved)[];
|
|
}
|
|
/**
|
|
* Extract the runtime key name from a recordInfo
|
|
*/
|
|
export declare function idKeysOf<RI extends PgRecordInfo>(recordInfoWithIdKey: RI): string[];
|
|
/**
|
|
* Turns a record type with possibly more fields than "id" into an array
|
|
*/
|
|
export declare function collectIdValues<RecordT extends PgRecordInfo>(idObj: KeyType<RecordT>, knexRecordType: RecordT): string[];
|
|
/**
|
|
*
|
|
* Creates a record descriptor that captures the table name, primary key name,
|
|
* unsaved type, and saved type of a database record type. Assumes "id" as the
|
|
* primary key name
|
|
*
|
|
*/
|
|
export declare function recordInfo<Unsaved, Saved extends Unsaved & {
|
|
id: any;
|
|
}>(schemaName: string, tableName: string): PgRecordInfo<Unsaved, Saved, Pick<Saved, "id">>;
|
|
export declare function recordInfo<Type extends {
|
|
id: string;
|
|
}>(schemaName: string, tableName: string): PgRecordInfo<Type, Type, Pick<Type, "id">>;
|
|
/**
|
|
*
|
|
* Creates a record descriptor that captures the table name, primary key name,
|
|
* unsaved type, and saved type of a database record type.
|
|
*
|
|
*/
|
|
export declare function recordInfo<Unsaved, Saved extends Unsaved, Id extends keyof Saved>(schemaName: string, tableName: string, idKey: Id[]): PgRecordInfo<Unsaved, Saved, Pick<Saved, Id>>;
|
|
/**
|
|
*
|
|
* Creates a record descriptor for records with composite primary keys
|
|
*
|
|
*/
|
|
export declare function compositeRecordType<TUnsaved, TSaved extends TUnsaved = TUnsaved>(schemaName: string, tableName: string): {
|
|
withCompositeKeys<TKeys extends keyof TSaved>(keys: TKeys[]): PgRecordInfo<TUnsaved, TSaved, Pick<TSaved, TKeys>>;
|
|
};
|