diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /third_party/js/PKI.js/src/errors/ArgumentError.ts | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/js/PKI.js/src/errors/ArgumentError.ts')
-rw-r--r-- | third_party/js/PKI.js/src/errors/ArgumentError.ts | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/third_party/js/PKI.js/src/errors/ArgumentError.ts b/third_party/js/PKI.js/src/errors/ArgumentError.ts new file mode 100644 index 0000000000..c3852f6b93 --- /dev/null +++ b/third_party/js/PKI.js/src/errors/ArgumentError.ts @@ -0,0 +1,76 @@ + +export interface AnyConstructor { + new(args: any): any; +} + +export type ArgumentType = + | "undefined" + | "null" + | "boolean" + | "number" + | "string" + | "object" + | "Array" + | "ArrayBuffer" + | "ArrayBufferView" + | AnyConstructor; + +export class ArgumentError extends TypeError { + + public static readonly NAME = "ArgumentError"; + + public static isType(value: any, type: "undefined"): value is undefined; + public static isType(value: any, type: "null"): value is null; + public static isType(value: any, type: "boolean"): value is boolean; + public static isType(value: any, type: "number"): value is number; + public static isType(value: any, type: "object"): value is object; + public static isType(value: any, type: "string"): value is string; + public static isType(value: any, type: "Array"): value is any[]; + public static isType(value: any, type: "ArrayBuffer"): value is ArrayBuffer; + public static isType(value: any, type: "ArrayBufferView"): value is ArrayBufferView; + public static isType<T>(value: any, type: new (...args: any[]) => T): value is T; + // @internal + public static isType(value: any, type: ArgumentType): boolean; + public static isType(value: any, type: ArgumentType): boolean { + if (typeof type === "string") { + if (type === "Array" && Array.isArray(value)) { + return true; + } else if (type === "ArrayBuffer" && value instanceof ArrayBuffer) { + return true; + } else if (type === "ArrayBufferView" && ArrayBuffer.isView(value)) { + return true; + } else if (typeof value === type) { + return true; + } + } else if (value instanceof type) { + return true; + } + + return false; + } + + public static assert(value: any, name: string, type: "undefined"): asserts value is undefined; + public static assert(value: any, name: string, type: "null"): asserts value is null; + public static assert(value: any, name: string, type: "boolean"): asserts value is boolean; + public static assert(value: any, name: string, type: "number"): asserts value is number; + public static assert(value: any, name: string, type: "object"): asserts value is { [key: string]: any; }; + public static assert(value: any, name: string, type: "string"): asserts value is string; + public static assert(value: any, name: string, type: "Array"): asserts value is any[]; + public static assert(value: any, name: string, type: "ArrayBuffer"): asserts value is ArrayBuffer; + public static assert(value: any, name: string, type: "ArrayBufferView"): asserts value is ArrayBufferView; + public static assert<T>(value: any, name: string, type: new (...args: any[]) => T): asserts value is T; + public static assert(value: any, name: string, type: ArgumentType, ...types: ArgumentType[]): void; + public static assert(value: any, name: string, ...types: ArgumentType[]): void { + for (const type of types) { + if (this.isType(value, type)) { + return; + } + } + + const typeNames = types.map(o => o instanceof Function && "name" in o ? o.name : `${o}`); + throw new ArgumentError(`Parameter '${name}' is not of type ${typeNames.length > 1 ? `(${typeNames.join(" or ")})` : typeNames[0]}`); + } + + public override name: typeof ArgumentError.NAME = ArgumentError.NAME; + +} |