UNPKG

mhtml-stream

Version:
60 lines (59 loc) 1.61 kB
export class Headers { // keyed by lowercased name; the original name casing (first seen) is // preserved for iteration while lookups are case-insensitive, per RFC 5322 #raw = new Map(); [Symbol.iterator]() { return this.entries(); } append(key, value) { const entry = this.#raw.get(key.toLowerCase()); if (entry === undefined) { this.#raw.set(key.toLowerCase(), { key, values: [value] }); } else { entry.values.push(value); } } *entries(delim = ", ") { for (const { key, values } of this.#raw.values()) { yield [key, values.join(delim)]; } } *entriesAll() { for (const { key, values } of this.#raw.values()) { for (const val of values) { yield [key, val]; } } } get(key, delim = ", ") { const entry = this.#raw.get(key.toLowerCase()); if (entry === undefined) { return null; } else { return entry.values.join(delim); } } getAll(key) { return this.#raw.get(key.toLowerCase())?.values ?? []; } has(key) { return this.#raw.has(key.toLowerCase()); } *keys() { for (const { key } of this.#raw.values()) { yield key; } } *values(delim = ", ") { for (const { values } of this.#raw.values()) { yield values.join(delim); } } *valuesAll() { for (const { values } of this.#raw.values()) { yield* values; } } }