import type { ActionName, ApiNames, ModelSettings, ServerSettings, Settings } from '../types'; type RouteMethod = 'GET' | 'POST' | 'PATCH' | 'DELETE' | 'PUT'; type RawRequest = { method: RouteMethod; url: string; body?: string; headers: { [key: string]: string; }; }; type RouteHandler = (request: Request, db: any, server?: any) => void; type CustomRouteHandler = (request: SimpleRequest, db: Exclude) => void; type Route = { method: RouteMethod; path: string; handler: RouteHandler; model: string; settings: ModelSettings; }; type ModelDefinition = { [key: string]: ModelSettings; }; type Filter = { [K in keyof Partial]: { [field: string]: (item: Db[K]['items'][0], value: string, db: Db) => boolean; }; }; type MetaFields = { [K in keyof Partial]: { [field: string]: (items: Db[K]['items'], db: Db) => any; }; }; type Sorters = { [K in keyof Partial]: { [field: string]: (a: Db[K]['items'][0], b: Db[K]['items'][0], dir: number, db: Db) => number; }; }; type SideEffect = { [K in keyof Partial]: { index?: (items: Db[K]['items'][0][], db: Db, request: SimpleRequest) => Db[K]['items'][0][] | void; create?: (item: Db[K]['items'][0], db: Db, request: SimpleRequest) => Db[K]['items'][0] | void; read?: (item: Db[K]['items'][0], db: Db, request: SimpleRequest) => Db[K]['items'][0] | void; update?: (item: Db[K]['items'][0], db: Db, request: SimpleRequest) => Db[K]['items'][0] | void; delete?: (item: Db[K]['items'][0], db: Db, request: SimpleRequest) => void; }; }; type SimpleRequest = { json: object; form: object; query: object; headers: object; params: { [key: string]: string; }; identity?: IdentityModel; }; export type Request = { json: object; form: object; query: object; params: { [key: string]: string; }; model: string; settings: ModelSettings; headers: object; filters: { [field: string]: (item: any, value: string, db: any) => boolean; }; sideEffects: { [action in ActionName]?: (item: any, db: any, data?: any) => any | void; }; identity: any; sorters: { [field: string]: (a: any, b: any, dir: number, db: any) => number; }; metaFieldMethods: { [field: string]: (items: any, db: any) => any; }; }; export default class Server { protected routes: Route[]; protected customRoutes: Route[]; protected overrides: Route[]; protected db: DbType; identityModel: string; identity: IdentityModel | null; protected baseURL: string; protected settings: ServerSettings; protected idsAreNumbers: boolean; protected filters: Filter; protected sideEffects: SideEffect; protected metaFields: MetaFields; protected sorters: Sorters; protected addDevtoolsEvent: ((event: any) => void) | undefined; protected events: any[]; naming: ApiNames; constructor(settings: Settings, models: ModelDefinition, db: DbType); /** Reset the server: truncates all db collections and removes overriden routes */ reset(): void; /** Overwrite the response delay */ setDelay(delay: number): void; protected generateRoutes(models: ModelDefinition): void; protected addCustomRoute(method: RouteMethod, path: string, handler: CustomRouteHandler): void; protected override(method: RouteMethod, path: string, handler: CustomRouteHandler): void; /** Add a custom GET route */ get(path: string, handler: CustomRouteHandler): void; /** Add a custom PATCH route */ patch(path: string, handler: CustomRouteHandler): void; /** Add a custom POST route */ post(path: string, handler: CustomRouteHandler): void; /** Add a custom DELETE route */ delete(path: string, handler: CustomRouteHandler): void; /** Add a temporary GET route (will be removed if server.reset is called) */ overrideGet(path: string, handler: CustomRouteHandler): void; /** Add a temporary PATCH route (will be removed if server.reset is called) */ overridePatch(path: string, handler: CustomRouteHandler): void; /** Add a temporary POST route (will be removed if server.reset is called) */ overridePost(path: string, handler: CustomRouteHandler): void; /** Add a temporary DELETE route (will be removed if server.reset is called) */ overrideDelete(path: string, handler: CustomRouteHandler): void; protected parseQuery(search: string): { [key: string]: any; }; protected parseUrl(url: string, baseURL: string): { path: string; query: { [key: string]: any; }; }; protected getJsonBody(str: string): any; protected findMatchingRoute(method: RouteMethod, path: string): { route: Route; params: { [key: string]: string; }; } | { route: null; params: null; }; protected parseRequest({ method, url, body, headers }: RawRequest, baseURL: string): void; handleRequest(method: RouteMethod, url: string, body: string, headers: { [key: string]: string; }): Promise; /** Add one or more custom filters */ addFilters(obj: Filter): void; /** Add one or more custom meta fields */ addMetaFields(obj: MetaFields): void; /** Add on or more sideffects */ addSideEffects(obj: SideEffect): void; /** Add one or more custom sorters */ addSorters(obj: Sorters): void; protected logEvent(title: string, subtitle: string, data: any, logType?: string): void; protected setDevTools(fn: (event: any) => void): void; } export {};