Don't get me wrong, it's great that @calixteman wanted to implement that — JS should definitely be supported! I don't want to come off as rude or attacking.

For starters, JS reference specified in the [commit comment](https://github.com/mozilla/pdf.js/commit/8de98079ca05f8f7001ee077771055a57dc0e948) is outdated. It's version 8.1 from 2007… We're more than decade past that now. We should be implementing [Acrobat DC SDK](https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/AcrobatDC_js_api_reference.pdf) ([here](https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/#t=Acro12_MasterBook%2FJS_API_AcroJS%2FJavaScript_API.htm) in a nice HTML version).

Other than that, the Doc object now is only implemented with `info` property with standard fields (`Title`, `Author`, `Subject`, `Keywords`, `Creator`, `Producer`, `CreationDate`, `ModDate` and `Trapped`, case insensitive). But [according to the spec](https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/AcrobatDC_js_api_reference.pdf#page=243) (even [in that old version](https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/js_api_reference.pdf#page=243)), this object can contain other, non-standard properties, that can be set both in Acrobat interface and in JS (which are case-sensitive then).

Acrobat 9.0 introduced another field to that property, `Authors`, containing semicolon-delimited list of authors.

There are probably other problems with that code due to the outdated spec @calixteman was apparently working on.
"<!DOCTYPE lolz [" +
      '  <!ENTITY lol "lol">' +
      '  <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">' +
      '  <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">' +
      '  <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">' +
      '  <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">' +
      '  <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">' +
      '  <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">' +
      '  <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">' +
      '  <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">' +
      '  <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">' +
      "]>" +
      '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">' +
      '  <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/">' +
      "    <dc:title>" +
      "      <rdf:Alt>" +
      '        <rdf:li xml:lang="x-default">a&lol9;b</rdf:li>' +
      "      </rdf:Alt>" +
      "    </dc:title>" +
      "  </rdf:Description>" +
      "</rdf:RDF>";
    const metadata = new Metadata(data);
    expect(metadata.has("dc:title")).toBeTruthy();
    expect(metadata.has("dc:qux")).toBeFalsy();
    expect(metadata.get("dc:title")).toEqual("a&lol9;b");
    expect(metadata.get("dc:qux")).toEqual(null);
    expect(metadata.getAll()).toEqual({ "dc:title": "a&lol9;b" });
  });
});