UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

145 lines 19.4 kB
import { __decorate, __metadata } from "tslib"; import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, ViewChild, } from '@angular/core'; import { debounce } from 'lodash-es'; import { Observable } from 'rxjs'; import { Terminal } from 'xterm'; import { FitAddon } from 'xterm-addon-fit'; import { SearchAddon } from 'xterm-addon-search'; import { WebLinksAddon } from 'xterm-addon-web-links'; import { clearWindowsXtermTools, setWindowsXtermTools, } from '../core/public-api'; import { ObservableInput, ValueHook } from '../core/utils/decorators'; import { EffectDirectiveModule } from '../effect-directive/module'; import { XTERM_DARK_THEME, XTERM_LIGHT_THEME } from '../exec/constants'; import { initRendererAddon } from '../exec/terminal/component'; import { CommonLayoutModule } from '../page-scaffold/page-header/common-layout/common-layout.module'; import * as i0 from "@angular/core"; const _c0 = ["anchor"]; const SHELL_THEMES = { dark: XTERM_DARK_THEME, light: XTERM_LIGHT_THEME, }; export class XtermComponent { constructor() { this.feedLines = 1; this.searchAddonInit = new EventEmitter(); this.terminalInit = new EventEmitter(); this.searchAddon = new SearchAddon(); this.baseTerminalOptions = { fontSize: 12, lineHeight: 1.5, letterSpacing: 0, fontWeight: 'normal', fontFamily: 'Menlo, Monaco, "Consolas", "Courier New", monospace', cursorBlink: false, convertEol: true, scrollback: Number.MAX_SAFE_INTEGER, allowProposedApi: true, }; } initFitAddon() { this.fitAddon = new FitAddon(); const resizeObserver = new ResizeObserver(debounce(([entry]) => { if (entry.contentRect.width !== 0) { this.fitAddon.fit(); } }, 200)); resizeObserver.observe(this.terminalWrapper.nativeElement); return this.fitAddon; } initSearchAddon() { this.searchAddon = new SearchAddon(); this.searchAddonInit.next(this.searchAddon); return this.searchAddon; } initXterm() { this.terminal = new Terminal(this.baseTerminalOptions); this.terminal.loadAddon(this.initFitAddon()); this.terminal.loadAddon(this.initSearchAddon()); this.terminal.loadAddon(new WebLinksAddon()); this.terminal.loadAddon(initRendererAddon()); this.terminal.open(this.terminalWrapper.nativeElement); this.setTheme(); this.bindCopyEvent(); setWindowsXtermTools(this.terminal); this.terminalInit.next(this.terminal); } ngAfterViewInit() { this.initXterm(); this.logs$.subscribe(logs => { this.fitAddon.fit(); this.write(logs, () => { requestAnimationFrame(() => this.terminal.scrollToBottom()); }); }); } ngOnDestroy() { if (this.terminal) { try { this.terminal.dispose(); } catch (e) { console.warn(e); } } clearWindowsXtermTools(); } write(logs, callback) { if (this.terminal?.write) { this.terminal.clear(); Array.isArray(logs) ? logs.forEach(v => this.terminal.write(v, callback)) : this.terminal.write(logs || '', callback); } } bindCopyEvent() { this.terminal.attachCustomKeyEventHandler((e) => { if (e.ctrlKey && e.key?.toLowerCase() === 'c') { document.execCommand('copy'); } return false; }); } setTheme(theme = this.theme) { if (!this.terminal) { return; } this.terminal.options.theme = SHELL_THEMES[theme]; } static { this.ɵfac = function XtermComponent_Factory(t) { return new (t || XtermComponent)(); }; } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: XtermComponent, selectors: [["acl-xterm"]], viewQuery: function XtermComponent_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(_c0, 7); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.terminalWrapper = _t.first); } }, inputs: { theme: "theme", logs: "logs" }, outputs: { searchAddonInit: "searchAddonInit", terminalInit: "terminalInit" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 2, vars: 0, consts: [["anchor", ""], [1, "logs-xterm"]], template: function XtermComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "div", 1, 0); } }, dependencies: [CommonModule, CommonLayoutModule, EffectDirectiveModule], styles: [".logs-xterm[_ngcontent-%COMP%]{color:rgb(var(--aui-color-n-8));width:100%;height:100%}.logs-xterm[_ngcontent-%COMP%] .xterm{padding:0 20px;height:100%}.logs-xterm[_ngcontent-%COMP%] .xterm .xterm-screen{pointer-events:none}.logs-xterm[_ngcontent-%COMP%] .xterm .xterm-viewport{width:100%!important;border-radius:0 0 2px 2px}.logs-xterm[_ngcontent-%COMP%] .xterm .xterm-viewport::-webkit-scrollbar{width:8px;height:4px}.logs-xterm[_ngcontent-%COMP%] .xterm .xterm-viewport::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.logs-xterm[_ngcontent-%COMP%] .xterm .xterm-viewport::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.logs-xterm[_ngcontent-%COMP%] .xterm .xterm-viewport::-webkit-scrollbar-corner{background-color:transparent}"], changeDetection: 0 }); } } __decorate([ ValueHook(function (theme) { this.setTheme(theme); }), __metadata("design:type", String) ], XtermComponent.prototype, "theme", void 0); __decorate([ ObservableInput(), __metadata("design:type", Observable) ], XtermComponent.prototype, "logs$", void 0); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(XtermComponent, [{ type: Component, args: [{ selector: 'acl-xterm', template: '<div class="logs-xterm" #anchor></div>', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, CommonLayoutModule, EffectDirectiveModule], styles: [".logs-xterm{color:rgb(var(--aui-color-n-8));width:100%;height:100%}.logs-xterm ::ng-deep .xterm{padding:0 20px;height:100%}.logs-xterm ::ng-deep .xterm .xterm-screen{pointer-events:none}.logs-xterm ::ng-deep .xterm .xterm-viewport{width:100%!important;border-radius:0 0 2px 2px}.logs-xterm ::ng-deep .xterm .xterm-viewport::-webkit-scrollbar{width:8px;height:4px}.logs-xterm ::ng-deep .xterm .xterm-viewport::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgb(var(--aui-color-n-7))}.logs-xterm ::ng-deep .xterm .xterm-viewport::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--aui-color-n-5))}.logs-xterm ::ng-deep .xterm .xterm-viewport::-webkit-scrollbar-corner{background-color:transparent}\n"] }] }], null, { theme: [{ type: Input }], logs$: [], logs: [{ type: Input }], terminalWrapper: [{ type: ViewChild, args: ['anchor', { static: true }] }], searchAddonInit: [{ type: Output }], terminalInit: [{ type: Output }] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(XtermComponent, { className: "XtermComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHRlcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3h0ZXJtL3h0ZXJtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBNEIsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsb0JBQW9CLEdBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQzs7O0FBRXJHLE1BQU0sWUFBWSxHQUEwQjtJQUMxQyxJQUFJLEVBQUUsZ0JBQWdC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Q0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxRQUFlLElBQUksQ0FBQyxLQUFLO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7K0VBNUhVLGNBQWM7b0VBQWQsY0FBYzs7Ozs7O1lBTmQsNEJBQXNDOzRCQUl2QyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCOztBQU9qRTtJQUpDLFNBQVMsQ0FBQyxVQUFVLEtBQVk7UUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUM7OzZDQUVXO0FBS2I7SUFEQyxlQUFlLEVBQUU7OEJBQ1gsVUFBVTs2Q0FBb0I7aUZBVjFCLGNBQWM7Y0FSMUIsU0FBUzsyQkFDRSxXQUFXLFlBQ1gsd0NBQXdDLG1CQUVqQyx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQztnQkFPbEUsS0FBSztrQkFESixLQUFLO1lBTU4sS0FBSyxNQUdMLElBQUk7a0JBREgsS0FBSztZQUlOLGVBQWU7a0JBRGQsU0FBUzttQkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBSXJDLGVBQWU7a0JBRGQsTUFBTTtZQUlQLFlBQVk7a0JBRFgsTUFBTTs7a0ZBckJJLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaGVtZSB9IGZyb20gJ0BhbGF1ZGEvdWknO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSVRlcm1pbmFsT3B0aW9ucywgSVRoZW1lLCBUZXJtaW5hbCB9IGZyb20gJ3h0ZXJtJztcbmltcG9ydCB7IEZpdEFkZG9uIH0gZnJvbSAneHRlcm0tYWRkb24tZml0JztcbmltcG9ydCB7IFNlYXJjaEFkZG9uIH0gZnJvbSAneHRlcm0tYWRkb24tc2VhcmNoJztcbmltcG9ydCB7IFdlYkxpbmtzQWRkb24gfSBmcm9tICd4dGVybS1hZGRvbi13ZWItbGlua3MnO1xuXG5pbXBvcnQge1xuICBjbGVhcldpbmRvd3NYdGVybVRvb2xzLFxuICBzZXRXaW5kb3dzWHRlcm1Ub29scyxcbn0gZnJvbSAnLi4vY29yZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IE9ic2VydmFibGVJbnB1dCwgVmFsdWVIb29rIH0gZnJvbSAnLi4vY29yZS91dGlscy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEVmZmVjdERpcmVjdGl2ZU1vZHVsZSB9IGZyb20gJy4uL2VmZmVjdC1kaXJlY3RpdmUvbW9kdWxlJztcbmltcG9ydCB7IFhURVJNX0RBUktfVEhFTUUsIFhURVJNX0xJR0hUX1RIRU1FIH0gZnJvbSAnLi4vZXhlYy9jb25zdGFudHMnO1xuaW1wb3J0IHsgaW5pdFJlbmRlcmVyQWRkb24gfSBmcm9tICcuLi9leGVjL3Rlcm1pbmFsL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25MYXlvdXRNb2R1bGUgfSBmcm9tICcuLi9wYWdlLXNjYWZmb2xkL3BhZ2UtaGVhZGVyL2NvbW1vbi1sYXlvdXQvY29tbW9uLWxheW91dC5tb2R1bGUnO1xuXG5jb25zdCBTSEVMTF9USEVNRVM6IFJlY29yZDxUaGVtZSwgSVRoZW1lPiA9IHtcbiAgZGFyazogWFRFUk1fREFSS19USEVNRSxcbiAgbGlnaHQ6IFhURVJNX0xJR0hUX1RIRU1FLFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLXh0ZXJtJyxcbiAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwibG9ncy14dGVybVwiICNhbmNob3I+PC9kaXY+JyxcbiAgc3R5bGVVcmxzOiBbJ3h0ZXJtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDb21tb25MYXlvdXRNb2R1bGUsIEVmZmVjdERpcmVjdGl2ZU1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIFh0ZXJtQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZhbHVlSG9vayhmdW5jdGlvbiAodGhlbWU6IFRoZW1lKSB7XG4gICAgdGhpcy5zZXRUaGVtZSh0aGVtZSk7XG4gIH0pXG4gIEBJbnB1dCgpXG4gIHRoZW1lOiBUaGVtZTtcblxuICBmZWVkTGluZXMgPSAxO1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBsb2dzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXSB8IHN0cmluZz47XG5cbiAgQElucHV0KClcbiAgbG9nczogc3RyaW5nW10gfCBzdHJpbmc7XG5cbiAgQFZpZXdDaGlsZCgnYW5jaG9yJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgdGVybWluYWxXcmFwcGVyOiBFbGVtZW50UmVmO1xuXG4gIEBPdXRwdXQoKVxuICBzZWFyY2hBZGRvbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPFNlYXJjaEFkZG9uPigpO1xuXG4gIEBPdXRwdXQoKVxuICB0ZXJtaW5hbEluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPFRlcm1pbmFsPigpO1xuXG4gIHRlcm1pbmFsOiBUZXJtaW5hbDtcbiAgc2VhcmNoQWRkb24gPSBuZXcgU2VhcmNoQWRkb24oKTtcblxuICBmaXRBZGRvbjogRml0QWRkb247XG5cbiAgYmFzZVRlcm1pbmFsT3B0aW9uczogSVRlcm1pbmFsT3B0aW9ucyA9IHtcbiAgICBmb250U2l6ZTogMTIsXG4gICAgbGluZUhlaWdodDogMS41LFxuICAgIGxldHRlclNwYWNpbmc6IDAsXG4gICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgZm9udEZhbWlseTogJ01lbmxvLCBNb25hY28sIFwiQ29uc29sYXNcIiwgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2UnLFxuICAgIGN1cnNvckJsaW5rOiBmYWxzZSxcbiAgICBjb252ZXJ0RW9sOiB0cnVlLFxuICAgIHNjcm9sbGJhY2s6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgIGFsbG93UHJvcG9zZWRBcGk6IHRydWUsXG4gIH07XG5cbiAgcHJpdmF0ZSBpbml0Rml0QWRkb24oKSB7XG4gICAgdGhpcy5maXRBZGRvbiA9IG5ldyBGaXRBZGRvbigpO1xuXG4gICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoXG4gICAgICBkZWJvdW5jZSgoW2VudHJ5XSkgPT4ge1xuICAgICAgICBpZiAoZW50cnkuY29udGVudFJlY3Qud2lkdGggIT09IDApIHtcbiAgICAgICAgICB0aGlzLmZpdEFkZG9uLmZpdCgpO1xuICAgICAgICB9XG4gICAgICB9LCAyMDApLFxuICAgICk7XG5cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMudGVybWluYWxXcmFwcGVyLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIHRoaXMuZml0QWRkb247XG4gIH1cblxuICBwcml2YXRlIGluaXRTZWFyY2hBZGRvbigpIHtcbiAgICB0aGlzLnNlYXJjaEFkZG9uID0gbmV3IFNlYXJjaEFkZG9uKCk7XG4gICAgdGhpcy5zZWFyY2hBZGRvbkluaXQubmV4dCh0aGlzLnNlYXJjaEFkZG9uKTtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hBZGRvbjtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFh0ZXJtKCkge1xuICAgIHRoaXMudGVybWluYWwgPSBuZXcgVGVybWluYWwodGhpcy5iYXNlVGVybWluYWxPcHRpb25zKTtcbiAgICB0aGlzLnRlcm1pbmFsLmxvYWRBZGRvbih0aGlzLmluaXRGaXRBZGRvbigpKTtcbiAgICB0aGlzLnRlcm1pbmFsLmxvYWRBZGRvbih0aGlzLmluaXRTZWFyY2hBZGRvbigpKTtcbiAgICB0aGlzLnRlcm1pbmFsLmxvYWRBZGRvbihuZXcgV2ViTGlua3NBZGRvbigpKTtcbiAgICB0aGlzLnRlcm1pbmFsLmxvYWRBZGRvbihpbml0UmVuZGVyZXJBZGRvbigpKTtcblxuICAgIHRoaXMudGVybWluYWwub3Blbih0aGlzLnRlcm1pbmFsV3JhcHBlci5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnNldFRoZW1lKCk7XG4gICAgdGhpcy5iaW5kQ29weUV2ZW50KCk7XG5cbiAgICBzZXRXaW5kb3dzWHRlcm1Ub29scyh0aGlzLnRlcm1pbmFsKTtcbiAgICB0aGlzLnRlcm1pbmFsSW5pdC5uZXh0KHRoaXMudGVybWluYWwpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdFh0ZXJtKCk7XG5cbiAgICB0aGlzLmxvZ3MkLnN1YnNjcmliZShsb2dzID0+IHtcbiAgICAgIHRoaXMuZml0QWRkb24uZml0KCk7XG4gICAgICB0aGlzLndyaXRlKGxvZ3MsICgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMudGVybWluYWwuc2Nyb2xsVG9Cb3R0b20oKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnRlcm1pbmFsLmRpc3Bvc2UoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjbGVhcldpbmRvd3NYdGVybVRvb2xzKCk7XG4gIH1cblxuICB3cml0ZShsb2dzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s/OiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMudGVybWluYWw/LndyaXRlKSB7XG4gICAgICB0aGlzLnRlcm1pbmFsLmNsZWFyKCk7XG4gICAgICBBcnJheS5pc0FycmF5KGxvZ3MpXG4gICAgICAgID8gbG9ncy5mb3JFYWNoKHYgPT4gdGhpcy50ZXJtaW5hbC53cml0ZSh2LCBjYWxsYmFjaykpXG4gICAgICAgIDogdGhpcy50ZXJtaW5hbC53cml0ZShsb2dzIHx8ICcnLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgYmluZENvcHlFdmVudCgpIHtcbiAgICB0aGlzLnRlcm1pbmFsLmF0dGFjaEN1c3RvbUtleUV2ZW50SGFuZGxlcigoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKGUuY3RybEtleSAmJiBlLmtleT8udG9Mb3dlckNhc2UoKSA9PT0gJ2MnKSB7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBzZXRUaGVtZSh0aGVtZTogVGhlbWUgPSB0aGlzLnRoZW1lKSB7XG4gICAgaWYgKCF0aGlzLnRlcm1pbmFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZXJtaW5hbC5vcHRpb25zLnRoZW1lID0gU0hFTExfVEhFTUVTW3RoZW1lXTtcbiAgfVxufVxuIl19