UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

208 lines 23.4 kB
import { __decorate } from "tslib"; /** * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import { ChangeDetectionStrategy, Component, Input, ViewChild, ViewEncapsulation } from '@angular/core'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { WithConfig } from 'ng-zorro-antd/core/config'; import { warn } from 'ng-zorro-antd/core/logger'; import { InputBoolean } from 'ng-zorro-antd/core/util'; import { NzImageDirective } from 'ng-zorro-antd/image'; import { defaultImageSrcLoader } from './image-loader'; import { isFixedSize } from './utils'; import * as i0 from "@angular/core"; import * as i1 from "ng-zorro-antd/core/config"; import * as i2 from "ng-zorro-antd/core/services"; export const NZ_CONFIG_MODULE_NAME = 'imageExperimental'; const sizeBreakpoints = [16, 32, 48, 64, 96, 128, 256, 384, 640, 750, 828, 1080, 1200, 1920, 2048, 3840]; export class NzImageViewComponent { constructor(cdr, nzConfigService, imagePreloadService) { this.cdr = cdr; this.nzConfigService = nzConfigService; this.imagePreloadService = imagePreloadService; this._nzModuleName = NZ_CONFIG_MODULE_NAME; this.nzSrc = ''; this.nzAlt = ''; this.nzWidth = 'auto'; this.nzHeight = 'auto'; this.nzSrcLoader = defaultImageSrcLoader; this.nzAutoSrcset = false; this.nzPriority = false; this.nzFallback = null; this.nzPlaceholder = null; this.nzDisablePreview = false; this.src = ''; this.width = 'auto'; this.height = 'auto'; this.srcset = ''; this.destroy$ = new Subject(); this.reloadDisposeHandler = () => void 0; this.nzConfigService .getConfigChangeEventForComponent(NZ_CONFIG_MODULE_NAME) .pipe(takeUntil(this.destroy$)) .subscribe(() => { this.composeImageAttrs(); this.cdr.markForCheck(); }); } ngOnInit() { if (this.nzPriority) { this.preload(); } } ngOnChanges(changes) { const { nzLoader, nzSrc, nzOptimize } = changes; if (nzSrc || nzLoader || nzOptimize) { this.composeImageAttrs(); } } ngOnDestroy() { this.reloadDisposeHandler(); this.destroy$.next(); this.destroy$.complete(); } preload() { this.reloadDisposeHandler = this.imagePreloadService.addPreload({ src: this.src, srcset: this.srcset }); } optimizable() { if (this.nzAutoSrcset) { if (!isFixedSize(this.nzWidth) || !isFixedSize(this.nzHeight)) { warn(`When using "nzAutoSrcset" you should use a fixed size width and height, for more information please refer to CLS (https://web.dev/cls/) performance metrics`); return false; } if (this.nzSrc.endsWith('.svg')) { warn(`SVG does not need to be optimized`); return false; } if (this.nzSrc.startsWith('data:')) { warn(`Data URLs cannot be optimized`); return false; } return true; } return false; } composeImageAttrs() { const loader = this.getLoader(); if (!this.optimizable()) { this.src = loader({ src: this.nzSrc }); this.width = this.nzWidth; this.height = this.nzHeight; return; } this.width = typeof this.nzWidth === 'number' ? this.nzWidth : parseInt(this.nzWidth, 10); this.height = typeof this.nzHeight === 'number' ? this.nzHeight : parseInt(this.nzHeight, 10); const widths = this.convertWidths(this.width, sizeBreakpoints); this.src = loader({ src: this.nzSrc, width: widths[0] }); this.srcset = widths .map((w, i) => `${loader({ src: this.nzSrc, width: w })} ${i + 1}x`) .join(', '); } getLoader() { return this.nzSrcLoader || defaultImageSrcLoader; } convertWidths(width, optimizeSizes) { const allSizes = [...optimizeSizes].sort((a, b) => a - b); return [ ...new Set( // 2x scale is sufficient // https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/capping-image-fidelity-on-ultra-high-resolution-devices.html [width, width * 2].map(w => allSizes.find(p => p >= w) || w)) ]; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: NzImageViewComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NzConfigService }, { token: i2.ImagePreloadService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: NzImageViewComponent, isStandalone: true, selector: "nz-image", inputs: { nzSrc: "nzSrc", nzAlt: "nzAlt", nzWidth: "nzWidth", nzHeight: "nzHeight", nzSrcLoader: "nzSrcLoader", nzAutoSrcset: "nzAutoSrcset", nzPriority: "nzPriority", nzFallback: "nzFallback", nzPlaceholder: "nzPlaceholder", nzDisablePreview: "nzDisablePreview" }, viewQueries: [{ propertyName: "imageRef", first: true, predicate: ["imageRef"], descendants: true }], exportAs: ["nzImage"], usesOnChanges: true, ngImport: i0, template: ` <img #imageRef nz-image [nzSrc]="src" [nzSrcset]="srcset" [nzDisablePreview]="nzDisablePreview" [nzFallback]="nzFallback" [nzPlaceholder]="nzPlaceholder" [attr.width]="width" [attr.height]="height" [attr.srcset]="srcset" [attr.alt]="nzAlt || null" /> `, isInline: true, dependencies: [{ kind: "directive", type: NzImageDirective, selector: "img[nz-image]", inputs: ["nzSrc", "nzSrcset", "nzDisablePreview", "nzFallback", "nzPlaceholder", "nzScaleStep"], exportAs: ["nzImage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); } } __decorate([ WithConfig() ], NzImageViewComponent.prototype, "nzSrcLoader", void 0); __decorate([ InputBoolean(), WithConfig() ], NzImageViewComponent.prototype, "nzAutoSrcset", void 0); __decorate([ InputBoolean() ], NzImageViewComponent.prototype, "nzPriority", void 0); __decorate([ WithConfig() ], NzImageViewComponent.prototype, "nzFallback", void 0); __decorate([ WithConfig() ], NzImageViewComponent.prototype, "nzPlaceholder", void 0); __decorate([ InputBoolean(), WithConfig() ], NzImageViewComponent.prototype, "nzDisablePreview", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: NzImageViewComponent, decorators: [{ type: Component, args: [{ selector: 'nz-image', exportAs: 'nzImage', template: ` <img #imageRef nz-image [nzSrc]="src" [nzSrcset]="srcset" [nzDisablePreview]="nzDisablePreview" [nzFallback]="nzFallback" [nzPlaceholder]="nzPlaceholder" [attr.width]="width" [attr.height]="height" [attr.srcset]="srcset" [attr.alt]="nzAlt || null" /> `, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [NzImageDirective], standalone: true }] }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.NzConfigService }, { type: i2.ImagePreloadService }], propDecorators: { nzSrc: [{ type: Input }], nzAlt: [{ type: Input }], nzWidth: [{ type: Input }], nzHeight: [{ type: Input }], nzSrcLoader: [{ type: Input }], nzAutoSrcset: [{ type: Input }], nzPriority: [{ type: Input }], nzFallback: [{ type: Input }], nzPlaceholder: [{ type: Input }], nzDisablePreview: [{ type: Input }], imageRef: [{ type: ViewChild, args: ['imageRef'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29tcG9uZW50cy9leHBlcmltZW50YWwvaW1hZ2UvaW1hZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxLQUFLLEVBS0wsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQWdDLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7OztBQUV0QyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBZ0IsbUJBQW1CLENBQUM7QUFDdEUsTUFBTSxlQUFlLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQTBCekcsTUFBTSxPQUFPLG9CQUFvQjtJQTRCL0IsWUFDVSxHQUFzQixFQUN2QixlQUFnQyxFQUMvQixt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RUFBRTtJQUFFLFVBQVUsRUFBRTs4REFBbUM7MkZBZjlELG9CQUFvQjtrQkF4QmhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFFBQVEsRUFBRSxTQUFTO29CQUNuQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7O0dBY1Q7b0JBQ0QsbUJBQW1CLEVBQUUsS0FBSztvQkFDMUIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDM0IsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO3NKQU9VLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ2lCLFdBQVc7c0JBQWpDLEtBQUs7Z0JBQ2lDLFlBQVk7c0JBQWxELEtBQUs7Z0JBQ21CLFVBQVU7c0JBQWxDLEtBQUs7Z0JBQ2lCLFVBQVU7c0JBQWhDLEtBQUs7Z0JBQ2lCLGFBQWE7c0JBQW5DLEtBQUs7Z0JBQ2lDLGdCQUFnQjtzQkFBdEQsS0FBSztnQkFDaUIsUUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOekNvbmZpZ0tleSwgTnpDb25maWdTZXJ2aWNlLCBXaXRoQ29uZmlnIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL2NvbmZpZyc7XG5pbXBvcnQgeyB3YXJuIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL2xvZ2dlcic7XG5pbXBvcnQgeyBJbWFnZVByZWxvYWRTZXJ2aWNlLCBQcmVsb2FkRGlzcG9zZUhhbmRsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgSW5wdXRCb29sZWFuIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3V0aWwnO1xuaW1wb3J0IHsgTnpJbWFnZURpcmVjdGl2ZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaW1hZ2UnO1xuXG5pbXBvcnQgeyBkZWZhdWx0SW1hZ2VTcmNMb2FkZXIgfSBmcm9tICcuL2ltYWdlLWxvYWRlcic7XG5pbXBvcnQgeyBOekltYWdlU3JjTG9hZGVyIH0gZnJvbSAnLi90eXBpbmdzJztcbmltcG9ydCB7IGlzRml4ZWRTaXplIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBOWl9DT05GSUdfTU9EVUxFX05BTUU6IE56Q29uZmlnS2V5ID0gJ2ltYWdlRXhwZXJpbWVudGFsJztcbmNvbnN0IHNpemVCcmVha3BvaW50cyA9IFsxNiwgMzIsIDQ4LCA2NCwgOTYsIDEyOCwgMjU2LCAzODQsIDY0MCwgNzUwLCA4MjgsIDEwODAsIDEyMDAsIDE5MjAsIDIwNDgsIDM4NDBdO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduei1pbWFnZScsXG4gIGV4cG9ydEFzOiAnbnpJbWFnZScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGltZ1xuICAgICAgI2ltYWdlUmVmXG4gICAgICBuei1pbWFnZVxuICAgICAgW256U3JjXT1cInNyY1wiXG4gICAgICBbbnpTcmNzZXRdPVwic3Jjc2V0XCJcbiAgICAgIFtuekRpc2FibGVQcmV2aWV3XT1cIm56RGlzYWJsZVByZXZpZXdcIlxuICAgICAgW256RmFsbGJhY2tdPVwibnpGYWxsYmFja1wiXG4gICAgICBbbnpQbGFjZWhvbGRlcl09XCJuelBsYWNlaG9sZGVyXCJcbiAgICAgIFthdHRyLndpZHRoXT1cIndpZHRoXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJoZWlnaHRcIlxuICAgICAgW2F0dHIuc3Jjc2V0XT1cInNyY3NldFwiXG4gICAgICBbYXR0ci5hbHRdPVwibnpBbHQgfHwgbnVsbFwiXG4gICAgLz5cbiAgYCxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbTnpJbWFnZURpcmVjdGl2ZV0sXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgTnpJbWFnZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgcmVhZG9ubHkgX256TW9kdWxlTmFtZTogTnpDb25maWdLZXkgPSBOWl9DT05GSUdfTU9EVUxFX05BTUU7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9uekF1dG9TcmNzZXQ6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX256UHJpb3JpdHk6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX256RGlzYWJsZVByZXZpZXc6IEJvb2xlYW5JbnB1dDtcblxuICBASW5wdXQoKSBuelNyYzogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIG56QWx0OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgbnpXaWR0aDogc3RyaW5nIHwgbnVtYmVyID0gJ2F1dG8nO1xuICBASW5wdXQoKSBuekhlaWdodDogc3RyaW5nIHwgbnVtYmVyID0gJ2F1dG8nO1xuICBASW5wdXQoKSBAV2l0aENvbmZpZygpIG56U3JjTG9hZGVyOiBOekltYWdlU3JjTG9hZGVyID0gZGVmYXVsdEltYWdlU3JjTG9hZGVyO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgQFdpdGhDb25maWcoKSBuekF1dG9TcmNzZXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIG56UHJpb3JpdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgQFdpdGhDb25maWcoKSBuekZhbGxiYWNrOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgQFdpdGhDb25maWcoKSBuelBsYWNlaG9sZGVyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIEBXaXRoQ29uZmlnKCkgbnpEaXNhYmxlUHJldmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBAVmlld0NoaWxkKCdpbWFnZVJlZicpIGltYWdlUmVmITogRWxlbWVudFJlZjxIVE1MSW1hZ2VFbGVtZW50PjtcblxuICBzcmMgPSAnJztcblxuICB3aWR0aDogc3RyaW5nIHwgbnVtYmVyID0gJ2F1dG8nO1xuICBoZWlnaHQ6IHN0cmluZyB8IG51bWJlciA9ICdhdXRvJztcbiAgc3Jjc2V0ID0gJyc7XG4gIGludGVybmFsSW1hZ2UhOiBIVE1MSW1hZ2VFbGVtZW50O1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJlbG9hZERpc3Bvc2VIYW5kbGVyOiBQcmVsb2FkRGlzcG9zZUhhbmRsZSA9ICgpID0+IHZvaWQgMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIG56Q29uZmlnU2VydmljZTogTnpDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW1hZ2VQcmVsb2FkU2VydmljZTogSW1hZ2VQcmVsb2FkU2VydmljZVxuICApIHtcbiAgICB0aGlzLm56Q29uZmlnU2VydmljZVxuICAgICAgLmdldENvbmZpZ0NoYW5nZUV2ZW50Rm9yQ29tcG9uZW50KE5aX0NPTkZJR19NT0RVTEVfTkFNRSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbXBvc2VJbWFnZUF0dHJzKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uelByaW9yaXR5KSB7XG4gICAgICB0aGlzLnByZWxvYWQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgeyBuekxvYWRlciwgbnpTcmMsIG56T3B0aW1pemUgfSA9IGNoYW5nZXM7XG5cbiAgICBpZiAobnpTcmMgfHwgbnpMb2FkZXIgfHwgbnpPcHRpbWl6ZSkge1xuICAgICAgdGhpcy5jb21wb3NlSW1hZ2VBdHRycygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucmVsb2FkRGlzcG9zZUhhbmRsZXIoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHByZWxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWxvYWREaXNwb3NlSGFuZGxlciA9IHRoaXMuaW1hZ2VQcmVsb2FkU2VydmljZS5hZGRQcmVsb2FkKHtcbiAgICAgIHNyYzogdGhpcy5zcmMsXG4gICAgICBzcmNzZXQ6IHRoaXMuc3Jjc2V0XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wdGltaXphYmxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm56QXV0b1NyY3NldCkge1xuICAgICAgaWYgKCFpc0ZpeGVkU2l6ZSh0aGlzLm56V2lkdGgpIHx8ICFpc0ZpeGVkU2l6ZSh0aGlzLm56SGVpZ2h0KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIGBXaGVuIHVzaW5nIFwibnpBdXRvU3Jjc2V0XCIgeW91IHNob3VsZCB1c2UgYSBmaXhlZCBzaXplIHdpZHRoIGFuZCBoZWlnaHQsIGZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSByZWZlciB0byBDTFMgKGh0dHBzOi8vd2ViLmRldi9jbHMvKSBwZXJmb3JtYW5jZSBtZXRyaWNzYFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5uelNyYy5lbmRzV2l0aCgnLnN2ZycpKSB7XG4gICAgICAgIHdhcm4oYFNWRyBkb2VzIG5vdCBuZWVkIHRvIGJlIG9wdGltaXplZGApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5uelNyYy5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgICAgIHdhcm4oYERhdGEgVVJMcyBjYW5ub3QgYmUgb3B0aW1pemVkYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbXBvc2VJbWFnZUF0dHJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxvYWRlciA9IHRoaXMuZ2V0TG9hZGVyKCk7XG4gICAgaWYgKCF0aGlzLm9wdGltaXphYmxlKCkpIHtcbiAgICAgIHRoaXMuc3JjID0gbG9hZGVyKHsgc3JjOiB0aGlzLm56U3JjIH0pO1xuICAgICAgdGhpcy53aWR0aCA9IHRoaXMubnpXaWR0aDtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5uekhlaWdodDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy53aWR0aCA9IHR5cGVvZiB0aGlzLm56V2lkdGggPT09ICdudW1iZXInID8gdGhpcy5ueldpZHRoIDogcGFyc2VJbnQodGhpcy5ueldpZHRoLCAxMCk7XG4gICAgdGhpcy5oZWlnaHQgPSB0eXBlb2YgdGhpcy5uekhlaWdodCA9PT0gJ251bWJlcicgPyB0aGlzLm56SGVpZ2h0IDogcGFyc2VJbnQodGhpcy5uekhlaWdodCwgMTApO1xuICAgIGNvbnN0IHdpZHRocyA9IHRoaXMuY29udmVydFdpZHRocyh0aGlzLndpZHRoLCBzaXplQnJlYWtwb2ludHMpO1xuICAgIHRoaXMuc3JjID0gbG9hZGVyKHsgc3JjOiB0aGlzLm56U3JjLCB3aWR0aDogd2lkdGhzWzBdIH0pO1xuICAgIHRoaXMuc3Jjc2V0ID0gd2lkdGhzXG4gICAgICAubWFwKFxuICAgICAgICAodywgaSkgPT5cbiAgICAgICAgICBgJHtsb2FkZXIoe1xuICAgICAgICAgICAgc3JjOiB0aGlzLm56U3JjLFxuICAgICAgICAgICAgd2lkdGg6IHdcbiAgICAgICAgICB9KX0gJHtpICsgMX14YFxuICAgICAgKVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cblxuICBwcml2YXRlIGdldExvYWRlcigpOiBOekltYWdlU3JjTG9hZGVyIHtcbiAgICByZXR1cm4gdGhpcy5uelNyY0xvYWRlciB8fCBkZWZhdWx0SW1hZ2VTcmNMb2FkZXI7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRXaWR0aHMod2lkdGg6IG51bWJlciwgb3B0aW1pemVTaXplczogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgY29uc3QgYWxsU2l6ZXMgPSBbLi4ub3B0aW1pemVTaXplc10uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIHJldHVybiBbXG4gICAgICAuLi5uZXcgU2V0KFxuICAgICAgICAvLyAyeCBzY2FsZSBpcyBzdWZmaWNpZW50XG4gICAgICAgIC8vIGh0dHBzOi8vYmxvZy50d2l0dGVyLmNvbS9lbmdpbmVlcmluZy9lbl91cy90b3BpY3MvaW5mcmFzdHJ1Y3R1cmUvMjAxOS9jYXBwaW5nLWltYWdlLWZpZGVsaXR5LW9uLXVsdHJhLWhpZ2gtcmVzb2x1dGlvbi1kZXZpY2VzLmh0bWxcbiAgICAgICAgW3dpZHRoLCB3aWR0aCAqIDJdLm1hcCh3ID0+IGFsbFNpemVzLmZpbmQocCA9PiBwID49IHcpIHx8IHcpXG4gICAgICApXG4gICAgXTtcbiAgfVxufVxuIl19