Skip to content
This repository has been archived by the owner on Oct 3, 2023. It is now read-only.

Commit

Permalink
feat: add errors and wrappers (and probably more idk)
Browse files Browse the repository at this point in the history
  • Loading branch information
GGORG0 committed Jul 14, 2022
1 parent 4e65a18 commit d1c63ee
Show file tree
Hide file tree
Showing 9 changed files with 334 additions and 219 deletions.
4 changes: 4 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@
"comma-dangle": [
"warn",
"always-multiline"
],
"new-parens": [
"warn",
"never"
]
}
}
136 changes: 136 additions & 0 deletions src/errors.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
import { Response } from "express";

export abstract class SharXError {
code: string;
data: unknown;
httpCode: number;

constructor(data: unknown, httpCode: number, code?: string) {
this.code = code || this.constructor.name;
this.data = data;
this.httpCode = httpCode;
}

toJSON(): Record<string, unknown> {
return {
code: this.code,
data: this.data,
};
}

send(res: Response): void {
res.status(this.httpCode).json(this.toJSON());
}
}

export class UnknownError extends SharXError {
constructor(data: unknown) {
super(data, 500);
}
}

export class MalformedRequestError extends SharXError {
constructor(data: Record<string, unknown> = {}) {
super(data, 400);
}
}

interface JsonFieldErrorData extends Record<string, unknown> {
field: string;
}

export class JsonFieldError extends MalformedRequestError {
constructor(data: JsonFieldErrorData) {
super(data);
}
}

interface IllegalCharacterErrorData extends JsonFieldErrorData {
character: string;
}

export class IllegalCharacterError extends JsonFieldError {
constructor(data: IllegalCharacterErrorData) {
super(data);
}
}

interface TooShortFieldErrorData extends JsonFieldErrorData {
minLength: number;
}

export class TooShortFieldError extends JsonFieldError {
constructor(data: TooShortFieldErrorData) {
super(data);
}
}

interface TooLongFieldErrorData extends JsonFieldErrorData {
maxLength: number;
}

export class TooLongFieldError extends JsonFieldError {
constructor(data: TooLongFieldErrorData) {
super(data);
}
}

export class InvalidAuthHeaderError extends MalformedRequestError {
constructor(data: Record<string, unknown> = {}) {
super(data);
}
}

export class InvalidCredentialsError extends SharXError {
constructor(data: Record<string, unknown> = {}) {
super(data, 401);
}
}

export class InvalidTokenError extends InvalidCredentialsError {
constructor(data: Record<string, unknown> = {}) {
super(data);
}
}

export class ExpiredTokenError extends InvalidTokenError {
constructor(data: Record<string, unknown> = {}) {
super(data);
this.httpCode = 403;
}
}

export class ResourceNotFoundError extends SharXError {
constructor(data: Record<string, unknown> = {}) {
super(data, 404);
}
}

export class ImageNotFoundError extends ResourceNotFoundError {
constructor(data: Record<string, unknown> = {}) {
super(data);
}
}

export class ResourceAlreadyExistsError extends SharXError {
constructor(data: Record<string, unknown> = {}) {
super(data, 400);
}
}

interface FieldAlreadyExistsErrorData extends Record<string, unknown> {
field: string;
}

export class FieldAlreadyExistsError extends ResourceAlreadyExistsError {
constructor(data: FieldAlreadyExistsErrorData) {
super(data);
}
}

export class UserAlreadyRegisteredError extends ResourceAlreadyExistsError {
constructor(data: FieldAlreadyExistsErrorData) {
super(data);
}
}

2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ routes.forEach((route) => {
});

app.listen(port, () => {
startTime = new Date();
startTime = new Date;
signale.success(`Listening on port ${port}`);
});

Expand Down
Loading

0 comments on commit d1c63ee

Please sign in to comment.