UNPKG

@cloud-cli/store

Version:
69 lines (68 loc) 2.62 kB
declare function getMetadataOf(target: any): Map<string | symbol, string | TableColumn>; declare function getMetadataOf(target: any, property: string | symbol): TableColumn; export type ColumnType = typeof String | typeof Number | typeof Object | typeof Boolean; export type ColumnValue = string | number | boolean; export type ConstructorOf<T> = { new (...args: any[]): T; prototype: T; }; export interface TableColumn { name: string; type: ColumnType; unique?: boolean; notNull?: boolean; primary?: boolean; defaultValue?: unknown; } export declare function Model(name: string): any; export declare function NotNull(): any; export declare function Unique(): any; export declare function Primary(): any; export declare function Property(type: ColumnType, defaultValue?: any): any; declare const operators: { is: string; isNot: string; isLike: string; gt: string; lt: string; gte: string; lte: string; }; type Clause<T extends Resource> = Record<keyof typeof operators, (value: ColumnValue) => Query<T>>; type PropertiesOf<T extends Resource> = { [K in keyof T]: T[K] extends () => any ? never : K; }[keyof T]; export type ResourceProperties<T extends Resource> = { [K in PropertiesOf<T>]: T[K] extends never ? never : T[K]; }; type Filter<T extends Resource> = [PropertiesOf<T>, string, ColumnValue]; export declare class Query<T extends Resource> { private readonly q; push(field: PropertiesOf<T>, operator: string, value: ColumnValue): this; where(field: PropertiesOf<T>): Clause<T>; toJSON(): Filter<T>[]; } export interface ResourceDescription { name: string; fields: TableColumn[]; } export declare class Resource { private static driver; static use(driver: ResourceDriver): void; static describe<T>(resourceOrModel: ConstructorOf<Resource> | T): ResourceDescription; static find<T extends Resource>(resource: ConstructorOf<T>, query: Query<T>): Promise<T[]>; static create(resource: typeof Resource): Promise<void>; constructor(props?: any); static getMetadataOf: typeof getMetadataOf; save(): Promise<string>; remove(): Promise<void>; find(): Promise<this>; } export declare abstract class ResourceDriver { abstract create(resource: typeof Resource): Promise<void>; abstract save<T extends Resource>(model: T): Promise<string>; abstract remove<T extends Resource>(model: T): Promise<void>; abstract find<T extends Resource>(model: T): Promise<T>; abstract findAll<M extends Resource>(resource: ConstructorOf<M>, query: Query<M>): Promise<M[]>; } export {};