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
JavaScript
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();