Socket
Socket
Sign inDemoInstall

simple-html-tokenizer

Package Overview
Dependencies
Maintainers
6
Versions
26
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

simple-html-tokenizer - npm Package Compare versions

Comparing version 0.4.0 to 0.4.1

2

dist/es6/entity-parser.js

@@ -28,2 +28,2 @@ var HEXCHARCODE = /^#[xX]([A-Fa-f0-9]+)$/;

export default EntityParser;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVudGl0eS1wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUM7QUFDNUMsSUFBTSxRQUFRLEdBQU0sYUFBYSxDQUFDO0FBQ2xDLElBQU0sS0FBSyxHQUFTLGtCQUFrQixDQUFDO0FBRXZDO0lBQ0Usc0JBQW9CLEtBQUs7UUFBTCxVQUFLLEdBQUwsS0FBSyxDQUFBO0lBQUcsQ0FBQztJQUU3Qiw0QkFBSyxHQUFMLFVBQU0sTUFBTTtRQUNWLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNaLE1BQU0sQ0FBQztRQUNULENBQUM7UUFDRCxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWixNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWixNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUNILG1CQUFDO0FBQUQsQ0FBQyxBQXBCRCxJQW9CQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEhFWENIQVJDT0RFID0gL14jW3hYXShbQS1GYS1mMC05XSspJC87XG5jb25zdCBDSEFSQ09ERSAgICA9IC9eIyhbMC05XSspJC87XG5jb25zdCBOQU1FRCAgICAgICA9IC9eKFtBLVphLXowLTldKykkLztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW50aXR5UGFyc2VyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuYW1lZCkge31cblxuICBwYXJzZShlbnRpdHkpIHtcbiAgICBpZiAoIWVudGl0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgbWF0Y2hlcyA9IGVudGl0eS5tYXRjaChIRVhDSEFSQ09ERSk7XG4gICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KG1hdGNoZXNbMV0sIDE2KSk7XG4gICAgfVxuICAgIG1hdGNoZXMgPSBlbnRpdHkubWF0Y2goQ0hBUkNPREUpO1xuICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChtYXRjaGVzWzFdLCAxMCkpO1xuICAgIH1cbiAgICBtYXRjaGVzID0gZW50aXR5Lm1hdGNoKE5BTUVEKTtcbiAgICBpZiAobWF0Y2hlcykge1xuICAgICAgcmV0dXJuIHRoaXMubmFtZWRbbWF0Y2hlc1sxXV07XG4gICAgfVxuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVudGl0eS1wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUM7QUFDNUMsSUFBTSxRQUFRLEdBQU0sYUFBYSxDQUFDO0FBQ2xDLElBQU0sS0FBSyxHQUFTLGtCQUFrQixDQUFDO0FBRXZDO0lBQ0Usc0JBQW9CLEtBQUs7UUFBTCxVQUFLLEdBQUwsS0FBSyxDQUFBO0lBQ3pCLENBQUM7SUFFRCw0QkFBSyxHQUFMLFVBQU0sTUFBTTtRQUNWLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNaLE1BQU0sQ0FBQztRQUNULENBQUM7UUFDRCxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWixNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWixNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUNILG1CQUFDO0FBQUQsQ0FBQyxBQXJCRCxJQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEhFWENIQVJDT0RFID0gL14jW3hYXShbQS1GYS1mMC05XSspJC87XG5jb25zdCBDSEFSQ09ERSAgICA9IC9eIyhbMC05XSspJC87XG5jb25zdCBOQU1FRCAgICAgICA9IC9eKFtBLVphLXowLTldKykkLztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW50aXR5UGFyc2VyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuYW1lZCkge1xuICB9XG5cbiAgcGFyc2UoZW50aXR5KSB7XG4gICAgaWYgKCFlbnRpdHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IG1hdGNoZXMgPSBlbnRpdHkubWF0Y2goSEVYQ0hBUkNPREUpO1xuICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChtYXRjaGVzWzFdLCAxNikpO1xuICAgIH1cbiAgICBtYXRjaGVzID0gZW50aXR5Lm1hdGNoKENIQVJDT0RFKTtcbiAgICBpZiAobWF0Y2hlcykge1xuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobWF0Y2hlc1sxXSwgMTApKTtcbiAgICB9XG4gICAgbWF0Y2hlcyA9IGVudGl0eS5tYXRjaChOQU1FRCk7XG4gICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hbWVkW21hdGNoZXNbMV1dO1xuICAgIH1cbiAgfVxufVxuIl19

@@ -1,2 +0,43 @@

declare function EventedTokenizer(delegate: any, entityParser: any): void;
export default EventedTokenizer;
export default class EventedTokenizer {
private delegate;
private entityParser;
private state;
private input;
private index;
private tagLine;
private tagColumn;
line: number;
column: number;
constructor(delegate: any, entityParser: any);
reset(): void;
tokenize(input: any): void;
tokenizePart(input: any): void;
tokenizeEOF(): void;
flushData(): void;
peek(): any;
consume(): any;
consumeCharRef(): any;
markTagStart(): void;
states: {
beforeData(): void;
data(): void;
tagOpen(): void;
markupDeclaration(): void;
commentStart(): void;
commentStartDash(): void;
comment(): void;
commentEndDash(): void;
commentEnd(): void;
tagName(): void;
beforeAttributeName(): void;
attributeName(): void;
afterAttributeName(): void;
beforeAttributeValue(): void;
attributeValueDoubleQuoted(): void;
attributeValueSingleQuoted(): void;
attributeValueUnquoted(): void;
afterAttributeValueQuoted(): void;
selfClosingStartTag(): void;
endTagOpen(): void;
};
}
import { preprocessInput, isAlpha, isSpace } from './utils';
function EventedTokenizer(delegate, entityParser) {
this.delegate = delegate;
this.entityParser = entityParser;
this.state = null;
this.input = null;
this.index = -1;
this.line = -1;
this.column = -1;
this.tagLine = -1;
this.tagColumn = -1;
this.reset();
}
EventedTokenizer.prototype = {
reset: function () {
var EventedTokenizer = (function () {
function EventedTokenizer(delegate, entityParser) {
this.delegate = delegate;
this.entityParser = entityParser;
this.state = null;
this.input = null;
this.index = -1;
this.tagLine = -1;
this.tagColumn = -1;
this.line = -1;
this.column = -1;
this.states = {
beforeData: function () {
var char = this.peek();
if (char === "<") {
this.state = 'tagOpen';
this.markTagStart();
this.consume();
}
else {
this.state = 'data';
this.delegate.beginData();
}
},
data: function () {
var char = this.peek();
if (char === "<") {
this.delegate.finishData();
this.state = 'tagOpen';
this.markTagStart();
this.consume();
}
else if (char === "&") {
this.consume();
this.delegate.appendToData(this.consumeCharRef() || "&");
}
else {
this.consume();
this.delegate.appendToData(char);
}
},
tagOpen: function () {
var char = this.consume();
if (char === "!") {
this.state = 'markupDeclaration';
}
else if (char === "/") {
this.state = 'endTagOpen';
}
else if (isAlpha(char)) {
this.state = 'tagName';
this.delegate.beginStartTag();
this.delegate.appendToTagName(char.toLowerCase());
}
},
markupDeclaration: function () {
var char = this.consume();
if (char === "-" && this.input.charAt(this.index) === "-") {
this.consume();
this.state = 'commentStart';
this.delegate.beginComment();
}
},
commentStart: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentStartDash';
}
else if (char === ">") {
this.delegate.finishComment();
this.state = 'beforeData';
}
else {
this.delegate.appendToCommentData(char);
this.state = 'comment';
}
},
commentStartDash: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentEnd';
}
else if (char === ">") {
this.delegate.finishComment();
this.state = 'beforeData';
}
else {
this.delegate.appendToCommentData("-");
this.state = 'comment';
}
},
comment: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentEndDash';
}
else {
this.delegate.appendToCommentData(char);
}
},
commentEndDash: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentEnd';
}
else {
this.delegate.appendToCommentData("-" + char);
this.state = 'comment';
}
},
commentEnd: function () {
var char = this.consume();
if (char === ">") {
this.delegate.finishComment();
this.state = 'beforeData';
}
else {
this.delegate.appendToCommentData("--" + char);
this.state = 'comment';
}
},
tagName: function () {
var char = this.consume();
if (isSpace(char)) {
this.state = 'beforeAttributeName';
}
else if (char === "/") {
this.state = 'selfClosingStartTag';
}
else if (char === ">") {
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.delegate.appendToTagName(char);
}
},
beforeAttributeName: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
return;
}
else if (char === "/") {
this.state = 'selfClosingStartTag';
this.consume();
}
else if (char === ">") {
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else if (char === '=') {
this.delegate.reportSyntaxError("attribute name cannot start with equals sign");
this.state = 'attributeName';
this.delegate.beginAttribute();
this.consume();
this.delegate.appendToAttributeName(char);
}
else {
this.state = 'attributeName';
this.delegate.beginAttribute();
}
},
attributeName: function () {
var char = this.peek();
if (isSpace(char)) {
this.state = 'afterAttributeName';
this.consume();
}
else if (char === "/") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.state = 'selfClosingStartTag';
}
else if (char === "=") {
this.state = 'beforeAttributeValue';
this.consume();
}
else if (char === ">") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else if (char === '"' || char === "'" || char === '<') {
this.delegate.reportSyntaxError(char + " is not a valid character within attribute names");
this.consume();
this.delegate.appendToAttributeName(char);
}
else {
this.consume();
this.delegate.appendToAttributeName(char);
}
},
afterAttributeName: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
return;
}
else if (char === "/") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.state = 'selfClosingStartTag';
}
else if (char === "=") {
this.consume();
this.state = 'beforeAttributeValue';
}
else if (char === ">") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.state = 'attributeName';
this.delegate.beginAttribute();
this.delegate.appendToAttributeName(char);
}
},
beforeAttributeValue: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
}
else if (char === '"') {
this.state = 'attributeValueDoubleQuoted';
this.delegate.beginAttributeValue(true);
this.consume();
}
else if (char === "'") {
this.state = 'attributeValueSingleQuoted';
this.delegate.beginAttributeValue(true);
this.consume();
}
else if (char === ">") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.state = 'attributeValueUnquoted';
this.delegate.beginAttributeValue(false);
this.consume();
this.delegate.appendToAttributeValue(char);
}
},
attributeValueDoubleQuoted: function () {
var char = this.consume();
if (char === '"') {
this.delegate.finishAttributeValue();
this.state = 'afterAttributeValueQuoted';
}
else if (char === "&") {
this.delegate.appendToAttributeValue(this.consumeCharRef('"') || "&");
}
else {
this.delegate.appendToAttributeValue(char);
}
},
attributeValueSingleQuoted: function () {
var char = this.consume();
if (char === "'") {
this.delegate.finishAttributeValue();
this.state = 'afterAttributeValueQuoted';
}
else if (char === "&") {
this.delegate.appendToAttributeValue(this.consumeCharRef("'") || "&");
}
else {
this.delegate.appendToAttributeValue(char);
}
},
attributeValueUnquoted: function () {
var char = this.peek();
if (isSpace(char)) {
this.delegate.finishAttributeValue();
this.consume();
this.state = 'beforeAttributeName';
}
else if (char === "&") {
this.consume();
this.delegate.appendToAttributeValue(this.consumeCharRef(">") || "&");
}
else if (char === ">") {
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.consume();
this.delegate.appendToAttributeValue(char);
}
},
afterAttributeValueQuoted: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
this.state = 'beforeAttributeName';
}
else if (char === "/") {
this.consume();
this.state = 'selfClosingStartTag';
}
else if (char === ">") {
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.state = 'beforeAttributeName';
}
},
selfClosingStartTag: function () {
var char = this.peek();
if (char === ">") {
this.consume();
this.delegate.markTagAsSelfClosing();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.state = 'beforeAttributeName';
}
},
endTagOpen: function () {
var char = this.consume();
if (isAlpha(char)) {
this.state = 'tagName';
this.delegate.beginEndTag();
this.delegate.appendToTagName(char.toLowerCase());
}
}
};
this.reset();
}
EventedTokenizer.prototype.reset = function () {
this.state = 'beforeData';

@@ -24,9 +359,9 @@ this.input = '';

this.delegate.reset();
},
tokenize: function (input) {
};
EventedTokenizer.prototype.tokenize = function (input) {
this.reset();
this.tokenizePart(input);
this.tokenizeEOF();
},
tokenizePart: function (input) {
};
EventedTokenizer.prototype.tokenizePart = function (input) {
this.input += preprocessInput(input);

@@ -36,7 +371,7 @@ while (this.index < this.input.length) {

}
},
tokenizeEOF: function () {
};
EventedTokenizer.prototype.tokenizeEOF = function () {
this.flushData();
},
flushData: function () {
};
EventedTokenizer.prototype.flushData = function () {
if (this.state === 'data') {

@@ -46,7 +381,7 @@ this.delegate.finishData();

}
},
peek: function () {
};
EventedTokenizer.prototype.peek = function () {
return this.input.charAt(this.index);
},
consume: function () {
};
EventedTokenizer.prototype.consume = function () {
var char = this.peek();

@@ -62,4 +397,4 @@ this.index++;

return char;
},
consumeCharRef: function () {
};
EventedTokenizer.prototype.consumeCharRef = function () {
var endIndex = this.input.indexOf(';', this.index);

@@ -82,4 +417,4 @@ if (endIndex === -1) {

}
},
markTagStart: function () {
};
EventedTokenizer.prototype.markTagStart = function () {
// these properties to be removed in next major bump

@@ -91,340 +426,6 @@ this.tagLine = this.line;

}
},
states: {
beforeData: function () {
var char = this.peek();
if (char === "<") {
this.state = 'tagOpen';
this.markTagStart();
this.consume();
}
else {
this.state = 'data';
this.delegate.beginData();
}
},
data: function () {
var char = this.peek();
if (char === "<") {
this.delegate.finishData();
this.state = 'tagOpen';
this.markTagStart();
this.consume();
}
else if (char === "&") {
this.consume();
this.delegate.appendToData(this.consumeCharRef() || "&");
}
else {
this.consume();
this.delegate.appendToData(char);
}
},
tagOpen: function () {
var char = this.consume();
if (char === "!") {
this.state = 'markupDeclaration';
}
else if (char === "/") {
this.state = 'endTagOpen';
}
else if (isAlpha(char)) {
this.state = 'tagName';
this.delegate.beginStartTag();
this.delegate.appendToTagName(char.toLowerCase());
}
},
markupDeclaration: function () {
var char = this.consume();
if (char === "-" && this.input.charAt(this.index) === "-") {
this.consume();
this.state = 'commentStart';
this.delegate.beginComment();
}
},
commentStart: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentStartDash';
}
else if (char === ">") {
this.delegate.finishComment();
this.state = 'beforeData';
}
else {
this.delegate.appendToCommentData(char);
this.state = 'comment';
}
},
commentStartDash: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentEnd';
}
else if (char === ">") {
this.delegate.finishComment();
this.state = 'beforeData';
}
else {
this.delegate.appendToCommentData("-");
this.state = 'comment';
}
},
comment: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentEndDash';
}
else {
this.delegate.appendToCommentData(char);
}
},
commentEndDash: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentEnd';
}
else {
this.delegate.appendToCommentData("-" + char);
this.state = 'comment';
}
},
commentEnd: function () {
var char = this.consume();
if (char === ">") {
this.delegate.finishComment();
this.state = 'beforeData';
}
else {
this.delegate.appendToCommentData("--" + char);
this.state = 'comment';
}
},
tagName: function () {
var char = this.consume();
if (isSpace(char)) {
this.state = 'beforeAttributeName';
}
else if (char === "/") {
this.state = 'selfClosingStartTag';
}
else if (char === ">") {
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.delegate.appendToTagName(char);
}
},
beforeAttributeName: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
return;
}
else if (char === "/") {
this.state = 'selfClosingStartTag';
this.consume();
}
else if (char === ">") {
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else if (char === '=') {
this.delegate.reportSyntaxError("attribute name cannot start with equals sign");
this.state = 'attributeName';
this.delegate.beginAttribute();
this.consume();
this.delegate.appendToAttributeName(char);
}
else {
this.state = 'attributeName';
this.delegate.beginAttribute();
}
},
attributeName: function () {
var char = this.peek();
if (isSpace(char)) {
this.state = 'afterAttributeName';
this.consume();
}
else if (char === "/") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.state = 'selfClosingStartTag';
}
else if (char === "=") {
this.state = 'beforeAttributeValue';
this.consume();
}
else if (char === ">") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else if (char === '"' || char === "'" || char === '<') {
this.delegate.reportSyntaxError(char + " is not a valid character within attribute names");
this.consume();
this.delegate.appendToAttributeName(char);
}
else {
this.consume();
this.delegate.appendToAttributeName(char);
}
},
afterAttributeName: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
return;
}
else if (char === "/") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.state = 'selfClosingStartTag';
}
else if (char === "=") {
this.consume();
this.state = 'beforeAttributeValue';
}
else if (char === ">") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.state = 'attributeName';
this.delegate.beginAttribute();
this.delegate.appendToAttributeName(char);
}
},
beforeAttributeValue: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
}
else if (char === '"') {
this.state = 'attributeValueDoubleQuoted';
this.delegate.beginAttributeValue(true);
this.consume();
}
else if (char === "'") {
this.state = 'attributeValueSingleQuoted';
this.delegate.beginAttributeValue(true);
this.consume();
}
else if (char === ">") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.state = 'attributeValueUnquoted';
this.delegate.beginAttributeValue(false);
this.consume();
this.delegate.appendToAttributeValue(char);
}
},
attributeValueDoubleQuoted: function () {
var char = this.consume();
if (char === '"') {
this.delegate.finishAttributeValue();
this.state = 'afterAttributeValueQuoted';
}
else if (char === "&") {
this.delegate.appendToAttributeValue(this.consumeCharRef('"') || "&");
}
else {
this.delegate.appendToAttributeValue(char);
}
},
attributeValueSingleQuoted: function () {
var char = this.consume();
if (char === "'") {
this.delegate.finishAttributeValue();
this.state = 'afterAttributeValueQuoted';
}
else if (char === "&") {
this.delegate.appendToAttributeValue(this.consumeCharRef("'") || "&");
}
else {
this.delegate.appendToAttributeValue(char);
}
},
attributeValueUnquoted: function () {
var char = this.peek();
if (isSpace(char)) {
this.delegate.finishAttributeValue();
this.consume();
this.state = 'beforeAttributeName';
}
else if (char === "&") {
this.consume();
this.delegate.appendToAttributeValue(this.consumeCharRef(">") || "&");
}
else if (char === ">") {
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.consume();
this.delegate.appendToAttributeValue(char);
}
},
afterAttributeValueQuoted: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
this.state = 'beforeAttributeName';
}
else if (char === "/") {
this.consume();
this.state = 'selfClosingStartTag';
}
else if (char === ">") {
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.state = 'beforeAttributeName';
}
},
selfClosingStartTag: function () {
var char = this.peek();
if (char === ">") {
this.consume();
this.delegate.markTagAsSelfClosing();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.state = 'beforeAttributeName';
}
},
endTagOpen: function () {
var char = this.consume();
if (isAlpha(char)) {
this.state = 'tagName';
this.delegate.beginEndTag();
this.delegate.appendToTagName(char.toLowerCase());
}
}
}
};
};
return EventedTokenizer;
}());
export default EventedTokenizer;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRlZC10b2tlbml6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJldmVudGVkLXRva2VuaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFNUQsMEJBQTBCLFFBQVEsRUFBRSxZQUFZO0lBQzlDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBRWpDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBRWxCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXBCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNmLENBQUM7QUFFRCxnQkFBZ0IsQ0FBQyxTQUFTLEdBQUc7SUFDM0IsS0FBSyxFQUFFO1FBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFFaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWhCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVw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RUQsbUJBQW1CLEVBQUU7WUFDbkIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRXZCLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQztZQUM1QixDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztZQUNyQyxDQUFDO1FBQ0gsQ0FBQztRQUVELFVBQVUsRUFBRTtZQUNWLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUUxQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUM7S0FDRjtDQUNGLENBQUM7QUFFRixlQUFlLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJlcHJvY2Vzc0lucHV0LCBpc0FscGhhLCBpc1NwYWNlIH0gZnJvbSAnLi91dGlscyc7XG5cbmZ1bmN0aW9uIEV2ZW50ZWRUb2tlbml6ZXIoZGVsZWdhdGUsIGVudGl0eVBhcnNlcikge1xuICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gIHRoaXMuZW50aXR5UGFyc2VyID0gZW50aXR5UGFyc2VyO1xuXG4gIHRoaXMuc3RhdGUgPSBudWxsO1xuICB0aGlzLmlucHV0ID0gbnVsbDtcblxuICB0aGlzLmluZGV4ID0gLTE7XG4gIHRoaXMubGluZSA9IC0xO1xuICB0aGlzLmNvbHVtbiA9IC0xO1xuICB0aGlzLnRhZ0xpbmUgPSAtMTtcbiAgdGhpcy50YWdDb2x1bW4gPSAtMTtcblxuICB0aGlzLnJlc2V0KCk7XG59XG5cbkV2ZW50ZWRUb2tlbml6ZXIucHJvdG90eXBlID0ge1xuICByZXNldDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdGF0ZSA9ICdiZWZvcmVEYXRhJztcbiAgICB0aGlzLmlucHV0ID0gJyc7XG5cbiAgICB0aGlzLmluZGV4ID0gMDtcbiAgICB0aGlzLmxpbmUgPSAxO1xuICAgIHRoaXMuY29sdW1uID0gMDtcblxuICAgIHRoaXMudGFnTGluZSA9IC0xO1xuICAgIHRoaXMudGFnQ29sdW1uID0gLTE7XG5cbiAgICB0aGlzLmRlbGVnYXRlLnJlc2V0KCk7XG4gIH0sXG5cbiAgdG9rZW5pemU6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHRoaXMudG9rZW5pemVQYXJ0KGlucHV0KTtcbiAgICB0aGlzLnRva2VuaXplRU9GKCk7XG4gIH0sXG5cbiAgdG9rZW5pemVQYXJ0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgIHRoaXMuaW5wdXQgKz0gcHJlcHJvY2Vzc0lucHV0KGlucHV0KTtcblxuICAgIHdoaWxlICh0aGlzLmluZGV4IDwgdGhpcy5pbnB1dC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc3RhdGVzW3RoaXMuc3RhdGVdLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LFxuXG4gIHRva2VuaXplRU9GOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmZsdXNoRGF0YSgpO1xuICB9LFxuXG4gIGZsdXNoRGF0YTogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdkYXRhJykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hEYXRhKCk7XG4gICAgICB0aGlzLnN0YXRlID0gJ2JlZm9yZURhdGEnO1xuICAgIH1cbiAgfSxcblxuICBwZWVrOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dC5jaGFyQXQodGhpcy5pbmRleCk7XG4gIH0sXG5cbiAgY29uc3VtZTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGNoYXIgPSB0aGlzLnBlZWsoKTtcblxuICAgIHRoaXMuaW5kZXgrKztcblxuICAgIGlmIChjaGFyID09PSBcIlxcblwiKSB7XG4gICAgICB0aGlzLmxpbmUrKztcbiAgICAgIHRoaXMuY29sdW1uID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW4rKztcbiAgICB9XG5cbiAgICByZXR1cm4gY2hhcjtcbiAgfSxcblxuICBjb25zdW1lQ2hhclJlZjogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGVuZEluZGV4ID0gdGhpcy5pbnB1dC5pbmRleE9mKCc7JywgdGhpcy5pbmRleCk7XG4gICAgaWYgKGVuZEluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZW50aXR5ID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLmluZGV4LCBlbmRJbmRleCk7XG4gICAgbGV0IGNoYXJzID0gdGhpcy5lbnRpdHlQYXJzZXIucGFyc2UoZW50aXR5KTtcbiAgICBpZiAoY2hhcnMpIHtcbiAgICAgIGxldCBjb3VudCA9IGVudGl0eS5sZW5ndGg7XG4gICAgICAvLyBjb25zdW1lIHRoZSBlbnRpdHkgY2hhcnNcbiAgICAgIHdoaWxlIChjb3VudCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgY291bnQtLTtcbiAgICAgIH1cbiAgICAgIC8vIGNvbnN1bWUgdGhlIGA7YFxuICAgICAgdGhpcy5jb25zdW1lKCk7XG5cbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG4gIH0sXG5cbiAgbWFya1RhZ1N0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICAvLyB0aGVzZSBwcm9wZXJ0aWVzIHRvIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciBidW1wXG4gICAgdGhpcy50YWdMaW5lID0gdGhpcy5saW5lO1xuICAgIHRoaXMudGFnQ29sdW1uID0gdGhpcy5jb2x1bW47XG5cbiAgICBpZiAodGhpcy5kZWxlZ2F0ZS50YWdPcGVuKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlLnRhZ09wZW4oKTtcbiAgICB9XG4gIH0sXG5cbiAgc3RhdGVzOiB7XG4gICAgYmVmb3JlRGF0YTogZnVuY3Rpb24oKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMucGVlaygpO1xuXG4gICAgICBpZiAoY2hhciA9PT0gXCI8XCIpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICd0YWdPcGVuJztcbiAgICAgICAgdGhpcy5tYXJrVGFnU3RhcnQoKTtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2RhdGEnO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmJlZ2luRGF0YSgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRhOiBmdW5jdGlvbigpIHtcbiAgICAgIGxldCBjaGFyID0gdGhpcy5wZWVrKCk7XG5cbiAgICAgIGlmIChjaGFyID09PSBcIjxcIikge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZpbmlzaERhdGEoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICd0YWdPcGVuJztcbiAgICAgICAgdGhpcy5tYXJrVGFnU3RhcnQoKTtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7wqBcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gXCImXCIpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYXBwZW5kVG9EYXRhKHRoaXMuY29uc3VtZUNoYXJSZWYoKSB8fCBcIiZcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb0RhdGEoY2hhcik7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHRhZ09wZW46IGZ1bmN0aW9uKCkge1xuICAgICAgbGV0IGNoYXIgPSB0aGlzLmNvbnN1bWUoKTtcblxuICAgICAgaWYgKGNoYXIgPT09IFwiIVwiKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnbWFya3VwRGVjbGFyYXRpb24nO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSBcIi9cIikge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2VuZFRhZ09wZW4nO1xuICAgICAgfSBlbHNlIGlmIChpc0FscGhhKGNoYXIpKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAndGFnTmFtZSc7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYmVnaW5TdGFydFRhZygpO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmFwcGVuZFRvVGFnTmFtZShjaGFyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrdXBEZWNsYXJhdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMuY29uc3VtZSgpO1xuXG4gICAgICBpZiAoY2hhciA9PT0gXCItXCIgJiYgdGhpcy5pbnB1dC5jaGFyQXQodGhpcy5pbmRleCkgPT09IFwiLVwiKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2NvbW1lbnRTdGFydCc7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYmVnaW5Db21tZW50KCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbW1lbnRTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMuY29uc3VtZSgpO1xuXG4gICAgICBpZiAoY2hhciA9PT0gXCItXCIpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdjb21tZW50U3RhcnREYXNoJztcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gXCI+XCIpIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hDb21tZW50KCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYmVmb3JlRGF0YSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmFwcGVuZFRvQ29tbWVudERhdGEoY2hhcik7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnY29tbWVudCc7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbW1lbnRTdGFydERhc2g6IGZ1bmN0aW9uKCkge1xuICAgICAgbGV0IGNoYXIgPSB0aGlzLmNvbnN1bWUoKTtcblxuICAgICAgaWYgKGNoYXIgPT09IFwiLVwiKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnY29tbWVudEVuZCc7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiPlwiKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoQ29tbWVudCgpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2JlZm9yZURhdGEnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb0NvbW1lbnREYXRhKFwiLVwiKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdjb21tZW50JztcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tbWVudDogZnVuY3Rpb24oKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMuY29uc3VtZSgpO1xuXG4gICAgICBpZiAoY2hhciA9PT0gXCItXCIpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdjb21tZW50RW5kRGFzaCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmFwcGVuZFRvQ29tbWVudERhdGEoY2hhcik7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbW1lbnRFbmREYXNoOiBmdW5jdGlvbigpIHtcbiAgICAgIGxldCBjaGFyID0gdGhpcy5jb25zdW1lKCk7XG5cbiAgICAgIGlmIChjaGFyID09PSBcIi1cIikge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2NvbW1lbnRFbmQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb0NvbW1lbnREYXRhKFwiLVwiICsgY2hhcik7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnY29tbWVudCc7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbW1lbnRFbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgbGV0IGNoYXIgPSB0aGlzLmNvbnN1bWUoKTtcblxuICAgICAgaWYgKGNoYXIgPT09IFwiPlwiKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoQ29tbWVudCgpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2JlZm9yZURhdGEnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb0NvbW1lbnREYXRhKFwiLS1cIiArIGNoYXIpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2NvbW1lbnQnO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICB0YWdOYW1lOiBmdW5jdGlvbigpIHtcbiAgICAgIGxldCBjaGFyID0gdGhpcy5jb25zdW1lKCk7XG5cbiAgICAgIGlmIChpc1NwYWNlKGNoYXIpKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYmVmb3JlQXR0cmlidXRlTmFtZSc7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiL1wiKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnc2VsZkNsb3NpbmdTdGFydFRhZyc7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiPlwiKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoVGFnKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYmVmb3JlRGF0YSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmFwcGVuZFRvVGFnTmFtZShjaGFyKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYmVmb3JlQXR0cmlidXRlTmFtZTogZnVuY3Rpb24oKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMucGVlaygpO1xuXG4gICAgICBpZiAoaXNTcGFjZShjaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSBcIi9cIikge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ3NlbGZDbG9zaW5nU3RhcnRUYWcnO1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gXCI+XCIpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoVGFnKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYmVmb3JlRGF0YSc7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICc9Jykge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLnJlcG9ydFN5bnRheEVycm9yKFwiYXR0cmlidXRlIG5hbWUgY2Fubm90IHN0YXJ0IHdpdGggZXF1YWxzIHNpZ25cIik7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYXR0cmlidXRlTmFtZSc7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYmVnaW5BdHRyaWJ1dGUoKTtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYXBwZW5kVG9BdHRyaWJ1dGVOYW1lKGNoYXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdhdHRyaWJ1dGVOYW1lJztcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5iZWdpbkF0dHJpYnV0ZSgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVOYW1lOiBmdW5jdGlvbigpIHtcbiAgICAgIGxldCBjaGFyID0gdGhpcy5wZWVrKCk7XG5cbiAgICAgIGlmIChpc1NwYWNlKGNoYXIpKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYWZ0ZXJBdHRyaWJ1dGVOYW1lJztcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiL1wiKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYmVnaW5BdHRyaWJ1dGVWYWx1ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoQXR0cmlidXRlVmFsdWUoKTtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnc2VsZkNsb3NpbmdTdGFydFRhZyc7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiPVwiKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYmVmb3JlQXR0cmlidXRlVmFsdWUnO1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gXCI+XCIpIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5iZWdpbkF0dHJpYnV0ZVZhbHVlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hBdHRyaWJ1dGVWYWx1ZSgpO1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hUYWcoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdiZWZvcmVEYXRhJztcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJ1wiJyB8fCBjaGFyID09PSBcIidcIiB8fCBjaGFyID09PSAnPCcpIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5yZXBvcnRTeW50YXhFcnJvcihjaGFyICsgXCIgaXMgbm90IGEgdmFsaWQgY2hhcmFjdGVyIHdpdGhpbiBhdHRyaWJ1dGUgbmFtZXNcIik7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmFwcGVuZFRvQXR0cmlidXRlTmFtZShjaGFyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmFwcGVuZFRvQXR0cmlidXRlTmFtZShjaGFyKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWZ0ZXJBdHRyaWJ1dGVOYW1lOiBmdW5jdGlvbigpIHtcbiAgICAgIGxldCBjaGFyID0gdGhpcy5wZWVrKCk7XG5cbiAgICAgIGlmIChpc1NwYWNlKGNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiL1wiKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYmVnaW5BdHRyaWJ1dGVWYWx1ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoQXR0cmlidXRlVmFsdWUoKTtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnc2VsZkNsb3NpbmdTdGFydFRhZyc7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiPVwiKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2JlZm9yZUF0dHJpYnV0ZVZhbHVlJztcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gXCI+XCIpIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5iZWdpbkF0dHJpYnV0ZVZhbHVlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hBdHRyaWJ1dGVWYWx1ZSgpO1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hUYWcoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdiZWZvcmVEYXRhJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYmVnaW5BdHRyaWJ1dGVWYWx1ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoQXR0cmlidXRlVmFsdWUoKTtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYXR0cmlidXRlTmFtZSc7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYmVnaW5BdHRyaWJ1dGUoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb0F0dHJpYnV0ZU5hbWUoY2hhcik7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGJlZm9yZUF0dHJpYnV0ZVZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgIGxldCBjaGFyID0gdGhpcy5wZWVrKCk7XG5cbiAgICAgIGlmIChpc1NwYWNlKGNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYXR0cmlidXRlVmFsdWVEb3VibGVRdW90ZWQnO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmJlZ2luQXR0cmlidXRlVmFsdWUodHJ1ZSk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSBcIidcIikge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2F0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVkJztcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5iZWdpbkF0dHJpYnV0ZVZhbHVlKHRydWUpO1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gXCI+XCIpIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5iZWdpbkF0dHJpYnV0ZVZhbHVlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hBdHRyaWJ1dGVWYWx1ZSgpO1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hUYWcoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdiZWZvcmVEYXRhJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYXR0cmlidXRlVmFsdWVVbnF1b3RlZCc7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYmVnaW5BdHRyaWJ1dGVWYWx1ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmFwcGVuZFRvQXR0cmlidXRlVmFsdWUoY2hhcik7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZVZhbHVlRG91YmxlUXVvdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgIGxldCBjaGFyID0gdGhpcy5jb25zdW1lKCk7XG5cbiAgICAgIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoQXR0cmlidXRlVmFsdWUoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdhZnRlckF0dHJpYnV0ZVZhbHVlUXVvdGVkJztcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gXCImXCIpIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKHRoaXMuY29uc3VtZUNoYXJSZWYoJ1wiJykgfHwgXCImXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKGNoYXIpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVWYWx1ZVNpbmdsZVF1b3RlZDogZnVuY3Rpb24oKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMuY29uc3VtZSgpO1xuXG4gICAgICBpZiAoY2hhciA9PT0gXCInXCIpIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hBdHRyaWJ1dGVWYWx1ZSgpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2FmdGVyQXR0cmlidXRlVmFsdWVRdW90ZWQnO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSBcIiZcIikge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmFwcGVuZFRvQXR0cmlidXRlVmFsdWUodGhpcy5jb25zdW1lQ2hhclJlZihcIidcIikgfHwgXCImXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKGNoYXIpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVWYWx1ZVVucXVvdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgIGxldCBjaGFyID0gdGhpcy5wZWVrKCk7XG5cbiAgICAgIGlmIChpc1NwYWNlKGNoYXIpKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoQXR0cmlidXRlVmFsdWUoKTtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYmVmb3JlQXR0cmlidXRlTmFtZSc7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiJlwiKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmFwcGVuZFRvQXR0cmlidXRlVmFsdWUodGhpcy5jb25zdW1lQ2hhclJlZihcIj5cIikgfHwgXCImXCIpO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSBcIj5cIikge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZpbmlzaEF0dHJpYnV0ZVZhbHVlKCk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZpbmlzaFRhZygpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2JlZm9yZURhdGEnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZShjaGFyKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWZ0ZXJBdHRyaWJ1dGVWYWx1ZVF1b3RlZDogZnVuY3Rpb24oKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMucGVlaygpO1xuXG4gICAgICBpZiAoaXNTcGFjZShjaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdiZWZvcmVBdHRyaWJ1dGVOYW1lJztcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gXCIvXCIpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnc2VsZkNsb3NpbmdTdGFydFRhZyc7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiPlwiKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZpbmlzaFRhZygpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2JlZm9yZURhdGEnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdiZWZvcmVBdHRyaWJ1dGVOYW1lJztcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZkNsb3NpbmdTdGFydFRhZzogZnVuY3Rpb24oKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMucGVlaygpO1xuXG4gICAgICBpZiAoY2hhciA9PT0gXCI+XCIpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUubWFya1RhZ0FzU2VsZkNsb3NpbmcoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hUYWcoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdiZWZvcmVEYXRhJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYmVmb3JlQXR0cmlidXRlTmFtZSc7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGVuZFRhZ09wZW46IGZ1bmN0aW9uKCkge1xuICAgICAgbGV0IGNoYXIgPSB0aGlzLmNvbnN1bWUoKTtcblxuICAgICAgaWYgKGlzQWxwaGEoY2hhcikpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICd0YWdOYW1lJztcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5iZWdpbkVuZFRhZygpO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmFwcGVuZFRvVGFnTmFtZShjaGFyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRlZFRva2VuaXplcjtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRlZC10b2tlbml6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJldmVudGVkLXRva2VuaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFNUQ7SUFVRSwwQkFBb0IsUUFBUSxFQUFVLFlBQVk7UUFBOUIsYUFBUSxHQUFSLFFBQVEsQ0FBQTtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFBO1FBVDFDLFVBQUssR0FBUSxJQUFJLENBQUM7UUFDbEIsVUFBSyxHQUFRLElBQUksQ0FBQztRQUNsQixVQUFLLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDbkIsWUFBTyxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLGNBQVMsR0FBVyxDQUFDLENBQUMsQ0FBQztRQUV4QixTQUFJLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDbEIsV0FBTSxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBK0YzQixXQUFNLEdBQUc7WUFDUCxVQUFVO2dCQUNSLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFdkIsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO29CQUN2QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakIsQ0FBQztnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDTixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztvQkFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDNUIsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJO2dCQUNGLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFdkIsRUFBRSxDQUFD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USxDQUFDLENBQUM7UUFDcEQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNWLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDMUIsMkJBQTJCO1lBQzNCLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNmLEtBQUssRUFBRSxDQUFDO1lBQ1YsQ0FBQztZQUNELGtCQUFrQjtZQUNsQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFZixNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCx1Q0FBWSxHQUFaO1FBQ0Usb0RBQW9EO1FBQ3BELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFN0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUE2VUgsdUJBQUM7QUFBRCxDQUFDLEFBbGJELElBa2JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJlcHJvY2Vzc0lucHV0LCBpc0FscGhhLCBpc1NwYWNlIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50ZWRUb2tlbml6ZXIge1xuICBwcml2YXRlIHN0YXRlOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIGlucHV0OiBhbnkgPSBudWxsO1xuICBwcml2YXRlIGluZGV4OiBudW1iZXIgPSAtMTtcbiAgcHJpdmF0ZSB0YWdMaW5lOiBudW1iZXIgPSAtMTtcbiAgcHJpdmF0ZSB0YWdDb2x1bW46IG51bWJlciA9IC0xO1xuXG4gIHB1YmxpYyBsaW5lOiBudW1iZXIgPSAtMTtcbiAgcHVibGljIGNvbHVtbjogbnVtYmVyID0gLTE7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkZWxlZ2F0ZSwgcHJpdmF0ZSBlbnRpdHlQYXJzZXIpIHtcbiAgICB0aGlzLnJlc2V0KCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnN0YXRlID0gJ2JlZm9yZURhdGEnO1xuICAgIHRoaXMuaW5wdXQgPSAnJztcblxuICAgIHRoaXMuaW5kZXggPSAwO1xuICAgIHRoaXMubGluZSA9IDE7XG4gICAgdGhpcy5jb2x1bW4gPSAwO1xuXG4gICAgdGhpcy50YWdMaW5lID0gLTE7XG4gICAgdGhpcy50YWdDb2x1bW4gPSAtMTtcblxuICAgIHRoaXMuZGVsZWdhdGUucmVzZXQoKTtcbiAgfVxuXG4gIHRva2VuaXplKGlucHV0KSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHRoaXMudG9rZW5pemVQYXJ0KGlucHV0KTtcbiAgICB0aGlzLnRva2VuaXplRU9GKCk7XG4gIH1cblxuICB0b2tlbml6ZVBhcnQoaW5wdXQpIHtcbiAgICB0aGlzLmlucHV0ICs9IHByZXByb2Nlc3NJbnB1dChpbnB1dCk7XG5cbiAgICB3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMuaW5wdXQubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN0YXRlc1t0aGlzLnN0YXRlXS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHRva2VuaXplRU9GKCkge1xuICAgIHRoaXMuZmx1c2hEYXRhKCk7XG4gIH1cblxuICBmbHVzaERhdGEoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdkYXRhJykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hEYXRhKCk7XG4gICAgICB0aGlzLnN0YXRlID0gJ2JlZm9yZURhdGEnO1xuICAgIH1cbiAgfVxuXG4gIHBlZWsoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXQuY2hhckF0KHRoaXMuaW5kZXgpO1xuICB9XG5cbiAgY29uc3VtZSgpIHtcbiAgICBsZXQgY2hhciA9IHRoaXMucGVlaygpO1xuXG4gICAgdGhpcy5pbmRleCsrO1xuXG4gICAgaWYgKGNoYXIgPT09IFwiXFxuXCIpIHtcbiAgICAgIHRoaXMubGluZSsrO1xuICAgICAgdGhpcy5jb2x1bW4gPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbHVtbisrO1xuICAgIH1cblxuICAgIHJldHVybiBjaGFyO1xuICB9XG5cbiAgY29uc3VtZUNoYXJSZWYoKSB7XG4gICAgbGV0IGVuZEluZGV4ID0gdGhpcy5pbnB1dC5pbmRleE9mKCc7JywgdGhpcy5pbmRleCk7XG4gICAgaWYgKGVuZEluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZW50aXR5ID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLmluZGV4LCBlbmRJbmRleCk7XG4gICAgbGV0IGNoYXJzID0gdGhpcy5lbnRpdHlQYXJzZXIucGFyc2UoZW50aXR5KTtcbiAgICBpZiAoY2hhcnMpIHtcbiAgICAgIGxldCBjb3VudCA9IGVudGl0eS5sZW5ndGg7XG4gICAgICAvLyBjb25zdW1lIHRoZSBlbnRpdHkgY2hhcnNcbiAgICAgIHdoaWxlIChjb3VudCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgY291bnQtLTtcbiAgICAgIH1cbiAgICAgIC8vIGNvbnN1bWUgdGhlIGA7YFxuICAgICAgdGhpcy5jb25zdW1lKCk7XG5cbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG4gIH1cblxuICBtYXJrVGFnU3RhcnQoKSB7XG4gICAgLy8gdGhlc2UgcHJvcGVydGllcyB0byBiZSByZW1vdmVkIGluIG5leHQgbWFqb3IgYnVtcFxuICAgIHRoaXMudGFnTGluZSA9IHRoaXMubGluZTtcbiAgICB0aGlzLnRhZ0NvbHVtbiA9IHRoaXMuY29sdW1uO1xuXG4gICAgaWYgKHRoaXMuZGVsZWdhdGUudGFnT3Blbikge1xuICAgICAgdGhpcy5kZWxlZ2F0ZS50YWdPcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGVzID0ge1xuICAgIGJlZm9yZURhdGEoKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMucGVlaygpO1xuXG4gICAgICBpZiAoY2hhciA9PT0gXCI8XCIpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICd0YWdPcGVuJztcbiAgICAgICAgdGhpcy5tYXJrVGFnU3RhcnQoKTtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2RhdGEnO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmJlZ2luRGF0YSgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRhKCkge1xuICAgICAgbGV0IGNoYXIgPSB0aGlzLnBlZWsoKTtcblxuICAgICAgaWYgKGNoYXIgPT09IFwiPFwiKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoRGF0YSgpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ3RhZ09wZW4nO1xuICAgICAgICB0aGlzLm1hcmtUYWdTdGFydCgpO1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTvCoFxuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSBcIiZcIikge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb0RhdGEodGhpcy5jb25zdW1lQ2hhclJlZigpIHx8IFwiJlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmFwcGVuZFRvRGF0YShjaGFyKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdGFnT3BlbigpIHtcbiAgICAgIGxldCBjaGFyID0gdGhpcy5jb25zdW1lKCk7XG5cbiAgICAgIGlmIChjaGFyID09PSBcIiFcIikge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ21hcmt1cERlY2xhcmF0aW9uJztcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gXCIvXCIpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdlbmRUYWdPcGVuJztcbiAgICAgIH0gZWxzZSBpZiAoaXNBbHBoYShjaGFyKSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ3RhZ05hbWUnO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmJlZ2luU3RhcnRUYWcoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb1RhZ05hbWUoY2hhci50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWFya3VwRGVjbGFyYXRpb24oKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMuY29uc3VtZSgpO1xuXG4gICAgICBpZiAoY2hhciA9PT0gXCItXCIgJiYgdGhpcy5pbnB1dC5jaGFyQXQodGhpcy5pbmRleCkgPT09IFwiLVwiKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2NvbW1lbnRTdGFydCc7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYmVnaW5Db21tZW50KCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbW1lbnRTdGFydCgpIHtcbiAgICAgIGxldCBjaGFyID0gdGhpcy5jb25zdW1lKCk7XG5cbiAgICAgIGlmIChjaGFyID09PSBcIi1cIikge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2NvbW1lbnRTdGFydERhc2gnO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSBcIj5cIikge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZpbmlzaENvbW1lbnQoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdiZWZvcmVEYXRhJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYXBwZW5kVG9Db21tZW50RGF0YShjaGFyKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdjb21tZW50JztcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tbWVudFN0YXJ0RGFzaCgpIHtcbiAgICAgIGxldCBjaGFyID0gdGhpcy5jb25zdW1lKCk7XG5cbiAgICAgIGlmIChjaGFyID09PSBcIi1cIikge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2NvbW1lbnRFbmQnO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSBcIj5cIikge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZpbmlzaENvbW1lbnQoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdiZWZvcmVEYXRhJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYXBwZW5kVG9Db21tZW50RGF0YShcIi1cIik7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnY29tbWVudCc7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbW1lbnQoKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMuY29uc3VtZSgpO1xuXG4gICAgICBpZiAoY2hhciA9PT0gXCItXCIpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdjb21tZW50RW5kRGFzaCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmFwcGVuZFRvQ29tbWVudERhdGEoY2hhcik7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbW1lbnRFbmREYXNoKCkge1xuICAgICAgbGV0IGNoYXIgPSB0aGlzLmNvbnN1bWUoKTtcblxuICAgICAgaWYgKGNoYXIgPT09IFwiLVwiKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnY29tbWVudEVuZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmFwcGVuZFRvQ29tbWVudERhdGEoXCItXCIgKyBjaGFyKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdjb21tZW50JztcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tbWVudEVuZCgpIHtcbiAgICAgIGxldCBjaGFyID0gdGhpcy5jb25zdW1lKCk7XG5cbiAgICAgIGlmIChjaGFyID09PSBcIj5cIikge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZpbmlzaENvbW1lbnQoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdiZWZvcmVEYXRhJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYXBwZW5kVG9Db21tZW50RGF0YShcIi0tXCIgKyBjaGFyKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdjb21tZW50JztcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdGFnTmFtZSgpIHtcbiAgICAgIGxldCBjaGFyID0gdGhpcy5jb25zdW1lKCk7XG5cbiAgICAgIGlmIChpc1NwYWNlKGNoYXIpKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYmVmb3JlQXR0cmlidXRlTmFtZSc7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiL1wiKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnc2VsZkNsb3NpbmdTdGFydFRhZyc7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiPlwiKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoVGFnKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYmVmb3JlRGF0YSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmFwcGVuZFRvVGFnTmFtZShjaGFyKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYmVmb3JlQXR0cmlidXRlTmFtZSgpIHtcbiAgICAgIGxldCBjaGFyID0gdGhpcy5wZWVrKCk7XG5cbiAgICAgIGlmIChpc1NwYWNlKGNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiL1wiKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnc2VsZkNsb3NpbmdTdGFydFRhZyc7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSBcIj5cIikge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hUYWcoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdiZWZvcmVEYXRhJztcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJz0nKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUucmVwb3J0U3ludGF4RXJyb3IoXCJhdHRyaWJ1dGUgbmFtZSBjYW5ub3Qgc3RhcnQgd2l0aCBlcXVhbHMgc2lnblwiKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdhdHRyaWJ1dGVOYW1lJztcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5iZWdpbkF0dHJpYnV0ZSgpO1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb0F0dHJpYnV0ZU5hbWUoY2hhcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2F0dHJpYnV0ZU5hbWUnO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmJlZ2luQXR0cmlidXRlKCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZU5hbWUoKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMucGVlaygpO1xuXG4gICAgICBpZiAoaXNTcGFjZShjaGFyKSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2FmdGVyQXR0cmlidXRlTmFtZSc7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSBcIi9cIikge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmJlZ2luQXR0cmlidXRlVmFsdWUoZmFsc2UpO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZpbmlzaEF0dHJpYnV0ZVZhbHVlKCk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ3NlbGZDbG9zaW5nU3RhcnRUYWcnO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSBcIj1cIikge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2JlZm9yZUF0dHJpYnV0ZVZhbHVlJztcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiPlwiKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYmVnaW5BdHRyaWJ1dGVWYWx1ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoQXR0cmlidXRlVmFsdWUoKTtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoVGFnKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYmVmb3JlRGF0YSc7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICdcIicgfHwgY2hhciA9PT0gXCInXCIgfHwgY2hhciA9PT0gJzwnKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUucmVwb3J0U3ludGF4RXJyb3IoY2hhciArIFwiIGlzIG5vdCBhIHZhbGlkIGNoYXJhY3RlciB3aXRoaW4gYXR0cmlidXRlIG5hbWVzXCIpO1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb0F0dHJpYnV0ZU5hbWUoY2hhcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb0F0dHJpYnV0ZU5hbWUoY2hhcik7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFmdGVyQXR0cmlidXRlTmFtZSgpIHtcbiAgICAgIGxldCBjaGFyID0gdGhpcy5wZWVrKCk7XG5cbiAgICAgIGlmIChpc1NwYWNlKGNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiL1wiKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYmVnaW5BdHRyaWJ1dGVWYWx1ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoQXR0cmlidXRlVmFsdWUoKTtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnc2VsZkNsb3NpbmdTdGFydFRhZyc7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiPVwiKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2JlZm9yZUF0dHJpYnV0ZVZhbHVlJztcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gXCI+XCIpIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5iZWdpbkF0dHJpYnV0ZVZhbHVlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hBdHRyaWJ1dGVWYWx1ZSgpO1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hUYWcoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdiZWZvcmVEYXRhJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYmVnaW5BdHRyaWJ1dGVWYWx1ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoQXR0cmlidXRlVmFsdWUoKTtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYXR0cmlidXRlTmFtZSc7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYmVnaW5BdHRyaWJ1dGUoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb0F0dHJpYnV0ZU5hbWUoY2hhcik7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGJlZm9yZUF0dHJpYnV0ZVZhbHVlKCkge1xuICAgICAgbGV0IGNoYXIgPSB0aGlzLnBlZWsoKTtcblxuICAgICAgaWYgKGlzU3BhY2UoY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICdcIicpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdhdHRyaWJ1dGVWYWx1ZURvdWJsZVF1b3RlZCc7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYmVnaW5BdHRyaWJ1dGVWYWx1ZSh0cnVlKTtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiJ1wiKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYXR0cmlidXRlVmFsdWVTaW5nbGVRdW90ZWQnO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmJlZ2luQXR0cmlidXRlVmFsdWUodHJ1ZSk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSBcIj5cIikge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmJlZ2luQXR0cmlidXRlVmFsdWUoZmFsc2UpO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZpbmlzaEF0dHJpYnV0ZVZhbHVlKCk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZpbmlzaFRhZygpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2JlZm9yZURhdGEnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdhdHRyaWJ1dGVWYWx1ZVVucXVvdGVkJztcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5iZWdpbkF0dHJpYnV0ZVZhbHVlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZShjaGFyKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0cmlidXRlVmFsdWVEb3VibGVRdW90ZWQoKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMuY29uc3VtZSgpO1xuXG4gICAgICBpZiAoY2hhciA9PT0gJ1wiJykge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZpbmlzaEF0dHJpYnV0ZVZhbHVlKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYWZ0ZXJBdHRyaWJ1dGVWYWx1ZVF1b3RlZCc7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiJlwiKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZSh0aGlzLmNvbnN1bWVDaGFyUmVmKCdcIicpIHx8IFwiJlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZShjaGFyKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0cmlidXRlVmFsdWVTaW5nbGVRdW90ZWQoKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMuY29uc3VtZSgpO1xuXG4gICAgICBpZiAoY2hhciA9PT0gXCInXCIpIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hBdHRyaWJ1dGVWYWx1ZSgpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ2FmdGVyQXR0cmlidXRlVmFsdWVRdW90ZWQnO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSBcIiZcIikge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmFwcGVuZFRvQXR0cmlidXRlVmFsdWUodGhpcy5jb25zdW1lQ2hhclJlZihcIidcIikgfHwgXCImXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKGNoYXIpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVWYWx1ZVVucXVvdGVkKCkge1xuICAgICAgbGV0IGNoYXIgPSB0aGlzLnBlZWsoKTtcblxuICAgICAgaWYgKGlzU3BhY2UoY2hhcikpIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hBdHRyaWJ1dGVWYWx1ZSgpO1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdiZWZvcmVBdHRyaWJ1dGVOYW1lJztcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gXCImXCIpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZSh0aGlzLmNvbnN1bWVDaGFyUmVmKFwiPlwiKSB8fCBcIiZcIik7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiPlwiKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoQXR0cmlidXRlVmFsdWUoKTtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZmluaXNoVGFnKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYmVmb3JlRGF0YSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKGNoYXIpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhZnRlckF0dHJpYnV0ZVZhbHVlUXVvdGVkKCkge1xuICAgICAgbGV0IGNoYXIgPSB0aGlzLnBlZWsoKTtcblxuICAgICAgaWYgKGlzU3BhY2UoY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYmVmb3JlQXR0cmlidXRlTmFtZSc7XG4gICAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiL1wiKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ3NlbGZDbG9zaW5nU3RhcnRUYWcnO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSBcIj5cIikge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hUYWcoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdiZWZvcmVEYXRhJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYmVmb3JlQXR0cmlidXRlTmFtZSc7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGZDbG9zaW5nU3RhcnRUYWcoKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMucGVlaygpO1xuXG4gICAgICBpZiAoY2hhciA9PT0gXCI+XCIpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUubWFya1RhZ0FzU2VsZkNsb3NpbmcoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5maW5pc2hUYWcoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdiZWZvcmVEYXRhJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnYmVmb3JlQXR0cmlidXRlTmFtZSc7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGVuZFRhZ09wZW4oKSB7XG4gICAgICBsZXQgY2hhciA9IHRoaXMuY29uc3VtZSgpO1xuXG4gICAgICBpZiAoaXNBbHBoYShjaGFyKSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gJ3RhZ05hbWUnO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmJlZ2luRW5kVGFnKCk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuYXBwZW5kVG9UYWdOYW1lKGNoYXIudG9Mb3dlckNhc2UoKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIl19

@@ -1,1 +0,2 @@

export default function tokenize(input: any, options: any): any;
import { Token } from './tokenizer';
export default function tokenize(input: any, options: any): Token[];

@@ -8,2 +8,2 @@ import Tokenizer from './tokenizer';

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0b2tlbml6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVMsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxZQUFZLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxhQUFhLE1BQU0seUJBQXlCLENBQUM7QUFFcEQsTUFBTSxDQUFDLE9BQU8sbUJBQW1CLEtBQUssRUFBRSxPQUFPO0lBQzdDLElBQUksU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVG9rZW5pemVyIGZyb20gJy4vdG9rZW5pemVyJztcbmltcG9ydCBFbnRpdHlQYXJzZXIgZnJvbSAnLi9lbnRpdHktcGFyc2VyJztcbmltcG9ydCBuYW1lZENoYXJSZWZzIGZyb20gJy4vaHRtbDUtbmFtZWQtY2hhci1yZWZzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9rZW5pemUoaW5wdXQsIG9wdGlvbnMpIHtcbiAgbGV0IHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIobmV3IEVudGl0eVBhcnNlcihuYW1lZENoYXJSZWZzKSwgb3B0aW9ucyk7XG4gIHJldHVybiB0b2tlbml6ZXIudG9rZW5pemUoaW5wdXQpO1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0b2tlbml6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQW9CLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sWUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sYUFBYSxNQUFNLHlCQUF5QixDQUFDO0FBRXBELE1BQU0sQ0FBQyxPQUFPLG1CQUFtQixLQUFLLEVBQUUsT0FBTztJQUM3QyxJQUFJLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRva2VuaXplciwgeyBUb2tlbiB9IGZyb20gJy4vdG9rZW5pemVyJztcbmltcG9ydCBFbnRpdHlQYXJzZXIgZnJvbSAnLi9lbnRpdHktcGFyc2VyJztcbmltcG9ydCBuYW1lZENoYXJSZWZzIGZyb20gJy4vaHRtbDUtbmFtZWQtY2hhci1yZWZzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9rZW5pemUoaW5wdXQsIG9wdGlvbnMpOiBUb2tlbltdIHtcbiAgbGV0IHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIobmV3IEVudGl0eVBhcnNlcihuYW1lZENoYXJSZWZzKSwgb3B0aW9ucyk7XG4gIHJldHVybiB0b2tlbml6ZXIudG9rZW5pemUoaW5wdXQpO1xufVxuIl19

@@ -1,2 +0,54 @@

declare function Tokenizer(entityParser: any, options: any): void;
export default Tokenizer;
export interface TokenizerOptions {
loc?: any;
}
export declare type Attribute = [string, string, boolean];
export interface Token {
type: string;
chars?: string;
attributes?: Attribute[];
tagName?: string;
selfClosing?: boolean;
loc?: {
start: {
line: number;
column: number;
};
end: {
line: number;
column: number;
};
};
syntaxError?: string;
}
export default class Tokenizer {
private options;
private token;
private startLine;
private startColumn;
private tokenizer;
private tokens;
private currentAttribute;
constructor(entityParser: any, options?: TokenizerOptions);
tokenize(input: any): Token[];
tokenizePart(input: any): Token[];
tokenizeEOF(): Token;
reset(): void;
addLocInfo(): void;
beginData(): void;
appendToData(char: any): void;
finishData(): void;
beginComment(): void;
appendToCommentData(char: any): void;
finishComment(): void;
beginStartTag(): void;
beginEndTag(): void;
finishTag(): void;
markTagAsSelfClosing(): void;
appendToTagName(char: any): void;
beginAttribute(): void;
appendToAttributeName(char: any): void;
beginAttributeValue(isQuoted: any): void;
appendToAttributeValue(char: any): void;
finishAttributeValue(): void;
reportSyntaxError(message: string): void;
}
import EventedTokenizer from './evented-tokenizer';
function Tokenizer(entityParser, options) {
this.token = null;
this.startLine = 1;
this.startColumn = 0;
this.options = options || {};
this.tokenizer = new EventedTokenizer(this, entityParser);
}
Tokenizer.prototype = {
tokenize: function (input) {
;
var Tokenizer = (function () {
function Tokenizer(entityParser, options) {
if (options === void 0) { options = {}; }
this.options = options;
this.token = null;
this.startLine = 1;
this.startColumn = 0;
this.tokens = [];
this.currentAttribute = null;
this.tokenizer = new EventedTokenizer(this, entityParser);
}
Tokenizer.prototype.tokenize = function (input) {
this.tokens = [];
this.tokenizer.tokenize(input);
return this.tokens;
},
tokenizePart: function (input) {
};
Tokenizer.prototype.tokenizePart = function (input) {
this.tokens = [];
this.tokenizer.tokenizePart(input);
return this.tokens;
},
tokenizeEOF: function () {
};
Tokenizer.prototype.tokenizeEOF = function () {
this.tokens = [];
this.tokenizer.tokenizeEOF();
return this.tokens[0];
},
reset: function () {
};
Tokenizer.prototype.reset = function () {
this.token = null;
this.startLine = 1;
this.startColumn = 0;
},
addLocInfo: function () {
};
Tokenizer.prototype.addLocInfo = function () {
if (this.options.loc) {

@@ -45,5 +49,5 @@ this.token.loc = {

this.startColumn = this.tokenizer.column;
},
};
// Data
beginData: function () {
Tokenizer.prototype.beginData = function () {
this.token = {

@@ -54,11 +58,11 @@ type: 'Chars',

this.tokens.push(this.token);
},
appendToData: function (char) {
};
Tokenizer.prototype.appendToData = function (char) {
this.token.chars += char;
},
finishData: function () {
};
Tokenizer.prototype.finishData = function () {
this.addLocInfo();
},
};
// Comment
beginComment: function () {
Tokenizer.prototype.beginComment = function () {
this.token = {

@@ -69,11 +73,11 @@ type: 'Comment',

this.tokens.push(this.token);
},
appendToCommentData: function (char) {
};
Tokenizer.prototype.appendToCommentData = function (char) {
this.token.chars += char;
},
finishComment: function () {
};
Tokenizer.prototype.finishComment = function () {
this.addLocInfo();
},
};
// Tags - basic
beginStartTag: function () {
Tokenizer.prototype.beginStartTag = function () {
this.token = {

@@ -86,4 +90,4 @@ type: 'StartTag',

this.tokens.push(this.token);
},
beginEndTag: function () {
};
Tokenizer.prototype.beginEndTag = function () {
this.token = {

@@ -94,35 +98,36 @@ type: 'EndTag',

this.tokens.push(this.token);
},
finishTag: function () {
};
Tokenizer.prototype.finishTag = function () {
this.addLocInfo();
},
markTagAsSelfClosing: function () {
};
Tokenizer.prototype.markTagAsSelfClosing = function () {
this.token.selfClosing = true;
},
};
// Tags - name
appendToTagName: function (char) {
Tokenizer.prototype.appendToTagName = function (char) {
this.token.tagName += char;
},
};
// Tags - attributes
beginAttribute: function () {
this._currentAttribute = ["", "", null];
this.token.attributes.push(this._currentAttribute);
},
appendToAttributeName: function (char) {
this._currentAttribute[0] += char;
},
beginAttributeValue: function (isQuoted) {
this._currentAttribute[2] = isQuoted;
},
appendToAttributeValue: function (char) {
this._currentAttribute[1] = this._currentAttribute[1] || "";
this._currentAttribute[1] += char;
},
finishAttributeValue: function () {
},
reportSyntaxError: function (message) {
Tokenizer.prototype.beginAttribute = function () {
this.currentAttribute = ["", "", null];
this.token.attributes.push(this.currentAttribute);
};
Tokenizer.prototype.appendToAttributeName = function (char) {
this.currentAttribute[0] += char;
};
Tokenizer.prototype.beginAttributeValue = function (isQuoted) {
this.currentAttribute[2] = isQuoted;
};
Tokenizer.prototype.appendToAttributeValue = function (char) {
this.currentAttribute[1] = this.currentAttribute[1] || "";
this.currentAttribute[1] += char;
};
Tokenizer.prototype.finishAttributeValue = function () {
};
Tokenizer.prototype.reportSyntaxError = function (message) {
this.token.syntaxError = message;
}
};
};
return Tokenizer;
}());
export default Tokenizer;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidG9rZW5pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sZ0JBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsbUJBQW1CLFlBQVksRUFBRSxPQUFPO0lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHO0lBQ3BCLFFBQVEsRUFBRSxVQUFTLEtBQUs7UUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELFlBQVksRUFBRSxVQUFTLEtBQUs7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVcsRUFBRTtRQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELEtB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QUVwQixjQUFjLEVBQUU7UUFDZCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQscUJBQXFCLEVBQUUsVUFBUyxJQUFJO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDcEMsQ0FBQztJQUVELG1CQUFtQixFQUFFLFVBQVMsUUFBUTtRQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxzQkFBc0IsRUFBRSxVQUFTLElBQUk7UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNwQyxDQUFDO0lBRUQsb0JBQW9CLEVBQUU7SUFDdEIsQ0FBQztJQUVELGlCQUFpQixFQUFFLFVBQVMsT0FBTztRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7SUFDbkMsQ0FBQztDQUNGLENBQUM7QUFFRixlQUFlLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFdmVudGVkVG9rZW5pemVyIGZyb20gJy4vZXZlbnRlZC10b2tlbml6ZXInO1xuXG5mdW5jdGlvbiBUb2tlbml6ZXIoZW50aXR5UGFyc2VyLCBvcHRpb25zKSB7XG4gIHRoaXMudG9rZW4gPSBudWxsO1xuICB0aGlzLnN0YXJ0TGluZSA9IDE7XG4gIHRoaXMuc3RhcnRDb2x1bW4gPSAwO1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB0aGlzLnRva2VuaXplciA9IG5ldyBFdmVudGVkVG9rZW5pemVyKHRoaXMsIGVudGl0eVBhcnNlcik7XG59XG5cblRva2VuaXplci5wcm90b3R5cGUgPSB7XG4gIHRva2VuaXplOiBmdW5jdGlvbihpbnB1dCkge1xuICAgIHRoaXMudG9rZW5zID0gW107XG4gICAgdGhpcy50b2tlbml6ZXIudG9rZW5pemUoaW5wdXQpO1xuICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgfSxcblxuICB0b2tlbml6ZVBhcnQ6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgdGhpcy50b2tlbnMgPSBbXTtcbiAgICB0aGlzLnRva2VuaXplci50b2tlbml6ZVBhcnQoaW5wdXQpO1xuICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgfSxcblxuICB0b2tlbml6ZUVPRjogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50b2tlbnMgPSBbXTtcbiAgICB0aGlzLnRva2VuaXplci50b2tlbml6ZUVPRigpO1xuICAgIHJldHVybiB0aGlzLnRva2Vuc1swXTtcbiAgfSxcblxuICByZXNldDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50b2tlbiA9IG51bGw7XG4gICAgdGhpcy5zdGFydExpbmUgPSAxO1xuICAgIHRoaXMuc3RhcnRDb2x1bW4gPSAwO1xuICB9LFxuXG4gIGFkZExvY0luZm86IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubG9jKSB7XG4gICAgICB0aGlzLnRva2VuLmxvYyA9IHtcbiAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICBsaW5lOiB0aGlzLnN0YXJ0TGluZSxcbiAgICAgICAgICBjb2x1bW46IHRoaXMuc3RhcnRDb2x1bW5cbiAgICAgICAgfSxcbiAgICAgICAgZW5kOiB7XG4gICAgICAgICAgbGluZTogdGhpcy50b2tlbml6ZXIubGluZSxcbiAgICAgICAgICBjb2x1bW46IHRoaXMudG9rZW5pemVyLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLnN0YXJ0TGluZSA9IHRoaXMudG9rZW5pemVyLmxpbmU7XG4gICAgdGhpcy5zdGFydENvbHVtbiA9IHRoaXMudG9rZW5pemVyLmNvbHVtbjtcbiAgfSxcblxuICAvLyBEYXRhXG5cbiAgYmVnaW5EYXRhOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRva2VuID0ge1xuICAgICAgdHlwZTogJ0NoYXJzJyxcbiAgICAgIGNoYXJzOiAnJ1xuICAgIH07XG4gICAgdGhpcy50b2tlbnMucHVzaCh0aGlzLnRva2VuKTtcbiAgfSxcblxuICBhcHBlbmRUb0RhdGE6IGZ1bmN0aW9uKGNoYXIpIHtcbiAgICB0aGlzLnRva2VuLmNoYXJzICs9IGNoYXI7XG4gIH0sXG5cbiAgZmluaXNoRGF0YTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5hZGRMb2NJbmZvKCk7XG4gIH0sXG5cbiAgLy8gQ29tbWVudFxuXG4gIGJlZ2luQ29tbWVudDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50b2tlbiA9IHtcbiAgICAgIHR5cGU6ICdDb21tZW50JyxcbiAgICAgIGNoYXJzOiAnJ1xuICAgIH07XG4gICAgdGhpcy50b2tlbnMucHVzaCh0aGlzLnRva2VuKTtcbiAgfSxcblxuICBhcHBlbmRUb0NvbW1lbnREYXRhOiBmdW5jdGlvbihjaGFyKSB7XG4gICAgdGhpcy50b2tlbi5jaGFycyArPSBjaGFyO1xuICB9LFxuXG4gIGZpbmlzaENvbW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuYWRkTG9jSW5mbygpO1xuICB9LFxuXG4gIC8vIFRhZ3MgLSBiYXNpY1xuXG4gIGJlZ2luU3RhcnRUYWc6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudG9rZW4gPSB7XG4gICAgICB0eXBlOiAnU3RhcnRUYWcnLFxuICAgICAgdGFnTmFtZTogJycsXG4gICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgIHNlbGZDbG9zaW5nOiBmYWxzZVxuICAgIH07XG4gICAgdGhpcy50b2tlbnMucHVzaCh0aGlzLnRva2VuKTtcbiAgfSxcblxuICBiZWdpbkVuZFRhZzogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50b2tlbiA9IHtcbiAgICAgIHR5cGU6ICdFbmRUYWcnLFxuICAgICAgdGFnTmFtZTogJydcbiAgICB9O1xuICAgIHRoaXMudG9rZW5zLnB1c2godGhpcy50b2tlbik7XG4gIH0sXG5cbiAgZmluaXNoVGFnOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmFkZExvY0luZm8oKTtcbiAgfSxcblxuICBtYXJrVGFnQXNTZWxmQ2xvc2luZzogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50b2tlbi5zZWxmQ2xvc2luZyA9IHRydWU7XG4gIH0sXG5cbiAgLy8gVGFncyAtIG5hbWVcblxuICBhcHBlbmRUb1RhZ05hbWU6IGZ1bmN0aW9uKGNoYXIpIHtcbiAgICB0aGlzLnRva2VuLnRhZ05hbWUgKz0gY2hhcjtcbiAgfSxcblxuICAvLyBUYWdzIC0gYXR0cmlidXRlc1xuXG4gIGJlZ2luQXR0cmlidXRlOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9jdXJyZW50QXR0cmlidXRlID0gW1wiXCIsIFwiXCIsIG51bGxdO1xuICAgIHRoaXMudG9rZW4uYXR0cmlidXRlcy5wdXNoKHRoaXMuX2N1cnJlbnRBdHRyaWJ1dGUpO1xuICB9LFxuXG4gIGFwcGVuZFRvQXR0cmlidXRlTmFtZTogZnVuY3Rpb24oY2hhcikge1xuICAgIHRoaXMuX2N1cnJlbnRBdHRyaWJ1dGVbMF0gKz0gY2hhcjtcbiAgfSxcblxuICBiZWdpbkF0dHJpYnV0ZVZhbHVlOiBmdW5jdGlvbihpc1F1b3RlZCkge1xuICAgIHRoaXMuX2N1cnJlbnRBdHRyaWJ1dGVbMl0gPSBpc1F1b3RlZDtcbiAgfSxcblxuICBhcHBlbmRUb0F0dHJpYnV0ZVZhbHVlOiBmdW5jdGlvbihjaGFyKSB7XG4gICAgdGhpcy5fY3VycmVudEF0dHJpYnV0ZVsxXSA9IHRoaXMuX2N1cnJlbnRBdHRyaWJ1dGVbMV0gfHwgXCJcIjtcbiAgICB0aGlzLl9jdXJyZW50QXR0cmlidXRlWzFdICs9IGNoYXI7XG4gIH0sXG5cbiAgZmluaXNoQXR0cmlidXRlVmFsdWU6IGZ1bmN0aW9uKCkge1xuICB9LFxuXG4gIHJlcG9ydFN5bnRheEVycm9yOiBmdW5jdGlvbihtZXNzYWdlKSB7XG4gICAgdGhpcy50b2tlbi5zeW50YXhFcnJvciA9IG1lc3NhZ2U7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRva2VuaXplcjtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidG9rZW5pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sZ0JBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFJbEQsQ0FBQztBQXVCRjtJQVFFLG1CQUFZLFlBQVksRUFBVSxPQUE4QjtRQUE5Qix3QkFBQSxFQUFBLFlBQThCO1FBQTlCLFlBQU8sR0FBUCxPQUFPLENBQXVCO1FBUHhELFVBQUssR0FBVSxJQUFJLENBQUM7UUFDcEIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRWhCLFdBQU0sR0FBWSxFQUFFLENBQUM7UUFDckIscUJBQWdCLEdBQWMsSUFBSSxDQUFDO1FBR3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELDRCQUFRLEdBQVIsVUFBUyxLQUFLO1FBQ1osSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELGdDQUFZLEdBQVosVUFBYSxLQUFLO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCwrQkFBVyxHQUFYO1FBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQseUJBQUssR0FBTDtRQUNFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCw4QkFBVSxHQUFWO1FBQ0UsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHO2dCQUNmLEtBQUssRUFBRTtvQkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVztpQkFDekI7Z0JBQ0QsR0FBRyxFQUFFO29CQUNILElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUk7b0JBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07aUJBQzlCO2FBQ0YsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDM0MsQ0FBQztJQUVELE9BQU87SUFFUCw2QkFBUyxHQUFUO1FBQ0UsSUFBSSxDQUFDLEtBQUssR0FBRztZQUNYLElBQUksRUFBRSxPQUFPO1lBQ2IsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxnQ0FBWSxHQUFaLFVBQWEsSUFBSTtRQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQsOEJBQVUsR0FBVjtRQUNFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsVUFBVTtJQUVWLGdDQUFZLEdBQVo7UUFDRSxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsSUFBSSxFQUFFLFNBQVM7WUFDZixLQUFLLEVBQUUsRUFBRTtTQUNWLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELHVDQUFtQixHQUFuQixVQUFvQixJQUFJO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQsaUNBQWEsR0FBYjtRQUNFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsZUFBZTtJQUVmLGlDQUFhLEdBQWI7UUFDRSxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsSUFBSSxFQUFFLFVBQVU7WUFDaEIsT0FBTyxFQUFFLEVBQUU7WUFDWCxVQUFVLEVBQUUsRUFBRTtZQUNkLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELCtCQUFXLEdBQVg7UUFDRSxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsSUFBSSxFQUFFLFFBQVE7WUFDZCxPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELDZCQUFTLEdBQVQ7UUFDRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELHdDQUFvQixHQUFwQjtRQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsY0FBYztJQUVkLG1DQUFlLEdBQWYsVUFBZ0IsSUFBSTtRQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUVELG9CQUFvQjtJQUVwQixrQ0FBYyxHQUFkO1FBQ0UsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELHlDQUFxQixHQUFyQixVQUFzQixJQUFJO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVELHVDQUFtQixHQUFuQixVQUFvQixRQUFRO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDdEMsQ0FBQztJQUVELDBDQUFzQixHQUF0QixVQUF1QixJQUFJO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVELHdDQUFvQixHQUFwQjtJQUNBLENBQUM7SUFFRCxxQ0FBaUIsR0FBakIsVUFBa0IsT0FBZTtRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUNILGdCQUFDO0FBQUQsQ0FBQyxBQXJKRCxJQXFKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFdmVudGVkVG9rZW5pemVyIGZyb20gJy4vZXZlbnRlZC10b2tlbml6ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuaXplck9wdGlvbnMge1xuICBsb2M/OiBhbnk7XG59O1xuXG5leHBvcnQgdHlwZSBBdHRyaWJ1dGUgPSBbc3RyaW5nLCBzdHJpbmcsIGJvb2xlYW5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuIHtcbiAgdHlwZTogc3RyaW5nO1xuICBjaGFycz86IHN0cmluZztcbiAgYXR0cmlidXRlcz86IEF0dHJpYnV0ZVtdO1xuICB0YWdOYW1lPzogc3RyaW5nO1xuICBzZWxmQ2xvc2luZz86IGJvb2xlYW47XG4gIGxvYz86IHtcbiAgICBzdGFydDoge1xuICAgICAgbGluZTogbnVtYmVyO1xuICAgICAgY29sdW1uOiBudW1iZXI7XG4gICAgfSxcbiAgICBlbmQ6IHtcbiAgICAgIGxpbmU6IG51bWJlcjtcbiAgICAgIGNvbHVtbjogbnVtYmVyO1xuICAgIH1cbiAgfTtcbiAgc3ludGF4RXJyb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuaXplciB7XG4gIHByaXZhdGUgdG9rZW46IFRva2VuID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGFydExpbmUgPSAxO1xuICBwcml2YXRlIHN0YXJ0Q29sdW1uID0gMDtcbiAgcHJpdmF0ZSB0b2tlbml6ZXI6IEV2ZW50ZWRUb2tlbml6ZXI7XG4gIHByaXZhdGUgdG9rZW5zOiBUb2tlbltdID0gW107XG4gIHByaXZhdGUgY3VycmVudEF0dHJpYnV0ZTogQXR0cmlidXRlID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihlbnRpdHlQYXJzZXIsIHByaXZhdGUgb3B0aW9uczogVG9rZW5pemVyT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy50b2tlbml6ZXIgPSBuZXcgRXZlbnRlZFRva2VuaXplcih0aGlzLCBlbnRpdHlQYXJzZXIpO1xuICB9XG5cbiAgdG9rZW5pemUoaW5wdXQpIHtcbiAgICB0aGlzLnRva2VucyA9IFtdO1xuICAgIHRoaXMudG9rZW5pemVyLnRva2VuaXplKGlucHV0KTtcbiAgICByZXR1cm4gdGhpcy50b2tlbnM7XG4gIH1cblxuICB0b2tlbml6ZVBhcnQoaW5wdXQpIHtcbiAgICB0aGlzLnRva2VucyA9IFtdO1xuICAgIHRoaXMudG9rZW5pemVyLnRva2VuaXplUGFydChpbnB1dCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cbiAgdG9rZW5pemVFT0YoKSB7XG4gICAgdGhpcy50b2tlbnMgPSBbXTtcbiAgICB0aGlzLnRva2VuaXplci50b2tlbml6ZUVPRigpO1xuICAgIHJldHVybiB0aGlzLnRva2Vuc1swXTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudG9rZW4gPSBudWxsO1xuICAgIHRoaXMuc3RhcnRMaW5lID0gMTtcbiAgICB0aGlzLnN0YXJ0Q29sdW1uID0gMDtcbiAgfVxuXG4gIGFkZExvY0luZm8oKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2MpIHtcbiAgICAgIHRoaXMudG9rZW4ubG9jID0ge1xuICAgICAgICBzdGFydDoge1xuICAgICAgICAgIGxpbmU6IHRoaXMuc3RhcnRMaW5lLFxuICAgICAgICAgIGNvbHVtbjogdGhpcy5zdGFydENvbHVtblxuICAgICAgICB9LFxuICAgICAgICBlbmQ6IHtcbiAgICAgICAgICBsaW5lOiB0aGlzLnRva2VuaXplci5saW5lLFxuICAgICAgICAgIGNvbHVtbjogdGhpcy50b2tlbml6ZXIuY29sdW1uXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMuc3RhcnRMaW5lID0gdGhpcy50b2tlbml6ZXIubGluZTtcbiAgICB0aGlzLnN0YXJ0Q29sdW1uID0gdGhpcy50b2tlbml6ZXIuY29sdW1uO1xuICB9XG5cbiAgLy8gRGF0YVxuXG4gIGJlZ2luRGF0YSgpIHtcbiAgICB0aGlzLnRva2VuID0ge1xuICAgICAgdHlwZTogJ0NoYXJzJyxcbiAgICAgIGNoYXJzOiAnJ1xuICAgIH07XG4gICAgdGhpcy50b2tlbnMucHVzaCh0aGlzLnRva2VuKTtcbiAgfVxuXG4gIGFwcGVuZFRvRGF0YShjaGFyKSB7XG4gICAgdGhpcy50b2tlbi5jaGFycyArPSBjaGFyO1xuICB9XG5cbiAgZmluaXNoRGF0YSgpIHtcbiAgICB0aGlzLmFkZExvY0luZm8oKTtcbiAgfVxuXG4gIC8vIENvbW1lbnRcblxuICBiZWdpbkNvbW1lbnQoKSB7XG4gICAgdGhpcy50b2tlbiA9IHtcbiAgICAgIHR5cGU6ICdDb21tZW50JyxcbiAgICAgIGNoYXJzOiAnJ1xuICAgIH07XG4gICAgdGhpcy50b2tlbnMucHVzaCh0aGlzLnRva2VuKTtcbiAgfVxuXG4gIGFwcGVuZFRvQ29tbWVudERhdGEoY2hhcikge1xuICAgIHRoaXMudG9rZW4uY2hhcnMgKz0gY2hhcjtcbiAgfVxuXG4gIGZpbmlzaENvbW1lbnQoKSB7XG4gICAgdGhpcy5hZGRMb2NJbmZvKCk7XG4gIH1cblxuICAvLyBUYWdzIC0gYmFzaWNcblxuICBiZWdpblN0YXJ0VGFnKCkge1xuICAgIHRoaXMudG9rZW4gPSB7XG4gICAgICB0eXBlOiAnU3RhcnRUYWcnLFxuICAgICAgdGFnTmFtZTogJycsXG4gICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgIHNlbGZDbG9zaW5nOiBmYWxzZVxuICAgIH07XG4gICAgdGhpcy50b2tlbnMucHVzaCh0aGlzLnRva2VuKTtcbiAgfVxuXG4gIGJlZ2luRW5kVGFnKCkge1xuICAgIHRoaXMudG9rZW4gPSB7XG4gICAgICB0eXBlOiAnRW5kVGFnJyxcbiAgICAgIHRhZ05hbWU6ICcnXG4gICAgfTtcbiAgICB0aGlzLnRva2Vucy5wdXNoKHRoaXMudG9rZW4pO1xuICB9XG5cbiAgZmluaXNoVGFnKCkge1xuICAgIHRoaXMuYWRkTG9jSW5mbygpO1xuICB9XG5cbiAgbWFya1RhZ0FzU2VsZkNsb3NpbmcoKSB7XG4gICAgdGhpcy50b2tlbi5zZWxmQ2xvc2luZyA9IHRydWU7XG4gIH1cblxuICAvLyBUYWdzIC0gbmFtZVxuXG4gIGFwcGVuZFRvVGFnTmFtZShjaGFyKSB7XG4gICAgdGhpcy50b2tlbi50YWdOYW1lICs9IGNoYXI7XG4gIH1cblxuICAvLyBUYWdzIC0gYXR0cmlidXRlc1xuXG4gIGJlZ2luQXR0cmlidXRlKCkge1xuICAgIHRoaXMuY3VycmVudEF0dHJpYnV0ZSA9IFtcIlwiLCBcIlwiLCBudWxsXTtcbiAgICB0aGlzLnRva2VuLmF0dHJpYnV0ZXMucHVzaCh0aGlzLmN1cnJlbnRBdHRyaWJ1dGUpO1xuICB9XG5cbiAgYXBwZW5kVG9BdHRyaWJ1dGVOYW1lKGNoYXIpIHtcbiAgICB0aGlzLmN1cnJlbnRBdHRyaWJ1dGVbMF0gKz0gY2hhcjtcbiAgfVxuXG4gIGJlZ2luQXR0cmlidXRlVmFsdWUoaXNRdW90ZWQpIHtcbiAgICB0aGlzLmN1cnJlbnRBdHRyaWJ1dGVbMl0gPSBpc1F1b3RlZDtcbiAgfVxuXG4gIGFwcGVuZFRvQXR0cmlidXRlVmFsdWUoY2hhcikge1xuICAgIHRoaXMuY3VycmVudEF0dHJpYnV0ZVsxXSA9IHRoaXMuY3VycmVudEF0dHJpYnV0ZVsxXSB8fCBcIlwiO1xuICAgIHRoaXMuY3VycmVudEF0dHJpYnV0ZVsxXSArPSBjaGFyO1xuICB9XG5cbiAgZmluaXNoQXR0cmlidXRlVmFsdWUoKSB7XG4gIH1cblxuICByZXBvcnRTeW50YXhFcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRva2VuLnN5bnRheEVycm9yID0gbWVzc2FnZTtcbiAgfVxufVxuIl19
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.HTML5Tokenizer = global.HTML5Tokenizer || {})));
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.HTML5Tokenizer = global.HTML5Tokenizer || {})));
}(this, (function (exports) { 'use strict';

@@ -51,16 +51,351 @@

function EventedTokenizer(delegate, entityParser) {
this.delegate = delegate;
this.entityParser = entityParser;
this.state = null;
this.input = null;
this.index = -1;
this.line = -1;
this.column = -1;
this.tagLine = -1;
this.tagColumn = -1;
this.reset();
}
EventedTokenizer.prototype = {
reset: function () {
var EventedTokenizer = (function () {
function EventedTokenizer(delegate, entityParser) {
this.delegate = delegate;
this.entityParser = entityParser;
this.state = null;
this.input = null;
this.index = -1;
this.tagLine = -1;
this.tagColumn = -1;
this.line = -1;
this.column = -1;
this.states = {
beforeData: function () {
var char = this.peek();
if (char === "<") {
this.state = 'tagOpen';
this.markTagStart();
this.consume();
}
else {
this.state = 'data';
this.delegate.beginData();
}
},
data: function () {
var char = this.peek();
if (char === "<") {
this.delegate.finishData();
this.state = 'tagOpen';
this.markTagStart();
this.consume();
}
else if (char === "&") {
this.consume();
this.delegate.appendToData(this.consumeCharRef() || "&");
}
else {
this.consume();
this.delegate.appendToData(char);
}
},
tagOpen: function () {
var char = this.consume();
if (char === "!") {
this.state = 'markupDeclaration';
}
else if (char === "/") {
this.state = 'endTagOpen';
}
else if (isAlpha(char)) {
this.state = 'tagName';
this.delegate.beginStartTag();
this.delegate.appendToTagName(char.toLowerCase());
}
},
markupDeclaration: function () {
var char = this.consume();
if (char === "-" && this.input.charAt(this.index) === "-") {
this.consume();
this.state = 'commentStart';
this.delegate.beginComment();
}
},
commentStart: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentStartDash';
}
else if (char === ">") {
this.delegate.finishComment();
this.state = 'beforeData';
}
else {
this.delegate.appendToCommentData(char);
this.state = 'comment';
}
},
commentStartDash: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentEnd';
}
else if (char === ">") {
this.delegate.finishComment();
this.state = 'beforeData';
}
else {
this.delegate.appendToCommentData("-");
this.state = 'comment';
}
},
comment: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentEndDash';
}
else {
this.delegate.appendToCommentData(char);
}
},
commentEndDash: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentEnd';
}
else {
this.delegate.appendToCommentData("-" + char);
this.state = 'comment';
}
},
commentEnd: function () {
var char = this.consume();
if (char === ">") {
this.delegate.finishComment();
this.state = 'beforeData';
}
else {
this.delegate.appendToCommentData("--" + char);
this.state = 'comment';
}
},
tagName: function () {
var char = this.consume();
if (isSpace(char)) {
this.state = 'beforeAttributeName';
}
else if (char === "/") {
this.state = 'selfClosingStartTag';
}
else if (char === ">") {
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.delegate.appendToTagName(char);
}
},
beforeAttributeName: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
return;
}
else if (char === "/") {
this.state = 'selfClosingStartTag';
this.consume();
}
else if (char === ">") {
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else if (char === '=') {
this.delegate.reportSyntaxError("attribute name cannot start with equals sign");
this.state = 'attributeName';
this.delegate.beginAttribute();
this.consume();
this.delegate.appendToAttributeName(char);
}
else {
this.state = 'attributeName';
this.delegate.beginAttribute();
}
},
attributeName: function () {
var char = this.peek();
if (isSpace(char)) {
this.state = 'afterAttributeName';
this.consume();
}
else if (char === "/") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.state = 'selfClosingStartTag';
}
else if (char === "=") {
this.state = 'beforeAttributeValue';
this.consume();
}
else if (char === ">") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else if (char === '"' || char === "'" || char === '<') {
this.delegate.reportSyntaxError(char + " is not a valid character within attribute names");
this.consume();
this.delegate.appendToAttributeName(char);
}
else {
this.consume();
this.delegate.appendToAttributeName(char);
}
},
afterAttributeName: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
return;
}
else if (char === "/") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.state = 'selfClosingStartTag';
}
else if (char === "=") {
this.consume();
this.state = 'beforeAttributeValue';
}
else if (char === ">") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.state = 'attributeName';
this.delegate.beginAttribute();
this.delegate.appendToAttributeName(char);
}
},
beforeAttributeValue: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
}
else if (char === '"') {
this.state = 'attributeValueDoubleQuoted';
this.delegate.beginAttributeValue(true);
this.consume();
}
else if (char === "'") {
this.state = 'attributeValueSingleQuoted';
this.delegate.beginAttributeValue(true);
this.consume();
}
else if (char === ">") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.state = 'attributeValueUnquoted';
this.delegate.beginAttributeValue(false);
this.consume();
this.delegate.appendToAttributeValue(char);
}
},
attributeValueDoubleQuoted: function () {
var char = this.consume();
if (char === '"') {
this.delegate.finishAttributeValue();
this.state = 'afterAttributeValueQuoted';
}
else if (char === "&") {
this.delegate.appendToAttributeValue(this.consumeCharRef('"') || "&");
}
else {
this.delegate.appendToAttributeValue(char);
}
},
attributeValueSingleQuoted: function () {
var char = this.consume();
if (char === "'") {
this.delegate.finishAttributeValue();
this.state = 'afterAttributeValueQuoted';
}
else if (char === "&") {
this.delegate.appendToAttributeValue(this.consumeCharRef("'") || "&");
}
else {
this.delegate.appendToAttributeValue(char);
}
},
attributeValueUnquoted: function () {
var char = this.peek();
if (isSpace(char)) {
this.delegate.finishAttributeValue();
this.consume();
this.state = 'beforeAttributeName';
}
else if (char === "&") {
this.consume();
this.delegate.appendToAttributeValue(this.consumeCharRef(">") || "&");
}
else if (char === ">") {
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.consume();
this.delegate.appendToAttributeValue(char);
}
},
afterAttributeValueQuoted: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
this.state = 'beforeAttributeName';
}
else if (char === "/") {
this.consume();
this.state = 'selfClosingStartTag';
}
else if (char === ">") {
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.state = 'beforeAttributeName';
}
},
selfClosingStartTag: function () {
var char = this.peek();
if (char === ">") {
this.consume();
this.delegate.markTagAsSelfClosing();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.state = 'beforeAttributeName';
}
},
endTagOpen: function () {
var char = this.consume();
if (isAlpha(char)) {
this.state = 'tagName';
this.delegate.beginEndTag();
this.delegate.appendToTagName(char.toLowerCase());
}
}
};
this.reset();
}
EventedTokenizer.prototype.reset = function () {
this.state = 'beforeData';

@@ -74,9 +409,9 @@ this.input = '';

this.delegate.reset();
},
tokenize: function (input) {
};
EventedTokenizer.prototype.tokenize = function (input) {
this.reset();
this.tokenizePart(input);
this.tokenizeEOF();
},
tokenizePart: function (input) {
};
EventedTokenizer.prototype.tokenizePart = function (input) {
this.input += preprocessInput(input);

@@ -86,7 +421,7 @@ while (this.index < this.input.length) {

}
},
tokenizeEOF: function () {
};
EventedTokenizer.prototype.tokenizeEOF = function () {
this.flushData();
},
flushData: function () {
};
EventedTokenizer.prototype.flushData = function () {
if (this.state === 'data') {

@@ -96,7 +431,7 @@ this.delegate.finishData();

}
},
peek: function () {
};
EventedTokenizer.prototype.peek = function () {
return this.input.charAt(this.index);
},
consume: function () {
};
EventedTokenizer.prototype.consume = function () {
var char = this.peek();

@@ -112,4 +447,4 @@ this.index++;

return char;
},
consumeCharRef: function () {
};
EventedTokenizer.prototype.consumeCharRef = function () {
var endIndex = this.input.indexOf(';', this.index);

@@ -132,4 +467,4 @@ if (endIndex === -1) {

}
},
markTagStart: function () {
};
EventedTokenizer.prototype.markTagStart = function () {
// these properties to be removed in next major bump

@@ -141,369 +476,38 @@ this.tagLine = this.line;

}
},
states: {
beforeData: function () {
var char = this.peek();
if (char === "<") {
this.state = 'tagOpen';
this.markTagStart();
this.consume();
}
else {
this.state = 'data';
this.delegate.beginData();
}
},
data: function () {
var char = this.peek();
if (char === "<") {
this.delegate.finishData();
this.state = 'tagOpen';
this.markTagStart();
this.consume();
}
else if (char === "&") {
this.consume();
this.delegate.appendToData(this.consumeCharRef() || "&");
}
else {
this.consume();
this.delegate.appendToData(char);
}
},
tagOpen: function () {
var char = this.consume();
if (char === "!") {
this.state = 'markupDeclaration';
}
else if (char === "/") {
this.state = 'endTagOpen';
}
else if (isAlpha(char)) {
this.state = 'tagName';
this.delegate.beginStartTag();
this.delegate.appendToTagName(char.toLowerCase());
}
},
markupDeclaration: function () {
var char = this.consume();
if (char === "-" && this.input.charAt(this.index) === "-") {
this.consume();
this.state = 'commentStart';
this.delegate.beginComment();
}
},
commentStart: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentStartDash';
}
else if (char === ">") {
this.delegate.finishComment();
this.state = 'beforeData';
}
else {
this.delegate.appendToCommentData(char);
this.state = 'comment';
}
},
commentStartDash: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentEnd';
}
else if (char === ">") {
this.delegate.finishComment();
this.state = 'beforeData';
}
else {
this.delegate.appendToCommentData("-");
this.state = 'comment';
}
},
comment: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentEndDash';
}
else {
this.delegate.appendToCommentData(char);
}
},
commentEndDash: function () {
var char = this.consume();
if (char === "-") {
this.state = 'commentEnd';
}
else {
this.delegate.appendToCommentData("-" + char);
this.state = 'comment';
}
},
commentEnd: function () {
var char = this.consume();
if (char === ">") {
this.delegate.finishComment();
this.state = 'beforeData';
}
else {
this.delegate.appendToCommentData("--" + char);
this.state = 'comment';
}
},
tagName: function () {
var char = this.consume();
if (isSpace(char)) {
this.state = 'beforeAttributeName';
}
else if (char === "/") {
this.state = 'selfClosingStartTag';
}
else if (char === ">") {
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.delegate.appendToTagName(char);
}
},
beforeAttributeName: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
return;
}
else if (char === "/") {
this.state = 'selfClosingStartTag';
this.consume();
}
else if (char === ">") {
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else if (char === '=') {
this.delegate.reportSyntaxError("attribute name cannot start with equals sign");
this.state = 'attributeName';
this.delegate.beginAttribute();
this.consume();
this.delegate.appendToAttributeName(char);
}
else {
this.state = 'attributeName';
this.delegate.beginAttribute();
}
},
attributeName: function () {
var char = this.peek();
if (isSpace(char)) {
this.state = 'afterAttributeName';
this.consume();
}
else if (char === "/") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.state = 'selfClosingStartTag';
}
else if (char === "=") {
this.state = 'beforeAttributeValue';
this.consume();
}
else if (char === ">") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else if (char === '"' || char === "'" || char === '<') {
this.delegate.reportSyntaxError(char + " is not a valid character within attribute names");
this.consume();
this.delegate.appendToAttributeName(char);
}
else {
this.consume();
this.delegate.appendToAttributeName(char);
}
},
afterAttributeName: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
return;
}
else if (char === "/") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.state = 'selfClosingStartTag';
}
else if (char === "=") {
this.consume();
this.state = 'beforeAttributeValue';
}
else if (char === ">") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.state = 'attributeName';
this.delegate.beginAttribute();
this.delegate.appendToAttributeName(char);
}
},
beforeAttributeValue: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
}
else if (char === '"') {
this.state = 'attributeValueDoubleQuoted';
this.delegate.beginAttributeValue(true);
this.consume();
}
else if (char === "'") {
this.state = 'attributeValueSingleQuoted';
this.delegate.beginAttributeValue(true);
this.consume();
}
else if (char === ">") {
this.delegate.beginAttributeValue(false);
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.state = 'attributeValueUnquoted';
this.delegate.beginAttributeValue(false);
this.consume();
this.delegate.appendToAttributeValue(char);
}
},
attributeValueDoubleQuoted: function () {
var char = this.consume();
if (char === '"') {
this.delegate.finishAttributeValue();
this.state = 'afterAttributeValueQuoted';
}
else if (char === "&") {
this.delegate.appendToAttributeValue(this.consumeCharRef('"') || "&");
}
else {
this.delegate.appendToAttributeValue(char);
}
},
attributeValueSingleQuoted: function () {
var char = this.consume();
if (char === "'") {
this.delegate.finishAttributeValue();
this.state = 'afterAttributeValueQuoted';
}
else if (char === "&") {
this.delegate.appendToAttributeValue(this.consumeCharRef("'") || "&");
}
else {
this.delegate.appendToAttributeValue(char);
}
},
attributeValueUnquoted: function () {
var char = this.peek();
if (isSpace(char)) {
this.delegate.finishAttributeValue();
this.consume();
this.state = 'beforeAttributeName';
}
else if (char === "&") {
this.consume();
this.delegate.appendToAttributeValue(this.consumeCharRef(">") || "&");
}
else if (char === ">") {
this.delegate.finishAttributeValue();
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.consume();
this.delegate.appendToAttributeValue(char);
}
},
afterAttributeValueQuoted: function () {
var char = this.peek();
if (isSpace(char)) {
this.consume();
this.state = 'beforeAttributeName';
}
else if (char === "/") {
this.consume();
this.state = 'selfClosingStartTag';
}
else if (char === ">") {
this.consume();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.state = 'beforeAttributeName';
}
},
selfClosingStartTag: function () {
var char = this.peek();
if (char === ">") {
this.consume();
this.delegate.markTagAsSelfClosing();
this.delegate.finishTag();
this.state = 'beforeData';
}
else {
this.state = 'beforeAttributeName';
}
},
endTagOpen: function () {
var char = this.consume();
if (isAlpha(char)) {
this.state = 'tagName';
this.delegate.beginEndTag();
this.delegate.appendToTagName(char.toLowerCase());
}
}
}
};
};
return EventedTokenizer;
}());
function Tokenizer(entityParser, options) {
this.token = null;
this.startLine = 1;
this.startColumn = 0;
this.options = options || {};
this.tokenizer = new EventedTokenizer(this, entityParser);
}
Tokenizer.prototype = {
tokenize: function (input) {
var Tokenizer = (function () {
function Tokenizer(entityParser, options) {
if (options === void 0) { options = {}; }
this.options = options;
this.token = null;
this.startLine = 1;
this.startColumn = 0;
this.tokens = [];
this.currentAttribute = null;
this.tokenizer = new EventedTokenizer(this, entityParser);
}
Tokenizer.prototype.tokenize = function (input) {
this.tokens = [];
this.tokenizer.tokenize(input);
return this.tokens;
},
tokenizePart: function (input) {
};
Tokenizer.prototype.tokenizePart = function (input) {
this.tokens = [];
this.tokenizer.tokenizePart(input);
return this.tokens;
},
tokenizeEOF: function () {
};
Tokenizer.prototype.tokenizeEOF = function () {
this.tokens = [];
this.tokenizer.tokenizeEOF();
return this.tokens[0];
},
reset: function () {
};
Tokenizer.prototype.reset = function () {
this.token = null;
this.startLine = 1;
this.startColumn = 0;
},
addLocInfo: function () {
};
Tokenizer.prototype.addLocInfo = function () {
if (this.options.loc) {

@@ -523,5 +527,5 @@ this.token.loc = {

this.startColumn = this.tokenizer.column;
},
};
// Data
beginData: function () {
Tokenizer.prototype.beginData = function () {
this.token = {

@@ -532,11 +536,11 @@ type: 'Chars',

this.tokens.push(this.token);
},
appendToData: function (char) {
};
Tokenizer.prototype.appendToData = function (char) {
this.token.chars += char;
},
finishData: function () {
};
Tokenizer.prototype.finishData = function () {
this.addLocInfo();
},
};
// Comment
beginComment: function () {
Tokenizer.prototype.beginComment = function () {
this.token = {

@@ -547,11 +551,11 @@ type: 'Comment',

this.tokens.push(this.token);
},
appendToCommentData: function (char) {
};
Tokenizer.prototype.appendToCommentData = function (char) {
this.token.chars += char;
},
finishComment: function () {
};
Tokenizer.prototype.finishComment = function () {
this.addLocInfo();
},
};
// Tags - basic
beginStartTag: function () {
Tokenizer.prototype.beginStartTag = function () {
this.token = {

@@ -564,4 +568,4 @@ type: 'StartTag',

this.tokens.push(this.token);
},
beginEndTag: function () {
};
Tokenizer.prototype.beginEndTag = function () {
this.token = {

@@ -572,34 +576,35 @@ type: 'EndTag',

this.tokens.push(this.token);
},
finishTag: function () {
};
Tokenizer.prototype.finishTag = function () {
this.addLocInfo();
},
markTagAsSelfClosing: function () {
};
Tokenizer.prototype.markTagAsSelfClosing = function () {
this.token.selfClosing = true;
},
};
// Tags - name
appendToTagName: function (char) {
Tokenizer.prototype.appendToTagName = function (char) {
this.token.tagName += char;
},
};
// Tags - attributes
beginAttribute: function () {
this._currentAttribute = ["", "", null];
this.token.attributes.push(this._currentAttribute);
},
appendToAttributeName: function (char) {
this._currentAttribute[0] += char;
},
beginAttributeValue: function (isQuoted) {
this._currentAttribute[2] = isQuoted;
},
appendToAttributeValue: function (char) {
this._currentAttribute[1] = this._currentAttribute[1] || "";
this._currentAttribute[1] += char;
},
finishAttributeValue: function () {
},
reportSyntaxError: function (message) {
Tokenizer.prototype.beginAttribute = function () {
this.currentAttribute = ["", "", null];
this.token.attributes.push(this.currentAttribute);
};
Tokenizer.prototype.appendToAttributeName = function (char) {
this.currentAttribute[0] += char;
};
Tokenizer.prototype.beginAttributeValue = function (isQuoted) {
this.currentAttribute[2] = isQuoted;
};
Tokenizer.prototype.appendToAttributeValue = function (char) {
this.currentAttribute[1] = this.currentAttribute[1] || "";
this.currentAttribute[1] += char;
};
Tokenizer.prototype.finishAttributeValue = function () {
};
Tokenizer.prototype.reportSyntaxError = function (message) {
this.token.syntaxError = message;
}
};
};
return Tokenizer;
}());

@@ -620,2 +625,3 @@ function tokenize(input, options) {

})));
//# sourceMappingURL=simple-html-tokenizer.js.map
{
"name": "simple-html-tokenizer",
"version": "0.4.0",
"version": "0.4.1",
"license": "MIT",

@@ -16,2 +16,3 @@ "description": "Simple HTML Tokenizer is a lightweight JavaScript library that can be used to tokenize the kind of HTML normally found in templates.",

"jsnext:main": "dist/es6/index.js",
"typings": "dist/es6/index.d.ts",
"scripts": {

@@ -18,0 +19,0 @@ "build": "ember build",

@@ -6,3 +6,4 @@ const HEXCHARCODE = /^#[xX]([A-Fa-f0-9]+)$/;

export default class EntityParser {
constructor(private named) {}
constructor(private named) {
}

@@ -9,0 +10,0 @@ parse(entity) {

import { preprocessInput, isAlpha, isSpace } from './utils';
function EventedTokenizer(delegate, entityParser) {
this.delegate = delegate;
this.entityParser = entityParser;
export default class EventedTokenizer {
private state: any = null;
private input: any = null;
private index: number = -1;
private tagLine: number = -1;
private tagColumn: number = -1;
this.state = null;
this.input = null;
public line: number = -1;
public column: number = -1;
this.index = -1;
this.line = -1;
this.column = -1;
this.tagLine = -1;
this.tagColumn = -1;
constructor(private delegate, private entityParser) {
this.reset();
}
this.reset();
}
EventedTokenizer.prototype = {
reset: function() {
reset() {
this.state = 'beforeData';

@@ -32,11 +29,11 @@ this.input = '';

this.delegate.reset();
},
}
tokenize: function(input) {
tokenize(input) {
this.reset();
this.tokenizePart(input);
this.tokenizeEOF();
},
}
tokenizePart: function(input) {
tokenizePart(input) {
this.input += preprocessInput(input);

@@ -47,9 +44,9 @@

}
},
}
tokenizeEOF: function() {
tokenizeEOF() {
this.flushData();
},
}
flushData: function() {
flushData() {
if (this.state === 'data') {

@@ -59,9 +56,9 @@ this.delegate.finishData();

}
},
}
peek: function() {
peek() {
return this.input.charAt(this.index);
},
}
consume: function() {
consume() {
let char = this.peek();

@@ -79,5 +76,5 @@

return char;
},
}
consumeCharRef: function() {
consumeCharRef() {
let endIndex = this.input.indexOf(';', this.index);

@@ -101,5 +98,5 @@ if (endIndex === -1) {

}
},
}
markTagStart: function() {
markTagStart() {
// these properties to be removed in next major bump

@@ -112,6 +109,6 @@ this.tagLine = this.line;

}
},
}
states: {
beforeData: function() {
states = {
beforeData() {
let char = this.peek();

@@ -129,3 +126,3 @@

data: function() {
data() {
let char = this.peek();

@@ -147,3 +144,3 @@

tagOpen: function() {
tagOpen() {
let char = this.consume();

@@ -162,3 +159,3 @@

markupDeclaration: function() {
markupDeclaration() {
let char = this.consume();

@@ -173,3 +170,3 @@

commentStart: function() {
commentStart() {
let char = this.consume();

@@ -188,3 +185,3 @@

commentStartDash: function() {
commentStartDash() {
let char = this.consume();

@@ -203,3 +200,3 @@

comment: function() {
comment() {
let char = this.consume();

@@ -214,3 +211,3 @@

commentEndDash: function() {
commentEndDash() {
let char = this.consume();

@@ -226,3 +223,3 @@

commentEnd: function() {
commentEnd() {
let char = this.consume();

@@ -239,3 +236,3 @@

tagName: function() {
tagName() {
let char = this.consume();

@@ -255,3 +252,3 @@

beforeAttributeName: function() {
beforeAttributeName() {
let char = this.peek();

@@ -281,3 +278,3 @@

attributeName: function() {
attributeName() {
let char = this.peek();

@@ -312,3 +309,3 @@

afterAttributeName: function() {
afterAttributeName() {
let char = this.peek();

@@ -343,3 +340,3 @@

beforeAttributeValue: function() {
beforeAttributeValue() {
let char = this.peek();

@@ -371,3 +368,3 @@

attributeValueDoubleQuoted: function() {
attributeValueDoubleQuoted() {
let char = this.consume();

@@ -385,3 +382,3 @@

attributeValueSingleQuoted: function() {
attributeValueSingleQuoted() {
let char = this.consume();

@@ -399,3 +396,3 @@

attributeValueUnquoted: function() {
attributeValueUnquoted() {
let char = this.peek();

@@ -421,3 +418,3 @@

afterAttributeValueQuoted: function() {
afterAttributeValueQuoted() {
let char = this.peek();

@@ -440,3 +437,3 @@

selfClosingStartTag: function() {
selfClosingStartTag() {
let char = this.peek();

@@ -454,3 +451,3 @@

endTagOpen: function() {
endTagOpen() {
let char = this.consume();

@@ -464,5 +461,3 @@

}
}
};
export default EventedTokenizer;
};
}

@@ -1,8 +0,8 @@

import Tokenizer from './tokenizer';
import Tokenizer, { Token } from './tokenizer';
import EntityParser from './entity-parser';
import namedCharRefs from './html5-named-char-refs';
export default function tokenize(input, options) {
export default function tokenize(input, options): Token[] {
let tokenizer = new Tokenizer(new EntityParser(namedCharRefs), options);
return tokenizer.tokenize(input);
}
import EventedTokenizer from './evented-tokenizer';
function Tokenizer(entityParser, options) {
this.token = null;
this.startLine = 1;
this.startColumn = 0;
this.options = options || {};
this.tokenizer = new EventedTokenizer(this, entityParser);
export interface TokenizerOptions {
loc?: any;
};
export type Attribute = [string, string, boolean];
export interface Token {
type: string;
chars?: string;
attributes?: Attribute[];
tagName?: string;
selfClosing?: boolean;
loc?: {
start: {
line: number;
column: number;
},
end: {
line: number;
column: number;
}
};
syntaxError?: string;
}
Tokenizer.prototype = {
tokenize: function(input) {
export default class Tokenizer {
private token: Token = null;
private startLine = 1;
private startColumn = 0;
private tokenizer: EventedTokenizer;
private tokens: Token[] = [];
private currentAttribute: Attribute = null;
constructor(entityParser, private options: TokenizerOptions = {}) {
this.tokenizer = new EventedTokenizer(this, entityParser);
}
tokenize(input) {
this.tokens = [];
this.tokenizer.tokenize(input);
return this.tokens;
},
}
tokenizePart: function(input) {
tokenizePart(input) {
this.tokens = [];
this.tokenizer.tokenizePart(input);
return this.tokens;
},
}
tokenizeEOF: function() {
tokenizeEOF() {
this.tokens = [];
this.tokenizer.tokenizeEOF();
return this.tokens[0];
},
}
reset: function() {
reset() {
this.token = null;
this.startLine = 1;
this.startColumn = 0;
},
}
addLocInfo: function() {
addLocInfo() {
if (this.options.loc) {

@@ -51,7 +79,7 @@ this.token.loc = {

this.startColumn = this.tokenizer.column;
},
}
// Data
beginData: function() {
beginData() {
this.token = {

@@ -62,15 +90,15 @@ type: 'Chars',

this.tokens.push(this.token);
},
}
appendToData: function(char) {
appendToData(char) {
this.token.chars += char;
},
}
finishData: function() {
finishData() {
this.addLocInfo();
},
}
// Comment
beginComment: function() {
beginComment() {
this.token = {

@@ -81,15 +109,15 @@ type: 'Comment',

this.tokens.push(this.token);
},
}
appendToCommentData: function(char) {
appendToCommentData(char) {
this.token.chars += char;
},
}
finishComment: function() {
finishComment() {
this.addLocInfo();
},
}
// Tags - basic
beginStartTag: function() {
beginStartTag() {
this.token = {

@@ -102,5 +130,5 @@ type: 'StartTag',

this.tokens.push(this.token);
},
}
beginEndTag: function() {
beginEndTag() {
this.token = {

@@ -111,46 +139,44 @@ type: 'EndTag',

this.tokens.push(this.token);
},
}
finishTag: function() {
finishTag() {
this.addLocInfo();
},
}
markTagAsSelfClosing: function() {
markTagAsSelfClosing() {
this.token.selfClosing = true;
},
}
// Tags - name
appendToTagName: function(char) {
appendToTagName(char) {
this.token.tagName += char;
},
}
// Tags - attributes
beginAttribute: function() {
this._currentAttribute = ["", "", null];
this.token.attributes.push(this._currentAttribute);
},
beginAttribute() {
this.currentAttribute = ["", "", null];
this.token.attributes.push(this.currentAttribute);
}
appendToAttributeName: function(char) {
this._currentAttribute[0] += char;
},
appendToAttributeName(char) {
this.currentAttribute[0] += char;
}
beginAttributeValue: function(isQuoted) {
this._currentAttribute[2] = isQuoted;
},
beginAttributeValue(isQuoted) {
this.currentAttribute[2] = isQuoted;
}
appendToAttributeValue: function(char) {
this._currentAttribute[1] = this._currentAttribute[1] || "";
this._currentAttribute[1] += char;
},
appendToAttributeValue(char) {
this.currentAttribute[1] = this.currentAttribute[1] || "";
this.currentAttribute[1] += char;
}
finishAttributeValue: function() {
},
finishAttributeValue() {
}
reportSyntaxError: function(message) {
reportSyntaxError(message: string) {
this.token.syntaxError = message;
}
};
export default Tokenizer;
}

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc