import * as plugins from './smartguard.plugins.js'; export type TGuardFunction = (dataArg: T) => Promise; export interface IGuardOptions { name?: string; failedHint?: string; } export class Guard { private guardFunction: TGuardFunction; public guardoOptions: IGuardOptions; constructor(guardFunctionArg: TGuardFunction, optionsArg?: IGuardOptions) { this.guardFunction = guardFunctionArg; this.guardoOptions = optionsArg; } /** * executes the guard against a data argument; * @param dataArg */ public async exec(dataArg: T) { const result = await this.guardFunction(dataArg); return result; } public async getFailedHint(dataArg: T) { const result = await this.exec(dataArg); if (!result) { return this.guardoOptions.failedHint; } else { return null; } } }