export class GamanHeader { // [value, setted?] private data: Map = new Map(); constructor(headers: Record = {}) { for (const [key, value] of Object.entries(headers)) { if (value) { this.data.set(key.toLowerCase(), [value, false]); } } } /** * Retrieves the value of a specific header by key. * If the header value is an array (e.g., from multi-value headers), it will be joined into a single comma-separated string. * Header keys are case-insensitive. * * @param key - The name of the header to retrieve. * @returns The header value as a string, or undefined if not found. */ get(key: string): string | undefined { const k = key.toLowerCase(); const r = this.data.get(k); if (!r) return undefined; const [value] = r; return Array.isArray(value) ? value.join(', ') : value; } set(key: string, value: string | string[]): this { this.data.set(key.toLowerCase(), [value, true]); return this; } has(key: string): boolean { const k = key.toLowerCase(); return this.data.has(k); } delete(key: string): boolean { const k = key.toLowerCase(); return this.data.delete(k); } keys(): IterableIterator { return this.data.keys(); } entries(): IterableIterator<[string, [string | string[], boolean]]> { return this.data.entries(); } toRecord(): Record { const result: Record = {}; for (const [key, [value]] of this.data.entries()) { result[key] = Array.isArray(value) ? value.join(', ') : value; } return result; } toMap(): Map { const result = new Map(); for (const [key, [value]] of this.data.entries()) { result.set(key, value); } return result; } }