entities 4.3.1 → 4.5.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 (58) hide show
  1. package/lib/decode.d.ts +182 -4
  2. package/lib/decode.d.ts.map +1 -1
  3. package/lib/decode.js +439 -82
  4. package/lib/decode.js.map +1 -1
  5. package/lib/decode_codepoint.d.ts +15 -0
  6. package/lib/decode_codepoint.d.ts.map +1 -1
  7. package/lib/decode_codepoint.js +16 -0
  8. package/lib/decode_codepoint.js.map +1 -1
  9. package/lib/encode.d.ts.map +1 -1
  10. package/lib/encode.js +1 -1
  11. package/lib/encode.js.map +1 -1
  12. package/lib/escape.d.ts.map +1 -1
  13. package/lib/escape.js +11 -1
  14. package/lib/escape.js.map +1 -1
  15. package/lib/esm/decode.d.ts +182 -4
  16. package/lib/esm/decode.d.ts.map +1 -1
  17. package/lib/esm/decode.js +411 -81
  18. package/lib/esm/decode.js.map +1 -1
  19. package/lib/esm/decode_codepoint.d.ts +15 -0
  20. package/lib/esm/decode_codepoint.d.ts.map +1 -1
  21. package/lib/esm/decode_codepoint.js +16 -0
  22. package/lib/esm/decode_codepoint.js.map +1 -1
  23. package/lib/esm/encode.d.ts.map +1 -1
  24. package/lib/esm/encode.js +1 -1
  25. package/lib/esm/encode.js.map +1 -1
  26. package/lib/esm/escape.d.ts.map +1 -1
  27. package/lib/esm/escape.js +11 -1
  28. package/lib/esm/escape.js.map +1 -1
  29. package/lib/esm/generated/decode-data-html.d.ts.map +1 -1
  30. package/lib/esm/generated/decode-data-html.js +4 -1
  31. package/lib/esm/generated/decode-data-html.js.map +1 -1
  32. package/lib/esm/generated/decode-data-xml.d.ts.map +1 -1
  33. package/lib/esm/generated/decode-data-xml.js +4 -1
  34. package/lib/esm/generated/decode-data-xml.js.map +1 -1
  35. package/lib/esm/generated/encode-html.d.ts +1 -1
  36. package/lib/esm/generated/encode-html.d.ts.map +1 -1
  37. package/lib/esm/generated/encode-html.js +7 -1
  38. package/lib/esm/generated/encode-html.js.map +1 -1
  39. package/lib/esm/index.d.ts +3 -9
  40. package/lib/esm/index.d.ts.map +1 -1
  41. package/lib/esm/index.js +9 -23
  42. package/lib/esm/index.js.map +1 -1
  43. package/lib/generated/decode-data-html.d.ts.map +1 -1
  44. package/lib/generated/decode-data-html.js +5 -2
  45. package/lib/generated/decode-data-html.js.map +1 -1
  46. package/lib/generated/decode-data-xml.d.ts.map +1 -1
  47. package/lib/generated/decode-data-xml.js +5 -2
  48. package/lib/generated/decode-data-xml.js.map +1 -1
  49. package/lib/generated/encode-html.d.ts +1 -1
  50. package/lib/generated/encode-html.d.ts.map +1 -1
  51. package/lib/generated/encode-html.js +7 -1
  52. package/lib/generated/encode-html.js.map +1 -1
  53. package/lib/index.d.ts +3 -9
  54. package/lib/index.d.ts.map +1 -1
  55. package/lib/index.js +11 -22
  56. package/lib/index.js.map +1 -1
  57. package/package.json +12 -12
  58. package/readme.md +5 -5
package/lib/decode.js CHANGED
@@ -1,14 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
27
  };
5
28
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTML = exports.determineBranch = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0;
29
+ exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTMLAttribute = exports.decodeHTML = exports.determineBranch = exports.EntityDecoder = exports.DecodingMode = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0;
7
30
  var decode_data_html_js_1 = __importDefault(require("./generated/decode-data-html.js"));
8
31
  exports.htmlDecodeTree = decode_data_html_js_1.default;
9
32
  var decode_data_xml_js_1 = __importDefault(require("./generated/decode-data-xml.js"));
10
33
  exports.xmlDecodeTree = decode_data_xml_js_1.default;
11
- var decode_codepoint_js_1 = __importDefault(require("./decode_codepoint.js"));
34
+ var decode_codepoint_js_1 = __importStar(require("./decode_codepoint.js"));
12
35
  exports.decodeCodePoint = decode_codepoint_js_1.default;
13
36
  var decode_codepoint_js_2 = require("./decode_codepoint.js");
14
37
  Object.defineProperty(exports, "replaceCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.replaceCodePoint; } });
@@ -17,99 +40,421 @@ var CharCodes;
17
40
  (function (CharCodes) {
18
41
  CharCodes[CharCodes["NUM"] = 35] = "NUM";
19
42
  CharCodes[CharCodes["SEMI"] = 59] = "SEMI";
43
+ CharCodes[CharCodes["EQUALS"] = 61] = "EQUALS";
20
44
  CharCodes[CharCodes["ZERO"] = 48] = "ZERO";
21
45
  CharCodes[CharCodes["NINE"] = 57] = "NINE";
22
46
  CharCodes[CharCodes["LOWER_A"] = 97] = "LOWER_A";
23
47
  CharCodes[CharCodes["LOWER_F"] = 102] = "LOWER_F";
24
48
  CharCodes[CharCodes["LOWER_X"] = 120] = "LOWER_X";
25
- /** Bit that needs to be set to convert an upper case ASCII character to lower case */
26
- CharCodes[CharCodes["To_LOWER_BIT"] = 32] = "To_LOWER_BIT";
49
+ CharCodes[CharCodes["LOWER_Z"] = 122] = "LOWER_Z";
50
+ CharCodes[CharCodes["UPPER_A"] = 65] = "UPPER_A";
51
+ CharCodes[CharCodes["UPPER_F"] = 70] = "UPPER_F";
52
+ CharCodes[CharCodes["UPPER_Z"] = 90] = "UPPER_Z";
27
53
  })(CharCodes || (CharCodes = {}));
54
+ /** Bit that needs to be set to convert an upper case ASCII character to lower case */
55
+ var TO_LOWER_BIT = 32;
28
56
  var BinTrieFlags;
29
57
  (function (BinTrieFlags) {
30
58
  BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
31
59
  BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
32
60
  BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
33
61
  })(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {}));
34
- function getDecoder(decodeTree) {
35
- return function decodeHTMLBinary(str, strict) {
36
- var ret = "";
37
- var lastIdx = 0;
38
- var strIdx = 0;
39
- while ((strIdx = str.indexOf("&", strIdx)) >= 0) {
40
- ret += str.slice(lastIdx, strIdx);
41
- lastIdx = strIdx;
42
- // Skip the "&"
43
- strIdx += 1;
44
- // If we have a numeric entity, handle this separately.
45
- if (str.charCodeAt(strIdx) === CharCodes.NUM) {
46
- // Skip the leading "&#". For hex entities, also skip the leading "x".
47
- var start = strIdx + 1;
48
- var base = 10;
49
- var cp = str.charCodeAt(start);
50
- if ((cp | CharCodes.To_LOWER_BIT) === CharCodes.LOWER_X) {
51
- base = 16;
52
- strIdx += 1;
53
- start += 1;
62
+ function isNumber(code) {
63
+ return code >= CharCodes.ZERO && code <= CharCodes.NINE;
64
+ }
65
+ function isHexadecimalCharacter(code) {
66
+ return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||
67
+ (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));
68
+ }
69
+ function isAsciiAlphaNumeric(code) {
70
+ return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||
71
+ (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||
72
+ isNumber(code));
73
+ }
74
+ /**
75
+ * Checks if the given character is a valid end character for an entity in an attribute.
76
+ *
77
+ * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.
78
+ * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state
79
+ */
80
+ function isEntityInAttributeInvalidEnd(code) {
81
+ return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
82
+ }
83
+ var EntityDecoderState;
84
+ (function (EntityDecoderState) {
85
+ EntityDecoderState[EntityDecoderState["EntityStart"] = 0] = "EntityStart";
86
+ EntityDecoderState[EntityDecoderState["NumericStart"] = 1] = "NumericStart";
87
+ EntityDecoderState[EntityDecoderState["NumericDecimal"] = 2] = "NumericDecimal";
88
+ EntityDecoderState[EntityDecoderState["NumericHex"] = 3] = "NumericHex";
89
+ EntityDecoderState[EntityDecoderState["NamedEntity"] = 4] = "NamedEntity";
90
+ })(EntityDecoderState || (EntityDecoderState = {}));
91
+ var DecodingMode;
92
+ (function (DecodingMode) {
93
+ /** Entities in text nodes that can end with any character. */
94
+ DecodingMode[DecodingMode["Legacy"] = 0] = "Legacy";
95
+ /** Only allow entities terminated with a semicolon. */
96
+ DecodingMode[DecodingMode["Strict"] = 1] = "Strict";
97
+ /** Entities in attributes have limitations on ending characters. */
98
+ DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute";
99
+ })(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {}));
100
+ /**
101
+ * Token decoder with support of writing partial entities.
102
+ */
103
+ var EntityDecoder = /** @class */ (function () {
104
+ function EntityDecoder(
105
+ /** The tree used to decode entities. */
106
+ decodeTree,
107
+ /**
108
+ * The function that is called when a codepoint is decoded.
109
+ *
110
+ * For multi-byte named entities, this will be called multiple times,
111
+ * with the second codepoint, and the same `consumed` value.
112
+ *
113
+ * @param codepoint The decoded codepoint.
114
+ * @param consumed The number of bytes consumed by the decoder.
115
+ */
116
+ emitCodePoint,
117
+ /** An object that is used to produce errors. */
118
+ errors) {
119
+ this.decodeTree = decodeTree;
120
+ this.emitCodePoint = emitCodePoint;
121
+ this.errors = errors;
122
+ /** The current state of the decoder. */
123
+ this.state = EntityDecoderState.EntityStart;
124
+ /** Characters that were consumed while parsing an entity. */
125
+ this.consumed = 1;
126
+ /**
127
+ * The result of the entity.
128
+ *
129
+ * Either the result index of a numeric entity, or the codepoint of a
130
+ * numeric entity.
131
+ */
132
+ this.result = 0;
133
+ /** The current index in the decode tree. */
134
+ this.treeIndex = 0;
135
+ /** The number of characters that were consumed in excess. */
136
+ this.excess = 1;
137
+ /** The mode in which the decoder is operating. */
138
+ this.decodeMode = DecodingMode.Strict;
139
+ }
140
+ /** Resets the instance to make it reusable. */
141
+ EntityDecoder.prototype.startEntity = function (decodeMode) {
142
+ this.decodeMode = decodeMode;
143
+ this.state = EntityDecoderState.EntityStart;
144
+ this.result = 0;
145
+ this.treeIndex = 0;
146
+ this.excess = 1;
147
+ this.consumed = 1;
148
+ };
149
+ /**
150
+ * Write an entity to the decoder. This can be called multiple times with partial entities.
151
+ * If the entity is incomplete, the decoder will return -1.
152
+ *
153
+ * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
154
+ * entity is incomplete, and resume when the next string is written.
155
+ *
156
+ * @param string The string containing the entity (or a continuation of the entity).
157
+ * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
158
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
159
+ */
160
+ EntityDecoder.prototype.write = function (str, offset) {
161
+ switch (this.state) {
162
+ case EntityDecoderState.EntityStart: {
163
+ if (str.charCodeAt(offset) === CharCodes.NUM) {
164
+ this.state = EntityDecoderState.NumericStart;
165
+ this.consumed += 1;
166
+ return this.stateNumericStart(str, offset + 1);
54
167
  }
55
- do
56
- cp = str.charCodeAt(++strIdx);
57
- while ((cp >= CharCodes.ZERO && cp <= CharCodes.NINE) ||
58
- (base === 16 &&
59
- (cp | CharCodes.To_LOWER_BIT) >= CharCodes.LOWER_A &&
60
- (cp | CharCodes.To_LOWER_BIT) <= CharCodes.LOWER_F));
61
- if (start !== strIdx) {
62
- var entity = str.substring(start, strIdx);
63
- var parsed = parseInt(entity, base);
64
- if (str.charCodeAt(strIdx) === CharCodes.SEMI) {
65
- strIdx += 1;
66
- }
67
- else if (strict) {
68
- continue;
69
- }
70
- ret += (0, decode_codepoint_js_1.default)(parsed);
71
- lastIdx = strIdx;
168
+ this.state = EntityDecoderState.NamedEntity;
169
+ return this.stateNamedEntity(str, offset);
170
+ }
171
+ case EntityDecoderState.NumericStart: {
172
+ return this.stateNumericStart(str, offset);
173
+ }
174
+ case EntityDecoderState.NumericDecimal: {
175
+ return this.stateNumericDecimal(str, offset);
176
+ }
177
+ case EntityDecoderState.NumericHex: {
178
+ return this.stateNumericHex(str, offset);
179
+ }
180
+ case EntityDecoderState.NamedEntity: {
181
+ return this.stateNamedEntity(str, offset);
182
+ }
183
+ }
184
+ };
185
+ /**
186
+ * Switches between the numeric decimal and hexadecimal states.
187
+ *
188
+ * Equivalent to the `Numeric character reference state` in the HTML spec.
189
+ *
190
+ * @param str The string containing the entity (or a continuation of the entity).
191
+ * @param offset The current offset.
192
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
193
+ */
194
+ EntityDecoder.prototype.stateNumericStart = function (str, offset) {
195
+ if (offset >= str.length) {
196
+ return -1;
197
+ }
198
+ if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
199
+ this.state = EntityDecoderState.NumericHex;
200
+ this.consumed += 1;
201
+ return this.stateNumericHex(str, offset + 1);
202
+ }
203
+ this.state = EntityDecoderState.NumericDecimal;
204
+ return this.stateNumericDecimal(str, offset);
205
+ };
206
+ EntityDecoder.prototype.addToNumericResult = function (str, start, end, base) {
207
+ if (start !== end) {
208
+ var digitCount = end - start;
209
+ this.result =
210
+ this.result * Math.pow(base, digitCount) +
211
+ parseInt(str.substr(start, digitCount), base);
212
+ this.consumed += digitCount;
213
+ }
214
+ };
215
+ /**
216
+ * Parses a hexadecimal numeric entity.
217
+ *
218
+ * Equivalent to the `Hexademical character reference state` in the HTML spec.
219
+ *
220
+ * @param str The string containing the entity (or a continuation of the entity).
221
+ * @param offset The current offset.
222
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
223
+ */
224
+ EntityDecoder.prototype.stateNumericHex = function (str, offset) {
225
+ var startIdx = offset;
226
+ while (offset < str.length) {
227
+ var char = str.charCodeAt(offset);
228
+ if (isNumber(char) || isHexadecimalCharacter(char)) {
229
+ offset += 1;
230
+ }
231
+ else {
232
+ this.addToNumericResult(str, startIdx, offset, 16);
233
+ return this.emitNumericEntity(char, 3);
234
+ }
235
+ }
236
+ this.addToNumericResult(str, startIdx, offset, 16);
237
+ return -1;
238
+ };
239
+ /**
240
+ * Parses a decimal numeric entity.
241
+ *
242
+ * Equivalent to the `Decimal character reference state` in the HTML spec.
243
+ *
244
+ * @param str The string containing the entity (or a continuation of the entity).
245
+ * @param offset The current offset.
246
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
247
+ */
248
+ EntityDecoder.prototype.stateNumericDecimal = function (str, offset) {
249
+ var startIdx = offset;
250
+ while (offset < str.length) {
251
+ var char = str.charCodeAt(offset);
252
+ if (isNumber(char)) {
253
+ offset += 1;
254
+ }
255
+ else {
256
+ this.addToNumericResult(str, startIdx, offset, 10);
257
+ return this.emitNumericEntity(char, 2);
258
+ }
259
+ }
260
+ this.addToNumericResult(str, startIdx, offset, 10);
261
+ return -1;
262
+ };
263
+ /**
264
+ * Validate and emit a numeric entity.
265
+ *
266
+ * Implements the logic from the `Hexademical character reference start
267
+ * state` and `Numeric character reference end state` in the HTML spec.
268
+ *
269
+ * @param lastCp The last code point of the entity. Used to see if the
270
+ * entity was terminated with a semicolon.
271
+ * @param expectedLength The minimum number of characters that should be
272
+ * consumed. Used to validate that at least one digit
273
+ * was consumed.
274
+ * @returns The number of characters that were consumed.
275
+ */
276
+ EntityDecoder.prototype.emitNumericEntity = function (lastCp, expectedLength) {
277
+ var _a;
278
+ // Ensure we consumed at least one digit.
279
+ if (this.consumed <= expectedLength) {
280
+ (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);
281
+ return 0;
282
+ }
283
+ // Figure out if this is a legit end of the entity
284
+ if (lastCp === CharCodes.SEMI) {
285
+ this.consumed += 1;
286
+ }
287
+ else if (this.decodeMode === DecodingMode.Strict) {
288
+ return 0;
289
+ }
290
+ this.emitCodePoint((0, decode_codepoint_js_1.replaceCodePoint)(this.result), this.consumed);
291
+ if (this.errors) {
292
+ if (lastCp !== CharCodes.SEMI) {
293
+ this.errors.missingSemicolonAfterCharacterReference();
294
+ }
295
+ this.errors.validateNumericCharacterReference(this.result);
296
+ }
297
+ return this.consumed;
298
+ };
299
+ /**
300
+ * Parses a named entity.
301
+ *
302
+ * Equivalent to the `Named character reference state` in the HTML spec.
303
+ *
304
+ * @param str The string containing the entity (or a continuation of the entity).
305
+ * @param offset The current offset.
306
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
307
+ */
308
+ EntityDecoder.prototype.stateNamedEntity = function (str, offset) {
309
+ var decodeTree = this.decodeTree;
310
+ var current = decodeTree[this.treeIndex];
311
+ // The mask is the number of bytes of the value, including the current byte.
312
+ var valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
313
+ for (; offset < str.length; offset++, this.excess++) {
314
+ var char = str.charCodeAt(offset);
315
+ this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
316
+ if (this.treeIndex < 0) {
317
+ return this.result === 0 ||
318
+ // If we are parsing an attribute
319
+ (this.decodeMode === DecodingMode.Attribute &&
320
+ // We shouldn't have consumed any characters after the entity,
321
+ (valueLength === 0 ||
322
+ // And there should be no invalid characters.
323
+ isEntityInAttributeInvalidEnd(char)))
324
+ ? 0
325
+ : this.emitNotTerminatedNamedEntity();
326
+ }
327
+ current = decodeTree[this.treeIndex];
328
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
329
+ // If the branch is a value, store it and continue
330
+ if (valueLength !== 0) {
331
+ // If the entity is terminated by a semicolon, we are done.
332
+ if (char === CharCodes.SEMI) {
333
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
72
334
  }
73
- continue;
74
- }
75
- var resultIdx = 0;
76
- var excess = 1;
77
- var treeIdx = 0;
78
- var current = decodeTree[treeIdx];
79
- for (; strIdx < str.length; strIdx++, excess++) {
80
- treeIdx = determineBranch(decodeTree, current, treeIdx + 1, str.charCodeAt(strIdx));
81
- if (treeIdx < 0)
82
- break;
83
- current = decodeTree[treeIdx];
84
- var masked = current & BinTrieFlags.VALUE_LENGTH;
85
- // If the branch is a value, store it and continue
86
- if (masked) {
87
- // If we have a legacy entity while parsing strictly, just skip the number of bytes
88
- if (!strict || str.charCodeAt(strIdx) === CharCodes.SEMI) {
89
- resultIdx = treeIdx;
90
- excess = 0;
91
- }
92
- // The mask is the number of bytes of the value, including the current byte.
93
- var valueLength = (masked >> 14) - 1;
94
- if (valueLength === 0)
95
- break;
96
- treeIdx += valueLength;
335
+ // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.
336
+ if (this.decodeMode !== DecodingMode.Strict) {
337
+ this.result = this.treeIndex;
338
+ this.consumed += this.excess;
339
+ this.excess = 0;
97
340
  }
98
341
  }
99
- if (resultIdx !== 0) {
100
- var valueLength = (decodeTree[resultIdx] & BinTrieFlags.VALUE_LENGTH) >> 14;
101
- ret +=
102
- valueLength === 1
103
- ? String.fromCharCode(decodeTree[resultIdx] & ~BinTrieFlags.VALUE_LENGTH)
104
- : valueLength === 2
105
- ? String.fromCharCode(decodeTree[resultIdx + 1])
106
- : String.fromCharCode(decodeTree[resultIdx + 1], decodeTree[resultIdx + 2]);
107
- lastIdx = strIdx - excess + 1;
342
+ }
343
+ return -1;
344
+ };
345
+ /**
346
+ * Emit a named entity that was not terminated with a semicolon.
347
+ *
348
+ * @returns The number of characters consumed.
349
+ */
350
+ EntityDecoder.prototype.emitNotTerminatedNamedEntity = function () {
351
+ var _a;
352
+ var _b = this, result = _b.result, decodeTree = _b.decodeTree;
353
+ var valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
354
+ this.emitNamedEntityData(result, valueLength, this.consumed);
355
+ (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();
356
+ return this.consumed;
357
+ };
358
+ /**
359
+ * Emit a named entity.
360
+ *
361
+ * @param result The index of the entity in the decode tree.
362
+ * @param valueLength The number of bytes in the entity.
363
+ * @param consumed The number of characters consumed.
364
+ *
365
+ * @returns The number of characters consumed.
366
+ */
367
+ EntityDecoder.prototype.emitNamedEntityData = function (result, valueLength, consumed) {
368
+ var decodeTree = this.decodeTree;
369
+ this.emitCodePoint(valueLength === 1
370
+ ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH
371
+ : decodeTree[result + 1], consumed);
372
+ if (valueLength === 3) {
373
+ // For multi-byte values, we need to emit the second byte.
374
+ this.emitCodePoint(decodeTree[result + 2], consumed);
375
+ }
376
+ return consumed;
377
+ };
378
+ /**
379
+ * Signal to the parser that the end of the input was reached.
380
+ *
381
+ * Remaining data will be emitted and relevant errors will be produced.
382
+ *
383
+ * @returns The number of characters consumed.
384
+ */
385
+ EntityDecoder.prototype.end = function () {
386
+ var _a;
387
+ switch (this.state) {
388
+ case EntityDecoderState.NamedEntity: {
389
+ // Emit a named entity if we have one.
390
+ return this.result !== 0 &&
391
+ (this.decodeMode !== DecodingMode.Attribute ||
392
+ this.result === this.treeIndex)
393
+ ? this.emitNotTerminatedNamedEntity()
394
+ : 0;
395
+ }
396
+ // Otherwise, emit a numeric entity if we have one.
397
+ case EntityDecoderState.NumericDecimal: {
398
+ return this.emitNumericEntity(0, 2);
399
+ }
400
+ case EntityDecoderState.NumericHex: {
401
+ return this.emitNumericEntity(0, 3);
402
+ }
403
+ case EntityDecoderState.NumericStart: {
404
+ (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);
405
+ return 0;
406
+ }
407
+ case EntityDecoderState.EntityStart: {
408
+ // Return 0 if we have no entity.
409
+ return 0;
108
410
  }
109
411
  }
110
- return ret + str.slice(lastIdx);
412
+ };
413
+ return EntityDecoder;
414
+ }());
415
+ exports.EntityDecoder = EntityDecoder;
416
+ /**
417
+ * Creates a function that decodes entities in a string.
418
+ *
419
+ * @param decodeTree The decode tree.
420
+ * @returns A function that decodes entities in a string.
421
+ */
422
+ function getDecoder(decodeTree) {
423
+ var ret = "";
424
+ var decoder = new EntityDecoder(decodeTree, function (str) { return (ret += (0, decode_codepoint_js_1.fromCodePoint)(str)); });
425
+ return function decodeWithTrie(str, decodeMode) {
426
+ var lastIndex = 0;
427
+ var offset = 0;
428
+ while ((offset = str.indexOf("&", offset)) >= 0) {
429
+ ret += str.slice(lastIndex, offset);
430
+ decoder.startEntity(decodeMode);
431
+ var len = decoder.write(str,
432
+ // Skip the "&"
433
+ offset + 1);
434
+ if (len < 0) {
435
+ lastIndex = offset + decoder.end();
436
+ break;
437
+ }
438
+ lastIndex = offset + len;
439
+ // If `len` is 0, skip the current `&` and continue.
440
+ offset = len === 0 ? lastIndex + 1 : lastIndex;
441
+ }
442
+ var result = ret + str.slice(lastIndex);
443
+ // Make sure we don't keep a reference to the final string.
444
+ ret = "";
445
+ return result;
111
446
  };
112
447
  }
448
+ /**
449
+ * Determines the branch of the current node that is taken given the current
450
+ * character. This function is used to traverse the trie.
451
+ *
452
+ * @param decodeTree The trie.
453
+ * @param current The current node.
454
+ * @param nodeIdx The index right after the current node and its value.
455
+ * @param char The current character.
456
+ * @returns The index of the next node, or -1 if no branch is taken.
457
+ */
113
458
  function determineBranch(decodeTree, current, nodeIdx, char) {
114
459
  var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
115
460
  var jumpOffset = current & BinTrieFlags.JUMP_TABLE;
@@ -147,33 +492,45 @@ exports.determineBranch = determineBranch;
147
492
  var htmlDecoder = getDecoder(decode_data_html_js_1.default);
148
493
  var xmlDecoder = getDecoder(decode_data_xml_js_1.default);
149
494
  /**
150
- * Decodes an HTML string, allowing for entities not terminated by a semi-colon.
495
+ * Decodes an HTML string.
151
496
  *
152
497
  * @param str The string to decode.
498
+ * @param mode The decoding mode.
153
499
  * @returns The decoded string.
154
500
  */
155
- function decodeHTML(str) {
156
- return htmlDecoder(str, false);
501
+ function decodeHTML(str, mode) {
502
+ if (mode === void 0) { mode = DecodingMode.Legacy; }
503
+ return htmlDecoder(str, mode);
157
504
  }
158
505
  exports.decodeHTML = decodeHTML;
159
506
  /**
160
- * Decodes an HTML string, requiring all entities to be terminated by a semi-colon.
507
+ * Decodes an HTML string in an attribute.
508
+ *
509
+ * @param str The string to decode.
510
+ * @returns The decoded string.
511
+ */
512
+ function decodeHTMLAttribute(str) {
513
+ return htmlDecoder(str, DecodingMode.Attribute);
514
+ }
515
+ exports.decodeHTMLAttribute = decodeHTMLAttribute;
516
+ /**
517
+ * Decodes an HTML string, requiring all entities to be terminated by a semicolon.
161
518
  *
162
519
  * @param str The string to decode.
163
520
  * @returns The decoded string.
164
521
  */
165
522
  function decodeHTMLStrict(str) {
166
- return htmlDecoder(str, true);
523
+ return htmlDecoder(str, DecodingMode.Strict);
167
524
  }
168
525
  exports.decodeHTMLStrict = decodeHTMLStrict;
169
526
  /**
170
- * Decodes an XML string, requiring all entities to be terminated by a semi-colon.
527
+ * Decodes an XML string, requiring all entities to be terminated by a semicolon.
171
528
  *
172
529
  * @param str The string to decode.
173
530
  * @returns The decoded string.
174
531
  */
175
532
  function decodeXML(str) {
176
- return xmlDecoder(str, true);
533
+ return xmlDecoder(str, DecodingMode.Strict);
177
534
  }
178
535
  exports.decodeXML = decodeXML;
179
536
  //# sourceMappingURL=decode.js.map
package/lib/decode.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"decode.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/b535ea9a1a9aec373141f168b5a7d55b66d6fac0/src/","sources":["decode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decode.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["decode.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,19 @@
1
+ /**
2
+ * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.
3
+ */
1
4
  export declare const fromCodePoint: (...codePoints: number[]) => string;
5
+ /**
6
+ * Replace the given code point with a replacement character if it is a
7
+ * surrogate or is outside the valid range. Otherwise return the code
8
+ * point unchanged.
9
+ */
2
10
  export declare function replaceCodePoint(codePoint: number): number;
11
+ /**
12
+ * Replace the code point if relevant, then convert it to a string.
13
+ *
14
+ * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.
15
+ * @param codePoint The code point to decode.
16
+ * @returns The decoded code point.
17
+ */
3
18
  export default function decodeCodePoint(codePoint: number): string;
4
19
  //# sourceMappingURL=decode_codepoint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decode_codepoint.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/b535ea9a1a9aec373141f168b5a7d55b66d6fac0/src/","sources":["decode_codepoint.ts"],"names":[],"mappings":"AAiCA,eAAO,MAAM,aAAa,qCAgBrB,CAAC;AAEN,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,UAMjD;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE"}
1
+ {"version":3,"file":"decode_codepoint.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["decode_codepoint.ts"],"names":[],"mappings":"AAkCA;;GAEG;AACH,eAAO,MAAM,aAAa,qCAgBrB,CAAC;AAEN;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,UAMjD;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE"}