module-develop-kit 1.2.4 → 1.3.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.
- package/dist/commonjs-virtual-dir/_commonjsHelpers.js +3 -28
- package/dist/commonjs-virtual-dir/index2.js +5 -3
- package/dist/commonjs-virtual-dir/index3.js +3 -5
- package/dist/src/outside-call/utils.js +1 -1
- package/dist/src/shield/crypto/sm4.js +1 -1
- package/dist/src/vite-plugins/generateSriHash.js +26 -0
- package/dist/src/vite-plugins/vite-plugin-sri/config.js +8 -0
- package/dist/src/vite-plugins/vite-plugin-sri/index.js +128 -0
- package/dist/src/vite-plugins/vite-plugin-sri/internal.js +1172 -0
- package/dist/vendor/file-type/source/detectors/ebml.js +1 -1
- package/dist/vendor/file-type/source/detectors/zip.js +1 -1
- package/dist/vendor/file-type/source/index.js +1 -1
- package/dist/vendor/file-type/source/tokens.js +1 -1
- package/dist/vendor/gm-crypt/src/crypt.js +1 -1
- package/dist/vendor/jssip/lib-es5/Message.js +11 -11
- package/dist/vendor/jssip/lib-es5/Options.js +13 -13
- package/dist/vendor/jssip/lib-es5/RTCSession/DTMF.js +4 -4
- package/dist/vendor/jssip/lib-es5/RTCSession/Info.js +12 -12
- package/dist/vendor/jssip/lib-es5/RTCSession/ReferSubscriber.js +7 -7
- package/dist/vendor/jssip/lib-es5/RTCSession.js +2 -2
- package/dist/vendor/jssip/lib-es5/Transactions.js +15 -15
- package/dist/vendor/jssip/lib-es5/UA.js +5 -5
- package/dist/vendor/parse5/dist/common/doctype.js +98 -0
- package/dist/vendor/parse5/dist/common/error-codes.js +7 -0
- package/dist/vendor/parse5/dist/common/foreign-content.js +210 -0
- package/dist/vendor/parse5/dist/common/html.js +261 -0
- package/dist/vendor/parse5/dist/common/token.js +14 -0
- package/dist/vendor/parse5/dist/common/unicode.js +73 -0
- package/dist/vendor/parse5/dist/index.js +18 -0
- package/dist/vendor/parse5/dist/parser/formatting-element-list.js +84 -0
- package/dist/vendor/parse5/dist/parser/index.js +2271 -0
- package/dist/vendor/parse5/dist/parser/open-element-stack.js +240 -0
- package/dist/vendor/parse5/dist/serializer/index.js +85 -0
- package/dist/vendor/parse5/dist/tokenizer/index.js +1940 -0
- package/dist/vendor/parse5/dist/tokenizer/preprocessor.js +88 -0
- package/dist/vendor/parse5/dist/tree-adapters/default.js +162 -0
- package/dist/vendor/parse5/node_modules/entities/dist/decode-codepoint.js +37 -0
- package/dist/vendor/parse5/node_modules/entities/dist/decode.js +270 -0
- package/dist/vendor/parse5/node_modules/entities/dist/escape.js +22 -0
- package/dist/vendor/parse5/node_modules/entities/dist/generated/decode-data-html.js +5 -0
- package/dist/vendor/parse5/node_modules/entities/dist/internal/bin-trie-flags.js +7 -0
- package/dist/vendor/parse5/node_modules/entities/dist/internal/decode-shared.js +11 -0
- package/dist/vite-plugins/index.d.ts +161 -0
- package/dist/vite-plugins/index.js +14 -6
- package/package.json +2 -1
- package/dist/commonjs-virtual-dir/___vite-browser-external.js +0 -6
- package/dist/commonjs-virtual-dir/__vite-browser-external.js +0 -4
- package/dist/commonjs-virtual-dir/events.js +0 -4
- package/dist/vendor/events/events.js +0 -216
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { isSurrogatePair as l, getSurrogatePairCodePoint as f, CODE_POINTS as e, isSurrogate as p, isControlCodePoint as u, isUndefinedCodePoint as d } from "../common/unicode.js";
|
|
2
|
+
import { ERR as h } from "../common/error-codes.js";
|
|
3
|
+
const E = 65536;
|
|
4
|
+
class g {
|
|
5
|
+
constructor(t) {
|
|
6
|
+
this.handler = t, this.html = "", this.pos = -1, this.lastGapPos = -2, this.gapStack = [], this.skipNextNewLine = !1, this.lastChunkWritten = !1, this.endOfChunkHit = !1, this.bufferWaterline = E, this.isEol = !1, this.lineStartPos = 0, this.droppedBufferSize = 0, this.line = 1, this.lastErrOffset = -1;
|
|
7
|
+
}
|
|
8
|
+
/** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */
|
|
9
|
+
get col() {
|
|
10
|
+
return this.pos - this.lineStartPos + +(this.lastGapPos !== this.pos);
|
|
11
|
+
}
|
|
12
|
+
get offset() {
|
|
13
|
+
return this.droppedBufferSize + this.pos;
|
|
14
|
+
}
|
|
15
|
+
getError(t, s) {
|
|
16
|
+
const { line: i, col: r, offset: a } = this, o = r + s, n = a + s;
|
|
17
|
+
return {
|
|
18
|
+
code: t,
|
|
19
|
+
startLine: i,
|
|
20
|
+
endLine: i,
|
|
21
|
+
startCol: o,
|
|
22
|
+
endCol: o,
|
|
23
|
+
startOffset: n,
|
|
24
|
+
endOffset: n
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
_err(t) {
|
|
28
|
+
this.handler.onParseError && this.lastErrOffset !== this.offset && (this.lastErrOffset = this.offset, this.handler.onParseError(this.getError(t, 0)));
|
|
29
|
+
}
|
|
30
|
+
_addGap() {
|
|
31
|
+
this.gapStack.push(this.lastGapPos), this.lastGapPos = this.pos;
|
|
32
|
+
}
|
|
33
|
+
_processSurrogate(t) {
|
|
34
|
+
if (this.pos !== this.html.length - 1) {
|
|
35
|
+
const s = this.html.charCodeAt(this.pos + 1);
|
|
36
|
+
if (l(s))
|
|
37
|
+
return this.pos++, this._addGap(), f(t, s);
|
|
38
|
+
} else if (!this.lastChunkWritten)
|
|
39
|
+
return this.endOfChunkHit = !0, e.EOF;
|
|
40
|
+
return this._err(h.surrogateInInputStream), t;
|
|
41
|
+
}
|
|
42
|
+
willDropParsedChunk() {
|
|
43
|
+
return this.pos > this.bufferWaterline;
|
|
44
|
+
}
|
|
45
|
+
dropParsedChunk() {
|
|
46
|
+
this.willDropParsedChunk() && (this.html = this.html.substring(this.pos), this.lineStartPos -= this.pos, this.droppedBufferSize += this.pos, this.pos = 0, this.lastGapPos = -2, this.gapStack.length = 0);
|
|
47
|
+
}
|
|
48
|
+
write(t, s) {
|
|
49
|
+
this.html.length > 0 ? this.html += t : this.html = t, this.endOfChunkHit = !1, this.lastChunkWritten = s;
|
|
50
|
+
}
|
|
51
|
+
insertHtmlAtCurrentPos(t) {
|
|
52
|
+
this.html = this.html.substring(0, this.pos + 1) + t + this.html.substring(this.pos + 1), this.endOfChunkHit = !1;
|
|
53
|
+
}
|
|
54
|
+
startsWith(t, s) {
|
|
55
|
+
if (this.pos + t.length > this.html.length)
|
|
56
|
+
return this.endOfChunkHit = !this.lastChunkWritten, !1;
|
|
57
|
+
if (s)
|
|
58
|
+
return this.html.startsWith(t, this.pos);
|
|
59
|
+
for (let i = 0; i < t.length; i++)
|
|
60
|
+
if ((this.html.charCodeAt(this.pos + i) | 32) !== t.charCodeAt(i))
|
|
61
|
+
return !1;
|
|
62
|
+
return !0;
|
|
63
|
+
}
|
|
64
|
+
peek(t) {
|
|
65
|
+
const s = this.pos + t;
|
|
66
|
+
if (s >= this.html.length)
|
|
67
|
+
return this.endOfChunkHit = !this.lastChunkWritten, e.EOF;
|
|
68
|
+
const i = this.html.charCodeAt(s);
|
|
69
|
+
return i === e.CARRIAGE_RETURN ? e.LINE_FEED : i;
|
|
70
|
+
}
|
|
71
|
+
advance() {
|
|
72
|
+
if (this.pos++, this.isEol && (this.isEol = !1, this.line++, this.lineStartPos = this.pos), this.pos >= this.html.length)
|
|
73
|
+
return this.endOfChunkHit = !this.lastChunkWritten, e.EOF;
|
|
74
|
+
let t = this.html.charCodeAt(this.pos);
|
|
75
|
+
return t === e.CARRIAGE_RETURN ? (this.isEol = !0, this.skipNextNewLine = !0, e.LINE_FEED) : t === e.LINE_FEED && (this.isEol = !0, this.skipNextNewLine) ? (this.line--, this.skipNextNewLine = !1, this._addGap(), this.advance()) : (this.skipNextNewLine = !1, p(t) && (t = this._processSurrogate(t)), this.handler.onParseError === null || t > 31 && t < 127 || t === e.LINE_FEED || t === e.CARRIAGE_RETURN || t > 159 && t < 64976 || this._checkForProblematicCharacters(t), t);
|
|
76
|
+
}
|
|
77
|
+
_checkForProblematicCharacters(t) {
|
|
78
|
+
u(t) ? this._err(h.controlCharacterInInputStream) : d(t) && this._err(h.noncharacterInInputStream);
|
|
79
|
+
}
|
|
80
|
+
retreat(t) {
|
|
81
|
+
for (this.pos -= t; this.pos < this.lastGapPos; )
|
|
82
|
+
this.lastGapPos = this.gapStack.pop(), this.pos--;
|
|
83
|
+
this.isEol = !1;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export {
|
|
87
|
+
g as Preprocessor
|
|
88
|
+
};
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { DOCUMENT_MODE as a } from "../common/html.js";
|
|
2
|
+
const d = {
|
|
3
|
+
//Node construction
|
|
4
|
+
createDocument() {
|
|
5
|
+
return {
|
|
6
|
+
nodeName: "#document",
|
|
7
|
+
mode: a.NO_QUIRKS,
|
|
8
|
+
childNodes: []
|
|
9
|
+
};
|
|
10
|
+
},
|
|
11
|
+
createDocumentFragment() {
|
|
12
|
+
return {
|
|
13
|
+
nodeName: "#document-fragment",
|
|
14
|
+
childNodes: []
|
|
15
|
+
};
|
|
16
|
+
},
|
|
17
|
+
createElement(e, t, n) {
|
|
18
|
+
return {
|
|
19
|
+
nodeName: e,
|
|
20
|
+
tagName: e,
|
|
21
|
+
attrs: n,
|
|
22
|
+
namespaceURI: t,
|
|
23
|
+
childNodes: [],
|
|
24
|
+
parentNode: null
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
createCommentNode(e) {
|
|
28
|
+
return {
|
|
29
|
+
nodeName: "#comment",
|
|
30
|
+
data: e,
|
|
31
|
+
parentNode: null
|
|
32
|
+
};
|
|
33
|
+
},
|
|
34
|
+
createTextNode(e) {
|
|
35
|
+
return {
|
|
36
|
+
nodeName: "#text",
|
|
37
|
+
value: e,
|
|
38
|
+
parentNode: null
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
//Tree mutation
|
|
42
|
+
appendChild(e, t) {
|
|
43
|
+
e.childNodes.push(t), t.parentNode = e;
|
|
44
|
+
},
|
|
45
|
+
insertBefore(e, t, n) {
|
|
46
|
+
const o = e.childNodes.indexOf(n);
|
|
47
|
+
e.childNodes.splice(o, 0, t), t.parentNode = e;
|
|
48
|
+
},
|
|
49
|
+
setTemplateContent(e, t) {
|
|
50
|
+
e.content = t;
|
|
51
|
+
},
|
|
52
|
+
getTemplateContent(e) {
|
|
53
|
+
return e.content;
|
|
54
|
+
},
|
|
55
|
+
setDocumentType(e, t, n, o) {
|
|
56
|
+
const r = e.childNodes.find((c) => c.nodeName === "#documentType");
|
|
57
|
+
if (r)
|
|
58
|
+
r.name = t, r.publicId = n, r.systemId = o;
|
|
59
|
+
else {
|
|
60
|
+
const c = {
|
|
61
|
+
nodeName: "#documentType",
|
|
62
|
+
name: t,
|
|
63
|
+
publicId: n,
|
|
64
|
+
systemId: o,
|
|
65
|
+
parentNode: null
|
|
66
|
+
};
|
|
67
|
+
d.appendChild(e, c);
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
setDocumentMode(e, t) {
|
|
71
|
+
e.mode = t;
|
|
72
|
+
},
|
|
73
|
+
getDocumentMode(e) {
|
|
74
|
+
return e.mode;
|
|
75
|
+
},
|
|
76
|
+
detachNode(e) {
|
|
77
|
+
if (e.parentNode) {
|
|
78
|
+
const t = e.parentNode.childNodes.indexOf(e);
|
|
79
|
+
e.parentNode.childNodes.splice(t, 1), e.parentNode = null;
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
insertText(e, t) {
|
|
83
|
+
if (e.childNodes.length > 0) {
|
|
84
|
+
const n = e.childNodes[e.childNodes.length - 1];
|
|
85
|
+
if (d.isTextNode(n)) {
|
|
86
|
+
n.value += t;
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
d.appendChild(e, d.createTextNode(t));
|
|
91
|
+
},
|
|
92
|
+
insertTextBefore(e, t, n) {
|
|
93
|
+
const o = e.childNodes[e.childNodes.indexOf(n) - 1];
|
|
94
|
+
o && d.isTextNode(o) ? o.value += t : d.insertBefore(e, d.createTextNode(t), n);
|
|
95
|
+
},
|
|
96
|
+
adoptAttributes(e, t) {
|
|
97
|
+
const n = new Set(e.attrs.map((o) => o.name));
|
|
98
|
+
for (let o = 0; o < t.length; o++)
|
|
99
|
+
n.has(t[o].name) || e.attrs.push(t[o]);
|
|
100
|
+
},
|
|
101
|
+
//Tree traversing
|
|
102
|
+
getFirstChild(e) {
|
|
103
|
+
return e.childNodes[0];
|
|
104
|
+
},
|
|
105
|
+
getChildNodes(e) {
|
|
106
|
+
return e.childNodes;
|
|
107
|
+
},
|
|
108
|
+
getParentNode(e) {
|
|
109
|
+
return e.parentNode;
|
|
110
|
+
},
|
|
111
|
+
getAttrList(e) {
|
|
112
|
+
return e.attrs;
|
|
113
|
+
},
|
|
114
|
+
//Node data
|
|
115
|
+
getTagName(e) {
|
|
116
|
+
return e.tagName;
|
|
117
|
+
},
|
|
118
|
+
getNamespaceURI(e) {
|
|
119
|
+
return e.namespaceURI;
|
|
120
|
+
},
|
|
121
|
+
getTextNodeContent(e) {
|
|
122
|
+
return e.value;
|
|
123
|
+
},
|
|
124
|
+
getCommentNodeContent(e) {
|
|
125
|
+
return e.data;
|
|
126
|
+
},
|
|
127
|
+
getDocumentTypeNodeName(e) {
|
|
128
|
+
return e.name;
|
|
129
|
+
},
|
|
130
|
+
getDocumentTypeNodePublicId(e) {
|
|
131
|
+
return e.publicId;
|
|
132
|
+
},
|
|
133
|
+
getDocumentTypeNodeSystemId(e) {
|
|
134
|
+
return e.systemId;
|
|
135
|
+
},
|
|
136
|
+
//Node types
|
|
137
|
+
isTextNode(e) {
|
|
138
|
+
return e.nodeName === "#text";
|
|
139
|
+
},
|
|
140
|
+
isCommentNode(e) {
|
|
141
|
+
return e.nodeName === "#comment";
|
|
142
|
+
},
|
|
143
|
+
isDocumentTypeNode(e) {
|
|
144
|
+
return e.nodeName === "#documentType";
|
|
145
|
+
},
|
|
146
|
+
isElementNode(e) {
|
|
147
|
+
return Object.prototype.hasOwnProperty.call(e, "tagName");
|
|
148
|
+
},
|
|
149
|
+
// Source code location
|
|
150
|
+
setNodeSourceCodeLocation(e, t) {
|
|
151
|
+
e.sourceCodeLocation = t;
|
|
152
|
+
},
|
|
153
|
+
getNodeSourceCodeLocation(e) {
|
|
154
|
+
return e.sourceCodeLocation;
|
|
155
|
+
},
|
|
156
|
+
updateNodeSourceCodeLocation(e, t) {
|
|
157
|
+
e.sourceCodeLocation = { ...e.sourceCodeLocation, ...t };
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
export {
|
|
161
|
+
d as defaultTreeAdapter
|
|
162
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const e = /* @__PURE__ */ new Map([
|
|
2
|
+
[0, 65533],
|
|
3
|
+
// C1 Unicode control character reference replacements
|
|
4
|
+
[128, 8364],
|
|
5
|
+
[130, 8218],
|
|
6
|
+
[131, 402],
|
|
7
|
+
[132, 8222],
|
|
8
|
+
[133, 8230],
|
|
9
|
+
[134, 8224],
|
|
10
|
+
[135, 8225],
|
|
11
|
+
[136, 710],
|
|
12
|
+
[137, 8240],
|
|
13
|
+
[138, 352],
|
|
14
|
+
[139, 8249],
|
|
15
|
+
[140, 338],
|
|
16
|
+
[142, 381],
|
|
17
|
+
[145, 8216],
|
|
18
|
+
[146, 8217],
|
|
19
|
+
[147, 8220],
|
|
20
|
+
[148, 8221],
|
|
21
|
+
[149, 8226],
|
|
22
|
+
[150, 8211],
|
|
23
|
+
[151, 8212],
|
|
24
|
+
[152, 732],
|
|
25
|
+
[153, 8482],
|
|
26
|
+
[154, 353],
|
|
27
|
+
[155, 8250],
|
|
28
|
+
[156, 339],
|
|
29
|
+
[158, 382],
|
|
30
|
+
[159, 376]
|
|
31
|
+
]);
|
|
32
|
+
function r(f) {
|
|
33
|
+
return f >= 55296 && f <= 57343 || f > 1114111 ? 65533 : e.get(f) ?? f;
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
r as replaceCodePoint
|
|
37
|
+
};
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { replaceCodePoint as R } from "./decode-codepoint.js";
|
|
2
|
+
import { BinTrieFlags as u } from "./internal/bin-trie-flags.js";
|
|
3
|
+
var s;
|
|
4
|
+
(function(t) {
|
|
5
|
+
t[t.NUM = 35] = "NUM", t[t.SEMI = 59] = "SEMI", t[t.EQUALS = 61] = "EQUALS", t[t.ZERO = 48] = "ZERO", t[t.NINE = 57] = "NINE", t[t.LOWER_A = 97] = "LOWER_A", t[t.LOWER_F = 102] = "LOWER_F", t[t.LOWER_X = 120] = "LOWER_X", t[t.LOWER_Z = 122] = "LOWER_Z", t[t.UPPER_A = 65] = "UPPER_A", t[t.UPPER_F = 70] = "UPPER_F", t[t.UPPER_Z = 90] = "UPPER_Z";
|
|
6
|
+
})(s || (s = {}));
|
|
7
|
+
const L = 32;
|
|
8
|
+
function o(t) {
|
|
9
|
+
return t >= s.ZERO && t <= s.NINE;
|
|
10
|
+
}
|
|
11
|
+
function x(t) {
|
|
12
|
+
return t >= s.UPPER_A && t <= s.UPPER_F || t >= s.LOWER_A && t <= s.LOWER_F;
|
|
13
|
+
}
|
|
14
|
+
function _(t) {
|
|
15
|
+
return t >= s.UPPER_A && t <= s.UPPER_Z || t >= s.LOWER_A && t <= s.LOWER_Z || o(t);
|
|
16
|
+
}
|
|
17
|
+
function P(t) {
|
|
18
|
+
return t === s.EQUALS || _(t);
|
|
19
|
+
}
|
|
20
|
+
var c;
|
|
21
|
+
(function(t) {
|
|
22
|
+
t[t.EntityStart = 0] = "EntityStart", t[t.NumericStart = 1] = "NumericStart", t[t.NumericDecimal = 2] = "NumericDecimal", t[t.NumericHex = 3] = "NumericHex", t[t.NamedEntity = 4] = "NamedEntity";
|
|
23
|
+
})(c || (c = {}));
|
|
24
|
+
var E;
|
|
25
|
+
(function(t) {
|
|
26
|
+
t[t.Legacy = 0] = "Legacy", t[t.Strict = 1] = "Strict", t[t.Attribute = 2] = "Attribute";
|
|
27
|
+
})(E || (E = {}));
|
|
28
|
+
class U {
|
|
29
|
+
decodeTree;
|
|
30
|
+
emitCodePoint;
|
|
31
|
+
errors;
|
|
32
|
+
constructor(i, e, r) {
|
|
33
|
+
this.decodeTree = i, this.emitCodePoint = e, this.errors = r;
|
|
34
|
+
}
|
|
35
|
+
/** The current state of the decoder. */
|
|
36
|
+
state = c.EntityStart;
|
|
37
|
+
/** Characters that were consumed while parsing an entity. */
|
|
38
|
+
consumed = 1;
|
|
39
|
+
/**
|
|
40
|
+
* The result of the entity.
|
|
41
|
+
*
|
|
42
|
+
* Either the result index of a numeric entity, or the codepoint of a
|
|
43
|
+
* numeric entity.
|
|
44
|
+
*/
|
|
45
|
+
result = 0;
|
|
46
|
+
/** The current index in the decode tree. */
|
|
47
|
+
treeIndex = 0;
|
|
48
|
+
/** The number of characters that were consumed in excess. */
|
|
49
|
+
excess = 1;
|
|
50
|
+
/** The mode in which the decoder is operating. */
|
|
51
|
+
decodeMode = E.Strict;
|
|
52
|
+
/** The number of characters that have been consumed in the current run. */
|
|
53
|
+
runConsumed = 0;
|
|
54
|
+
/**
|
|
55
|
+
* Resets the instance to make it reusable.
|
|
56
|
+
* @param decodeMode Entity decoding mode to use.
|
|
57
|
+
*/
|
|
58
|
+
startEntity(i) {
|
|
59
|
+
this.decodeMode = i, this.state = c.EntityStart, this.result = 0, this.treeIndex = 0, this.excess = 1, this.consumed = 1, this.runConsumed = 0;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Write an entity to the decoder. This can be called multiple times with partial entities.
|
|
63
|
+
* If the entity is incomplete, the decoder will return -1.
|
|
64
|
+
*
|
|
65
|
+
* Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
|
|
66
|
+
* entity is incomplete, and resume when the next string is written.
|
|
67
|
+
* @param input The string containing the entity (or a continuation of the entity).
|
|
68
|
+
* @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
|
|
69
|
+
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
70
|
+
*/
|
|
71
|
+
write(i, e) {
|
|
72
|
+
switch (this.state) {
|
|
73
|
+
case c.EntityStart:
|
|
74
|
+
return i.charCodeAt(e) === s.NUM ? (this.state = c.NumericStart, this.consumed += 1, this.stateNumericStart(i, e + 1)) : (this.state = c.NamedEntity, this.stateNamedEntity(i, e));
|
|
75
|
+
case c.NumericStart:
|
|
76
|
+
return this.stateNumericStart(i, e);
|
|
77
|
+
case c.NumericDecimal:
|
|
78
|
+
return this.stateNumericDecimal(i, e);
|
|
79
|
+
case c.NumericHex:
|
|
80
|
+
return this.stateNumericHex(i, e);
|
|
81
|
+
case c.NamedEntity:
|
|
82
|
+
return this.stateNamedEntity(i, e);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Switches between the numeric decimal and hexadecimal states.
|
|
87
|
+
*
|
|
88
|
+
* Equivalent to the `Numeric character reference state` in the HTML spec.
|
|
89
|
+
* @param input The string containing the entity (or a continuation of the entity).
|
|
90
|
+
* @param offset The current offset.
|
|
91
|
+
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
92
|
+
*/
|
|
93
|
+
stateNumericStart(i, e) {
|
|
94
|
+
return e >= i.length ? -1 : (i.charCodeAt(e) | L) === s.LOWER_X ? (this.state = c.NumericHex, this.consumed += 1, this.stateNumericHex(i, e + 1)) : (this.state = c.NumericDecimal, this.stateNumericDecimal(i, e));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Parses a hexadecimal numeric entity.
|
|
98
|
+
*
|
|
99
|
+
* Equivalent to the `Hexademical character reference state` in the HTML spec.
|
|
100
|
+
* @param input The string containing the entity (or a continuation of the entity).
|
|
101
|
+
* @param offset The current offset.
|
|
102
|
+
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
103
|
+
*/
|
|
104
|
+
stateNumericHex(i, e) {
|
|
105
|
+
for (; e < i.length; ) {
|
|
106
|
+
const r = i.charCodeAt(e);
|
|
107
|
+
if (o(r) || x(r)) {
|
|
108
|
+
const n = r <= s.NINE ? r - s.ZERO : (r | L) - s.LOWER_A + 10;
|
|
109
|
+
this.result = this.result * 16 + n, this.consumed++, e++;
|
|
110
|
+
} else
|
|
111
|
+
return this.emitNumericEntity(r, 3);
|
|
112
|
+
}
|
|
113
|
+
return -1;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Parses a decimal numeric entity.
|
|
117
|
+
*
|
|
118
|
+
* Equivalent to the `Decimal character reference state` in the HTML spec.
|
|
119
|
+
* @param input The string containing the entity (or a continuation of the entity).
|
|
120
|
+
* @param offset The current offset.
|
|
121
|
+
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
122
|
+
*/
|
|
123
|
+
stateNumericDecimal(i, e) {
|
|
124
|
+
for (; e < i.length; ) {
|
|
125
|
+
const r = i.charCodeAt(e);
|
|
126
|
+
if (o(r))
|
|
127
|
+
this.result = this.result * 10 + (r - s.ZERO), this.consumed++, e++;
|
|
128
|
+
else
|
|
129
|
+
return this.emitNumericEntity(r, 2);
|
|
130
|
+
}
|
|
131
|
+
return -1;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Validate and emit a numeric entity.
|
|
135
|
+
*
|
|
136
|
+
* Implements the logic from the `Hexademical character reference start
|
|
137
|
+
* state` and `Numeric character reference end state` in the HTML spec.
|
|
138
|
+
* @param lastCp The last code point of the entity. Used to see if the
|
|
139
|
+
* entity was terminated with a semicolon.
|
|
140
|
+
* @param expectedLength The minimum number of characters that should be
|
|
141
|
+
* consumed. Used to validate that at least one digit
|
|
142
|
+
* was consumed.
|
|
143
|
+
* @returns The number of characters that were consumed.
|
|
144
|
+
*/
|
|
145
|
+
emitNumericEntity(i, e) {
|
|
146
|
+
if (this.consumed <= e)
|
|
147
|
+
return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed), 0;
|
|
148
|
+
if (i === s.SEMI)
|
|
149
|
+
this.consumed += 1;
|
|
150
|
+
else if (this.decodeMode === E.Strict)
|
|
151
|
+
return 0;
|
|
152
|
+
return this.emitCodePoint(R(this.result), this.consumed), this.errors && (i !== s.SEMI && this.errors.missingSemicolonAfterCharacterReference(), this.errors.validateNumericCharacterReference(this.result)), this.consumed;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Parses a named entity.
|
|
156
|
+
*
|
|
157
|
+
* Equivalent to the `Named character reference state` in the HTML spec.
|
|
158
|
+
* @param input The string containing the entity (or a continuation of the entity).
|
|
159
|
+
* @param offset The current offset.
|
|
160
|
+
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
|
161
|
+
*/
|
|
162
|
+
stateNamedEntity(i, e) {
|
|
163
|
+
const { decodeTree: r } = this;
|
|
164
|
+
let n = r[this.treeIndex], m = (n & u.VALUE_LENGTH) >> 14;
|
|
165
|
+
for (; e < i.length; ) {
|
|
166
|
+
if (m === 0 && (n & u.FLAG13) !== 0) {
|
|
167
|
+
const d = (n & u.BRANCH_LENGTH) >> 7;
|
|
168
|
+
if (this.runConsumed === 0) {
|
|
169
|
+
const a = n & u.JUMP_TABLE;
|
|
170
|
+
if (i.charCodeAt(e) !== a)
|
|
171
|
+
return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
|
|
172
|
+
e++, this.excess++, this.runConsumed++;
|
|
173
|
+
}
|
|
174
|
+
for (; this.runConsumed < d; ) {
|
|
175
|
+
if (e >= i.length)
|
|
176
|
+
return -1;
|
|
177
|
+
const a = this.runConsumed - 1, h = r[this.treeIndex + 1 + (a >> 1)], l = a % 2 === 0 ? h & 255 : h >> 8 & 255;
|
|
178
|
+
if (i.charCodeAt(e) !== l)
|
|
179
|
+
return this.runConsumed = 0, this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
|
|
180
|
+
e++, this.excess++, this.runConsumed++;
|
|
181
|
+
}
|
|
182
|
+
this.runConsumed = 0, this.treeIndex += 1 + (d >> 1), n = r[this.treeIndex], m = (n & u.VALUE_LENGTH) >> 14;
|
|
183
|
+
}
|
|
184
|
+
if (e >= i.length)
|
|
185
|
+
break;
|
|
186
|
+
const N = i.charCodeAt(e);
|
|
187
|
+
if (N === s.SEMI && m !== 0 && (n & u.FLAG13) !== 0)
|
|
188
|
+
return this.emitNamedEntityData(this.treeIndex, m, this.consumed + this.excess);
|
|
189
|
+
if (this.treeIndex = I(r, n, this.treeIndex + Math.max(1, m), N), this.treeIndex < 0)
|
|
190
|
+
return this.result === 0 || // If we are parsing an attribute
|
|
191
|
+
this.decodeMode === E.Attribute && // We shouldn't have consumed any characters after the entity,
|
|
192
|
+
(m === 0 || // And there should be no invalid characters.
|
|
193
|
+
P(N)) ? 0 : this.emitNotTerminatedNamedEntity();
|
|
194
|
+
if (n = r[this.treeIndex], m = (n & u.VALUE_LENGTH) >> 14, m !== 0) {
|
|
195
|
+
if (N === s.SEMI)
|
|
196
|
+
return this.emitNamedEntityData(this.treeIndex, m, this.consumed + this.excess);
|
|
197
|
+
this.decodeMode !== E.Strict && (n & u.FLAG13) === 0 && (this.result = this.treeIndex, this.consumed += this.excess, this.excess = 0);
|
|
198
|
+
}
|
|
199
|
+
e++, this.excess++;
|
|
200
|
+
}
|
|
201
|
+
return -1;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Emit a named entity that was not terminated with a semicolon.
|
|
205
|
+
* @returns The number of characters consumed.
|
|
206
|
+
*/
|
|
207
|
+
emitNotTerminatedNamedEntity() {
|
|
208
|
+
const { result: i, decodeTree: e } = this, r = (e[i] & u.VALUE_LENGTH) >> 14;
|
|
209
|
+
return this.emitNamedEntityData(i, r, this.consumed), this.errors?.missingSemicolonAfterCharacterReference(), this.consumed;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Emit a named entity.
|
|
213
|
+
* @param result The index of the entity in the decode tree.
|
|
214
|
+
* @param valueLength The number of bytes in the entity.
|
|
215
|
+
* @param consumed The number of characters consumed.
|
|
216
|
+
* @returns The number of characters consumed.
|
|
217
|
+
*/
|
|
218
|
+
emitNamedEntityData(i, e, r) {
|
|
219
|
+
const { decodeTree: n } = this;
|
|
220
|
+
return this.emitCodePoint(e === 1 ? n[i] & ~(u.VALUE_LENGTH | u.FLAG13) : n[i + 1], r), e === 3 && this.emitCodePoint(n[i + 2], r), r;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Signal to the parser that the end of the input was reached.
|
|
224
|
+
*
|
|
225
|
+
* Remaining data will be emitted and relevant errors will be produced.
|
|
226
|
+
* @returns The number of characters consumed.
|
|
227
|
+
*/
|
|
228
|
+
end() {
|
|
229
|
+
switch (this.state) {
|
|
230
|
+
case c.NamedEntity:
|
|
231
|
+
return this.result !== 0 && (this.decodeMode !== E.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
|
|
232
|
+
// Otherwise, emit a numeric entity if we have one.
|
|
233
|
+
case c.NumericDecimal:
|
|
234
|
+
return this.emitNumericEntity(0, 2);
|
|
235
|
+
case c.NumericHex:
|
|
236
|
+
return this.emitNumericEntity(0, 3);
|
|
237
|
+
case c.NumericStart:
|
|
238
|
+
return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed), 0;
|
|
239
|
+
case c.EntityStart:
|
|
240
|
+
return 0;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
function I(t, i, e, r) {
|
|
245
|
+
const n = (i & u.BRANCH_LENGTH) >> 7, m = i & u.JUMP_TABLE;
|
|
246
|
+
if (n === 0)
|
|
247
|
+
return m !== 0 && r === m ? e : -1;
|
|
248
|
+
if (m) {
|
|
249
|
+
const h = r - m;
|
|
250
|
+
return h < 0 || h >= n ? -1 : t[e + h] - 1;
|
|
251
|
+
}
|
|
252
|
+
const N = n + 1 >> 1;
|
|
253
|
+
let d = 0, a = n - 1;
|
|
254
|
+
for (; d <= a; ) {
|
|
255
|
+
const h = d + a >>> 1, l = h >> 1, A = t[e + l] >> (h & 1) * 8 & 255;
|
|
256
|
+
if (A < r)
|
|
257
|
+
d = h + 1;
|
|
258
|
+
else if (A > r)
|
|
259
|
+
a = h - 1;
|
|
260
|
+
else
|
|
261
|
+
return t[e + N + h];
|
|
262
|
+
}
|
|
263
|
+
return -1;
|
|
264
|
+
}
|
|
265
|
+
export {
|
|
266
|
+
E as DecodingMode,
|
|
267
|
+
U as EntityDecoder,
|
|
268
|
+
I as determineBranch,
|
|
269
|
+
R as replaceCodePoint
|
|
270
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
function c(p, r) {
|
|
2
|
+
return function(n) {
|
|
3
|
+
let e, t = 0, s = "";
|
|
4
|
+
for (; e = p.exec(n); )
|
|
5
|
+
t !== e.index && (s += n.substring(t, e.index)), s += r.get(e[0].charCodeAt(0)), t = e.index + 1;
|
|
6
|
+
return s + n.substring(t);
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
const i = /* @__PURE__ */ c(/["&\u00A0]/g, /* @__PURE__ */ new Map([
|
|
10
|
+
[34, """],
|
|
11
|
+
[38, "&"],
|
|
12
|
+
[160, " "]
|
|
13
|
+
])), a = /* @__PURE__ */ c(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([
|
|
14
|
+
[38, "&"],
|
|
15
|
+
[60, "<"],
|
|
16
|
+
[62, ">"],
|
|
17
|
+
[160, " "]
|
|
18
|
+
]));
|
|
19
|
+
export {
|
|
20
|
+
i as escapeAttribute,
|
|
21
|
+
a as escapeText
|
|
22
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { decodeBase64 as A } from "../internal/decode-shared.js";
|
|
2
|
+
const I = /* @__PURE__ */ A("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");
|
|
3
|
+
export {
|
|
4
|
+
I as htmlDecodeTree
|
|
5
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
function s(c) {
|
|
2
|
+
const n = atob(c), e = n.length & -2, o = new Uint16Array(e / 2);
|
|
3
|
+
for (let t = 0, r = 0; t < e; t += 2) {
|
|
4
|
+
const a = n.charCodeAt(t), d = n.charCodeAt(t + 1);
|
|
5
|
+
o[r++] = a | d << 8;
|
|
6
|
+
}
|
|
7
|
+
return o;
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
s as decodeBase64
|
|
11
|
+
};
|