@selfage/element
Version:
Create vanilla HTML elements/tags with visual structures.
198 lines • 30.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.E = exports.ElementFactory = void 0;
const ref_1 = require("@selfage/ref");
class ElementFactory {
static setAttributes(ele, attributes) {
for (let [key, value] of Object.entries(attributes)) {
if (value != null) {
ele.setAttribute(key, value);
}
}
}
div(attributes, ...childNodes) {
let ele = document.createElement("div");
ElementFactory.setAttributes(ele, attributes);
ele.append(...childNodes);
return ele;
}
divRef(ref, attributes, ...childNodes) {
return (0, ref_1.assign)(ref, this.div(attributes, ...childNodes));
}
text(content = "") {
return document.createTextNode(content);
}
textRef(ref, content = "") {
return (0, ref_1.assign)(ref, this.text(content));
}
ol(attributes, ...childNodes) {
let ele = document.createElement("ol");
ElementFactory.setAttributes(ele, attributes);
ele.append(...childNodes);
return ele;
}
olRef(ref, attributes, ...childNodes) {
return (0, ref_1.assign)(ref, this.ol(attributes, ...childNodes));
}
ul(attributes, ...childNodes) {
let ele = document.createElement("ul");
ElementFactory.setAttributes(ele, attributes);
ele.append(...childNodes);
return ele;
}
ulRef(ref, attributes, ...childNodes) {
return (0, ref_1.assign)(ref, this.ul(attributes, ...childNodes));
}
li(attributes, ...childNodes) {
let ele = document.createElement("li");
ElementFactory.setAttributes(ele, attributes);
ele.append(...childNodes);
return ele;
}
liRef(ref, attributes, ...childNodes) {
return (0, ref_1.assign)(ref, this.li(attributes, ...childNodes));
}
label(attributes, ...childNodes) {
let ele = document.createElement("label");
ElementFactory.setAttributes(ele, attributes);
ele.append(...childNodes);
return ele;
}
labelRef(ref, attributes, ...childNodes) {
return (0, ref_1.assign)(ref, this.label(attributes, ...childNodes));
}
image(attributes) {
let ele = document.createElement("img");
ElementFactory.setAttributes(ele, attributes);
return ele;
}
imageRef(ref, attributes) {
return (0, ref_1.assign)(ref, this.image(attributes));
}
form(attributes, ...childNodes) {
let ele = document.createElement("form");
ElementFactory.setAttributes(ele, attributes);
ele.append(...childNodes);
return ele;
}
formRef(ref, attributes, ...childNodes) {
return (0, ref_1.assign)(ref, this.form(attributes, ...childNodes));
}
input(attributes) {
let ele = document.createElement("input");
ElementFactory.setAttributes(ele, attributes);
return ele;
}
inputRef(ref, attributes) {
return (0, ref_1.assign)(ref, this.input(attributes));
}
textarea(attributes, ...childNodes) {
let ele = document.createElement("textarea");
ElementFactory.setAttributes(ele, attributes);
ele.append(...childNodes);
return ele;
}
textareaRef(ref, attributes, ...childNodes) {
return (0, ref_1.assign)(ref, this.textarea(attributes, ...childNodes));
}
button(attributes, ...childNodes) {
let ele = document.createElement("button");
ElementFactory.setAttributes(ele, attributes);
ele.append(...childNodes);
return ele;
}
buttonRef(ref, attributes, ...childNodes) {
return (0, ref_1.assign)(ref, this.button(attributes, ...childNodes));
}
a(attributes, ...childNodes) {
let ele = document.createElement("a");
ElementFactory.setAttributes(ele, attributes);
ele.append(...childNodes);
return ele;
}
aRef(ref, attributes, ...childNodes) {
return (0, ref_1.assign)(ref, this.a(attributes, ...childNodes));
}
iframe(attributes) {
let ele = document.createElement("iframe");
ElementFactory.setAttributes(ele, attributes);
return ele;
}
iframeRef(ref, attributes) {
return (0, ref_1.assign)(ref, this.iframe(attributes));
}
video(attributes) {
let ele = document.createElement("video");
ElementFactory.setAttributes(ele, attributes);
return ele;
}
videoRef(ref, attributes) {
return (0, ref_1.assign)(ref, this.video(attributes));
}
canvas(attributes) {
let ele = document.createElement("canvas");
ElementFactory.setAttributes(ele, attributes);
return ele;
}
canvasRef(ref, attributes) {
return (0, ref_1.assign)(ref, this.canvas(attributes));
}
svg(attributes, ...childNodes) {
let ele = document.createElementNS("http://www.w3.org/2000/svg", "svg");
ElementFactory.setAttributes(ele, attributes);
ele.append(...childNodes);
return ele;
}
svgRef(ref, attributes, ...childNodes) {
return (0, ref_1.assign)(ref, this.svg(attributes, ...childNodes));
}
path(attributes) {
let ele = document.createElementNS("http://www.w3.org/2000/svg", "path");
ElementFactory.setAttributes(ele, attributes);
return ele;
}
pathRef(ref, attributes) {
return (0, ref_1.assign)(ref, this.path(attributes));
}
clipPath(attributes, ...childNodes) {
let ele = document.createElementNS("http://www.w3.org/2000/svg", "clipPath");
ElementFactory.setAttributes(ele, attributes);
ele.append(...childNodes);
return ele;
}
linearGradient(attributes, ...childNodes) {
let ele = document.createElementNS("http://www.w3.org/2000/svg", "linearGradient");
ElementFactory.setAttributes(ele, attributes);
ele.append(...childNodes);
return ele;
}
linearGradientRef(ref, attributes, ...childNodes) {
return (0, ref_1.assign)(ref, this.linearGradient(attributes, ...childNodes));
}
stop(attributes) {
let ele = document.createElementNS("http://www.w3.org/2000/svg", "stop");
ElementFactory.setAttributes(ele, attributes);
return ele;
}
stopRef(ref, attributes) {
return (0, ref_1.assign)(ref, this.stop(attributes));
}
defs(attributes, ...childNodes) {
let ele = document.createElementNS("http://www.w3.org/2000/svg", "defs");
ElementFactory.setAttributes(ele, attributes);
ele.append(...childNodes);
return ele;
}
use(attributes) {
let ele = document.createElementNS("http://www.w3.org/2000/svg", "use");
ElementFactory.setAttributes(ele, attributes);
return ele;
}
useRef(ref, attributes) {
return (0, ref_1.assign)(ref, this.use(attributes));
}
}
exports.ElementFactory = ElementFactory;
// Use abbreviation only to boost productivity.
exports.E = new ElementFactory();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0NBQTJDO0FBTTNDLE1BQWEsY0FBYztJQUNqQixNQUFNLENBQUMsYUFBYSxDQUMxQixHQUFZLEVBQ1osVUFBK0I7UUFFL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNwRCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDbEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU0sR0FBRyxDQUNSLFVBQStCLEVBQy9CLEdBQUcsVUFBdUI7UUFFMUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxjQUFjLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5QyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDMUIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sTUFBTSxDQUNYLEdBQXdCLEVBQ3hCLFVBQStCLEVBQy9CLEdBQUcsVUFBdUI7UUFFMUIsT0FBTyxJQUFBLFlBQU0sRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUU7UUFDdEIsT0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxPQUFPLENBQUMsR0FBYyxFQUFFLE9BQU8sR0FBRyxFQUFFO1FBQ3pDLE9BQU8sSUFBQSxZQUFNLEVB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QStCO1FBQ3hDLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEUsY0FBYyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sTUFBTSxDQUNYLEdBQXVCLEVBQ3ZCLFVBQStCO1FBRS9CLE9BQU8sSUFBQSxZQUFNLEVBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUEzVkQsd0NBMlZDO0FBRUQsK0NBQStDO0FBQ3BDLFFBQUEsQ0FBQyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWYsIGFzc2lnbiB9IGZyb20gXCJAc2VsZmFnZS9yZWZcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50QXR0cmlidXRlTWFwIHtcbiAgW2luZGV4OiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50RmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIHNldEF0dHJpYnV0ZXMoXG4gICAgZWxlOiBFbGVtZW50LFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICk6IHZvaWQge1xuICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKSkge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgZWxlLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGl2KFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTERpdkVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LnNldEF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgZGl2UmVmKFxuICAgIHJlZjogUmVmPEhUTUxEaXZFbGVtZW50PixcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxEaXZFbGVtZW50IHtcbiAgICByZXR1cm4gYXNzaWduKHJlZiwgdGhpcy5kaXYoYXR0cmlidXRlcywgLi4uY2hpbGROb2RlcykpO1xuICB9XG5cbiAgcHVibGljIHRleHQoY29udGVudCA9IFwiXCIpOiBUZXh0IHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudCk7XG4gIH1cblxuICBwdWJsaWMgdGV4dFJlZihyZWY6IFJlZjxUZXh0PiwgY29udGVudCA9IFwiXCIpOiBUZXh0IHtcbiAgICByZXR1cm4gYXNzaWduKHJlZiwgdGhpcy50ZXh0KGNvbnRlbnQpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbChcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxPTGlzdEVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib2xcIik7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBvbFJlZihcbiAgICByZWY6IFJlZjxIVE1MT0xpc3RFbGVtZW50PixcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxPTGlzdEVsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLm9sKGF0dHJpYnV0ZXMsIC4uLmNoaWxkTm9kZXMpKTtcbiAgfVxuXG4gIHB1YmxpYyB1bChcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxVTGlzdEVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidWxcIik7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyB1bFJlZihcbiAgICByZWY6IFJlZjxIVE1MVUxpc3RFbGVtZW50PixcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxVTGlzdEVsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLnVsKGF0dHJpYnV0ZXMsIC4uLmNoaWxkTm9kZXMpKTtcbiAgfVxuXG4gIHB1YmxpYyBsaShcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxMSUVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlcIik7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBsaVJlZihcbiAgICByZWY6IFJlZjxIVE1MTElFbGVtZW50PixcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxMSUVsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLmxpKGF0dHJpYnV0ZXMsIC4uLmNoaWxkTm9kZXMpKTtcbiAgfVxuXG4gIHB1YmxpYyBsYWJlbChcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxMYWJlbEVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIik7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBsYWJlbFJlZihcbiAgICByZWY6IFJlZjxIVE1MTGFiZWxFbGVtZW50PixcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxMYWJlbEVsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLmxhYmVsKGF0dHJpYnV0ZXMsIC4uLmNoaWxkTm9kZXMpKTtcbiAgfVxuXG4gIHB1YmxpYyBpbWFnZShhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwKTogSFRNTEltYWdlRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgaW1hZ2VSZWYoXG4gICAgcmVmOiBSZWY8SFRNTEltYWdlRWxlbWVudD4sXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgKTogSFRNTEltYWdlRWxlbWVudCB7XG4gICAgcmV0dXJuIGFzc2lnbihyZWYsIHRoaXMuaW1hZ2UoYXR0cmlidXRlcykpO1xuICB9XG5cbiAgcHVibGljIGZvcm0oXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MRm9ybUVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5zZXRBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGZvcm1SZWYoXG4gICAgcmVmOiBSZWY8SFRNTEZvcm1FbGVtZW50PixcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxGb3JtRWxlbWVudCB7XG4gICAgcmV0dXJuIGFzc2lnbihyZWYsIHRoaXMuZm9ybShhdHRyaWJ1dGVzLCAuLi5jaGlsZE5vZGVzKSk7XG4gIH1cblxuICBwdWJsaWMgaW5wdXQoYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgaW5wdXRSZWYoXG4gICAgcmVmOiBSZWY8SFRNTElucHV0RWxlbWVudD4sXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgKTogSFRNTElucHV0RWxlbWVudCB7XG4gICAgcmV0dXJuIGFzc2lnbihyZWYsIHRoaXMuaW5wdXQoYXR0cmlidXRlcykpO1xuICB9XG5cbiAgcHVibGljIHRleHRhcmVhKFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTFRleHRBcmVhRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5zZXRBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIHRleHRhcmVhUmVmKFxuICAgIHJlZjogUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+LFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTFRleHRBcmVhRWxlbWVudCB7XG4gICAgcmV0dXJuIGFzc2lnbihyZWYsIHRoaXMudGV4dGFyZWEoYXR0cmlidXRlcywgLi4uY2hpbGROb2RlcykpO1xuICB9XG5cbiAgcHVibGljIGJ1dHRvbihcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxCdXR0b25FbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5zZXRBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGJ1dHRvblJlZihcbiAgICByZWY6IFJlZjxIVE1MQnV0dG9uRWxlbWVudD4sXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgcmV0dXJuIGFzc2lnbihyZWYsIHRoaXMuYnV0dG9uKGF0dHJpYnV0ZXMsIC4uLmNoaWxkTm9kZXMpKTtcbiAgfVxuXG4gIHB1YmxpYyBhKFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTEFuY2hvckVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5zZXRBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGFSZWYoXG4gICAgcmVmOiBSZWY8SFRNTEFuY2hvckVsZW1lbnQ+LFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTEFuY2hvckVsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLmEoYXR0cmlidXRlcywgLi4uY2hpbGROb2RlcykpO1xuICB9XG5cbiAgcHVibGljIGlmcmFtZShhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwKTogSFRNTElGcmFtZUVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LnNldEF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGlmcmFtZVJlZihcbiAgICByZWY6IFJlZjxIVE1MSUZyYW1lRWxlbWVudD4sXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgKTogSFRNTElGcmFtZUVsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLmlmcmFtZShhdHRyaWJ1dGVzKSk7XG4gIH1cblxuICBwdWJsaWMgdmlkZW8oYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCk6IEhUTUxWaWRlb0VsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidmlkZW9cIik7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgdmlkZW9SZWYoXG4gICAgcmVmOiBSZWY8SFRNTFZpZGVvRWxlbWVudD4sXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgcmV0dXJuIGFzc2lnbihyZWYsIHRoaXMudmlkZW8oYXR0cmlidXRlcykpO1xuICB9XG5cbiAgcHVibGljIGNhbnZhcyhhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwKTogSFRNTENhbnZhc0VsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LnNldEF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGNhbnZhc1JlZihcbiAgICByZWY6IFJlZjxIVE1MQ2FudmFzRWxlbWVudD4sXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgKTogSFRNTENhbnZhc0VsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLmNhbnZhcyhhdHRyaWJ1dGVzKSk7XG4gIH1cblxuICBwdWJsaWMgc3ZnKFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8U1ZHRWxlbWVudD5cbiAgKTogU1ZHU1ZHRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwic3ZnXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LnNldEF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgc3ZnUmVmKFxuICAgIHJlZjogUmVmPFNWR1NWR0VsZW1lbnQ+LFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8U1ZHRWxlbWVudD5cbiAgKTogU1ZHU1ZHRWxlbWVudCB7XG4gICAgcmV0dXJuIGFzc2lnbihyZWYsIHRoaXMuc3ZnKGF0dHJpYnV0ZXMsIC4uLmNoaWxkTm9kZXMpKTtcbiAgfVxuXG4gIHB1YmxpYyBwYXRoKGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXApOiBTVkdQYXRoRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwicGF0aFwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5zZXRBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBwYXRoUmVmKFxuICAgIHJlZjogUmVmPFNWR1BhdGhFbGVtZW50PixcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICApOiBTVkdQYXRoRWxlbWVudCB7XG4gICAgcmV0dXJuIGFzc2lnbihyZWYsIHRoaXMucGF0aChhdHRyaWJ1dGVzKSk7XG4gIH1cblxuICBwdWJsaWMgY2xpcFBhdGgoXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxTVkdFbGVtZW50PlxuICApOiBTVkdDbGlwUGF0aEVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICBcImNsaXBQYXRoXCIsXG4gICAgKTtcbiAgICBFbGVtZW50RmFjdG9yeS5zZXRBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGxpbmVhckdyYWRpZW50KFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8U1ZHRWxlbWVudD5cbiAgKTogU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICk7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBsaW5lYXJHcmFkaWVudFJlZihcbiAgICByZWY6IFJlZjxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ+LFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8U1ZHRWxlbWVudD5cbiAgKTogU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50IHtcbiAgICByZXR1cm4gYXNzaWduKHJlZiwgdGhpcy5saW5lYXJHcmFkaWVudChhdHRyaWJ1dGVzLCAuLi5jaGlsZE5vZGVzKSk7XG4gIH1cblxuICBwdWJsaWMgc3RvcChhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwKTogU1ZHU3RvcEVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInN0b3BcIik7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgc3RvcFJlZihcbiAgICByZWY6IFJlZjxTVkdTdG9wRWxlbWVudD4sXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgKTogU1ZHU3RvcEVsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLnN0b3AoYXR0cmlidXRlcykpO1xuICB9XG5cbiAgcHVibGljIGRlZnMoXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxTVkdFbGVtZW50PlxuICApOiBTVkdEZWZzRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwiZGVmc1wiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5zZXRBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIHVzZShhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwKTogU1ZHVXNlRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwidXNlXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LnNldEF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIHVzZVJlZihcbiAgICByZWY6IFJlZjxTVkdVc2VFbGVtZW50PixcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICApOiBTVkdVc2VFbGVtZW50IHtcbiAgICByZXR1cm4gYXNzaWduKHJlZiwgdGhpcy51c2UoYXR0cmlidXRlcykpO1xuICB9XG59XG5cbi8vIFVzZSBhYmJyZXZpYXRpb24gb25seSB0byBib29zdCBwcm9kdWN0aXZpdHkuXG5leHBvcnQgbGV0IEUgPSBuZXcgRWxlbWVudEZhY3RvcnkoKTtcbiJdfQ==