@dotcms/angular
Version:
Official Angular Components library to render a dotCMS page.
100 lines • 14.1 kB
JavaScript
import { AsyncPipe } from '@angular/common';
import { ChangeDetectionStrategy, Component, DestroyRef, Input, inject } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { ActivatedRoute } from '@angular/router';
import { CLIENT_ACTIONS, DotCmsClient, initEditor, isInsideEditor, postMessageToEditor, updateNavigation } from '@dotcms/client';
import { PageContextService } from '../../services/dotcms-context/page-context.service';
import { RowComponent } from '../row/row.component';
import * as i0 from "@angular/core";
/**
* `DotcmsLayoutComponent` is a class that represents the layout for a DotCMS page.
* It includes a `pageAsset` property that represents the DotCMS page asset and a `components` property that represents the dynamic components for the page.
*
* @export
* @class DotcmsLayoutComponent
*/
export class DotcmsLayoutComponent {
constructor() {
this.route = inject(ActivatedRoute);
this.pageContextService = inject(PageContextService);
this.destroyRef$ = inject(DestroyRef);
this.pageAsset$ = this.pageContextService.currentPage$;
}
/**
* Represents the DotCMS page asset.
*
* @type {DotCMSPageAsset}
* @memberof DotcmsLayoutComponent
*/
set pageAsset(value) {
this._pageAsset = value;
if (!value.layout) {
console.warn('Warning: pageAsset does not have a `layout` property. Might be using an advaced template or your dotCMS instance not have a enterprise license.');
}
}
/**
* Returns the DotCMS page asset.
*
* @readonly
* @type {DotCMSPageAsset}
* @memberof DotcmsLayoutComponent
*/
get pageAsset() {
return this._pageAsset;
}
ngOnInit() {
this.pageContextService.setContext(this.pageAsset, this.components);
if (!isInsideEditor()) {
return;
}
this.client = DotCmsClient.instance;
this.route.url.pipe(takeUntilDestroyed(this.destroyRef$)).subscribe((urlSegments) => {
const pathname = '/' + urlSegments.join('/');
initEditor({ pathname });
updateNavigation(pathname || '/');
});
this.client.editor.on('changes', (data) => {
if (this.onReload) {
this.onReload();
return;
}
this.pageContextService.setPageAsset(data);
});
postMessageToEditor({ action: CLIENT_ACTIONS.CLIENT_READY, payload: this.editor });
}
ngOnDestroy() {
if (!isInsideEditor()) {
return;
}
this.client.editor.off('changes');
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: DotcmsLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.3", type: DotcmsLayoutComponent, isStandalone: true, selector: "dotcms-layout", inputs: { pageAsset: "pageAsset", components: "components", onReload: "onReload", editor: "editor" }, ngImport: i0, template: `
(pageAsset$ | async; as page) {
(row of page?.layout?.body?.rows; track $index) {
<dotcms-row [row]="row" />
}
}
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: RowComponent, selector: "dotcms-row", inputs: ["row"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: DotcmsLayoutComponent, decorators: [{
type: Component,
args: [{ selector: 'dotcms-layout', standalone: true, imports: [RowComponent, AsyncPipe], template: `
(pageAsset$ | async; as page) {
(row of page?.layout?.body?.rows; track $index) {
<dotcms-row [row]="row" />
}
}
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}\n"] }]
}], propDecorators: { pageAsset: [{
type: Input,
args: [{ required: true }]
}], components: [{
type: Input,
args: [{ required: true }]
}], onReload: [{
type: Input
}], editor: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90Y21zLWxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9hbmd1bGFyL3NyYy9saWIvbGF5b3V0L2RvdGNtcy1sYXlvdXQvZG90Y21zLWxheW91dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBRUwsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRCxPQUFPLEVBQ0gsY0FBYyxFQUNkLFlBQVksRUFFWixVQUFVLEVBQ1YsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDbkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN4RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBRXBEOzs7Ozs7R0FNRztBQWVILE1BQU0sT0FBTyxxQkFBcUI7SUFkbEM7UUEwRXFCLFVBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0IsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDaEQsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFL0IsZUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUM7S0FxQ3hFO0lBbEdHOzs7OztPQUtHO0lBQ0gsSUFDSSxTQUFTLENBQUMsS0FBc0I7UUFDaEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsSUFBSSxDQUNSLGlKQUFpSixDQUNwSixDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQXNDRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVwRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUNwQixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDaEYsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFN0MsVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN6QixnQkFBZ0IsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFFaEIsT0FBTztZQUNYLENBQUM7WUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLElBQXVCLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztRQUVILG1CQUFtQixDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7WUFDcEIsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEMsQ0FBQzs4R0FwR1EscUJBQXFCO2tHQUFyQixxQkFBcUIsK0tBVnBCOzs7Ozs7S0FNVCxnR0FQUyxZQUFZLG1FQUFFLFNBQVM7OzJGQVd4QixxQkFBcUI7a0JBZGpDLFNBQVM7K0JBQ0ksZUFBZSxjQUNiLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsWUFDeEI7Ozs7OztLQU1ULG1CQUVnQix1QkFBdUIsQ0FBQyxNQUFNOzhCQVkzQyxTQUFTO3NCQURaLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQTRCRSxVQUFVO3NCQUFwQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFRaEIsUUFBUTtzQkFBaEIsS0FBSztnQkFhRyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1xuICAgIENMSUVOVF9BQ1RJT05TLFxuICAgIERvdENtc0NsaWVudCxcbiAgICBFZGl0b3JDb25maWcsXG4gICAgaW5pdEVkaXRvcixcbiAgICBpc0luc2lkZUVkaXRvcixcbiAgICBwb3N0TWVzc2FnZVRvRWRpdG9yLFxuICAgIHVwZGF0ZU5hdmlnYXRpb25cbn0gZnJvbSAnQGRvdGNtcy9jbGllbnQnO1xuXG5pbXBvcnQgeyBEb3RDTVNQYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IERvdENNU1BhZ2VBc3NldCB9IGZyb20gJy4uLy4uL21vZGVscy9kb3RjbXMubW9kZWwnO1xuaW1wb3J0IHsgUGFnZUNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG90Y21zLWNvbnRleHQvcGFnZS1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm93Q29tcG9uZW50IH0gZnJvbSAnLi4vcm93L3Jvdy5jb21wb25lbnQnO1xuXG4vKipcbiAqIGBEb3RjbXNMYXlvdXRDb21wb25lbnRgIGlzIGEgY2xhc3MgdGhhdCByZXByZXNlbnRzIHRoZSBsYXlvdXQgZm9yIGEgRG90Q01TIHBhZ2UuXG4gKiAgSXQgaW5jbHVkZXMgYSBgcGFnZUFzc2V0YCBwcm9wZXJ0eSB0aGF0IHJlcHJlc2VudHMgdGhlIERvdENNUyBwYWdlIGFzc2V0IGFuZCBhIGBjb21wb25lbnRzYCBwcm9wZXJ0eSB0aGF0IHJlcHJlc2VudHMgdGhlIGR5bmFtaWMgY29tcG9uZW50cyBmb3IgdGhlIHBhZ2UuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIERvdGNtc0xheW91dENvbXBvbmVudFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2RvdGNtcy1sYXlvdXQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1Jvd0NvbXBvbmVudCwgQXN5bmNQaXBlXSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICBAaWYgKHBhZ2VBc3NldCQgfCBhc3luYzsgYXMgcGFnZSkge1xuICAgICAgICAgICAgQGZvciAocm93IG9mIHBhZ2U/LmxheW91dD8uYm9keT8ucm93czsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPGRvdGNtcy1yb3cgW3Jvd109XCJyb3dcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgYCxcbiAgICBzdHlsZVVybDogJy4vZG90Y21zLWxheW91dC5jb21wb25lbnQuY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEb3RjbXNMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHByaXZhdGUgX3BhZ2VBc3NldCE6IERvdENNU1BhZ2VBc3NldDtcblxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgdGhlIERvdENNUyBwYWdlIGFzc2V0LlxuICAgICAqXG4gICAgICogQHR5cGUge0RvdENNU1BhZ2VBc3NldH1cbiAgICAgKiBAbWVtYmVyb2YgRG90Y21zTGF5b3V0Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBzZXQgcGFnZUFzc2V0KHZhbHVlOiBEb3RDTVNQYWdlQXNzZXQpIHtcbiAgICAgICAgdGhpcy5fcGFnZUFzc2V0ID0gdmFsdWU7XG4gICAgICAgIGlmICghdmFsdWUubGF5b3V0KSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgJ1dhcm5pbmc6IHBhZ2VBc3NldCBkb2VzIG5vdCBoYXZlIGEgYGxheW91dGAgcHJvcGVydHkuIE1pZ2h0IGJlIHVzaW5nIGFuIGFkdmFjZWQgdGVtcGxhdGUgb3IgeW91ciBkb3RDTVMgaW5zdGFuY2Ugbm90IGhhdmUgYSBlbnRlcnByaXNlIGxpY2Vuc2UuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIERvdENNUyBwYWdlIGFzc2V0LlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge0RvdENNU1BhZ2VBc3NldH1cbiAgICAgKiBAbWVtYmVyb2YgRG90Y21zTGF5b3V0Q29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IHBhZ2VBc3NldCgpOiBEb3RDTVNQYWdlQXNzZXQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnZUFzc2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tcG9uZW50c2AgcHJvcGVydHkgaXMgYSByZWNvcmQgb2YgZHluYW1pYyBjb21wb25lbnRzIGZvciBlYWNoIENvbnRlbnRsZXQgb24gdGhlIHBhZ2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7RG90Q01TUGFnZUNvbXBvbmVudH1cbiAgICAgKiBAbWVtYmVyb2YgRG90Y21zTGF5b3V0Q29tcG9uZW50XG4gICAgICogQHJlcXVpcmVkXG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgY29tcG9uZW50cyE6IERvdENNU1BhZ2VDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYG9uUmVsb2FkYCBwcm9wZXJ0eSBpcyBhIGZ1bmN0aW9uIHRoYXQgcmVsb2FkcyB0aGUgcGFnZSBhZnRlciBjaGFuZ2VzIGFyZSBtYWRlLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIERvdGNtc0xheW91dENvbXBvbmVudFxuICAgICAqIEBkZXByZWNhdGVkIEluIGZ1dHVyZSBpbXBsZW1lbnRhdGlvbiB3ZSB3aWxsIGJlIGxpc3RlbmluZyBmb3IgdGhlIGNoYW5nZXMgZnJvbSB0aGUgZWRpdG9yIHRvIHVwZGF0ZSB0aGUgcGFnZSBzdGF0ZSBzbyByZWxvYWQgd2lsbCBub3QgYmUgbmVlZGVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIG9uUmVsb2FkITogKCkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHR5cGUge0RvdENNU0ZldGNoQ29uZmlnfVxuICAgICAqIEBtZW1iZXJvZiBEb3RDTVNQYWdlRWRpdG9yQ29uZmlnXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBjb25maWd1cmF0aW9uIGN1c3RvbSBwYXJhbXMgZm9yIGRhdGEgZmV0Y2hpbmcgb24gRWRpdCBNb2RlLlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPkV4YW1wbGUgd2l0aCBDdXN0b20gR3JhcGhRTCBxdWVyeTwvY2FwdGlvbj5cbiAgICAgKiA8ZG90Y21zLWxheW91dCBbZWRpdG9yXT1cInsgcXVlcnk6ICdxdWVyeSB7IC4uLiB9JyB9XCIvPlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+RXhhbXBsZSB1c2FnZSB3aXRoIEN1c3RvbSBQYWdlIEFQSSBwYXJhbWV0ZXJzPC9jYXB0aW9uPlxuICAgICAqIDxkb3RjbXMtbGF5b3V0IFtlZGl0b3JdPVwieyBwYXJhbXM6IHsgZGVwdGg6ICcyJyB9IH1cIi8+O1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGVkaXRvciE6IEVkaXRvckNvbmZpZztcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZUNvbnRleHRTZXJ2aWNlID0gaW5qZWN0KFBhZ2VDb250ZXh0U2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmJCA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBwcml2YXRlIGNsaWVudCE6IERvdENtc0NsaWVudDtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGFnZUFzc2V0JCA9IHRoaXMucGFnZUNvbnRleHRTZXJ2aWNlLmN1cnJlbnRQYWdlJDtcblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnBhZ2VDb250ZXh0U2VydmljZS5zZXRDb250ZXh0KHRoaXMucGFnZUFzc2V0LCB0aGlzLmNvbXBvbmVudHMpO1xuXG4gICAgICAgIGlmICghaXNJbnNpZGVFZGl0b3IoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGllbnQgPSBEb3RDbXNDbGllbnQuaW5zdGFuY2U7XG4gICAgICAgIHRoaXMucm91dGUudXJsLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiQpKS5zdWJzY3JpYmUoKHVybFNlZ21lbnRzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXRobmFtZSA9ICcvJyArIHVybFNlZ21lbnRzLmpvaW4oJy8nKTtcblxuICAgICAgICAgICAgaW5pdEVkaXRvcih7IHBhdGhuYW1lIH0pO1xuICAgICAgICAgICAgdXBkYXRlTmF2aWdhdGlvbihwYXRobmFtZSB8fCAnLycpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNsaWVudC5lZGl0b3Iub24oJ2NoYW5nZXMnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub25SZWxvYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUmVsb2FkKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucGFnZUNvbnRleHRTZXJ2aWNlLnNldFBhZ2VBc3NldChkYXRhIGFzIERvdENNU1BhZ2VBc3NldCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBvc3RNZXNzYWdlVG9FZGl0b3IoeyBhY3Rpb246IENMSUVOVF9BQ1RJT05TLkNMSUVOVF9SRUFEWSwgcGF5bG9hZDogdGhpcy5lZGl0b3IgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICghaXNJbnNpZGVFZGl0b3IoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGllbnQuZWRpdG9yLm9mZignY2hhbmdlcycpO1xuICAgIH1cbn1cbiJdfQ==