tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }