var _a; import DOMException from '../exception/DOMException.js'; import * as PropertySymbol from '../PropertySymbol.js'; import DOMExceptionNameEnum from '../exception/DOMExceptionNameEnum.js'; /** * Fetch headers. * * @see https://developer.mozilla.org/en-US/docs/Web/API/Headers */ export default class Headers { /** * Constructor. * * @param init Headers init. */ constructor(init) { this[_a] = {}; if (init) { if (init instanceof Headers) { this[PropertySymbol.entries] = JSON.parse(JSON.stringify(init[PropertySymbol.entries])); } else if (Array.isArray(init)) { for (const entry of init) { if (entry.length !== 2) { throw new DOMException('Failed to construct "Headers": The provided init is not a valid array.', DOMExceptionNameEnum.invalidStateError); } this.append(entry[0], entry[1]); } } else { for (const name of Object.keys(init)) { this.set(name, init[name]); } } } } /** * Appends a new value onto an existing header inside a Headers object, or adds the header if it does not already exist. * * @param name Name. * @param value Value. */ append(name, value) { const lowerName = name.toLowerCase(); if (this[PropertySymbol.entries][lowerName]) { this[PropertySymbol.entries][lowerName].value += `, ${value}`; } else { this[PropertySymbol.entries][lowerName] = { name, value }; } } /** * Removes an header. * * @param name Name. */ delete(name) { delete this[PropertySymbol.entries][name.toLowerCase()]; } /** * Returns header value. * * @param name Name. * @returns Value. */ get(name) { return this[PropertySymbol.entries][name.toLowerCase()]?.value || null; } /** * Sets a new value for an existing header inside a Headers object, or adds the header if it does not already exist. * * @param name Name. * @param value Value. */ set(name, value) { this[PropertySymbol.entries][name.toLowerCase()] = { name, value }; } /** * Returns whether an Headers object contains a certain key. * * @param name Name. * @returns "true" if the Headers object contains the key. */ has(name) { return !!this[PropertySymbol.entries][name.toLowerCase()]; } /** * Executes a callback function once per each key/value pair in the Headers object. * * @param callback Callback. */ forEach(callback) { for (const header of Object.values(this[PropertySymbol.entries])) { callback(header.value, header.name, this); } } /** * Returns an iterator, allowing you to go through all keys of the key/value pairs contained in this object. * * @returns Iterator. */ *keys() { for (const header of Object.values(this[PropertySymbol.entries])) { yield header.name; } } /** * Returns an iterator, allowing you to go through all values of the key/value pairs contained in this object. * * @returns Iterator. */ *values() { for (const header of Object.values(this[PropertySymbol.entries])) { yield header.value; } } /** * Returns an iterator, allowing you to go through all key/value pairs contained in this object. * * @returns Iterator. */ *entries() { for (const header of Object.values(this[PropertySymbol.entries])) { yield [header.name, header.value]; } } /** * Iterator. * * @returns Iterator. */ *[(_a = PropertySymbol.entries, Symbol.iterator)]() { for (const header of Object.values(this[PropertySymbol.entries])) { yield [header.name, header.value]; } } } //# sourceMappingURL=Headers.js.map