-
-
Notifications
You must be signed in to change notification settings - Fork 3.6k
/
create-error.ts
35 lines (29 loc) · 990 Bytes
/
create-error.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
export interface DirectusError<Extensions = void> extends Error {
extensions: Extensions;
code: string;
status: number;
}
export interface DirectusErrorConstructor<Extensions = void> {
new (extensions: Extensions, options?: ErrorOptions): DirectusError<Extensions>;
readonly prototype: DirectusError<Extensions>;
}
export const createError = <Extensions = void>(
code: string,
message: string | ((extensions: Extensions) => string),
status = 500,
): DirectusErrorConstructor<Extensions> => {
return class extends Error implements DirectusError<Extensions> {
override name = 'DirectusError';
extensions: Extensions;
code = code.toUpperCase();
status = status;
constructor(extensions: Extensions, options?: ErrorOptions) {
const msg = typeof message === 'string' ? message : message(extensions as Extensions);
super(msg, options);
this.extensions = extensions;
}
override toString() {
return `${this.name} [${this.code}]: ${this.message}`;
}
};
};