"use strict"; /** * Provides some utility functions for somewhat efficiently modifying a * collection of headers. * * Note that this class only operates on ByteStrings (which is also why we use * toLowerCase internally). */ class HeaderList { constructor() { this.headers = new Map(); } append(name, value) { const existing = this.headers.get(name.toLowerCase()); if (existing) { name = existing[0].name; existing.push({ name, value }); } else { this.headers.set(name.toLowerCase(), [{ name, value }]); } } contains(name) { return this.headers.has(name.toLowerCase()); } get(name) { name = name.toLowerCase(); const values = this.headers.get(name); if (!values) { return null; } return values.map(h => h.value).join(", "); } delete(name) { this.headers.delete(name.toLowerCase()); } set(name, value) { const lowerName = name.toLowerCase(); this.headers.delete(lowerName); this.headers.set(lowerName, [{ name, value }]); } sortAndCombine() { const names = [...this.headers.keys()].sort(); return names.map(n => [n, this.get(n)]); } } module.exports = HeaderList;