UNPKG

nhb-toolbox

Version:

A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.

70 lines (69 loc) 1.98 kB
import { HTTP_STATUS_DATA } from './constants.js'; export class HttpStatus { #codesByNumber; #codesByName; static Groups = { informational: [], success: [], redirection: [], clientError: [], serverError: [], }; constructor() { this.#codesByNumber = new Map(); this.#codesByName = new Map(); for (const entry of HTTP_STATUS_DATA) { this.#storeEntry(entry); HttpStatus.Groups[entry.category].push(entry.code); } } getByCode(code) { return this.#codesByNumber.get(code); } getByName(name) { return this.#codesByName.get(name); } setMessage(code, newMessage) { const entry = this.#codesByNumber.get(code); if (!entry) { return false; } else { entry.message = newMessage; return true; } } addCode(...entries) { let added = false; for (const entry of entries) { if (!this.#codesByNumber.has(entry.code)) { this.#storeEntry(entry); HttpStatus.Groups[entry.category].push(entry.code); added = true; } } return added; } addOrOverrideCode(...entries) { for (const entry of entries) { this.#storeEntry(entry); HttpStatus.Groups[entry.category].push(entry.code); } return this; } list(category) { const entries = [...this.#codesByNumber.values()]; if (!category) { return entries; } else { return entries.filter((entry) => entry.category === category); } } #storeEntry(entry) { this.#codesByNumber.set(entry.code, { ...entry }); this.#codesByName.set(entry.name, { ...entry }); this.#codesByName.set(entry.readableName, { ...entry }); } } export const httpStatus = new HttpStatus();