@taiga-ui/addon-doc
Version:
Taiga UI based library for developing documentation portals for Angular libraries.
46 lines • 16.2 kB
JavaScript
import { ClipboardModule } from '@angular/cdk/clipboard';
import { isPlatformServer, NgForOf, NgIf } from '@angular/common';
import { ChangeDetectionStrategy, Component, inject, Input, PLATFORM_ID, } from '@angular/core';
import { toSignal } from '@angular/core/rxjs-interop';
import { TUI_DOC_EXAMPLE_MARKDOWN_CODE_PROCESSOR, TUI_DOC_ICONS, } from '@taiga-ui/addon-doc/tokens';
import { tuiRawLoad } from '@taiga-ui/addon-doc/utils';
import { TuiButton } from '@taiga-ui/core/components/button';
import { TUI_COPY_TEXTS } from '@taiga-ui/kit/tokens';
import { Highlight } from 'ngx-highlightjs';
import { BehaviorSubject, map, startWith, Subject, switchMap, timer } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "@angular/cdk/clipboard";
class TuiDocCode {
constructor() {
this.icons = inject(TUI_DOC_ICONS);
this.rawLoader$$ = new BehaviorSubject('');
this.isServer = isPlatformServer(inject(PLATFORM_ID));
this.markdownCodeProcessor = inject(TUI_DOC_EXAMPLE_MARKDOWN_CODE_PROCESSOR);
this.copy$ = new Subject();
this.copyText = toSignal(inject(TUI_COPY_TEXTS).pipe(map(([copy]) => copy)));
this.icon = toSignal(this.copy$.pipe(switchMap(() => timer(2000).pipe(map(() => this.icons.copy), startWith(this.icons.check)))), { initialValue: this.icons.copy });
this.processor = toSignal(this.rawLoader$$.pipe(switchMap(tuiRawLoad), map((value) => this.markdownCodeProcessor(value))), { initialValue: [] });
this.filename = '';
}
set code(code) {
this.rawLoader$$.next(code);
}
get hasFilename() {
return !!this.filename;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDocCode, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiDocCode, isStandalone: true, selector: "tui-doc-code", inputs: { filename: "filename", code: "code" }, host: { properties: { "style.visibility": "isServer ? \"hidden\" : \"visible\"", "class._has-filename": "hasFilename" } }, ngImport: i0, template: "<p\n *ngIf=\"filename\"\n class=\"t-header\"\n>\n {{ filename }}\n</p>\n<pre\n *ngFor=\"let content of processor()\"\n class=\"t-code\"\n>\n <code [lineNumbers]=\"true\" [highlight]=\"content\"></code>\n <div class=\"t-code-actions\">\n <button\n tuiIconButton\n type=\"button\"\n appearance=\"outline-grayscale\"\n size=\"s\"\n class=\"t-copy-button\"\n [iconStart]=\"icon()\"\n [cdkCopyToClipboard]=\"content\"\n (click)=\"copy$.next()\"\n >\n {{ copyText()}}\n </button>\n <ng-content />\n </div>\n</pre>\n", styles: [":host{display:block}.t-header{font:var(--tui-font-text-s);font-weight:700}.t-header+.t-code{border-radius:.25rem}.t-code{position:relative;margin:0;white-space:normal;outline:1px solid var(--tui-border-normal)}.t-code ::ng-deep .hljs-ln{inline-size:100%}.t-code ::ng-deep .hljs-ln .hljs-ln-numbers{inline-size:1rem}.t-code ::ng-deep .hljs-ln td{white-space:pre}.t-code ::ng-deep .hljs-ln td:not(.hljs-ln-numbers):hover{outline:1px solid var(--tui-border-normal);border-radius:.25rem}.t-code+.t-code{margin-block-start:1rem}.t-code-actions{position:absolute;top:.75rem;right:.75rem;display:flex;justify-content:center;align-items:center;flex-direction:row-reverse}.t-copy-button::ng-deep+*:not(:empty){margin-inline-end:.375rem}.hljs:not(:empty){font:var(--tui-font-text-m);font-size:.875rem;padding:1.5rem 2rem;font-family:monospace;overflow-wrap:break-word;white-space:pre-wrap}@media all and (-webkit-min-device-pixel-ratio: 0) and (-webkit-min-device-pixel-ratio: 0),all and (-webkit-min-device-pixel-ratio: 0) and (min-resolution: .001dpcm){.hljs:not(:empty)::-webkit-scrollbar,.hljs:not(:empty)::-webkit-scrollbar-thumb{inline-size:1rem;block-size:1rem;border-radius:6.25rem;background-clip:padding-box;border:.375rem solid transparent}.hljs:not(:empty)::-webkit-scrollbar{background-color:transparent}.hljs:not(:empty)::-webkit-scrollbar-thumb{background-color:var(--tui-background-neutral-1-hover)}.hljs:not(:empty)::-webkit-scrollbar-thumb:hover{background-color:var(--tui-background-neutral-1-pressed)}.hljs:not(:empty)::-webkit-scrollbar-thumb:active{background-color:var(--tui-text-tertiary)}}@media screen and (max-width: 47.9625em){.hljs:not(:empty){padding:1rem}}.t-code-actions,.hljs:not(:empty){background:var(--tui-background-base)}@supports (background: color-mix(in srgb,var(--tui-background-base),#222 2%)){.t-code-actions,.hljs:not(:empty){background:color-mix(in srgb,var(--tui-background-base),#222 2%)}}\n"], dependencies: [{ kind: "ngmodule", type: ClipboardModule }, { kind: "directive", type: i1.CdkCopyToClipboard, selector: "[cdkCopyToClipboard]", inputs: ["cdkCopyToClipboard", "cdkCopyToClipboardAttempts"], outputs: ["cdkCopyToClipboardCopied"] }, { kind: "directive", type: Highlight, selector: "[highlight]", inputs: ["highlight", "languages", "lineNumbers"], outputs: ["highlighted"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
export { TuiDocCode };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDocCode, decorators: [{
type: Component,
args: [{ standalone: true, selector: 'tui-doc-code', imports: [ClipboardModule, Highlight, NgForOf, NgIf, TuiButton], changeDetection: ChangeDetectionStrategy.OnPush, host: {
'[style.visibility]': 'isServer ? "hidden" : "visible"',
'[class._has-filename]': 'hasFilename',
}, template: "<p\n *ngIf=\"filename\"\n class=\"t-header\"\n>\n {{ filename }}\n</p>\n<pre\n *ngFor=\"let content of processor()\"\n class=\"t-code\"\n>\n <code [lineNumbers]=\"true\" [highlight]=\"content\"></code>\n <div class=\"t-code-actions\">\n <button\n tuiIconButton\n type=\"button\"\n appearance=\"outline-grayscale\"\n size=\"s\"\n class=\"t-copy-button\"\n [iconStart]=\"icon()\"\n [cdkCopyToClipboard]=\"content\"\n (click)=\"copy$.next()\"\n >\n {{ copyText()}}\n </button>\n <ng-content />\n </div>\n</pre>\n", styles: [":host{display:block}.t-header{font:var(--tui-font-text-s);font-weight:700}.t-header+.t-code{border-radius:.25rem}.t-code{position:relative;margin:0;white-space:normal;outline:1px solid var(--tui-border-normal)}.t-code ::ng-deep .hljs-ln{inline-size:100%}.t-code ::ng-deep .hljs-ln .hljs-ln-numbers{inline-size:1rem}.t-code ::ng-deep .hljs-ln td{white-space:pre}.t-code ::ng-deep .hljs-ln td:not(.hljs-ln-numbers):hover{outline:1px solid var(--tui-border-normal);border-radius:.25rem}.t-code+.t-code{margin-block-start:1rem}.t-code-actions{position:absolute;top:.75rem;right:.75rem;display:flex;justify-content:center;align-items:center;flex-direction:row-reverse}.t-copy-button::ng-deep+*:not(:empty){margin-inline-end:.375rem}.hljs:not(:empty){font:var(--tui-font-text-m);font-size:.875rem;padding:1.5rem 2rem;font-family:monospace;overflow-wrap:break-word;white-space:pre-wrap}@media all and (-webkit-min-device-pixel-ratio: 0) and (-webkit-min-device-pixel-ratio: 0),all and (-webkit-min-device-pixel-ratio: 0) and (min-resolution: .001dpcm){.hljs:not(:empty)::-webkit-scrollbar,.hljs:not(:empty)::-webkit-scrollbar-thumb{inline-size:1rem;block-size:1rem;border-radius:6.25rem;background-clip:padding-box;border:.375rem solid transparent}.hljs:not(:empty)::-webkit-scrollbar{background-color:transparent}.hljs:not(:empty)::-webkit-scrollbar-thumb{background-color:var(--tui-background-neutral-1-hover)}.hljs:not(:empty)::-webkit-scrollbar-thumb:hover{background-color:var(--tui-background-neutral-1-pressed)}.hljs:not(:empty)::-webkit-scrollbar-thumb:active{background-color:var(--tui-text-tertiary)}}@media screen and (max-width: 47.9625em){.hljs:not(:empty){padding:1rem}}.t-code-actions,.hljs:not(:empty){background:var(--tui-background-base)}@supports (background: color-mix(in srgb,var(--tui-background-base),#222 2%)){.t-code-actions,.hljs:not(:empty){background:color-mix(in srgb,var(--tui-background-base),#222 2%)}}\n"] }]
}], propDecorators: { filename: [{
type: Input
}], code: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZGRvbi1kb2MvY29tcG9uZW50cy9jb2RlL2luZGV4LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWRkb24tZG9jL2NvbXBvbmVudHMvY29kZS9pbmRleC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsV0FBVyxHQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRCxPQUFPLEVBQ0gsdUNBQXVDLEVBQ3ZDLGFBQWEsR0FDaEIsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFFckQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzNELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7QUFFaEYsTUFZYSxVQUFVO0lBWnZCO1FBYXFCLFVBQUssR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUIsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBc0IsRUFBRSxDQUFDLENBQUM7UUFFekQsYUFBUSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRWpELDBCQUFxQixHQUNwQyxNQUFNLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUVqQyxVQUFLLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUM1QixhQUFRLEdBQUcsUUFBUSxDQUNsQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3JELENBQUM7UUFFaUIsU0FBSSxHQUFHLFFBQVEsQ0FDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ1gsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUNYLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQ1osR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQzFCLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUM5QixDQUNKLENBQ0osRUFDRCxFQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBQyxDQUNsQyxDQUFDO1FBRWlCLGNBQVMsR0FBRyxRQUFRLENBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNqQixTQUFTLENBQUMsVUFBVSxDQUFDLEVBQ3JCLEdBQUcsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzVELEVBQ0QsRUFBQyxZQUFZLEVBQUUsRUFBRSxFQUFDLENBQ3JCLENBQUM7UUFHSyxhQUFRLEdBQUcsRUFBRSxDQUFDO0tBVXhCO0lBUkcsSUFDVyxJQUFJLENBQUMsSUFBeUI7UUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsV0FBVztRQUNsQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzNCLENBQUM7K0dBNUNRLFVBQVU7bUdBQVYsVUFBVSxtUENsQ3ZCLHNwQkEyQkEsazhEREZjLGVBQWUsME5BQUUsU0FBUyxxSUFBRSxPQUFPLG1IQUFFLElBQUksNkZBQUUsU0FBUzs7U0FTckQsVUFBVTs0RkFBVixVQUFVO2tCQVp0QixTQUFTO2lDQUNNLElBQUksWUFDTixjQUFjLFdBQ2YsQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLG1CQUc5Qyx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNGLG9CQUFvQixFQUFFLGlDQUFpQzt3QkFDdkQsdUJBQXVCLEVBQUUsYUFBYTtxQkFDekM7OEJBcUNNLFFBQVE7c0JBRGQsS0FBSztnQkFJSyxJQUFJO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NsaXBib2FyZE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NsaXBib2FyZCc7XG5pbXBvcnQge2lzUGxhdGZvcm1TZXJ2ZXIsIE5nRm9yT2YsIE5nSWZ9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgUExBVEZPUk1fSUQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0b1NpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgICBUVUlfRE9DX0VYQU1QTEVfTUFSS0RPV05fQ09ERV9QUk9DRVNTT1IsXG4gICAgVFVJX0RPQ19JQ09OUyxcbn0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWRvYy90b2tlbnMnO1xuaW1wb3J0IHR5cGUge1R1aVJhd0xvYWRlckNvbnRlbnR9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1kb2MvdHlwZXMnO1xuaW1wb3J0IHt0dWlSYXdMb2FkfSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tZG9jL3V0aWxzJztcbmltcG9ydCB0eXBlIHtUdWlIYW5kbGVyfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3R5cGVzJztcbmltcG9ydCB7VHVpQnV0dG9ufSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQge1RVSV9DT1BZX1RFWFRTfSBmcm9tICdAdGFpZ2EtdWkva2l0L3Rva2Vucyc7XG5pbXBvcnQge0hpZ2hsaWdodH0gZnJvbSAnbmd4LWhpZ2hsaWdodGpzJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBtYXAsIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICd0dWktZG9jLWNvZGUnLFxuICAgIGltcG9ydHM6IFtDbGlwYm9hcmRNb2R1bGUsIEhpZ2hsaWdodCwgTmdGb3JPZiwgTmdJZiwgVHVpQnV0dG9uXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW5kZXguaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaW5kZXgubGVzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tzdHlsZS52aXNpYmlsaXR5XSc6ICdpc1NlcnZlciA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIicsXG4gICAgICAgICdbY2xhc3MuX2hhcy1maWxlbmFtZV0nOiAnaGFzRmlsZW5hbWUnLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aURvY0NvZGUge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvbnMgPSBpbmplY3QoVFVJX0RPQ19JQ09OUyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByYXdMb2FkZXIkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VHVpUmF3TG9hZGVyQ29udGVudD4oJycpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzU2VydmVyID0gaXNQbGF0Zm9ybVNlcnZlcihpbmplY3QoUExBVEZPUk1fSUQpKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBtYXJrZG93bkNvZGVQcm9jZXNzb3I6IFR1aUhhbmRsZXI8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4gPVxuICAgICAgICBpbmplY3QoVFVJX0RPQ19FWEFNUExFX01BUktET1dOX0NPREVfUFJPQ0VTU09SKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBjb3B5JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvcHlUZXh0ID0gdG9TaWduYWwoXG4gICAgICAgIGluamVjdChUVUlfQ09QWV9URVhUUykucGlwZShtYXAoKFtjb3B5XSkgPT4gY29weSkpLFxuICAgICk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaWNvbiA9IHRvU2lnbmFsKFxuICAgICAgICB0aGlzLmNvcHkkLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgICAgICB0aW1lcigyMDAwKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5pY29ucy5jb3B5KSxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMuaWNvbnMuY2hlY2spLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgICB7aW5pdGlhbFZhbHVlOiB0aGlzLmljb25zLmNvcHl9LFxuICAgICk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJvY2Vzc29yID0gdG9TaWduYWwoXG4gICAgICAgIHRoaXMucmF3TG9hZGVyJCQucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCh0dWlSYXdMb2FkKSxcbiAgICAgICAgICAgIG1hcCgodmFsdWU6IHN0cmluZykgPT4gdGhpcy5tYXJrZG93bkNvZGVQcm9jZXNzb3IodmFsdWUpKSxcbiAgICAgICAgKSxcbiAgICAgICAge2luaXRpYWxWYWx1ZTogW119LFxuICAgICk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWxlbmFtZSA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGNvZGUoY29kZTogVHVpUmF3TG9hZGVyQ29udGVudCkge1xuICAgICAgICB0aGlzLnJhd0xvYWRlciQkLm5leHQoY29kZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNGaWxlbmFtZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5maWxlbmFtZTtcbiAgICB9XG59XG4iLCI8cFxuICAgICpuZ0lmPVwiZmlsZW5hbWVcIlxuICAgIGNsYXNzPVwidC1oZWFkZXJcIlxuPlxuICAgIHt7IGZpbGVuYW1lIH19XG48L3A+XG48cHJlXG4gICAgKm5nRm9yPVwibGV0IGNvbnRlbnQgb2YgcHJvY2Vzc29yKClcIlxuICAgIGNsYXNzPVwidC1jb2RlXCJcbj5cbiAgICA8Y29kZSBbbGluZU51bWJlcnNdPVwidHJ1ZVwiIFtoaWdobGlnaHRdPVwiY29udGVudFwiPjwvY29kZT5cbiAgICA8ZGl2IGNsYXNzPVwidC1jb2RlLWFjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZS1ncmF5c2NhbGVcIlxuICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0LWNvcHktYnV0dG9uXCJcbiAgICAgICAgICAgIFtpY29uU3RhcnRdPVwiaWNvbigpXCJcbiAgICAgICAgICAgIFtjZGtDb3B5VG9DbGlwYm9hcmRdPVwiY29udGVudFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY29weSQubmV4dCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgY29weVRleHQoKX19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bmctY29udGVudCAvPlxuICAgIDwvZGl2PlxuPC9wcmU+XG4iXX0=