entities 3.0.1 → 4.1.1

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 (68) 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.d.ts +0 -5
  10. package/lib/encode-trie.d.ts.map +1 -1
  11. package/lib/encode-trie.js +22 -35
  12. package/lib/encode-trie.js.map +1 -0
  13. package/lib/encode.d.ts +15 -1
  14. package/lib/encode.d.ts.map +1 -1
  15. package/lib/encode.js +56 -57
  16. package/lib/encode.js.map +1 -0
  17. package/lib/esm/decode.d.ts +14 -0
  18. package/lib/esm/decode.d.ts.map +1 -0
  19. package/lib/esm/decode.js +135 -0
  20. package/lib/esm/decode.js.map +1 -0
  21. package/lib/esm/decode_codepoint.d.ts +3 -0
  22. package/lib/esm/decode_codepoint.d.ts.map +1 -0
  23. package/lib/esm/decode_codepoint.js +55 -0
  24. package/lib/esm/decode_codepoint.js.map +1 -0
  25. package/lib/esm/encode-trie.d.ts +3 -0
  26. package/lib/esm/encode-trie.d.ts.map +1 -0
  27. package/lib/esm/encode-trie.js +55 -0
  28. package/lib/esm/encode-trie.js.map +1 -0
  29. package/lib/esm/encode.d.ts +60 -0
  30. package/lib/esm/encode.d.ts.map +1 -0
  31. package/lib/esm/encode.js +119 -0
  32. package/lib/esm/encode.js.map +1 -0
  33. package/lib/esm/generated/decode-data-html.d.ts +3 -0
  34. package/lib/esm/generated/decode-data-html.d.ts.map +1 -0
  35. package/lib/esm/generated/decode-data-html.js +4 -0
  36. package/lib/esm/generated/decode-data-html.js.map +1 -0
  37. package/lib/esm/generated/decode-data-xml.d.ts +3 -0
  38. package/lib/esm/generated/decode-data-xml.d.ts.map +1 -0
  39. package/lib/esm/generated/decode-data-xml.js +4 -0
  40. package/lib/esm/generated/decode-data-xml.js.map +1 -0
  41. package/lib/esm/generated/encode-html.d.ts +8 -0
  42. package/lib/esm/generated/encode-html.d.ts.map +1 -0
  43. package/lib/esm/generated/encode-html.js +4 -0
  44. package/lib/esm/generated/encode-html.js.map +1 -0
  45. package/lib/esm/index.d.ts +101 -0
  46. package/lib/esm/index.d.ts.map +1 -0
  47. package/lib/esm/index.js +111 -0
  48. package/lib/esm/index.js.map +1 -0
  49. package/lib/esm/package.json +1 -0
  50. package/lib/generated/decode-data-html.d.ts.map +1 -1
  51. package/lib/generated/decode-data-html.js +2 -1
  52. package/lib/generated/decode-data-html.js.map +1 -0
  53. package/lib/generated/decode-data-xml.d.ts.map +1 -1
  54. package/lib/generated/decode-data-xml.js +2 -1
  55. package/lib/generated/decode-data-xml.js.map +1 -0
  56. package/lib/generated/encode-html.d.ts +8 -0
  57. package/lib/generated/encode-html.d.ts.map +1 -0
  58. package/lib/generated/encode-html.js +6 -0
  59. package/lib/generated/encode-html.js.map +1 -0
  60. package/lib/index.d.ts +18 -8
  61. package/lib/index.d.ts.map +1 -1
  62. package/lib/index.js +47 -30
  63. package/lib/index.js.map +1 -0
  64. package/package.json +34 -14
  65. package/readme.md +61 -13
  66. package/lib/maps/entities.json +0 -1
  67. package/lib/maps/legacy.json +0 -1
  68. 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"}
@@ -1,8 +1,3 @@
1
1
  export declare const getCodePoint: (str: string, index: number) => number;
2
2
  export declare function encodeHTMLTrieRe(regExp: RegExp, str: string): string;
3
- export interface TrieNode {
4
- value?: string;
5
- next?: Map<number, TrieNode>;
6
- }
7
- export declare function getTrie(map: Record<string, string>): Map<number, TrieNode>;
8
3
  //# sourceMappingURL=encode-trie.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"encode-trie.d.ts","sourceRoot":"","sources":["../src/encode-trie.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,YAAY,QAGT,MAAM,SAAS,MAAM,KAAG,MAQD,CAAC;AAIxC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAkCpE;AAED,MAAM,WAAW,QAAQ;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CAChC;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAmB1E"}
1
+ {"version":3,"file":"encode-trie.d.ts","sourceRoot":"","sources":["../src/encode-trie.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,YAAY,QAGT,MAAM,SAAS,MAAM,KAAG,MAQD,CAAC;AAExC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CA6CpE"}
@@ -3,8 +3,8 @@ 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.getTrie = exports.encodeHTMLTrieRe = exports.getCodePoint = void 0;
7
- var entities_json_1 = __importDefault(require("./maps/entities.json"));
6
+ exports.encodeHTMLTrieRe = exports.getCodePoint = void 0;
7
+ var encode_html_js_1 = __importDefault(require("./generated/encode-html.js"));
8
8
  function isHighSurrugate(c) {
9
9
  return (c & 64512 /* Mask */) === 55296 /* High */;
10
10
  }
@@ -22,7 +22,6 @@ String.prototype.codePointAt != null
22
22
  0x10000
23
23
  : c.charCodeAt(index);
24
24
  };
25
- var htmlTrie = getTrie(entities_json_1.default);
26
25
  function encodeHTMLTrieRe(regExp, str) {
27
26
  var _a;
28
27
  var ret = "";
@@ -31,22 +30,30 @@ function encodeHTMLTrieRe(regExp, str) {
31
30
  while ((match = regExp.exec(str)) !== null) {
32
31
  var i = match.index;
33
32
  var char = str.charCodeAt(i);
34
- var next = htmlTrie.get(char);
35
- if (next) {
36
- if (next.next != null && i + 1 < str.length) {
37
- var value = (_a = next.next.get(str.charCodeAt(i + 1))) === null || _a === void 0 ? void 0 : _a.value;
38
- if (value != null) {
39
- ret += str.substring(lastIdx, i) + value;
40
- regExp.lastIndex += 1;
41
- lastIdx = i + 2;
42
- continue;
33
+ var next = encode_html_js_1.default.get(char);
34
+ if (next != null) {
35
+ if (typeof next !== "string") {
36
+ // We are in a branch. Try to match the next char.
37
+ if (i + 1 < str.length) {
38
+ var value = typeof next.n === "number"
39
+ ? next.n === str.charCodeAt(i + 1)
40
+ ? next.o
41
+ : null
42
+ : next.n.get(str.charCodeAt(i + 1));
43
+ if (value) {
44
+ ret += str.substring(lastIdx, i) + value;
45
+ lastIdx = regExp.lastIndex += 1;
46
+ continue;
47
+ }
43
48
  }
49
+ // If we have a character without a value, use a numeric entitiy.
50
+ next = (_a = next.v) !== null && _a !== void 0 ? _a : "&#x".concat(char.toString(16), ";");
44
51
  }
45
- ret += str.substring(lastIdx, i) + next.value;
52
+ ret += str.substring(lastIdx, i) + next;
46
53
  lastIdx = i + 1;
47
54
  }
48
55
  else {
49
- ret += str.substring(lastIdx, i) + "&#x" + exports.getCodePoint(str, i).toString(16) + ";";
56
+ ret += "".concat(str.substring(lastIdx, i), "&#x").concat((0, exports.getCodePoint)(str, i).toString(16), ";");
50
57
  // Increase by 1 if we have a surrogate pair
51
58
  lastIdx = regExp.lastIndex += Number(isHighSurrugate(char));
52
59
  }
@@ -54,24 +61,4 @@ function encodeHTMLTrieRe(regExp, str) {
54
61
  return ret + str.substr(lastIdx);
55
62
  }
56
63
  exports.encodeHTMLTrieRe = encodeHTMLTrieRe;
57
- function getTrie(map) {
58
- var _a, _b, _c, _d;
59
- var trie = new Map();
60
- for (var _i = 0, _e = Object.keys(map); _i < _e.length; _i++) {
61
- var value = _e[_i];
62
- var key = map[value];
63
- // Resolve the key
64
- var lastMap = trie;
65
- for (var i = 0; i < key.length - 1; i++) {
66
- var char = key.charCodeAt(i);
67
- var next = (_a = lastMap.get(char)) !== null && _a !== void 0 ? _a : {};
68
- lastMap.set(char, next);
69
- lastMap = (_b = next.next) !== null && _b !== void 0 ? _b : (next.next = new Map());
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);
74
- }
75
- return trie;
76
- }
77
- exports.getTrie = getTrie;
64
+ //# 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"}