ParameterError.ts (1582B)
1 import { EMPTY_STRING } from "../constants"; 2 import { ArgumentError } from "./ArgumentError"; 3 4 export class ParameterError extends TypeError { 5 6 public static readonly NAME = "ParameterError"; 7 8 public static assert(target: string, params: any, ...fields: string[]): void; 9 public static assert(params: any, ...fields: string[]): void; 10 public static assert(...args: any[]): void { 11 let target: string | null = null; 12 let params: any; 13 let fields: string[]; 14 if (typeof args[0] === "string") { 15 target = args[0]; 16 params = args[1]; 17 fields = args.slice(2); 18 } else { 19 params = args[0]; 20 fields = args.slice(1); 21 } 22 ArgumentError.assert(params, "parameters", "object"); 23 for (const field of fields) { 24 const value = params[field]; 25 if (value === undefined || value === null) { 26 throw new ParameterError(field, target); 27 } 28 } 29 } 30 31 public static assertEmpty(value: unknown, name: string, target?: string): asserts value { 32 if (value === undefined || value === null) { 33 throw new ParameterError(name, target); 34 } 35 } 36 37 public override name: typeof ParameterError.NAME = ParameterError.NAME; 38 39 public field: string; 40 public target?: string; 41 42 constructor(field: string, target: string | null = null, message?: string) { 43 super(); 44 45 this.field = field; 46 if (target) { 47 this.target = target; 48 } 49 50 if (message) { 51 this.message = message; 52 } else { 53 this.message = `Absent mandatory parameter '${field}' ${target ? ` in '${target}'` : EMPTY_STRING}`; 54 } 55 } 56 57 }