entities 3.0.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/lib/decode.d.ts +6 -7
  2. package/lib/decode.d.ts.map +1 -1
  3. package/lib/decode.js +42 -41
  4. package/lib/decode.js.map +1 -0
  5. package/lib/decode_codepoint.d.ts +1 -0
  6. package/lib/decode_codepoint.d.ts.map +1 -1
  7. package/lib/decode_codepoint.js +9 -3
  8. package/lib/decode_codepoint.js.map +1 -0
  9. package/lib/encode-trie.js +11 -10
  10. package/lib/encode-trie.js.map +1 -0
  11. package/lib/encode.d.ts +15 -1
  12. package/lib/encode.d.ts.map +1 -1
  13. package/lib/encode.js +56 -57
  14. package/lib/encode.js.map +1 -0
  15. package/lib/esm/decode.d.ts +14 -0
  16. package/lib/esm/decode.d.ts.map +1 -0
  17. package/lib/esm/decode.js +135 -0
  18. package/lib/esm/decode.js.map +1 -0
  19. package/lib/esm/decode_codepoint.d.ts +3 -0
  20. package/lib/esm/decode_codepoint.d.ts.map +1 -0
  21. package/lib/esm/decode_codepoint.js +55 -0
  22. package/lib/esm/decode_codepoint.js.map +1 -0
  23. package/lib/esm/encode-trie.d.ts +8 -0
  24. package/lib/esm/encode-trie.d.ts.map +1 -0
  25. package/lib/esm/encode-trie.js +67 -0
  26. package/lib/esm/encode-trie.js.map +1 -0
  27. package/lib/esm/encode.d.ts +60 -0
  28. package/lib/esm/encode.d.ts.map +1 -0
  29. package/lib/esm/encode.js +119 -0
  30. package/lib/esm/encode.js.map +1 -0
  31. package/lib/esm/generated/decode-data-html.d.ts +3 -0
  32. package/lib/esm/generated/decode-data-html.d.ts.map +1 -0
  33. package/lib/esm/generated/decode-data-html.js +4 -0
  34. package/lib/esm/generated/decode-data-html.js.map +1 -0
  35. package/lib/esm/generated/decode-data-xml.d.ts +3 -0
  36. package/lib/esm/generated/decode-data-xml.d.ts.map +1 -0
  37. package/lib/esm/generated/decode-data-xml.js +4 -0
  38. package/lib/esm/generated/decode-data-xml.js.map +1 -0
  39. package/lib/esm/index.d.ts +101 -0
  40. package/lib/esm/index.d.ts.map +1 -0
  41. package/lib/esm/index.js +111 -0
  42. package/lib/esm/index.js.map +1 -0
  43. package/lib/esm/maps/entities-encode.json +1 -0
  44. package/lib/esm/package.json +1 -0
  45. package/lib/generated/decode-data-html.d.ts.map +1 -1
  46. package/lib/generated/decode-data-html.js +2 -1
  47. package/lib/generated/decode-data-html.js.map +1 -0
  48. package/lib/generated/decode-data-xml.d.ts.map +1 -1
  49. package/lib/generated/decode-data-xml.js +2 -1
  50. package/lib/generated/decode-data-xml.js.map +1 -0
  51. package/lib/index.d.ts +18 -8
  52. package/lib/index.d.ts.map +1 -1
  53. package/lib/index.js +47 -30
  54. package/lib/index.js.map +1 -0
  55. package/lib/maps/entities-encode.json +1 -0
  56. package/package.json +35 -14
  57. package/readme.md +62 -13
  58. package/lib/maps/entities.json +0 -1
  59. package/lib/maps/legacy.json +0 -1
  60. package/lib/maps/xml.json +0 -1
package/lib/decode.d.ts CHANGED
@@ -1,13 +1,12 @@
1
- import htmlDecodeTree from "./generated/decode-data-html";
2
- import xmlDecodeTree from "./generated/decode-data-xml";
3
- export { htmlDecodeTree, xmlDecodeTree };
1
+ import htmlDecodeTree from "./generated/decode-data-html.js";
2
+ import xmlDecodeTree from "./generated/decode-data-xml.js";
3
+ import decodeCodePoint from "./decode_codepoint.js";
4
+ export { htmlDecodeTree, xmlDecodeTree, decodeCodePoint };
4
5
  export declare enum BinTrieFlags {
5
- HAS_VALUE = 32768,
6
- BRANCH_LENGTH = 32512,
7
- MULTI_BYTE = 128,
6
+ VALUE_LENGTH = 49152,
7
+ BRANCH_LENGTH = 16256,
8
8
  JUMP_TABLE = 127
9
9
  }
10
- export declare const JUMP_OFFSET_BASE: number;
11
10
  export declare function determineBranch(decodeTree: Uint16Array, current: number, nodeIdx: number, char: number): number;
12
11
  export declare function decodeHTML(str: string): string;
13
12
  export declare function decodeHTMLStrict(str: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../src/decode.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,8BAA8B,CAAC;AAC1D,OAAO,aAAa,MAAM,6BAA6B,CAAC;AAIxD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;AAczC,oBAAY,YAAY;IACpB,SAAS,QAAwB;IACjC,aAAa,QAAwB;IACrC,UAAU,MAAwB;IAClC,UAAU,MAAwB;CACrC;AAED,eAAO,MAAM,gBAAgB,QAAqB,CAAC;AAmGnD,wBAAgB,eAAe,CAC3B,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACb,MAAM,CA0CR;AAKD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C"}
1
+ {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../src/decode.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,aAAa,MAAM,gCAAgC,CAAC;AAC3D,OAAO,eAAe,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC;AAc1D,oBAAY,YAAY;IACpB,YAAY,QAAwB;IACpC,aAAa,QAAwB;IACrC,UAAU,MAAwB;CACrC;AA8GD,wBAAgB,eAAe,CAC3B,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACb,MAAM,CAsCR;AAKD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C"}
package/lib/decode.js CHANGED
@@ -3,20 +3,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTML = exports.determineBranch = exports.JUMP_OFFSET_BASE = exports.BinTrieFlags = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0;
7
- var decode_data_html_1 = __importDefault(require("./generated/decode-data-html"));
8
- exports.htmlDecodeTree = decode_data_html_1.default;
9
- var decode_data_xml_1 = __importDefault(require("./generated/decode-data-xml"));
10
- exports.xmlDecodeTree = decode_data_xml_1.default;
11
- var decode_codepoint_1 = __importDefault(require("./decode_codepoint"));
6
+ exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTML = exports.determineBranch = exports.BinTrieFlags = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0;
7
+ var decode_data_html_js_1 = __importDefault(require("./generated/decode-data-html.js"));
8
+ exports.htmlDecodeTree = decode_data_html_js_1.default;
9
+ var decode_data_xml_js_1 = __importDefault(require("./generated/decode-data-xml.js"));
10
+ exports.xmlDecodeTree = decode_data_xml_js_1.default;
11
+ var decode_codepoint_js_1 = __importDefault(require("./decode_codepoint.js"));
12
+ exports.decodeCodePoint = decode_codepoint_js_1.default;
12
13
  var BinTrieFlags;
13
14
  (function (BinTrieFlags) {
14
- BinTrieFlags[BinTrieFlags["HAS_VALUE"] = 32768] = "HAS_VALUE";
15
- BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 32512] = "BRANCH_LENGTH";
16
- BinTrieFlags[BinTrieFlags["MULTI_BYTE"] = 128] = "MULTI_BYTE";
15
+ BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
16
+ BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
17
17
  BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
18
18
  })(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {}));
19
- exports.JUMP_OFFSET_BASE = 48 /* ZERO */ - 1;
20
19
  function getDecoder(decodeTree) {
21
20
  return function decodeHTMLBinary(str, strict) {
22
21
  var ret = "";
@@ -38,12 +37,12 @@ function getDecoder(decodeTree) {
38
37
  strIdx += 1;
39
38
  start += 1;
40
39
  }
41
- while (((cp = str.charCodeAt(++strIdx)) >= 48 /* ZERO */ &&
42
- cp <= 57 /* NINE */) ||
40
+ do
41
+ cp = str.charCodeAt(++strIdx);
42
+ while ((cp >= 48 /* ZERO */ && cp <= 57 /* NINE */) ||
43
43
  (base === 16 &&
44
44
  (cp | 32 /* To_LOWER_BIT */) >= 97 /* LOWER_A */ &&
45
- (cp | 32 /* To_LOWER_BIT */) <= 102 /* LOWER_F */))
46
- ;
45
+ (cp | 32 /* To_LOWER_BIT */) <= 102 /* LOWER_F */));
47
46
  if (start !== strIdx) {
48
47
  var entity = str.substring(start, strIdx);
49
48
  var parsed = parseInt(entity, base);
@@ -53,12 +52,12 @@ function getDecoder(decodeTree) {
53
52
  else if (strict) {
54
53
  continue;
55
54
  }
56
- ret += decode_codepoint_1.default(parsed);
55
+ ret += (0, decode_codepoint_js_1.default)(parsed);
57
56
  lastIdx = strIdx;
58
57
  }
59
58
  continue;
60
59
  }
61
- var result = null;
60
+ var resultIdx = 0;
62
61
  var excess = 1;
63
62
  var treeIdx = 0;
64
63
  var current = decodeTree[treeIdx];
@@ -67,25 +66,29 @@ function getDecoder(decodeTree) {
67
66
  if (treeIdx < 0)
68
67
  break;
69
68
  current = decodeTree[treeIdx];
69
+ var masked = current & BinTrieFlags.VALUE_LENGTH;
70
70
  // If the branch is a value, store it and continue
71
- if (current & BinTrieFlags.HAS_VALUE) {
71
+ if (masked) {
72
72
  // If we have a legacy entity while parsing strictly, just skip the number of bytes
73
- if (strict && str.charCodeAt(strIdx) !== 59 /* SEMI */) {
74
- // No need to consider multi-byte values, as the legacy entity is always a single byte
75
- treeIdx += 1;
76
- }
77
- else {
78
- // If this is a surrogate pair, combine the higher bits from the node with the next byte
79
- result =
80
- current & BinTrieFlags.MULTI_BYTE
81
- ? String.fromCharCode(decodeTree[++treeIdx], decodeTree[++treeIdx])
82
- : String.fromCharCode(decodeTree[++treeIdx]);
73
+ if (!strict || str.charCodeAt(strIdx) === 59 /* SEMI */) {
74
+ resultIdx = treeIdx;
83
75
  excess = 0;
84
76
  }
77
+ // The mask is the number of bytes of the value, including the current byte.
78
+ var valueLength = (masked >> 14) - 1;
79
+ if (valueLength === 0)
80
+ break;
81
+ treeIdx += valueLength;
85
82
  }
86
83
  }
87
- if (result != null) {
88
- ret += result;
84
+ if (resultIdx !== 0) {
85
+ var valueLength = (decodeTree[resultIdx] & BinTrieFlags.VALUE_LENGTH) >> 14;
86
+ ret +=
87
+ valueLength === 1
88
+ ? String.fromCharCode(decodeTree[resultIdx] & ~BinTrieFlags.VALUE_LENGTH)
89
+ : valueLength === 2
90
+ ? String.fromCharCode(decodeTree[resultIdx + 1])
91
+ : String.fromCharCode(decodeTree[resultIdx + 1], decodeTree[resultIdx + 2]);
89
92
  lastIdx = strIdx - excess + 1;
90
93
  }
91
94
  }
@@ -93,23 +96,20 @@ function getDecoder(decodeTree) {
93
96
  };
94
97
  }
95
98
  function determineBranch(decodeTree, current, nodeIdx, char) {
96
- if (current <= 128) {
97
- return char === current ? nodeIdx : -1;
98
- }
99
- var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 8;
99
+ var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
100
+ var jumpOffset = current & BinTrieFlags.JUMP_TABLE;
101
+ // Case 1: Single branch encoded in jump offset
100
102
  if (branchCount === 0) {
101
- return -1;
103
+ return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
102
104
  }
103
- if (branchCount === 1) {
104
- return char === decodeTree[nodeIdx] ? nodeIdx + 1 : -1;
105
- }
106
- var jumpOffset = current & BinTrieFlags.JUMP_TABLE;
105
+ // Case 2: Multiple branches encoded in jump table
107
106
  if (jumpOffset) {
108
- var value = char - exports.JUMP_OFFSET_BASE - jumpOffset;
107
+ var value = char - jumpOffset;
109
108
  return value < 0 || value > branchCount
110
109
  ? -1
111
110
  : decodeTree[nodeIdx + value] - 1;
112
111
  }
112
+ // Case 3: Multiple branches encoded in dictionary
113
113
  // Binary search for the character.
114
114
  var lo = nodeIdx;
115
115
  var hi = lo + branchCount - 1;
@@ -129,8 +129,8 @@ function determineBranch(decodeTree, current, nodeIdx, char) {
129
129
  return -1;
130
130
  }
131
131
  exports.determineBranch = determineBranch;
132
- var htmlDecoder = getDecoder(decode_data_html_1.default);
133
- var xmlDecoder = getDecoder(decode_data_xml_1.default);
132
+ var htmlDecoder = getDecoder(decode_data_html_js_1.default);
133
+ var xmlDecoder = getDecoder(decode_data_xml_js_1.default);
134
134
  function decodeHTML(str) {
135
135
  return htmlDecoder(str, false);
136
136
  }
@@ -143,3 +143,4 @@ function decodeXML(str) {
143
143
  return xmlDecoder(str, true);
144
144
  }
145
145
  exports.decodeXML = decodeXML;
146
+ //# sourceMappingURL=decode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode.js","sourceRoot":"","sources":["../src/decode.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
+ export declare function replaceCodePoint(codePoint: number): number;
1
2
  export default function decodeCodePoint(codePoint: number): string;
2
3
  //# sourceMappingURL=decode_codepoint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decode_codepoint.d.ts","sourceRoot":"","sources":["../src/decode_codepoint.ts"],"names":[],"mappings":"AAmDA,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMjE"}
1
+ {"version":3,"file":"decode_codepoint.d.ts","sourceRoot":"","sources":["../src/decode_codepoint.ts"],"names":[],"mappings":"AAmDA,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,UAMjD;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  // Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.replaceCodePoint = void 0;
4
5
  var decodeMap = new Map([
5
6
  [0, 65533],
6
7
  [128, 8364],
@@ -44,11 +45,16 @@ String.fromCodePoint ||
44
45
  output += String.fromCharCode(codePoint);
45
46
  return output;
46
47
  };
47
- function decodeCodePoint(codePoint) {
48
+ function replaceCodePoint(codePoint) {
48
49
  var _a;
49
50
  if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {
50
- return "\uFFFD";
51
+ return 0xfffd;
51
52
  }
52
- return fromCodePoint((_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint);
53
+ return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;
54
+ }
55
+ exports.replaceCodePoint = replaceCodePoint;
56
+ function decodeCodePoint(codePoint) {
57
+ return fromCodePoint(replaceCodePoint(codePoint));
53
58
  }
54
59
  exports.default = decodeCodePoint;
60
+ //# sourceMappingURL=decode_codepoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode_codepoint.js","sourceRoot":"","sources":["../src/decode_codepoint.ts"],"names":[],"mappings":";AAAA,qHAAqH;;;AAErH,IAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACtB,CAAC,CAAC,EAAE,KAAK,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;CACb,CAAC,CAAC;AAEH,IAAM,aAAa;AACf,iHAAiH;AACjH,MAAM,CAAC,aAAa;IACpB,UAAU,SAAiB;QACvB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,SAAS,GAAG,MAAM,EAAE;YACpB,SAAS,IAAI,OAAO,CAAC;YACrB,MAAM,IAAI,MAAM,CAAC,YAAY,CACzB,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CACxC,CAAC;YACF,SAAS,GAAG,MAAM,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;SAC5C;QAED,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;AAEN,SAAgB,gBAAgB,CAAC,SAAiB;;IAC9C,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,SAAS,GAAG,QAAQ,EAAE;QACtE,OAAO,MAAM,CAAC;KACjB;IAED,OAAO,MAAA,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,mCAAI,SAAS,CAAC;AACjD,CAAC;AAND,4CAMC;AAED,SAAwB,eAAe,CAAC,SAAiB;IACrD,OAAO,aAAa,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;AACtD,CAAC;AAFD,kCAEC"}
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getTrie = exports.encodeHTMLTrieRe = exports.getCodePoint = void 0;
7
- var entities_json_1 = __importDefault(require("./maps/entities.json"));
7
+ var entities_encode_json_1 = __importDefault(require("./maps/entities-encode.json"));
8
8
  function isHighSurrugate(c) {
9
9
  return (c & 64512 /* Mask */) === 55296 /* High */;
10
10
  }
@@ -22,7 +22,7 @@ String.prototype.codePointAt != null
22
22
  0x10000
23
23
  : c.charCodeAt(index);
24
24
  };
25
- var htmlTrie = getTrie(entities_json_1.default);
25
+ var htmlTrie = getTrie(entities_encode_json_1.default);
26
26
  function encodeHTMLTrieRe(regExp, str) {
27
27
  var _a;
28
28
  var ret = "";
@@ -46,7 +46,7 @@ function encodeHTMLTrieRe(regExp, str) {
46
46
  lastIdx = i + 1;
47
47
  }
48
48
  else {
49
- ret += str.substring(lastIdx, i) + "&#x" + exports.getCodePoint(str, i).toString(16) + ";";
49
+ ret += "".concat(str.substring(lastIdx, i), "&#x").concat((0, exports.getCodePoint)(str, i).toString(16), ";");
50
50
  // Increase by 1 if we have a surrogate pair
51
51
  lastIdx = regExp.lastIndex += Number(isHighSurrugate(char));
52
52
  }
@@ -58,20 +58,21 @@ function getTrie(map) {
58
58
  var _a, _b, _c, _d;
59
59
  var trie = new Map();
60
60
  for (var _i = 0, _e = Object.keys(map); _i < _e.length; _i++) {
61
- var value = _e[_i];
62
- var key = map[value];
61
+ var decoded = _e[_i];
62
+ var entity = map[decoded];
63
63
  // Resolve the key
64
64
  var lastMap = trie;
65
- for (var i = 0; i < key.length - 1; i++) {
66
- var char = key.charCodeAt(i);
65
+ for (var i = 0; i < decoded.length - 1; i++) {
66
+ var char = decoded.charCodeAt(i);
67
67
  var next = (_a = lastMap.get(char)) !== null && _a !== void 0 ? _a : {};
68
68
  lastMap.set(char, next);
69
69
  lastMap = (_b = next.next) !== null && _b !== void 0 ? _b : (next.next = new Map());
70
70
  }
71
- var val = (_c = lastMap.get(key.charCodeAt(key.length - 1))) !== null && _c !== void 0 ? _c : {};
72
- (_d = val.value) !== null && _d !== void 0 ? _d : (val.value = "&" + value + ";");
73
- lastMap.set(key.charCodeAt(key.length - 1), val);
71
+ var val = (_c = lastMap.get(decoded.charCodeAt(decoded.length - 1))) !== null && _c !== void 0 ? _c : {};
72
+ (_d = val.value) !== null && _d !== void 0 ? _d : (val.value = "&".concat(entity, ";"));
73
+ lastMap.set(decoded.charCodeAt(decoded.length - 1), val);
74
74
  }
75
75
  return trie;
76
76
  }
77
77
  exports.getTrie = getTrie;
78
+ //# sourceMappingURL=encode-trie.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode-trie.js","sourceRoot":"","sources":["../src/encode-trie.ts"],"names":[],"mappings":"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"}
package/lib/encode.d.ts CHANGED
@@ -42,5 +42,19 @@ export declare const escape: typeof encodeXML;
42
42
  *
43
43
  * @param data String to escape.
44
44
  */
45
- export declare function escapeUTF8(data: string): string;
45
+ export declare const escapeUTF8: (data: string) => string;
46
+ /**
47
+ * Encodes all characters that have to be escaped in HTML attributes,
48
+ * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
49
+ *
50
+ * @param data String to escape.
51
+ */
52
+ export declare const escapeAttribute: (data: string) => string;
53
+ /**
54
+ * Encodes all characters that have to be escaped in HTML text,
55
+ * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
56
+ *
57
+ * @param data String to escape.
58
+ */
59
+ export declare const escapeText: (data: string) => string;
46
60
  //# sourceMappingURL=encode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../src/encode.ts"],"names":[],"mappings":"AAgBA;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA0B7C;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AACD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAoCD;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,kBAAY,CAAC;AAEhC;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkB/C"}
1
+ {"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../src/encode.ts"],"names":[],"mappings":"AAaA;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA0B7C;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AACD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,kBAAY,CAAC;AA2BhC;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,SA7Bb,MAAM,KAAK,MA6BuC,CAAC;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,eAAe,SArClB,MAAM,KAAK,MA4CpB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,SApDb,MAAM,KAAK,MA4DpB,CAAC"}
package/lib/encode.js CHANGED
@@ -1,19 +1,16 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.escapeUTF8 = exports.escape = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.encodeXML = void 0;
7
- var xml_json_1 = __importDefault(require("./maps/xml.json"));
8
- var encode_trie_1 = require("./encode-trie");
9
- var entities_json_1 = __importDefault(require("./maps/entities.json"));
10
- var htmlReplacer = getCharRegExp(entities_json_1.default, true);
11
- var xmlReplacer = getCharRegExp(xml_json_1.default, true);
12
- var xmlInvalidChars = getCharRegExp(xml_json_1.default, false);
13
- var xmlCodeMap = new Map(Object.keys(xml_json_1.default).map(function (k) { return [
14
- xml_json_1.default[k].charCodeAt(0),
15
- "&" + k + ";",
16
- ]; }));
3
+ exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.encodeXML = void 0;
4
+ var encode_trie_js_1 = require("./encode-trie.js");
5
+ var htmlReplacer = /[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g;
6
+ var xmlReplacer = /["&'<>$\x80-\uFFFF]/g;
7
+ var xmlCodeMap = new Map([
8
+ [34, "&quot;"],
9
+ [38, "&amp;"],
10
+ [39, "&apos;"],
11
+ [60, "&lt;"],
12
+ [62, "&gt;"],
13
+ ]);
17
14
  /**
18
15
  * Encodes all non-ASCII characters, as well as characters not valid in XML
19
16
  * documents using XML entities.
@@ -34,7 +31,7 @@ function encodeXML(str) {
34
31
  lastIdx = i + 1;
35
32
  }
36
33
  else {
37
- ret += str.substring(lastIdx, i) + "&#x" + encode_trie_1.getCodePoint(str, i).toString(16) + ";";
34
+ ret += "".concat(str.substring(lastIdx, i), "&#x").concat((0, encode_trie_js_1.getCodePoint)(str, i).toString(16), ";");
38
35
  // Increase by 1 if we have a surrogate pair
39
36
  lastIdx = xmlReplacer.lastIndex += Number((char & 65408) === 0xd800);
40
37
  }
@@ -53,7 +50,7 @@ exports.encodeXML = encodeXML;
53
50
  * numeric hexadecimal reference (eg. `&#xfc;`) will be used.
54
51
  */
55
52
  function encodeHTML(data) {
56
- return encode_trie_1.encodeHTMLTrieRe(htmlReplacer, data);
53
+ return (0, encode_trie_js_1.encodeHTMLTrieRe)(htmlReplacer, data);
57
54
  }
58
55
  exports.encodeHTML = encodeHTML;
59
56
  /**
@@ -64,33 +61,9 @@ exports.encodeHTML = encodeHTML;
64
61
  * numeric hexadecimal reference (eg. `&#xfc;`) will be used.
65
62
  */
66
63
  function encodeNonAsciiHTML(data) {
67
- return encode_trie_1.encodeHTMLTrieRe(xmlReplacer, data);
64
+ return (0, encode_trie_js_1.encodeHTMLTrieRe)(xmlReplacer, data);
68
65
  }
69
66
  exports.encodeNonAsciiHTML = encodeNonAsciiHTML;
70
- function getCharRegExp(map, nonAscii) {
71
- // Collect the start characters of all entities
72
- var chars = Object.keys(map)
73
- .map(function (k) { return "\\" + map[k].charAt(0); })
74
- .filter(function (v) { return !nonAscii || v.charCodeAt(1) < 128; })
75
- .sort(function (a, b) { return a.charCodeAt(1) - b.charCodeAt(1); })
76
- // Remove duplicates
77
- .filter(function (v, i, a) { return v !== a[i + 1]; });
78
- // Add ranges to single characters.
79
- for (var start = 0; start < chars.length - 1; start++) {
80
- // Find the end of a run of characters
81
- var end = start;
82
- while (end < chars.length - 1 &&
83
- chars[end].charCodeAt(1) + 1 === chars[end + 1].charCodeAt(1)) {
84
- end += 1;
85
- }
86
- var count = 1 + end - start;
87
- // We want to replace at least three characters
88
- if (count < 3)
89
- continue;
90
- chars.splice(start, count, chars[start] + "-" + chars[end]);
91
- }
92
- return new RegExp("[" + chars.join("") + (nonAscii ? "\\x80-\\uFFFF" : "") + "]", "g");
93
- }
94
67
  /**
95
68
  * Encodes all non-ASCII characters, as well as characters not valid in XML
96
69
  * documents using numeric hexadecimal reference (eg. `&#xfc;`).
@@ -101,6 +74,23 @@ function getCharRegExp(map, nonAscii) {
101
74
  * @param data String to escape.
102
75
  */
103
76
  exports.escape = encodeXML;
77
+ function getEscaper(regex, map) {
78
+ return function escape(data) {
79
+ var match;
80
+ var lastIdx = 0;
81
+ var result = "";
82
+ while ((match = regex.exec(data))) {
83
+ if (lastIdx !== match.index) {
84
+ result += data.substring(lastIdx, match.index);
85
+ }
86
+ // We know that this chararcter will be in the map.
87
+ result += map.get(match[0].charCodeAt(0));
88
+ // Every match will be of length 1
89
+ lastIdx = match.index + 1;
90
+ }
91
+ return result + data.substring(lastIdx);
92
+ };
93
+ }
104
94
  /**
105
95
  * Encodes all characters not valid in XML documents using XML entities.
106
96
  *
@@ -108,19 +98,28 @@ exports.escape = encodeXML;
108
98
  *
109
99
  * @param data String to escape.
110
100
  */
111
- function escapeUTF8(data) {
112
- var match;
113
- var lastIdx = 0;
114
- var result = "";
115
- while ((match = xmlInvalidChars.exec(data))) {
116
- if (lastIdx !== match.index) {
117
- result += data.substring(lastIdx, match.index);
118
- }
119
- // We know that this chararcter will be in `inverseXML`
120
- result += xmlCodeMap.get(match[0].charCodeAt(0));
121
- // Every match will be of length 1
122
- lastIdx = match.index + 1;
123
- }
124
- return result + data.substring(lastIdx);
125
- }
126
- exports.escapeUTF8 = escapeUTF8;
101
+ exports.escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
102
+ /**
103
+ * Encodes all characters that have to be escaped in HTML attributes,
104
+ * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
105
+ *
106
+ * @param data String to escape.
107
+ */
108
+ exports.escapeAttribute = getEscaper(/["&\u00A0]/g, new Map([
109
+ [34, "&quot;"],
110
+ [38, "&amp;"],
111
+ [160, "&nbsp;"],
112
+ ]));
113
+ /**
114
+ * Encodes all characters that have to be escaped in HTML text,
115
+ * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
116
+ *
117
+ * @param data String to escape.
118
+ */
119
+ exports.escapeText = getEscaper(/[&<>\u00A0]/g, new Map([
120
+ [38, "&amp;"],
121
+ [60, "&lt;"],
122
+ [62, "&gt;"],
123
+ [160, "&nbsp;"],
124
+ ]));
125
+ //# sourceMappingURL=encode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode.js","sourceRoot":"","sources":["../src/encode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import htmlDecodeTree from "./generated/decode-data-html.js";
2
+ import xmlDecodeTree from "./generated/decode-data-xml.js";
3
+ import decodeCodePoint from "./decode_codepoint.js";
4
+ export { htmlDecodeTree, xmlDecodeTree, decodeCodePoint };
5
+ export declare enum BinTrieFlags {
6
+ VALUE_LENGTH = 49152,
7
+ BRANCH_LENGTH = 16256,
8
+ JUMP_TABLE = 127
9
+ }
10
+ export declare function determineBranch(decodeTree: Uint16Array, current: number, nodeIdx: number, char: number): number;
11
+ export declare function decodeHTML(str: string): string;
12
+ export declare function decodeHTMLStrict(str: string): string;
13
+ export declare function decodeXML(str: string): string;
14
+ //# sourceMappingURL=decode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../src/decode.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,aAAa,MAAM,gCAAgC,CAAC;AAC3D,OAAO,eAAe,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC;AAc1D,oBAAY,YAAY;IACpB,YAAY,QAAwB;IACpC,aAAa,QAAwB;IACrC,UAAU,MAAwB;CACrC;AA8GD,wBAAgB,eAAe,CAC3B,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACb,MAAM,CAsCR;AAKD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C"}
@@ -0,0 +1,135 @@
1
+ import htmlDecodeTree from "./generated/decode-data-html.js";
2
+ import xmlDecodeTree from "./generated/decode-data-xml.js";
3
+ import decodeCodePoint from "./decode_codepoint.js";
4
+ // Re-export for use by eg. htmlparser2
5
+ export { htmlDecodeTree, xmlDecodeTree, decodeCodePoint };
6
+ export var BinTrieFlags;
7
+ (function (BinTrieFlags) {
8
+ BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
9
+ BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
10
+ BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
11
+ })(BinTrieFlags || (BinTrieFlags = {}));
12
+ function getDecoder(decodeTree) {
13
+ return function decodeHTMLBinary(str, strict) {
14
+ let ret = "";
15
+ let lastIdx = 0;
16
+ let strIdx = 0;
17
+ while ((strIdx = str.indexOf("&", strIdx)) >= 0) {
18
+ ret += str.slice(lastIdx, strIdx);
19
+ lastIdx = strIdx;
20
+ // Skip the "&"
21
+ strIdx += 1;
22
+ // If we have a numeric entity, handle this separately.
23
+ if (str.charCodeAt(strIdx) === 35 /* NUM */) {
24
+ // Skip the leading "&#". For hex entities, also skip the leading "x".
25
+ let start = strIdx + 1;
26
+ let base = 10;
27
+ let cp = str.charCodeAt(start);
28
+ if ((cp | 32 /* To_LOWER_BIT */) === 120 /* LOWER_X */) {
29
+ base = 16;
30
+ strIdx += 1;
31
+ start += 1;
32
+ }
33
+ do
34
+ cp = str.charCodeAt(++strIdx);
35
+ while ((cp >= 48 /* ZERO */ && cp <= 57 /* NINE */) ||
36
+ (base === 16 &&
37
+ (cp | 32 /* To_LOWER_BIT */) >= 97 /* LOWER_A */ &&
38
+ (cp | 32 /* To_LOWER_BIT */) <= 102 /* LOWER_F */));
39
+ if (start !== strIdx) {
40
+ const entity = str.substring(start, strIdx);
41
+ const parsed = parseInt(entity, base);
42
+ if (str.charCodeAt(strIdx) === 59 /* SEMI */) {
43
+ strIdx += 1;
44
+ }
45
+ else if (strict) {
46
+ continue;
47
+ }
48
+ ret += decodeCodePoint(parsed);
49
+ lastIdx = strIdx;
50
+ }
51
+ continue;
52
+ }
53
+ let resultIdx = 0;
54
+ let excess = 1;
55
+ let treeIdx = 0;
56
+ let current = decodeTree[treeIdx];
57
+ for (; strIdx < str.length; strIdx++, excess++) {
58
+ treeIdx = determineBranch(decodeTree, current, treeIdx + 1, str.charCodeAt(strIdx));
59
+ if (treeIdx < 0)
60
+ break;
61
+ current = decodeTree[treeIdx];
62
+ const masked = current & BinTrieFlags.VALUE_LENGTH;
63
+ // If the branch is a value, store it and continue
64
+ if (masked) {
65
+ // If we have a legacy entity while parsing strictly, just skip the number of bytes
66
+ if (!strict || str.charCodeAt(strIdx) === 59 /* SEMI */) {
67
+ resultIdx = treeIdx;
68
+ excess = 0;
69
+ }
70
+ // The mask is the number of bytes of the value, including the current byte.
71
+ const valueLength = (masked >> 14) - 1;
72
+ if (valueLength === 0)
73
+ break;
74
+ treeIdx += valueLength;
75
+ }
76
+ }
77
+ if (resultIdx !== 0) {
78
+ const valueLength = (decodeTree[resultIdx] & BinTrieFlags.VALUE_LENGTH) >> 14;
79
+ ret +=
80
+ valueLength === 1
81
+ ? String.fromCharCode(decodeTree[resultIdx] & ~BinTrieFlags.VALUE_LENGTH)
82
+ : valueLength === 2
83
+ ? String.fromCharCode(decodeTree[resultIdx + 1])
84
+ : String.fromCharCode(decodeTree[resultIdx + 1], decodeTree[resultIdx + 2]);
85
+ lastIdx = strIdx - excess + 1;
86
+ }
87
+ }
88
+ return ret + str.slice(lastIdx);
89
+ };
90
+ }
91
+ export function determineBranch(decodeTree, current, nodeIdx, char) {
92
+ const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
93
+ const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
94
+ // Case 1: Single branch encoded in jump offset
95
+ if (branchCount === 0) {
96
+ return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
97
+ }
98
+ // Case 2: Multiple branches encoded in jump table
99
+ if (jumpOffset) {
100
+ const value = char - jumpOffset;
101
+ return value < 0 || value > branchCount
102
+ ? -1
103
+ : decodeTree[nodeIdx + value] - 1;
104
+ }
105
+ // Case 3: Multiple branches encoded in dictionary
106
+ // Binary search for the character.
107
+ let lo = nodeIdx;
108
+ let hi = lo + branchCount - 1;
109
+ while (lo <= hi) {
110
+ const mid = (lo + hi) >>> 1;
111
+ const midVal = decodeTree[mid];
112
+ if (midVal < char) {
113
+ lo = mid + 1;
114
+ }
115
+ else if (midVal > char) {
116
+ hi = mid - 1;
117
+ }
118
+ else {
119
+ return decodeTree[mid + branchCount];
120
+ }
121
+ }
122
+ return -1;
123
+ }
124
+ const htmlDecoder = getDecoder(htmlDecodeTree);
125
+ const xmlDecoder = getDecoder(xmlDecodeTree);
126
+ export function decodeHTML(str) {
127
+ return htmlDecoder(str, false);
128
+ }
129
+ export function decodeHTMLStrict(str) {
130
+ return htmlDecoder(str, true);
131
+ }
132
+ export function decodeXML(str) {
133
+ return xmlDecoder(str, true);
134
+ }
135
+ //# sourceMappingURL=decode.js.map