first commit

This commit is contained in:
Missdrop
2025-07-16 16:30:56 +00:00
commit 7ee33927cb
11326 changed files with 1230901 additions and 0 deletions

19
node_modules/parse5/LICENSE generated vendored Normal file
View File

@@ -0,0 +1,19 @@
Copyright (c) 2013-2019 Ivan Nikulin (ifaaan@gmail.com, https://github.com/inikulin)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

38
node_modules/parse5/README.md generated vendored Normal file
View File

@@ -0,0 +1,38 @@
<p align="center">
<a href="https://github.com/inikulin/parse5">
<img src="https://raw.github.com/inikulin/parse5/master/media/logo.png" alt="parse5" />
</a>
</p>
<div align="center">
<h1>parse5</h1>
<i><b>HTML parser and serializer.</b></i>
</div>
<br>
<div align="center">
<code>npm install --save parse5</code>
</div>
<br>
<p align="center">
📖 <a href="https://parse5.js.org/modules/parse5.html"><b>Documentation</b></a> 📖
</p>
---
<p align="center">
<a href="https://github.com/inikulin/parse5/tree/master/docs/list-of-packages.md">List of parse5 toolset packages</a>
</p>
<p align="center">
<a href="https://github.com/inikulin/parse5">GitHub</a>
</p>
<p align="center">
<a href="http://astexplorer.net/#/1CHlCXc4n4">Online playground</a>
</p>
<p align="center">
<a href="https://github.com/inikulin/parse5/releases">Changelog</a>
</p>

4
node_modules/parse5/dist/cjs/common/doctype.d.ts generated vendored Normal file
View File

@@ -0,0 +1,4 @@
import { DOCUMENT_MODE } from './html.js';
import type { DoctypeToken } from './token.js';
export declare function isConforming(token: DoctypeToken): boolean;
export declare function getDocumentMode(token: DoctypeToken): DOCUMENT_MODE;

118
node_modules/parse5/dist/cjs/common/doctype.js generated vendored Normal file
View File

@@ -0,0 +1,118 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.isConforming = isConforming;
exports.getDocumentMode = getDocumentMode;
const html_js_1 = require("./html.js");
//Const
const VALID_DOCTYPE_NAME = 'html';
const VALID_SYSTEM_ID = 'about:legacy-compat';
const QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd';
const QUIRKS_MODE_PUBLIC_ID_PREFIXES = [
'+//silmaril//dtd html pro v0r11 19970101//',
'-//as//dtd html 3.0 aswedit + extensions//',
'-//advasoft ltd//dtd html 3.0 aswedit + extensions//',
'-//ietf//dtd html 2.0 level 1//',
'-//ietf//dtd html 2.0 level 2//',
'-//ietf//dtd html 2.0 strict level 1//',
'-//ietf//dtd html 2.0 strict level 2//',
'-//ietf//dtd html 2.0 strict//',
'-//ietf//dtd html 2.0//',
'-//ietf//dtd html 2.1e//',
'-//ietf//dtd html 3.0//',
'-//ietf//dtd html 3.2 final//',
'-//ietf//dtd html 3.2//',
'-//ietf//dtd html 3//',
'-//ietf//dtd html level 0//',
'-//ietf//dtd html level 1//',
'-//ietf//dtd html level 2//',
'-//ietf//dtd html level 3//',
'-//ietf//dtd html strict level 0//',
'-//ietf//dtd html strict level 1//',
'-//ietf//dtd html strict level 2//',
'-//ietf//dtd html strict level 3//',
'-//ietf//dtd html strict//',
'-//ietf//dtd html//',
'-//metrius//dtd metrius presentational//',
'-//microsoft//dtd internet explorer 2.0 html strict//',
'-//microsoft//dtd internet explorer 2.0 html//',
'-//microsoft//dtd internet explorer 2.0 tables//',
'-//microsoft//dtd internet explorer 3.0 html strict//',
'-//microsoft//dtd internet explorer 3.0 html//',
'-//microsoft//dtd internet explorer 3.0 tables//',
'-//netscape comm. corp.//dtd html//',
'-//netscape comm. corp.//dtd strict html//',
"-//o'reilly and associates//dtd html 2.0//",
"-//o'reilly and associates//dtd html extended 1.0//",
"-//o'reilly and associates//dtd html extended relaxed 1.0//",
'-//sq//dtd html 2.0 hotmetal + extensions//',
'-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//',
'-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//',
'-//spyglass//dtd html 2.0 extended//',
'-//sun microsystems corp.//dtd hotjava html//',
'-//sun microsystems corp.//dtd hotjava strict html//',
'-//w3c//dtd html 3 1995-03-24//',
'-//w3c//dtd html 3.2 draft//',
'-//w3c//dtd html 3.2 final//',
'-//w3c//dtd html 3.2//',
'-//w3c//dtd html 3.2s draft//',
'-//w3c//dtd html 4.0 frameset//',
'-//w3c//dtd html 4.0 transitional//',
'-//w3c//dtd html experimental 19960712//',
'-//w3c//dtd html experimental 970421//',
'-//w3c//dtd w3 html//',
'-//w3o//dtd w3 html 3.0//',
'-//webtechs//dtd mozilla html 2.0//',
'-//webtechs//dtd mozilla html//',
];
const QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [
...QUIRKS_MODE_PUBLIC_ID_PREFIXES,
'-//w3c//dtd html 4.01 frameset//',
'-//w3c//dtd html 4.01 transitional//',
];
const QUIRKS_MODE_PUBLIC_IDS = new Set([
'-//w3o//dtd w3 html strict 3.0//en//',
'-/w3c/dtd html 4.0 transitional/en',
'html',
]);
const LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//w3c//dtd xhtml 1.0 frameset//', '-//w3c//dtd xhtml 1.0 transitional//'];
const LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [
...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES,
'-//w3c//dtd html 4.01 frameset//',
'-//w3c//dtd html 4.01 transitional//',
];
//Utils
function hasPrefix(publicId, prefixes) {
return prefixes.some((prefix) => publicId.startsWith(prefix));
}
//API
function isConforming(token) {
return (token.name === VALID_DOCTYPE_NAME &&
token.publicId === null &&
(token.systemId === null || token.systemId === VALID_SYSTEM_ID));
}
function getDocumentMode(token) {
if (token.name !== VALID_DOCTYPE_NAME) {
return html_js_1.DOCUMENT_MODE.QUIRKS;
}
const { systemId } = token;
if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {
return html_js_1.DOCUMENT_MODE.QUIRKS;
}
let { publicId } = token;
if (publicId !== null) {
publicId = publicId.toLowerCase();
if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) {
return html_js_1.DOCUMENT_MODE.QUIRKS;
}
let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;
if (hasPrefix(publicId, prefixes)) {
return html_js_1.DOCUMENT_MODE.QUIRKS;
}
prefixes =
systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;
if (hasPrefix(publicId, prefixes)) {
return html_js_1.DOCUMENT_MODE.LIMITED_QUIRKS;
}
}
return html_js_1.DOCUMENT_MODE.NO_QUIRKS;
}

67
node_modules/parse5/dist/cjs/common/error-codes.d.ts generated vendored Normal file
View File

@@ -0,0 +1,67 @@
import type { Location } from './token.js';
export interface ParserError extends Location {
code: ERR;
}
export type ParserErrorHandler = (error: ParserError) => void;
export declare enum ERR {
controlCharacterInInputStream = "control-character-in-input-stream",
noncharacterInInputStream = "noncharacter-in-input-stream",
surrogateInInputStream = "surrogate-in-input-stream",
nonVoidHtmlElementStartTagWithTrailingSolidus = "non-void-html-element-start-tag-with-trailing-solidus",
endTagWithAttributes = "end-tag-with-attributes",
endTagWithTrailingSolidus = "end-tag-with-trailing-solidus",
unexpectedSolidusInTag = "unexpected-solidus-in-tag",
unexpectedNullCharacter = "unexpected-null-character",
unexpectedQuestionMarkInsteadOfTagName = "unexpected-question-mark-instead-of-tag-name",
invalidFirstCharacterOfTagName = "invalid-first-character-of-tag-name",
unexpectedEqualsSignBeforeAttributeName = "unexpected-equals-sign-before-attribute-name",
missingEndTagName = "missing-end-tag-name",
unexpectedCharacterInAttributeName = "unexpected-character-in-attribute-name",
unknownNamedCharacterReference = "unknown-named-character-reference",
missingSemicolonAfterCharacterReference = "missing-semicolon-after-character-reference",
unexpectedCharacterAfterDoctypeSystemIdentifier = "unexpected-character-after-doctype-system-identifier",
unexpectedCharacterInUnquotedAttributeValue = "unexpected-character-in-unquoted-attribute-value",
eofBeforeTagName = "eof-before-tag-name",
eofInTag = "eof-in-tag",
missingAttributeValue = "missing-attribute-value",
missingWhitespaceBetweenAttributes = "missing-whitespace-between-attributes",
missingWhitespaceAfterDoctypePublicKeyword = "missing-whitespace-after-doctype-public-keyword",
missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers = "missing-whitespace-between-doctype-public-and-system-identifiers",
missingWhitespaceAfterDoctypeSystemKeyword = "missing-whitespace-after-doctype-system-keyword",
missingQuoteBeforeDoctypePublicIdentifier = "missing-quote-before-doctype-public-identifier",
missingQuoteBeforeDoctypeSystemIdentifier = "missing-quote-before-doctype-system-identifier",
missingDoctypePublicIdentifier = "missing-doctype-public-identifier",
missingDoctypeSystemIdentifier = "missing-doctype-system-identifier",
abruptDoctypePublicIdentifier = "abrupt-doctype-public-identifier",
abruptDoctypeSystemIdentifier = "abrupt-doctype-system-identifier",
cdataInHtmlContent = "cdata-in-html-content",
incorrectlyOpenedComment = "incorrectly-opened-comment",
eofInScriptHtmlCommentLikeText = "eof-in-script-html-comment-like-text",
eofInDoctype = "eof-in-doctype",
nestedComment = "nested-comment",
abruptClosingOfEmptyComment = "abrupt-closing-of-empty-comment",
eofInComment = "eof-in-comment",
incorrectlyClosedComment = "incorrectly-closed-comment",
eofInCdata = "eof-in-cdata",
absenceOfDigitsInNumericCharacterReference = "absence-of-digits-in-numeric-character-reference",
nullCharacterReference = "null-character-reference",
surrogateCharacterReference = "surrogate-character-reference",
characterReferenceOutsideUnicodeRange = "character-reference-outside-unicode-range",
controlCharacterReference = "control-character-reference",
noncharacterCharacterReference = "noncharacter-character-reference",
missingWhitespaceBeforeDoctypeName = "missing-whitespace-before-doctype-name",
missingDoctypeName = "missing-doctype-name",
invalidCharacterSequenceAfterDoctypeName = "invalid-character-sequence-after-doctype-name",
duplicateAttribute = "duplicate-attribute",
nonConformingDoctype = "non-conforming-doctype",
missingDoctype = "missing-doctype",
misplacedDoctype = "misplaced-doctype",
endTagWithoutMatchingOpenElement = "end-tag-without-matching-open-element",
closingOfElementWithOpenChildElements = "closing-of-element-with-open-child-elements",
disallowedContentInNoscriptInHead = "disallowed-content-in-noscript-in-head",
openElementsLeftAfterEof = "open-elements-left-after-eof",
abandonedHeadElementChild = "abandoned-head-element-child",
misplacedStartTagForHeadElement = "misplaced-start-tag-for-head-element",
nestedNoscriptInHead = "nested-noscript-in-head",
eofInElementThatCanContainOnlyText = "eof-in-element-that-can-contain-only-text"
}

66
node_modules/parse5/dist/cjs/common/error-codes.js generated vendored Normal file
View File

@@ -0,0 +1,66 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ERR = void 0;
var ERR;
(function (ERR) {
ERR["controlCharacterInInputStream"] = "control-character-in-input-stream";
ERR["noncharacterInInputStream"] = "noncharacter-in-input-stream";
ERR["surrogateInInputStream"] = "surrogate-in-input-stream";
ERR["nonVoidHtmlElementStartTagWithTrailingSolidus"] = "non-void-html-element-start-tag-with-trailing-solidus";
ERR["endTagWithAttributes"] = "end-tag-with-attributes";
ERR["endTagWithTrailingSolidus"] = "end-tag-with-trailing-solidus";
ERR["unexpectedSolidusInTag"] = "unexpected-solidus-in-tag";
ERR["unexpectedNullCharacter"] = "unexpected-null-character";
ERR["unexpectedQuestionMarkInsteadOfTagName"] = "unexpected-question-mark-instead-of-tag-name";
ERR["invalidFirstCharacterOfTagName"] = "invalid-first-character-of-tag-name";
ERR["unexpectedEqualsSignBeforeAttributeName"] = "unexpected-equals-sign-before-attribute-name";
ERR["missingEndTagName"] = "missing-end-tag-name";
ERR["unexpectedCharacterInAttributeName"] = "unexpected-character-in-attribute-name";
ERR["unknownNamedCharacterReference"] = "unknown-named-character-reference";
ERR["missingSemicolonAfterCharacterReference"] = "missing-semicolon-after-character-reference";
ERR["unexpectedCharacterAfterDoctypeSystemIdentifier"] = "unexpected-character-after-doctype-system-identifier";
ERR["unexpectedCharacterInUnquotedAttributeValue"] = "unexpected-character-in-unquoted-attribute-value";
ERR["eofBeforeTagName"] = "eof-before-tag-name";
ERR["eofInTag"] = "eof-in-tag";
ERR["missingAttributeValue"] = "missing-attribute-value";
ERR["missingWhitespaceBetweenAttributes"] = "missing-whitespace-between-attributes";
ERR["missingWhitespaceAfterDoctypePublicKeyword"] = "missing-whitespace-after-doctype-public-keyword";
ERR["missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers"] = "missing-whitespace-between-doctype-public-and-system-identifiers";
ERR["missingWhitespaceAfterDoctypeSystemKeyword"] = "missing-whitespace-after-doctype-system-keyword";
ERR["missingQuoteBeforeDoctypePublicIdentifier"] = "missing-quote-before-doctype-public-identifier";
ERR["missingQuoteBeforeDoctypeSystemIdentifier"] = "missing-quote-before-doctype-system-identifier";
ERR["missingDoctypePublicIdentifier"] = "missing-doctype-public-identifier";
ERR["missingDoctypeSystemIdentifier"] = "missing-doctype-system-identifier";
ERR["abruptDoctypePublicIdentifier"] = "abrupt-doctype-public-identifier";
ERR["abruptDoctypeSystemIdentifier"] = "abrupt-doctype-system-identifier";
ERR["cdataInHtmlContent"] = "cdata-in-html-content";
ERR["incorrectlyOpenedComment"] = "incorrectly-opened-comment";
ERR["eofInScriptHtmlCommentLikeText"] = "eof-in-script-html-comment-like-text";
ERR["eofInDoctype"] = "eof-in-doctype";
ERR["nestedComment"] = "nested-comment";
ERR["abruptClosingOfEmptyComment"] = "abrupt-closing-of-empty-comment";
ERR["eofInComment"] = "eof-in-comment";
ERR["incorrectlyClosedComment"] = "incorrectly-closed-comment";
ERR["eofInCdata"] = "eof-in-cdata";
ERR["absenceOfDigitsInNumericCharacterReference"] = "absence-of-digits-in-numeric-character-reference";
ERR["nullCharacterReference"] = "null-character-reference";
ERR["surrogateCharacterReference"] = "surrogate-character-reference";
ERR["characterReferenceOutsideUnicodeRange"] = "character-reference-outside-unicode-range";
ERR["controlCharacterReference"] = "control-character-reference";
ERR["noncharacterCharacterReference"] = "noncharacter-character-reference";
ERR["missingWhitespaceBeforeDoctypeName"] = "missing-whitespace-before-doctype-name";
ERR["missingDoctypeName"] = "missing-doctype-name";
ERR["invalidCharacterSequenceAfterDoctypeName"] = "invalid-character-sequence-after-doctype-name";
ERR["duplicateAttribute"] = "duplicate-attribute";
ERR["nonConformingDoctype"] = "non-conforming-doctype";
ERR["missingDoctype"] = "missing-doctype";
ERR["misplacedDoctype"] = "misplaced-doctype";
ERR["endTagWithoutMatchingOpenElement"] = "end-tag-without-matching-open-element";
ERR["closingOfElementWithOpenChildElements"] = "closing-of-element-with-open-child-elements";
ERR["disallowedContentInNoscriptInHead"] = "disallowed-content-in-noscript-in-head";
ERR["openElementsLeftAfterEof"] = "open-elements-left-after-eof";
ERR["abandonedHeadElementChild"] = "abandoned-head-element-child";
ERR["misplacedStartTagForHeadElement"] = "misplaced-start-tag-for-head-element";
ERR["nestedNoscriptInHead"] = "nested-noscript-in-head";
ERR["eofInElementThatCanContainOnlyText"] = "eof-in-element-that-can-contain-only-text";
})(ERR || (exports.ERR = ERR = {}));

View File

@@ -0,0 +1,9 @@
import { TAG_ID as $, NS } from './html.js';
import type { TagToken, Attribute } from './token.js';
export declare const SVG_TAG_NAMES_ADJUSTMENT_MAP: Map<string, string>;
export declare function causesExit(startTagToken: TagToken): boolean;
export declare function adjustTokenMathMLAttrs(token: TagToken): void;
export declare function adjustTokenSVGAttrs(token: TagToken): void;
export declare function adjustTokenXMLAttrs(token: TagToken): void;
export declare function adjustTokenSVGTagName(token: TagToken): void;
export declare function isIntegrationPoint(tn: $, ns: NS, attrs: Attribute[], foreignNS?: NS): boolean;

237
node_modules/parse5/dist/cjs/common/foreign-content.js generated vendored Normal file
View File

@@ -0,0 +1,237 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SVG_TAG_NAMES_ADJUSTMENT_MAP = void 0;
exports.causesExit = causesExit;
exports.adjustTokenMathMLAttrs = adjustTokenMathMLAttrs;
exports.adjustTokenSVGAttrs = adjustTokenSVGAttrs;
exports.adjustTokenXMLAttrs = adjustTokenXMLAttrs;
exports.adjustTokenSVGTagName = adjustTokenSVGTagName;
exports.isIntegrationPoint = isIntegrationPoint;
const html_js_1 = require("./html.js");
//MIME types
const MIME_TYPES = {
TEXT_HTML: 'text/html',
APPLICATION_XML: 'application/xhtml+xml',
};
//Attributes
const DEFINITION_URL_ATTR = 'definitionurl';
const ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL';
const SVG_ATTRS_ADJUSTMENT_MAP = new Map([
'attributeName',
'attributeType',
'baseFrequency',
'baseProfile',
'calcMode',
'clipPathUnits',
'diffuseConstant',
'edgeMode',
'filterUnits',
'glyphRef',
'gradientTransform',
'gradientUnits',
'kernelMatrix',
'kernelUnitLength',
'keyPoints',
'keySplines',
'keyTimes',
'lengthAdjust',
'limitingConeAngle',
'markerHeight',
'markerUnits',
'markerWidth',
'maskContentUnits',
'maskUnits',
'numOctaves',
'pathLength',
'patternContentUnits',
'patternTransform',
'patternUnits',
'pointsAtX',
'pointsAtY',
'pointsAtZ',
'preserveAlpha',
'preserveAspectRatio',
'primitiveUnits',
'refX',
'refY',
'repeatCount',
'repeatDur',
'requiredExtensions',
'requiredFeatures',
'specularConstant',
'specularExponent',
'spreadMethod',
'startOffset',
'stdDeviation',
'stitchTiles',
'surfaceScale',
'systemLanguage',
'tableValues',
'targetX',
'targetY',
'textLength',
'viewBox',
'viewTarget',
'xChannelSelector',
'yChannelSelector',
'zoomAndPan',
].map((attr) => [attr.toLowerCase(), attr]));
const XML_ATTRS_ADJUSTMENT_MAP = new Map([
['xlink:actuate', { prefix: 'xlink', name: 'actuate', namespace: html_js_1.NS.XLINK }],
['xlink:arcrole', { prefix: 'xlink', name: 'arcrole', namespace: html_js_1.NS.XLINK }],
['xlink:href', { prefix: 'xlink', name: 'href', namespace: html_js_1.NS.XLINK }],
['xlink:role', { prefix: 'xlink', name: 'role', namespace: html_js_1.NS.XLINK }],
['xlink:show', { prefix: 'xlink', name: 'show', namespace: html_js_1.NS.XLINK }],
['xlink:title', { prefix: 'xlink', name: 'title', namespace: html_js_1.NS.XLINK }],
['xlink:type', { prefix: 'xlink', name: 'type', namespace: html_js_1.NS.XLINK }],
['xml:lang', { prefix: 'xml', name: 'lang', namespace: html_js_1.NS.XML }],
['xml:space', { prefix: 'xml', name: 'space', namespace: html_js_1.NS.XML }],
['xmlns', { prefix: '', name: 'xmlns', namespace: html_js_1.NS.XMLNS }],
['xmlns:xlink', { prefix: 'xmlns', name: 'xlink', namespace: html_js_1.NS.XMLNS }],
]);
//SVG tag names adjustment map
exports.SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([
'altGlyph',
'altGlyphDef',
'altGlyphItem',
'animateColor',
'animateMotion',
'animateTransform',
'clipPath',
'feBlend',
'feColorMatrix',
'feComponentTransfer',
'feComposite',
'feConvolveMatrix',
'feDiffuseLighting',
'feDisplacementMap',
'feDistantLight',
'feFlood',
'feFuncA',
'feFuncB',
'feFuncG',
'feFuncR',
'feGaussianBlur',
'feImage',
'feMerge',
'feMergeNode',
'feMorphology',
'feOffset',
'fePointLight',
'feSpecularLighting',
'feSpotLight',
'feTile',
'feTurbulence',
'foreignObject',
'glyphRef',
'linearGradient',
'radialGradient',
'textPath',
].map((tn) => [tn.toLowerCase(), tn]));
//Tags that causes exit from foreign content
const EXITS_FOREIGN_CONTENT = new Set([
html_js_1.TAG_ID.B,
html_js_1.TAG_ID.BIG,
html_js_1.TAG_ID.BLOCKQUOTE,
html_js_1.TAG_ID.BODY,
html_js_1.TAG_ID.BR,
html_js_1.TAG_ID.CENTER,
html_js_1.TAG_ID.CODE,
html_js_1.TAG_ID.DD,
html_js_1.TAG_ID.DIV,
html_js_1.TAG_ID.DL,
html_js_1.TAG_ID.DT,
html_js_1.TAG_ID.EM,
html_js_1.TAG_ID.EMBED,
html_js_1.TAG_ID.H1,
html_js_1.TAG_ID.H2,
html_js_1.TAG_ID.H3,
html_js_1.TAG_ID.H4,
html_js_1.TAG_ID.H5,
html_js_1.TAG_ID.H6,
html_js_1.TAG_ID.HEAD,
html_js_1.TAG_ID.HR,
html_js_1.TAG_ID.I,
html_js_1.TAG_ID.IMG,
html_js_1.TAG_ID.LI,
html_js_1.TAG_ID.LISTING,
html_js_1.TAG_ID.MENU,
html_js_1.TAG_ID.META,
html_js_1.TAG_ID.NOBR,
html_js_1.TAG_ID.OL,
html_js_1.TAG_ID.P,
html_js_1.TAG_ID.PRE,
html_js_1.TAG_ID.RUBY,
html_js_1.TAG_ID.S,
html_js_1.TAG_ID.SMALL,
html_js_1.TAG_ID.SPAN,
html_js_1.TAG_ID.STRONG,
html_js_1.TAG_ID.STRIKE,
html_js_1.TAG_ID.SUB,
html_js_1.TAG_ID.SUP,
html_js_1.TAG_ID.TABLE,
html_js_1.TAG_ID.TT,
html_js_1.TAG_ID.U,
html_js_1.TAG_ID.UL,
html_js_1.TAG_ID.VAR,
]);
//Check exit from foreign content
function causesExit(startTagToken) {
const tn = startTagToken.tagID;
const isFontWithAttrs = tn === html_js_1.TAG_ID.FONT &&
startTagToken.attrs.some(({ name }) => name === html_js_1.ATTRS.COLOR || name === html_js_1.ATTRS.SIZE || name === html_js_1.ATTRS.FACE);
return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn);
}
//Token adjustments
function adjustTokenMathMLAttrs(token) {
for (let i = 0; i < token.attrs.length; i++) {
if (token.attrs[i].name === DEFINITION_URL_ATTR) {
token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR;
break;
}
}
}
function adjustTokenSVGAttrs(token) {
for (let i = 0; i < token.attrs.length; i++) {
const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);
if (adjustedAttrName != null) {
token.attrs[i].name = adjustedAttrName;
}
}
}
function adjustTokenXMLAttrs(token) {
for (let i = 0; i < token.attrs.length; i++) {
const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);
if (adjustedAttrEntry) {
token.attrs[i].prefix = adjustedAttrEntry.prefix;
token.attrs[i].name = adjustedAttrEntry.name;
token.attrs[i].namespace = adjustedAttrEntry.namespace;
}
}
}
function adjustTokenSVGTagName(token) {
const adjustedTagName = exports.SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName);
if (adjustedTagName != null) {
token.tagName = adjustedTagName;
token.tagID = (0, html_js_1.getTagID)(token.tagName);
}
}
//Integration points
function isMathMLTextIntegrationPoint(tn, ns) {
return ns === html_js_1.NS.MATHML && (tn === html_js_1.TAG_ID.MI || tn === html_js_1.TAG_ID.MO || tn === html_js_1.TAG_ID.MN || tn === html_js_1.TAG_ID.MS || tn === html_js_1.TAG_ID.MTEXT);
}
function isHtmlIntegrationPoint(tn, ns, attrs) {
if (ns === html_js_1.NS.MATHML && tn === html_js_1.TAG_ID.ANNOTATION_XML) {
for (let i = 0; i < attrs.length; i++) {
if (attrs[i].name === html_js_1.ATTRS.ENCODING) {
const value = attrs[i].value.toLowerCase();
return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;
}
}
}
return ns === html_js_1.NS.SVG && (tn === html_js_1.TAG_ID.FOREIGN_OBJECT || tn === html_js_1.TAG_ID.DESC || tn === html_js_1.TAG_ID.TITLE);
}
function isIntegrationPoint(tn, ns, attrs, foreignNS) {
return (((!foreignNS || foreignNS === html_js_1.NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) ||
((!foreignNS || foreignNS === html_js_1.NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns)));
}

289
node_modules/parse5/dist/cjs/common/html.d.ts generated vendored Normal file
View File

@@ -0,0 +1,289 @@
/** All valid namespaces in HTML. */
export declare enum NS {
HTML = "http://www.w3.org/1999/xhtml",
MATHML = "http://www.w3.org/1998/Math/MathML",
SVG = "http://www.w3.org/2000/svg",
XLINK = "http://www.w3.org/1999/xlink",
XML = "http://www.w3.org/XML/1998/namespace",
XMLNS = "http://www.w3.org/2000/xmlns/"
}
export declare enum ATTRS {
TYPE = "type",
ACTION = "action",
ENCODING = "encoding",
PROMPT = "prompt",
NAME = "name",
COLOR = "color",
FACE = "face",
SIZE = "size"
}
/**
* The mode of the document.
*
* @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks}
*/
export declare enum DOCUMENT_MODE {
NO_QUIRKS = "no-quirks",
QUIRKS = "quirks",
LIMITED_QUIRKS = "limited-quirks"
}
export declare enum TAG_NAMES {
A = "a",
ADDRESS = "address",
ANNOTATION_XML = "annotation-xml",
APPLET = "applet",
AREA = "area",
ARTICLE = "article",
ASIDE = "aside",
B = "b",
BASE = "base",
BASEFONT = "basefont",
BGSOUND = "bgsound",
BIG = "big",
BLOCKQUOTE = "blockquote",
BODY = "body",
BR = "br",
BUTTON = "button",
CAPTION = "caption",
CENTER = "center",
CODE = "code",
COL = "col",
COLGROUP = "colgroup",
DD = "dd",
DESC = "desc",
DETAILS = "details",
DIALOG = "dialog",
DIR = "dir",
DIV = "div",
DL = "dl",
DT = "dt",
EM = "em",
EMBED = "embed",
FIELDSET = "fieldset",
FIGCAPTION = "figcaption",
FIGURE = "figure",
FONT = "font",
FOOTER = "footer",
FOREIGN_OBJECT = "foreignObject",
FORM = "form",
FRAME = "frame",
FRAMESET = "frameset",
H1 = "h1",
H2 = "h2",
H3 = "h3",
H4 = "h4",
H5 = "h5",
H6 = "h6",
HEAD = "head",
HEADER = "header",
HGROUP = "hgroup",
HR = "hr",
HTML = "html",
I = "i",
IMG = "img",
IMAGE = "image",
INPUT = "input",
IFRAME = "iframe",
KEYGEN = "keygen",
LABEL = "label",
LI = "li",
LINK = "link",
LISTING = "listing",
MAIN = "main",
MALIGNMARK = "malignmark",
MARQUEE = "marquee",
MATH = "math",
MENU = "menu",
META = "meta",
MGLYPH = "mglyph",
MI = "mi",
MO = "mo",
MN = "mn",
MS = "ms",
MTEXT = "mtext",
NAV = "nav",
NOBR = "nobr",
NOFRAMES = "noframes",
NOEMBED = "noembed",
NOSCRIPT = "noscript",
OBJECT = "object",
OL = "ol",
OPTGROUP = "optgroup",
OPTION = "option",
P = "p",
PARAM = "param",
PLAINTEXT = "plaintext",
PRE = "pre",
RB = "rb",
RP = "rp",
RT = "rt",
RTC = "rtc",
RUBY = "ruby",
S = "s",
SCRIPT = "script",
SEARCH = "search",
SECTION = "section",
SELECT = "select",
SOURCE = "source",
SMALL = "small",
SPAN = "span",
STRIKE = "strike",
STRONG = "strong",
STYLE = "style",
SUB = "sub",
SUMMARY = "summary",
SUP = "sup",
TABLE = "table",
TBODY = "tbody",
TEMPLATE = "template",
TEXTAREA = "textarea",
TFOOT = "tfoot",
TD = "td",
TH = "th",
THEAD = "thead",
TITLE = "title",
TR = "tr",
TRACK = "track",
TT = "tt",
U = "u",
UL = "ul",
SVG = "svg",
VAR = "var",
WBR = "wbr",
XMP = "xmp"
}
/**
* Tag IDs are numeric IDs for known tag names.
*
* We use tag IDs to improve the performance of tag name comparisons.
*/
export declare enum TAG_ID {
UNKNOWN = 0,
A = 1,
ADDRESS = 2,
ANNOTATION_XML = 3,
APPLET = 4,
AREA = 5,
ARTICLE = 6,
ASIDE = 7,
B = 8,
BASE = 9,
BASEFONT = 10,
BGSOUND = 11,
BIG = 12,
BLOCKQUOTE = 13,
BODY = 14,
BR = 15,
BUTTON = 16,
CAPTION = 17,
CENTER = 18,
CODE = 19,
COL = 20,
COLGROUP = 21,
DD = 22,
DESC = 23,
DETAILS = 24,
DIALOG = 25,
DIR = 26,
DIV = 27,
DL = 28,
DT = 29,
EM = 30,
EMBED = 31,
FIELDSET = 32,
FIGCAPTION = 33,
FIGURE = 34,
FONT = 35,
FOOTER = 36,
FOREIGN_OBJECT = 37,
FORM = 38,
FRAME = 39,
FRAMESET = 40,
H1 = 41,
H2 = 42,
H3 = 43,
H4 = 44,
H5 = 45,
H6 = 46,
HEAD = 47,
HEADER = 48,
HGROUP = 49,
HR = 50,
HTML = 51,
I = 52,
IMG = 53,
IMAGE = 54,
INPUT = 55,
IFRAME = 56,
KEYGEN = 57,
LABEL = 58,
LI = 59,
LINK = 60,
LISTING = 61,
MAIN = 62,
MALIGNMARK = 63,
MARQUEE = 64,
MATH = 65,
MENU = 66,
META = 67,
MGLYPH = 68,
MI = 69,
MO = 70,
MN = 71,
MS = 72,
MTEXT = 73,
NAV = 74,
NOBR = 75,
NOFRAMES = 76,
NOEMBED = 77,
NOSCRIPT = 78,
OBJECT = 79,
OL = 80,
OPTGROUP = 81,
OPTION = 82,
P = 83,
PARAM = 84,
PLAINTEXT = 85,
PRE = 86,
RB = 87,
RP = 88,
RT = 89,
RTC = 90,
RUBY = 91,
S = 92,
SCRIPT = 93,
SEARCH = 94,
SECTION = 95,
SELECT = 96,
SOURCE = 97,
SMALL = 98,
SPAN = 99,
STRIKE = 100,
STRONG = 101,
STYLE = 102,
SUB = 103,
SUMMARY = 104,
SUP = 105,
TABLE = 106,
TBODY = 107,
TEMPLATE = 108,
TEXTAREA = 109,
TFOOT = 110,
TD = 111,
TH = 112,
THEAD = 113,
TITLE = 114,
TR = 115,
TRACK = 116,
TT = 117,
U = 118,
UL = 119,
SVG = 120,
VAR = 121,
WBR = 122,
XMP = 123
}
export declare function getTagID(tagName: string): TAG_ID;
export declare const SPECIAL_ELEMENTS: Record<NS, Set<TAG_ID>>;
export declare const NUMBERED_HEADERS: Set<TAG_ID>;
export declare function hasUnescapedText(tn: string, scriptingEnabled: boolean): boolean;

528
node_modules/parse5/dist/cjs/common/html.js generated vendored Normal file
View File

@@ -0,0 +1,528 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.NUMBERED_HEADERS = exports.SPECIAL_ELEMENTS = exports.TAG_ID = exports.TAG_NAMES = exports.DOCUMENT_MODE = exports.ATTRS = exports.NS = void 0;
exports.getTagID = getTagID;
exports.hasUnescapedText = hasUnescapedText;
/** All valid namespaces in HTML. */
var NS;
(function (NS) {
NS["HTML"] = "http://www.w3.org/1999/xhtml";
NS["MATHML"] = "http://www.w3.org/1998/Math/MathML";
NS["SVG"] = "http://www.w3.org/2000/svg";
NS["XLINK"] = "http://www.w3.org/1999/xlink";
NS["XML"] = "http://www.w3.org/XML/1998/namespace";
NS["XMLNS"] = "http://www.w3.org/2000/xmlns/";
})(NS || (exports.NS = NS = {}));
var ATTRS;
(function (ATTRS) {
ATTRS["TYPE"] = "type";
ATTRS["ACTION"] = "action";
ATTRS["ENCODING"] = "encoding";
ATTRS["PROMPT"] = "prompt";
ATTRS["NAME"] = "name";
ATTRS["COLOR"] = "color";
ATTRS["FACE"] = "face";
ATTRS["SIZE"] = "size";
})(ATTRS || (exports.ATTRS = ATTRS = {}));
/**
* The mode of the document.
*
* @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks}
*/
var DOCUMENT_MODE;
(function (DOCUMENT_MODE) {
DOCUMENT_MODE["NO_QUIRKS"] = "no-quirks";
DOCUMENT_MODE["QUIRKS"] = "quirks";
DOCUMENT_MODE["LIMITED_QUIRKS"] = "limited-quirks";
})(DOCUMENT_MODE || (exports.DOCUMENT_MODE = DOCUMENT_MODE = {}));
var TAG_NAMES;
(function (TAG_NAMES) {
TAG_NAMES["A"] = "a";
TAG_NAMES["ADDRESS"] = "address";
TAG_NAMES["ANNOTATION_XML"] = "annotation-xml";
TAG_NAMES["APPLET"] = "applet";
TAG_NAMES["AREA"] = "area";
TAG_NAMES["ARTICLE"] = "article";
TAG_NAMES["ASIDE"] = "aside";
TAG_NAMES["B"] = "b";
TAG_NAMES["BASE"] = "base";
TAG_NAMES["BASEFONT"] = "basefont";
TAG_NAMES["BGSOUND"] = "bgsound";
TAG_NAMES["BIG"] = "big";
TAG_NAMES["BLOCKQUOTE"] = "blockquote";
TAG_NAMES["BODY"] = "body";
TAG_NAMES["BR"] = "br";
TAG_NAMES["BUTTON"] = "button";
TAG_NAMES["CAPTION"] = "caption";
TAG_NAMES["CENTER"] = "center";
TAG_NAMES["CODE"] = "code";
TAG_NAMES["COL"] = "col";
TAG_NAMES["COLGROUP"] = "colgroup";
TAG_NAMES["DD"] = "dd";
TAG_NAMES["DESC"] = "desc";
TAG_NAMES["DETAILS"] = "details";
TAG_NAMES["DIALOG"] = "dialog";
TAG_NAMES["DIR"] = "dir";
TAG_NAMES["DIV"] = "div";
TAG_NAMES["DL"] = "dl";
TAG_NAMES["DT"] = "dt";
TAG_NAMES["EM"] = "em";
TAG_NAMES["EMBED"] = "embed";
TAG_NAMES["FIELDSET"] = "fieldset";
TAG_NAMES["FIGCAPTION"] = "figcaption";
TAG_NAMES["FIGURE"] = "figure";
TAG_NAMES["FONT"] = "font";
TAG_NAMES["FOOTER"] = "footer";
TAG_NAMES["FOREIGN_OBJECT"] = "foreignObject";
TAG_NAMES["FORM"] = "form";
TAG_NAMES["FRAME"] = "frame";
TAG_NAMES["FRAMESET"] = "frameset";
TAG_NAMES["H1"] = "h1";
TAG_NAMES["H2"] = "h2";
TAG_NAMES["H3"] = "h3";
TAG_NAMES["H4"] = "h4";
TAG_NAMES["H5"] = "h5";
TAG_NAMES["H6"] = "h6";
TAG_NAMES["HEAD"] = "head";
TAG_NAMES["HEADER"] = "header";
TAG_NAMES["HGROUP"] = "hgroup";
TAG_NAMES["HR"] = "hr";
TAG_NAMES["HTML"] = "html";
TAG_NAMES["I"] = "i";
TAG_NAMES["IMG"] = "img";
TAG_NAMES["IMAGE"] = "image";
TAG_NAMES["INPUT"] = "input";
TAG_NAMES["IFRAME"] = "iframe";
TAG_NAMES["KEYGEN"] = "keygen";
TAG_NAMES["LABEL"] = "label";
TAG_NAMES["LI"] = "li";
TAG_NAMES["LINK"] = "link";
TAG_NAMES["LISTING"] = "listing";
TAG_NAMES["MAIN"] = "main";
TAG_NAMES["MALIGNMARK"] = "malignmark";
TAG_NAMES["MARQUEE"] = "marquee";
TAG_NAMES["MATH"] = "math";
TAG_NAMES["MENU"] = "menu";
TAG_NAMES["META"] = "meta";
TAG_NAMES["MGLYPH"] = "mglyph";
TAG_NAMES["MI"] = "mi";
TAG_NAMES["MO"] = "mo";
TAG_NAMES["MN"] = "mn";
TAG_NAMES["MS"] = "ms";
TAG_NAMES["MTEXT"] = "mtext";
TAG_NAMES["NAV"] = "nav";
TAG_NAMES["NOBR"] = "nobr";
TAG_NAMES["NOFRAMES"] = "noframes";
TAG_NAMES["NOEMBED"] = "noembed";
TAG_NAMES["NOSCRIPT"] = "noscript";
TAG_NAMES["OBJECT"] = "object";
TAG_NAMES["OL"] = "ol";
TAG_NAMES["OPTGROUP"] = "optgroup";
TAG_NAMES["OPTION"] = "option";
TAG_NAMES["P"] = "p";
TAG_NAMES["PARAM"] = "param";
TAG_NAMES["PLAINTEXT"] = "plaintext";
TAG_NAMES["PRE"] = "pre";
TAG_NAMES["RB"] = "rb";
TAG_NAMES["RP"] = "rp";
TAG_NAMES["RT"] = "rt";
TAG_NAMES["RTC"] = "rtc";
TAG_NAMES["RUBY"] = "ruby";
TAG_NAMES["S"] = "s";
TAG_NAMES["SCRIPT"] = "script";
TAG_NAMES["SEARCH"] = "search";
TAG_NAMES["SECTION"] = "section";
TAG_NAMES["SELECT"] = "select";
TAG_NAMES["SOURCE"] = "source";
TAG_NAMES["SMALL"] = "small";
TAG_NAMES["SPAN"] = "span";
TAG_NAMES["STRIKE"] = "strike";
TAG_NAMES["STRONG"] = "strong";
TAG_NAMES["STYLE"] = "style";
TAG_NAMES["SUB"] = "sub";
TAG_NAMES["SUMMARY"] = "summary";
TAG_NAMES["SUP"] = "sup";
TAG_NAMES["TABLE"] = "table";
TAG_NAMES["TBODY"] = "tbody";
TAG_NAMES["TEMPLATE"] = "template";
TAG_NAMES["TEXTAREA"] = "textarea";
TAG_NAMES["TFOOT"] = "tfoot";
TAG_NAMES["TD"] = "td";
TAG_NAMES["TH"] = "th";
TAG_NAMES["THEAD"] = "thead";
TAG_NAMES["TITLE"] = "title";
TAG_NAMES["TR"] = "tr";
TAG_NAMES["TRACK"] = "track";
TAG_NAMES["TT"] = "tt";
TAG_NAMES["U"] = "u";
TAG_NAMES["UL"] = "ul";
TAG_NAMES["SVG"] = "svg";
TAG_NAMES["VAR"] = "var";
TAG_NAMES["WBR"] = "wbr";
TAG_NAMES["XMP"] = "xmp";
})(TAG_NAMES || (exports.TAG_NAMES = TAG_NAMES = {}));
/**
* Tag IDs are numeric IDs for known tag names.
*
* We use tag IDs to improve the performance of tag name comparisons.
*/
var TAG_ID;
(function (TAG_ID) {
TAG_ID[TAG_ID["UNKNOWN"] = 0] = "UNKNOWN";
TAG_ID[TAG_ID["A"] = 1] = "A";
TAG_ID[TAG_ID["ADDRESS"] = 2] = "ADDRESS";
TAG_ID[TAG_ID["ANNOTATION_XML"] = 3] = "ANNOTATION_XML";
TAG_ID[TAG_ID["APPLET"] = 4] = "APPLET";
TAG_ID[TAG_ID["AREA"] = 5] = "AREA";
TAG_ID[TAG_ID["ARTICLE"] = 6] = "ARTICLE";
TAG_ID[TAG_ID["ASIDE"] = 7] = "ASIDE";
TAG_ID[TAG_ID["B"] = 8] = "B";
TAG_ID[TAG_ID["BASE"] = 9] = "BASE";
TAG_ID[TAG_ID["BASEFONT"] = 10] = "BASEFONT";
TAG_ID[TAG_ID["BGSOUND"] = 11] = "BGSOUND";
TAG_ID[TAG_ID["BIG"] = 12] = "BIG";
TAG_ID[TAG_ID["BLOCKQUOTE"] = 13] = "BLOCKQUOTE";
TAG_ID[TAG_ID["BODY"] = 14] = "BODY";
TAG_ID[TAG_ID["BR"] = 15] = "BR";
TAG_ID[TAG_ID["BUTTON"] = 16] = "BUTTON";
TAG_ID[TAG_ID["CAPTION"] = 17] = "CAPTION";
TAG_ID[TAG_ID["CENTER"] = 18] = "CENTER";
TAG_ID[TAG_ID["CODE"] = 19] = "CODE";
TAG_ID[TAG_ID["COL"] = 20] = "COL";
TAG_ID[TAG_ID["COLGROUP"] = 21] = "COLGROUP";
TAG_ID[TAG_ID["DD"] = 22] = "DD";
TAG_ID[TAG_ID["DESC"] = 23] = "DESC";
TAG_ID[TAG_ID["DETAILS"] = 24] = "DETAILS";
TAG_ID[TAG_ID["DIALOG"] = 25] = "DIALOG";
TAG_ID[TAG_ID["DIR"] = 26] = "DIR";
TAG_ID[TAG_ID["DIV"] = 27] = "DIV";
TAG_ID[TAG_ID["DL"] = 28] = "DL";
TAG_ID[TAG_ID["DT"] = 29] = "DT";
TAG_ID[TAG_ID["EM"] = 30] = "EM";
TAG_ID[TAG_ID["EMBED"] = 31] = "EMBED";
TAG_ID[TAG_ID["FIELDSET"] = 32] = "FIELDSET";
TAG_ID[TAG_ID["FIGCAPTION"] = 33] = "FIGCAPTION";
TAG_ID[TAG_ID["FIGURE"] = 34] = "FIGURE";
TAG_ID[TAG_ID["FONT"] = 35] = "FONT";
TAG_ID[TAG_ID["FOOTER"] = 36] = "FOOTER";
TAG_ID[TAG_ID["FOREIGN_OBJECT"] = 37] = "FOREIGN_OBJECT";
TAG_ID[TAG_ID["FORM"] = 38] = "FORM";
TAG_ID[TAG_ID["FRAME"] = 39] = "FRAME";
TAG_ID[TAG_ID["FRAMESET"] = 40] = "FRAMESET";
TAG_ID[TAG_ID["H1"] = 41] = "H1";
TAG_ID[TAG_ID["H2"] = 42] = "H2";
TAG_ID[TAG_ID["H3"] = 43] = "H3";
TAG_ID[TAG_ID["H4"] = 44] = "H4";
TAG_ID[TAG_ID["H5"] = 45] = "H5";
TAG_ID[TAG_ID["H6"] = 46] = "H6";
TAG_ID[TAG_ID["HEAD"] = 47] = "HEAD";
TAG_ID[TAG_ID["HEADER"] = 48] = "HEADER";
TAG_ID[TAG_ID["HGROUP"] = 49] = "HGROUP";
TAG_ID[TAG_ID["HR"] = 50] = "HR";
TAG_ID[TAG_ID["HTML"] = 51] = "HTML";
TAG_ID[TAG_ID["I"] = 52] = "I";
TAG_ID[TAG_ID["IMG"] = 53] = "IMG";
TAG_ID[TAG_ID["IMAGE"] = 54] = "IMAGE";
TAG_ID[TAG_ID["INPUT"] = 55] = "INPUT";
TAG_ID[TAG_ID["IFRAME"] = 56] = "IFRAME";
TAG_ID[TAG_ID["KEYGEN"] = 57] = "KEYGEN";
TAG_ID[TAG_ID["LABEL"] = 58] = "LABEL";
TAG_ID[TAG_ID["LI"] = 59] = "LI";
TAG_ID[TAG_ID["LINK"] = 60] = "LINK";
TAG_ID[TAG_ID["LISTING"] = 61] = "LISTING";
TAG_ID[TAG_ID["MAIN"] = 62] = "MAIN";
TAG_ID[TAG_ID["MALIGNMARK"] = 63] = "MALIGNMARK";
TAG_ID[TAG_ID["MARQUEE"] = 64] = "MARQUEE";
TAG_ID[TAG_ID["MATH"] = 65] = "MATH";
TAG_ID[TAG_ID["MENU"] = 66] = "MENU";
TAG_ID[TAG_ID["META"] = 67] = "META";
TAG_ID[TAG_ID["MGLYPH"] = 68] = "MGLYPH";
TAG_ID[TAG_ID["MI"] = 69] = "MI";
TAG_ID[TAG_ID["MO"] = 70] = "MO";
TAG_ID[TAG_ID["MN"] = 71] = "MN";
TAG_ID[TAG_ID["MS"] = 72] = "MS";
TAG_ID[TAG_ID["MTEXT"] = 73] = "MTEXT";
TAG_ID[TAG_ID["NAV"] = 74] = "NAV";
TAG_ID[TAG_ID["NOBR"] = 75] = "NOBR";
TAG_ID[TAG_ID["NOFRAMES"] = 76] = "NOFRAMES";
TAG_ID[TAG_ID["NOEMBED"] = 77] = "NOEMBED";
TAG_ID[TAG_ID["NOSCRIPT"] = 78] = "NOSCRIPT";
TAG_ID[TAG_ID["OBJECT"] = 79] = "OBJECT";
TAG_ID[TAG_ID["OL"] = 80] = "OL";
TAG_ID[TAG_ID["OPTGROUP"] = 81] = "OPTGROUP";
TAG_ID[TAG_ID["OPTION"] = 82] = "OPTION";
TAG_ID[TAG_ID["P"] = 83] = "P";
TAG_ID[TAG_ID["PARAM"] = 84] = "PARAM";
TAG_ID[TAG_ID["PLAINTEXT"] = 85] = "PLAINTEXT";
TAG_ID[TAG_ID["PRE"] = 86] = "PRE";
TAG_ID[TAG_ID["RB"] = 87] = "RB";
TAG_ID[TAG_ID["RP"] = 88] = "RP";
TAG_ID[TAG_ID["RT"] = 89] = "RT";
TAG_ID[TAG_ID["RTC"] = 90] = "RTC";
TAG_ID[TAG_ID["RUBY"] = 91] = "RUBY";
TAG_ID[TAG_ID["S"] = 92] = "S";
TAG_ID[TAG_ID["SCRIPT"] = 93] = "SCRIPT";
TAG_ID[TAG_ID["SEARCH"] = 94] = "SEARCH";
TAG_ID[TAG_ID["SECTION"] = 95] = "SECTION";
TAG_ID[TAG_ID["SELECT"] = 96] = "SELECT";
TAG_ID[TAG_ID["SOURCE"] = 97] = "SOURCE";
TAG_ID[TAG_ID["SMALL"] = 98] = "SMALL";
TAG_ID[TAG_ID["SPAN"] = 99] = "SPAN";
TAG_ID[TAG_ID["STRIKE"] = 100] = "STRIKE";
TAG_ID[TAG_ID["STRONG"] = 101] = "STRONG";
TAG_ID[TAG_ID["STYLE"] = 102] = "STYLE";
TAG_ID[TAG_ID["SUB"] = 103] = "SUB";
TAG_ID[TAG_ID["SUMMARY"] = 104] = "SUMMARY";
TAG_ID[TAG_ID["SUP"] = 105] = "SUP";
TAG_ID[TAG_ID["TABLE"] = 106] = "TABLE";
TAG_ID[TAG_ID["TBODY"] = 107] = "TBODY";
TAG_ID[TAG_ID["TEMPLATE"] = 108] = "TEMPLATE";
TAG_ID[TAG_ID["TEXTAREA"] = 109] = "TEXTAREA";
TAG_ID[TAG_ID["TFOOT"] = 110] = "TFOOT";
TAG_ID[TAG_ID["TD"] = 111] = "TD";
TAG_ID[TAG_ID["TH"] = 112] = "TH";
TAG_ID[TAG_ID["THEAD"] = 113] = "THEAD";
TAG_ID[TAG_ID["TITLE"] = 114] = "TITLE";
TAG_ID[TAG_ID["TR"] = 115] = "TR";
TAG_ID[TAG_ID["TRACK"] = 116] = "TRACK";
TAG_ID[TAG_ID["TT"] = 117] = "TT";
TAG_ID[TAG_ID["U"] = 118] = "U";
TAG_ID[TAG_ID["UL"] = 119] = "UL";
TAG_ID[TAG_ID["SVG"] = 120] = "SVG";
TAG_ID[TAG_ID["VAR"] = 121] = "VAR";
TAG_ID[TAG_ID["WBR"] = 122] = "WBR";
TAG_ID[TAG_ID["XMP"] = 123] = "XMP";
})(TAG_ID || (exports.TAG_ID = TAG_ID = {}));
const TAG_NAME_TO_ID = new Map([
[TAG_NAMES.A, TAG_ID.A],
[TAG_NAMES.ADDRESS, TAG_ID.ADDRESS],
[TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML],
[TAG_NAMES.APPLET, TAG_ID.APPLET],
[TAG_NAMES.AREA, TAG_ID.AREA],
[TAG_NAMES.ARTICLE, TAG_ID.ARTICLE],
[TAG_NAMES.ASIDE, TAG_ID.ASIDE],
[TAG_NAMES.B, TAG_ID.B],
[TAG_NAMES.BASE, TAG_ID.BASE],
[TAG_NAMES.BASEFONT, TAG_ID.BASEFONT],
[TAG_NAMES.BGSOUND, TAG_ID.BGSOUND],
[TAG_NAMES.BIG, TAG_ID.BIG],
[TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE],
[TAG_NAMES.BODY, TAG_ID.BODY],
[TAG_NAMES.BR, TAG_ID.BR],
[TAG_NAMES.BUTTON, TAG_ID.BUTTON],
[TAG_NAMES.CAPTION, TAG_ID.CAPTION],
[TAG_NAMES.CENTER, TAG_ID.CENTER],
[TAG_NAMES.CODE, TAG_ID.CODE],
[TAG_NAMES.COL, TAG_ID.COL],
[TAG_NAMES.COLGROUP, TAG_ID.COLGROUP],
[TAG_NAMES.DD, TAG_ID.DD],
[TAG_NAMES.DESC, TAG_ID.DESC],
[TAG_NAMES.DETAILS, TAG_ID.DETAILS],
[TAG_NAMES.DIALOG, TAG_ID.DIALOG],
[TAG_NAMES.DIR, TAG_ID.DIR],
[TAG_NAMES.DIV, TAG_ID.DIV],
[TAG_NAMES.DL, TAG_ID.DL],
[TAG_NAMES.DT, TAG_ID.DT],
[TAG_NAMES.EM, TAG_ID.EM],
[TAG_NAMES.EMBED, TAG_ID.EMBED],
[TAG_NAMES.FIELDSET, TAG_ID.FIELDSET],
[TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION],
[TAG_NAMES.FIGURE, TAG_ID.FIGURE],
[TAG_NAMES.FONT, TAG_ID.FONT],
[TAG_NAMES.FOOTER, TAG_ID.FOOTER],
[TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT],
[TAG_NAMES.FORM, TAG_ID.FORM],
[TAG_NAMES.FRAME, TAG_ID.FRAME],
[TAG_NAMES.FRAMESET, TAG_ID.FRAMESET],
[TAG_NAMES.H1, TAG_ID.H1],
[TAG_NAMES.H2, TAG_ID.H2],
[TAG_NAMES.H3, TAG_ID.H3],
[TAG_NAMES.H4, TAG_ID.H4],
[TAG_NAMES.H5, TAG_ID.H5],
[TAG_NAMES.H6, TAG_ID.H6],
[TAG_NAMES.HEAD, TAG_ID.HEAD],
[TAG_NAMES.HEADER, TAG_ID.HEADER],
[TAG_NAMES.HGROUP, TAG_ID.HGROUP],
[TAG_NAMES.HR, TAG_ID.HR],
[TAG_NAMES.HTML, TAG_ID.HTML],
[TAG_NAMES.I, TAG_ID.I],
[TAG_NAMES.IMG, TAG_ID.IMG],
[TAG_NAMES.IMAGE, TAG_ID.IMAGE],
[TAG_NAMES.INPUT, TAG_ID.INPUT],
[TAG_NAMES.IFRAME, TAG_ID.IFRAME],
[TAG_NAMES.KEYGEN, TAG_ID.KEYGEN],
[TAG_NAMES.LABEL, TAG_ID.LABEL],
[TAG_NAMES.LI, TAG_ID.LI],
[TAG_NAMES.LINK, TAG_ID.LINK],
[TAG_NAMES.LISTING, TAG_ID.LISTING],
[TAG_NAMES.MAIN, TAG_ID.MAIN],
[TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK],
[TAG_NAMES.MARQUEE, TAG_ID.MARQUEE],
[TAG_NAMES.MATH, TAG_ID.MATH],
[TAG_NAMES.MENU, TAG_ID.MENU],
[TAG_NAMES.META, TAG_ID.META],
[TAG_NAMES.MGLYPH, TAG_ID.MGLYPH],
[TAG_NAMES.MI, TAG_ID.MI],
[TAG_NAMES.MO, TAG_ID.MO],
[TAG_NAMES.MN, TAG_ID.MN],
[TAG_NAMES.MS, TAG_ID.MS],
[TAG_NAMES.MTEXT, TAG_ID.MTEXT],
[TAG_NAMES.NAV, TAG_ID.NAV],
[TAG_NAMES.NOBR, TAG_ID.NOBR],
[TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES],
[TAG_NAMES.NOEMBED, TAG_ID.NOEMBED],
[TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT],
[TAG_NAMES.OBJECT, TAG_ID.OBJECT],
[TAG_NAMES.OL, TAG_ID.OL],
[TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP],
[TAG_NAMES.OPTION, TAG_ID.OPTION],
[TAG_NAMES.P, TAG_ID.P],
[TAG_NAMES.PARAM, TAG_ID.PARAM],
[TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT],
[TAG_NAMES.PRE, TAG_ID.PRE],
[TAG_NAMES.RB, TAG_ID.RB],
[TAG_NAMES.RP, TAG_ID.RP],
[TAG_NAMES.RT, TAG_ID.RT],
[TAG_NAMES.RTC, TAG_ID.RTC],
[TAG_NAMES.RUBY, TAG_ID.RUBY],
[TAG_NAMES.S, TAG_ID.S],
[TAG_NAMES.SCRIPT, TAG_ID.SCRIPT],
[TAG_NAMES.SEARCH, TAG_ID.SEARCH],
[TAG_NAMES.SECTION, TAG_ID.SECTION],
[TAG_NAMES.SELECT, TAG_ID.SELECT],
[TAG_NAMES.SOURCE, TAG_ID.SOURCE],
[TAG_NAMES.SMALL, TAG_ID.SMALL],
[TAG_NAMES.SPAN, TAG_ID.SPAN],
[TAG_NAMES.STRIKE, TAG_ID.STRIKE],
[TAG_NAMES.STRONG, TAG_ID.STRONG],
[TAG_NAMES.STYLE, TAG_ID.STYLE],
[TAG_NAMES.SUB, TAG_ID.SUB],
[TAG_NAMES.SUMMARY, TAG_ID.SUMMARY],
[TAG_NAMES.SUP, TAG_ID.SUP],
[TAG_NAMES.TABLE, TAG_ID.TABLE],
[TAG_NAMES.TBODY, TAG_ID.TBODY],
[TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE],
[TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA],
[TAG_NAMES.TFOOT, TAG_ID.TFOOT],
[TAG_NAMES.TD, TAG_ID.TD],
[TAG_NAMES.TH, TAG_ID.TH],
[TAG_NAMES.THEAD, TAG_ID.THEAD],
[TAG_NAMES.TITLE, TAG_ID.TITLE],
[TAG_NAMES.TR, TAG_ID.TR],
[TAG_NAMES.TRACK, TAG_ID.TRACK],
[TAG_NAMES.TT, TAG_ID.TT],
[TAG_NAMES.U, TAG_ID.U],
[TAG_NAMES.UL, TAG_ID.UL],
[TAG_NAMES.SVG, TAG_ID.SVG],
[TAG_NAMES.VAR, TAG_ID.VAR],
[TAG_NAMES.WBR, TAG_ID.WBR],
[TAG_NAMES.XMP, TAG_ID.XMP],
]);
function getTagID(tagName) {
var _a;
return (_a = TAG_NAME_TO_ID.get(tagName)) !== null && _a !== void 0 ? _a : TAG_ID.UNKNOWN;
}
const $ = TAG_ID;
exports.SPECIAL_ELEMENTS = {
[NS.HTML]: new Set([
$.ADDRESS,
$.APPLET,
$.AREA,
$.ARTICLE,
$.ASIDE,
$.BASE,
$.BASEFONT,
$.BGSOUND,
$.BLOCKQUOTE,
$.BODY,
$.BR,
$.BUTTON,
$.CAPTION,
$.CENTER,
$.COL,
$.COLGROUP,
$.DD,
$.DETAILS,
$.DIR,
$.DIV,
$.DL,
$.DT,
$.EMBED,
$.FIELDSET,
$.FIGCAPTION,
$.FIGURE,
$.FOOTER,
$.FORM,
$.FRAME,
$.FRAMESET,
$.H1,
$.H2,
$.H3,
$.H4,
$.H5,
$.H6,
$.HEAD,
$.HEADER,
$.HGROUP,
$.HR,
$.HTML,
$.IFRAME,
$.IMG,
$.INPUT,
$.LI,
$.LINK,
$.LISTING,
$.MAIN,
$.MARQUEE,
$.MENU,
$.META,
$.NAV,
$.NOEMBED,
$.NOFRAMES,
$.NOSCRIPT,
$.OBJECT,
$.OL,
$.P,
$.PARAM,
$.PLAINTEXT,
$.PRE,
$.SCRIPT,
$.SECTION,
$.SELECT,
$.SOURCE,
$.STYLE,
$.SUMMARY,
$.TABLE,
$.TBODY,
$.TD,
$.TEMPLATE,
$.TEXTAREA,
$.TFOOT,
$.TH,
$.THEAD,
$.TITLE,
$.TR,
$.TRACK,
$.UL,
$.WBR,
$.XMP,
]),
[NS.MATHML]: new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]),
[NS.SVG]: new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]),
[NS.XLINK]: new Set(),
[NS.XML]: new Set(),
[NS.XMLNS]: new Set(),
};
exports.NUMBERED_HEADERS = new Set([$.H1, $.H2, $.H3, $.H4, $.H5, $.H6]);
const UNESCAPED_TEXT = new Set([
TAG_NAMES.STYLE,
TAG_NAMES.SCRIPT,
TAG_NAMES.XMP,
TAG_NAMES.IFRAME,
TAG_NAMES.NOEMBED,
TAG_NAMES.NOFRAMES,
TAG_NAMES.PLAINTEXT,
]);
function hasUnescapedText(tn, scriptingEnabled) {
return UNESCAPED_TEXT.has(tn) || (scriptingEnabled && tn === TAG_NAMES.NOSCRIPT);
}

84
node_modules/parse5/dist/cjs/common/token.d.ts generated vendored Normal file
View File

@@ -0,0 +1,84 @@
import type { TAG_ID } from './html.js';
export declare enum TokenType {
CHARACTER = 0,
NULL_CHARACTER = 1,
WHITESPACE_CHARACTER = 2,
START_TAG = 3,
END_TAG = 4,
COMMENT = 5,
DOCTYPE = 6,
EOF = 7,
HIBERNATION = 8
}
export interface Location {
/** One-based line index of the first character. */
startLine: number;
/** One-based column index of the first character. */
startCol: number;
/** Zero-based first character index. */
startOffset: number;
/** One-based line index of the last character. */
endLine: number;
/** One-based column index of the last character. Points directly *after* the last character. */
endCol: number;
/** Zero-based last character index. Points directly *after* the last character. */
endOffset: number;
}
export interface LocationWithAttributes extends Location {
/** Start tag attributes' location info. */
attrs?: Record<string, Location>;
}
export interface ElementLocation extends LocationWithAttributes {
/** Element's start tag location info. */
startTag?: Location;
/**
* Element's end tag location info.
* This property is undefined, if the element has no closing tag.
*/
endTag?: Location;
}
interface TokenBase {
readonly type: TokenType;
location: Location | null;
}
export interface DoctypeToken extends TokenBase {
readonly type: TokenType.DOCTYPE;
name: string | null;
forceQuirks: boolean;
publicId: string | null;
systemId: string | null;
}
export interface Attribute {
/** The name of the attribute. */
name: string;
/** The namespace of the attribute. */
namespace?: string;
/** The namespace-related prefix of the attribute. */
prefix?: string;
/** The value of the attribute. */
value: string;
}
export interface TagToken extends TokenBase {
readonly type: TokenType.START_TAG | TokenType.END_TAG;
tagName: string;
/** Used to cache the ID of the tag name. */
tagID: TAG_ID;
selfClosing: boolean;
ackSelfClosing: boolean;
attrs: Attribute[];
location: LocationWithAttributes | null;
}
export declare function getTokenAttr(token: TagToken, attrName: string): string | null;
export interface CommentToken extends TokenBase {
readonly type: TokenType.COMMENT;
data: string;
}
export interface EOFToken extends TokenBase {
readonly type: TokenType.EOF;
}
export interface CharacterToken extends TokenBase {
type: TokenType.CHARACTER | TokenType.NULL_CHARACTER | TokenType.WHITESPACE_CHARACTER;
chars: string;
}
export type Token = DoctypeToken | TagToken | CommentToken | EOFToken | CharacterToken;
export {};

24
node_modules/parse5/dist/cjs/common/token.js generated vendored Normal file
View File

@@ -0,0 +1,24 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TokenType = void 0;
exports.getTokenAttr = getTokenAttr;
var TokenType;
(function (TokenType) {
TokenType[TokenType["CHARACTER"] = 0] = "CHARACTER";
TokenType[TokenType["NULL_CHARACTER"] = 1] = "NULL_CHARACTER";
TokenType[TokenType["WHITESPACE_CHARACTER"] = 2] = "WHITESPACE_CHARACTER";
TokenType[TokenType["START_TAG"] = 3] = "START_TAG";
TokenType[TokenType["END_TAG"] = 4] = "END_TAG";
TokenType[TokenType["COMMENT"] = 5] = "COMMENT";
TokenType[TokenType["DOCTYPE"] = 6] = "DOCTYPE";
TokenType[TokenType["EOF"] = 7] = "EOF";
TokenType[TokenType["HIBERNATION"] = 8] = "HIBERNATION";
})(TokenType || (exports.TokenType = TokenType = {}));
function getTokenAttr(token, attrName) {
for (let i = token.attrs.length - 1; i >= 0; i--) {
if (token.attrs[i].name === attrName) {
return token.attrs[i].value;
}
}
return null;
}

42
node_modules/parse5/dist/cjs/common/unicode.d.ts generated vendored Normal file
View File

@@ -0,0 +1,42 @@
export declare const REPLACEMENT_CHARACTER = "\uFFFD";
export declare enum CODE_POINTS {
EOF = -1,
NULL = 0,
TABULATION = 9,
CARRIAGE_RETURN = 13,
LINE_FEED = 10,
FORM_FEED = 12,
SPACE = 32,
EXCLAMATION_MARK = 33,
QUOTATION_MARK = 34,
AMPERSAND = 38,
APOSTROPHE = 39,
HYPHEN_MINUS = 45,
SOLIDUS = 47,
DIGIT_0 = 48,
DIGIT_9 = 57,
SEMICOLON = 59,
LESS_THAN_SIGN = 60,
EQUALS_SIGN = 61,
GREATER_THAN_SIGN = 62,
QUESTION_MARK = 63,
LATIN_CAPITAL_A = 65,
LATIN_CAPITAL_Z = 90,
RIGHT_SQUARE_BRACKET = 93,
GRAVE_ACCENT = 96,
LATIN_SMALL_A = 97,
LATIN_SMALL_Z = 122
}
export declare const SEQUENCES: {
DASH_DASH: string;
CDATA_START: string;
DOCTYPE: string;
SCRIPT: string;
PUBLIC: string;
SYSTEM: string;
};
export declare function isSurrogate(cp: number): boolean;
export declare function isSurrogatePair(cp: number): boolean;
export declare function getSurrogatePairCodePoint(cp1: number, cp2: number): number;
export declare function isControlCodePoint(cp: number): boolean;
export declare function isUndefinedCodePoint(cp: number): boolean;

70
node_modules/parse5/dist/cjs/common/unicode.js generated vendored Normal file
View File

@@ -0,0 +1,70 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SEQUENCES = exports.CODE_POINTS = exports.REPLACEMENT_CHARACTER = void 0;
exports.isSurrogate = isSurrogate;
exports.isSurrogatePair = isSurrogatePair;
exports.getSurrogatePairCodePoint = getSurrogatePairCodePoint;
exports.isControlCodePoint = isControlCodePoint;
exports.isUndefinedCodePoint = isUndefinedCodePoint;
const UNDEFINED_CODE_POINTS = new Set([
65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214,
393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894,
720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574,
1048575, 1114110, 1114111,
]);
exports.REPLACEMENT_CHARACTER = '\uFFFD';
var CODE_POINTS;
(function (CODE_POINTS) {
CODE_POINTS[CODE_POINTS["EOF"] = -1] = "EOF";
CODE_POINTS[CODE_POINTS["NULL"] = 0] = "NULL";
CODE_POINTS[CODE_POINTS["TABULATION"] = 9] = "TABULATION";
CODE_POINTS[CODE_POINTS["CARRIAGE_RETURN"] = 13] = "CARRIAGE_RETURN";
CODE_POINTS[CODE_POINTS["LINE_FEED"] = 10] = "LINE_FEED";
CODE_POINTS[CODE_POINTS["FORM_FEED"] = 12] = "FORM_FEED";
CODE_POINTS[CODE_POINTS["SPACE"] = 32] = "SPACE";
CODE_POINTS[CODE_POINTS["EXCLAMATION_MARK"] = 33] = "EXCLAMATION_MARK";
CODE_POINTS[CODE_POINTS["QUOTATION_MARK"] = 34] = "QUOTATION_MARK";
CODE_POINTS[CODE_POINTS["AMPERSAND"] = 38] = "AMPERSAND";
CODE_POINTS[CODE_POINTS["APOSTROPHE"] = 39] = "APOSTROPHE";
CODE_POINTS[CODE_POINTS["HYPHEN_MINUS"] = 45] = "HYPHEN_MINUS";
CODE_POINTS[CODE_POINTS["SOLIDUS"] = 47] = "SOLIDUS";
CODE_POINTS[CODE_POINTS["DIGIT_0"] = 48] = "DIGIT_0";
CODE_POINTS[CODE_POINTS["DIGIT_9"] = 57] = "DIGIT_9";
CODE_POINTS[CODE_POINTS["SEMICOLON"] = 59] = "SEMICOLON";
CODE_POINTS[CODE_POINTS["LESS_THAN_SIGN"] = 60] = "LESS_THAN_SIGN";
CODE_POINTS[CODE_POINTS["EQUALS_SIGN"] = 61] = "EQUALS_SIGN";
CODE_POINTS[CODE_POINTS["GREATER_THAN_SIGN"] = 62] = "GREATER_THAN_SIGN";
CODE_POINTS[CODE_POINTS["QUESTION_MARK"] = 63] = "QUESTION_MARK";
CODE_POINTS[CODE_POINTS["LATIN_CAPITAL_A"] = 65] = "LATIN_CAPITAL_A";
CODE_POINTS[CODE_POINTS["LATIN_CAPITAL_Z"] = 90] = "LATIN_CAPITAL_Z";
CODE_POINTS[CODE_POINTS["RIGHT_SQUARE_BRACKET"] = 93] = "RIGHT_SQUARE_BRACKET";
CODE_POINTS[CODE_POINTS["GRAVE_ACCENT"] = 96] = "GRAVE_ACCENT";
CODE_POINTS[CODE_POINTS["LATIN_SMALL_A"] = 97] = "LATIN_SMALL_A";
CODE_POINTS[CODE_POINTS["LATIN_SMALL_Z"] = 122] = "LATIN_SMALL_Z";
})(CODE_POINTS || (exports.CODE_POINTS = CODE_POINTS = {}));
exports.SEQUENCES = {
DASH_DASH: '--',
CDATA_START: '[CDATA[',
DOCTYPE: 'doctype',
SCRIPT: 'script',
PUBLIC: 'public',
SYSTEM: 'system',
};
//Surrogates
function isSurrogate(cp) {
return cp >= 55296 && cp <= 57343;
}
function isSurrogatePair(cp) {
return cp >= 56320 && cp <= 57343;
}
function getSurrogatePairCodePoint(cp1, cp2) {
return (cp1 - 55296) * 1024 + 9216 + cp2;
}
//NOTE: excluding NULL and ASCII whitespace
function isControlCodePoint(cp) {
return ((cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) ||
(cp >= 0x7f && cp <= 0x9f));
}
function isUndefinedCodePoint(cp) {
return (cp >= 64976 && cp <= 65007) || UNDEFINED_CODE_POINTS.has(cp);
}

71
node_modules/parse5/dist/cjs/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,71 @@
import { type ParserOptions } from './parser/index.js';
import type { DefaultTreeAdapterMap } from './tree-adapters/default.js';
import type { TreeAdapterTypeMap } from './tree-adapters/interface.js';
export { type DefaultTreeAdapterMap, defaultTreeAdapter } from './tree-adapters/default.js';
import type * as DefaultTreeAdapter from './tree-adapters/default.js';
export declare namespace DefaultTreeAdapterTypes {
type Document = DefaultTreeAdapter.Document;
type DocumentFragment = DefaultTreeAdapter.DocumentFragment;
type Element = DefaultTreeAdapter.Element;
type CommentNode = DefaultTreeAdapter.CommentNode;
type TextNode = DefaultTreeAdapter.TextNode;
type Template = DefaultTreeAdapter.Template;
type DocumentType = DefaultTreeAdapter.DocumentType;
type ParentNode = DefaultTreeAdapter.ParentNode;
type ChildNode = DefaultTreeAdapter.ChildNode;
type Node = DefaultTreeAdapter.Node;
type DefaultTreeAdapterMap = DefaultTreeAdapter.DefaultTreeAdapterMap;
}
export type { TreeAdapter, TreeAdapterTypeMap } from './tree-adapters/interface.js';
export { type ParserOptions, /** @internal */ Parser } from './parser/index.js';
export { serialize, serializeOuter, type SerializerOptions } from './serializer/index.js';
export { ERR as ErrorCodes, type ParserError, type ParserErrorHandler } from './common/error-codes.js';
/** @internal */
export * as foreignContent from './common/foreign-content.js';
export * as html from './common/html.js';
export * as Token from './common/token.js';
/** @internal */
export { Tokenizer, type TokenizerOptions, TokenizerMode, type TokenHandler } from './tokenizer/index.js';
/**
* Parses an HTML string.
*
* @param html Input HTML string.
* @param options Parsing options.
* @returns Document
*
* @example
*
* ```js
* const parse5 = require('parse5');
*
* const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');
*
* console.log(document.childNodes[1].tagName); //> 'html'
*```
*/
export declare function parse<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>(html: string, options?: ParserOptions<T>): T['document'];
/**
* Parses an HTML fragment.
*
* @example
*
* ```js
* const parse5 = require('parse5');
*
* const documentFragment = parse5.parseFragment('<table></table>');
*
* console.log(documentFragment.childNodes[0].tagName); //> 'table'
*
* // Parses the html fragment in the context of the parsed <table> element.
* const trFragment = parse5.parseFragment(documentFragment.childNodes[0], '<tr><td>Shake it, baby</td></tr>');
*
* console.log(trFragment.childNodes[0].childNodes[0].tagName); //> 'td'
* ```
*
* @param fragmentContext Parsing context element. If specified, given fragment will be parsed as if it was set to the context element's `innerHTML` property.
* @param html Input HTML fragment string.
* @param options Parsing options.
* @returns DocumentFragment
*/
export declare function parseFragment<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>(fragmentContext: T['parentNode'] | null, html: string, options: ParserOptions<T>): T['documentFragment'];
export declare function parseFragment<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>(html: string, options?: ParserOptions<T>): T['documentFragment'];

54
node_modules/parse5/dist/cjs/index.js generated vendored Normal file
View File

@@ -0,0 +1,54 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TokenizerMode = exports.Tokenizer = exports.Token = exports.html = exports.foreignContent = exports.ErrorCodes = exports.serializeOuter = exports.serialize = exports.Parser = exports.defaultTreeAdapter = void 0;
exports.parse = parse;
exports.parseFragment = parseFragment;
const index_js_1 = require("./parser/index.js");
var default_js_1 = require("./tree-adapters/default.js");
Object.defineProperty(exports, "defaultTreeAdapter", { enumerable: true, get: function () { return default_js_1.defaultTreeAdapter; } });
var index_js_2 = require("./parser/index.js");
Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return index_js_2.Parser; } });
var index_js_3 = require("./serializer/index.js");
Object.defineProperty(exports, "serialize", { enumerable: true, get: function () { return index_js_3.serialize; } });
Object.defineProperty(exports, "serializeOuter", { enumerable: true, get: function () { return index_js_3.serializeOuter; } });
var error_codes_js_1 = require("./common/error-codes.js");
Object.defineProperty(exports, "ErrorCodes", { enumerable: true, get: function () { return error_codes_js_1.ERR; } });
/** @internal */
exports.foreignContent = require("./common/foreign-content.js");
exports.html = require("./common/html.js");
exports.Token = require("./common/token.js");
/** @internal */
var index_js_4 = require("./tokenizer/index.js");
Object.defineProperty(exports, "Tokenizer", { enumerable: true, get: function () { return index_js_4.Tokenizer; } });
Object.defineProperty(exports, "TokenizerMode", { enumerable: true, get: function () { return index_js_4.TokenizerMode; } });
// Shorthands
/**
* Parses an HTML string.
*
* @param html Input HTML string.
* @param options Parsing options.
* @returns Document
*
* @example
*
* ```js
* const parse5 = require('parse5');
*
* const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');
*
* console.log(document.childNodes[1].tagName); //> 'html'
*```
*/
function parse(html, options) {
return index_js_1.Parser.parse(html, options);
}
function parseFragment(fragmentContext, html, options) {
if (typeof fragmentContext === 'string') {
options = html;
html = fragmentContext;
fragmentContext = null;
}
const parser = index_js_1.Parser.getFragmentParser(fragmentContext, options);
parser.tokenizer.write(html, true);
return parser.getFragment();
}

1
node_modules/parse5/dist/cjs/package.json generated vendored Normal file
View File

@@ -0,0 +1 @@
{"type":"commonjs"}

View File

@@ -0,0 +1,36 @@
import type { TagToken } from '../common/token.js';
import type { TreeAdapter, TreeAdapterTypeMap } from '../tree-adapters/interface.js';
export declare enum EntryType {
Marker = 0,
Element = 1
}
interface MarkerEntry {
type: EntryType.Marker;
}
export interface ElementEntry<T extends TreeAdapterTypeMap> {
type: EntryType.Element;
element: T['element'];
token: TagToken;
}
export type Entry<T extends TreeAdapterTypeMap> = MarkerEntry | ElementEntry<T>;
export declare class FormattingElementList<T extends TreeAdapterTypeMap> {
private treeAdapter;
entries: Entry<T>[];
bookmark: Entry<T> | null;
constructor(treeAdapter: TreeAdapter<T>);
private _getNoahArkConditionCandidates;
private _ensureNoahArkCondition;
insertMarker(): void;
pushElement(element: T['element'], token: TagToken): void;
insertElementAfterBookmark(element: T['element'], token: TagToken): void;
removeEntry(entry: Entry<T>): void;
/**
* Clears the list of formatting elements up to the last marker.
*
* @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker
*/
clearToLastMarker(): void;
getElementEntryInScopeWithTagName(tagName: string): ElementEntry<T> | null;
getElementEntry(element: T['element']): ElementEntry<T> | undefined;
}
export {};

View File

@@ -0,0 +1,114 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FormattingElementList = exports.EntryType = void 0;
//Const
const NOAH_ARK_CAPACITY = 3;
var EntryType;
(function (EntryType) {
EntryType[EntryType["Marker"] = 0] = "Marker";
EntryType[EntryType["Element"] = 1] = "Element";
})(EntryType || (exports.EntryType = EntryType = {}));
const MARKER = { type: EntryType.Marker };
//List of formatting elements
class FormattingElementList {
constructor(treeAdapter) {
this.treeAdapter = treeAdapter;
this.entries = [];
this.bookmark = null;
}
//Noah Ark's condition
//OPTIMIZATION: at first we try to find possible candidates for exclusion using
//lightweight heuristics without thorough attributes check.
_getNoahArkConditionCandidates(newElement, neAttrs) {
const candidates = [];
const neAttrsLength = neAttrs.length;
const neTagName = this.treeAdapter.getTagName(newElement);
const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement);
for (let i = 0; i < this.entries.length; i++) {
const entry = this.entries[i];
if (entry.type === EntryType.Marker) {
break;
}
const { element } = entry;
if (this.treeAdapter.getTagName(element) === neTagName &&
this.treeAdapter.getNamespaceURI(element) === neNamespaceURI) {
const elementAttrs = this.treeAdapter.getAttrList(element);
if (elementAttrs.length === neAttrsLength) {
candidates.push({ idx: i, attrs: elementAttrs });
}
}
}
return candidates;
}
_ensureNoahArkCondition(newElement) {
if (this.entries.length < NOAH_ARK_CAPACITY)
return;
const neAttrs = this.treeAdapter.getAttrList(newElement);
const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs);
if (candidates.length < NOAH_ARK_CAPACITY)
return;
//NOTE: build attrs map for the new element, so we can perform fast lookups
const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value]));
let validCandidates = 0;
//NOTE: remove bottommost candidates, until Noah's Ark condition will not be met
for (let i = 0; i < candidates.length; i++) {
const candidate = candidates[i];
// We know that `candidate.attrs.length === neAttrs.length`
if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) {
validCandidates += 1;
if (validCandidates >= NOAH_ARK_CAPACITY) {
this.entries.splice(candidate.idx, 1);
}
}
}
}
//Mutations
insertMarker() {
this.entries.unshift(MARKER);
}
pushElement(element, token) {
this._ensureNoahArkCondition(element);
this.entries.unshift({
type: EntryType.Element,
element,
token,
});
}
insertElementAfterBookmark(element, token) {
const bookmarkIdx = this.entries.indexOf(this.bookmark);
this.entries.splice(bookmarkIdx, 0, {
type: EntryType.Element,
element,
token,
});
}
removeEntry(entry) {
const entryIndex = this.entries.indexOf(entry);
if (entryIndex !== -1) {
this.entries.splice(entryIndex, 1);
}
}
/**
* Clears the list of formatting elements up to the last marker.
*
* @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker
*/
clearToLastMarker() {
const markerIdx = this.entries.indexOf(MARKER);
if (markerIdx === -1) {
this.entries.length = 0;
}
else {
this.entries.splice(0, markerIdx + 1);
}
}
//Search
getElementEntryInScopeWithTagName(tagName) {
const entry = this.entries.find((entry) => entry.type === EntryType.Marker || this.treeAdapter.getTagName(entry.element) === tagName);
return entry && entry.type === EntryType.Element ? entry : null;
}
getElementEntry(element) {
return this.entries.find((entry) => entry.type === EntryType.Element && entry.element === element);
}
}
exports.FormattingElementList = FormattingElementList;

221
node_modules/parse5/dist/cjs/parser/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,221 @@
import { Tokenizer, TokenizerMode, type TokenHandler } from '../tokenizer/index.js';
import { OpenElementStack, type StackHandler } from './open-element-stack.js';
import { FormattingElementList } from './formatting-element-list.js';
import { ERR, type ParserErrorHandler } from '../common/error-codes.js';
import { TAG_ID as $, NS } from '../common/html.js';
import type { TreeAdapter, TreeAdapterTypeMap } from '../tree-adapters/interface.js';
import { type Token, type CommentToken, type CharacterToken, type TagToken, type DoctypeToken, type EOFToken, type LocationWithAttributes } from '../common/token.js';
declare enum InsertionMode {
INITIAL = 0,
BEFORE_HTML = 1,
BEFORE_HEAD = 2,
IN_HEAD = 3,
IN_HEAD_NO_SCRIPT = 4,
AFTER_HEAD = 5,
IN_BODY = 6,
TEXT = 7,
IN_TABLE = 8,
IN_TABLE_TEXT = 9,
IN_CAPTION = 10,
IN_COLUMN_GROUP = 11,
IN_TABLE_BODY = 12,
IN_ROW = 13,
IN_CELL = 14,
IN_SELECT = 15,
IN_SELECT_IN_TABLE = 16,
IN_TEMPLATE = 17,
AFTER_BODY = 18,
IN_FRAMESET = 19,
AFTER_FRAMESET = 20,
AFTER_AFTER_BODY = 21,
AFTER_AFTER_FRAMESET = 22
}
export interface ParserOptions<T extends TreeAdapterTypeMap> {
/**
* The [scripting flag](https://html.spec.whatwg.org/multipage/parsing.html#scripting-flag). If set
* to `true`, `noscript` element content will be parsed as text.
*
* @default `true`
*/
scriptingEnabled?: boolean;
/**
* Enables source code location information. When enabled, each node (except the root node)
* will have a `sourceCodeLocation` property. If the node is not an empty element, `sourceCodeLocation` will
* be a {@link ElementLocation} object, otherwise it will be {@link Location}.
* If the element was implicitly created by the parser (as part of
* [tree correction](https://html.spec.whatwg.org/multipage/syntax.html#an-introduction-to-error-handling-and-strange-cases-in-the-parser)),
* its `sourceCodeLocation` property will be `undefined`.
*
* @default `false`
*/
sourceCodeLocationInfo?: boolean;
/**
* Specifies the resulting tree format.
*
* @default `treeAdapters.default`
*/
treeAdapter?: TreeAdapter<T>;
/**
* Callback for parse errors.
*
* @default `null`
*/
onParseError?: ParserErrorHandler | null;
}
export declare class Parser<T extends TreeAdapterTypeMap> implements TokenHandler, StackHandler<T> {
/** @internal */
fragmentContext: T['element'] | null;
/** @internal */
scriptHandler: null | ((pendingScript: T['element']) => void);
treeAdapter: TreeAdapter<T>;
/** @internal */
onParseError: ParserErrorHandler | null;
protected currentToken: Token | null;
options: Required<ParserOptions<T>>;
document: T['document'];
constructor(options?: ParserOptions<T>, document?: T['document'],
/** @internal */
fragmentContext?: T['element'] | null,
/** @internal */
scriptHandler?: null | ((pendingScript: T['element']) => void));
static parse<T extends TreeAdapterTypeMap>(html: string, options?: ParserOptions<T>): T['document'];
static getFragmentParser<T extends TreeAdapterTypeMap>(fragmentContext?: T['parentNode'] | null, options?: ParserOptions<T>): Parser<T>;
getFragment(): T['documentFragment'];
tokenizer: Tokenizer;
stopped: boolean;
/** @internal */
insertionMode: InsertionMode;
/** @internal */
originalInsertionMode: InsertionMode;
/** @internal */
fragmentContextID: $;
/** @internal */
headElement: null | T['element'];
/** @internal */
formElement: null | T['element'];
/** @internal */
openElements: OpenElementStack<T>;
/** @internal */
activeFormattingElements: FormattingElementList<T>;
/** Indicates that the current node is not an element in the HTML namespace */
protected currentNotInHTML: boolean;
/**
* The template insertion mode stack is maintained from the left.
* Ie. the topmost element will always have index 0.
*
* @internal
*/
tmplInsertionModeStack: InsertionMode[];
/** @internal */
pendingCharacterTokens: CharacterToken[];
/** @internal */
hasNonWhitespacePendingCharacterToken: boolean;
/** @internal */
framesetOk: boolean;
/** @internal */
skipNextNewLine: boolean;
/** @internal */
fosterParentingEnabled: boolean;
/** @internal */
_err(token: Token, code: ERR, beforeToken?: boolean): void;
/** @internal */
onItemPush(node: T['parentNode'], tid: number, isTop: boolean): void;
/** @internal */
onItemPop(node: T['parentNode'], isTop: boolean): void;
protected _setContextModes(current: T['parentNode'] | undefined, tid: number | undefined): void;
/** @protected */
_switchToTextParsing(currentToken: TagToken, nextTokenizerState: (typeof TokenizerMode)[keyof typeof TokenizerMode]): void;
switchToPlaintextParsing(): void;
/** @protected */
_getAdjustedCurrentElement(): T['element'];
/** @protected */
_findFormInFragmentContext(): void;
protected _initTokenizerForFragmentParsing(): void;
/** @protected */
_setDocumentType(token: DoctypeToken): void;
/** @protected */
_attachElementToTree(element: T['element'], location: LocationWithAttributes | null): void;
/**
* For self-closing tags. Add an element to the tree, but skip adding it
* to the stack.
*/
/** @protected */
_appendElement(token: TagToken, namespaceURI: NS): void;
/** @protected */
_insertElement(token: TagToken, namespaceURI: NS): void;
/** @protected */
_insertFakeElement(tagName: string, tagID: $): void;
/** @protected */
_insertTemplate(token: TagToken): void;
/** @protected */
_insertFakeRootElement(): void;
/** @protected */
_appendCommentNode(token: CommentToken, parent: T['parentNode']): void;
/** @protected */
_insertCharacters(token: CharacterToken): void;
/** @protected */
_adoptNodes(donor: T['parentNode'], recipient: T['parentNode']): void;
/** @protected */
_setEndLocation(element: T['element'], closingToken: Token): void;
protected shouldProcessStartTagTokenInForeignContent(token: TagToken): boolean;
/** @protected */
_processToken(token: Token): void;
/** @protected */
_isIntegrationPoint(tid: $, element: T['element'], foreignNS?: NS): boolean;
/** @protected */
_reconstructActiveFormattingElements(): void;
/** @protected */
_closeTableCell(): void;
/** @protected */
_closePElement(): void;
/** @protected */
_resetInsertionMode(): void;
/** @protected */
_resetInsertionModeForSelect(selectIdx: number): void;
/** @protected */
_isElementCausesFosterParenting(tn: $): boolean;
/** @protected */
_shouldFosterParentOnInsertion(): boolean;
/** @protected */
_findFosterParentingLocation(): {
parent: T['parentNode'];
beforeElement: T['element'] | null;
};
/** @protected */
_fosterParentElement(element: T['element']): void;
/** @protected */
_isSpecialElement(element: T['element'], id: $): boolean;
/** @internal */
onCharacter(token: CharacterToken): void;
/** @internal */
onNullCharacter(token: CharacterToken): void;
/** @internal */
onComment(token: CommentToken): void;
/** @internal */
onDoctype(token: DoctypeToken): void;
/** @internal */
onStartTag(token: TagToken): void;
/**
* Processes a given start tag.
*
* `onStartTag` checks if a self-closing tag was recognized. When a token
* is moved inbetween multiple insertion modes, this check for self-closing
* could lead to false positives. To avoid this, `_processStartTag` is used
* for nested calls.
*
* @param token The token to process.
* @protected
*/
_processStartTag(token: TagToken): void;
/** @protected */
_startTagOutsideForeignContent(token: TagToken): void;
/** @internal */
onEndTag(token: TagToken): void;
/** @protected */
_endTagOutsideForeignContent(token: TagToken): void;
/** @internal */
onEof(token: EOFToken): void;
/** @internal */
onWhitespaceCharacter(token: CharacterToken): void;
}
export {};

3240
node_modules/parse5/dist/cjs/parser/index.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,53 @@
import { TAG_ID as $ } from '../common/html.js';
import type { TreeAdapter, TreeAdapterTypeMap } from '../tree-adapters/interface.js';
export interface StackHandler<T extends TreeAdapterTypeMap> {
onItemPush: (node: T['parentNode'], tid: number, isTop: boolean) => void;
onItemPop: (node: T['parentNode'], isTop: boolean) => void;
}
export declare class OpenElementStack<T extends TreeAdapterTypeMap> {
private treeAdapter;
private handler;
items: T['parentNode'][];
tagIDs: $[];
current: T['parentNode'] | undefined;
stackTop: number;
tmplCount: number;
currentTagId: number | undefined;
get currentTmplContentOrNode(): T['parentNode'];
constructor(document: T['document'], treeAdapter: TreeAdapter<T>, handler: StackHandler<T>);
private _indexOf;
private _isInTemplate;
private _updateCurrentElement;
push(element: T['element'], tagID: $): void;
pop(): void;
replace(oldElement: T['element'], newElement: T['element']): void;
insertAfter(referenceElement: T['element'], newElement: T['element'], newElementID: $): void;
popUntilTagNamePopped(tagName: $): void;
shortenToLength(idx: number): void;
popUntilElementPopped(element: T['element']): void;
private popUntilPopped;
popUntilNumberedHeaderPopped(): void;
popUntilTableCellPopped(): void;
popAllUpToHtmlElement(): void;
private _indexOfTagNames;
private clearBackTo;
clearBackToTableContext(): void;
clearBackToTableBodyContext(): void;
clearBackToTableRowContext(): void;
remove(element: T['element']): void;
tryPeekProperlyNestedBodyElement(): T['element'] | null;
contains(element: T['element']): boolean;
getCommonAncestor(element: T['element']): T['element'] | null;
isRootHtmlElementCurrent(): boolean;
private hasInDynamicScope;
hasInScope(tagName: $): boolean;
hasInListItemScope(tagName: $): boolean;
hasInButtonScope(tagName: $): boolean;
hasNumberedHeaderInScope(): boolean;
hasInTableScope(tagName: $): boolean;
hasTableBodyContextInTableScope(): boolean;
hasInSelectScope(tagName: $): boolean;
generateImpliedEndTags(): void;
generateImpliedEndTagsThoroughly(): void;
generateImpliedEndTagsWithExclusion(exclusionId: $): void;
}

View File

@@ -0,0 +1,328 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.OpenElementStack = void 0;
const html_js_1 = require("../common/html.js");
//Element utils
const IMPLICIT_END_TAG_REQUIRED = new Set([html_js_1.TAG_ID.DD, html_js_1.TAG_ID.DT, html_js_1.TAG_ID.LI, html_js_1.TAG_ID.OPTGROUP, html_js_1.TAG_ID.OPTION, html_js_1.TAG_ID.P, html_js_1.TAG_ID.RB, html_js_1.TAG_ID.RP, html_js_1.TAG_ID.RT, html_js_1.TAG_ID.RTC]);
const IMPLICIT_END_TAG_REQUIRED_THOROUGHLY = new Set([
...IMPLICIT_END_TAG_REQUIRED,
html_js_1.TAG_ID.CAPTION,
html_js_1.TAG_ID.COLGROUP,
html_js_1.TAG_ID.TBODY,
html_js_1.TAG_ID.TD,
html_js_1.TAG_ID.TFOOT,
html_js_1.TAG_ID.TH,
html_js_1.TAG_ID.THEAD,
html_js_1.TAG_ID.TR,
]);
const SCOPING_ELEMENTS_HTML = new Set([
html_js_1.TAG_ID.APPLET,
html_js_1.TAG_ID.CAPTION,
html_js_1.TAG_ID.HTML,
html_js_1.TAG_ID.MARQUEE,
html_js_1.TAG_ID.OBJECT,
html_js_1.TAG_ID.TABLE,
html_js_1.TAG_ID.TD,
html_js_1.TAG_ID.TEMPLATE,
html_js_1.TAG_ID.TH,
]);
const SCOPING_ELEMENTS_HTML_LIST = new Set([...SCOPING_ELEMENTS_HTML, html_js_1.TAG_ID.OL, html_js_1.TAG_ID.UL]);
const SCOPING_ELEMENTS_HTML_BUTTON = new Set([...SCOPING_ELEMENTS_HTML, html_js_1.TAG_ID.BUTTON]);
const SCOPING_ELEMENTS_MATHML = new Set([html_js_1.TAG_ID.ANNOTATION_XML, html_js_1.TAG_ID.MI, html_js_1.TAG_ID.MN, html_js_1.TAG_ID.MO, html_js_1.TAG_ID.MS, html_js_1.TAG_ID.MTEXT]);
const SCOPING_ELEMENTS_SVG = new Set([html_js_1.TAG_ID.DESC, html_js_1.TAG_ID.FOREIGN_OBJECT, html_js_1.TAG_ID.TITLE]);
const TABLE_ROW_CONTEXT = new Set([html_js_1.TAG_ID.TR, html_js_1.TAG_ID.TEMPLATE, html_js_1.TAG_ID.HTML]);
const TABLE_BODY_CONTEXT = new Set([html_js_1.TAG_ID.TBODY, html_js_1.TAG_ID.TFOOT, html_js_1.TAG_ID.THEAD, html_js_1.TAG_ID.TEMPLATE, html_js_1.TAG_ID.HTML]);
const TABLE_CONTEXT = new Set([html_js_1.TAG_ID.TABLE, html_js_1.TAG_ID.TEMPLATE, html_js_1.TAG_ID.HTML]);
const TABLE_CELLS = new Set([html_js_1.TAG_ID.TD, html_js_1.TAG_ID.TH]);
//Stack of open elements
class OpenElementStack {
get currentTmplContentOrNode() {
return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current;
}
constructor(document, treeAdapter, handler) {
this.treeAdapter = treeAdapter;
this.handler = handler;
this.items = [];
this.tagIDs = [];
this.stackTop = -1;
this.tmplCount = 0;
this.currentTagId = html_js_1.TAG_ID.UNKNOWN;
this.current = document;
}
//Index of element
_indexOf(element) {
return this.items.lastIndexOf(element, this.stackTop);
}
//Update current element
_isInTemplate() {
return this.currentTagId === html_js_1.TAG_ID.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === html_js_1.NS.HTML;
}
_updateCurrentElement() {
this.current = this.items[this.stackTop];
this.currentTagId = this.tagIDs[this.stackTop];
}
//Mutations
push(element, tagID) {
this.stackTop++;
this.items[this.stackTop] = element;
this.current = element;
this.tagIDs[this.stackTop] = tagID;
this.currentTagId = tagID;
if (this._isInTemplate()) {
this.tmplCount++;
}
this.handler.onItemPush(element, tagID, true);
}
pop() {
const popped = this.current;
if (this.tmplCount > 0 && this._isInTemplate()) {
this.tmplCount--;
}
this.stackTop--;
this._updateCurrentElement();
this.handler.onItemPop(popped, true);
}
replace(oldElement, newElement) {
const idx = this._indexOf(oldElement);
this.items[idx] = newElement;
if (idx === this.stackTop) {
this.current = newElement;
}
}
insertAfter(referenceElement, newElement, newElementID) {
const insertionIdx = this._indexOf(referenceElement) + 1;
this.items.splice(insertionIdx, 0, newElement);
this.tagIDs.splice(insertionIdx, 0, newElementID);
this.stackTop++;
if (insertionIdx === this.stackTop) {
this._updateCurrentElement();
}
if (this.current && this.currentTagId !== undefined) {
this.handler.onItemPush(this.current, this.currentTagId, insertionIdx === this.stackTop);
}
}
popUntilTagNamePopped(tagName) {
let targetIdx = this.stackTop + 1;
do {
targetIdx = this.tagIDs.lastIndexOf(tagName, targetIdx - 1);
} while (targetIdx > 0 && this.treeAdapter.getNamespaceURI(this.items[targetIdx]) !== html_js_1.NS.HTML);
this.shortenToLength(Math.max(targetIdx, 0));
}
shortenToLength(idx) {
while (this.stackTop >= idx) {
const popped = this.current;
if (this.tmplCount > 0 && this._isInTemplate()) {
this.tmplCount -= 1;
}
this.stackTop--;
this._updateCurrentElement();
this.handler.onItemPop(popped, this.stackTop < idx);
}
}
popUntilElementPopped(element) {
const idx = this._indexOf(element);
this.shortenToLength(Math.max(idx, 0));
}
popUntilPopped(tagNames, targetNS) {
const idx = this._indexOfTagNames(tagNames, targetNS);
this.shortenToLength(Math.max(idx, 0));
}
popUntilNumberedHeaderPopped() {
this.popUntilPopped(html_js_1.NUMBERED_HEADERS, html_js_1.NS.HTML);
}
popUntilTableCellPopped() {
this.popUntilPopped(TABLE_CELLS, html_js_1.NS.HTML);
}
popAllUpToHtmlElement() {
//NOTE: here we assume that the root <html> element is always first in the open element stack, so
//we perform this fast stack clean up.
this.tmplCount = 0;
this.shortenToLength(1);
}
_indexOfTagNames(tagNames, namespace) {
for (let i = this.stackTop; i >= 0; i--) {
if (tagNames.has(this.tagIDs[i]) && this.treeAdapter.getNamespaceURI(this.items[i]) === namespace) {
return i;
}
}
return -1;
}
clearBackTo(tagNames, targetNS) {
const idx = this._indexOfTagNames(tagNames, targetNS);
this.shortenToLength(idx + 1);
}
clearBackToTableContext() {
this.clearBackTo(TABLE_CONTEXT, html_js_1.NS.HTML);
}
clearBackToTableBodyContext() {
this.clearBackTo(TABLE_BODY_CONTEXT, html_js_1.NS.HTML);
}
clearBackToTableRowContext() {
this.clearBackTo(TABLE_ROW_CONTEXT, html_js_1.NS.HTML);
}
remove(element) {
const idx = this._indexOf(element);
if (idx >= 0) {
if (idx === this.stackTop) {
this.pop();
}
else {
this.items.splice(idx, 1);
this.tagIDs.splice(idx, 1);
this.stackTop--;
this._updateCurrentElement();
this.handler.onItemPop(element, false);
}
}
}
//Search
tryPeekProperlyNestedBodyElement() {
//Properly nested <body> element (should be second element in stack).
return this.stackTop >= 1 && this.tagIDs[1] === html_js_1.TAG_ID.BODY ? this.items[1] : null;
}
contains(element) {
return this._indexOf(element) > -1;
}
getCommonAncestor(element) {
const elementIdx = this._indexOf(element) - 1;
return elementIdx >= 0 ? this.items[elementIdx] : null;
}
isRootHtmlElementCurrent() {
return this.stackTop === 0 && this.tagIDs[0] === html_js_1.TAG_ID.HTML;
}
//Element in scope
hasInDynamicScope(tagName, htmlScope) {
for (let i = this.stackTop; i >= 0; i--) {
const tn = this.tagIDs[i];
switch (this.treeAdapter.getNamespaceURI(this.items[i])) {
case html_js_1.NS.HTML: {
if (tn === tagName)
return true;
if (htmlScope.has(tn))
return false;
break;
}
case html_js_1.NS.SVG: {
if (SCOPING_ELEMENTS_SVG.has(tn))
return false;
break;
}
case html_js_1.NS.MATHML: {
if (SCOPING_ELEMENTS_MATHML.has(tn))
return false;
break;
}
}
}
return true;
}
hasInScope(tagName) {
return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML);
}
hasInListItemScope(tagName) {
return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_LIST);
}
hasInButtonScope(tagName) {
return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_BUTTON);
}
hasNumberedHeaderInScope() {
for (let i = this.stackTop; i >= 0; i--) {
const tn = this.tagIDs[i];
switch (this.treeAdapter.getNamespaceURI(this.items[i])) {
case html_js_1.NS.HTML: {
if (html_js_1.NUMBERED_HEADERS.has(tn))
return true;
if (SCOPING_ELEMENTS_HTML.has(tn))
return false;
break;
}
case html_js_1.NS.SVG: {
if (SCOPING_ELEMENTS_SVG.has(tn))
return false;
break;
}
case html_js_1.NS.MATHML: {
if (SCOPING_ELEMENTS_MATHML.has(tn))
return false;
break;
}
}
}
return true;
}
hasInTableScope(tagName) {
for (let i = this.stackTop; i >= 0; i--) {
if (this.treeAdapter.getNamespaceURI(this.items[i]) !== html_js_1.NS.HTML) {
continue;
}
switch (this.tagIDs[i]) {
case tagName: {
return true;
}
case html_js_1.TAG_ID.TABLE:
case html_js_1.TAG_ID.HTML: {
return false;
}
}
}
return true;
}
hasTableBodyContextInTableScope() {
for (let i = this.stackTop; i >= 0; i--) {
if (this.treeAdapter.getNamespaceURI(this.items[i]) !== html_js_1.NS.HTML) {
continue;
}
switch (this.tagIDs[i]) {
case html_js_1.TAG_ID.TBODY:
case html_js_1.TAG_ID.THEAD:
case html_js_1.TAG_ID.TFOOT: {
return true;
}
case html_js_1.TAG_ID.TABLE:
case html_js_1.TAG_ID.HTML: {
return false;
}
}
}
return true;
}
hasInSelectScope(tagName) {
for (let i = this.stackTop; i >= 0; i--) {
if (this.treeAdapter.getNamespaceURI(this.items[i]) !== html_js_1.NS.HTML) {
continue;
}
switch (this.tagIDs[i]) {
case tagName: {
return true;
}
case html_js_1.TAG_ID.OPTION:
case html_js_1.TAG_ID.OPTGROUP: {
break;
}
default: {
return false;
}
}
}
return true;
}
//Implied end tags
generateImpliedEndTags() {
while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED.has(this.currentTagId)) {
this.pop();
}
}
generateImpliedEndTagsThoroughly() {
while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {
this.pop();
}
}
generateImpliedEndTagsWithExclusion(exclusionId) {
while (this.currentTagId !== undefined &&
this.currentTagId !== exclusionId &&
IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {
this.pop();
}
}
}
exports.OpenElementStack = OpenElementStack;

60
node_modules/parse5/dist/cjs/serializer/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,60 @@
import type { TreeAdapter, TreeAdapterTypeMap } from '../tree-adapters/interface.js';
import { type DefaultTreeAdapterMap } from '../tree-adapters/default.js';
export interface SerializerOptions<T extends TreeAdapterTypeMap> {
/**
* Specifies input tree format.
*
* @default `treeAdapters.default`
*/
treeAdapter?: TreeAdapter<T>;
/**
* The [scripting flag](https://html.spec.whatwg.org/multipage/parsing.html#scripting-flag). If set
* to `true`, `noscript` element content will not be escaped.
*
* @default `true`
*/
scriptingEnabled?: boolean;
}
/**
* Serializes an AST node to an HTML string.
*
* @example
*
* ```js
* const parse5 = require('parse5');
*
* const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');
*
* // Serializes a document.
* const html = parse5.serialize(document);
*
* // Serializes the <html> element content.
* const str = parse5.serialize(document.childNodes[1]);
*
* console.log(str); //> '<head></head><body>Hi there!</body>'
* ```
*
* @param node Node to serialize.
* @param options Serialization options.
*/
export declare function serialize<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>(node: T['parentNode'], options?: SerializerOptions<T>): string;
/**
* Serializes an AST element node to an HTML string, including the element node.
*
* @example
*
* ```js
* const parse5 = require('parse5');
*
* const document = parse5.parseFragment('<div>Hello, <b>world</b>!</div>');
*
* // Serializes the <div> element.
* const str = parse5.serializeOuter(document.childNodes[0]);
*
* console.log(str); //> '<div>Hello, <b>world</b>!</div>'
* ```
*
* @param node Node to serialize.
* @param options Serialization options.
*/
export declare function serializeOuter<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>(node: T['node'], options?: SerializerOptions<T>): string;

172
node_modules/parse5/dist/cjs/serializer/index.js generated vendored Normal file
View File

@@ -0,0 +1,172 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.serialize = serialize;
exports.serializeOuter = serializeOuter;
const html_js_1 = require("../common/html.js");
const escape_1 = require("entities/escape");
const default_js_1 = require("../tree-adapters/default.js");
// Sets
const VOID_ELEMENTS = new Set([
html_js_1.TAG_NAMES.AREA,
html_js_1.TAG_NAMES.BASE,
html_js_1.TAG_NAMES.BASEFONT,
html_js_1.TAG_NAMES.BGSOUND,
html_js_1.TAG_NAMES.BR,
html_js_1.TAG_NAMES.COL,
html_js_1.TAG_NAMES.EMBED,
html_js_1.TAG_NAMES.FRAME,
html_js_1.TAG_NAMES.HR,
html_js_1.TAG_NAMES.IMG,
html_js_1.TAG_NAMES.INPUT,
html_js_1.TAG_NAMES.KEYGEN,
html_js_1.TAG_NAMES.LINK,
html_js_1.TAG_NAMES.META,
html_js_1.TAG_NAMES.PARAM,
html_js_1.TAG_NAMES.SOURCE,
html_js_1.TAG_NAMES.TRACK,
html_js_1.TAG_NAMES.WBR,
]);
function isVoidElement(node, options) {
return (options.treeAdapter.isElementNode(node) &&
options.treeAdapter.getNamespaceURI(node) === html_js_1.NS.HTML &&
VOID_ELEMENTS.has(options.treeAdapter.getTagName(node)));
}
const defaultOpts = { treeAdapter: default_js_1.defaultTreeAdapter, scriptingEnabled: true };
/**
* Serializes an AST node to an HTML string.
*
* @example
*
* ```js
* const parse5 = require('parse5');
*
* const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');
*
* // Serializes a document.
* const html = parse5.serialize(document);
*
* // Serializes the <html> element content.
* const str = parse5.serialize(document.childNodes[1]);
*
* console.log(str); //> '<head></head><body>Hi there!</body>'
* ```
*
* @param node Node to serialize.
* @param options Serialization options.
*/
function serialize(node, options) {
const opts = Object.assign(Object.assign({}, defaultOpts), options);
if (isVoidElement(node, opts)) {
return '';
}
return serializeChildNodes(node, opts);
}
/**
* Serializes an AST element node to an HTML string, including the element node.
*
* @example
*
* ```js
* const parse5 = require('parse5');
*
* const document = parse5.parseFragment('<div>Hello, <b>world</b>!</div>');
*
* // Serializes the <div> element.
* const str = parse5.serializeOuter(document.childNodes[0]);
*
* console.log(str); //> '<div>Hello, <b>world</b>!</div>'
* ```
*
* @param node Node to serialize.
* @param options Serialization options.
*/
function serializeOuter(node, options) {
const opts = Object.assign(Object.assign({}, defaultOpts), options);
return serializeNode(node, opts);
}
function serializeChildNodes(parentNode, options) {
let html = '';
// Get container of the child nodes
const container = options.treeAdapter.isElementNode(parentNode) &&
options.treeAdapter.getTagName(parentNode) === html_js_1.TAG_NAMES.TEMPLATE &&
options.treeAdapter.getNamespaceURI(parentNode) === html_js_1.NS.HTML
? options.treeAdapter.getTemplateContent(parentNode)
: parentNode;
const childNodes = options.treeAdapter.getChildNodes(container);
if (childNodes) {
for (const currentNode of childNodes) {
html += serializeNode(currentNode, options);
}
}
return html;
}
function serializeNode(node, options) {
if (options.treeAdapter.isElementNode(node)) {
return serializeElement(node, options);
}
if (options.treeAdapter.isTextNode(node)) {
return serializeTextNode(node, options);
}
if (options.treeAdapter.isCommentNode(node)) {
return serializeCommentNode(node, options);
}
if (options.treeAdapter.isDocumentTypeNode(node)) {
return serializeDocumentTypeNode(node, options);
}
// Return an empty string for unknown nodes
return '';
}
function serializeElement(node, options) {
const tn = options.treeAdapter.getTagName(node);
return `<${tn}${serializeAttributes(node, options)}>${isVoidElement(node, options) ? '' : `${serializeChildNodes(node, options)}</${tn}>`}`;
}
function serializeAttributes(node, { treeAdapter }) {
let html = '';
for (const attr of treeAdapter.getAttrList(node)) {
html += ' ';
if (attr.namespace) {
switch (attr.namespace) {
case html_js_1.NS.XML: {
html += `xml:${attr.name}`;
break;
}
case html_js_1.NS.XMLNS: {
if (attr.name !== 'xmlns') {
html += 'xmlns:';
}
html += attr.name;
break;
}
case html_js_1.NS.XLINK: {
html += `xlink:${attr.name}`;
break;
}
default: {
html += `${attr.prefix}:${attr.name}`;
}
}
}
else {
html += attr.name;
}
html += `="${(0, escape_1.escapeAttribute)(attr.value)}"`;
}
return html;
}
function serializeTextNode(node, options) {
const { treeAdapter } = options;
const content = treeAdapter.getTextNodeContent(node);
const parent = treeAdapter.getParentNode(node);
const parentTn = parent && treeAdapter.isElementNode(parent) && treeAdapter.getTagName(parent);
return parentTn &&
treeAdapter.getNamespaceURI(parent) === html_js_1.NS.HTML &&
(0, html_js_1.hasUnescapedText)(parentTn, options.scriptingEnabled)
? content
: (0, escape_1.escapeText)(content);
}
function serializeCommentNode(node, { treeAdapter }) {
return `<!--${treeAdapter.getCommentNodeContent(node)}-->`;
}
function serializeDocumentTypeNode(node, { treeAdapter }) {
return `<!DOCTYPE ${treeAdapter.getDocumentTypeNodeName(node)}>`;
}

247
node_modules/parse5/dist/cjs/tokenizer/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,247 @@
import { Preprocessor } from './preprocessor.js';
import { type Token, type CharacterToken, type DoctypeToken, type TagToken, type EOFToken, type CommentToken, type Attribute, type Location } from '../common/token.js';
import { EntityDecoder } from 'entities/decode';
import { ERR, type ParserErrorHandler } from '../common/error-codes.js';
declare const enum State {
DATA = 0,
RCDATA = 1,
RAWTEXT = 2,
SCRIPT_DATA = 3,
PLAINTEXT = 4,
TAG_OPEN = 5,
END_TAG_OPEN = 6,
TAG_NAME = 7,
RCDATA_LESS_THAN_SIGN = 8,
RCDATA_END_TAG_OPEN = 9,
RCDATA_END_TAG_NAME = 10,
RAWTEXT_LESS_THAN_SIGN = 11,
RAWTEXT_END_TAG_OPEN = 12,
RAWTEXT_END_TAG_NAME = 13,
SCRIPT_DATA_LESS_THAN_SIGN = 14,
SCRIPT_DATA_END_TAG_OPEN = 15,
SCRIPT_DATA_END_TAG_NAME = 16,
SCRIPT_DATA_ESCAPE_START = 17,
SCRIPT_DATA_ESCAPE_START_DASH = 18,
SCRIPT_DATA_ESCAPED = 19,
SCRIPT_DATA_ESCAPED_DASH = 20,
SCRIPT_DATA_ESCAPED_DASH_DASH = 21,
SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN = 22,
SCRIPT_DATA_ESCAPED_END_TAG_OPEN = 23,
SCRIPT_DATA_ESCAPED_END_TAG_NAME = 24,
SCRIPT_DATA_DOUBLE_ESCAPE_START = 25,
SCRIPT_DATA_DOUBLE_ESCAPED = 26,
SCRIPT_DATA_DOUBLE_ESCAPED_DASH = 27,
SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH = 28,
SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN = 29,
SCRIPT_DATA_DOUBLE_ESCAPE_END = 30,
BEFORE_ATTRIBUTE_NAME = 31,
ATTRIBUTE_NAME = 32,
AFTER_ATTRIBUTE_NAME = 33,
BEFORE_ATTRIBUTE_VALUE = 34,
ATTRIBUTE_VALUE_DOUBLE_QUOTED = 35,
ATTRIBUTE_VALUE_SINGLE_QUOTED = 36,
ATTRIBUTE_VALUE_UNQUOTED = 37,
AFTER_ATTRIBUTE_VALUE_QUOTED = 38,
SELF_CLOSING_START_TAG = 39,
BOGUS_COMMENT = 40,
MARKUP_DECLARATION_OPEN = 41,
COMMENT_START = 42,
COMMENT_START_DASH = 43,
COMMENT = 44,
COMMENT_LESS_THAN_SIGN = 45,
COMMENT_LESS_THAN_SIGN_BANG = 46,
COMMENT_LESS_THAN_SIGN_BANG_DASH = 47,
COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH = 48,
COMMENT_END_DASH = 49,
COMMENT_END = 50,
COMMENT_END_BANG = 51,
DOCTYPE = 52,
BEFORE_DOCTYPE_NAME = 53,
DOCTYPE_NAME = 54,
AFTER_DOCTYPE_NAME = 55,
AFTER_DOCTYPE_PUBLIC_KEYWORD = 56,
BEFORE_DOCTYPE_PUBLIC_IDENTIFIER = 57,
DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED = 58,
DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED = 59,
AFTER_DOCTYPE_PUBLIC_IDENTIFIER = 60,
BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS = 61,
AFTER_DOCTYPE_SYSTEM_KEYWORD = 62,
BEFORE_DOCTYPE_SYSTEM_IDENTIFIER = 63,
DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED = 64,
DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED = 65,
AFTER_DOCTYPE_SYSTEM_IDENTIFIER = 66,
BOGUS_DOCTYPE = 67,
CDATA_SECTION = 68,
CDATA_SECTION_BRACKET = 69,
CDATA_SECTION_END = 70,
CHARACTER_REFERENCE = 71,
AMBIGUOUS_AMPERSAND = 72
}
export declare const TokenizerMode: {
readonly DATA: State.DATA;
readonly RCDATA: State.RCDATA;
readonly RAWTEXT: State.RAWTEXT;
readonly SCRIPT_DATA: State.SCRIPT_DATA;
readonly PLAINTEXT: State.PLAINTEXT;
readonly CDATA_SECTION: State.CDATA_SECTION;
};
export interface TokenizerOptions {
sourceCodeLocationInfo?: boolean;
}
export interface TokenHandler {
onComment(token: CommentToken): void;
onDoctype(token: DoctypeToken): void;
onStartTag(token: TagToken): void;
onEndTag(token: TagToken): void;
onEof(token: EOFToken): void;
onCharacter(token: CharacterToken): void;
onNullCharacter(token: CharacterToken): void;
onWhitespaceCharacter(token: CharacterToken): void;
onParseError?: ParserErrorHandler | null;
}
export declare class Tokenizer {
protected options: TokenizerOptions;
protected handler: TokenHandler;
preprocessor: Preprocessor;
protected paused: boolean;
/** Ensures that the parsing loop isn't run multiple times at once. */
protected inLoop: boolean;
/**
* Indicates that the current adjusted node exists, is not an element in the HTML namespace,
* and that it is not an integration point for either MathML or HTML.
*
* @see {@link https://html.spec.whatwg.org/multipage/parsing.html#tree-construction}
*/
inForeignNode: boolean;
lastStartTagName: string;
active: boolean;
state: State;
protected returnState: State;
/**
* We use `entities`' `EntityDecoder` to parse character references.
*
* All of the following states are handled by the `EntityDecoder`:
*
* - Named character reference state
* - Numeric character reference state
* - Hexademical character reference start state
* - Hexademical character reference state
* - Decimal character reference state
* - Numeric character reference end state
*/
protected entityDecoder: EntityDecoder;
protected entityStartPos: number;
protected consumedAfterSnapshot: number;
protected currentLocation: Location | null;
protected currentCharacterToken: CharacterToken | null;
protected currentToken: Token | null;
protected currentAttr: Attribute;
constructor(options: TokenizerOptions, handler: TokenHandler);
protected _err(code: ERR, cpOffset?: number): void;
protected getCurrentLocation(offset: number): Location | null;
protected _runParsingLoop(): void;
pause(): void;
resume(writeCallback?: () => void): void;
write(chunk: string, isLastChunk: boolean, writeCallback?: () => void): void;
insertHtmlAtCurrentPos(chunk: string): void;
protected _ensureHibernation(): boolean;
protected _consume(): number;
protected _advanceBy(count: number): void;
protected _consumeSequenceIfMatch(pattern: string, caseSensitive: boolean): boolean;
protected _createStartTagToken(): void;
protected _createEndTagToken(): void;
protected _createCommentToken(offset: number): void;
protected _createDoctypeToken(initialName: string | null): void;
protected _createCharacterToken(type: CharacterToken['type'], chars: string): void;
protected _createAttr(attrNameFirstCh: string): void;
protected _leaveAttrName(): void;
protected _leaveAttrValue(): void;
protected prepareToken(ct: Token): void;
protected emitCurrentTagToken(): void;
protected emitCurrentComment(ct: CommentToken): void;
protected emitCurrentDoctype(ct: DoctypeToken): void;
protected _emitCurrentCharacterToken(nextLocation: Location | null): void;
protected _emitEOFToken(): void;
protected _appendCharToCurrentCharacterToken(type: CharacterToken['type'], ch: string): void;
protected _emitCodePoint(cp: number): void;
protected _emitChars(ch: string): void;
protected _startCharacterReference(): void;
protected _isCharacterReferenceInAttribute(): boolean;
protected _flushCodePointConsumedAsCharacterReference(cp: number): void;
protected _callState(cp: number): void;
protected _stateData(cp: number): void;
protected _stateRcdata(cp: number): void;
protected _stateRawtext(cp: number): void;
protected _stateScriptData(cp: number): void;
protected _statePlaintext(cp: number): void;
protected _stateTagOpen(cp: number): void;
protected _stateEndTagOpen(cp: number): void;
protected _stateTagName(cp: number): void;
protected _stateRcdataLessThanSign(cp: number): void;
protected _stateRcdataEndTagOpen(cp: number): void;
protected handleSpecialEndTag(_cp: number): boolean;
protected _stateRcdataEndTagName(cp: number): void;
protected _stateRawtextLessThanSign(cp: number): void;
protected _stateRawtextEndTagOpen(cp: number): void;
protected _stateRawtextEndTagName(cp: number): void;
protected _stateScriptDataLessThanSign(cp: number): void;
protected _stateScriptDataEndTagOpen(cp: number): void;
protected _stateScriptDataEndTagName(cp: number): void;
protected _stateScriptDataEscapeStart(cp: number): void;
protected _stateScriptDataEscapeStartDash(cp: number): void;
protected _stateScriptDataEscaped(cp: number): void;
protected _stateScriptDataEscapedDash(cp: number): void;
protected _stateScriptDataEscapedDashDash(cp: number): void;
protected _stateScriptDataEscapedLessThanSign(cp: number): void;
protected _stateScriptDataEscapedEndTagOpen(cp: number): void;
protected _stateScriptDataEscapedEndTagName(cp: number): void;
protected _stateScriptDataDoubleEscapeStart(cp: number): void;
protected _stateScriptDataDoubleEscaped(cp: number): void;
protected _stateScriptDataDoubleEscapedDash(cp: number): void;
protected _stateScriptDataDoubleEscapedDashDash(cp: number): void;
protected _stateScriptDataDoubleEscapedLessThanSign(cp: number): void;
protected _stateScriptDataDoubleEscapeEnd(cp: number): void;
protected _stateBeforeAttributeName(cp: number): void;
protected _stateAttributeName(cp: number): void;
protected _stateAfterAttributeName(cp: number): void;
protected _stateBeforeAttributeValue(cp: number): void;
protected _stateAttributeValueDoubleQuoted(cp: number): void;
protected _stateAttributeValueSingleQuoted(cp: number): void;
protected _stateAttributeValueUnquoted(cp: number): void;
protected _stateAfterAttributeValueQuoted(cp: number): void;
protected _stateSelfClosingStartTag(cp: number): void;
protected _stateBogusComment(cp: number): void;
protected _stateMarkupDeclarationOpen(cp: number): void;
protected _stateCommentStart(cp: number): void;
protected _stateCommentStartDash(cp: number): void;
protected _stateComment(cp: number): void;
protected _stateCommentLessThanSign(cp: number): void;
protected _stateCommentLessThanSignBang(cp: number): void;
protected _stateCommentLessThanSignBangDash(cp: number): void;
protected _stateCommentLessThanSignBangDashDash(cp: number): void;
protected _stateCommentEndDash(cp: number): void;
protected _stateCommentEnd(cp: number): void;
protected _stateCommentEndBang(cp: number): void;
protected _stateDoctype(cp: number): void;
protected _stateBeforeDoctypeName(cp: number): void;
protected _stateDoctypeName(cp: number): void;
protected _stateAfterDoctypeName(cp: number): void;
protected _stateAfterDoctypePublicKeyword(cp: number): void;
protected _stateBeforeDoctypePublicIdentifier(cp: number): void;
protected _stateDoctypePublicIdentifierDoubleQuoted(cp: number): void;
protected _stateDoctypePublicIdentifierSingleQuoted(cp: number): void;
protected _stateAfterDoctypePublicIdentifier(cp: number): void;
protected _stateBetweenDoctypePublicAndSystemIdentifiers(cp: number): void;
protected _stateAfterDoctypeSystemKeyword(cp: number): void;
protected _stateBeforeDoctypeSystemIdentifier(cp: number): void;
protected _stateDoctypeSystemIdentifierDoubleQuoted(cp: number): void;
protected _stateDoctypeSystemIdentifierSingleQuoted(cp: number): void;
protected _stateAfterDoctypeSystemIdentifier(cp: number): void;
protected _stateBogusDoctype(cp: number): void;
protected _stateCdataSection(cp: number): void;
protected _stateCdataSectionBracket(cp: number): void;
protected _stateCdataSectionEnd(cp: number): void;
protected _stateCharacterReference(): void;
protected _stateAmbiguousAmpersand(cp: number): void;
}
export {};

2714
node_modules/parse5/dist/cjs/tokenizer/index.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,36 @@
import { ERR, type ParserError, type ParserErrorHandler } from '../common/error-codes.js';
export declare class Preprocessor {
private handler;
html: string;
pos: number;
private lastGapPos;
private gapStack;
private skipNextNewLine;
lastChunkWritten: boolean;
endOfChunkHit: boolean;
bufferWaterline: number;
private isEol;
private lineStartPos;
droppedBufferSize: number;
line: number;
constructor(handler: {
onParseError?: ParserErrorHandler | null;
});
/** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */
get col(): number;
get offset(): number;
getError(code: ERR, cpOffset: number): ParserError;
private lastErrOffset;
private _err;
private _addGap;
private _processSurrogate;
willDropParsedChunk(): boolean;
dropParsedChunk(): void;
write(chunk: string, isLastChunk: boolean): void;
insertHtmlAtCurrentPos(chunk: string): void;
startsWith(pattern: string, caseSensitive: boolean): boolean;
peek(offset: number): number;
advance(): number;
private _checkForProblematicCharacters;
retreat(count: number): void;
}

200
node_modules/parse5/dist/cjs/tokenizer/preprocessor.js generated vendored Normal file
View File

@@ -0,0 +1,200 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Preprocessor = void 0;
const unicode_js_1 = require("../common/unicode.js");
const error_codes_js_1 = require("../common/error-codes.js");
//Const
const DEFAULT_BUFFER_WATERLINE = 1 << 16;
//Preprocessor
//NOTE: HTML input preprocessing
//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream)
class Preprocessor {
constructor(handler) {
this.handler = handler;
this.html = '';
this.pos = -1;
// NOTE: Initial `lastGapPos` is -2, to ensure `col` on initialisation is 0
this.lastGapPos = -2;
this.gapStack = [];
this.skipNextNewLine = false;
this.lastChunkWritten = false;
this.endOfChunkHit = false;
this.bufferWaterline = DEFAULT_BUFFER_WATERLINE;
this.isEol = false;
this.lineStartPos = 0;
this.droppedBufferSize = 0;
this.line = 1;
//NOTE: avoid reporting errors twice on advance/retreat
this.lastErrOffset = -1;
}
/** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */
get col() {
return this.pos - this.lineStartPos + Number(this.lastGapPos !== this.pos);
}
get offset() {
return this.droppedBufferSize + this.pos;
}
getError(code, cpOffset) {
const { line, col, offset } = this;
const startCol = col + cpOffset;
const startOffset = offset + cpOffset;
return {
code,
startLine: line,
endLine: line,
startCol,
endCol: startCol,
startOffset,
endOffset: startOffset,
};
}
_err(code) {
if (this.handler.onParseError && this.lastErrOffset !== this.offset) {
this.lastErrOffset = this.offset;
this.handler.onParseError(this.getError(code, 0));
}
}
_addGap() {
this.gapStack.push(this.lastGapPos);
this.lastGapPos = this.pos;
}
_processSurrogate(cp) {
//NOTE: try to peek a surrogate pair
if (this.pos !== this.html.length - 1) {
const nextCp = this.html.charCodeAt(this.pos + 1);
if ((0, unicode_js_1.isSurrogatePair)(nextCp)) {
//NOTE: we have a surrogate pair. Peek pair character and recalculate code point.
this.pos++;
//NOTE: add a gap that should be avoided during retreat
this._addGap();
return (0, unicode_js_1.getSurrogatePairCodePoint)(cp, nextCp);
}
}
//NOTE: we are at the end of a chunk, therefore we can't infer the surrogate pair yet.
else if (!this.lastChunkWritten) {
this.endOfChunkHit = true;
return unicode_js_1.CODE_POINTS.EOF;
}
//NOTE: isolated surrogate
this._err(error_codes_js_1.ERR.surrogateInInputStream);
return cp;
}
willDropParsedChunk() {
return this.pos > this.bufferWaterline;
}
dropParsedChunk() {
if (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;
}
}
write(chunk, isLastChunk) {
if (this.html.length > 0) {
this.html += chunk;
}
else {
this.html = chunk;
}
this.endOfChunkHit = false;
this.lastChunkWritten = isLastChunk;
}
insertHtmlAtCurrentPos(chunk) {
this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1);
this.endOfChunkHit = false;
}
startsWith(pattern, caseSensitive) {
// Check if our buffer has enough characters
if (this.pos + pattern.length > this.html.length) {
this.endOfChunkHit = !this.lastChunkWritten;
return false;
}
if (caseSensitive) {
return this.html.startsWith(pattern, this.pos);
}
for (let i = 0; i < pattern.length; i++) {
const cp = this.html.charCodeAt(this.pos + i) | 0x20;
if (cp !== pattern.charCodeAt(i)) {
return false;
}
}
return true;
}
peek(offset) {
const pos = this.pos + offset;
if (pos >= this.html.length) {
this.endOfChunkHit = !this.lastChunkWritten;
return unicode_js_1.CODE_POINTS.EOF;
}
const code = this.html.charCodeAt(pos);
return code === unicode_js_1.CODE_POINTS.CARRIAGE_RETURN ? unicode_js_1.CODE_POINTS.LINE_FEED : code;
}
advance() {
this.pos++;
//NOTE: LF should be in the last column of the line
if (this.isEol) {
this.isEol = false;
this.line++;
this.lineStartPos = this.pos;
}
if (this.pos >= this.html.length) {
this.endOfChunkHit = !this.lastChunkWritten;
return unicode_js_1.CODE_POINTS.EOF;
}
let cp = this.html.charCodeAt(this.pos);
//NOTE: all U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters
if (cp === unicode_js_1.CODE_POINTS.CARRIAGE_RETURN) {
this.isEol = true;
this.skipNextNewLine = true;
return unicode_js_1.CODE_POINTS.LINE_FEED;
}
//NOTE: any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character
//must be ignored.
if (cp === unicode_js_1.CODE_POINTS.LINE_FEED) {
this.isEol = true;
if (this.skipNextNewLine) {
// `line` will be bumped again in the recursive call.
this.line--;
this.skipNextNewLine = false;
this._addGap();
return this.advance();
}
}
this.skipNextNewLine = false;
if ((0, unicode_js_1.isSurrogate)(cp)) {
cp = this._processSurrogate(cp);
}
//OPTIMIZATION: first check if code point is in the common allowed
//range (ASCII alphanumeric, whitespaces, big chunk of BMP)
//before going into detailed performance cost validation.
const isCommonValidRange = this.handler.onParseError === null ||
(cp > 0x1f && cp < 0x7f) ||
cp === unicode_js_1.CODE_POINTS.LINE_FEED ||
cp === unicode_js_1.CODE_POINTS.CARRIAGE_RETURN ||
(cp > 0x9f && cp < 64976);
if (!isCommonValidRange) {
this._checkForProblematicCharacters(cp);
}
return cp;
}
_checkForProblematicCharacters(cp) {
if ((0, unicode_js_1.isControlCodePoint)(cp)) {
this._err(error_codes_js_1.ERR.controlCharacterInInputStream);
}
else if ((0, unicode_js_1.isUndefinedCodePoint)(cp)) {
this._err(error_codes_js_1.ERR.noncharacterInInputStream);
}
}
retreat(count) {
this.pos -= count;
while (this.pos < this.lastGapPos) {
this.lastGapPos = this.gapStack.pop();
this.pos--;
}
this.isEol = false;
}
}
exports.Preprocessor = Preprocessor;

View File

@@ -0,0 +1,84 @@
import { DOCUMENT_MODE, type NS } from '../common/html.js';
import type { Attribute, Location, ElementLocation } from '../common/token.js';
import type { TreeAdapter, TreeAdapterTypeMap } from './interface.js';
export interface Document {
/** The name of the node. */
nodeName: '#document';
/**
* Document mode.
*
* @see {@link DOCUMENT_MODE} */
mode: DOCUMENT_MODE;
/** The node's children. */
childNodes: ChildNode[];
/** Comment source code location info. Available if location info is enabled. */
sourceCodeLocation?: Location | null;
}
export interface DocumentFragment {
/** The name of the node. */
nodeName: '#document-fragment';
/** The node's children. */
childNodes: ChildNode[];
/** Comment source code location info. Available if location info is enabled. */
sourceCodeLocation?: Location | null;
}
export interface Element {
/** Element tag name. Same as {@link tagName}. */
nodeName: string;
/** Element tag name. Same as {@link nodeName}. */
tagName: string;
/** List of element attributes. */
attrs: Attribute[];
/** Element namespace. */
namespaceURI: NS;
/** Element source code location info, with attributes. Available if location info is enabled. */
sourceCodeLocation?: ElementLocation | null;
/** Parent node. */
parentNode: ParentNode | null;
/** The node's children. */
childNodes: ChildNode[];
}
export interface CommentNode {
/** The name of the node. */
nodeName: '#comment';
/** Parent node. */
parentNode: ParentNode | null;
/** Comment text. */
data: string;
/** Comment source code location info. Available if location info is enabled. */
sourceCodeLocation?: Location | null;
}
export interface TextNode {
nodeName: '#text';
/** Parent node. */
parentNode: ParentNode | null;
/** Text content. */
value: string;
/** Comment source code location info. Available if location info is enabled. */
sourceCodeLocation?: Location | null;
}
export interface Template extends Element {
nodeName: 'template';
tagName: 'template';
/** The content of a `template` tag. */
content: DocumentFragment;
}
export interface DocumentType {
/** The name of the node. */
nodeName: '#documentType';
/** Parent node. */
parentNode: ParentNode | null;
/** Document type name. */
name: string;
/** Document type public identifier. */
publicId: string;
/** Document type system identifier. */
systemId: string;
/** Comment source code location info. Available if location info is enabled. */
sourceCodeLocation?: Location | null;
}
export type ParentNode = Document | DocumentFragment | Element | Template;
export type ChildNode = Element | Template | CommentNode | TextNode | DocumentType;
export type Node = ParentNode | ChildNode;
export type DefaultTreeAdapterMap = TreeAdapterTypeMap<Node, ParentNode, ChildNode, Document, DocumentFragment, Element, CommentNode, TextNode, Template, DocumentType>;
export declare const defaultTreeAdapter: TreeAdapter<DefaultTreeAdapterMap>;

176
node_modules/parse5/dist/cjs/tree-adapters/default.js generated vendored Normal file
View File

@@ -0,0 +1,176 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.defaultTreeAdapter = void 0;
const html_js_1 = require("../common/html.js");
exports.defaultTreeAdapter = {
//Node construction
createDocument() {
return {
nodeName: '#document',
mode: html_js_1.DOCUMENT_MODE.NO_QUIRKS,
childNodes: [],
};
},
createDocumentFragment() {
return {
nodeName: '#document-fragment',
childNodes: [],
};
},
createElement(tagName, namespaceURI, attrs) {
return {
nodeName: tagName,
tagName,
attrs,
namespaceURI,
childNodes: [],
parentNode: null,
};
},
createCommentNode(data) {
return {
nodeName: '#comment',
data,
parentNode: null,
};
},
createTextNode(value) {
return {
nodeName: '#text',
value,
parentNode: null,
};
},
//Tree mutation
appendChild(parentNode, newNode) {
parentNode.childNodes.push(newNode);
newNode.parentNode = parentNode;
},
insertBefore(parentNode, newNode, referenceNode) {
const insertionIdx = parentNode.childNodes.indexOf(referenceNode);
parentNode.childNodes.splice(insertionIdx, 0, newNode);
newNode.parentNode = parentNode;
},
setTemplateContent(templateElement, contentElement) {
templateElement.content = contentElement;
},
getTemplateContent(templateElement) {
return templateElement.content;
},
setDocumentType(document, name, publicId, systemId) {
const doctypeNode = document.childNodes.find((node) => node.nodeName === '#documentType');
if (doctypeNode) {
doctypeNode.name = name;
doctypeNode.publicId = publicId;
doctypeNode.systemId = systemId;
}
else {
const node = {
nodeName: '#documentType',
name,
publicId,
systemId,
parentNode: null,
};
exports.defaultTreeAdapter.appendChild(document, node);
}
},
setDocumentMode(document, mode) {
document.mode = mode;
},
getDocumentMode(document) {
return document.mode;
},
detachNode(node) {
if (node.parentNode) {
const idx = node.parentNode.childNodes.indexOf(node);
node.parentNode.childNodes.splice(idx, 1);
node.parentNode = null;
}
},
insertText(parentNode, text) {
if (parentNode.childNodes.length > 0) {
const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1];
if (exports.defaultTreeAdapter.isTextNode(prevNode)) {
prevNode.value += text;
return;
}
}
exports.defaultTreeAdapter.appendChild(parentNode, exports.defaultTreeAdapter.createTextNode(text));
},
insertTextBefore(parentNode, text, referenceNode) {
const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];
if (prevNode && exports.defaultTreeAdapter.isTextNode(prevNode)) {
prevNode.value += text;
}
else {
exports.defaultTreeAdapter.insertBefore(parentNode, exports.defaultTreeAdapter.createTextNode(text), referenceNode);
}
},
adoptAttributes(recipient, attrs) {
const recipientAttrsMap = new Set(recipient.attrs.map((attr) => attr.name));
for (let j = 0; j < attrs.length; j++) {
if (!recipientAttrsMap.has(attrs[j].name)) {
recipient.attrs.push(attrs[j]);
}
}
},
//Tree traversing
getFirstChild(node) {
return node.childNodes[0];
},
getChildNodes(node) {
return node.childNodes;
},
getParentNode(node) {
return node.parentNode;
},
getAttrList(element) {
return element.attrs;
},
//Node data
getTagName(element) {
return element.tagName;
},
getNamespaceURI(element) {
return element.namespaceURI;
},
getTextNodeContent(textNode) {
return textNode.value;
},
getCommentNodeContent(commentNode) {
return commentNode.data;
},
getDocumentTypeNodeName(doctypeNode) {
return doctypeNode.name;
},
getDocumentTypeNodePublicId(doctypeNode) {
return doctypeNode.publicId;
},
getDocumentTypeNodeSystemId(doctypeNode) {
return doctypeNode.systemId;
},
//Node types
isTextNode(node) {
return node.nodeName === '#text';
},
isCommentNode(node) {
return node.nodeName === '#comment';
},
isDocumentTypeNode(node) {
return node.nodeName === '#documentType';
},
isElementNode(node) {
return Object.prototype.hasOwnProperty.call(node, 'tagName');
},
// Source code location
setNodeSourceCodeLocation(node, location) {
node.sourceCodeLocation = location;
},
getNodeSourceCodeLocation(node) {
return node.sourceCodeLocation;
},
updateNodeSourceCodeLocation(node, endLocation) {
node.sourceCodeLocation = Object.assign(Object.assign({}, node.sourceCodeLocation), endLocation);
},
};

View File

@@ -0,0 +1,255 @@
import type { DOCUMENT_MODE, NS } from '../common/html.js';
import type { Attribute, ElementLocation } from '../common/token.js';
export interface TreeAdapterTypeMap<Node = unknown, ParentNode = unknown, ChildNode = unknown, Document = unknown, DocumentFragment = unknown, Element = unknown, CommentNode = unknown, TextNode = unknown, Template = unknown, DocumentType = unknown> {
node: Node;
parentNode: ParentNode;
childNode: ChildNode;
document: Document;
documentFragment: DocumentFragment;
element: Element;
commentNode: CommentNode;
textNode: TextNode;
template: Template;
documentType: DocumentType;
}
/**
* Tree adapter is a set of utility functions that provides minimal required abstraction layer beetween parser and a specific AST format.
* Note that `TreeAdapter` is not designed to be a general purpose AST manipulation library. You can build such library
* on top of existing `TreeAdapter` or use one of the existing libraries from npm.
*
* @see Have a look at the default tree adapter for reference.
*/
export interface TreeAdapter<T extends TreeAdapterTypeMap = TreeAdapterTypeMap> {
/**
* Copies attributes to the given element. Only attributes that are not yet present in the element are copied.
*
* @param recipient - Element to copy attributes into.
* @param attrs - Attributes to copy.
*/
adoptAttributes(recipient: T['element'], attrs: Attribute[]): void;
/**
* Appends a child node to the given parent node.
*
* @param parentNode - Parent node.
* @param newNode - Child node.
*/
appendChild(parentNode: T['parentNode'], newNode: T['childNode']): void;
/**
* Creates a comment node.
*
* @param data - Comment text.
*/
createCommentNode(data: string): T['commentNode'];
/**
* Creates a text node.
*
* @param value - Text.
*/
createTextNode(value: string): T['textNode'];
/**
* Creates a document node.
*/
createDocument(): T['document'];
/**
* Creates a document fragment node.
*/
createDocumentFragment(): T['documentFragment'];
/**
* Creates an element node.
*
* @param tagName - Tag name of the element.
* @param namespaceURI - Namespace of the element.
* @param attrs - Attribute name-value pair array. Foreign attributes may contain `namespace` and `prefix` fields as well.
*/
createElement(tagName: string, namespaceURI: NS, attrs: Attribute[]): T['element'];
/**
* Removes a node from its parent.
*
* @param node - Node to remove.
*/
detachNode(node: T['childNode']): void;
/**
* Returns the given element's attributes in an array, in the form of name-value pairs.
* Foreign attributes may contain `namespace` and `prefix` fields as well.
*
* @param element - Element.
*/
getAttrList(element: T['element']): Attribute[];
/**
* Returns the given node's children in an array.
*
* @param node - Node.
*/
getChildNodes(node: T['parentNode']): T['childNode'][];
/**
* Returns the given comment node's content.
*
* @param commentNode - Comment node.
*/
getCommentNodeContent(commentNode: T['commentNode']): string;
/**
* Returns [document mode](https://dom.spec.whatwg.org/#concept-document-limited-quirks).
*
* @param document - Document node.
*/
getDocumentMode(document: T['document']): DOCUMENT_MODE;
/**
* Returns the given document type node's name.
*
* @param doctypeNode - Document type node.
*/
getDocumentTypeNodeName(doctypeNode: T['documentType']): string;
/**
* Returns the given document type node's public identifier.
*
* @param doctypeNode - Document type node.
*/
getDocumentTypeNodePublicId(doctypeNode: T['documentType']): string;
/**
* Returns the given document type node's system identifier.
*
* @param doctypeNode - Document type node.
*/
getDocumentTypeNodeSystemId(doctypeNode: T['documentType']): string;
/**
* Returns the first child of the given node.
*
* @param node - Node.
*/
getFirstChild(node: T['parentNode']): T['childNode'] | null;
/**
* Returns the given element's namespace.
*
* @param element - Element.
*/
getNamespaceURI(element: T['element']): NS;
/**
* Returns the given node's source code location information.
*
* @param node - Node.
*/
getNodeSourceCodeLocation(node: T['node']): ElementLocation | undefined | null;
/**
* Returns the given node's parent.
*
* @param node - Node.
*/
getParentNode(node: T['node']): T['parentNode'] | null;
/**
* Returns the given element's tag name.
*
* @param element - Element.
*/
getTagName(element: T['element']): string;
/**
* Returns the given text node's content.
*
* @param textNode - Text node.
*/
getTextNodeContent(textNode: T['textNode']): string;
/**
* Returns the `<template>` element content element.
*
* @param templateElement - `<template>` element.
*/
getTemplateContent(templateElement: T['template']): T['documentFragment'];
/**
* Inserts a child node to the given parent node before the given reference node.
*
* @param parentNode - Parent node.
* @param newNode - Child node.
* @param referenceNode - Reference node.
*/
insertBefore(parentNode: T['parentNode'], newNode: T['childNode'], referenceNode: T['childNode']): void;
/**
* Inserts text into a node. If the last child of the node is a text node, the provided text will be appended to the
* text node content. Otherwise, inserts a new text node with the given text.
*
* @param parentNode - Node to insert text into.
* @param text - Text to insert.
*/
insertText(parentNode: T['parentNode'], text: string): void;
/**
* Inserts text into a sibling node that goes before the reference node. If this sibling node is the text node,
* the provided text will be appended to the text node content. Otherwise, inserts a new sibling text node with
* the given text before the reference node.
*
* @param parentNode - Node to insert text into.
* @param text - Text to insert.
* @param referenceNode - Node to insert text before.
*/
insertTextBefore(parentNode: T['parentNode'], text: string, referenceNode: T['childNode']): void;
/**
* Determines if the given node is a comment node.
*
* @param node - Node.
*/
isCommentNode(node: T['node']): node is T['commentNode'];
/**
* Determines if the given node is a document type node.
*
* @param node - Node.
*/
isDocumentTypeNode(node: T['node']): node is T['documentType'];
/**
* Determines if the given node is an element.
*
* @param node - Node.
*/
isElementNode(node: T['node']): node is T['element'];
/**
* Determines if the given node is a text node.
*
* @param node - Node.
*/
isTextNode(node: T['node']): node is T['textNode'];
/**
* Sets the [document mode](https://dom.spec.whatwg.org/#concept-document-limited-quirks).
*
* @param document - Document node.
* @param mode - Document mode.
*/
setDocumentMode(document: T['document'], mode: DOCUMENT_MODE): void;
/**
* Sets the document type. If the `document` already contains a document type node, the `name`, `publicId` and `systemId`
* properties of this node will be updated with the provided values. Otherwise, creates a new document type node
* with the given properties and inserts it into the `document`.
*
* @param document - Document node.
* @param name - Document type name.
* @param publicId - Document type public identifier.
* @param systemId - Document type system identifier.
*/
setDocumentType(document: T['document'], name: string, publicId: string, systemId: string): void;
/**
* Attaches source code location information to the node.
*
* @param node - Node.
*/
setNodeSourceCodeLocation(node: T['node'], location: ElementLocation | null): void;
/**
* Updates the source code location information of the node.
*
* @param node - Node.
*/
updateNodeSourceCodeLocation(node: T['node'], location: Partial<ElementLocation>): void;
/**
* Sets the `<template>` element content element.
*
* @param templateElement - `<template>` element.
* @param contentElement - Content element.
*/
setTemplateContent(templateElement: T['template'], contentElement: T['documentFragment']): void;
/**
* Optional callback for elements being pushed to the stack of open elements.
*
* @param element The element being pushed to the stack of open elements.
*/
onItemPush?: (item: T['element']) => void;
/**
* Optional callback for elements being popped from the stack of open elements.
*
* @param item The element being popped.
*/
onItemPop?: (item: T['element'], newTop: T['parentNode']) => void;
}

View File

@@ -0,0 +1,2 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

4
node_modules/parse5/dist/common/doctype.d.ts generated vendored Normal file
View File

@@ -0,0 +1,4 @@
import { DOCUMENT_MODE } from './html.js';
import type { DoctypeToken } from './token.js';
export declare function isConforming(token: DoctypeToken): boolean;
export declare function getDocumentMode(token: DoctypeToken): DOCUMENT_MODE;

114
node_modules/parse5/dist/common/doctype.js generated vendored Normal file
View File

@@ -0,0 +1,114 @@
import { DOCUMENT_MODE } from './html.js';
//Const
const VALID_DOCTYPE_NAME = 'html';
const VALID_SYSTEM_ID = 'about:legacy-compat';
const QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd';
const QUIRKS_MODE_PUBLIC_ID_PREFIXES = [
'+//silmaril//dtd html pro v0r11 19970101//',
'-//as//dtd html 3.0 aswedit + extensions//',
'-//advasoft ltd//dtd html 3.0 aswedit + extensions//',
'-//ietf//dtd html 2.0 level 1//',
'-//ietf//dtd html 2.0 level 2//',
'-//ietf//dtd html 2.0 strict level 1//',
'-//ietf//dtd html 2.0 strict level 2//',
'-//ietf//dtd html 2.0 strict//',
'-//ietf//dtd html 2.0//',
'-//ietf//dtd html 2.1e//',
'-//ietf//dtd html 3.0//',
'-//ietf//dtd html 3.2 final//',
'-//ietf//dtd html 3.2//',
'-//ietf//dtd html 3//',
'-//ietf//dtd html level 0//',
'-//ietf//dtd html level 1//',
'-//ietf//dtd html level 2//',
'-//ietf//dtd html level 3//',
'-//ietf//dtd html strict level 0//',
'-//ietf//dtd html strict level 1//',
'-//ietf//dtd html strict level 2//',
'-//ietf//dtd html strict level 3//',
'-//ietf//dtd html strict//',
'-//ietf//dtd html//',
'-//metrius//dtd metrius presentational//',
'-//microsoft//dtd internet explorer 2.0 html strict//',
'-//microsoft//dtd internet explorer 2.0 html//',
'-//microsoft//dtd internet explorer 2.0 tables//',
'-//microsoft//dtd internet explorer 3.0 html strict//',
'-//microsoft//dtd internet explorer 3.0 html//',
'-//microsoft//dtd internet explorer 3.0 tables//',
'-//netscape comm. corp.//dtd html//',
'-//netscape comm. corp.//dtd strict html//',
"-//o'reilly and associates//dtd html 2.0//",
"-//o'reilly and associates//dtd html extended 1.0//",
"-//o'reilly and associates//dtd html extended relaxed 1.0//",
'-//sq//dtd html 2.0 hotmetal + extensions//',
'-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//',
'-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//',
'-//spyglass//dtd html 2.0 extended//',
'-//sun microsystems corp.//dtd hotjava html//',
'-//sun microsystems corp.//dtd hotjava strict html//',
'-//w3c//dtd html 3 1995-03-24//',
'-//w3c//dtd html 3.2 draft//',
'-//w3c//dtd html 3.2 final//',
'-//w3c//dtd html 3.2//',
'-//w3c//dtd html 3.2s draft//',
'-//w3c//dtd html 4.0 frameset//',
'-//w3c//dtd html 4.0 transitional//',
'-//w3c//dtd html experimental 19960712//',
'-//w3c//dtd html experimental 970421//',
'-//w3c//dtd w3 html//',
'-//w3o//dtd w3 html 3.0//',
'-//webtechs//dtd mozilla html 2.0//',
'-//webtechs//dtd mozilla html//',
];
const QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [
...QUIRKS_MODE_PUBLIC_ID_PREFIXES,
'-//w3c//dtd html 4.01 frameset//',
'-//w3c//dtd html 4.01 transitional//',
];
const QUIRKS_MODE_PUBLIC_IDS = new Set([
'-//w3o//dtd w3 html strict 3.0//en//',
'-/w3c/dtd html 4.0 transitional/en',
'html',
]);
const LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//w3c//dtd xhtml 1.0 frameset//', '-//w3c//dtd xhtml 1.0 transitional//'];
const LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [
...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES,
'-//w3c//dtd html 4.01 frameset//',
'-//w3c//dtd html 4.01 transitional//',
];
//Utils
function hasPrefix(publicId, prefixes) {
return prefixes.some((prefix) => publicId.startsWith(prefix));
}
//API
export function isConforming(token) {
return (token.name === VALID_DOCTYPE_NAME &&
token.publicId === null &&
(token.systemId === null || token.systemId === VALID_SYSTEM_ID));
}
export function getDocumentMode(token) {
if (token.name !== VALID_DOCTYPE_NAME) {
return DOCUMENT_MODE.QUIRKS;
}
const { systemId } = token;
if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {
return DOCUMENT_MODE.QUIRKS;
}
let { publicId } = token;
if (publicId !== null) {
publicId = publicId.toLowerCase();
if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) {
return DOCUMENT_MODE.QUIRKS;
}
let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;
if (hasPrefix(publicId, prefixes)) {
return DOCUMENT_MODE.QUIRKS;
}
prefixes =
systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;
if (hasPrefix(publicId, prefixes)) {
return DOCUMENT_MODE.LIMITED_QUIRKS;
}
}
return DOCUMENT_MODE.NO_QUIRKS;
}

67
node_modules/parse5/dist/common/error-codes.d.ts generated vendored Normal file
View File

@@ -0,0 +1,67 @@
import type { Location } from './token.js';
export interface ParserError extends Location {
code: ERR;
}
export type ParserErrorHandler = (error: ParserError) => void;
export declare enum ERR {
controlCharacterInInputStream = "control-character-in-input-stream",
noncharacterInInputStream = "noncharacter-in-input-stream",
surrogateInInputStream = "surrogate-in-input-stream",
nonVoidHtmlElementStartTagWithTrailingSolidus = "non-void-html-element-start-tag-with-trailing-solidus",
endTagWithAttributes = "end-tag-with-attributes",
endTagWithTrailingSolidus = "end-tag-with-trailing-solidus",
unexpectedSolidusInTag = "unexpected-solidus-in-tag",
unexpectedNullCharacter = "unexpected-null-character",
unexpectedQuestionMarkInsteadOfTagName = "unexpected-question-mark-instead-of-tag-name",
invalidFirstCharacterOfTagName = "invalid-first-character-of-tag-name",
unexpectedEqualsSignBeforeAttributeName = "unexpected-equals-sign-before-attribute-name",
missingEndTagName = "missing-end-tag-name",
unexpectedCharacterInAttributeName = "unexpected-character-in-attribute-name",
unknownNamedCharacterReference = "unknown-named-character-reference",
missingSemicolonAfterCharacterReference = "missing-semicolon-after-character-reference",
unexpectedCharacterAfterDoctypeSystemIdentifier = "unexpected-character-after-doctype-system-identifier",
unexpectedCharacterInUnquotedAttributeValue = "unexpected-character-in-unquoted-attribute-value",
eofBeforeTagName = "eof-before-tag-name",
eofInTag = "eof-in-tag",
missingAttributeValue = "missing-attribute-value",
missingWhitespaceBetweenAttributes = "missing-whitespace-between-attributes",
missingWhitespaceAfterDoctypePublicKeyword = "missing-whitespace-after-doctype-public-keyword",
missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers = "missing-whitespace-between-doctype-public-and-system-identifiers",
missingWhitespaceAfterDoctypeSystemKeyword = "missing-whitespace-after-doctype-system-keyword",
missingQuoteBeforeDoctypePublicIdentifier = "missing-quote-before-doctype-public-identifier",
missingQuoteBeforeDoctypeSystemIdentifier = "missing-quote-before-doctype-system-identifier",
missingDoctypePublicIdentifier = "missing-doctype-public-identifier",
missingDoctypeSystemIdentifier = "missing-doctype-system-identifier",
abruptDoctypePublicIdentifier = "abrupt-doctype-public-identifier",
abruptDoctypeSystemIdentifier = "abrupt-doctype-system-identifier",
cdataInHtmlContent = "cdata-in-html-content",
incorrectlyOpenedComment = "incorrectly-opened-comment",
eofInScriptHtmlCommentLikeText = "eof-in-script-html-comment-like-text",
eofInDoctype = "eof-in-doctype",
nestedComment = "nested-comment",
abruptClosingOfEmptyComment = "abrupt-closing-of-empty-comment",
eofInComment = "eof-in-comment",
incorrectlyClosedComment = "incorrectly-closed-comment",
eofInCdata = "eof-in-cdata",
absenceOfDigitsInNumericCharacterReference = "absence-of-digits-in-numeric-character-reference",
nullCharacterReference = "null-character-reference",
surrogateCharacterReference = "surrogate-character-reference",
characterReferenceOutsideUnicodeRange = "character-reference-outside-unicode-range",
controlCharacterReference = "control-character-reference",
noncharacterCharacterReference = "noncharacter-character-reference",
missingWhitespaceBeforeDoctypeName = "missing-whitespace-before-doctype-name",
missingDoctypeName = "missing-doctype-name",
invalidCharacterSequenceAfterDoctypeName = "invalid-character-sequence-after-doctype-name",
duplicateAttribute = "duplicate-attribute",
nonConformingDoctype = "non-conforming-doctype",
missingDoctype = "missing-doctype",
misplacedDoctype = "misplaced-doctype",
endTagWithoutMatchingOpenElement = "end-tag-without-matching-open-element",
closingOfElementWithOpenChildElements = "closing-of-element-with-open-child-elements",
disallowedContentInNoscriptInHead = "disallowed-content-in-noscript-in-head",
openElementsLeftAfterEof = "open-elements-left-after-eof",
abandonedHeadElementChild = "abandoned-head-element-child",
misplacedStartTagForHeadElement = "misplaced-start-tag-for-head-element",
nestedNoscriptInHead = "nested-noscript-in-head",
eofInElementThatCanContainOnlyText = "eof-in-element-that-can-contain-only-text"
}

63
node_modules/parse5/dist/common/error-codes.js generated vendored Normal file
View File

@@ -0,0 +1,63 @@
export var ERR;
(function (ERR) {
ERR["controlCharacterInInputStream"] = "control-character-in-input-stream";
ERR["noncharacterInInputStream"] = "noncharacter-in-input-stream";
ERR["surrogateInInputStream"] = "surrogate-in-input-stream";
ERR["nonVoidHtmlElementStartTagWithTrailingSolidus"] = "non-void-html-element-start-tag-with-trailing-solidus";
ERR["endTagWithAttributes"] = "end-tag-with-attributes";
ERR["endTagWithTrailingSolidus"] = "end-tag-with-trailing-solidus";
ERR["unexpectedSolidusInTag"] = "unexpected-solidus-in-tag";
ERR["unexpectedNullCharacter"] = "unexpected-null-character";
ERR["unexpectedQuestionMarkInsteadOfTagName"] = "unexpected-question-mark-instead-of-tag-name";
ERR["invalidFirstCharacterOfTagName"] = "invalid-first-character-of-tag-name";
ERR["unexpectedEqualsSignBeforeAttributeName"] = "unexpected-equals-sign-before-attribute-name";
ERR["missingEndTagName"] = "missing-end-tag-name";
ERR["unexpectedCharacterInAttributeName"] = "unexpected-character-in-attribute-name";
ERR["unknownNamedCharacterReference"] = "unknown-named-character-reference";
ERR["missingSemicolonAfterCharacterReference"] = "missing-semicolon-after-character-reference";
ERR["unexpectedCharacterAfterDoctypeSystemIdentifier"] = "unexpected-character-after-doctype-system-identifier";
ERR["unexpectedCharacterInUnquotedAttributeValue"] = "unexpected-character-in-unquoted-attribute-value";
ERR["eofBeforeTagName"] = "eof-before-tag-name";
ERR["eofInTag"] = "eof-in-tag";
ERR["missingAttributeValue"] = "missing-attribute-value";
ERR["missingWhitespaceBetweenAttributes"] = "missing-whitespace-between-attributes";
ERR["missingWhitespaceAfterDoctypePublicKeyword"] = "missing-whitespace-after-doctype-public-keyword";
ERR["missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers"] = "missing-whitespace-between-doctype-public-and-system-identifiers";
ERR["missingWhitespaceAfterDoctypeSystemKeyword"] = "missing-whitespace-after-doctype-system-keyword";
ERR["missingQuoteBeforeDoctypePublicIdentifier"] = "missing-quote-before-doctype-public-identifier";
ERR["missingQuoteBeforeDoctypeSystemIdentifier"] = "missing-quote-before-doctype-system-identifier";
ERR["missingDoctypePublicIdentifier"] = "missing-doctype-public-identifier";
ERR["missingDoctypeSystemIdentifier"] = "missing-doctype-system-identifier";
ERR["abruptDoctypePublicIdentifier"] = "abrupt-doctype-public-identifier";
ERR["abruptDoctypeSystemIdentifier"] = "abrupt-doctype-system-identifier";
ERR["cdataInHtmlContent"] = "cdata-in-html-content";
ERR["incorrectlyOpenedComment"] = "incorrectly-opened-comment";
ERR["eofInScriptHtmlCommentLikeText"] = "eof-in-script-html-comment-like-text";
ERR["eofInDoctype"] = "eof-in-doctype";
ERR["nestedComment"] = "nested-comment";
ERR["abruptClosingOfEmptyComment"] = "abrupt-closing-of-empty-comment";
ERR["eofInComment"] = "eof-in-comment";
ERR["incorrectlyClosedComment"] = "incorrectly-closed-comment";
ERR["eofInCdata"] = "eof-in-cdata";
ERR["absenceOfDigitsInNumericCharacterReference"] = "absence-of-digits-in-numeric-character-reference";
ERR["nullCharacterReference"] = "null-character-reference";
ERR["surrogateCharacterReference"] = "surrogate-character-reference";
ERR["characterReferenceOutsideUnicodeRange"] = "character-reference-outside-unicode-range";
ERR["controlCharacterReference"] = "control-character-reference";
ERR["noncharacterCharacterReference"] = "noncharacter-character-reference";
ERR["missingWhitespaceBeforeDoctypeName"] = "missing-whitespace-before-doctype-name";
ERR["missingDoctypeName"] = "missing-doctype-name";
ERR["invalidCharacterSequenceAfterDoctypeName"] = "invalid-character-sequence-after-doctype-name";
ERR["duplicateAttribute"] = "duplicate-attribute";
ERR["nonConformingDoctype"] = "non-conforming-doctype";
ERR["missingDoctype"] = "missing-doctype";
ERR["misplacedDoctype"] = "misplaced-doctype";
ERR["endTagWithoutMatchingOpenElement"] = "end-tag-without-matching-open-element";
ERR["closingOfElementWithOpenChildElements"] = "closing-of-element-with-open-child-elements";
ERR["disallowedContentInNoscriptInHead"] = "disallowed-content-in-noscript-in-head";
ERR["openElementsLeftAfterEof"] = "open-elements-left-after-eof";
ERR["abandonedHeadElementChild"] = "abandoned-head-element-child";
ERR["misplacedStartTagForHeadElement"] = "misplaced-start-tag-for-head-element";
ERR["nestedNoscriptInHead"] = "nested-noscript-in-head";
ERR["eofInElementThatCanContainOnlyText"] = "eof-in-element-that-can-contain-only-text";
})(ERR || (ERR = {}));

9
node_modules/parse5/dist/common/foreign-content.d.ts generated vendored Normal file
View File

@@ -0,0 +1,9 @@
import { TAG_ID as $, NS } from './html.js';
import type { TagToken, Attribute } from './token.js';
export declare const SVG_TAG_NAMES_ADJUSTMENT_MAP: Map<string, string>;
export declare function causesExit(startTagToken: TagToken): boolean;
export declare function adjustTokenMathMLAttrs(token: TagToken): void;
export declare function adjustTokenSVGAttrs(token: TagToken): void;
export declare function adjustTokenXMLAttrs(token: TagToken): void;
export declare function adjustTokenSVGTagName(token: TagToken): void;
export declare function isIntegrationPoint(tn: $, ns: NS, attrs: Attribute[], foreignNS?: NS): boolean;

228
node_modules/parse5/dist/common/foreign-content.js generated vendored Normal file
View File

@@ -0,0 +1,228 @@
import { TAG_ID as $, NS, ATTRS, getTagID } from './html.js';
//MIME types
const MIME_TYPES = {
TEXT_HTML: 'text/html',
APPLICATION_XML: 'application/xhtml+xml',
};
//Attributes
const DEFINITION_URL_ATTR = 'definitionurl';
const ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL';
const SVG_ATTRS_ADJUSTMENT_MAP = new Map([
'attributeName',
'attributeType',
'baseFrequency',
'baseProfile',
'calcMode',
'clipPathUnits',
'diffuseConstant',
'edgeMode',
'filterUnits',
'glyphRef',
'gradientTransform',
'gradientUnits',
'kernelMatrix',
'kernelUnitLength',
'keyPoints',
'keySplines',
'keyTimes',
'lengthAdjust',
'limitingConeAngle',
'markerHeight',
'markerUnits',
'markerWidth',
'maskContentUnits',
'maskUnits',
'numOctaves',
'pathLength',
'patternContentUnits',
'patternTransform',
'patternUnits',
'pointsAtX',
'pointsAtY',
'pointsAtZ',
'preserveAlpha',
'preserveAspectRatio',
'primitiveUnits',
'refX',
'refY',
'repeatCount',
'repeatDur',
'requiredExtensions',
'requiredFeatures',
'specularConstant',
'specularExponent',
'spreadMethod',
'startOffset',
'stdDeviation',
'stitchTiles',
'surfaceScale',
'systemLanguage',
'tableValues',
'targetX',
'targetY',
'textLength',
'viewBox',
'viewTarget',
'xChannelSelector',
'yChannelSelector',
'zoomAndPan',
].map((attr) => [attr.toLowerCase(), attr]));
const XML_ATTRS_ADJUSTMENT_MAP = new Map([
['xlink:actuate', { prefix: 'xlink', name: 'actuate', namespace: NS.XLINK }],
['xlink:arcrole', { prefix: 'xlink', name: 'arcrole', namespace: NS.XLINK }],
['xlink:href', { prefix: 'xlink', name: 'href', namespace: NS.XLINK }],
['xlink:role', { prefix: 'xlink', name: 'role', namespace: NS.XLINK }],
['xlink:show', { prefix: 'xlink', name: 'show', namespace: NS.XLINK }],
['xlink:title', { prefix: 'xlink', name: 'title', namespace: NS.XLINK }],
['xlink:type', { prefix: 'xlink', name: 'type', namespace: NS.XLINK }],
['xml:lang', { prefix: 'xml', name: 'lang', namespace: NS.XML }],
['xml:space', { prefix: 'xml', name: 'space', namespace: NS.XML }],
['xmlns', { prefix: '', name: 'xmlns', namespace: NS.XMLNS }],
['xmlns:xlink', { prefix: 'xmlns', name: 'xlink', namespace: NS.XMLNS }],
]);
//SVG tag names adjustment map
export const SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([
'altGlyph',
'altGlyphDef',
'altGlyphItem',
'animateColor',
'animateMotion',
'animateTransform',
'clipPath',
'feBlend',
'feColorMatrix',
'feComponentTransfer',
'feComposite',
'feConvolveMatrix',
'feDiffuseLighting',
'feDisplacementMap',
'feDistantLight',
'feFlood',
'feFuncA',
'feFuncB',
'feFuncG',
'feFuncR',
'feGaussianBlur',
'feImage',
'feMerge',
'feMergeNode',
'feMorphology',
'feOffset',
'fePointLight',
'feSpecularLighting',
'feSpotLight',
'feTile',
'feTurbulence',
'foreignObject',
'glyphRef',
'linearGradient',
'radialGradient',
'textPath',
].map((tn) => [tn.toLowerCase(), tn]));
//Tags that causes exit from foreign content
const EXITS_FOREIGN_CONTENT = new Set([
$.B,
$.BIG,
$.BLOCKQUOTE,
$.BODY,
$.BR,
$.CENTER,
$.CODE,
$.DD,
$.DIV,
$.DL,
$.DT,
$.EM,
$.EMBED,
$.H1,
$.H2,
$.H3,
$.H4,
$.H5,
$.H6,
$.HEAD,
$.HR,
$.I,
$.IMG,
$.LI,
$.LISTING,
$.MENU,
$.META,
$.NOBR,
$.OL,
$.P,
$.PRE,
$.RUBY,
$.S,
$.SMALL,
$.SPAN,
$.STRONG,
$.STRIKE,
$.SUB,
$.SUP,
$.TABLE,
$.TT,
$.U,
$.UL,
$.VAR,
]);
//Check exit from foreign content
export function causesExit(startTagToken) {
const tn = startTagToken.tagID;
const isFontWithAttrs = tn === $.FONT &&
startTagToken.attrs.some(({ name }) => name === ATTRS.COLOR || name === ATTRS.SIZE || name === ATTRS.FACE);
return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn);
}
//Token adjustments
export function adjustTokenMathMLAttrs(token) {
for (let i = 0; i < token.attrs.length; i++) {
if (token.attrs[i].name === DEFINITION_URL_ATTR) {
token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR;
break;
}
}
}
export function adjustTokenSVGAttrs(token) {
for (let i = 0; i < token.attrs.length; i++) {
const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);
if (adjustedAttrName != null) {
token.attrs[i].name = adjustedAttrName;
}
}
}
export function adjustTokenXMLAttrs(token) {
for (let i = 0; i < token.attrs.length; i++) {
const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);
if (adjustedAttrEntry) {
token.attrs[i].prefix = adjustedAttrEntry.prefix;
token.attrs[i].name = adjustedAttrEntry.name;
token.attrs[i].namespace = adjustedAttrEntry.namespace;
}
}
}
export function adjustTokenSVGTagName(token) {
const adjustedTagName = SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName);
if (adjustedTagName != null) {
token.tagName = adjustedTagName;
token.tagID = getTagID(token.tagName);
}
}
//Integration points
function isMathMLTextIntegrationPoint(tn, ns) {
return ns === NS.MATHML && (tn === $.MI || tn === $.MO || tn === $.MN || tn === $.MS || tn === $.MTEXT);
}
function isHtmlIntegrationPoint(tn, ns, attrs) {
if (ns === NS.MATHML && tn === $.ANNOTATION_XML) {
for (let i = 0; i < attrs.length; i++) {
if (attrs[i].name === ATTRS.ENCODING) {
const value = attrs[i].value.toLowerCase();
return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;
}
}
}
return ns === NS.SVG && (tn === $.FOREIGN_OBJECT || tn === $.DESC || tn === $.TITLE);
}
export function isIntegrationPoint(tn, ns, attrs, foreignNS) {
return (((!foreignNS || foreignNS === NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) ||
((!foreignNS || foreignNS === NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns)));
}

289
node_modules/parse5/dist/common/html.d.ts generated vendored Normal file
View File

@@ -0,0 +1,289 @@
/** All valid namespaces in HTML. */
export declare enum NS {
HTML = "http://www.w3.org/1999/xhtml",
MATHML = "http://www.w3.org/1998/Math/MathML",
SVG = "http://www.w3.org/2000/svg",
XLINK = "http://www.w3.org/1999/xlink",
XML = "http://www.w3.org/XML/1998/namespace",
XMLNS = "http://www.w3.org/2000/xmlns/"
}
export declare enum ATTRS {
TYPE = "type",
ACTION = "action",
ENCODING = "encoding",
PROMPT = "prompt",
NAME = "name",
COLOR = "color",
FACE = "face",
SIZE = "size"
}
/**
* The mode of the document.
*
* @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks}
*/
export declare enum DOCUMENT_MODE {
NO_QUIRKS = "no-quirks",
QUIRKS = "quirks",
LIMITED_QUIRKS = "limited-quirks"
}
export declare enum TAG_NAMES {
A = "a",
ADDRESS = "address",
ANNOTATION_XML = "annotation-xml",
APPLET = "applet",
AREA = "area",
ARTICLE = "article",
ASIDE = "aside",
B = "b",
BASE = "base",
BASEFONT = "basefont",
BGSOUND = "bgsound",
BIG = "big",
BLOCKQUOTE = "blockquote",
BODY = "body",
BR = "br",
BUTTON = "button",
CAPTION = "caption",
CENTER = "center",
CODE = "code",
COL = "col",
COLGROUP = "colgroup",
DD = "dd",
DESC = "desc",
DETAILS = "details",
DIALOG = "dialog",
DIR = "dir",
DIV = "div",
DL = "dl",
DT = "dt",
EM = "em",
EMBED = "embed",
FIELDSET = "fieldset",
FIGCAPTION = "figcaption",
FIGURE = "figure",
FONT = "font",
FOOTER = "footer",
FOREIGN_OBJECT = "foreignObject",
FORM = "form",
FRAME = "frame",
FRAMESET = "frameset",
H1 = "h1",
H2 = "h2",
H3 = "h3",
H4 = "h4",
H5 = "h5",
H6 = "h6",
HEAD = "head",
HEADER = "header",
HGROUP = "hgroup",
HR = "hr",
HTML = "html",
I = "i",
IMG = "img",
IMAGE = "image",
INPUT = "input",
IFRAME = "iframe",
KEYGEN = "keygen",
LABEL = "label",
LI = "li",
LINK = "link",
LISTING = "listing",
MAIN = "main",
MALIGNMARK = "malignmark",
MARQUEE = "marquee",
MATH = "math",
MENU = "menu",
META = "meta",
MGLYPH = "mglyph",
MI = "mi",
MO = "mo",
MN = "mn",
MS = "ms",
MTEXT = "mtext",
NAV = "nav",
NOBR = "nobr",
NOFRAMES = "noframes",
NOEMBED = "noembed",
NOSCRIPT = "noscript",
OBJECT = "object",
OL = "ol",
OPTGROUP = "optgroup",
OPTION = "option",
P = "p",
PARAM = "param",
PLAINTEXT = "plaintext",
PRE = "pre",
RB = "rb",
RP = "rp",
RT = "rt",
RTC = "rtc",
RUBY = "ruby",
S = "s",
SCRIPT = "script",
SEARCH = "search",
SECTION = "section",
SELECT = "select",
SOURCE = "source",
SMALL = "small",
SPAN = "span",
STRIKE = "strike",
STRONG = "strong",
STYLE = "style",
SUB = "sub",
SUMMARY = "summary",
SUP = "sup",
TABLE = "table",
TBODY = "tbody",
TEMPLATE = "template",
TEXTAREA = "textarea",
TFOOT = "tfoot",
TD = "td",
TH = "th",
THEAD = "thead",
TITLE = "title",
TR = "tr",
TRACK = "track",
TT = "tt",
U = "u",
UL = "ul",
SVG = "svg",
VAR = "var",
WBR = "wbr",
XMP = "xmp"
}
/**
* Tag IDs are numeric IDs for known tag names.
*
* We use tag IDs to improve the performance of tag name comparisons.
*/
export declare enum TAG_ID {
UNKNOWN = 0,
A = 1,
ADDRESS = 2,
ANNOTATION_XML = 3,
APPLET = 4,
AREA = 5,
ARTICLE = 6,
ASIDE = 7,
B = 8,
BASE = 9,
BASEFONT = 10,
BGSOUND = 11,
BIG = 12,
BLOCKQUOTE = 13,
BODY = 14,
BR = 15,
BUTTON = 16,
CAPTION = 17,
CENTER = 18,
CODE = 19,
COL = 20,
COLGROUP = 21,
DD = 22,
DESC = 23,
DETAILS = 24,
DIALOG = 25,
DIR = 26,
DIV = 27,
DL = 28,
DT = 29,
EM = 30,
EMBED = 31,
FIELDSET = 32,
FIGCAPTION = 33,
FIGURE = 34,
FONT = 35,
FOOTER = 36,
FOREIGN_OBJECT = 37,
FORM = 38,
FRAME = 39,
FRAMESET = 40,
H1 = 41,
H2 = 42,
H3 = 43,
H4 = 44,
H5 = 45,
H6 = 46,
HEAD = 47,
HEADER = 48,
HGROUP = 49,
HR = 50,
HTML = 51,
I = 52,
IMG = 53,
IMAGE = 54,
INPUT = 55,
IFRAME = 56,
KEYGEN = 57,
LABEL = 58,
LI = 59,
LINK = 60,
LISTING = 61,
MAIN = 62,
MALIGNMARK = 63,
MARQUEE = 64,
MATH = 65,
MENU = 66,
META = 67,
MGLYPH = 68,
MI = 69,
MO = 70,
MN = 71,
MS = 72,
MTEXT = 73,
NAV = 74,
NOBR = 75,
NOFRAMES = 76,
NOEMBED = 77,
NOSCRIPT = 78,
OBJECT = 79,
OL = 80,
OPTGROUP = 81,
OPTION = 82,
P = 83,
PARAM = 84,
PLAINTEXT = 85,
PRE = 86,
RB = 87,
RP = 88,
RT = 89,
RTC = 90,
RUBY = 91,
S = 92,
SCRIPT = 93,
SEARCH = 94,
SECTION = 95,
SELECT = 96,
SOURCE = 97,
SMALL = 98,
SPAN = 99,
STRIKE = 100,
STRONG = 101,
STYLE = 102,
SUB = 103,
SUMMARY = 104,
SUP = 105,
TABLE = 106,
TBODY = 107,
TEMPLATE = 108,
TEXTAREA = 109,
TFOOT = 110,
TD = 111,
TH = 112,
THEAD = 113,
TITLE = 114,
TR = 115,
TRACK = 116,
TT = 117,
U = 118,
UL = 119,
SVG = 120,
VAR = 121,
WBR = 122,
XMP = 123
}
export declare function getTagID(tagName: string): TAG_ID;
export declare const SPECIAL_ELEMENTS: Record<NS, Set<TAG_ID>>;
export declare const NUMBERED_HEADERS: Set<TAG_ID>;
export declare function hasUnescapedText(tn: string, scriptingEnabled: boolean): boolean;

523
node_modules/parse5/dist/common/html.js generated vendored Normal file
View File

@@ -0,0 +1,523 @@
/** All valid namespaces in HTML. */
export var NS;
(function (NS) {
NS["HTML"] = "http://www.w3.org/1999/xhtml";
NS["MATHML"] = "http://www.w3.org/1998/Math/MathML";
NS["SVG"] = "http://www.w3.org/2000/svg";
NS["XLINK"] = "http://www.w3.org/1999/xlink";
NS["XML"] = "http://www.w3.org/XML/1998/namespace";
NS["XMLNS"] = "http://www.w3.org/2000/xmlns/";
})(NS || (NS = {}));
export var ATTRS;
(function (ATTRS) {
ATTRS["TYPE"] = "type";
ATTRS["ACTION"] = "action";
ATTRS["ENCODING"] = "encoding";
ATTRS["PROMPT"] = "prompt";
ATTRS["NAME"] = "name";
ATTRS["COLOR"] = "color";
ATTRS["FACE"] = "face";
ATTRS["SIZE"] = "size";
})(ATTRS || (ATTRS = {}));
/**
* The mode of the document.
*
* @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks}
*/
export var DOCUMENT_MODE;
(function (DOCUMENT_MODE) {
DOCUMENT_MODE["NO_QUIRKS"] = "no-quirks";
DOCUMENT_MODE["QUIRKS"] = "quirks";
DOCUMENT_MODE["LIMITED_QUIRKS"] = "limited-quirks";
})(DOCUMENT_MODE || (DOCUMENT_MODE = {}));
export var TAG_NAMES;
(function (TAG_NAMES) {
TAG_NAMES["A"] = "a";
TAG_NAMES["ADDRESS"] = "address";
TAG_NAMES["ANNOTATION_XML"] = "annotation-xml";
TAG_NAMES["APPLET"] = "applet";
TAG_NAMES["AREA"] = "area";
TAG_NAMES["ARTICLE"] = "article";
TAG_NAMES["ASIDE"] = "aside";
TAG_NAMES["B"] = "b";
TAG_NAMES["BASE"] = "base";
TAG_NAMES["BASEFONT"] = "basefont";
TAG_NAMES["BGSOUND"] = "bgsound";
TAG_NAMES["BIG"] = "big";
TAG_NAMES["BLOCKQUOTE"] = "blockquote";
TAG_NAMES["BODY"] = "body";
TAG_NAMES["BR"] = "br";
TAG_NAMES["BUTTON"] = "button";
TAG_NAMES["CAPTION"] = "caption";
TAG_NAMES["CENTER"] = "center";
TAG_NAMES["CODE"] = "code";
TAG_NAMES["COL"] = "col";
TAG_NAMES["COLGROUP"] = "colgroup";
TAG_NAMES["DD"] = "dd";
TAG_NAMES["DESC"] = "desc";
TAG_NAMES["DETAILS"] = "details";
TAG_NAMES["DIALOG"] = "dialog";
TAG_NAMES["DIR"] = "dir";
TAG_NAMES["DIV"] = "div";
TAG_NAMES["DL"] = "dl";
TAG_NAMES["DT"] = "dt";
TAG_NAMES["EM"] = "em";
TAG_NAMES["EMBED"] = "embed";
TAG_NAMES["FIELDSET"] = "fieldset";
TAG_NAMES["FIGCAPTION"] = "figcaption";
TAG_NAMES["FIGURE"] = "figure";
TAG_NAMES["FONT"] = "font";
TAG_NAMES["FOOTER"] = "footer";
TAG_NAMES["FOREIGN_OBJECT"] = "foreignObject";
TAG_NAMES["FORM"] = "form";
TAG_NAMES["FRAME"] = "frame";
TAG_NAMES["FRAMESET"] = "frameset";
TAG_NAMES["H1"] = "h1";
TAG_NAMES["H2"] = "h2";
TAG_NAMES["H3"] = "h3";
TAG_NAMES["H4"] = "h4";
TAG_NAMES["H5"] = "h5";
TAG_NAMES["H6"] = "h6";
TAG_NAMES["HEAD"] = "head";
TAG_NAMES["HEADER"] = "header";
TAG_NAMES["HGROUP"] = "hgroup";
TAG_NAMES["HR"] = "hr";
TAG_NAMES["HTML"] = "html";
TAG_NAMES["I"] = "i";
TAG_NAMES["IMG"] = "img";
TAG_NAMES["IMAGE"] = "image";
TAG_NAMES["INPUT"] = "input";
TAG_NAMES["IFRAME"] = "iframe";
TAG_NAMES["KEYGEN"] = "keygen";
TAG_NAMES["LABEL"] = "label";
TAG_NAMES["LI"] = "li";
TAG_NAMES["LINK"] = "link";
TAG_NAMES["LISTING"] = "listing";
TAG_NAMES["MAIN"] = "main";
TAG_NAMES["MALIGNMARK"] = "malignmark";
TAG_NAMES["MARQUEE"] = "marquee";
TAG_NAMES["MATH"] = "math";
TAG_NAMES["MENU"] = "menu";
TAG_NAMES["META"] = "meta";
TAG_NAMES["MGLYPH"] = "mglyph";
TAG_NAMES["MI"] = "mi";
TAG_NAMES["MO"] = "mo";
TAG_NAMES["MN"] = "mn";
TAG_NAMES["MS"] = "ms";
TAG_NAMES["MTEXT"] = "mtext";
TAG_NAMES["NAV"] = "nav";
TAG_NAMES["NOBR"] = "nobr";
TAG_NAMES["NOFRAMES"] = "noframes";
TAG_NAMES["NOEMBED"] = "noembed";
TAG_NAMES["NOSCRIPT"] = "noscript";
TAG_NAMES["OBJECT"] = "object";
TAG_NAMES["OL"] = "ol";
TAG_NAMES["OPTGROUP"] = "optgroup";
TAG_NAMES["OPTION"] = "option";
TAG_NAMES["P"] = "p";
TAG_NAMES["PARAM"] = "param";
TAG_NAMES["PLAINTEXT"] = "plaintext";
TAG_NAMES["PRE"] = "pre";
TAG_NAMES["RB"] = "rb";
TAG_NAMES["RP"] = "rp";
TAG_NAMES["RT"] = "rt";
TAG_NAMES["RTC"] = "rtc";
TAG_NAMES["RUBY"] = "ruby";
TAG_NAMES["S"] = "s";
TAG_NAMES["SCRIPT"] = "script";
TAG_NAMES["SEARCH"] = "search";
TAG_NAMES["SECTION"] = "section";
TAG_NAMES["SELECT"] = "select";
TAG_NAMES["SOURCE"] = "source";
TAG_NAMES["SMALL"] = "small";
TAG_NAMES["SPAN"] = "span";
TAG_NAMES["STRIKE"] = "strike";
TAG_NAMES["STRONG"] = "strong";
TAG_NAMES["STYLE"] = "style";
TAG_NAMES["SUB"] = "sub";
TAG_NAMES["SUMMARY"] = "summary";
TAG_NAMES["SUP"] = "sup";
TAG_NAMES["TABLE"] = "table";
TAG_NAMES["TBODY"] = "tbody";
TAG_NAMES["TEMPLATE"] = "template";
TAG_NAMES["TEXTAREA"] = "textarea";
TAG_NAMES["TFOOT"] = "tfoot";
TAG_NAMES["TD"] = "td";
TAG_NAMES["TH"] = "th";
TAG_NAMES["THEAD"] = "thead";
TAG_NAMES["TITLE"] = "title";
TAG_NAMES["TR"] = "tr";
TAG_NAMES["TRACK"] = "track";
TAG_NAMES["TT"] = "tt";
TAG_NAMES["U"] = "u";
TAG_NAMES["UL"] = "ul";
TAG_NAMES["SVG"] = "svg";
TAG_NAMES["VAR"] = "var";
TAG_NAMES["WBR"] = "wbr";
TAG_NAMES["XMP"] = "xmp";
})(TAG_NAMES || (TAG_NAMES = {}));
/**
* Tag IDs are numeric IDs for known tag names.
*
* We use tag IDs to improve the performance of tag name comparisons.
*/
export var TAG_ID;
(function (TAG_ID) {
TAG_ID[TAG_ID["UNKNOWN"] = 0] = "UNKNOWN";
TAG_ID[TAG_ID["A"] = 1] = "A";
TAG_ID[TAG_ID["ADDRESS"] = 2] = "ADDRESS";
TAG_ID[TAG_ID["ANNOTATION_XML"] = 3] = "ANNOTATION_XML";
TAG_ID[TAG_ID["APPLET"] = 4] = "APPLET";
TAG_ID[TAG_ID["AREA"] = 5] = "AREA";
TAG_ID[TAG_ID["ARTICLE"] = 6] = "ARTICLE";
TAG_ID[TAG_ID["ASIDE"] = 7] = "ASIDE";
TAG_ID[TAG_ID["B"] = 8] = "B";
TAG_ID[TAG_ID["BASE"] = 9] = "BASE";
TAG_ID[TAG_ID["BASEFONT"] = 10] = "BASEFONT";
TAG_ID[TAG_ID["BGSOUND"] = 11] = "BGSOUND";
TAG_ID[TAG_ID["BIG"] = 12] = "BIG";
TAG_ID[TAG_ID["BLOCKQUOTE"] = 13] = "BLOCKQUOTE";
TAG_ID[TAG_ID["BODY"] = 14] = "BODY";
TAG_ID[TAG_ID["BR"] = 15] = "BR";
TAG_ID[TAG_ID["BUTTON"] = 16] = "BUTTON";
TAG_ID[TAG_ID["CAPTION"] = 17] = "CAPTION";
TAG_ID[TAG_ID["CENTER"] = 18] = "CENTER";
TAG_ID[TAG_ID["CODE"] = 19] = "CODE";
TAG_ID[TAG_ID["COL"] = 20] = "COL";
TAG_ID[TAG_ID["COLGROUP"] = 21] = "COLGROUP";
TAG_ID[TAG_ID["DD"] = 22] = "DD";
TAG_ID[TAG_ID["DESC"] = 23] = "DESC";
TAG_ID[TAG_ID["DETAILS"] = 24] = "DETAILS";
TAG_ID[TAG_ID["DIALOG"] = 25] = "DIALOG";
TAG_ID[TAG_ID["DIR"] = 26] = "DIR";
TAG_ID[TAG_ID["DIV"] = 27] = "DIV";
TAG_ID[TAG_ID["DL"] = 28] = "DL";
TAG_ID[TAG_ID["DT"] = 29] = "DT";
TAG_ID[TAG_ID["EM"] = 30] = "EM";
TAG_ID[TAG_ID["EMBED"] = 31] = "EMBED";
TAG_ID[TAG_ID["FIELDSET"] = 32] = "FIELDSET";
TAG_ID[TAG_ID["FIGCAPTION"] = 33] = "FIGCAPTION";
TAG_ID[TAG_ID["FIGURE"] = 34] = "FIGURE";
TAG_ID[TAG_ID["FONT"] = 35] = "FONT";
TAG_ID[TAG_ID["FOOTER"] = 36] = "FOOTER";
TAG_ID[TAG_ID["FOREIGN_OBJECT"] = 37] = "FOREIGN_OBJECT";
TAG_ID[TAG_ID["FORM"] = 38] = "FORM";
TAG_ID[TAG_ID["FRAME"] = 39] = "FRAME";
TAG_ID[TAG_ID["FRAMESET"] = 40] = "FRAMESET";
TAG_ID[TAG_ID["H1"] = 41] = "H1";
TAG_ID[TAG_ID["H2"] = 42] = "H2";
TAG_ID[TAG_ID["H3"] = 43] = "H3";
TAG_ID[TAG_ID["H4"] = 44] = "H4";
TAG_ID[TAG_ID["H5"] = 45] = "H5";
TAG_ID[TAG_ID["H6"] = 46] = "H6";
TAG_ID[TAG_ID["HEAD"] = 47] = "HEAD";
TAG_ID[TAG_ID["HEADER"] = 48] = "HEADER";
TAG_ID[TAG_ID["HGROUP"] = 49] = "HGROUP";
TAG_ID[TAG_ID["HR"] = 50] = "HR";
TAG_ID[TAG_ID["HTML"] = 51] = "HTML";
TAG_ID[TAG_ID["I"] = 52] = "I";
TAG_ID[TAG_ID["IMG"] = 53] = "IMG";
TAG_ID[TAG_ID["IMAGE"] = 54] = "IMAGE";
TAG_ID[TAG_ID["INPUT"] = 55] = "INPUT";
TAG_ID[TAG_ID["IFRAME"] = 56] = "IFRAME";
TAG_ID[TAG_ID["KEYGEN"] = 57] = "KEYGEN";
TAG_ID[TAG_ID["LABEL"] = 58] = "LABEL";
TAG_ID[TAG_ID["LI"] = 59] = "LI";
TAG_ID[TAG_ID["LINK"] = 60] = "LINK";
TAG_ID[TAG_ID["LISTING"] = 61] = "LISTING";
TAG_ID[TAG_ID["MAIN"] = 62] = "MAIN";
TAG_ID[TAG_ID["MALIGNMARK"] = 63] = "MALIGNMARK";
TAG_ID[TAG_ID["MARQUEE"] = 64] = "MARQUEE";
TAG_ID[TAG_ID["MATH"] = 65] = "MATH";
TAG_ID[TAG_ID["MENU"] = 66] = "MENU";
TAG_ID[TAG_ID["META"] = 67] = "META";
TAG_ID[TAG_ID["MGLYPH"] = 68] = "MGLYPH";
TAG_ID[TAG_ID["MI"] = 69] = "MI";
TAG_ID[TAG_ID["MO"] = 70] = "MO";
TAG_ID[TAG_ID["MN"] = 71] = "MN";
TAG_ID[TAG_ID["MS"] = 72] = "MS";
TAG_ID[TAG_ID["MTEXT"] = 73] = "MTEXT";
TAG_ID[TAG_ID["NAV"] = 74] = "NAV";
TAG_ID[TAG_ID["NOBR"] = 75] = "NOBR";
TAG_ID[TAG_ID["NOFRAMES"] = 76] = "NOFRAMES";
TAG_ID[TAG_ID["NOEMBED"] = 77] = "NOEMBED";
TAG_ID[TAG_ID["NOSCRIPT"] = 78] = "NOSCRIPT";
TAG_ID[TAG_ID["OBJECT"] = 79] = "OBJECT";
TAG_ID[TAG_ID["OL"] = 80] = "OL";
TAG_ID[TAG_ID["OPTGROUP"] = 81] = "OPTGROUP";
TAG_ID[TAG_ID["OPTION"] = 82] = "OPTION";
TAG_ID[TAG_ID["P"] = 83] = "P";
TAG_ID[TAG_ID["PARAM"] = 84] = "PARAM";
TAG_ID[TAG_ID["PLAINTEXT"] = 85] = "PLAINTEXT";
TAG_ID[TAG_ID["PRE"] = 86] = "PRE";
TAG_ID[TAG_ID["RB"] = 87] = "RB";
TAG_ID[TAG_ID["RP"] = 88] = "RP";
TAG_ID[TAG_ID["RT"] = 89] = "RT";
TAG_ID[TAG_ID["RTC"] = 90] = "RTC";
TAG_ID[TAG_ID["RUBY"] = 91] = "RUBY";
TAG_ID[TAG_ID["S"] = 92] = "S";
TAG_ID[TAG_ID["SCRIPT"] = 93] = "SCRIPT";
TAG_ID[TAG_ID["SEARCH"] = 94] = "SEARCH";
TAG_ID[TAG_ID["SECTION"] = 95] = "SECTION";
TAG_ID[TAG_ID["SELECT"] = 96] = "SELECT";
TAG_ID[TAG_ID["SOURCE"] = 97] = "SOURCE";
TAG_ID[TAG_ID["SMALL"] = 98] = "SMALL";
TAG_ID[TAG_ID["SPAN"] = 99] = "SPAN";
TAG_ID[TAG_ID["STRIKE"] = 100] = "STRIKE";
TAG_ID[TAG_ID["STRONG"] = 101] = "STRONG";
TAG_ID[TAG_ID["STYLE"] = 102] = "STYLE";
TAG_ID[TAG_ID["SUB"] = 103] = "SUB";
TAG_ID[TAG_ID["SUMMARY"] = 104] = "SUMMARY";
TAG_ID[TAG_ID["SUP"] = 105] = "SUP";
TAG_ID[TAG_ID["TABLE"] = 106] = "TABLE";
TAG_ID[TAG_ID["TBODY"] = 107] = "TBODY";
TAG_ID[TAG_ID["TEMPLATE"] = 108] = "TEMPLATE";
TAG_ID[TAG_ID["TEXTAREA"] = 109] = "TEXTAREA";
TAG_ID[TAG_ID["TFOOT"] = 110] = "TFOOT";
TAG_ID[TAG_ID["TD"] = 111] = "TD";
TAG_ID[TAG_ID["TH"] = 112] = "TH";
TAG_ID[TAG_ID["THEAD"] = 113] = "THEAD";
TAG_ID[TAG_ID["TITLE"] = 114] = "TITLE";
TAG_ID[TAG_ID["TR"] = 115] = "TR";
TAG_ID[TAG_ID["TRACK"] = 116] = "TRACK";
TAG_ID[TAG_ID["TT"] = 117] = "TT";
TAG_ID[TAG_ID["U"] = 118] = "U";
TAG_ID[TAG_ID["UL"] = 119] = "UL";
TAG_ID[TAG_ID["SVG"] = 120] = "SVG";
TAG_ID[TAG_ID["VAR"] = 121] = "VAR";
TAG_ID[TAG_ID["WBR"] = 122] = "WBR";
TAG_ID[TAG_ID["XMP"] = 123] = "XMP";
})(TAG_ID || (TAG_ID = {}));
const TAG_NAME_TO_ID = new Map([
[TAG_NAMES.A, TAG_ID.A],
[TAG_NAMES.ADDRESS, TAG_ID.ADDRESS],
[TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML],
[TAG_NAMES.APPLET, TAG_ID.APPLET],
[TAG_NAMES.AREA, TAG_ID.AREA],
[TAG_NAMES.ARTICLE, TAG_ID.ARTICLE],
[TAG_NAMES.ASIDE, TAG_ID.ASIDE],
[TAG_NAMES.B, TAG_ID.B],
[TAG_NAMES.BASE, TAG_ID.BASE],
[TAG_NAMES.BASEFONT, TAG_ID.BASEFONT],
[TAG_NAMES.BGSOUND, TAG_ID.BGSOUND],
[TAG_NAMES.BIG, TAG_ID.BIG],
[TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE],
[TAG_NAMES.BODY, TAG_ID.BODY],
[TAG_NAMES.BR, TAG_ID.BR],
[TAG_NAMES.BUTTON, TAG_ID.BUTTON],
[TAG_NAMES.CAPTION, TAG_ID.CAPTION],
[TAG_NAMES.CENTER, TAG_ID.CENTER],
[TAG_NAMES.CODE, TAG_ID.CODE],
[TAG_NAMES.COL, TAG_ID.COL],
[TAG_NAMES.COLGROUP, TAG_ID.COLGROUP],
[TAG_NAMES.DD, TAG_ID.DD],
[TAG_NAMES.DESC, TAG_ID.DESC],
[TAG_NAMES.DETAILS, TAG_ID.DETAILS],
[TAG_NAMES.DIALOG, TAG_ID.DIALOG],
[TAG_NAMES.DIR, TAG_ID.DIR],
[TAG_NAMES.DIV, TAG_ID.DIV],
[TAG_NAMES.DL, TAG_ID.DL],
[TAG_NAMES.DT, TAG_ID.DT],
[TAG_NAMES.EM, TAG_ID.EM],
[TAG_NAMES.EMBED, TAG_ID.EMBED],
[TAG_NAMES.FIELDSET, TAG_ID.FIELDSET],
[TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION],
[TAG_NAMES.FIGURE, TAG_ID.FIGURE],
[TAG_NAMES.FONT, TAG_ID.FONT],
[TAG_NAMES.FOOTER, TAG_ID.FOOTER],
[TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT],
[TAG_NAMES.FORM, TAG_ID.FORM],
[TAG_NAMES.FRAME, TAG_ID.FRAME],
[TAG_NAMES.FRAMESET, TAG_ID.FRAMESET],
[TAG_NAMES.H1, TAG_ID.H1],
[TAG_NAMES.H2, TAG_ID.H2],
[TAG_NAMES.H3, TAG_ID.H3],
[TAG_NAMES.H4, TAG_ID.H4],
[TAG_NAMES.H5, TAG_ID.H5],
[TAG_NAMES.H6, TAG_ID.H6],
[TAG_NAMES.HEAD, TAG_ID.HEAD],
[TAG_NAMES.HEADER, TAG_ID.HEADER],
[TAG_NAMES.HGROUP, TAG_ID.HGROUP],
[TAG_NAMES.HR, TAG_ID.HR],
[TAG_NAMES.HTML, TAG_ID.HTML],
[TAG_NAMES.I, TAG_ID.I],
[TAG_NAMES.IMG, TAG_ID.IMG],
[TAG_NAMES.IMAGE, TAG_ID.IMAGE],
[TAG_NAMES.INPUT, TAG_ID.INPUT],
[TAG_NAMES.IFRAME, TAG_ID.IFRAME],
[TAG_NAMES.KEYGEN, TAG_ID.KEYGEN],
[TAG_NAMES.LABEL, TAG_ID.LABEL],
[TAG_NAMES.LI, TAG_ID.LI],
[TAG_NAMES.LINK, TAG_ID.LINK],
[TAG_NAMES.LISTING, TAG_ID.LISTING],
[TAG_NAMES.MAIN, TAG_ID.MAIN],
[TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK],
[TAG_NAMES.MARQUEE, TAG_ID.MARQUEE],
[TAG_NAMES.MATH, TAG_ID.MATH],
[TAG_NAMES.MENU, TAG_ID.MENU],
[TAG_NAMES.META, TAG_ID.META],
[TAG_NAMES.MGLYPH, TAG_ID.MGLYPH],
[TAG_NAMES.MI, TAG_ID.MI],
[TAG_NAMES.MO, TAG_ID.MO],
[TAG_NAMES.MN, TAG_ID.MN],
[TAG_NAMES.MS, TAG_ID.MS],
[TAG_NAMES.MTEXT, TAG_ID.MTEXT],
[TAG_NAMES.NAV, TAG_ID.NAV],
[TAG_NAMES.NOBR, TAG_ID.NOBR],
[TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES],
[TAG_NAMES.NOEMBED, TAG_ID.NOEMBED],
[TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT],
[TAG_NAMES.OBJECT, TAG_ID.OBJECT],
[TAG_NAMES.OL, TAG_ID.OL],
[TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP],
[TAG_NAMES.OPTION, TAG_ID.OPTION],
[TAG_NAMES.P, TAG_ID.P],
[TAG_NAMES.PARAM, TAG_ID.PARAM],
[TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT],
[TAG_NAMES.PRE, TAG_ID.PRE],
[TAG_NAMES.RB, TAG_ID.RB],
[TAG_NAMES.RP, TAG_ID.RP],
[TAG_NAMES.RT, TAG_ID.RT],
[TAG_NAMES.RTC, TAG_ID.RTC],
[TAG_NAMES.RUBY, TAG_ID.RUBY],
[TAG_NAMES.S, TAG_ID.S],
[TAG_NAMES.SCRIPT, TAG_ID.SCRIPT],
[TAG_NAMES.SEARCH, TAG_ID.SEARCH],
[TAG_NAMES.SECTION, TAG_ID.SECTION],
[TAG_NAMES.SELECT, TAG_ID.SELECT],
[TAG_NAMES.SOURCE, TAG_ID.SOURCE],
[TAG_NAMES.SMALL, TAG_ID.SMALL],
[TAG_NAMES.SPAN, TAG_ID.SPAN],
[TAG_NAMES.STRIKE, TAG_ID.STRIKE],
[TAG_NAMES.STRONG, TAG_ID.STRONG],
[TAG_NAMES.STYLE, TAG_ID.STYLE],
[TAG_NAMES.SUB, TAG_ID.SUB],
[TAG_NAMES.SUMMARY, TAG_ID.SUMMARY],
[TAG_NAMES.SUP, TAG_ID.SUP],
[TAG_NAMES.TABLE, TAG_ID.TABLE],
[TAG_NAMES.TBODY, TAG_ID.TBODY],
[TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE],
[TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA],
[TAG_NAMES.TFOOT, TAG_ID.TFOOT],
[TAG_NAMES.TD, TAG_ID.TD],
[TAG_NAMES.TH, TAG_ID.TH],
[TAG_NAMES.THEAD, TAG_ID.THEAD],
[TAG_NAMES.TITLE, TAG_ID.TITLE],
[TAG_NAMES.TR, TAG_ID.TR],
[TAG_NAMES.TRACK, TAG_ID.TRACK],
[TAG_NAMES.TT, TAG_ID.TT],
[TAG_NAMES.U, TAG_ID.U],
[TAG_NAMES.UL, TAG_ID.UL],
[TAG_NAMES.SVG, TAG_ID.SVG],
[TAG_NAMES.VAR, TAG_ID.VAR],
[TAG_NAMES.WBR, TAG_ID.WBR],
[TAG_NAMES.XMP, TAG_ID.XMP],
]);
export function getTagID(tagName) {
var _a;
return (_a = TAG_NAME_TO_ID.get(tagName)) !== null && _a !== void 0 ? _a : TAG_ID.UNKNOWN;
}
const $ = TAG_ID;
export const SPECIAL_ELEMENTS = {
[NS.HTML]: new Set([
$.ADDRESS,
$.APPLET,
$.AREA,
$.ARTICLE,
$.ASIDE,
$.BASE,
$.BASEFONT,
$.BGSOUND,
$.BLOCKQUOTE,
$.BODY,
$.BR,
$.BUTTON,
$.CAPTION,
$.CENTER,
$.COL,
$.COLGROUP,
$.DD,
$.DETAILS,
$.DIR,
$.DIV,
$.DL,
$.DT,
$.EMBED,
$.FIELDSET,
$.FIGCAPTION,
$.FIGURE,
$.FOOTER,
$.FORM,
$.FRAME,
$.FRAMESET,
$.H1,
$.H2,
$.H3,
$.H4,
$.H5,
$.H6,
$.HEAD,
$.HEADER,
$.HGROUP,
$.HR,
$.HTML,
$.IFRAME,
$.IMG,
$.INPUT,
$.LI,
$.LINK,
$.LISTING,
$.MAIN,
$.MARQUEE,
$.MENU,
$.META,
$.NAV,
$.NOEMBED,
$.NOFRAMES,
$.NOSCRIPT,
$.OBJECT,
$.OL,
$.P,
$.PARAM,
$.PLAINTEXT,
$.PRE,
$.SCRIPT,
$.SECTION,
$.SELECT,
$.SOURCE,
$.STYLE,
$.SUMMARY,
$.TABLE,
$.TBODY,
$.TD,
$.TEMPLATE,
$.TEXTAREA,
$.TFOOT,
$.TH,
$.THEAD,
$.TITLE,
$.TR,
$.TRACK,
$.UL,
$.WBR,
$.XMP,
]),
[NS.MATHML]: new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]),
[NS.SVG]: new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]),
[NS.XLINK]: new Set(),
[NS.XML]: new Set(),
[NS.XMLNS]: new Set(),
};
export const NUMBERED_HEADERS = new Set([$.H1, $.H2, $.H3, $.H4, $.H5, $.H6]);
const UNESCAPED_TEXT = new Set([
TAG_NAMES.STYLE,
TAG_NAMES.SCRIPT,
TAG_NAMES.XMP,
TAG_NAMES.IFRAME,
TAG_NAMES.NOEMBED,
TAG_NAMES.NOFRAMES,
TAG_NAMES.PLAINTEXT,
]);
export function hasUnescapedText(tn, scriptingEnabled) {
return UNESCAPED_TEXT.has(tn) || (scriptingEnabled && tn === TAG_NAMES.NOSCRIPT);
}

84
node_modules/parse5/dist/common/token.d.ts generated vendored Normal file
View File

@@ -0,0 +1,84 @@
import type { TAG_ID } from './html.js';
export declare enum TokenType {
CHARACTER = 0,
NULL_CHARACTER = 1,
WHITESPACE_CHARACTER = 2,
START_TAG = 3,
END_TAG = 4,
COMMENT = 5,
DOCTYPE = 6,
EOF = 7,
HIBERNATION = 8
}
export interface Location {
/** One-based line index of the first character. */
startLine: number;
/** One-based column index of the first character. */
startCol: number;
/** Zero-based first character index. */
startOffset: number;
/** One-based line index of the last character. */
endLine: number;
/** One-based column index of the last character. Points directly *after* the last character. */
endCol: number;
/** Zero-based last character index. Points directly *after* the last character. */
endOffset: number;
}
export interface LocationWithAttributes extends Location {
/** Start tag attributes' location info. */
attrs?: Record<string, Location>;
}
export interface ElementLocation extends LocationWithAttributes {
/** Element's start tag location info. */
startTag?: Location;
/**
* Element's end tag location info.
* This property is undefined, if the element has no closing tag.
*/
endTag?: Location;
}
interface TokenBase {
readonly type: TokenType;
location: Location | null;
}
export interface DoctypeToken extends TokenBase {
readonly type: TokenType.DOCTYPE;
name: string | null;
forceQuirks: boolean;
publicId: string | null;
systemId: string | null;
}
export interface Attribute {
/** The name of the attribute. */
name: string;
/** The namespace of the attribute. */
namespace?: string;
/** The namespace-related prefix of the attribute. */
prefix?: string;
/** The value of the attribute. */
value: string;
}
export interface TagToken extends TokenBase {
readonly type: TokenType.START_TAG | TokenType.END_TAG;
tagName: string;
/** Used to cache the ID of the tag name. */
tagID: TAG_ID;
selfClosing: boolean;
ackSelfClosing: boolean;
attrs: Attribute[];
location: LocationWithAttributes | null;
}
export declare function getTokenAttr(token: TagToken, attrName: string): string | null;
export interface CommentToken extends TokenBase {
readonly type: TokenType.COMMENT;
data: string;
}
export interface EOFToken extends TokenBase {
readonly type: TokenType.EOF;
}
export interface CharacterToken extends TokenBase {
type: TokenType.CHARACTER | TokenType.NULL_CHARACTER | TokenType.WHITESPACE_CHARACTER;
chars: string;
}
export type Token = DoctypeToken | TagToken | CommentToken | EOFToken | CharacterToken;
export {};

20
node_modules/parse5/dist/common/token.js generated vendored Normal file
View File

@@ -0,0 +1,20 @@
export var TokenType;
(function (TokenType) {
TokenType[TokenType["CHARACTER"] = 0] = "CHARACTER";
TokenType[TokenType["NULL_CHARACTER"] = 1] = "NULL_CHARACTER";
TokenType[TokenType["WHITESPACE_CHARACTER"] = 2] = "WHITESPACE_CHARACTER";
TokenType[TokenType["START_TAG"] = 3] = "START_TAG";
TokenType[TokenType["END_TAG"] = 4] = "END_TAG";
TokenType[TokenType["COMMENT"] = 5] = "COMMENT";
TokenType[TokenType["DOCTYPE"] = 6] = "DOCTYPE";
TokenType[TokenType["EOF"] = 7] = "EOF";
TokenType[TokenType["HIBERNATION"] = 8] = "HIBERNATION";
})(TokenType || (TokenType = {}));
export function getTokenAttr(token, attrName) {
for (let i = token.attrs.length - 1; i >= 0; i--) {
if (token.attrs[i].name === attrName) {
return token.attrs[i].value;
}
}
return null;
}

42
node_modules/parse5/dist/common/unicode.d.ts generated vendored Normal file
View File

@@ -0,0 +1,42 @@
export declare const REPLACEMENT_CHARACTER = "\uFFFD";
export declare enum CODE_POINTS {
EOF = -1,
NULL = 0,
TABULATION = 9,
CARRIAGE_RETURN = 13,
LINE_FEED = 10,
FORM_FEED = 12,
SPACE = 32,
EXCLAMATION_MARK = 33,
QUOTATION_MARK = 34,
AMPERSAND = 38,
APOSTROPHE = 39,
HYPHEN_MINUS = 45,
SOLIDUS = 47,
DIGIT_0 = 48,
DIGIT_9 = 57,
SEMICOLON = 59,
LESS_THAN_SIGN = 60,
EQUALS_SIGN = 61,
GREATER_THAN_SIGN = 62,
QUESTION_MARK = 63,
LATIN_CAPITAL_A = 65,
LATIN_CAPITAL_Z = 90,
RIGHT_SQUARE_BRACKET = 93,
GRAVE_ACCENT = 96,
LATIN_SMALL_A = 97,
LATIN_SMALL_Z = 122
}
export declare const SEQUENCES: {
DASH_DASH: string;
CDATA_START: string;
DOCTYPE: string;
SCRIPT: string;
PUBLIC: string;
SYSTEM: string;
};
export declare function isSurrogate(cp: number): boolean;
export declare function isSurrogatePair(cp: number): boolean;
export declare function getSurrogatePairCodePoint(cp1: number, cp2: number): number;
export declare function isControlCodePoint(cp: number): boolean;
export declare function isUndefinedCodePoint(cp: number): boolean;

62
node_modules/parse5/dist/common/unicode.js generated vendored Normal file
View File

@@ -0,0 +1,62 @@
const UNDEFINED_CODE_POINTS = new Set([
65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214,
393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894,
720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574,
1048575, 1114110, 1114111,
]);
export const REPLACEMENT_CHARACTER = '\uFFFD';
export var CODE_POINTS;
(function (CODE_POINTS) {
CODE_POINTS[CODE_POINTS["EOF"] = -1] = "EOF";
CODE_POINTS[CODE_POINTS["NULL"] = 0] = "NULL";
CODE_POINTS[CODE_POINTS["TABULATION"] = 9] = "TABULATION";
CODE_POINTS[CODE_POINTS["CARRIAGE_RETURN"] = 13] = "CARRIAGE_RETURN";
CODE_POINTS[CODE_POINTS["LINE_FEED"] = 10] = "LINE_FEED";
CODE_POINTS[CODE_POINTS["FORM_FEED"] = 12] = "FORM_FEED";
CODE_POINTS[CODE_POINTS["SPACE"] = 32] = "SPACE";
CODE_POINTS[CODE_POINTS["EXCLAMATION_MARK"] = 33] = "EXCLAMATION_MARK";
CODE_POINTS[CODE_POINTS["QUOTATION_MARK"] = 34] = "QUOTATION_MARK";
CODE_POINTS[CODE_POINTS["AMPERSAND"] = 38] = "AMPERSAND";
CODE_POINTS[CODE_POINTS["APOSTROPHE"] = 39] = "APOSTROPHE";
CODE_POINTS[CODE_POINTS["HYPHEN_MINUS"] = 45] = "HYPHEN_MINUS";
CODE_POINTS[CODE_POINTS["SOLIDUS"] = 47] = "SOLIDUS";
CODE_POINTS[CODE_POINTS["DIGIT_0"] = 48] = "DIGIT_0";
CODE_POINTS[CODE_POINTS["DIGIT_9"] = 57] = "DIGIT_9";
CODE_POINTS[CODE_POINTS["SEMICOLON"] = 59] = "SEMICOLON";
CODE_POINTS[CODE_POINTS["LESS_THAN_SIGN"] = 60] = "LESS_THAN_SIGN";
CODE_POINTS[CODE_POINTS["EQUALS_SIGN"] = 61] = "EQUALS_SIGN";
CODE_POINTS[CODE_POINTS["GREATER_THAN_SIGN"] = 62] = "GREATER_THAN_SIGN";
CODE_POINTS[CODE_POINTS["QUESTION_MARK"] = 63] = "QUESTION_MARK";
CODE_POINTS[CODE_POINTS["LATIN_CAPITAL_A"] = 65] = "LATIN_CAPITAL_A";
CODE_POINTS[CODE_POINTS["LATIN_CAPITAL_Z"] = 90] = "LATIN_CAPITAL_Z";
CODE_POINTS[CODE_POINTS["RIGHT_SQUARE_BRACKET"] = 93] = "RIGHT_SQUARE_BRACKET";
CODE_POINTS[CODE_POINTS["GRAVE_ACCENT"] = 96] = "GRAVE_ACCENT";
CODE_POINTS[CODE_POINTS["LATIN_SMALL_A"] = 97] = "LATIN_SMALL_A";
CODE_POINTS[CODE_POINTS["LATIN_SMALL_Z"] = 122] = "LATIN_SMALL_Z";
})(CODE_POINTS || (CODE_POINTS = {}));
export const SEQUENCES = {
DASH_DASH: '--',
CDATA_START: '[CDATA[',
DOCTYPE: 'doctype',
SCRIPT: 'script',
PUBLIC: 'public',
SYSTEM: 'system',
};
//Surrogates
export function isSurrogate(cp) {
return cp >= 55296 && cp <= 57343;
}
export function isSurrogatePair(cp) {
return cp >= 56320 && cp <= 57343;
}
export function getSurrogatePairCodePoint(cp1, cp2) {
return (cp1 - 55296) * 1024 + 9216 + cp2;
}
//NOTE: excluding NULL and ASCII whitespace
export function isControlCodePoint(cp) {
return ((cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) ||
(cp >= 0x7f && cp <= 0x9f));
}
export function isUndefinedCodePoint(cp) {
return (cp >= 64976 && cp <= 65007) || UNDEFINED_CODE_POINTS.has(cp);
}

71
node_modules/parse5/dist/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,71 @@
import { type ParserOptions } from './parser/index.js';
import type { DefaultTreeAdapterMap } from './tree-adapters/default.js';
import type { TreeAdapterTypeMap } from './tree-adapters/interface.js';
export { type DefaultTreeAdapterMap, defaultTreeAdapter } from './tree-adapters/default.js';
import type * as DefaultTreeAdapter from './tree-adapters/default.js';
export declare namespace DefaultTreeAdapterTypes {
type Document = DefaultTreeAdapter.Document;
type DocumentFragment = DefaultTreeAdapter.DocumentFragment;
type Element = DefaultTreeAdapter.Element;
type CommentNode = DefaultTreeAdapter.CommentNode;
type TextNode = DefaultTreeAdapter.TextNode;
type Template = DefaultTreeAdapter.Template;
type DocumentType = DefaultTreeAdapter.DocumentType;
type ParentNode = DefaultTreeAdapter.ParentNode;
type ChildNode = DefaultTreeAdapter.ChildNode;
type Node = DefaultTreeAdapter.Node;
type DefaultTreeAdapterMap = DefaultTreeAdapter.DefaultTreeAdapterMap;
}
export type { TreeAdapter, TreeAdapterTypeMap } from './tree-adapters/interface.js';
export { type ParserOptions, /** @internal */ Parser } from './parser/index.js';
export { serialize, serializeOuter, type SerializerOptions } from './serializer/index.js';
export { ERR as ErrorCodes, type ParserError, type ParserErrorHandler } from './common/error-codes.js';
/** @internal */
export * as foreignContent from './common/foreign-content.js';
export * as html from './common/html.js';
export * as Token from './common/token.js';
/** @internal */
export { Tokenizer, type TokenizerOptions, TokenizerMode, type TokenHandler } from './tokenizer/index.js';
/**
* Parses an HTML string.
*
* @param html Input HTML string.
* @param options Parsing options.
* @returns Document
*
* @example
*
* ```js
* const parse5 = require('parse5');
*
* const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');
*
* console.log(document.childNodes[1].tagName); //> 'html'
*```
*/
export declare function parse<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>(html: string, options?: ParserOptions<T>): T['document'];
/**
* Parses an HTML fragment.
*
* @example
*
* ```js
* const parse5 = require('parse5');
*
* const documentFragment = parse5.parseFragment('<table></table>');
*
* console.log(documentFragment.childNodes[0].tagName); //> 'table'
*
* // Parses the html fragment in the context of the parsed <table> element.
* const trFragment = parse5.parseFragment(documentFragment.childNodes[0], '<tr><td>Shake it, baby</td></tr>');
*
* console.log(trFragment.childNodes[0].childNodes[0].tagName); //> 'td'
* ```
*
* @param fragmentContext Parsing context element. If specified, given fragment will be parsed as if it was set to the context element's `innerHTML` property.
* @param html Input HTML fragment string.
* @param options Parsing options.
* @returns DocumentFragment
*/
export declare function parseFragment<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>(fragmentContext: T['parentNode'] | null, html: string, options: ParserOptions<T>): T['documentFragment'];
export declare function parseFragment<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>(html: string, options?: ParserOptions<T>): T['documentFragment'];

42
node_modules/parse5/dist/index.js generated vendored Normal file
View File

@@ -0,0 +1,42 @@
import { Parser } from './parser/index.js';
export { defaultTreeAdapter } from './tree-adapters/default.js';
export { /** @internal */ Parser } from './parser/index.js';
export { serialize, serializeOuter } from './serializer/index.js';
export { ERR as ErrorCodes } from './common/error-codes.js';
/** @internal */
export * as foreignContent from './common/foreign-content.js';
export * as html from './common/html.js';
export * as Token from './common/token.js';
/** @internal */
export { Tokenizer, TokenizerMode } from './tokenizer/index.js';
// Shorthands
/**
* Parses an HTML string.
*
* @param html Input HTML string.
* @param options Parsing options.
* @returns Document
*
* @example
*
* ```js
* const parse5 = require('parse5');
*
* const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');
*
* console.log(document.childNodes[1].tagName); //> 'html'
*```
*/
export function parse(html, options) {
return Parser.parse(html, options);
}
export function parseFragment(fragmentContext, html, options) {
if (typeof fragmentContext === 'string') {
options = html;
html = fragmentContext;
fragmentContext = null;
}
const parser = Parser.getFragmentParser(fragmentContext, options);
parser.tokenizer.write(html, true);
return parser.getFragment();
}

View File

@@ -0,0 +1,36 @@
import type { TagToken } from '../common/token.js';
import type { TreeAdapter, TreeAdapterTypeMap } from '../tree-adapters/interface.js';
export declare enum EntryType {
Marker = 0,
Element = 1
}
interface MarkerEntry {
type: EntryType.Marker;
}
export interface ElementEntry<T extends TreeAdapterTypeMap> {
type: EntryType.Element;
element: T['element'];
token: TagToken;
}
export type Entry<T extends TreeAdapterTypeMap> = MarkerEntry | ElementEntry<T>;
export declare class FormattingElementList<T extends TreeAdapterTypeMap> {
private treeAdapter;
entries: Entry<T>[];
bookmark: Entry<T> | null;
constructor(treeAdapter: TreeAdapter<T>);
private _getNoahArkConditionCandidates;
private _ensureNoahArkCondition;
insertMarker(): void;
pushElement(element: T['element'], token: TagToken): void;
insertElementAfterBookmark(element: T['element'], token: TagToken): void;
removeEntry(entry: Entry<T>): void;
/**
* Clears the list of formatting elements up to the last marker.
*
* @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker
*/
clearToLastMarker(): void;
getElementEntryInScopeWithTagName(tagName: string): ElementEntry<T> | null;
getElementEntry(element: T['element']): ElementEntry<T> | undefined;
}
export {};

View File

@@ -0,0 +1,110 @@
//Const
const NOAH_ARK_CAPACITY = 3;
export var EntryType;
(function (EntryType) {
EntryType[EntryType["Marker"] = 0] = "Marker";
EntryType[EntryType["Element"] = 1] = "Element";
})(EntryType || (EntryType = {}));
const MARKER = { type: EntryType.Marker };
//List of formatting elements
export class FormattingElementList {
constructor(treeAdapter) {
this.treeAdapter = treeAdapter;
this.entries = [];
this.bookmark = null;
}
//Noah Ark's condition
//OPTIMIZATION: at first we try to find possible candidates for exclusion using
//lightweight heuristics without thorough attributes check.
_getNoahArkConditionCandidates(newElement, neAttrs) {
const candidates = [];
const neAttrsLength = neAttrs.length;
const neTagName = this.treeAdapter.getTagName(newElement);
const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement);
for (let i = 0; i < this.entries.length; i++) {
const entry = this.entries[i];
if (entry.type === EntryType.Marker) {
break;
}
const { element } = entry;
if (this.treeAdapter.getTagName(element) === neTagName &&
this.treeAdapter.getNamespaceURI(element) === neNamespaceURI) {
const elementAttrs = this.treeAdapter.getAttrList(element);
if (elementAttrs.length === neAttrsLength) {
candidates.push({ idx: i, attrs: elementAttrs });
}
}
}
return candidates;
}
_ensureNoahArkCondition(newElement) {
if (this.entries.length < NOAH_ARK_CAPACITY)
return;
const neAttrs = this.treeAdapter.getAttrList(newElement);
const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs);
if (candidates.length < NOAH_ARK_CAPACITY)
return;
//NOTE: build attrs map for the new element, so we can perform fast lookups
const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value]));
let validCandidates = 0;
//NOTE: remove bottommost candidates, until Noah's Ark condition will not be met
for (let i = 0; i < candidates.length; i++) {
const candidate = candidates[i];
// We know that `candidate.attrs.length === neAttrs.length`
if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) {
validCandidates += 1;
if (validCandidates >= NOAH_ARK_CAPACITY) {
this.entries.splice(candidate.idx, 1);
}
}
}
}
//Mutations
insertMarker() {
this.entries.unshift(MARKER);
}
pushElement(element, token) {
this._ensureNoahArkCondition(element);
this.entries.unshift({
type: EntryType.Element,
element,
token,
});
}
insertElementAfterBookmark(element, token) {
const bookmarkIdx = this.entries.indexOf(this.bookmark);
this.entries.splice(bookmarkIdx, 0, {
type: EntryType.Element,
element,
token,
});
}
removeEntry(entry) {
const entryIndex = this.entries.indexOf(entry);
if (entryIndex !== -1) {
this.entries.splice(entryIndex, 1);
}
}
/**
* Clears the list of formatting elements up to the last marker.
*
* @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker
*/
clearToLastMarker() {
const markerIdx = this.entries.indexOf(MARKER);
if (markerIdx === -1) {
this.entries.length = 0;
}
else {
this.entries.splice(0, markerIdx + 1);
}
}
//Search
getElementEntryInScopeWithTagName(tagName) {
const entry = this.entries.find((entry) => entry.type === EntryType.Marker || this.treeAdapter.getTagName(entry.element) === tagName);
return entry && entry.type === EntryType.Element ? entry : null;
}
getElementEntry(element) {
return this.entries.find((entry) => entry.type === EntryType.Element && entry.element === element);
}
}

221
node_modules/parse5/dist/parser/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,221 @@
import { Tokenizer, TokenizerMode, type TokenHandler } from '../tokenizer/index.js';
import { OpenElementStack, type StackHandler } from './open-element-stack.js';
import { FormattingElementList } from './formatting-element-list.js';
import { ERR, type ParserErrorHandler } from '../common/error-codes.js';
import { TAG_ID as $, NS } from '../common/html.js';
import type { TreeAdapter, TreeAdapterTypeMap } from '../tree-adapters/interface.js';
import { type Token, type CommentToken, type CharacterToken, type TagToken, type DoctypeToken, type EOFToken, type LocationWithAttributes } from '../common/token.js';
declare enum InsertionMode {
INITIAL = 0,
BEFORE_HTML = 1,
BEFORE_HEAD = 2,
IN_HEAD = 3,
IN_HEAD_NO_SCRIPT = 4,
AFTER_HEAD = 5,
IN_BODY = 6,
TEXT = 7,
IN_TABLE = 8,
IN_TABLE_TEXT = 9,
IN_CAPTION = 10,
IN_COLUMN_GROUP = 11,
IN_TABLE_BODY = 12,
IN_ROW = 13,
IN_CELL = 14,
IN_SELECT = 15,
IN_SELECT_IN_TABLE = 16,
IN_TEMPLATE = 17,
AFTER_BODY = 18,
IN_FRAMESET = 19,
AFTER_FRAMESET = 20,
AFTER_AFTER_BODY = 21,
AFTER_AFTER_FRAMESET = 22
}
export interface ParserOptions<T extends TreeAdapterTypeMap> {
/**
* The [scripting flag](https://html.spec.whatwg.org/multipage/parsing.html#scripting-flag). If set
* to `true`, `noscript` element content will be parsed as text.
*
* @default `true`
*/
scriptingEnabled?: boolean;
/**
* Enables source code location information. When enabled, each node (except the root node)
* will have a `sourceCodeLocation` property. If the node is not an empty element, `sourceCodeLocation` will
* be a {@link ElementLocation} object, otherwise it will be {@link Location}.
* If the element was implicitly created by the parser (as part of
* [tree correction](https://html.spec.whatwg.org/multipage/syntax.html#an-introduction-to-error-handling-and-strange-cases-in-the-parser)),
* its `sourceCodeLocation` property will be `undefined`.
*
* @default `false`
*/
sourceCodeLocationInfo?: boolean;
/**
* Specifies the resulting tree format.
*
* @default `treeAdapters.default`
*/
treeAdapter?: TreeAdapter<T>;
/**
* Callback for parse errors.
*
* @default `null`
*/
onParseError?: ParserErrorHandler | null;
}
export declare class Parser<T extends TreeAdapterTypeMap> implements TokenHandler, StackHandler<T> {
/** @internal */
fragmentContext: T['element'] | null;
/** @internal */
scriptHandler: null | ((pendingScript: T['element']) => void);
treeAdapter: TreeAdapter<T>;
/** @internal */
onParseError: ParserErrorHandler | null;
protected currentToken: Token | null;
options: Required<ParserOptions<T>>;
document: T['document'];
constructor(options?: ParserOptions<T>, document?: T['document'],
/** @internal */
fragmentContext?: T['element'] | null,
/** @internal */
scriptHandler?: null | ((pendingScript: T['element']) => void));
static parse<T extends TreeAdapterTypeMap>(html: string, options?: ParserOptions<T>): T['document'];
static getFragmentParser<T extends TreeAdapterTypeMap>(fragmentContext?: T['parentNode'] | null, options?: ParserOptions<T>): Parser<T>;
getFragment(): T['documentFragment'];
tokenizer: Tokenizer;
stopped: boolean;
/** @internal */
insertionMode: InsertionMode;
/** @internal */
originalInsertionMode: InsertionMode;
/** @internal */
fragmentContextID: $;
/** @internal */
headElement: null | T['element'];
/** @internal */
formElement: null | T['element'];
/** @internal */
openElements: OpenElementStack<T>;
/** @internal */
activeFormattingElements: FormattingElementList<T>;
/** Indicates that the current node is not an element in the HTML namespace */
protected currentNotInHTML: boolean;
/**
* The template insertion mode stack is maintained from the left.
* Ie. the topmost element will always have index 0.
*
* @internal
*/
tmplInsertionModeStack: InsertionMode[];
/** @internal */
pendingCharacterTokens: CharacterToken[];
/** @internal */
hasNonWhitespacePendingCharacterToken: boolean;
/** @internal */
framesetOk: boolean;
/** @internal */
skipNextNewLine: boolean;
/** @internal */
fosterParentingEnabled: boolean;
/** @internal */
_err(token: Token, code: ERR, beforeToken?: boolean): void;
/** @internal */
onItemPush(node: T['parentNode'], tid: number, isTop: boolean): void;
/** @internal */
onItemPop(node: T['parentNode'], isTop: boolean): void;
protected _setContextModes(current: T['parentNode'] | undefined, tid: number | undefined): void;
/** @protected */
_switchToTextParsing(currentToken: TagToken, nextTokenizerState: (typeof TokenizerMode)[keyof typeof TokenizerMode]): void;
switchToPlaintextParsing(): void;
/** @protected */
_getAdjustedCurrentElement(): T['element'];
/** @protected */
_findFormInFragmentContext(): void;
protected _initTokenizerForFragmentParsing(): void;
/** @protected */
_setDocumentType(token: DoctypeToken): void;
/** @protected */
_attachElementToTree(element: T['element'], location: LocationWithAttributes | null): void;
/**
* For self-closing tags. Add an element to the tree, but skip adding it
* to the stack.
*/
/** @protected */
_appendElement(token: TagToken, namespaceURI: NS): void;
/** @protected */
_insertElement(token: TagToken, namespaceURI: NS): void;
/** @protected */
_insertFakeElement(tagName: string, tagID: $): void;
/** @protected */
_insertTemplate(token: TagToken): void;
/** @protected */
_insertFakeRootElement(): void;
/** @protected */
_appendCommentNode(token: CommentToken, parent: T['parentNode']): void;
/** @protected */
_insertCharacters(token: CharacterToken): void;
/** @protected */
_adoptNodes(donor: T['parentNode'], recipient: T['parentNode']): void;
/** @protected */
_setEndLocation(element: T['element'], closingToken: Token): void;
protected shouldProcessStartTagTokenInForeignContent(token: TagToken): boolean;
/** @protected */
_processToken(token: Token): void;
/** @protected */
_isIntegrationPoint(tid: $, element: T['element'], foreignNS?: NS): boolean;
/** @protected */
_reconstructActiveFormattingElements(): void;
/** @protected */
_closeTableCell(): void;
/** @protected */
_closePElement(): void;
/** @protected */
_resetInsertionMode(): void;
/** @protected */
_resetInsertionModeForSelect(selectIdx: number): void;
/** @protected */
_isElementCausesFosterParenting(tn: $): boolean;
/** @protected */
_shouldFosterParentOnInsertion(): boolean;
/** @protected */
_findFosterParentingLocation(): {
parent: T['parentNode'];
beforeElement: T['element'] | null;
};
/** @protected */
_fosterParentElement(element: T['element']): void;
/** @protected */
_isSpecialElement(element: T['element'], id: $): boolean;
/** @internal */
onCharacter(token: CharacterToken): void;
/** @internal */
onNullCharacter(token: CharacterToken): void;
/** @internal */
onComment(token: CommentToken): void;
/** @internal */
onDoctype(token: DoctypeToken): void;
/** @internal */
onStartTag(token: TagToken): void;
/**
* Processes a given start tag.
*
* `onStartTag` checks if a self-closing tag was recognized. When a token
* is moved inbetween multiple insertion modes, this check for self-closing
* could lead to false positives. To avoid this, `_processStartTag` is used
* for nested calls.
*
* @param token The token to process.
* @protected
*/
_processStartTag(token: TagToken): void;
/** @protected */
_startTagOutsideForeignContent(token: TagToken): void;
/** @internal */
onEndTag(token: TagToken): void;
/** @protected */
_endTagOutsideForeignContent(token: TagToken): void;
/** @internal */
onEof(token: EOFToken): void;
/** @internal */
onWhitespaceCharacter(token: CharacterToken): void;
}
export {};

3245
node_modules/parse5/dist/parser/index.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,53 @@
import { TAG_ID as $ } from '../common/html.js';
import type { TreeAdapter, TreeAdapterTypeMap } from '../tree-adapters/interface.js';
export interface StackHandler<T extends TreeAdapterTypeMap> {
onItemPush: (node: T['parentNode'], tid: number, isTop: boolean) => void;
onItemPop: (node: T['parentNode'], isTop: boolean) => void;
}
export declare class OpenElementStack<T extends TreeAdapterTypeMap> {
private treeAdapter;
private handler;
items: T['parentNode'][];
tagIDs: $[];
current: T['parentNode'] | undefined;
stackTop: number;
tmplCount: number;
currentTagId: number | undefined;
get currentTmplContentOrNode(): T['parentNode'];
constructor(document: T['document'], treeAdapter: TreeAdapter<T>, handler: StackHandler<T>);
private _indexOf;
private _isInTemplate;
private _updateCurrentElement;
push(element: T['element'], tagID: $): void;
pop(): void;
replace(oldElement: T['element'], newElement: T['element']): void;
insertAfter(referenceElement: T['element'], newElement: T['element'], newElementID: $): void;
popUntilTagNamePopped(tagName: $): void;
shortenToLength(idx: number): void;
popUntilElementPopped(element: T['element']): void;
private popUntilPopped;
popUntilNumberedHeaderPopped(): void;
popUntilTableCellPopped(): void;
popAllUpToHtmlElement(): void;
private _indexOfTagNames;
private clearBackTo;
clearBackToTableContext(): void;
clearBackToTableBodyContext(): void;
clearBackToTableRowContext(): void;
remove(element: T['element']): void;
tryPeekProperlyNestedBodyElement(): T['element'] | null;
contains(element: T['element']): boolean;
getCommonAncestor(element: T['element']): T['element'] | null;
isRootHtmlElementCurrent(): boolean;
private hasInDynamicScope;
hasInScope(tagName: $): boolean;
hasInListItemScope(tagName: $): boolean;
hasInButtonScope(tagName: $): boolean;
hasNumberedHeaderInScope(): boolean;
hasInTableScope(tagName: $): boolean;
hasTableBodyContextInTableScope(): boolean;
hasInSelectScope(tagName: $): boolean;
generateImpliedEndTags(): void;
generateImpliedEndTagsThoroughly(): void;
generateImpliedEndTagsWithExclusion(exclusionId: $): void;
}

324
node_modules/parse5/dist/parser/open-element-stack.js generated vendored Normal file
View File

@@ -0,0 +1,324 @@
import { TAG_ID as $, NS, NUMBERED_HEADERS } from '../common/html.js';
//Element utils
const IMPLICIT_END_TAG_REQUIRED = new Set([$.DD, $.DT, $.LI, $.OPTGROUP, $.OPTION, $.P, $.RB, $.RP, $.RT, $.RTC]);
const IMPLICIT_END_TAG_REQUIRED_THOROUGHLY = new Set([
...IMPLICIT_END_TAG_REQUIRED,
$.CAPTION,
$.COLGROUP,
$.TBODY,
$.TD,
$.TFOOT,
$.TH,
$.THEAD,
$.TR,
]);
const SCOPING_ELEMENTS_HTML = new Set([
$.APPLET,
$.CAPTION,
$.HTML,
$.MARQUEE,
$.OBJECT,
$.TABLE,
$.TD,
$.TEMPLATE,
$.TH,
]);
const SCOPING_ELEMENTS_HTML_LIST = new Set([...SCOPING_ELEMENTS_HTML, $.OL, $.UL]);
const SCOPING_ELEMENTS_HTML_BUTTON = new Set([...SCOPING_ELEMENTS_HTML, $.BUTTON]);
const SCOPING_ELEMENTS_MATHML = new Set([$.ANNOTATION_XML, $.MI, $.MN, $.MO, $.MS, $.MTEXT]);
const SCOPING_ELEMENTS_SVG = new Set([$.DESC, $.FOREIGN_OBJECT, $.TITLE]);
const TABLE_ROW_CONTEXT = new Set([$.TR, $.TEMPLATE, $.HTML]);
const TABLE_BODY_CONTEXT = new Set([$.TBODY, $.TFOOT, $.THEAD, $.TEMPLATE, $.HTML]);
const TABLE_CONTEXT = new Set([$.TABLE, $.TEMPLATE, $.HTML]);
const TABLE_CELLS = new Set([$.TD, $.TH]);
//Stack of open elements
export class OpenElementStack {
get currentTmplContentOrNode() {
return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current;
}
constructor(document, treeAdapter, handler) {
this.treeAdapter = treeAdapter;
this.handler = handler;
this.items = [];
this.tagIDs = [];
this.stackTop = -1;
this.tmplCount = 0;
this.currentTagId = $.UNKNOWN;
this.current = document;
}
//Index of element
_indexOf(element) {
return this.items.lastIndexOf(element, this.stackTop);
}
//Update current element
_isInTemplate() {
return this.currentTagId === $.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === NS.HTML;
}
_updateCurrentElement() {
this.current = this.items[this.stackTop];
this.currentTagId = this.tagIDs[this.stackTop];
}
//Mutations
push(element, tagID) {
this.stackTop++;
this.items[this.stackTop] = element;
this.current = element;
this.tagIDs[this.stackTop] = tagID;
this.currentTagId = tagID;
if (this._isInTemplate()) {
this.tmplCount++;
}
this.handler.onItemPush(element, tagID, true);
}
pop() {
const popped = this.current;
if (this.tmplCount > 0 && this._isInTemplate()) {
this.tmplCount--;
}
this.stackTop--;
this._updateCurrentElement();
this.handler.onItemPop(popped, true);
}
replace(oldElement, newElement) {
const idx = this._indexOf(oldElement);
this.items[idx] = newElement;
if (idx === this.stackTop) {
this.current = newElement;
}
}
insertAfter(referenceElement, newElement, newElementID) {
const insertionIdx = this._indexOf(referenceElement) + 1;
this.items.splice(insertionIdx, 0, newElement);
this.tagIDs.splice(insertionIdx, 0, newElementID);
this.stackTop++;
if (insertionIdx === this.stackTop) {
this._updateCurrentElement();
}
if (this.current && this.currentTagId !== undefined) {
this.handler.onItemPush(this.current, this.currentTagId, insertionIdx === this.stackTop);
}
}
popUntilTagNamePopped(tagName) {
let targetIdx = this.stackTop + 1;
do {
targetIdx = this.tagIDs.lastIndexOf(tagName, targetIdx - 1);
} while (targetIdx > 0 && this.treeAdapter.getNamespaceURI(this.items[targetIdx]) !== NS.HTML);
this.shortenToLength(Math.max(targetIdx, 0));
}
shortenToLength(idx) {
while (this.stackTop >= idx) {
const popped = this.current;
if (this.tmplCount > 0 && this._isInTemplate()) {
this.tmplCount -= 1;
}
this.stackTop--;
this._updateCurrentElement();
this.handler.onItemPop(popped, this.stackTop < idx);
}
}
popUntilElementPopped(element) {
const idx = this._indexOf(element);
this.shortenToLength(Math.max(idx, 0));
}
popUntilPopped(tagNames, targetNS) {
const idx = this._indexOfTagNames(tagNames, targetNS);
this.shortenToLength(Math.max(idx, 0));
}
popUntilNumberedHeaderPopped() {
this.popUntilPopped(NUMBERED_HEADERS, NS.HTML);
}
popUntilTableCellPopped() {
this.popUntilPopped(TABLE_CELLS, NS.HTML);
}
popAllUpToHtmlElement() {
//NOTE: here we assume that the root <html> element is always first in the open element stack, so
//we perform this fast stack clean up.
this.tmplCount = 0;
this.shortenToLength(1);
}
_indexOfTagNames(tagNames, namespace) {
for (let i = this.stackTop; i >= 0; i--) {
if (tagNames.has(this.tagIDs[i]) && this.treeAdapter.getNamespaceURI(this.items[i]) === namespace) {
return i;
}
}
return -1;
}
clearBackTo(tagNames, targetNS) {
const idx = this._indexOfTagNames(tagNames, targetNS);
this.shortenToLength(idx + 1);
}
clearBackToTableContext() {
this.clearBackTo(TABLE_CONTEXT, NS.HTML);
}
clearBackToTableBodyContext() {
this.clearBackTo(TABLE_BODY_CONTEXT, NS.HTML);
}
clearBackToTableRowContext() {
this.clearBackTo(TABLE_ROW_CONTEXT, NS.HTML);
}
remove(element) {
const idx = this._indexOf(element);
if (idx >= 0) {
if (idx === this.stackTop) {
this.pop();
}
else {
this.items.splice(idx, 1);
this.tagIDs.splice(idx, 1);
this.stackTop--;
this._updateCurrentElement();
this.handler.onItemPop(element, false);
}
}
}
//Search
tryPeekProperlyNestedBodyElement() {
//Properly nested <body> element (should be second element in stack).
return this.stackTop >= 1 && this.tagIDs[1] === $.BODY ? this.items[1] : null;
}
contains(element) {
return this._indexOf(element) > -1;
}
getCommonAncestor(element) {
const elementIdx = this._indexOf(element) - 1;
return elementIdx >= 0 ? this.items[elementIdx] : null;
}
isRootHtmlElementCurrent() {
return this.stackTop === 0 && this.tagIDs[0] === $.HTML;
}
//Element in scope
hasInDynamicScope(tagName, htmlScope) {
for (let i = this.stackTop; i >= 0; i--) {
const tn = this.tagIDs[i];
switch (this.treeAdapter.getNamespaceURI(this.items[i])) {
case NS.HTML: {
if (tn === tagName)
return true;
if (htmlScope.has(tn))
return false;
break;
}
case NS.SVG: {
if (SCOPING_ELEMENTS_SVG.has(tn))
return false;
break;
}
case NS.MATHML: {
if (SCOPING_ELEMENTS_MATHML.has(tn))
return false;
break;
}
}
}
return true;
}
hasInScope(tagName) {
return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML);
}
hasInListItemScope(tagName) {
return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_LIST);
}
hasInButtonScope(tagName) {
return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_BUTTON);
}
hasNumberedHeaderInScope() {
for (let i = this.stackTop; i >= 0; i--) {
const tn = this.tagIDs[i];
switch (this.treeAdapter.getNamespaceURI(this.items[i])) {
case NS.HTML: {
if (NUMBERED_HEADERS.has(tn))
return true;
if (SCOPING_ELEMENTS_HTML.has(tn))
return false;
break;
}
case NS.SVG: {
if (SCOPING_ELEMENTS_SVG.has(tn))
return false;
break;
}
case NS.MATHML: {
if (SCOPING_ELEMENTS_MATHML.has(tn))
return false;
break;
}
}
}
return true;
}
hasInTableScope(tagName) {
for (let i = this.stackTop; i >= 0; i--) {
if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {
continue;
}
switch (this.tagIDs[i]) {
case tagName: {
return true;
}
case $.TABLE:
case $.HTML: {
return false;
}
}
}
return true;
}
hasTableBodyContextInTableScope() {
for (let i = this.stackTop; i >= 0; i--) {
if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {
continue;
}
switch (this.tagIDs[i]) {
case $.TBODY:
case $.THEAD:
case $.TFOOT: {
return true;
}
case $.TABLE:
case $.HTML: {
return false;
}
}
}
return true;
}
hasInSelectScope(tagName) {
for (let i = this.stackTop; i >= 0; i--) {
if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {
continue;
}
switch (this.tagIDs[i]) {
case tagName: {
return true;
}
case $.OPTION:
case $.OPTGROUP: {
break;
}
default: {
return false;
}
}
}
return true;
}
//Implied end tags
generateImpliedEndTags() {
while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED.has(this.currentTagId)) {
this.pop();
}
}
generateImpliedEndTagsThoroughly() {
while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {
this.pop();
}
}
generateImpliedEndTagsWithExclusion(exclusionId) {
while (this.currentTagId !== undefined &&
this.currentTagId !== exclusionId &&
IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {
this.pop();
}
}
}

60
node_modules/parse5/dist/serializer/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,60 @@
import type { TreeAdapter, TreeAdapterTypeMap } from '../tree-adapters/interface.js';
import { type DefaultTreeAdapterMap } from '../tree-adapters/default.js';
export interface SerializerOptions<T extends TreeAdapterTypeMap> {
/**
* Specifies input tree format.
*
* @default `treeAdapters.default`
*/
treeAdapter?: TreeAdapter<T>;
/**
* The [scripting flag](https://html.spec.whatwg.org/multipage/parsing.html#scripting-flag). If set
* to `true`, `noscript` element content will not be escaped.
*
* @default `true`
*/
scriptingEnabled?: boolean;
}
/**
* Serializes an AST node to an HTML string.
*
* @example
*
* ```js
* const parse5 = require('parse5');
*
* const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');
*
* // Serializes a document.
* const html = parse5.serialize(document);
*
* // Serializes the <html> element content.
* const str = parse5.serialize(document.childNodes[1]);
*
* console.log(str); //> '<head></head><body>Hi there!</body>'
* ```
*
* @param node Node to serialize.
* @param options Serialization options.
*/
export declare function serialize<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>(node: T['parentNode'], options?: SerializerOptions<T>): string;
/**
* Serializes an AST element node to an HTML string, including the element node.
*
* @example
*
* ```js
* const parse5 = require('parse5');
*
* const document = parse5.parseFragment('<div>Hello, <b>world</b>!</div>');
*
* // Serializes the <div> element.
* const str = parse5.serializeOuter(document.childNodes[0]);
*
* console.log(str); //> '<div>Hello, <b>world</b>!</div>'
* ```
*
* @param node Node to serialize.
* @param options Serialization options.
*/
export declare function serializeOuter<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>(node: T['node'], options?: SerializerOptions<T>): string;

168
node_modules/parse5/dist/serializer/index.js generated vendored Normal file
View File

@@ -0,0 +1,168 @@
import { TAG_NAMES as $, NS, hasUnescapedText } from '../common/html.js';
import { escapeText, escapeAttribute } from 'entities/escape';
import { defaultTreeAdapter } from '../tree-adapters/default.js';
// Sets
const VOID_ELEMENTS = new Set([
$.AREA,
$.BASE,
$.BASEFONT,
$.BGSOUND,
$.BR,
$.COL,
$.EMBED,
$.FRAME,
$.HR,
$.IMG,
$.INPUT,
$.KEYGEN,
$.LINK,
$.META,
$.PARAM,
$.SOURCE,
$.TRACK,
$.WBR,
]);
function isVoidElement(node, options) {
return (options.treeAdapter.isElementNode(node) &&
options.treeAdapter.getNamespaceURI(node) === NS.HTML &&
VOID_ELEMENTS.has(options.treeAdapter.getTagName(node)));
}
const defaultOpts = { treeAdapter: defaultTreeAdapter, scriptingEnabled: true };
/**
* Serializes an AST node to an HTML string.
*
* @example
*
* ```js
* const parse5 = require('parse5');
*
* const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');
*
* // Serializes a document.
* const html = parse5.serialize(document);
*
* // Serializes the <html> element content.
* const str = parse5.serialize(document.childNodes[1]);
*
* console.log(str); //> '<head></head><body>Hi there!</body>'
* ```
*
* @param node Node to serialize.
* @param options Serialization options.
*/
export function serialize(node, options) {
const opts = { ...defaultOpts, ...options };
if (isVoidElement(node, opts)) {
return '';
}
return serializeChildNodes(node, opts);
}
/**
* Serializes an AST element node to an HTML string, including the element node.
*
* @example
*
* ```js
* const parse5 = require('parse5');
*
* const document = parse5.parseFragment('<div>Hello, <b>world</b>!</div>');
*
* // Serializes the <div> element.
* const str = parse5.serializeOuter(document.childNodes[0]);
*
* console.log(str); //> '<div>Hello, <b>world</b>!</div>'
* ```
*
* @param node Node to serialize.
* @param options Serialization options.
*/
export function serializeOuter(node, options) {
const opts = { ...defaultOpts, ...options };
return serializeNode(node, opts);
}
function serializeChildNodes(parentNode, options) {
let html = '';
// Get container of the child nodes
const container = options.treeAdapter.isElementNode(parentNode) &&
options.treeAdapter.getTagName(parentNode) === $.TEMPLATE &&
options.treeAdapter.getNamespaceURI(parentNode) === NS.HTML
? options.treeAdapter.getTemplateContent(parentNode)
: parentNode;
const childNodes = options.treeAdapter.getChildNodes(container);
if (childNodes) {
for (const currentNode of childNodes) {
html += serializeNode(currentNode, options);
}
}
return html;
}
function serializeNode(node, options) {
if (options.treeAdapter.isElementNode(node)) {
return serializeElement(node, options);
}
if (options.treeAdapter.isTextNode(node)) {
return serializeTextNode(node, options);
}
if (options.treeAdapter.isCommentNode(node)) {
return serializeCommentNode(node, options);
}
if (options.treeAdapter.isDocumentTypeNode(node)) {
return serializeDocumentTypeNode(node, options);
}
// Return an empty string for unknown nodes
return '';
}
function serializeElement(node, options) {
const tn = options.treeAdapter.getTagName(node);
return `<${tn}${serializeAttributes(node, options)}>${isVoidElement(node, options) ? '' : `${serializeChildNodes(node, options)}</${tn}>`}`;
}
function serializeAttributes(node, { treeAdapter }) {
let html = '';
for (const attr of treeAdapter.getAttrList(node)) {
html += ' ';
if (attr.namespace) {
switch (attr.namespace) {
case NS.XML: {
html += `xml:${attr.name}`;
break;
}
case NS.XMLNS: {
if (attr.name !== 'xmlns') {
html += 'xmlns:';
}
html += attr.name;
break;
}
case NS.XLINK: {
html += `xlink:${attr.name}`;
break;
}
default: {
html += `${attr.prefix}:${attr.name}`;
}
}
}
else {
html += attr.name;
}
html += `="${escapeAttribute(attr.value)}"`;
}
return html;
}
function serializeTextNode(node, options) {
const { treeAdapter } = options;
const content = treeAdapter.getTextNodeContent(node);
const parent = treeAdapter.getParentNode(node);
const parentTn = parent && treeAdapter.isElementNode(parent) && treeAdapter.getTagName(parent);
return parentTn &&
treeAdapter.getNamespaceURI(parent) === NS.HTML &&
hasUnescapedText(parentTn, options.scriptingEnabled)
? content
: escapeText(content);
}
function serializeCommentNode(node, { treeAdapter }) {
return `<!--${treeAdapter.getCommentNodeContent(node)}-->`;
}
function serializeDocumentTypeNode(node, { treeAdapter }) {
return `<!DOCTYPE ${treeAdapter.getDocumentTypeNodeName(node)}>`;
}

247
node_modules/parse5/dist/tokenizer/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,247 @@
import { Preprocessor } from './preprocessor.js';
import { type Token, type CharacterToken, type DoctypeToken, type TagToken, type EOFToken, type CommentToken, type Attribute, type Location } from '../common/token.js';
import { EntityDecoder } from 'entities/decode';
import { ERR, type ParserErrorHandler } from '../common/error-codes.js';
declare const enum State {
DATA = 0,
RCDATA = 1,
RAWTEXT = 2,
SCRIPT_DATA = 3,
PLAINTEXT = 4,
TAG_OPEN = 5,
END_TAG_OPEN = 6,
TAG_NAME = 7,
RCDATA_LESS_THAN_SIGN = 8,
RCDATA_END_TAG_OPEN = 9,
RCDATA_END_TAG_NAME = 10,
RAWTEXT_LESS_THAN_SIGN = 11,
RAWTEXT_END_TAG_OPEN = 12,
RAWTEXT_END_TAG_NAME = 13,
SCRIPT_DATA_LESS_THAN_SIGN = 14,
SCRIPT_DATA_END_TAG_OPEN = 15,
SCRIPT_DATA_END_TAG_NAME = 16,
SCRIPT_DATA_ESCAPE_START = 17,
SCRIPT_DATA_ESCAPE_START_DASH = 18,
SCRIPT_DATA_ESCAPED = 19,
SCRIPT_DATA_ESCAPED_DASH = 20,
SCRIPT_DATA_ESCAPED_DASH_DASH = 21,
SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN = 22,
SCRIPT_DATA_ESCAPED_END_TAG_OPEN = 23,
SCRIPT_DATA_ESCAPED_END_TAG_NAME = 24,
SCRIPT_DATA_DOUBLE_ESCAPE_START = 25,
SCRIPT_DATA_DOUBLE_ESCAPED = 26,
SCRIPT_DATA_DOUBLE_ESCAPED_DASH = 27,
SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH = 28,
SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN = 29,
SCRIPT_DATA_DOUBLE_ESCAPE_END = 30,
BEFORE_ATTRIBUTE_NAME = 31,
ATTRIBUTE_NAME = 32,
AFTER_ATTRIBUTE_NAME = 33,
BEFORE_ATTRIBUTE_VALUE = 34,
ATTRIBUTE_VALUE_DOUBLE_QUOTED = 35,
ATTRIBUTE_VALUE_SINGLE_QUOTED = 36,
ATTRIBUTE_VALUE_UNQUOTED = 37,
AFTER_ATTRIBUTE_VALUE_QUOTED = 38,
SELF_CLOSING_START_TAG = 39,
BOGUS_COMMENT = 40,
MARKUP_DECLARATION_OPEN = 41,
COMMENT_START = 42,
COMMENT_START_DASH = 43,
COMMENT = 44,
COMMENT_LESS_THAN_SIGN = 45,
COMMENT_LESS_THAN_SIGN_BANG = 46,
COMMENT_LESS_THAN_SIGN_BANG_DASH = 47,
COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH = 48,
COMMENT_END_DASH = 49,
COMMENT_END = 50,
COMMENT_END_BANG = 51,
DOCTYPE = 52,
BEFORE_DOCTYPE_NAME = 53,
DOCTYPE_NAME = 54,
AFTER_DOCTYPE_NAME = 55,
AFTER_DOCTYPE_PUBLIC_KEYWORD = 56,
BEFORE_DOCTYPE_PUBLIC_IDENTIFIER = 57,
DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED = 58,
DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED = 59,
AFTER_DOCTYPE_PUBLIC_IDENTIFIER = 60,
BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS = 61,
AFTER_DOCTYPE_SYSTEM_KEYWORD = 62,
BEFORE_DOCTYPE_SYSTEM_IDENTIFIER = 63,
DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED = 64,
DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED = 65,
AFTER_DOCTYPE_SYSTEM_IDENTIFIER = 66,
BOGUS_DOCTYPE = 67,
CDATA_SECTION = 68,
CDATA_SECTION_BRACKET = 69,
CDATA_SECTION_END = 70,
CHARACTER_REFERENCE = 71,
AMBIGUOUS_AMPERSAND = 72
}
export declare const TokenizerMode: {
readonly DATA: State.DATA;
readonly RCDATA: State.RCDATA;
readonly RAWTEXT: State.RAWTEXT;
readonly SCRIPT_DATA: State.SCRIPT_DATA;
readonly PLAINTEXT: State.PLAINTEXT;
readonly CDATA_SECTION: State.CDATA_SECTION;
};
export interface TokenizerOptions {
sourceCodeLocationInfo?: boolean;
}
export interface TokenHandler {
onComment(token: CommentToken): void;
onDoctype(token: DoctypeToken): void;
onStartTag(token: TagToken): void;
onEndTag(token: TagToken): void;
onEof(token: EOFToken): void;
onCharacter(token: CharacterToken): void;
onNullCharacter(token: CharacterToken): void;
onWhitespaceCharacter(token: CharacterToken): void;
onParseError?: ParserErrorHandler | null;
}
export declare class Tokenizer {
protected options: TokenizerOptions;
protected handler: TokenHandler;
preprocessor: Preprocessor;
protected paused: boolean;
/** Ensures that the parsing loop isn't run multiple times at once. */
protected inLoop: boolean;
/**
* Indicates that the current adjusted node exists, is not an element in the HTML namespace,
* and that it is not an integration point for either MathML or HTML.
*
* @see {@link https://html.spec.whatwg.org/multipage/parsing.html#tree-construction}
*/
inForeignNode: boolean;
lastStartTagName: string;
active: boolean;
state: State;
protected returnState: State;
/**
* We use `entities`' `EntityDecoder` to parse character references.
*
* All of the following states are handled by the `EntityDecoder`:
*
* - Named character reference state
* - Numeric character reference state
* - Hexademical character reference start state
* - Hexademical character reference state
* - Decimal character reference state
* - Numeric character reference end state
*/
protected entityDecoder: EntityDecoder;
protected entityStartPos: number;
protected consumedAfterSnapshot: number;
protected currentLocation: Location | null;
protected currentCharacterToken: CharacterToken | null;
protected currentToken: Token | null;
protected currentAttr: Attribute;
constructor(options: TokenizerOptions, handler: TokenHandler);
protected _err(code: ERR, cpOffset?: number): void;
protected getCurrentLocation(offset: number): Location | null;
protected _runParsingLoop(): void;
pause(): void;
resume(writeCallback?: () => void): void;
write(chunk: string, isLastChunk: boolean, writeCallback?: () => void): void;
insertHtmlAtCurrentPos(chunk: string): void;
protected _ensureHibernation(): boolean;
protected _consume(): number;
protected _advanceBy(count: number): void;
protected _consumeSequenceIfMatch(pattern: string, caseSensitive: boolean): boolean;
protected _createStartTagToken(): void;
protected _createEndTagToken(): void;
protected _createCommentToken(offset: number): void;
protected _createDoctypeToken(initialName: string | null): void;
protected _createCharacterToken(type: CharacterToken['type'], chars: string): void;
protected _createAttr(attrNameFirstCh: string): void;
protected _leaveAttrName(): void;
protected _leaveAttrValue(): void;
protected prepareToken(ct: Token): void;
protected emitCurrentTagToken(): void;
protected emitCurrentComment(ct: CommentToken): void;
protected emitCurrentDoctype(ct: DoctypeToken): void;
protected _emitCurrentCharacterToken(nextLocation: Location | null): void;
protected _emitEOFToken(): void;
protected _appendCharToCurrentCharacterToken(type: CharacterToken['type'], ch: string): void;
protected _emitCodePoint(cp: number): void;
protected _emitChars(ch: string): void;
protected _startCharacterReference(): void;
protected _isCharacterReferenceInAttribute(): boolean;
protected _flushCodePointConsumedAsCharacterReference(cp: number): void;
protected _callState(cp: number): void;
protected _stateData(cp: number): void;
protected _stateRcdata(cp: number): void;
protected _stateRawtext(cp: number): void;
protected _stateScriptData(cp: number): void;
protected _statePlaintext(cp: number): void;
protected _stateTagOpen(cp: number): void;
protected _stateEndTagOpen(cp: number): void;
protected _stateTagName(cp: number): void;
protected _stateRcdataLessThanSign(cp: number): void;
protected _stateRcdataEndTagOpen(cp: number): void;
protected handleSpecialEndTag(_cp: number): boolean;
protected _stateRcdataEndTagName(cp: number): void;
protected _stateRawtextLessThanSign(cp: number): void;
protected _stateRawtextEndTagOpen(cp: number): void;
protected _stateRawtextEndTagName(cp: number): void;
protected _stateScriptDataLessThanSign(cp: number): void;
protected _stateScriptDataEndTagOpen(cp: number): void;
protected _stateScriptDataEndTagName(cp: number): void;
protected _stateScriptDataEscapeStart(cp: number): void;
protected _stateScriptDataEscapeStartDash(cp: number): void;
protected _stateScriptDataEscaped(cp: number): void;
protected _stateScriptDataEscapedDash(cp: number): void;
protected _stateScriptDataEscapedDashDash(cp: number): void;
protected _stateScriptDataEscapedLessThanSign(cp: number): void;
protected _stateScriptDataEscapedEndTagOpen(cp: number): void;
protected _stateScriptDataEscapedEndTagName(cp: number): void;
protected _stateScriptDataDoubleEscapeStart(cp: number): void;
protected _stateScriptDataDoubleEscaped(cp: number): void;
protected _stateScriptDataDoubleEscapedDash(cp: number): void;
protected _stateScriptDataDoubleEscapedDashDash(cp: number): void;
protected _stateScriptDataDoubleEscapedLessThanSign(cp: number): void;
protected _stateScriptDataDoubleEscapeEnd(cp: number): void;
protected _stateBeforeAttributeName(cp: number): void;
protected _stateAttributeName(cp: number): void;
protected _stateAfterAttributeName(cp: number): void;
protected _stateBeforeAttributeValue(cp: number): void;
protected _stateAttributeValueDoubleQuoted(cp: number): void;
protected _stateAttributeValueSingleQuoted(cp: number): void;
protected _stateAttributeValueUnquoted(cp: number): void;
protected _stateAfterAttributeValueQuoted(cp: number): void;
protected _stateSelfClosingStartTag(cp: number): void;
protected _stateBogusComment(cp: number): void;
protected _stateMarkupDeclarationOpen(cp: number): void;
protected _stateCommentStart(cp: number): void;
protected _stateCommentStartDash(cp: number): void;
protected _stateComment(cp: number): void;
protected _stateCommentLessThanSign(cp: number): void;
protected _stateCommentLessThanSignBang(cp: number): void;
protected _stateCommentLessThanSignBangDash(cp: number): void;
protected _stateCommentLessThanSignBangDashDash(cp: number): void;
protected _stateCommentEndDash(cp: number): void;
protected _stateCommentEnd(cp: number): void;
protected _stateCommentEndBang(cp: number): void;
protected _stateDoctype(cp: number): void;
protected _stateBeforeDoctypeName(cp: number): void;
protected _stateDoctypeName(cp: number): void;
protected _stateAfterDoctypeName(cp: number): void;
protected _stateAfterDoctypePublicKeyword(cp: number): void;
protected _stateBeforeDoctypePublicIdentifier(cp: number): void;
protected _stateDoctypePublicIdentifierDoubleQuoted(cp: number): void;
protected _stateDoctypePublicIdentifierSingleQuoted(cp: number): void;
protected _stateAfterDoctypePublicIdentifier(cp: number): void;
protected _stateBetweenDoctypePublicAndSystemIdentifiers(cp: number): void;
protected _stateAfterDoctypeSystemKeyword(cp: number): void;
protected _stateBeforeDoctypeSystemIdentifier(cp: number): void;
protected _stateDoctypeSystemIdentifierDoubleQuoted(cp: number): void;
protected _stateDoctypeSystemIdentifierSingleQuoted(cp: number): void;
protected _stateAfterDoctypeSystemIdentifier(cp: number): void;
protected _stateBogusDoctype(cp: number): void;
protected _stateCdataSection(cp: number): void;
protected _stateCdataSectionBracket(cp: number): void;
protected _stateCdataSectionEnd(cp: number): void;
protected _stateCharacterReference(): void;
protected _stateAmbiguousAmpersand(cp: number): void;
}
export {};

2710
node_modules/parse5/dist/tokenizer/index.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

36
node_modules/parse5/dist/tokenizer/preprocessor.d.ts generated vendored Normal file
View File

@@ -0,0 +1,36 @@
import { ERR, type ParserError, type ParserErrorHandler } from '../common/error-codes.js';
export declare class Preprocessor {
private handler;
html: string;
pos: number;
private lastGapPos;
private gapStack;
private skipNextNewLine;
lastChunkWritten: boolean;
endOfChunkHit: boolean;
bufferWaterline: number;
private isEol;
private lineStartPos;
droppedBufferSize: number;
line: number;
constructor(handler: {
onParseError?: ParserErrorHandler | null;
});
/** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */
get col(): number;
get offset(): number;
getError(code: ERR, cpOffset: number): ParserError;
private lastErrOffset;
private _err;
private _addGap;
private _processSurrogate;
willDropParsedChunk(): boolean;
dropParsedChunk(): void;
write(chunk: string, isLastChunk: boolean): void;
insertHtmlAtCurrentPos(chunk: string): void;
startsWith(pattern: string, caseSensitive: boolean): boolean;
peek(offset: number): number;
advance(): number;
private _checkForProblematicCharacters;
retreat(count: number): void;
}

196
node_modules/parse5/dist/tokenizer/preprocessor.js generated vendored Normal file
View File

@@ -0,0 +1,196 @@
import { CODE_POINTS as $, getSurrogatePairCodePoint, isControlCodePoint, isSurrogate, isSurrogatePair, isUndefinedCodePoint, } from '../common/unicode.js';
import { ERR } from '../common/error-codes.js';
//Const
const DEFAULT_BUFFER_WATERLINE = 1 << 16;
//Preprocessor
//NOTE: HTML input preprocessing
//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream)
export class Preprocessor {
constructor(handler) {
this.handler = handler;
this.html = '';
this.pos = -1;
// NOTE: Initial `lastGapPos` is -2, to ensure `col` on initialisation is 0
this.lastGapPos = -2;
this.gapStack = [];
this.skipNextNewLine = false;
this.lastChunkWritten = false;
this.endOfChunkHit = false;
this.bufferWaterline = DEFAULT_BUFFER_WATERLINE;
this.isEol = false;
this.lineStartPos = 0;
this.droppedBufferSize = 0;
this.line = 1;
//NOTE: avoid reporting errors twice on advance/retreat
this.lastErrOffset = -1;
}
/** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */
get col() {
return this.pos - this.lineStartPos + Number(this.lastGapPos !== this.pos);
}
get offset() {
return this.droppedBufferSize + this.pos;
}
getError(code, cpOffset) {
const { line, col, offset } = this;
const startCol = col + cpOffset;
const startOffset = offset + cpOffset;
return {
code,
startLine: line,
endLine: line,
startCol,
endCol: startCol,
startOffset,
endOffset: startOffset,
};
}
_err(code) {
if (this.handler.onParseError && this.lastErrOffset !== this.offset) {
this.lastErrOffset = this.offset;
this.handler.onParseError(this.getError(code, 0));
}
}
_addGap() {
this.gapStack.push(this.lastGapPos);
this.lastGapPos = this.pos;
}
_processSurrogate(cp) {
//NOTE: try to peek a surrogate pair
if (this.pos !== this.html.length - 1) {
const nextCp = this.html.charCodeAt(this.pos + 1);
if (isSurrogatePair(nextCp)) {
//NOTE: we have a surrogate pair. Peek pair character and recalculate code point.
this.pos++;
//NOTE: add a gap that should be avoided during retreat
this._addGap();
return getSurrogatePairCodePoint(cp, nextCp);
}
}
//NOTE: we are at the end of a chunk, therefore we can't infer the surrogate pair yet.
else if (!this.lastChunkWritten) {
this.endOfChunkHit = true;
return $.EOF;
}
//NOTE: isolated surrogate
this._err(ERR.surrogateInInputStream);
return cp;
}
willDropParsedChunk() {
return this.pos > this.bufferWaterline;
}
dropParsedChunk() {
if (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;
}
}
write(chunk, isLastChunk) {
if (this.html.length > 0) {
this.html += chunk;
}
else {
this.html = chunk;
}
this.endOfChunkHit = false;
this.lastChunkWritten = isLastChunk;
}
insertHtmlAtCurrentPos(chunk) {
this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1);
this.endOfChunkHit = false;
}
startsWith(pattern, caseSensitive) {
// Check if our buffer has enough characters
if (this.pos + pattern.length > this.html.length) {
this.endOfChunkHit = !this.lastChunkWritten;
return false;
}
if (caseSensitive) {
return this.html.startsWith(pattern, this.pos);
}
for (let i = 0; i < pattern.length; i++) {
const cp = this.html.charCodeAt(this.pos + i) | 0x20;
if (cp !== pattern.charCodeAt(i)) {
return false;
}
}
return true;
}
peek(offset) {
const pos = this.pos + offset;
if (pos >= this.html.length) {
this.endOfChunkHit = !this.lastChunkWritten;
return $.EOF;
}
const code = this.html.charCodeAt(pos);
return code === $.CARRIAGE_RETURN ? $.LINE_FEED : code;
}
advance() {
this.pos++;
//NOTE: LF should be in the last column of the line
if (this.isEol) {
this.isEol = false;
this.line++;
this.lineStartPos = this.pos;
}
if (this.pos >= this.html.length) {
this.endOfChunkHit = !this.lastChunkWritten;
return $.EOF;
}
let cp = this.html.charCodeAt(this.pos);
//NOTE: all U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters
if (cp === $.CARRIAGE_RETURN) {
this.isEol = true;
this.skipNextNewLine = true;
return $.LINE_FEED;
}
//NOTE: any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character
//must be ignored.
if (cp === $.LINE_FEED) {
this.isEol = true;
if (this.skipNextNewLine) {
// `line` will be bumped again in the recursive call.
this.line--;
this.skipNextNewLine = false;
this._addGap();
return this.advance();
}
}
this.skipNextNewLine = false;
if (isSurrogate(cp)) {
cp = this._processSurrogate(cp);
}
//OPTIMIZATION: first check if code point is in the common allowed
//range (ASCII alphanumeric, whitespaces, big chunk of BMP)
//before going into detailed performance cost validation.
const isCommonValidRange = this.handler.onParseError === null ||
(cp > 0x1f && cp < 0x7f) ||
cp === $.LINE_FEED ||
cp === $.CARRIAGE_RETURN ||
(cp > 0x9f && cp < 64976);
if (!isCommonValidRange) {
this._checkForProblematicCharacters(cp);
}
return cp;
}
_checkForProblematicCharacters(cp) {
if (isControlCodePoint(cp)) {
this._err(ERR.controlCharacterInInputStream);
}
else if (isUndefinedCodePoint(cp)) {
this._err(ERR.noncharacterInInputStream);
}
}
retreat(count) {
this.pos -= count;
while (this.pos < this.lastGapPos) {
this.lastGapPos = this.gapStack.pop();
this.pos--;
}
this.isEol = false;
}
}

84
node_modules/parse5/dist/tree-adapters/default.d.ts generated vendored Normal file
View File

@@ -0,0 +1,84 @@
import { DOCUMENT_MODE, type NS } from '../common/html.js';
import type { Attribute, Location, ElementLocation } from '../common/token.js';
import type { TreeAdapter, TreeAdapterTypeMap } from './interface.js';
export interface Document {
/** The name of the node. */
nodeName: '#document';
/**
* Document mode.
*
* @see {@link DOCUMENT_MODE} */
mode: DOCUMENT_MODE;
/** The node's children. */
childNodes: ChildNode[];
/** Comment source code location info. Available if location info is enabled. */
sourceCodeLocation?: Location | null;
}
export interface DocumentFragment {
/** The name of the node. */
nodeName: '#document-fragment';
/** The node's children. */
childNodes: ChildNode[];
/** Comment source code location info. Available if location info is enabled. */
sourceCodeLocation?: Location | null;
}
export interface Element {
/** Element tag name. Same as {@link tagName}. */
nodeName: string;
/** Element tag name. Same as {@link nodeName}. */
tagName: string;
/** List of element attributes. */
attrs: Attribute[];
/** Element namespace. */
namespaceURI: NS;
/** Element source code location info, with attributes. Available if location info is enabled. */
sourceCodeLocation?: ElementLocation | null;
/** Parent node. */
parentNode: ParentNode | null;
/** The node's children. */
childNodes: ChildNode[];
}
export interface CommentNode {
/** The name of the node. */
nodeName: '#comment';
/** Parent node. */
parentNode: ParentNode | null;
/** Comment text. */
data: string;
/** Comment source code location info. Available if location info is enabled. */
sourceCodeLocation?: Location | null;
}
export interface TextNode {
nodeName: '#text';
/** Parent node. */
parentNode: ParentNode | null;
/** Text content. */
value: string;
/** Comment source code location info. Available if location info is enabled. */
sourceCodeLocation?: Location | null;
}
export interface Template extends Element {
nodeName: 'template';
tagName: 'template';
/** The content of a `template` tag. */
content: DocumentFragment;
}
export interface DocumentType {
/** The name of the node. */
nodeName: '#documentType';
/** Parent node. */
parentNode: ParentNode | null;
/** Document type name. */
name: string;
/** Document type public identifier. */
publicId: string;
/** Document type system identifier. */
systemId: string;
/** Comment source code location info. Available if location info is enabled. */
sourceCodeLocation?: Location | null;
}
export type ParentNode = Document | DocumentFragment | Element | Template;
export type ChildNode = Element | Template | CommentNode | TextNode | DocumentType;
export type Node = ParentNode | ChildNode;
export type DefaultTreeAdapterMap = TreeAdapterTypeMap<Node, ParentNode, ChildNode, Document, DocumentFragment, Element, CommentNode, TextNode, Template, DocumentType>;
export declare const defaultTreeAdapter: TreeAdapter<DefaultTreeAdapterMap>;

173
node_modules/parse5/dist/tree-adapters/default.js generated vendored Normal file
View File

@@ -0,0 +1,173 @@
import { DOCUMENT_MODE } from '../common/html.js';
export const defaultTreeAdapter = {
//Node construction
createDocument() {
return {
nodeName: '#document',
mode: DOCUMENT_MODE.NO_QUIRKS,
childNodes: [],
};
},
createDocumentFragment() {
return {
nodeName: '#document-fragment',
childNodes: [],
};
},
createElement(tagName, namespaceURI, attrs) {
return {
nodeName: tagName,
tagName,
attrs,
namespaceURI,
childNodes: [],
parentNode: null,
};
},
createCommentNode(data) {
return {
nodeName: '#comment',
data,
parentNode: null,
};
},
createTextNode(value) {
return {
nodeName: '#text',
value,
parentNode: null,
};
},
//Tree mutation
appendChild(parentNode, newNode) {
parentNode.childNodes.push(newNode);
newNode.parentNode = parentNode;
},
insertBefore(parentNode, newNode, referenceNode) {
const insertionIdx = parentNode.childNodes.indexOf(referenceNode);
parentNode.childNodes.splice(insertionIdx, 0, newNode);
newNode.parentNode = parentNode;
},
setTemplateContent(templateElement, contentElement) {
templateElement.content = contentElement;
},
getTemplateContent(templateElement) {
return templateElement.content;
},
setDocumentType(document, name, publicId, systemId) {
const doctypeNode = document.childNodes.find((node) => node.nodeName === '#documentType');
if (doctypeNode) {
doctypeNode.name = name;
doctypeNode.publicId = publicId;
doctypeNode.systemId = systemId;
}
else {
const node = {
nodeName: '#documentType',
name,
publicId,
systemId,
parentNode: null,
};
defaultTreeAdapter.appendChild(document, node);
}
},
setDocumentMode(document, mode) {
document.mode = mode;
},
getDocumentMode(document) {
return document.mode;
},
detachNode(node) {
if (node.parentNode) {
const idx = node.parentNode.childNodes.indexOf(node);
node.parentNode.childNodes.splice(idx, 1);
node.parentNode = null;
}
},
insertText(parentNode, text) {
if (parentNode.childNodes.length > 0) {
const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1];
if (defaultTreeAdapter.isTextNode(prevNode)) {
prevNode.value += text;
return;
}
}
defaultTreeAdapter.appendChild(parentNode, defaultTreeAdapter.createTextNode(text));
},
insertTextBefore(parentNode, text, referenceNode) {
const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];
if (prevNode && defaultTreeAdapter.isTextNode(prevNode)) {
prevNode.value += text;
}
else {
defaultTreeAdapter.insertBefore(parentNode, defaultTreeAdapter.createTextNode(text), referenceNode);
}
},
adoptAttributes(recipient, attrs) {
const recipientAttrsMap = new Set(recipient.attrs.map((attr) => attr.name));
for (let j = 0; j < attrs.length; j++) {
if (!recipientAttrsMap.has(attrs[j].name)) {
recipient.attrs.push(attrs[j]);
}
}
},
//Tree traversing
getFirstChild(node) {
return node.childNodes[0];
},
getChildNodes(node) {
return node.childNodes;
},
getParentNode(node) {
return node.parentNode;
},
getAttrList(element) {
return element.attrs;
},
//Node data
getTagName(element) {
return element.tagName;
},
getNamespaceURI(element) {
return element.namespaceURI;
},
getTextNodeContent(textNode) {
return textNode.value;
},
getCommentNodeContent(commentNode) {
return commentNode.data;
},
getDocumentTypeNodeName(doctypeNode) {
return doctypeNode.name;
},
getDocumentTypeNodePublicId(doctypeNode) {
return doctypeNode.publicId;
},
getDocumentTypeNodeSystemId(doctypeNode) {
return doctypeNode.systemId;
},
//Node types
isTextNode(node) {
return node.nodeName === '#text';
},
isCommentNode(node) {
return node.nodeName === '#comment';
},
isDocumentTypeNode(node) {
return node.nodeName === '#documentType';
},
isElementNode(node) {
return Object.prototype.hasOwnProperty.call(node, 'tagName');
},
// Source code location
setNodeSourceCodeLocation(node, location) {
node.sourceCodeLocation = location;
},
getNodeSourceCodeLocation(node) {
return node.sourceCodeLocation;
},
updateNodeSourceCodeLocation(node, endLocation) {
node.sourceCodeLocation = { ...node.sourceCodeLocation, ...endLocation };
},
};

255
node_modules/parse5/dist/tree-adapters/interface.d.ts generated vendored Normal file
View File

@@ -0,0 +1,255 @@
import type { DOCUMENT_MODE, NS } from '../common/html.js';
import type { Attribute, ElementLocation } from '../common/token.js';
export interface TreeAdapterTypeMap<Node = unknown, ParentNode = unknown, ChildNode = unknown, Document = unknown, DocumentFragment = unknown, Element = unknown, CommentNode = unknown, TextNode = unknown, Template = unknown, DocumentType = unknown> {
node: Node;
parentNode: ParentNode;
childNode: ChildNode;
document: Document;
documentFragment: DocumentFragment;
element: Element;
commentNode: CommentNode;
textNode: TextNode;
template: Template;
documentType: DocumentType;
}
/**
* Tree adapter is a set of utility functions that provides minimal required abstraction layer beetween parser and a specific AST format.
* Note that `TreeAdapter` is not designed to be a general purpose AST manipulation library. You can build such library
* on top of existing `TreeAdapter` or use one of the existing libraries from npm.
*
* @see Have a look at the default tree adapter for reference.
*/
export interface TreeAdapter<T extends TreeAdapterTypeMap = TreeAdapterTypeMap> {
/**
* Copies attributes to the given element. Only attributes that are not yet present in the element are copied.
*
* @param recipient - Element to copy attributes into.
* @param attrs - Attributes to copy.
*/
adoptAttributes(recipient: T['element'], attrs: Attribute[]): void;
/**
* Appends a child node to the given parent node.
*
* @param parentNode - Parent node.
* @param newNode - Child node.
*/
appendChild(parentNode: T['parentNode'], newNode: T['childNode']): void;
/**
* Creates a comment node.
*
* @param data - Comment text.
*/
createCommentNode(data: string): T['commentNode'];
/**
* Creates a text node.
*
* @param value - Text.
*/
createTextNode(value: string): T['textNode'];
/**
* Creates a document node.
*/
createDocument(): T['document'];
/**
* Creates a document fragment node.
*/
createDocumentFragment(): T['documentFragment'];
/**
* Creates an element node.
*
* @param tagName - Tag name of the element.
* @param namespaceURI - Namespace of the element.
* @param attrs - Attribute name-value pair array. Foreign attributes may contain `namespace` and `prefix` fields as well.
*/
createElement(tagName: string, namespaceURI: NS, attrs: Attribute[]): T['element'];
/**
* Removes a node from its parent.
*
* @param node - Node to remove.
*/
detachNode(node: T['childNode']): void;
/**
* Returns the given element's attributes in an array, in the form of name-value pairs.
* Foreign attributes may contain `namespace` and `prefix` fields as well.
*
* @param element - Element.
*/
getAttrList(element: T['element']): Attribute[];
/**
* Returns the given node's children in an array.
*
* @param node - Node.
*/
getChildNodes(node: T['parentNode']): T['childNode'][];
/**
* Returns the given comment node's content.
*
* @param commentNode - Comment node.
*/
getCommentNodeContent(commentNode: T['commentNode']): string;
/**
* Returns [document mode](https://dom.spec.whatwg.org/#concept-document-limited-quirks).
*
* @param document - Document node.
*/
getDocumentMode(document: T['document']): DOCUMENT_MODE;
/**
* Returns the given document type node's name.
*
* @param doctypeNode - Document type node.
*/
getDocumentTypeNodeName(doctypeNode: T['documentType']): string;
/**
* Returns the given document type node's public identifier.
*
* @param doctypeNode - Document type node.
*/
getDocumentTypeNodePublicId(doctypeNode: T['documentType']): string;
/**
* Returns the given document type node's system identifier.
*
* @param doctypeNode - Document type node.
*/
getDocumentTypeNodeSystemId(doctypeNode: T['documentType']): string;
/**
* Returns the first child of the given node.
*
* @param node - Node.
*/
getFirstChild(node: T['parentNode']): T['childNode'] | null;
/**
* Returns the given element's namespace.
*
* @param element - Element.
*/
getNamespaceURI(element: T['element']): NS;
/**
* Returns the given node's source code location information.
*
* @param node - Node.
*/
getNodeSourceCodeLocation(node: T['node']): ElementLocation | undefined | null;
/**
* Returns the given node's parent.
*
* @param node - Node.
*/
getParentNode(node: T['node']): T['parentNode'] | null;
/**
* Returns the given element's tag name.
*
* @param element - Element.
*/
getTagName(element: T['element']): string;
/**
* Returns the given text node's content.
*
* @param textNode - Text node.
*/
getTextNodeContent(textNode: T['textNode']): string;
/**
* Returns the `<template>` element content element.
*
* @param templateElement - `<template>` element.
*/
getTemplateContent(templateElement: T['template']): T['documentFragment'];
/**
* Inserts a child node to the given parent node before the given reference node.
*
* @param parentNode - Parent node.
* @param newNode - Child node.
* @param referenceNode - Reference node.
*/
insertBefore(parentNode: T['parentNode'], newNode: T['childNode'], referenceNode: T['childNode']): void;
/**
* Inserts text into a node. If the last child of the node is a text node, the provided text will be appended to the
* text node content. Otherwise, inserts a new text node with the given text.
*
* @param parentNode - Node to insert text into.
* @param text - Text to insert.
*/
insertText(parentNode: T['parentNode'], text: string): void;
/**
* Inserts text into a sibling node that goes before the reference node. If this sibling node is the text node,
* the provided text will be appended to the text node content. Otherwise, inserts a new sibling text node with
* the given text before the reference node.
*
* @param parentNode - Node to insert text into.
* @param text - Text to insert.
* @param referenceNode - Node to insert text before.
*/
insertTextBefore(parentNode: T['parentNode'], text: string, referenceNode: T['childNode']): void;
/**
* Determines if the given node is a comment node.
*
* @param node - Node.
*/
isCommentNode(node: T['node']): node is T['commentNode'];
/**
* Determines if the given node is a document type node.
*
* @param node - Node.
*/
isDocumentTypeNode(node: T['node']): node is T['documentType'];
/**
* Determines if the given node is an element.
*
* @param node - Node.
*/
isElementNode(node: T['node']): node is T['element'];
/**
* Determines if the given node is a text node.
*
* @param node - Node.
*/
isTextNode(node: T['node']): node is T['textNode'];
/**
* Sets the [document mode](https://dom.spec.whatwg.org/#concept-document-limited-quirks).
*
* @param document - Document node.
* @param mode - Document mode.
*/
setDocumentMode(document: T['document'], mode: DOCUMENT_MODE): void;
/**
* Sets the document type. If the `document` already contains a document type node, the `name`, `publicId` and `systemId`
* properties of this node will be updated with the provided values. Otherwise, creates a new document type node
* with the given properties and inserts it into the `document`.
*
* @param document - Document node.
* @param name - Document type name.
* @param publicId - Document type public identifier.
* @param systemId - Document type system identifier.
*/
setDocumentType(document: T['document'], name: string, publicId: string, systemId: string): void;
/**
* Attaches source code location information to the node.
*
* @param node - Node.
*/
setNodeSourceCodeLocation(node: T['node'], location: ElementLocation | null): void;
/**
* Updates the source code location information of the node.
*
* @param node - Node.
*/
updateNodeSourceCodeLocation(node: T['node'], location: Partial<ElementLocation>): void;
/**
* Sets the `<template>` element content element.
*
* @param templateElement - `<template>` element.
* @param contentElement - Content element.
*/
setTemplateContent(templateElement: T['template'], contentElement: T['documentFragment']): void;
/**
* Optional callback for elements being pushed to the stack of open elements.
*
* @param element The element being pushed to the stack of open elements.
*/
onItemPush?: (item: T['element']) => void;
/**
* Optional callback for elements being popped from the stack of open elements.
*
* @param item The element being popped.
*/
onItemPop?: (item: T['element'], newTop: T['parentNode']) => void;
}

1
node_modules/parse5/dist/tree-adapters/interface.js generated vendored Normal file
View File

@@ -0,0 +1 @@
export {};

11
node_modules/parse5/node_modules/entities/LICENSE generated vendored Normal file
View File

@@ -0,0 +1,11 @@
Copyright (c) Felix Böhm
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@@ -0,0 +1 @@
export * from "./dist/commonjs/decode.js";

3
node_modules/parse5/node_modules/entities/decode.js generated vendored Normal file
View File

@@ -0,0 +1,3 @@
// Make exports work in Node < 12
// eslint-disable-next-line no-undef, unicorn/prefer-module
module.exports = require("./dist/commonjs/decode.js");

View File

@@ -0,0 +1,19 @@
/**
* Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.
*/
export declare const fromCodePoint: (...codePoints: number[]) => string;
/**
* Replace the given code point with a replacement character if it is a
* surrogate or is outside the valid range. Otherwise return the code
* point unchanged.
*/
export declare function replaceCodePoint(codePoint: number): number;
/**
* Replace the code point if relevant, then convert it to a string.
*
* @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.
* @param codePoint The code point to decode.
* @returns The decoded code point.
*/
export declare function decodeCodePoint(codePoint: number): string;
//# sourceMappingURL=decode-codepoint.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"decode-codepoint.d.ts","sourceRoot":"","sources":["../../src/decode-codepoint.ts"],"names":[],"mappings":"AAkCA;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,CAAC,GAAG,UAAU,EAAE,MAAM,EAAE,KAAK,MAgBpD,CAAC;AAEN;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAS1D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD"}

View File

@@ -0,0 +1,77 @@
"use strict";
// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fromCodePoint = void 0;
exports.replaceCodePoint = replaceCodePoint;
exports.decodeCodePoint = decodeCodePoint;
const decodeMap = new Map([
[0, 65533],
// C1 Unicode control character reference replacements
[128, 8364],
[130, 8218],
[131, 402],
[132, 8222],
[133, 8230],
[134, 8224],
[135, 8225],
[136, 710],
[137, 8240],
[138, 352],
[139, 8249],
[140, 338],
[142, 381],
[145, 8216],
[146, 8217],
[147, 8220],
[148, 8221],
[149, 8226],
[150, 8211],
[151, 8212],
[152, 732],
[153, 8482],
[154, 353],
[155, 8250],
[156, 339],
[158, 382],
[159, 376],
]);
/**
* Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.
*/
exports.fromCodePoint =
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins
(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {
let output = "";
if (codePoint > 65535) {
codePoint -= 65536;
output += String.fromCharCode(((codePoint >>> 10) & 1023) | 55296);
codePoint = 56320 | (codePoint & 1023);
}
output += String.fromCharCode(codePoint);
return output;
};
/**
* Replace the given code point with a replacement character if it is a
* surrogate or is outside the valid range. Otherwise return the code
* point unchanged.
*/
function replaceCodePoint(codePoint) {
var _a;
if ((codePoint >= 55296 && codePoint <= 57343) ||
codePoint > 1114111) {
return 65533;
}
return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;
}
/**
* Replace the code point if relevant, then convert it to a string.
*
* @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.
* @param codePoint The code point to decode.
* @returns The decoded code point.
*/
function decodeCodePoint(codePoint) {
return (0, exports.fromCodePoint)(replaceCodePoint(codePoint));
}
//# sourceMappingURL=decode-codepoint.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"decode-codepoint.js","sourceRoot":"","sources":["../../src/decode-codepoint.ts"],"names":[],"mappings":";AAAA,qHAAqH;;;;AA4DrH,4CASC;AASD,0CAEC;AA9ED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACtB,CAAC,CAAC,EAAE,KAAM,CAAC;IACX,sDAAsD;IACtD,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;;GAEG;AACU,QAAA,aAAa;AACtB,8GAA8G;AAC9G,MAAA,MAAM,CAAC,aAAa,mCACpB,UAAU,SAAiB;IACvB,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,SAAS,GAAG,KAAO,EAAE,CAAC;QACtB,SAAS,IAAI,KAAS,CAAC;QACvB,MAAM,IAAI,MAAM,CAAC,YAAY,CACzB,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,GAAG,IAAM,CAAC,GAAG,KAAO,CAC1C,CAAC;QACF,SAAS,GAAG,KAAO,GAAG,CAAC,SAAS,GAAG,IAAM,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEN;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,SAAiB;;IAC9C,IACI,CAAC,SAAS,IAAI,KAAO,IAAI,SAAS,IAAI,KAAO,CAAC;QAC9C,SAAS,GAAG,OAAU,EACxB,CAAC;QACC,OAAO,KAAO,CAAC;IACnB,CAAC;IAED,OAAO,MAAA,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,mCAAI,SAAS,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,eAAe,CAAC,SAAiB;IAC7C,OAAO,IAAA,qBAAa,EAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;AACtD,CAAC"}

View File

@@ -0,0 +1,209 @@
export declare enum BinTrieFlags {
VALUE_LENGTH = 49152,
BRANCH_LENGTH = 16256,
JUMP_TABLE = 127
}
export declare enum DecodingMode {
/** Entities in text nodes that can end with any character. */
Legacy = 0,
/** Only allow entities terminated with a semicolon. */
Strict = 1,
/** Entities in attributes have limitations on ending characters. */
Attribute = 2
}
/**
* Producers for character reference errors as defined in the HTML spec.
*/
export interface EntityErrorProducer {
missingSemicolonAfterCharacterReference(): void;
absenceOfDigitsInNumericCharacterReference(consumedCharacters: number): void;
validateNumericCharacterReference(code: number): void;
}
/**
* Token decoder with support of writing partial entities.
*/
export declare class EntityDecoder {
/** The tree used to decode entities. */
private readonly decodeTree;
/**
* The function that is called when a codepoint is decoded.
*
* For multi-byte named entities, this will be called multiple times,
* with the second codepoint, and the same `consumed` value.
*
* @param codepoint The decoded codepoint.
* @param consumed The number of bytes consumed by the decoder.
*/
private readonly emitCodePoint;
/** An object that is used to produce errors. */
private readonly errors?;
constructor(
/** The tree used to decode entities. */
decodeTree: Uint16Array,
/**
* The function that is called when a codepoint is decoded.
*
* For multi-byte named entities, this will be called multiple times,
* with the second codepoint, and the same `consumed` value.
*
* @param codepoint The decoded codepoint.
* @param consumed The number of bytes consumed by the decoder.
*/
emitCodePoint: (cp: number, consumed: number) => void,
/** An object that is used to produce errors. */
errors?: EntityErrorProducer | undefined);
/** The current state of the decoder. */
private state;
/** Characters that were consumed while parsing an entity. */
private consumed;
/**
* The result of the entity.
*
* Either the result index of a numeric entity, or the codepoint of a
* numeric entity.
*/
private result;
/** The current index in the decode tree. */
private treeIndex;
/** The number of characters that were consumed in excess. */
private excess;
/** The mode in which the decoder is operating. */
private decodeMode;
/** Resets the instance to make it reusable. */
startEntity(decodeMode: DecodingMode): void;
/**
* Write an entity to the decoder. This can be called multiple times with partial entities.
* If the entity is incomplete, the decoder will return -1.
*
* Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
* entity is incomplete, and resume when the next string is written.
*
* @param input The string containing the entity (or a continuation of the entity).
* @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
*/
write(input: string, offset: number): number;
/**
* Switches between the numeric decimal and hexadecimal states.
*
* Equivalent to the `Numeric character reference state` in the HTML spec.
*
* @param input The string containing the entity (or a continuation of the entity).
* @param offset The current offset.
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
*/
private stateNumericStart;
private addToNumericResult;
/**
* Parses a hexadecimal numeric entity.
*
* Equivalent to the `Hexademical character reference state` in the HTML spec.
*
* @param input The string containing the entity (or a continuation of the entity).
* @param offset The current offset.
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
*/
private stateNumericHex;
/**
* Parses a decimal numeric entity.
*
* Equivalent to the `Decimal character reference state` in the HTML spec.
*
* @param input The string containing the entity (or a continuation of the entity).
* @param offset The current offset.
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
*/
private stateNumericDecimal;
/**
* Validate and emit a numeric entity.
*
* Implements the logic from the `Hexademical character reference start
* state` and `Numeric character reference end state` in the HTML spec.
*
* @param lastCp The last code point of the entity. Used to see if the
* entity was terminated with a semicolon.
* @param expectedLength The minimum number of characters that should be
* consumed. Used to validate that at least one digit
* was consumed.
* @returns The number of characters that were consumed.
*/
private emitNumericEntity;
/**
* Parses a named entity.
*
* Equivalent to the `Named character reference state` in the HTML spec.
*
* @param input The string containing the entity (or a continuation of the entity).
* @param offset The current offset.
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
*/
private stateNamedEntity;
/**
* Emit a named entity that was not terminated with a semicolon.
*
* @returns The number of characters consumed.
*/
private emitNotTerminatedNamedEntity;
/**
* Emit a named entity.
*
* @param result The index of the entity in the decode tree.
* @param valueLength The number of bytes in the entity.
* @param consumed The number of characters consumed.
*
* @returns The number of characters consumed.
*/
private emitNamedEntityData;
/**
* Signal to the parser that the end of the input was reached.
*
* Remaining data will be emitted and relevant errors will be produced.
*
* @returns The number of characters consumed.
*/
end(): number;
}
/**
* Determines the branch of the current node that is taken given the current
* character. This function is used to traverse the trie.
*
* @param decodeTree The trie.
* @param current The current node.
* @param nodeIdx The index right after the current node and its value.
* @param char The current character.
* @returns The index of the next node, or -1 if no branch is taken.
*/
export declare function determineBranch(decodeTree: Uint16Array, current: number, nodeIndex: number, char: number): number;
/**
* Decodes an HTML string.
*
* @param htmlString The string to decode.
* @param mode The decoding mode.
* @returns The decoded string.
*/
export declare function decodeHTML(htmlString: string, mode?: DecodingMode): string;
/**
* Decodes an HTML string in an attribute.
*
* @param htmlAttribute The string to decode.
* @returns The decoded string.
*/
export declare function decodeHTMLAttribute(htmlAttribute: string): string;
/**
* Decodes an HTML string, requiring all entities to be terminated by a semicolon.
*
* @param htmlString The string to decode.
* @returns The decoded string.
*/
export declare function decodeHTMLStrict(htmlString: string): string;
/**
* Decodes an XML string, requiring all entities to be terminated by a semicolon.
*
* @param xmlString The string to decode.
* @returns The decoded string.
*/
export declare function decodeXML(xmlString: string): string;
export { htmlDecodeTree } from "./generated/decode-data-html.js";
export { xmlDecodeTree } from "./generated/decode-data-xml.js";
export { decodeCodePoint, replaceCodePoint, fromCodePoint, } from "./decode-codepoint.js";
//# sourceMappingURL=decode.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../src/decode.ts"],"names":[],"mappings":"AAsBA,oBAAY,YAAY;IACpB,YAAY,QAAwB;IACpC,aAAa,QAAwB;IACrC,UAAU,MAAwB;CACrC;AAuCD,oBAAY,YAAY;IACpB,8DAA8D;IAC9D,MAAM,IAAI;IACV,uDAAuD;IACvD,MAAM,IAAI;IACV,oEAAoE;IACpE,SAAS,IAAI;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,uCAAuC,IAAI,IAAI,CAAC;IAChD,0CAA0C,CACtC,kBAAkB,EAAE,MAAM,GAC3B,IAAI,CAAC;IACR,iCAAiC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACzD;AAED;;GAEG;AACH,qBAAa,aAAa;IAElB,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,gDAAgD;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;;IAbxB,wCAAwC;IACvB,UAAU,EAAE,WAAW;IACxC;;;;;;;;OAQG;IACc,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI;IACtE,gDAAgD;IAC/B,MAAM,CAAC,EAAE,mBAAmB,GAAG,SAAS;IAG7D,wCAAwC;IACxC,OAAO,CAAC,KAAK,CAAkC;IAC/C,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAK;IACrB;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAK;IAEnB,4CAA4C;IAC5C,OAAO,CAAC,SAAS,CAAK;IACtB,6DAA6D;IAC7D,OAAO,CAAC,MAAM,CAAK;IACnB,kDAAkD;IAClD,OAAO,CAAC,UAAU,CAAuB;IAEzC,+CAA+C;IAC/C,WAAW,CAAC,UAAU,EAAE,YAAY,GAAG,IAAI;IAS3C;;;;;;;;;;OAUG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IA8B5C;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,kBAAkB;IAe1B;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAkBvB;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IAsDxB;;;;OAIG;IACH,OAAO,CAAC,4BAA4B;IAYpC;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;;;;;OAMG;IACH,GAAG,IAAI,MAAM;CA6BhB;AAoDD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC3B,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACb,MAAM,CAsCR;AAKD;;;;;;GAMG;AACH,wBAAgB,UAAU,CACtB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,YAAkC,GACzC,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnD;AAGD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EACH,eAAe,EACf,gBAAgB,EAChB,aAAa,GAChB,MAAM,uBAAuB,CAAC"}

View File

@@ -0,0 +1,511 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = exports.EntityDecoder = exports.DecodingMode = exports.BinTrieFlags = void 0;
exports.determineBranch = determineBranch;
exports.decodeHTML = decodeHTML;
exports.decodeHTMLAttribute = decodeHTMLAttribute;
exports.decodeHTMLStrict = decodeHTMLStrict;
exports.decodeXML = decodeXML;
const decode_data_html_js_1 = require("./generated/decode-data-html.js");
const decode_data_xml_js_1 = require("./generated/decode-data-xml.js");
const decode_codepoint_js_1 = require("./decode-codepoint.js");
var CharCodes;
(function (CharCodes) {
CharCodes[CharCodes["NUM"] = 35] = "NUM";
CharCodes[CharCodes["SEMI"] = 59] = "SEMI";
CharCodes[CharCodes["EQUALS"] = 61] = "EQUALS";
CharCodes[CharCodes["ZERO"] = 48] = "ZERO";
CharCodes[CharCodes["NINE"] = 57] = "NINE";
CharCodes[CharCodes["LOWER_A"] = 97] = "LOWER_A";
CharCodes[CharCodes["LOWER_F"] = 102] = "LOWER_F";
CharCodes[CharCodes["LOWER_X"] = 120] = "LOWER_X";
CharCodes[CharCodes["LOWER_Z"] = 122] = "LOWER_Z";
CharCodes[CharCodes["UPPER_A"] = 65] = "UPPER_A";
CharCodes[CharCodes["UPPER_F"] = 70] = "UPPER_F";
CharCodes[CharCodes["UPPER_Z"] = 90] = "UPPER_Z";
})(CharCodes || (CharCodes = {}));
/** Bit that needs to be set to convert an upper case ASCII character to lower case */
const TO_LOWER_BIT = 32;
var BinTrieFlags;
(function (BinTrieFlags) {
BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
})(BinTrieFlags || (exports.BinTrieFlags = BinTrieFlags = {}));
function isNumber(code) {
return code >= CharCodes.ZERO && code <= CharCodes.NINE;
}
function isHexadecimalCharacter(code) {
return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||
(code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));
}
function isAsciiAlphaNumeric(code) {
return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||
(code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||
isNumber(code));
}
/**
* Checks if the given character is a valid end character for an entity in an attribute.
*
* Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.
* See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state
*/
function isEntityInAttributeInvalidEnd(code) {
return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
}
var EntityDecoderState;
(function (EntityDecoderState) {
EntityDecoderState[EntityDecoderState["EntityStart"] = 0] = "EntityStart";
EntityDecoderState[EntityDecoderState["NumericStart"] = 1] = "NumericStart";
EntityDecoderState[EntityDecoderState["NumericDecimal"] = 2] = "NumericDecimal";
EntityDecoderState[EntityDecoderState["NumericHex"] = 3] = "NumericHex";
EntityDecoderState[EntityDecoderState["NamedEntity"] = 4] = "NamedEntity";
})(EntityDecoderState || (EntityDecoderState = {}));
var DecodingMode;
(function (DecodingMode) {
/** Entities in text nodes that can end with any character. */
DecodingMode[DecodingMode["Legacy"] = 0] = "Legacy";
/** Only allow entities terminated with a semicolon. */
DecodingMode[DecodingMode["Strict"] = 1] = "Strict";
/** Entities in attributes have limitations on ending characters. */
DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute";
})(DecodingMode || (exports.DecodingMode = DecodingMode = {}));
/**
* Token decoder with support of writing partial entities.
*/
class EntityDecoder {
constructor(
/** The tree used to decode entities. */
decodeTree,
/**
* The function that is called when a codepoint is decoded.
*
* For multi-byte named entities, this will be called multiple times,
* with the second codepoint, and the same `consumed` value.
*
* @param codepoint The decoded codepoint.
* @param consumed The number of bytes consumed by the decoder.
*/
emitCodePoint,
/** An object that is used to produce errors. */
errors) {
this.decodeTree = decodeTree;
this.emitCodePoint = emitCodePoint;
this.errors = errors;
/** The current state of the decoder. */
this.state = EntityDecoderState.EntityStart;
/** Characters that were consumed while parsing an entity. */
this.consumed = 1;
/**
* The result of the entity.
*
* Either the result index of a numeric entity, or the codepoint of a
* numeric entity.
*/
this.result = 0;
/** The current index in the decode tree. */
this.treeIndex = 0;
/** The number of characters that were consumed in excess. */
this.excess = 1;
/** The mode in which the decoder is operating. */
this.decodeMode = DecodingMode.Strict;
}
/** Resets the instance to make it reusable. */
startEntity(decodeMode) {
this.decodeMode = decodeMode;
this.state = EntityDecoderState.EntityStart;
this.result = 0;
this.treeIndex = 0;
this.excess = 1;
this.consumed = 1;
}
/**
* Write an entity to the decoder. This can be called multiple times with partial entities.
* If the entity is incomplete, the decoder will return -1.
*
* Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
* entity is incomplete, and resume when the next string is written.
*
* @param input The string containing the entity (or a continuation of the entity).
* @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
*/
write(input, offset) {
switch (this.state) {
case EntityDecoderState.EntityStart: {
if (input.charCodeAt(offset) === CharCodes.NUM) {
this.state = EntityDecoderState.NumericStart;
this.consumed += 1;
return this.stateNumericStart(input, offset + 1);
}
this.state = EntityDecoderState.NamedEntity;
return this.stateNamedEntity(input, offset);
}
case EntityDecoderState.NumericStart: {
return this.stateNumericStart(input, offset);
}
case EntityDecoderState.NumericDecimal: {
return this.stateNumericDecimal(input, offset);
}
case EntityDecoderState.NumericHex: {
return this.stateNumericHex(input, offset);
}
case EntityDecoderState.NamedEntity: {
return this.stateNamedEntity(input, offset);
}
}
}
/**
* Switches between the numeric decimal and hexadecimal states.
*
* Equivalent to the `Numeric character reference state` in the HTML spec.
*
* @param input The string containing the entity (or a continuation of the entity).
* @param offset The current offset.
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
*/
stateNumericStart(input, offset) {
if (offset >= input.length) {
return -1;
}
if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
this.state = EntityDecoderState.NumericHex;
this.consumed += 1;
return this.stateNumericHex(input, offset + 1);
}
this.state = EntityDecoderState.NumericDecimal;
return this.stateNumericDecimal(input, offset);
}
addToNumericResult(input, start, end, base) {
if (start !== end) {
const digitCount = end - start;
this.result =
this.result * Math.pow(base, digitCount) +
Number.parseInt(input.substr(start, digitCount), base);
this.consumed += digitCount;
}
}
/**
* Parses a hexadecimal numeric entity.
*
* Equivalent to the `Hexademical character reference state` in the HTML spec.
*
* @param input The string containing the entity (or a continuation of the entity).
* @param offset The current offset.
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
*/
stateNumericHex(input, offset) {
const startIndex = offset;
while (offset < input.length) {
const char = input.charCodeAt(offset);
if (isNumber(char) || isHexadecimalCharacter(char)) {
offset += 1;
}
else {
this.addToNumericResult(input, startIndex, offset, 16);
return this.emitNumericEntity(char, 3);
}
}
this.addToNumericResult(input, startIndex, offset, 16);
return -1;
}
/**
* Parses a decimal numeric entity.
*
* Equivalent to the `Decimal character reference state` in the HTML spec.
*
* @param input The string containing the entity (or a continuation of the entity).
* @param offset The current offset.
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
*/
stateNumericDecimal(input, offset) {
const startIndex = offset;
while (offset < input.length) {
const char = input.charCodeAt(offset);
if (isNumber(char)) {
offset += 1;
}
else {
this.addToNumericResult(input, startIndex, offset, 10);
return this.emitNumericEntity(char, 2);
}
}
this.addToNumericResult(input, startIndex, offset, 10);
return -1;
}
/**
* Validate and emit a numeric entity.
*
* Implements the logic from the `Hexademical character reference start
* state` and `Numeric character reference end state` in the HTML spec.
*
* @param lastCp The last code point of the entity. Used to see if the
* entity was terminated with a semicolon.
* @param expectedLength The minimum number of characters that should be
* consumed. Used to validate that at least one digit
* was consumed.
* @returns The number of characters that were consumed.
*/
emitNumericEntity(lastCp, expectedLength) {
var _a;
// Ensure we consumed at least one digit.
if (this.consumed <= expectedLength) {
(_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);
return 0;
}
// Figure out if this is a legit end of the entity
if (lastCp === CharCodes.SEMI) {
this.consumed += 1;
}
else if (this.decodeMode === DecodingMode.Strict) {
return 0;
}
this.emitCodePoint((0, decode_codepoint_js_1.replaceCodePoint)(this.result), this.consumed);
if (this.errors) {
if (lastCp !== CharCodes.SEMI) {
this.errors.missingSemicolonAfterCharacterReference();
}
this.errors.validateNumericCharacterReference(this.result);
}
return this.consumed;
}
/**
* Parses a named entity.
*
* Equivalent to the `Named character reference state` in the HTML spec.
*
* @param input The string containing the entity (or a continuation of the entity).
* @param offset The current offset.
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
*/
stateNamedEntity(input, offset) {
const { decodeTree } = this;
let current = decodeTree[this.treeIndex];
// The mask is the number of bytes of the value, including the current byte.
let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
for (; offset < input.length; offset++, this.excess++) {
const char = input.charCodeAt(offset);
this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
if (this.treeIndex < 0) {
return this.result === 0 ||
// If we are parsing an attribute
(this.decodeMode === DecodingMode.Attribute &&
// We shouldn't have consumed any characters after the entity,
(valueLength === 0 ||
// And there should be no invalid characters.
isEntityInAttributeInvalidEnd(char)))
? 0
: this.emitNotTerminatedNamedEntity();
}
current = decodeTree[this.treeIndex];
valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
// If the branch is a value, store it and continue
if (valueLength !== 0) {
// If the entity is terminated by a semicolon, we are done.
if (char === CharCodes.SEMI) {
return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
}
// If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.
if (this.decodeMode !== DecodingMode.Strict) {
this.result = this.treeIndex;
this.consumed += this.excess;
this.excess = 0;
}
}
}
return -1;
}
/**
* Emit a named entity that was not terminated with a semicolon.
*
* @returns The number of characters consumed.
*/
emitNotTerminatedNamedEntity() {
var _a;
const { result, decodeTree } = this;
const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
this.emitNamedEntityData(result, valueLength, this.consumed);
(_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();
return this.consumed;
}
/**
* Emit a named entity.
*
* @param result The index of the entity in the decode tree.
* @param valueLength The number of bytes in the entity.
* @param consumed The number of characters consumed.
*
* @returns The number of characters consumed.
*/
emitNamedEntityData(result, valueLength, consumed) {
const { decodeTree } = this;
this.emitCodePoint(valueLength === 1
? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH
: decodeTree[result + 1], consumed);
if (valueLength === 3) {
// For multi-byte values, we need to emit the second byte.
this.emitCodePoint(decodeTree[result + 2], consumed);
}
return consumed;
}
/**
* Signal to the parser that the end of the input was reached.
*
* Remaining data will be emitted and relevant errors will be produced.
*
* @returns The number of characters consumed.
*/
end() {
var _a;
switch (this.state) {
case EntityDecoderState.NamedEntity: {
// Emit a named entity if we have one.
return this.result !== 0 &&
(this.decodeMode !== DecodingMode.Attribute ||
this.result === this.treeIndex)
? this.emitNotTerminatedNamedEntity()
: 0;
}
// Otherwise, emit a numeric entity if we have one.
case EntityDecoderState.NumericDecimal: {
return this.emitNumericEntity(0, 2);
}
case EntityDecoderState.NumericHex: {
return this.emitNumericEntity(0, 3);
}
case EntityDecoderState.NumericStart: {
(_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);
return 0;
}
case EntityDecoderState.EntityStart: {
// Return 0 if we have no entity.
return 0;
}
}
}
}
exports.EntityDecoder = EntityDecoder;
/**
* Creates a function that decodes entities in a string.
*
* @param decodeTree The decode tree.
* @returns A function that decodes entities in a string.
*/
function getDecoder(decodeTree) {
let returnValue = "";
const decoder = new EntityDecoder(decodeTree, (data) => (returnValue += (0, decode_codepoint_js_1.fromCodePoint)(data)));
return function decodeWithTrie(input, decodeMode) {
let lastIndex = 0;
let offset = 0;
while ((offset = input.indexOf("&", offset)) >= 0) {
returnValue += input.slice(lastIndex, offset);
decoder.startEntity(decodeMode);
const length = decoder.write(input,
// Skip the "&"
offset + 1);
if (length < 0) {
lastIndex = offset + decoder.end();
break;
}
lastIndex = offset + length;
// If `length` is 0, skip the current `&` and continue.
offset = length === 0 ? lastIndex + 1 : lastIndex;
}
const result = returnValue + input.slice(lastIndex);
// Make sure we don't keep a reference to the final string.
returnValue = "";
return result;
};
}
/**
* Determines the branch of the current node that is taken given the current
* character. This function is used to traverse the trie.
*
* @param decodeTree The trie.
* @param current The current node.
* @param nodeIdx The index right after the current node and its value.
* @param char The current character.
* @returns The index of the next node, or -1 if no branch is taken.
*/
function determineBranch(decodeTree, current, nodeIndex, char) {
const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
// Case 1: Single branch encoded in jump offset
if (branchCount === 0) {
return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;
}
// Case 2: Multiple branches encoded in jump table
if (jumpOffset) {
const value = char - jumpOffset;
return value < 0 || value >= branchCount
? -1
: decodeTree[nodeIndex + value] - 1;
}
// Case 3: Multiple branches encoded in dictionary
// Binary search for the character.
let lo = nodeIndex;
let hi = lo + branchCount - 1;
while (lo <= hi) {
const mid = (lo + hi) >>> 1;
const midValue = decodeTree[mid];
if (midValue < char) {
lo = mid + 1;
}
else if (midValue > char) {
hi = mid - 1;
}
else {
return decodeTree[mid + branchCount];
}
}
return -1;
}
const htmlDecoder = /* #__PURE__ */ getDecoder(decode_data_html_js_1.htmlDecodeTree);
const xmlDecoder = /* #__PURE__ */ getDecoder(decode_data_xml_js_1.xmlDecodeTree);
/**
* Decodes an HTML string.
*
* @param htmlString The string to decode.
* @param mode The decoding mode.
* @returns The decoded string.
*/
function decodeHTML(htmlString, mode = DecodingMode.Legacy) {
return htmlDecoder(htmlString, mode);
}
/**
* Decodes an HTML string in an attribute.
*
* @param htmlAttribute The string to decode.
* @returns The decoded string.
*/
function decodeHTMLAttribute(htmlAttribute) {
return htmlDecoder(htmlAttribute, DecodingMode.Attribute);
}
/**
* Decodes an HTML string, requiring all entities to be terminated by a semicolon.
*
* @param htmlString The string to decode.
* @returns The decoded string.
*/
function decodeHTMLStrict(htmlString) {
return htmlDecoder(htmlString, DecodingMode.Strict);
}
/**
* Decodes an XML string, requiring all entities to be terminated by a semicolon.
*
* @param xmlString The string to decode.
* @returns The decoded string.
*/
function decodeXML(xmlString) {
return xmlDecoder(xmlString, DecodingMode.Strict);
}
// Re-export for use by eg. htmlparser2
var decode_data_html_js_2 = require("./generated/decode-data-html.js");
Object.defineProperty(exports, "htmlDecodeTree", { enumerable: true, get: function () { return decode_data_html_js_2.htmlDecodeTree; } });
var decode_data_xml_js_2 = require("./generated/decode-data-xml.js");
Object.defineProperty(exports, "xmlDecodeTree", { enumerable: true, get: function () { return decode_data_xml_js_2.xmlDecodeTree; } });
var decode_codepoint_js_2 = require("./decode-codepoint.js");
Object.defineProperty(exports, "decodeCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.decodeCodePoint; } });
Object.defineProperty(exports, "replaceCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.replaceCodePoint; } });
Object.defineProperty(exports, "fromCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.fromCodePoint; } });
//# sourceMappingURL=decode.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,22 @@
/**
* Encodes all characters in the input using HTML entities. This includes
* characters that are valid ASCII characters in HTML documents, such as `#`.
*
* To get a more compact output, consider using the `encodeNonAsciiHTML`
* function, which will only encode characters that are not valid in HTML
* documents, as well as non-ASCII characters.
*
* If a character has no equivalent entity, a numeric hexadecimal reference
* (eg. `&#xfc;`) will be used.
*/
export declare function encodeHTML(input: string): string;
/**
* Encodes all non-ASCII characters, as well as characters not valid in HTML
* documents using HTML entities. This function will not encode characters that
* are valid in HTML documents, such as `#`.
*
* If a character has no equivalent entity, a numeric hexadecimal reference
* (eg. `&#xfc;`) will be used.
*/
export declare function encodeNonAsciiHTML(input: string): string;
//# sourceMappingURL=encode.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../src/encode.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AACD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD"}

View File

@@ -0,0 +1,73 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.encodeHTML = encodeHTML;
exports.encodeNonAsciiHTML = encodeNonAsciiHTML;
const encode_html_js_1 = require("./generated/encode-html.js");
const escape_js_1 = require("./escape.js");
const htmlReplacer = /[\t\n\f!-,./:-@[-`{-}\u0080-\uFFFF]/g;
/**
* Encodes all characters in the input using HTML entities. This includes
* characters that are valid ASCII characters in HTML documents, such as `#`.
*
* To get a more compact output, consider using the `encodeNonAsciiHTML`
* function, which will only encode characters that are not valid in HTML
* documents, as well as non-ASCII characters.
*
* If a character has no equivalent entity, a numeric hexadecimal reference
* (eg. `&#xfc;`) will be used.
*/
function encodeHTML(input) {
return encodeHTMLTrieRe(htmlReplacer, input);
}
/**
* Encodes all non-ASCII characters, as well as characters not valid in HTML
* documents using HTML entities. This function will not encode characters that
* are valid in HTML documents, such as `#`.
*
* If a character has no equivalent entity, a numeric hexadecimal reference
* (eg. `&#xfc;`) will be used.
*/
function encodeNonAsciiHTML(input) {
return encodeHTMLTrieRe(escape_js_1.xmlReplacer, input);
}
function encodeHTMLTrieRe(regExp, input) {
let returnValue = "";
let lastIndex = 0;
let match;
while ((match = regExp.exec(input)) !== null) {
const { index } = match;
returnValue += input.substring(lastIndex, index);
const char = input.charCodeAt(index);
let next = encode_html_js_1.htmlTrie.get(char);
if (typeof next === "object") {
// We are in a branch. Try to match the next char.
if (index + 1 < input.length) {
const nextChar = input.charCodeAt(index + 1);
const value = typeof next.n === "number"
? next.n === nextChar
? next.o
: undefined
: next.n.get(nextChar);
if (value !== undefined) {
returnValue += value;
lastIndex = regExp.lastIndex += 1;
continue;
}
}
next = next.v;
}
// We might have a tree node without a value; skip and use a numeric entity.
if (next === undefined) {
const cp = (0, escape_js_1.getCodePoint)(input, index);
returnValue += `&#x${cp.toString(16)};`;
// Increase by 1 if we have a surrogate pair
lastIndex = regExp.lastIndex += Number(cp !== char);
}
else {
returnValue += next;
lastIndex = index + 1;
}
}
return returnValue + input.substr(lastIndex);
}
//# sourceMappingURL=encode.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/encode.ts"],"names":[],"mappings":";;AAgBA,gCAEC;AASD,gDAEC;AA7BD,+DAAsD;AACtD,2CAAwD;AAExD,MAAM,YAAY,GAAG,sCAAsC,CAAC;AAE5D;;;;;;;;;;GAUG;AACH,SAAgB,UAAU,CAAC,KAAa;IACpC,OAAO,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AACD;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAAC,KAAa;IAC5C,OAAO,gBAAgB,CAAC,uBAAW,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc,EAAE,KAAa;IACnD,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QACxB,WAAW,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,GAAG,yBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,kDAAkD;YAClD,IAAI,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAC7C,MAAM,KAAK,GACP,OAAO,IAAI,CAAC,CAAC,KAAK,QAAQ;oBACtB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,QAAQ;wBACjB,CAAC,CAAC,IAAI,CAAC,CAAC;wBACR,CAAC,CAAC,SAAS;oBACf,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAE/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACtB,WAAW,IAAI,KAAK,CAAC;oBACrB,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;oBAClC,SAAS;gBACb,CAAC;YACL,CAAC;YAED,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,4EAA4E;QAC5E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,MAAM,EAAE,GAAG,IAAA,wBAAY,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACtC,WAAW,IAAI,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC;YACxC,4CAA4C;YAC5C,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACJ,WAAW,IAAI,IAAI,CAAC;YACpB,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,OAAO,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC"}

View File

@@ -0,0 +1,43 @@
export declare const xmlReplacer: RegExp;
export declare const getCodePoint: (c: string, index: number) => number;
/**
* Encodes all non-ASCII characters, as well as characters not valid in XML
* documents using XML entities.
*
* If a character has no equivalent entity, a
* numeric hexadecimal reference (eg. `&#xfc;`) will be used.
*/
export declare function encodeXML(input: string): string;
/**
* Encodes all non-ASCII characters, as well as characters not valid in XML
* documents using numeric hexadecimal reference (eg. `&#xfc;`).
*
* Have a look at `escapeUTF8` if you want a more concise output at the expense
* of reduced transportability.
*
* @param data String to escape.
*/
export declare const escape: typeof encodeXML;
/**
* Encodes all characters not valid in XML documents using XML entities.
*
* Note that the output will be character-set dependent.
*
* @param data String to escape.
*/
export declare const escapeUTF8: (data: string) => string;
/**
* Encodes all characters that have to be escaped in HTML attributes,
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
*
* @param data String to escape.
*/
export declare const escapeAttribute: (data: string) => string;
/**
* Encodes all characters that have to be escaped in HTML text,
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
*
* @param data String to escape.
*/
export declare const escapeText: (data: string) => string;
//# sourceMappingURL=escape.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"escape.d.ts","sourceRoot":"","sources":["../../src/escape.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,EAAE,MAAiC,CAAC;AAW5D,eAAO,MAAM,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAWoB,CAAC;AAE9E;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA0B/C;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,EAAE,OAAO,SAAqB,CAAC;AAqClD;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAG1C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAQ3C,CAAC;AAEN;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAQ1C,CAAC"}

View File

@@ -0,0 +1,121 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.getCodePoint = exports.xmlReplacer = void 0;
exports.encodeXML = encodeXML;
exports.xmlReplacer = /["$&'<>\u0080-\uFFFF]/g;
const xmlCodeMap = new Map([
[34, "&quot;"],
[38, "&amp;"],
[39, "&apos;"],
[60, "&lt;"],
[62, "&gt;"],
]);
// For compatibility with node < 4, we wrap `codePointAt`
exports.getCodePoint =
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
String.prototype.codePointAt == null
? (c, index) => (c.charCodeAt(index) & 64512) === 55296
? (c.charCodeAt(index) - 55296) * 1024 +
c.charCodeAt(index + 1) -
56320 +
65536
: c.charCodeAt(index)
: // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
(input, index) => input.codePointAt(index);
/**
* Encodes all non-ASCII characters, as well as characters not valid in XML
* documents using XML entities.
*
* If a character has no equivalent entity, a
* numeric hexadecimal reference (eg. `&#xfc;`) will be used.
*/
function encodeXML(input) {
let returnValue = "";
let lastIndex = 0;
let match;
while ((match = exports.xmlReplacer.exec(input)) !== null) {
const { index } = match;
const char = input.charCodeAt(index);
const next = xmlCodeMap.get(char);
if (next === undefined) {
returnValue += `${input.substring(lastIndex, index)}&#x${(0, exports.getCodePoint)(input, index).toString(16)};`;
// Increase by 1 if we have a surrogate pair
lastIndex = exports.xmlReplacer.lastIndex += Number((char & 64512) === 55296);
}
else {
returnValue += input.substring(lastIndex, index) + next;
lastIndex = index + 1;
}
}
return returnValue + input.substr(lastIndex);
}
/**
* Encodes all non-ASCII characters, as well as characters not valid in XML
* documents using numeric hexadecimal reference (eg. `&#xfc;`).
*
* Have a look at `escapeUTF8` if you want a more concise output at the expense
* of reduced transportability.
*
* @param data String to escape.
*/
exports.escape = encodeXML;
/**
* Creates a function that escapes all characters matched by the given regular
* expression using the given map of characters to escape to their entities.
*
* @param regex Regular expression to match characters to escape.
* @param map Map of characters to escape to their entities.
*
* @returns Function that escapes all characters matched by the given regular
* expression using the given map of characters to escape to their entities.
*/
function getEscaper(regex, map) {
return function escape(data) {
let match;
let lastIndex = 0;
let result = "";
while ((match = regex.exec(data))) {
if (lastIndex !== match.index) {
result += data.substring(lastIndex, match.index);
}
// We know that this character will be in the map.
result += map.get(match[0].charCodeAt(0));
// Every match will be of length 1
lastIndex = match.index + 1;
}
return result + data.substring(lastIndex);
};
}
/**
* Encodes all characters not valid in XML documents using XML entities.
*
* Note that the output will be character-set dependent.
*
* @param data String to escape.
*/
exports.escapeUTF8 = getEscaper(/["&'<>]/g, xmlCodeMap);
/**
* Encodes all characters that have to be escaped in HTML attributes,
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
*
* @param data String to escape.
*/
exports.escapeAttribute =
/* #__PURE__ */ getEscaper(/["&\u00A0]/g, new Map([
[34, "&quot;"],
[38, "&amp;"],
[160, "&nbsp;"],
]));
/**
* Encodes all characters that have to be escaped in HTML text,
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
*
* @param data String to escape.
*/
exports.escapeText = getEscaper(/[&<>\u00A0]/g, new Map([
[38, "&amp;"],
[60, "&lt;"],
[62, "&gt;"],
[160, "&nbsp;"],
]));
//# sourceMappingURL=escape.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"escape.js","sourceRoot":"","sources":["../../src/escape.ts"],"names":[],"mappings":";;;AA+BA,8BA0BC;AAzDY,QAAA,WAAW,GAAW,wBAAwB,CAAC;AAE5D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACvB,CAAC,EAAE,EAAE,QAAQ,CAAC;IACd,CAAC,EAAE,EAAE,OAAO,CAAC;IACb,CAAC,EAAE,EAAE,QAAQ,CAAC;IACd,CAAC,EAAE,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAEH,yDAAyD;AAC5C,QAAA,YAAY;AACrB,uEAAuE;AACvE,MAAM,CAAC,SAAS,CAAC,WAAW,IAAI,IAAI;IAChC,CAAC,CAAC,CAAC,CAAS,EAAE,KAAa,EAAU,EAAE,CACjC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAO,CAAC,KAAK,KAAO;QACvC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAO,CAAC,GAAG,IAAM;YACxC,CAAC,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;YACvB,KAAO;YACP,KAAS;QACX,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;IAC/B,CAAC,CAAC,uEAAuE;QACvE,CAAC,KAAa,EAAE,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAE,CAAC;AAE9E;;;;;;GAMG;AACH,SAAgB,SAAS,CAAC,KAAa;IACnC,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,mBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,WAAW,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,IAAA,oBAAY,EACjE,KAAK,EACL,KAAK,CACR,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC;YAClB,4CAA4C;YAC5C,SAAS,GAAG,mBAAW,CAAC,SAAS,IAAI,MAAM,CACvC,CAAC,IAAI,GAAG,KAAO,CAAC,KAAK,KAAO,CAC/B,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,WAAW,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;YACxD,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,OAAO,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;GAQG;AACU,QAAA,MAAM,GAAqB,SAAS,CAAC;AAElD;;;;;;;;;GASG;AACH,SAAS,UAAU,CACf,KAAa,EACb,GAAwB;IAExB,OAAO,SAAS,MAAM,CAAC,IAAY;QAC/B,IAAI,KAAK,CAAC;QACV,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAChC,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC5B,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACrD,CAAC;YAED,kDAAkD;YAClD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAE,CAAC;YAE3C,kCAAkC;YAClC,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC;AACN,CAAC;AAED;;;;;;GAMG;AACU,QAAA,UAAU,GAA6C,UAAU,CAC1E,UAAU,EACV,UAAU,CACb,CAAC;AAEF;;;;;GAKG;AACU,QAAA,eAAe;AACxB,eAAe,CAAC,UAAU,CACtB,aAAa,EACb,IAAI,GAAG,CAAC;IACJ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACd,CAAC,EAAE,EAAE,OAAO,CAAC;IACb,CAAC,GAAG,EAAE,QAAQ,CAAC;CAClB,CAAC,CACL,CAAC;AAEN;;;;;GAKG;AACU,QAAA,UAAU,GAA6C,UAAU,CAC1E,cAAc,EACd,IAAI,GAAG,CAAC;IACJ,CAAC,EAAE,EAAE,OAAO,CAAC;IACb,CAAC,EAAE,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,QAAQ,CAAC;CAClB,CAAC,CACL,CAAC"}

View File

@@ -0,0 +1,2 @@
export declare const htmlDecodeTree: Uint16Array;
//# sourceMappingURL=decode-data-html.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"decode-data-html.d.ts","sourceRoot":"","sources":["../../../src/generated/decode-data-html.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,EAAE,WAK5B,CAAC"}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"version":3,"file":"decode-data-html.js","sourceRoot":"","sources":["../../../src/generated/decode-data-html.ts"],"names":[],"mappings":";AAAA,8CAA8C;;;AAEjC,QAAA,cAAc,GAAgC,IAAI,WAAW;AACtE,kBAAkB;AAClB,eAAe,CAAC,268CAA268C;KACt78C,KAAK,CAAC,EAAE,CAAC;KACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACnC,CAAC"}

View File

@@ -0,0 +1,2 @@
export declare const xmlDecodeTree: Uint16Array;
//# sourceMappingURL=decode-data-xml.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"decode-data-xml.d.ts","sourceRoot":"","sources":["../../../src/generated/decode-data-xml.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,EAAE,WAK3B,CAAC"}

View File

@@ -0,0 +1,10 @@
"use strict";
// Generated using scripts/write-decode-map.ts
Object.defineProperty(exports, "__esModule", { value: true });
exports.xmlDecodeTree = void 0;
exports.xmlDecodeTree = new Uint16Array(
// prettier-ignore
/* #__PURE__ */ "\u0200aglq\t\x15\x18\x1b\u026d\x0f\0\0\x12p;\u4026os;\u4027t;\u403et;\u403cuot;\u4022"
.split("")
.map((c) => c.charCodeAt(0)));
//# sourceMappingURL=decode-data-xml.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"decode-data-xml.js","sourceRoot":"","sources":["../../../src/generated/decode-data-xml.ts"],"names":[],"mappings":";AAAA,8CAA8C;;;AAEjC,QAAA,aAAa,GAAgC,IAAI,WAAW;AACrE,kBAAkB;AAClB,eAAe,CAAC,uFAAuF;KAClG,KAAK,CAAC,EAAE,CAAC;KACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACnC,CAAC"}

View File

@@ -0,0 +1,8 @@
type EncodeTrieNode = string | {
v?: string;
n: number | Map<number, EncodeTrieNode>;
o?: string;
};
export declare const htmlTrie: Map<number, EncodeTrieNode>;
export {};
//# sourceMappingURL=encode-html.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"encode-html.d.ts","sourceRoot":"","sources":["../../../src/generated/encode-html.ts"],"names":[],"mappings":"AAEA,KAAK,cAAc,GACb,MAAM,GACN;IAAE,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAY1E,eAAO,MAAM,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAC,cAAc,CAAwhuB,CAAC"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,96 @@
import { DecodingMode } from "./decode.js";
/** The level of entities to support. */
export declare enum EntityLevel {
/** Support only XML entities. */
XML = 0,
/** Support HTML entities, which are a superset of XML entities. */
HTML = 1
}
export declare enum EncodingMode {
/**
* The output is UTF-8 encoded. Only characters that need escaping within
* XML will be escaped.
*/
UTF8 = 0,
/**
* The output consists only of ASCII characters. Characters that need
* escaping within HTML, and characters that aren't ASCII characters will
* be escaped.
*/
ASCII = 1,
/**
* Encode all characters that have an equivalent entity, as well as all
* characters that are not ASCII characters.
*/
Extensive = 2,
/**
* Encode all characters that have to be escaped in HTML attributes,
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
*/
Attribute = 3,
/**
* Encode all characters that have to be escaped in HTML text,
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
*/
Text = 4
}
export interface DecodingOptions {
/**
* The level of entities to support.
* @default {@link EntityLevel.XML}
*/
level?: EntityLevel;
/**
* Decoding mode. If `Legacy`, will support legacy entities not terminated
* with a semicolon (`;`).
*
* Always `Strict` for XML. For HTML, set this to `true` if you are parsing
* an attribute value.
*
* The deprecated `decodeStrict` function defaults this to `Strict`.
*
* @default {@link DecodingMode.Legacy}
*/
mode?: DecodingMode | undefined;
}
/**
* Decodes a string with entities.
*
* @param input String to decode.
* @param options Decoding options.
*/
export declare function decode(input: string, options?: DecodingOptions | EntityLevel): string;
/**
* Decodes a string with entities. Does not allow missing trailing semicolons for entities.
*
* @param input String to decode.
* @param options Decoding options.
* @deprecated Use `decode` with the `mode` set to `Strict`.
*/
export declare function decodeStrict(input: string, options?: DecodingOptions | EntityLevel): string;
/**
* Options for `encode`.
*/
export interface EncodingOptions {
/**
* The level of entities to support.
* @default {@link EntityLevel.XML}
*/
level?: EntityLevel;
/**
* Output format.
* @default {@link EncodingMode.Extensive}
*/
mode?: EncodingMode;
}
/**
* Encodes a string with entities.
*
* @param input String to encode.
* @param options Encoding options.
*/
export declare function encode(input: string, options?: EncodingOptions | EntityLevel): string;
export { encodeXML, escape, escapeUTF8, escapeAttribute, escapeText, } from "./escape.js";
export { encodeHTML, encodeNonAsciiHTML, encodeHTML as encodeHTML4, encodeHTML as encodeHTML5, } from "./encode.js";
export { EntityDecoder, DecodingMode, decodeXML, decodeHTML, decodeHTMLStrict, decodeHTMLAttribute, decodeHTML as decodeHTML4, decodeHTML as decodeHTML5, decodeHTMLStrict as decodeHTML4Strict, decodeHTMLStrict as decodeHTML5Strict, decodeXML as decodeXMLStrict, } from "./decode.js";
//# sourceMappingURL=index.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,YAAY,EAAE,MAAM,aAAa,CAAC;AASlE,wCAAwC;AACxC,oBAAY,WAAW;IACnB,iCAAiC;IACjC,GAAG,IAAI;IACP,mEAAmE;IACnE,IAAI,IAAI;CACX;AAED,oBAAY,YAAY;IACpB;;;OAGG;IACH,IAAI,IAAA;IACJ;;;;OAIG;IACH,KAAK,IAAA;IACL;;;OAGG;IACH,SAAS,IAAA;IACT;;;OAGG;IACH,SAAS,IAAA;IACT;;;OAGG;IACH,IAAI,IAAA;CACP;AAED,MAAM,WAAW,eAAe;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;;;;;;;OAUG;IACH,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CACnC;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,eAAe,GAAG,WAA6B,GACzD,MAAM,CASR;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CACxB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,eAAe,GAAG,WAA6B,GACzD,MAAM,CAMR;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,eAAe,GAAG,WAA6B,GACzD,MAAM,CA2BR;AAED,OAAO,EACH,SAAS,EACT,MAAM,EACN,UAAU,EACV,eAAe,EACf,UAAU,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EACH,UAAU,EACV,kBAAkB,EAElB,UAAU,IAAI,WAAW,EACzB,UAAU,IAAI,WAAW,GAC5B,MAAM,aAAa,CAAC;AAErB,OAAO,EACH,aAAa,EACb,YAAY,EACZ,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EAEnB,UAAU,IAAI,WAAW,EACzB,UAAU,IAAI,WAAW,EACzB,gBAAgB,IAAI,iBAAiB,EACrC,gBAAgB,IAAI,iBAAiB,EACrC,SAAS,IAAI,eAAe,GAC/B,MAAM,aAAa,CAAC"}

View File

@@ -0,0 +1,131 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.decodeXMLStrict = exports.decodeHTML5Strict = exports.decodeHTML4Strict = exports.decodeHTML5 = exports.decodeHTML4 = exports.decodeHTMLAttribute = exports.decodeHTMLStrict = exports.decodeHTML = exports.decodeXML = exports.DecodingMode = exports.EntityDecoder = exports.encodeHTML5 = exports.encodeHTML4 = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.encodeXML = exports.EncodingMode = exports.EntityLevel = void 0;
exports.decode = decode;
exports.decodeStrict = decodeStrict;
exports.encode = encode;
const decode_js_1 = require("./decode.js");
const encode_js_1 = require("./encode.js");
const escape_js_1 = require("./escape.js");
/** The level of entities to support. */
var EntityLevel;
(function (EntityLevel) {
/** Support only XML entities. */
EntityLevel[EntityLevel["XML"] = 0] = "XML";
/** Support HTML entities, which are a superset of XML entities. */
EntityLevel[EntityLevel["HTML"] = 1] = "HTML";
})(EntityLevel || (exports.EntityLevel = EntityLevel = {}));
var EncodingMode;
(function (EncodingMode) {
/**
* The output is UTF-8 encoded. Only characters that need escaping within
* XML will be escaped.
*/
EncodingMode[EncodingMode["UTF8"] = 0] = "UTF8";
/**
* The output consists only of ASCII characters. Characters that need
* escaping within HTML, and characters that aren't ASCII characters will
* be escaped.
*/
EncodingMode[EncodingMode["ASCII"] = 1] = "ASCII";
/**
* Encode all characters that have an equivalent entity, as well as all
* characters that are not ASCII characters.
*/
EncodingMode[EncodingMode["Extensive"] = 2] = "Extensive";
/**
* Encode all characters that have to be escaped in HTML attributes,
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
*/
EncodingMode[EncodingMode["Attribute"] = 3] = "Attribute";
/**
* Encode all characters that have to be escaped in HTML text,
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
*/
EncodingMode[EncodingMode["Text"] = 4] = "Text";
})(EncodingMode || (exports.EncodingMode = EncodingMode = {}));
/**
* Decodes a string with entities.
*
* @param input String to decode.
* @param options Decoding options.
*/
function decode(input, options = EntityLevel.XML) {
const level = typeof options === "number" ? options : options.level;
if (level === EntityLevel.HTML) {
const mode = typeof options === "object" ? options.mode : undefined;
return (0, decode_js_1.decodeHTML)(input, mode);
}
return (0, decode_js_1.decodeXML)(input);
}
/**
* Decodes a string with entities. Does not allow missing trailing semicolons for entities.
*
* @param input String to decode.
* @param options Decoding options.
* @deprecated Use `decode` with the `mode` set to `Strict`.
*/
function decodeStrict(input, options = EntityLevel.XML) {
var _a;
const normalizedOptions = typeof options === "number" ? { level: options } : options;
(_a = normalizedOptions.mode) !== null && _a !== void 0 ? _a : (normalizedOptions.mode = decode_js_1.DecodingMode.Strict);
return decode(input, normalizedOptions);
}
/**
* Encodes a string with entities.
*
* @param input String to encode.
* @param options Encoding options.
*/
function encode(input, options = EntityLevel.XML) {
const { mode = EncodingMode.Extensive, level = EntityLevel.XML } = typeof options === "number" ? { level: options } : options;
switch (mode) {
case EncodingMode.UTF8: {
return (0, escape_js_1.escapeUTF8)(input);
}
case EncodingMode.Attribute: {
return (0, escape_js_1.escapeAttribute)(input);
}
case EncodingMode.Text: {
return (0, escape_js_1.escapeText)(input);
}
case EncodingMode.ASCII: {
return level === EntityLevel.HTML
? (0, encode_js_1.encodeNonAsciiHTML)(input)
: (0, escape_js_1.encodeXML)(input);
}
// eslint-disable-next-line unicorn/no-useless-switch-case
case EncodingMode.Extensive:
default: {
return level === EntityLevel.HTML
? (0, encode_js_1.encodeHTML)(input)
: (0, escape_js_1.encodeXML)(input);
}
}
}
var escape_js_2 = require("./escape.js");
Object.defineProperty(exports, "encodeXML", { enumerable: true, get: function () { return escape_js_2.encodeXML; } });
Object.defineProperty(exports, "escape", { enumerable: true, get: function () { return escape_js_2.escape; } });
Object.defineProperty(exports, "escapeUTF8", { enumerable: true, get: function () { return escape_js_2.escapeUTF8; } });
Object.defineProperty(exports, "escapeAttribute", { enumerable: true, get: function () { return escape_js_2.escapeAttribute; } });
Object.defineProperty(exports, "escapeText", { enumerable: true, get: function () { return escape_js_2.escapeText; } });
var encode_js_2 = require("./encode.js");
Object.defineProperty(exports, "encodeHTML", { enumerable: true, get: function () { return encode_js_2.encodeHTML; } });
Object.defineProperty(exports, "encodeNonAsciiHTML", { enumerable: true, get: function () { return encode_js_2.encodeNonAsciiHTML; } });
// Legacy aliases (deprecated)
Object.defineProperty(exports, "encodeHTML4", { enumerable: true, get: function () { return encode_js_2.encodeHTML; } });
Object.defineProperty(exports, "encodeHTML5", { enumerable: true, get: function () { return encode_js_2.encodeHTML; } });
var decode_js_2 = require("./decode.js");
Object.defineProperty(exports, "EntityDecoder", { enumerable: true, get: function () { return decode_js_2.EntityDecoder; } });
Object.defineProperty(exports, "DecodingMode", { enumerable: true, get: function () { return decode_js_2.DecodingMode; } });
Object.defineProperty(exports, "decodeXML", { enumerable: true, get: function () { return decode_js_2.decodeXML; } });
Object.defineProperty(exports, "decodeHTML", { enumerable: true, get: function () { return decode_js_2.decodeHTML; } });
Object.defineProperty(exports, "decodeHTMLStrict", { enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } });
Object.defineProperty(exports, "decodeHTMLAttribute", { enumerable: true, get: function () { return decode_js_2.decodeHTMLAttribute; } });
// Legacy aliases (deprecated)
Object.defineProperty(exports, "decodeHTML4", { enumerable: true, get: function () { return decode_js_2.decodeHTML; } });
Object.defineProperty(exports, "decodeHTML5", { enumerable: true, get: function () { return decode_js_2.decodeHTML; } });
Object.defineProperty(exports, "decodeHTML4Strict", { enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } });
Object.defineProperty(exports, "decodeHTML5Strict", { enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } });
Object.defineProperty(exports, "decodeXMLStrict", { enumerable: true, get: function () { return decode_js_2.decodeXML; } });
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAwEA,wBAYC;AASD,oCASC;AAwBD,wBA8BC;AA5JD,2CAAkE;AAClE,2CAA6D;AAC7D,2CAKqB;AAErB,wCAAwC;AACxC,IAAY,WAKX;AALD,WAAY,WAAW;IACnB,iCAAiC;IACjC,2CAAO,CAAA;IACP,mEAAmE;IACnE,6CAAQ,CAAA;AACZ,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AAED,IAAY,YA2BX;AA3BD,WAAY,YAAY;IACpB;;;OAGG;IACH,+CAAI,CAAA;IACJ;;;;OAIG;IACH,iDAAK,CAAA;IACL;;;OAGG;IACH,yDAAS,CAAA;IACT;;;OAGG;IACH,yDAAS,CAAA;IACT;;;OAGG;IACH,+CAAI,CAAA;AACR,CAAC,EA3BW,YAAY,4BAAZ,YAAY,QA2BvB;AAsBD;;;;;GAKG;AACH,SAAgB,MAAM,CAClB,KAAa,EACb,UAAyC,WAAW,CAAC,GAAG;IAExD,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAEpE,IAAI,KAAK,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,OAAO,IAAA,sBAAU,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,IAAA,qBAAS,EAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CACxB,KAAa,EACb,UAAyC,WAAW,CAAC,GAAG;;IAExD,MAAM,iBAAiB,GACnB,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/D,MAAA,iBAAiB,CAAC,IAAI,oCAAtB,iBAAiB,CAAC,IAAI,GAAK,wBAAY,CAAC,MAAM,EAAC;IAE/C,OAAO,MAAM,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AAC5C,CAAC;AAkBD;;;;;GAKG;AACH,SAAgB,MAAM,CAClB,KAAa,EACb,UAAyC,WAAW,CAAC,GAAG;IAExD,MAAM,EAAE,IAAI,GAAG,YAAY,CAAC,SAAS,EAAE,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,GAC5D,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAE/D,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;YACrB,OAAO,IAAA,sBAAU,EAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,KAAK,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1B,OAAO,IAAA,2BAAe,EAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;YACrB,OAAO,IAAA,sBAAU,EAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,KAAK,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YACtB,OAAO,KAAK,KAAK,WAAW,CAAC,IAAI;gBAC7B,CAAC,CAAC,IAAA,8BAAkB,EAAC,KAAK,CAAC;gBAC3B,CAAC,CAAC,IAAA,qBAAS,EAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,0DAA0D;QAC1D,KAAK,YAAY,CAAC,SAAS,CAAC;QAC5B,OAAO,CAAC,CAAC,CAAC;YACN,OAAO,KAAK,KAAK,WAAW,CAAC,IAAI;gBAC7B,CAAC,CAAC,IAAA,sBAAU,EAAC,KAAK,CAAC;gBACnB,CAAC,CAAC,IAAA,qBAAS,EAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;AACL,CAAC;AAED,yCAMqB;AALjB,sGAAA,SAAS,OAAA;AACT,mGAAA,MAAM,OAAA;AACN,uGAAA,UAAU,OAAA;AACV,4GAAA,eAAe,OAAA;AACf,uGAAA,UAAU,OAAA;AAGd,yCAMqB;AALjB,uGAAA,UAAU,OAAA;AACV,+GAAA,kBAAkB,OAAA;AAClB,8BAA8B;AAC9B,wGAAA,UAAU,OAAe;AACzB,wGAAA,UAAU,OAAe;AAG7B,yCAaqB;AAZjB,0GAAA,aAAa,OAAA;AACb,yGAAA,YAAY,OAAA;AACZ,sGAAA,SAAS,OAAA;AACT,uGAAA,UAAU,OAAA;AACV,6GAAA,gBAAgB,OAAA;AAChB,gHAAA,mBAAmB,OAAA;AACnB,8BAA8B;AAC9B,wGAAA,UAAU,OAAe;AACzB,wGAAA,UAAU,OAAe;AACzB,8GAAA,gBAAgB,OAAqB;AACrC,8GAAA,gBAAgB,OAAqB;AACrC,4GAAA,SAAS,OAAmB"}

View File

@@ -0,0 +1,3 @@
{
"type": "commonjs"
}

View File

@@ -0,0 +1,19 @@
/**
* Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.
*/
export declare const fromCodePoint: (...codePoints: number[]) => string;
/**
* Replace the given code point with a replacement character if it is a
* surrogate or is outside the valid range. Otherwise return the code
* point unchanged.
*/
export declare function replaceCodePoint(codePoint: number): number;
/**
* Replace the code point if relevant, then convert it to a string.
*
* @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.
* @param codePoint The code point to decode.
* @returns The decoded code point.
*/
export declare function decodeCodePoint(codePoint: number): string;
//# sourceMappingURL=decode-codepoint.d.ts.map

Some files were not shown because too many files have changed in this diff Show More