UNPKG

ufiber

Version:

Next-gen webserver for node-js developer

104 lines (102 loc) 3.25 kB
const require_status = require('./status.cjs'); //#region src/errors.ts const nameCache = /* @__PURE__ */ new Map(); /** * Get a human-readable error name from the HTTP status code. */ const getErrorName = (status) => { if (nameCache.has(status)) return nameCache.get(status); if (status < 400 || status > 511) return "HttpError"; const rawName = require_status.HttpStatus[`${status}_NAME`]; if (!rawName) return "HttpError"; const camel = rawName.replace(/[^a-zA-Z0-9 ]+/g, "").split(/\s+/).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(""); const finalName = camel.endsWith("Error") ? camel : `${camel}Error`; nameCache.set(status, finalName); return finalName; }; /** * Base class for handling HTTP errors. */ var HttpError = class HttpError extends Error { /** * Creates an instance of `HttpError`. */ constructor(status = require_status.HttpStatus.INTERNAL_SERVER_ERROR, options = { message: "HttpError" }) { super(typeof options.message === "string" ? options.message : getErrorName(status)); this.status = status; this.options = options; this.name = options.name ?? getErrorName(status); Error.captureStackTrace?.(this, this.constructor); } static isError(value) { return value instanceof HttpError; } getBody() { const { name: error, status } = this; const { message, data = null, code = null } = this.options; return { status, error, message, data, code }; } }; /** * Utility to create custom HttpError subclasses with optional custom naming. */ const createHttpError = (status, defaultName) => class extends HttpError { constructor(message, options = {}) { super(status, { message, ...options, name: options.name ?? defaultName }); } }; /** * Represents a Bad Request HTTP error (400). * @extends {HttpError} */ const BadRequestError = createHttpError(require_status.HttpStatus.BAD_REQUEST); /** * Represents a Conflict HTTP error (409). * @extends {HttpError} */ const ConflictError = createHttpError(require_status.HttpStatus.CONFLICT); /** * Represents a Forbidden HTTP error (403). * @extends {HttpError} */ const ForbiddenError = createHttpError(require_status.HttpStatus.FORBIDDEN); /** * Represents a Not Found HTTP error (404). * @extends {HttpError} */ const NotFoundError = createHttpError(require_status.HttpStatus.NOT_FOUND); /** * Represents an UnAuthorized HTTP error (401). * @extends {HttpError} */ const UnAuthorizedError = createHttpError(require_status.HttpStatus.UNAUTHORIZED); /** * Represents an Internal Server Error HTTP error (500). * @extends {HttpError} */ const InternalServerError = createHttpError(require_status.HttpStatus.INTERNAL_SERVER_ERROR); /** * Represents an Content Too Larger Error HTTP error (413). * @extends {HttpError} */ const ContentTooLargeError = createHttpError(require_status.HttpStatus.PAYLOAD_TOO_LARGE); //#endregion exports.BadRequestError = BadRequestError; exports.ConflictError = ConflictError; exports.ContentTooLargeError = ContentTooLargeError; exports.ForbiddenError = ForbiddenError; exports.HttpError = HttpError; exports.InternalServerError = InternalServerError; exports.NotFoundError = NotFoundError; exports.UnAuthorizedError = UnAuthorizedError; exports.createHttpError = createHttpError;