lendb-server
Version:
`LenDB Server` is a wrapper around another database called Acebase that acts like a client. Think of it as parse-server and firebase had baby then voilah!!! `Hello World!!` LenDB is born.
173 lines (141 loc) • 4.7 kB
text/typescript
import Request from "hyper-express/types/components/http/Request";
import Response from "hyper-express/types/components/http/Response";
export let Authhooks: iAuthHook[] = [];
export let RefHooks: iRefHook[] = [];
import iLenQueryFilter from "extras/queryfilter";
import {Account} from "./auth"
export default class Hook {
protected _refhooks: iRefHook[] = [];
protected _authHooks: iAuthHook[] = [];
protected addOrReplaceRefHook(hook?: iRefHook) {
const { ref: table, event } = hook;
const el = this._refhooks.findIndex(
(h) => h.ref == table && h.event == event
);
if (el == -1) {
this._refhooks.push(hook);
} else {
this.refHooks[el] = hook;
}
}
protected addOrReplaceAuthHook(hook?: iAuthHook) {
}
beforeAdd(
ref: string,
callback: (data: any, req?: Request, res?: Response) => any
) {
this.addOrReplaceRefHook({ ref: ref, callback, event: "beforeAdd" });
}
afterAdd(
ref: string,
callback: (data: any, req?: Request, res?: Response) => any
) {
this.addOrReplaceRefHook({ ref: ref, callback, event: "afterAdd" });
}
beforeUpdate(
ref: string,
callback: (data: any, req?: Request, res?: Response) => any
) {
this.addOrReplaceRefHook({ ref: ref, callback, event: "beforeUpdate" });
}
afterUpdate(
ref: string,
callback: (data: any, req?: Request, res?: Response) => any
) {
this.addOrReplaceRefHook({ ref: ref, callback, event: "afterUpdate" });
}
beforeDestroy(
ref: string,
callback: (data: any, req?: Request, res?: Response) => any
) {
this.addOrReplaceRefHook({
ref: ref,
callback,
event: "beforeDestroy",
});
}
afterDestroy(
ref: string,
callback: (data: any, req?: Request, res?: Response) => any
) {
this.addOrReplaceRefHook({ ref: ref, callback, event: "afterDestroy" });
}
beforeFind(ref: string, callback: (query: iLenQueryFilter) => any) {
this.addOrReplaceRefHook({ ref: ref, callback, event: "beforeFind" });
}
afterFind(ref: string, callback: (data: any[]) => any) {
this.addOrReplaceRefHook({ ref: ref, callback, event: "afterFind" });
}
liveAdd(ref:string, callback: (data:any)=> any ){
this.addOrReplaceRefHook({ref,callback,event: "liveAdd"})
}
liveUpdate(ref:string, callback: (data:any)=> any ){
this.addOrReplaceRefHook({ref,callback,event: "liveUpdate"})
}
liveDestroy(ref:string, callback: (data:any)=> any ){
this.addOrReplaceRefHook({ref,callback,event: "liveDestroy"})
}
beforeLoad(
ref: string,
callback: (data: any, req?: Request, res?: Response) => any
) {
this.addOrReplaceRefHook({ ref: ref, callback, event: "beforeLoad" });
}
afterLoad(
ref: string,
callback: (data: any, req?: Request, res?: Response) => any
) {
this.addOrReplaceRefHook({ ref: ref, callback, event: "afterLoad" });
}
beforeLogin(
callback: (usernameOrEmail: string, password: string) => void
) {}
//todo Auth Hooks
afterLogin(callback: (userdetails: any) => void) {}
beforeTokenLogin(callback: (token: string) => void) {}
afterTokenLogin(callback: (data: any) => void) {}
beforeRegister(callback: (data: any) => void) {}
afterRegister(callback: (data: any) => void) {}
get refHooks() {
return this._refhooks;
}
get authHooks() {
return this._authHooks;
}
}
export function RegisterHook(hook: (hook: Hook) => void) {
let temp = new Hook();
hook(temp);
RefHooks = temp.refHooks;
Authhooks = temp.authHooks;
}
export type iRefEvent =
| "beforeAdd"
| "afterAdd"
| "liveAdd"
| "liveDestroy"
| "liveUpdate"
| "beforeUpdate"
| "afterUpdate"
| "beforeDestroy"
| "afterDestroy"
| "beforeFind"
| "afterFind"
| "beforeLoad"
| "afterLoad";
export interface iRefHook {
event: iRefEvent;
ref: string;
callback: (e: any, req: Request, res: Response, user: Account) => any;
}
export type iAuthEvent =
| "beforeLogin"
| "afterLogin"
| "beforeTokenLogin"
| "afterTokenLogin"
| "beforeRegister"
| "afterRegister";
export interface iAuthHook {
event: iAuthEvent;
callback: (e: any) => void;
}