@selfage/element
Version:
Create vanilla HTML elements/tags with visual structures.
207 lines • 31.8 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));
}
span(attributes, ...childNodes) {
let ele = document.createElement("span");
ElementFactory.setAttributes(ele, attributes);
ele.append(...childNodes);
return ele;
}
spanRef(ref, attributes, ...childNodes) {
return (0, ref_1.assign)(ref, this.span(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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0NBQTJDO0FBTTNDLE1BQWEsY0FBYztJQUNqQixNQUFNLENBQUMsYUFBYSxDQUMxQixHQUFZLEVBQ1osVUFBK0I7UUFFL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNwRCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDbEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU0sR0FBRyxDQUNSLFVBQStCLEVBQy9CLEdBQUcsVUFBdUI7UUFFMUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxjQUFjLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5QyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDMUIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sTUFBTSxDQUNYLEdBQXdCLEVBQ3hCLFVBQStCLEVBQy9CLEdBQUcsVUFBdUI7UUFFMUIsT0FBTyxJQUFBLFlBQU0sRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTSxJQUFJLENBQ1QsVUFBK0IsRUFDL0IsR0FBRyxVQUF1QjtRQUUxQixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLGNBQWMsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzlD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QUM7SUFFTSxPQUFPLENBQ1osR0FBd0IsRUFDeEIsVUFBK0I7UUFFL0IsT0FBTyxJQUFBLFlBQU0sRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTSxJQUFJLENBQ1QsVUFBK0IsRUFDL0IsR0FBRyxVQUE2QjtRQUVoQyxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLDRCQUE0QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pFLGNBQWMsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUMxQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTSxHQUFHLENBQUMsVUFBK0I7UUFDeEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4RSxjQUFjLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5QyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTSxNQUFNLENBQ1gsR0FBdUIsRUFDdkIsVUFBK0I7UUFFL0IsT0FBTyxJQUFBLFlBQU0sRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7Q0FDRjtBQTdXRCx3Q0E2V0M7QUFFRCwrQ0FBK0M7QUFDcEMsUUFBQSxDQUFDLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlZiwgYXNzaWduIH0gZnJvbSBcIkBzZWxmYWdlL3JlZlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRBdHRyaWJ1dGVNYXAge1xuICBbaW5kZXg6IHN0cmluZ106IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgc2V0QXR0cmlidXRlcyhcbiAgICBlbGU6IEVsZW1lbnQsXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgKTogdm9pZCB7XG4gICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBlbGUuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkaXYoXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBkaXZSZWYoXG4gICAgcmVmOiBSZWY8SFRNTERpdkVsZW1lbnQ+LFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTERpdkVsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLmRpdihhdHRyaWJ1dGVzLCAuLi5jaGlsZE5vZGVzKSk7XG4gIH1cblxuICBwdWJsaWMgc3BhbihcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxTcGFuRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LnNldEF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgc3BhblJlZihcbiAgICByZWY6IFJlZjxIVE1MU3BhbkVsZW1lbnQ+LFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTFNwYW5FbGVtZW50IHtcbiAgICByZXR1cm4gYXNzaWduKHJlZiwgdGhpcy5zcGFuKGF0dHJpYnV0ZXMsIC4uLmNoaWxkTm9kZXMpKTtcbiAgfVxuXG4gIHB1YmxpYyB0ZXh0KGNvbnRlbnQgPSBcIlwiKTogVGV4dCB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbnRlbnQpO1xuICB9XG5cbiAgcHVibGljIHRleHRSZWYocmVmOiBSZWY8VGV4dD4sIGNvbnRlbnQgPSBcIlwiKTogVGV4dCB7XG4gICAgcmV0dXJuIGFzc2lnbihyZWYsIHRoaXMudGV4dChjb250ZW50KSk7XG4gIH1cblxuICBwdWJsaWMgb2woXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MT0xpc3RFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9sXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LnNldEF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgb2xSZWYoXG4gICAgcmVmOiBSZWY8SFRNTE9MaXN0RWxlbWVudD4sXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MT0xpc3RFbGVtZW50IHtcbiAgICByZXR1cm4gYXNzaWduKHJlZiwgdGhpcy5vbChhdHRyaWJ1dGVzLCAuLi5jaGlsZE5vZGVzKSk7XG4gIH1cblxuICBwdWJsaWMgdWwoXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MVUxpc3RFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInVsXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LnNldEF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgdWxSZWYoXG4gICAgcmVmOiBSZWY8SFRNTFVMaXN0RWxlbWVudD4sXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MVUxpc3RFbGVtZW50IHtcbiAgICByZXR1cm4gYXNzaWduKHJlZiwgdGhpcy51bChhdHRyaWJ1dGVzLCAuLi5jaGlsZE5vZGVzKSk7XG4gIH1cblxuICBwdWJsaWMgbGkoXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MTElFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LnNldEF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgbGlSZWYoXG4gICAgcmVmOiBSZWY8SFRNTExJRWxlbWVudD4sXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MTElFbGVtZW50IHtcbiAgICByZXR1cm4gYXNzaWduKHJlZiwgdGhpcy5saShhdHRyaWJ1dGVzLCAuLi5jaGlsZE5vZGVzKSk7XG4gIH1cblxuICBwdWJsaWMgbGFiZWwoXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MTGFiZWxFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxhYmVsXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LnNldEF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgbGFiZWxSZWYoXG4gICAgcmVmOiBSZWY8SFRNTExhYmVsRWxlbWVudD4sXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MTGFiZWxFbGVtZW50IHtcbiAgICByZXR1cm4gYXNzaWduKHJlZiwgdGhpcy5sYWJlbChhdHRyaWJ1dGVzLCAuLi5jaGlsZE5vZGVzKSk7XG4gIH1cblxuICBwdWJsaWMgaW1hZ2UoYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCk6IEhUTUxJbWFnZUVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LnNldEF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGltYWdlUmVmKFxuICAgIHJlZjogUmVmPEhUTUxJbWFnZUVsZW1lbnQ+LFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICk6IEhUTUxJbWFnZUVsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLmltYWdlKGF0dHJpYnV0ZXMpKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtKFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTEZvcm1FbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZvcm1cIik7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtUmVmKFxuICAgIHJlZjogUmVmPEhUTUxGb3JtRWxlbWVudD4sXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MRm9ybUVsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLmZvcm0oYXR0cmlidXRlcywgLi4uY2hpbGROb2RlcykpO1xuICB9XG5cbiAgcHVibGljIGlucHV0KGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXApOiBIVE1MSW5wdXRFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LnNldEF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIGlucHV0UmVmKFxuICAgIHJlZjogUmVmPEhUTUxJbnB1dEVsZW1lbnQ+LFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLmlucHV0KGF0dHJpYnV0ZXMpKTtcbiAgfVxuXG4gIHB1YmxpYyB0ZXh0YXJlYShcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxUZXh0QXJlYUVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyB0ZXh0YXJlYVJlZihcbiAgICByZWY6IFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PixcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxUZXh0QXJlYUVsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLnRleHRhcmVhKGF0dHJpYnV0ZXMsIC4uLmNoaWxkTm9kZXMpKTtcbiAgfVxuXG4gIHB1YmxpYyBidXR0b24oXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgICAuLi5jaGlsZE5vZGVzOiBBcnJheTxOb2RlPlxuICApOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBidXR0b25SZWYoXG4gICAgcmVmOiBSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+LFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8Tm9kZT5cbiAgKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLmJ1dHRvbihhdHRyaWJ1dGVzLCAuLi5jaGlsZE5vZGVzKSk7XG4gIH1cblxuICBwdWJsaWMgYShcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxBbmNob3JFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBhUmVmKFxuICAgIHJlZjogUmVmPEhUTUxBbmNob3JFbGVtZW50PixcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PE5vZGU+XG4gICk6IEhUTUxBbmNob3JFbGVtZW50IHtcbiAgICByZXR1cm4gYXNzaWduKHJlZiwgdGhpcy5hKGF0dHJpYnV0ZXMsIC4uLmNoaWxkTm9kZXMpKTtcbiAgfVxuXG4gIHB1YmxpYyBpZnJhbWUoYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCk6IEhUTUxJRnJhbWVFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5zZXRBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBpZnJhbWVSZWYoXG4gICAgcmVmOiBSZWY8SFRNTElGcmFtZUVsZW1lbnQ+LFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICk6IEhUTUxJRnJhbWVFbGVtZW50IHtcbiAgICByZXR1cm4gYXNzaWduKHJlZiwgdGhpcy5pZnJhbWUoYXR0cmlidXRlcykpO1xuICB9XG5cbiAgcHVibGljIHZpZGVvKGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXApOiBIVE1MVmlkZW9FbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInZpZGVvXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LnNldEF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIHZpZGVvUmVmKFxuICAgIHJlZjogUmVmPEhUTUxWaWRlb0VsZW1lbnQ+LFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICk6IEhUTUxWaWRlb0VsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLnZpZGVvKGF0dHJpYnV0ZXMpKTtcbiAgfVxuXG4gIHB1YmxpYyBjYW52YXMoYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCk6IEhUTUxDYW52YXNFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5zZXRBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBjYW52YXNSZWYoXG4gICAgcmVmOiBSZWY8SFRNTENhbnZhc0VsZW1lbnQ+LFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICk6IEhUTUxDYW52YXNFbGVtZW50IHtcbiAgICByZXR1cm4gYXNzaWduKHJlZiwgdGhpcy5jYW52YXMoYXR0cmlidXRlcykpO1xuICB9XG5cbiAgcHVibGljIHN2ZyhcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PFNWR0VsZW1lbnQ+XG4gICk6IFNWR1NWR0VsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInN2Z1wiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5zZXRBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgZWxlLmFwcGVuZCguLi5jaGlsZE5vZGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIHN2Z1JlZihcbiAgICByZWY6IFJlZjxTVkdTVkdFbGVtZW50PixcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PFNWR0VsZW1lbnQ+XG4gICk6IFNWR1NWR0VsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLnN2ZyhhdHRyaWJ1dGVzLCAuLi5jaGlsZE5vZGVzKSk7XG4gIH1cblxuICBwdWJsaWMgcGF0aChhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwKTogU1ZHUGF0aEVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInBhdGhcIik7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgcGF0aFJlZihcbiAgICByZWY6IFJlZjxTVkdQYXRoRWxlbWVudD4sXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgKTogU1ZHUGF0aEVsZW1lbnQge1xuICAgIHJldHVybiBhc3NpZ24ocmVmLCB0aGlzLnBhdGgoYXR0cmlidXRlcykpO1xuICB9XG5cbiAgcHVibGljIGNsaXBQYXRoKFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8U1ZHRWxlbWVudD5cbiAgKTogU1ZHQ2xpcFBhdGhFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgXCJjbGlwUGF0aFwiLFxuICAgICk7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyBsaW5lYXJHcmFkaWVudChcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PFNWR0VsZW1lbnQ+XG4gICk6IFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCB7XG4gICAgbGV0IGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICApO1xuICAgIEVsZW1lbnRGYWN0b3J5LnNldEF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICBlbGUuYXBwZW5kKC4uLmNoaWxkTm9kZXMpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwdWJsaWMgbGluZWFyR3JhZGllbnRSZWYoXG4gICAgcmVmOiBSZWY8U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50PixcbiAgICBhdHRyaWJ1dGVzOiBFbGVtZW50QXR0cmlidXRlTWFwLFxuICAgIC4uLmNoaWxkTm9kZXM6IEFycmF5PFNWR0VsZW1lbnQ+XG4gICk6IFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCB7XG4gICAgcmV0dXJuIGFzc2lnbihyZWYsIHRoaXMubGluZWFyR3JhZGllbnQoYXR0cmlidXRlcywgLi4uY2hpbGROb2RlcykpO1xuICB9XG5cbiAgcHVibGljIHN0b3AoYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCk6IFNWR1N0b3BFbGVtZW50IHtcbiAgICBsZXQgZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJzdG9wXCIpO1xuICAgIEVsZW1lbnRGYWN0b3J5LnNldEF0dHJpYnV0ZXMoZWxlLCBhdHRyaWJ1dGVzKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHVibGljIHN0b3BSZWYoXG4gICAgcmVmOiBSZWY8U1ZHU3RvcEVsZW1lbnQ+LFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICk6IFNWR1N0b3BFbGVtZW50IHtcbiAgICByZXR1cm4gYXNzaWduKHJlZiwgdGhpcy5zdG9wKGF0dHJpYnV0ZXMpKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWZzKFxuICAgIGF0dHJpYnV0ZXM6IEVsZW1lbnRBdHRyaWJ1dGVNYXAsXG4gICAgLi4uY2hpbGROb2RlczogQXJyYXk8U1ZHRWxlbWVudD5cbiAgKTogU1ZHRGVmc0VsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImRlZnNcIik7XG4gICAgRWxlbWVudEZhY3Rvcnkuc2V0QXR0cmlidXRlcyhlbGUsIGF0dHJpYnV0ZXMpO1xuICAgIGVsZS5hcHBlbmQoLi4uY2hpbGROb2Rlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyB1c2UoYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCk6IFNWR1VzZUVsZW1lbnQge1xuICAgIGxldCBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInVzZVwiKTtcbiAgICBFbGVtZW50RmFjdG9yeS5zZXRBdHRyaWJ1dGVzKGVsZSwgYXR0cmlidXRlcyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHB1YmxpYyB1c2VSZWYoXG4gICAgcmVmOiBSZWY8U1ZHVXNlRWxlbWVudD4sXG4gICAgYXR0cmlidXRlczogRWxlbWVudEF0dHJpYnV0ZU1hcCxcbiAgKTogU1ZHVXNlRWxlbWVudCB7XG4gICAgcmV0dXJuIGFzc2lnbihyZWYsIHRoaXMudXNlKGF0dHJpYnV0ZXMpKTtcbiAgfVxufVxuXG4vLyBVc2UgYWJicmV2aWF0aW9uIG9ubHkgdG8gYm9vc3QgcHJvZHVjdGl2aXR5LlxuZXhwb3J0IGxldCBFID0gbmV3IEVsZW1lbnRGYWN0b3J5KCk7XG4iXX0=