fewer
Version:
A minimal ORM for Node.js.
91 lines (90 loc) • 3.85 kB
TypeScript
import { Select, Insert, Update } from '@fewer/sq';
import { Migration } from '../Migration';
import ColumnType from '../ColumnType';
interface BaseColumnTypes {
[columnName: string]: (...args: any[]) => ColumnType | {
[key: string]: ColumnType;
};
}
interface BaseTableTypes {
primaryKey: string;
}
export interface AdapterConfiguration<ColumnTypes extends BaseColumnTypes = any, Configuration = any, DBInstance = any> {
columnTypes: ColumnTypes;
connect(config: Configuration): Promise<DBInstance>;
disconnect(db: DBInstance): Promise<void>;
select(db: DBInstance, selectContext: Select['context']): Promise<any[]>;
insert(db: DBInstance, selectContext: Insert['context']): Promise<any>;
update(db: DBInstance, selectContext: Update['context']): Promise<any>;
migrate(db: DBInstance, direction: 'up' | 'down', migration: Migration): Promise<any>;
migrateAddVersion(db: DBInstance, version: string): Promise<void>;
migrateRemoveVersion(db: DBInstance, version: string): Promise<void>;
migrateGetVersions(db: DBInstance): Promise<string[]>;
migrateHasVersion(db: DBInstance, version: string): Promise<boolean>;
getInfos?(db: DBInstance): Promise<{
[key: string]: {
columns: {
[key: string]: {
method: string;
arguments: any[];
};
};
};
}>;
}
export declare class Adapter<TableTypes = any, ColumnTypes = any, DBConfiguration = any, DBInstance = any> {
TableTypes: TableTypes;
ColumnTypes: ColumnTypes;
connected: boolean;
connection: Promise<DBInstance> | null;
client: DBInstance | null;
config: DBConfiguration;
impl: AdapterConfiguration;
constructor(config: DBConfiguration, impl: AdapterConfiguration);
connect(): Promise<void>;
disconnect(): Promise<void>;
select(query: Select): Promise<any[]>;
/**
* Inserts a new record into the database. Returns the id of the newly-inserted item.
*/
insert(query: Insert): Promise<any>;
/**
* Updates a record in the database. Returns the id of the updated item.
*/
update(query: Update): Promise<any>;
migrate(direction: 'up' | 'down', migration: Migration): Promise<any>;
migrateAddVersion(version: string): Promise<void>;
migrateRemoveVersion(version: string): Promise<void>;
migrateGetVersions(): Promise<string[]>;
migrateHasVersion(version: string): Promise<boolean>;
getInfos(): Promise<any>;
}
export declare function createAdapter<TableTypes extends BaseTableTypes, ColumnTypes extends BaseColumnTypes, DBConfiguration, DBInstance>(impl: AdapterConfiguration<ColumnTypes, DBConfiguration, DBInstance>): {
new (config: DBConfiguration): {
TableTypes: TableTypes;
ColumnTypes: ColumnTypes;
connected: boolean;
connection: Promise<DBInstance> | null;
client: DBInstance | null;
config: DBConfiguration;
impl: AdapterConfiguration<any, any, any>;
connect(): Promise<void>;
disconnect(): Promise<void>;
select(query: Select): Promise<any[]>;
/**
* Inserts a new record into the database. Returns the id of the newly-inserted item.
*/
insert(query: Insert): Promise<any>;
/**
* Updates a record in the database. Returns the id of the updated item.
*/
update(query: Update): Promise<any>;
migrate(direction: "up" | "down", migration: Migration<any>): Promise<any>;
migrateAddVersion(version: string): Promise<void>;
migrateRemoveVersion(version: string): Promise<void>;
migrateGetVersions(): Promise<string[]>;
migrateHasVersion(version: string): Promise<boolean>;
getInfos(): Promise<any>;
};
};
export {};