import { Context, HttpRequest } from "@azure/functions"; import { APIGatewayProxyEvent } from "aws-lambda"; import { Request, Response } from "express"; export interface DynamicObject { [key: string]: any; } export interface AzureCreateHooks { beforeCreate?: (ctx: Context, req: HttpRequest) => Promise | void; afterCreate?: (data: any, ctx: Context, req: HttpRequest) => Promise | void; beforeResponse?: (defaultBody: DynamicObject, ctx: Context, req: HttpRequest) => DynamicObject; } export interface ExpressCreateHooks { beforeCreate?: (req: Request, res: Response) => Promise | void; afterCreate?: (data: any, req: Request, res: Response) => Promise | void; beforeResponse?: (defaultBody: DynamicObject, req: Request, res: Response) => DynamicObject; } export interface LambdaCreateHooks { beforeCreate?: (event: APIGatewayProxyEvent) => Promise | void; afterCreate?: (data: any, event: APIGatewayProxyEvent) => Promise | void; beforeResponse?: (defaultBody: DynamicObject, event: APIGatewayProxyEvent) => DynamicObject; } export interface AzureFuncHooks { afterFunctionStart?: (ctx: Context, req: HttpRequest) => Promise | void; beforeFind?: (ctx: Context, req: HttpRequest) => Promise | void; beforeQuery?: (options: DynamicObject, context: Context, req: HttpRequest) => Promise | void; beforeCreate?: (ctx: Context, req: HttpRequest) => Promise | void; afterCreate?: (data: any, ctx: Context, req: HttpRequest) => Promise | void; beforeUpdate?: (data: any, ctx: Context, req: HttpRequest) => Promise | void; afterUpdate?: (data: any, ctx: Context, req: HttpRequest) => Promise | void; beforeDelete?: (data: any, ctx: Context, req: HttpRequest) => Promise | void; afterDelete?: (ctx: Context, req: HttpRequest) => Promise | void; beforeResponse?: (defaultBody: DynamicObject, ctx: Context, req: HttpRequest) => DynamicObject; } export interface ExpressFuncHooks { afterFunctionStart?: (req: Request, res: Response) => Promise | void; beforeFind?: (req: Request, res: Response) => Promise | void; beforeQuery?: (options: DynamicObject, req: Request, res: Response) => Promise | void; beforeCreate?: (req: Request, res: Response) => Promise | void; afterCreate?: (data: any, req: Request, res: Response) => Promise | void; beforeUpdate?: (data: any, req: Request, res: Response) => Promise | void; afterUpdate?: (data: any, req: Request, res: Response) => Promise | void; beforeDelete?: (data: any, req: Request, res: Response) => Promise | void; afterDelete?: (req: Request, res: Response) => Promise | void; beforeResponse?: (defaultBody: DynamicObject, req: Request, res: Response) => DynamicObject; } export interface LambdaFuncHooks { afterFunctionStart?: (event: APIGatewayProxyEvent) => Promise | void; beforeFind?: (event: APIGatewayProxyEvent) => Promise | void; beforeQuery?: (options: DynamicObject, event: APIGatewayProxyEvent) => Promise | void; beforeCreate?: (event: APIGatewayProxyEvent) => Promise | void; afterCreate?: (data: any, event: APIGatewayProxyEvent) => Promise | void; beforeUpdate?: (data: any, event: APIGatewayProxyEvent) => Promise | void; afterUpdate?: (data: any, event: APIGatewayProxyEvent) => Promise | void; beforeDelete?: (data: any, event: APIGatewayProxyEvent) => Promise | void; afterDelete?: (event: APIGatewayProxyEvent) => Promise | void; beforeResponse?: (defaultBody: DynamicObject, event: APIGatewayProxyEvent) => DynamicObject; } export interface ParamsMap { [param: string]: ModelOptions; } export interface ModelOptions { model: any; hooks?: AzureFuncHooks | ExpressFuncHooks | LambdaFuncHooks; searchColumns?: string[]; message?: string; } export interface AzureFindHooks { beforeResponse?: (defaultBody: DynamicObject, ctx: Context, req: HttpRequest) => DynamicObject; beforeFind?: (ctx: Context, req: HttpRequest) => Promise | void; beforeQuery?: (options: DynamicObject, context: Context, req: HttpRequest) => Promise | void; } export interface ExpressFindHooks { beforeResponse?: (defaultBody: DynamicObject, req: Request, res: Response) => DynamicObject; beforeFind?: (req: Request, res: Response) => Promise | void; beforeQuery?: (options: DynamicObject, req: Request, res: Response) => Promise | void; } export interface LambdaFindHooks { beforeResponse?: (defaultBody: DynamicObject, event: APIGatewayProxyEvent) => DynamicObject; beforeFind?: (event: APIGatewayProxyEvent) => Promise | void; beforeQuery?: (options: DynamicObject, event: APIGatewayProxyEvent) => Promise | void; } export interface LambdaFindHooks { beforeResponse?: (defaultBody: DynamicObject, event: APIGatewayProxyEvent) => DynamicObject; beforeFind?: (event: APIGatewayProxyEvent) => Promise | void; beforeQuery?: (options: DynamicObject, event: APIGatewayProxyEvent) => Promise | void; } export interface AzureUpdateHooks { beforeResponse?: (defaultBody: DynamicObject, ctx: Context, req: HttpRequest) => DynamicObject; beforeFind?: (ctx: Context, req: HttpRequest) => Promise | void; beforeUpdate?: (data: any, ctx: Context, req: HttpRequest) => Promise | void; afterUpdate?: (data: any, ctx: Context, req: HttpRequest) => Promise | void; beforeQuery?: (options: DynamicObject, context: Context, req: HttpRequest) => Promise | void; } export interface ExpressUpdateHooks { beforeResponse?: (defaultBody: DynamicObject, req: Request, res: Response) => DynamicObject; beforeFind?: (req: Request, res: Response) => Promise | void; beforeUpdate?: (data: any, req: Request, res: Response) => Promise | void; afterUpdate?: (data: any, req: Request, res: Response) => Promise | void; beforeQuery?: (options: DynamicObject, req: Request, res: Response) => Promise | void; } export interface LambdaUpdateHooks { beforeResponse?: (defaultBody: DynamicObject, event: APIGatewayProxyEvent) => DynamicObject; beforeFind?: (event: APIGatewayProxyEvent) => Promise | void; beforeUpdate?: (data: any, event: APIGatewayProxyEvent) => Promise | void; afterUpdate?: (data: any, event: APIGatewayProxyEvent) => Promise | void; beforeQuery?: (options: DynamicObject, event: APIGatewayProxyEvent) => Promise | void; } export interface AzureDeleteHooks { beforeResponse?: (defaultBody: DynamicObject, ctx: Context, req: HttpRequest) => DynamicObject; beforeFind?: (ctx: Context, req: HttpRequest) => Promise | void; beforeDelete?: (data: any, ctx: Context, req: HttpRequest) => Promise | void; afterDelete?: (ctx: Context, req: HttpRequest) => Promise | void; beforeQuery?: (options: DynamicObject, context: Context, req: HttpRequest) => Promise | void; } export interface ExpressDeleteHooks { beforeResponse?: (defaultBody: DynamicObject, req: Request, res: Response) => DynamicObject; beforeFind?: (req: Request, res: Response) => Promise | void; beforeDelete?: (data: any, req: Request, res: Response) => Promise | void; afterDelete?: (req: Request, res: Response) => Promise | void; beforeQuery?: (options: DynamicObject, req: Request, res: Response) => Promise | void; } export interface LambdaDeleteHooks { beforeResponse?: (defaultBody: DynamicObject, event: APIGatewayProxyEvent) => DynamicObject; beforeFind?: (event: APIGatewayProxyEvent) => Promise | void; beforeDelete?: (data: any, event: APIGatewayProxyEvent) => Promise | void; afterDelete?: (event: APIGatewayProxyEvent) => Promise | void; beforeQuery?: (options: DynamicObject, event: APIGatewayProxyEvent) => Promise | void; } export interface RawSqlEventHooks { beforeQuery?: (state: any) => boolean; afterQuery?: (data: any, state: any) => void; } export interface RawSqlEvents { [key: string]: RawSqlEventHooks; } export interface RawSqlHooks { afterFunctionStart?: (event: APIGatewayProxyEvent) => Promise | void; beforeResponse?: (defaultBody: DynamicObject, event: APIGatewayProxyEvent, state: any) => DynamicObject; }