UNPKG

materialize-angular

Version:
262 lines 23.9 kB
/** * @fileoverview added by tsickle * Generated from: app/completed-components/html-visualizer/html-visualizer.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @license * Copyright Workylab. All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://raw.githubusercontent.com/workylab/materialize-angular/master/LICENSE */ import { Component, Input } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { config } from '../../config'; export class HTMLVisualizerComponent { /** * @param {?} sanitizer */ constructor(sanitizer) { this.sanitizer = sanitizer; this.className = HTMLVisualizerComponent.defaultProps.className; this.html = HTMLVisualizerComponent.defaultProps.html; this.prefix = config.components.prefix; } /** * @return {?} */ ngOnInit() { this.htmlContent = this.render(this.html); } /** * @param {?} html * @return {?} */ render(html) { /** @type {?} */ const tags = this.splitByTags(html); /** @type {?} */ const lines = []; /** @type {?} */ let depth = 0; for (let i = 0; i < tags.length; i++) { /** @type {?} */ const currentTag = tags[i]; /** @type {?} */ const nextTag = tags[i + 1]; /** @type {?} */ const lastTag = tags[i + 2]; /** @type {?} */ const result = this.createLineLogic(currentTag, nextTag, lastTag, depth, i); depth = result.depth; i = result.cycle; lines.push(result.line); } return lines.join('<br />'); } /** * @param {?} content * @param {?} className * @return {?} */ createNode(content, className) { /** @type {?} */ let escapedContent = content.replace(/&/g, '&amp;'); escapedContent = escapedContent.trim(); escapedContent = escapedContent.replace(/\[\[/g, '&#123&#123;'); escapedContent = escapedContent.replace(/\]\]/g, '&#125&#125;'); escapedContent = escapedContent.replace(/</g, '&lt;'); escapedContent = escapedContent.replace(/>/g, '&gt;'); escapedContent = escapedContent.replace(/(\S+)="([^']*?)"/g, (/** * @param {?} match * @return {?} */ match => { /** @type {?} */ const value = match.match(/"([^']*?)"/g); /** @type {?} */ const attribute = match.match(/(\S+)=/g); /** @type {?} */ const attributeValidated = (attribute && attribute[0]) || ''; /** @type {?} */ const valueValidated = (value && value[0]) || ''; /** @type {?} */ const attributeTag = `<span class="${HTMLVisualizerComponent.ATTRIBUTE_CLASS}">${attributeValidated}</span>`; /** @type {?} */ const valueTag = `<span class="${HTMLVisualizerComponent.VALUE_CLASS}">${valueValidated}</span>`; return attributeTag + valueTag; })); escapedContent = escapedContent.replace(/(&lt;\/|&lt;)/g, (/** * @param {?} match * @return {?} */ match => `<span class="${HTMLVisualizerComponent.SYMBOL_CLASS}">&lt;${match.includes('/') ? '/' : ''}</span>`)); escapedContent = escapedContent.replace(/(\/&gt;|&gt;)/g, (/** * @param {?} match * @return {?} */ match => `<span class="${HTMLVisualizerComponent.SYMBOL_CLASS}">${match.includes('/') ? '/' : ''}&gt;</span>`)); return `<span class="${className}">${escapedContent}</span>`; } /** * @param {?} depth * @param {?} content * @return {?} */ indentNode(depth, content) { /** @type {?} */ const indentationBase = '&emsp;&emsp;'; /** @type {?} */ const indentation = indentationBase.repeat(depth); return `${indentation}${content}`; } /** * @param {?} xml * @return {?} */ splitByTags(xml) { /** @type {?} */ const tags = xml.split(/(<\/?[^>]+>)/g); /** @type {?} */ const cleanedTags = tags.filter((/** * @param {?} line * @return {?} */ line => line.trim() !== '')); return cleanedTags; } /** * @param {?} contentNode * @return {?} */ isTag(contentNode) { return (/<[^>!]+>/).test(contentNode); } /** * @param {?} contentNode * @return {?} */ isOpeningTag(contentNode) { if (this.isTag(contentNode) && !this.isClosingTag(contentNode) && !this.isSelfClosingTag(contentNode)) { return true; } return false; } /** * @param {?} contentNode * @return {?} */ isClosingTag(contentNode) { return (/<\/+[^>]+>/).test(contentNode); } /** * @param {?} contentNode * @return {?} */ isSelfClosingTag(contentNode) { return (/<[^>]+\/>/).test(contentNode); } /** * @param {?} firstTag * @param {?} middleTag * @param {?} lastTag * @param {?} depth * @param {?} cycle * @return {?} */ createLineLogic(firstTag, middleTag, lastTag, depth, cycle) { if (this.isOpeningTag(firstTag) && this.isClosingTag(middleTag)) { /** @type {?} */ const openNode = this.createNode(firstTag, 'tag'); /** @type {?} */ const closeNode = this.createNode(middleTag, 'tag'); return { cycle: cycle + 1, depth: depth, line: this.indentNode(depth, `${openNode}${closeNode}`) }; } if (this.isOpeningTag(firstTag) && !this.isTag(middleTag)) { /** @type {?} */ const openNode = this.createNode(firstTag, 'tag'); /** @type {?} */ const contentNode = this.createNode(middleTag, 'string'); /** @type {?} */ const closeNode = this.createNode(lastTag, 'tag'); return { cycle: cycle + 2, depth: depth, line: this.indentNode(depth, `${openNode}${contentNode}${closeNode}`) }; } if (this.isSelfClosingTag(firstTag)) { /** @type {?} */ const selfClosingNode = this.createNode(firstTag, 'tag'); return { cycle: cycle, depth: depth, line: this.indentNode(depth, selfClosingNode) }; } if (this.isClosingTag(firstTag)) { /** @type {?} */ const closeNode = this.createNode(firstTag, 'tag'); return { cycle: cycle, depth: depth - 1, line: this.indentNode(depth - 1, closeNode) }; } return { cycle: cycle, depth: depth + 1, line: this.indentNode(depth, this.createNode(firstTag, 'text')) }; } } HTMLVisualizerComponent.ATTRIBUTE_CLASS = `${config.components.prefix}-html-visualizer-attribute`; HTMLVisualizerComponent.VALUE_CLASS = `${config.components.prefix}-html-visualizer-value`; HTMLVisualizerComponent.SYMBOL_CLASS = `${config.components.prefix}-html-visualizer-symbol`; HTMLVisualizerComponent.defaultProps = { className: '', html: '' }; HTMLVisualizerComponent.decorators = [ { type: Component, args: [{ selector: `${config.components.prefix}-html-visualizer`, template: "<div [ngClass]=\"prefix + '-html-visualizer'\">\n <div [ngClass]=\"prefix + '-html-visualizer-content'\" [innerHTML]=\"htmlContent\" ngNonBindable></div>\n</div>\n" }] } ]; /** @nocollapse */ HTMLVisualizerComponent.ctorParameters = () => [ { type: DomSanitizer } ]; HTMLVisualizerComponent.propDecorators = { className: [{ type: Input }], html: [{ type: Input }] }; if (false) { /** @type {?} */ HTMLVisualizerComponent.ATTRIBUTE_CLASS; /** @type {?} */ HTMLVisualizerComponent.VALUE_CLASS; /** @type {?} */ HTMLVisualizerComponent.SYMBOL_CLASS; /** @type {?} */ HTMLVisualizerComponent.defaultProps; /** @type {?} */ HTMLVisualizerComponent.prototype.className; /** @type {?} */ HTMLVisualizerComponent.prototype.html; /** @type {?} */ HTMLVisualizerComponent.prototype.htmlContent; /** @type {?} */ HTMLVisualizerComponent.prototype.prefix; /** * @type {?} * @private */ HTMLVisualizerComponent.prototype.sanitizer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC12aXN1YWxpemVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21hdGVyaWFsaXplLWFuZ3VsYXIvIiwic291cmNlcyI6WyJhcHAvY29tcGxldGVkLWNvbXBvbmVudHMvaHRtbC12aXN1YWxpemVyL2h0bWwtdmlzdWFsaXplci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFPdEMsTUFBTSxPQUFPLHVCQUF1Qjs7OztJQWdCbEMsWUFBb0IsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQU5sQyxjQUFTLEdBQVcsdUJBQXVCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUNuRSxTQUFJLEdBQVcsdUJBQXVCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztRQUczRCxXQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFHekMsQ0FBQzs7OztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7Ozs7O0lBRUQsTUFBTSxDQUFDLElBQVk7O2NBQ1gsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDOztjQUM3QixLQUFLLEdBQUcsRUFBRTs7WUFFWixLQUFLLEdBQUcsQ0FBQztRQUViLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOztrQkFDOUIsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7O2tCQUNw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XG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IFdvcmt5bGFiLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS93b3JreWxhYi9tYXRlcmlhbGl6ZS1hbmd1bGFyL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuLi8uLi9jb25maWcnO1xuaW1wb3J0IHsgSFRNTFZpc3VhbGl6ZXJNb2RlbCB9IGZyb20gJy4vaHRtbC12aXN1YWxpemVyLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBgJHsgY29uZmlnLmNvbXBvbmVudHMucHJlZml4IH0taHRtbC12aXN1YWxpemVyYCxcbiAgdGVtcGxhdGVVcmw6ICcuL2h0bWwtdmlzdWFsaXplci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSFRNTFZpc3VhbGl6ZXJDb21wb25lbnQgaW1wbGVtZW50cyBIVE1MVmlzdWFsaXplck1vZGVsLCBPbkluaXQge1xuICBzdGF0aWMgcmVhZG9ubHkgQVRUUklCVVRFX0NMQVNTID0gYCR7IGNvbmZpZy5jb21wb25lbnRzLnByZWZpeCB9LWh0bWwtdmlzdWFsaXplci1hdHRyaWJ1dGVgO1xuICBzdGF0aWMgcmVhZG9ubHkgVkFMVUVfQ0xBU1MgPSBgJHsgY29uZmlnLmNvbXBvbmVudHMucHJlZml4IH0taHRtbC12aXN1YWxpemVyLXZhbHVlYDtcbiAgc3RhdGljIHJlYWRvbmx5IFNZTUJPTF9DTEFTUyA9IGAkeyBjb25maWcuY29tcG9uZW50cy5wcmVmaXggfS1odG1sLXZpc3VhbGl6ZXItc3ltYm9sYDtcblxuICBzdGF0aWMgcmVhZG9ubHkgZGVmYXVsdFByb3BzOiBIVE1MVmlzdWFsaXplck1vZGVsID0ge1xuICAgIGNsYXNzTmFtZTogJycsXG4gICAgaHRtbDogJydcbiAgfTtcblxuICBASW5wdXQoKSBjbGFzc05hbWU6IHN0cmluZyA9IEhUTUxWaXN1YWxpemVyQ29tcG9uZW50LmRlZmF1bHRQcm9wcy5jbGFzc05hbWU7XG4gIEBJbnB1dCgpIGh0bWw6IHN0cmluZyA9IEhUTUxWaXN1YWxpemVyQ29tcG9uZW50LmRlZmF1bHRQcm9wcy5odG1sO1xuXG4gIHB1YmxpYyBodG1sQ29udGVudDogU2FmZUh0bWw7XG4gIHB1YmxpYyBwcmVmaXggPSBjb25maWcuY29tcG9uZW50cy5wcmVmaXg7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5odG1sQ29udGVudCA9IHRoaXMucmVuZGVyKHRoaXMuaHRtbCk7XG4gIH1cblxuICByZW5kZXIoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB0YWdzID0gdGhpcy5zcGxpdEJ5VGFncyhodG1sKTtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuXG4gICAgbGV0IGRlcHRoID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudFRhZyA9IHRhZ3NbaV07XG4gICAgICBjb25zdCBuZXh0VGFnID0gdGFnc1tpICsgMV07XG4gICAgICBjb25zdCBsYXN0VGFnID0gdGFnc1tpICsgMl07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3JlYXRlTGluZUxvZ2ljKGN1cnJlbnRUYWcsIG5leHRUYWcsIGxhc3RUYWcsIGRlcHRoLCBpKTtcblxuICAgICAgZGVwdGggPSByZXN1bHQuZGVwdGg7XG4gICAgICBpID0gcmVzdWx0LmN5Y2xlO1xuICAgICAgbGluZXMucHVzaChyZXN1bHQubGluZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJzxiciAvPicpO1xuICB9XG5cbiAgY3JlYXRlTm9kZShjb250ZW50OiBzdHJpbmcsIGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IGVzY2FwZWRDb250ZW50ID0gY29udGVudC5yZXBsYWNlKC8mL2csICcmYW1wOycpO1xuXG4gICAgZXNjYXBlZENvbnRlbnQgPSBlc2NhcGVkQ29udGVudC50cmltKCk7XG4gICAgZXNjYXBlZENvbnRlbnQgPSBlc2NhcGVkQ29udGVudC5yZXBsYWNlKC9cXFtcXFsvZywgJyYjMTIzJiMxMjM7Jyk7XG4gICAgZXNjYXBlZENvbnRlbnQgPSBlc2NhcGVkQ29udGVudC5yZXBsYWNlKC9cXF1cXF0vZywgJyYjMTI1JiMxMjU7Jyk7XG5cbiAgICBlc2NhcGVkQ29udGVudCA9IGVzY2FwZWRDb250ZW50LnJlcGxhY2UoLzwvZywgJyZsdDsnKTtcbiAgICBlc2NhcGVkQ29udGVudCA9IGVzY2FwZWRDb250ZW50LnJlcGxhY2UoLz4vZywgJyZndDsnKTtcblxuICAgIGVzY2FwZWRDb250ZW50ID0gZXNjYXBlZENvbnRlbnQucmVwbGFjZSgvKFxcUyspPVwiKFteJ10qPylcIi9nLCBtYXRjaCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG1hdGNoLm1hdGNoKC9cIihbXiddKj8pXCIvZyk7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSBtYXRjaC5tYXRjaCgvKFxcUyspPS9nKTtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZVZhbGlkYXRlZCA9IChhdHRyaWJ1dGUgJiYgYXR0cmlidXRlWzBdKSB8fCAnJztcbiAgICAgIGNvbnN0IHZhbHVlVmFsaWRhdGVkID0gKHZhbHVlICYmIHZhbHVlWzBdKSB8fCAnJztcblxuICAgICAgY29uc3QgYXR0cmlidXRlVGFnID0gYDxzcGFuIGNsYXNzPVwiJHsgSFRNTFZpc3VhbGl6ZXJDb21wb25lbnQuQVRUUklCVVRFX0NMQVNTIH1cIj4keyBhdHRyaWJ1dGVWYWxpZGF0ZWQgfTwvc3Bhbj5gO1xuICAgICAgY29uc3QgdmFsdWVUYWcgPSBgPHNwYW4gY2xhc3M9XCIkeyBIVE1MVmlzdWFsaXplckNvbXBvbmVudC5WQUxVRV9DTEFTUyB9XCI+JHsgdmFsdWVWYWxpZGF0ZWQgfTwvc3Bhbj5gO1xuXG4gICAgICByZXR1cm4gYXR0cmlidXRlVGFnICsgdmFsdWVUYWc7XG4gICAgfSk7XG5cbiAgICBlc2NhcGVkQ29udGVudCA9IGVzY2FwZWRDb250ZW50LnJlcGxhY2UoLygmbHQ7XFwvfCZsdDspL2csIG1hdGNoID0+XG4gICAgICBgPHNwYW4gY2xhc3M9XCIkeyBIVE1MVmlzdWFsaXplckNvbXBvbmVudC5TWU1CT0xfQ0xBU1MgfVwiPiZsdDskeyBtYXRjaC5pbmNsdWRlcygnLycpID8gJy8nIDogJycgfTwvc3Bhbj5gXG4gICAgKTtcblxuICAgIGVzY2FwZWRDb250ZW50ID0gZXNjYXBlZENvbnRlbnQucmVwbGFjZSgvKFxcLyZndDt8Jmd0OykvZywgbWF0Y2ggPT5cbiAgICAgIGA8c3BhbiBjbGFzcz1cIiR7IEhUTUxWaXN1YWxpemVyQ29tcG9uZW50LlNZTUJPTF9DTEFTUyB9XCI+JHsgbWF0Y2guaW5jbHVkZXMoJy8nKSA/ICcvJyA6ICcnIH0mZ3Q7PC9zcGFuPmBcbiAgICApO1xuXG4gICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIiR7IGNsYXNzTmFtZSB9XCI+JHsgZXNjYXBlZENvbnRlbnQgfTwvc3Bhbj5gO1xuICB9XG5cbiAgaW5kZW50Tm9kZShkZXB0aDogbnVtYmVyLCBjb250ZW50OiBzdHJpbmcpIHtcbiAgICBjb25zdCBpbmRlbnRhdGlvbkJhc2UgPSAnJmVtc3A7JmVtc3A7JztcbiAgICBjb25zdCBpbmRlbnRhdGlvbiA9IGluZGVudGF0aW9uQmFzZS5yZXBlYXQoZGVwdGgpO1xuXG4gICAgcmV0dXJuIGAkeyBpbmRlbnRhdGlvbiB9JHsgY29udGVudCB9YDtcbiAgfVxuXG4gIHNwbGl0QnlUYWdzKHhtbDogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3QgdGFncyA9IHhtbC5zcGxpdCgvKDxcXC8/W14+XSs+KS9nKTtcbiAgICBjb25zdCBjbGVhbmVkVGFncyA9IHRhZ3MuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKTtcblxuICAgIHJldHVybiBjbGVhbmVkVGFncztcbiAgfVxuXG4gIGlzVGFnKGNvbnRlbnROb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKC88W14+IV0rPi8pLnRlc3QoY29udGVudE5vZGUpO1xuICB9XG5cbiAgaXNPcGVuaW5nVGFnKGNvbnRlbnROb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc1RhZyhjb250ZW50Tm9kZSkgJiYgIXRoaXMuaXNDbG9zaW5nVGFnKGNvbnRlbnROb2RlKSAmJiAhdGhpcy5pc1NlbGZDbG9zaW5nVGFnKGNvbnRlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaXNDbG9zaW5nVGFnKGNvbnRlbnROb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKC88XFwvK1tePl0rPi8pLnRlc3QoY29udGVudE5vZGUpO1xuICB9XG5cbiAgaXNTZWxmQ2xvc2luZ1RhZyhjb250ZW50Tm9kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICgvPFtePl0rXFwvPi8pLnRlc3QoY29udGVudE5vZGUpO1xuICB9XG5cbiAgY3JlYXRlTGluZUxvZ2ljKGZpcnN0VGFnOiBzdHJpbmcsIG1pZGRsZVRhZzogc3RyaW5nLCBsYXN0VGFnOiBzdHJpbmcsIGRlcHRoOiBudW1iZXIsIGN5Y2xlOiBudW1iZXIpOiBhbnkge1xuICAgIGlmICh0aGlzLmlzT3BlbmluZ1RhZyhmaXJzdFRhZykgJiYgdGhpcy5pc0Nsb3NpbmdUYWcobWlkZGxlVGFnKSkge1xuICAgICAgY29uc3Qgb3Blbk5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoZmlyc3RUYWcsICd0YWcnKTtcbiAgICAgIGNvbnN0IGNsb3NlTm9kZSA9IHRoaXMuY3JlYXRlTm9kZShtaWRkbGVUYWcsICd0YWcnKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3ljbGU6IGN5Y2xlICsgMSxcbiAgICAgICAgZGVwdGg6IGRlcHRoLFxuICAgICAgICBsaW5lOiB0aGlzLmluZGVudE5vZGUoZGVwdGgsIGAkeyBvcGVuTm9kZSB9JHsgY2xvc2VOb2RlIH1gKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc09wZW5pbmdUYWcoZmlyc3RUYWcpICYmICF0aGlzLmlzVGFnKG1pZGRsZVRhZykpIHtcbiAgICAgIGNvbnN0IG9wZW5Ob2RlID0gdGhpcy5jcmVhdGVOb2RlKGZpcnN0VGFnLCAndGFnJyk7XG4gICAgICBjb25zdCBjb250ZW50Tm9kZSA9IHRoaXMuY3JlYXRlTm9kZShtaWRkbGVUYWcsICdzdHJpbmcnKTtcbiAgICAgIGNvbnN0IGNsb3NlTm9kZSA9IHRoaXMuY3JlYXRlTm9kZShsYXN0VGFnLCAndGFnJyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN5Y2xlOiBjeWNsZSArIDIsXG4gICAgICAgIGRlcHRoOiBkZXB0aCxcbiAgICAgICAgbGluZTogdGhpcy5pbmRlbnROb2RlKGRlcHRoLCBgJHsgb3Blbk5vZGUgfSR7IGNvbnRlbnROb2RlIH0keyBjbG9zZU5vZGUgfWApXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2VsZkNsb3NpbmdUYWcoZmlyc3RUYWcpKSB7XG4gICAgICBjb25zdCBzZWxmQ2xvc2luZ05vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoZmlyc3RUYWcsICd0YWcnKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3ljbGU6IGN5Y2xlLFxuICAgICAgICBkZXB0aDogZGVwdGgsXG4gICAgICAgIGxpbmU6IHRoaXMuaW5kZW50Tm9kZShkZXB0aCwgc2VsZkNsb3NpbmdOb2RlKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0Nsb3NpbmdUYWcoZmlyc3RUYWcpKSB7XG4gICAgICBjb25zdCBjbG9zZU5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoZmlyc3RUYWcsICd0YWcnKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3ljbGU6IGN5Y2xlLFxuICAgICAgICBkZXB0aDogZGVwdGggLSAxLFxuICAgICAgICBsaW5lOiB0aGlzLmluZGVudE5vZGUoZGVwdGggLSAxLCBjbG9zZU5vZGUpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjeWNsZTogY3ljbGUsXG4gICAgICBkZXB0aDogZGVwdGggKyAxLFxuICAgICAgbGluZTogdGhpcy5pbmRlbnROb2RlKGRlcHRoLCB0aGlzLmNyZWF0ZU5vZGUoZmlyc3RUYWcsICd0ZXh0JykpXG4gICAgfTtcbiAgfVxufVxuIl19