1 | export type SpurErrorCode = 400 | 401 | 403 | 404 | 405 | 408 | 409 | 500 | 502 | 503 | 504;
|
2 |
|
3 | export interface BaseError<TErrorCode extends SpurErrorCode | undefined = undefined> {
|
4 | create(message: string, internalError?: Error): this;
|
5 | extend(statusCode: number, defaultMessage: string, errorCode: string): this;
|
6 | set internalError(internalError: Error);
|
7 | setErrorCode(errorCode: string): this;
|
8 | setMessage(message: string): this;
|
9 | setStatusCode(statusCode: number): this;
|
10 | setData(data: unknown): this;
|
11 |
|
12 | errorCode: TErrorCode;
|
13 | }
|
14 |
|
15 | interface SpurErrors {
|
16 | BaseError: BaseError;
|
17 |
|
18 | ValidationError: BaseError<400>;
|
19 | UnauthorizedError: BaseError<401>;
|
20 | ForbiddenError: BaseError<403>;
|
21 | NotFoundError: BaseError<404>;
|
22 | MethodNotAllowedError: BaseError<405>;
|
23 | RequestTimeoutError: BaseError<408>;
|
24 | AlreadyExistsError: BaseError<409>;
|
25 | InternalServerError: BaseError<500>;
|
26 | BadGatewayError: BaseError<502>;
|
27 | ServiceUnavailableError: BaseError<503>;
|
28 | GatewayTimeoutError: BaseError<504>;
|
29 |
|
30 | errorByStatusCode: <TErrorCode extends SpurErrorCode>(statusCode: TErrorCode) => CodedError<TErrorCode>;
|
31 | }
|
32 |
|
33 | type CodedErrors = {
|
34 | [P in keyof SpurErrors as SpurErrors[P] extends BaseError<infer TErrorCode> ? `${TErrorCode}` : never]: SpurErrors[P];
|
35 | };
|
36 |
|
37 | type CodedError<TErrorCode extends SpurErrorCode> = CodedErrors[`${TErrorCode}`];
|
38 |
|
39 | declare const SpurErrors: SpurErrors;
|
40 |
|
41 | export default SpurErrors;
|