Blame view

lib/jsdom/living/fetch/header-list.js 1.17 KB
858f2bdf5   Boyan Georgiev   fixes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
  "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;