UNPKG

1.41 kBTypeScriptView Raw
1export type SpurErrorCode = 400 | 401 | 403 | 404 | 405 | 408 | 409 | 500 | 502 | 503 | 504;
2
3export 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
15interface 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
33type CodedErrors = {
34 [P in keyof SpurErrors as SpurErrors[P] extends BaseError<infer TErrorCode> ? `${TErrorCode}` : never]: SpurErrors[P];
35};
36
37type CodedError<TErrorCode extends SpurErrorCode> = CodedErrors[`${TErrorCode}`];
38
39declare const SpurErrors: SpurErrors;
40
41export default SpurErrors;