fewer
Version:
A minimal ORM for Node.js.
43 lines (42 loc) • 1.9 kB
TypeScript
import { Association, AssociationType } from './Association';
import { Select } from '@fewer/sq';
export declare const enum INTERNAL_TYPES {
ALL_FIELDS = "@@ALL_FIELDS",
RESOLVED_TYPE = "@@RESOLVED_TYPE",
INTERNAL_TYPE = "@@INTERNAL_TYPE",
SCHEMA_TYPE = "@@SCHEMA_TYPE",
JOINS = "@@JOINS",
TO_SQ_SELECT = "@@TO_SQ_SELECT"
}
export declare type CreateSelectionSet<Original, Additional> = Original extends INTERNAL_TYPES.ALL_FIELDS ? Additional : Original | Additional;
export interface Associations {
[key: string]: Association;
}
declare type UnrollAssociation<T extends Association> = WhereType<T[INTERNAL_TYPES.SCHEMA_TYPE], T[INTERNAL_TYPES.JOINS]>;
declare type WhereForType<T> = {
[P in keyof T]?: NonNullable<T[P]> | NonNullable<T[P]>[];
};
declare type Merge<T extends object> = {
[K in keyof T]: T[K];
};
export declare type WhereType<Root, Assoc extends Associations = {}> = Merge<WhereForType<Root> & {
[P in keyof Assoc]?: UnrollAssociation<Assoc[P]>;
}>;
export declare type Subset<Root, Keys, AssociationKeys extends keyof Root> = [Keys] extends [INTERNAL_TYPES.ALL_FIELDS] ? Root : {
[P in ((keyof Root) & Keys) | AssociationKeys]: Root[P];
};
export declare type ResolveAssociations<Assoc extends Associations> = {
[P in keyof Assoc]: [Assoc[P]['type']] extends [AssociationType.HAS_MANY] ? Assoc[P][INTERNAL_TYPES.RESOLVED_TYPE][] : Assoc[P][INTERNAL_TYPES.RESOLVED_TYPE];
};
export interface CommonQuery<Type, Assoc extends Associations> {
pluck(...columns: (keyof Type)[]): any;
pluckAs(name: keyof Type, alias: string): any;
where(wheres: WhereType<Type, Assoc>): any;
limit(amount: number): any;
offset(amount: number): any;
order(): any;
load(name: string, association: Association): any;
join(name: string, association: Association): any;
[INTERNAL_TYPES.TO_SQ_SELECT](): Select;
}
export {};