UNPKG

fewer

Version:

A minimal ORM for Node.js.

43 lines (42 loc) 1.9 kB
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 {};