create-new-express-app
Version:
A CLI tool to create a TypeScript Express application with best practices
90 lines (81 loc) • 2.26 kB
text/typescript
import { type ErrorResponseBody, type IncomingData } from "@/schemas";
import { StatusCodes } from "http-status-codes";
/**
* @swagger
* components:
* schemas:
* ErrorResponseBody:
* type: object
* properties:
* code:
* type: string
* example: "ERR001"
* error:
* type: string
* example: "APIException"
* message:
* type: string
* example: "Sorry, failed to send the request"
* description:
* type: string
* example: "The request failed due to an internal error"
*/
class ApiException extends Error {
public type: string;
public message: string;
public data: IncomingData;
public status: number;
public body: ErrorResponseBody;
constructor(message: string, data: IncomingData, status: number) {
super(message);
this.body = {
code: data.code || status.toLocaleString(),
error: this.constructor.name,
message: message,
description: data.description,
};
this.message = message;
this.type = this.constructor.name;
this.data = data;
this.status = status;
}
}
class InternalServerException extends ApiException {
constructor(message: string, data: IncomingData) {
super(message, data, StatusCodes.INTERNAL_SERVER_ERROR);
}
}
class InvalidEndpointException extends ApiException {
constructor(message: string, data: IncomingData) {
super(message, data, StatusCodes.NOT_FOUND);
}
}
class BadRequestException extends ApiException {
constructor(message: string, data: IncomingData) {
super(message, data, StatusCodes.BAD_REQUEST);
}
}
class SSEException extends ApiException {
constructor(message: string, data: IncomingData) {
super(message, data, StatusCodes.INTERNAL_SERVER_ERROR);
}
}
class UnexpectedException extends ApiException {
constructor(message: string, data: IncomingData) {
super(message, data, StatusCodes.INTERNAL_SERVER_ERROR);
}
}
class SendEmailException extends ApiException {
constructor(message: string, data: IncomingData) {
super(message, data, StatusCodes.BAD_REQUEST);
}
}
export {
ApiException,
InternalServerException,
InvalidEndpointException,
BadRequestException,
SSEException,
UnexpectedException,
SendEmailException,
};