UNPKG

ag-grid-angular

Version:
114 lines 17.9 kB
import { Component, Injectable, ViewContainerRef, inject } from '@angular/core'; import { BaseComponentWrapper, _removeFromParent } from 'ag-grid-community'; import * as i0 from "@angular/core"; // To speed up the removal of custom components we create a number of shards to contain them. // Removing a single component calls a function within Angular called removeFromArray. // This is a lot faster if the array is smaller. export class AgComponentContainer { constructor() { this.vcr = inject(ViewContainerRef); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgComponentContainer, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AgComponentContainer, selector: "ag-component-container", ngImport: i0, template: '', isInline: true }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgComponentContainer, decorators: [{ type: Component, args: [{ selector: 'ag-component-container', template: '', }] }] }); const NUM_SHARDS = 16; let shardIdx = 0; function createComponentContainers(vcr) { const containerMap = new Map(); for (let i = 0; i < NUM_SHARDS; i++) { const container = vcr.createComponent(AgComponentContainer); containerMap.set(i, container); _removeFromParent(container.location.nativeElement); } return containerMap; } /** * These methods are called on a hot path for every row so we do not want to enter / exit NgZone each time. * Also these methods should not be used to update the UI, so we don't need to run them inside Angular. */ const runOutsideMethods = new Set(['doesFilterPass', 'isFilterActive']); export class AngularFrameworkComponentWrapper extends BaseComponentWrapper { setViewContainerRef(viewContainerRef, angularFrameworkOverrides) { this.viewContainerRef = viewContainerRef; this.angularFrameworkOverrides = angularFrameworkOverrides; } createWrapper(OriginalConstructor) { const angularFrameworkOverrides = this.angularFrameworkOverrides; const that = this; that.compShards ??= createComponentContainers(this.viewContainerRef); class DynamicAgNg2Component extends BaseGuiComponent { init(params) { angularFrameworkOverrides.runInsideAngular(() => { super.init(params); this._componentRef.changeDetectorRef.detectChanges(); }); } createComponent() { return that.createComponent(OriginalConstructor); } hasMethod(name) { return wrapper.getFrameworkComponentInstance()[name] != null; } callMethod(name, args) { const componentRef = this.getFrameworkComponentInstance(); const methodCall = componentRef[name]; if (runOutsideMethods.has(name)) { return methodCall.apply(componentRef, args); } return angularFrameworkOverrides.runInsideAngular(() => methodCall.apply(componentRef, args)); } addMethod(name, callback) { wrapper[name] = callback; } } const wrapper = new DynamicAgNg2Component(); return wrapper; } createComponent(componentType) { shardIdx = (shardIdx + 1) % NUM_SHARDS; const container = this.compShards.get(shardIdx); return container.instance.vcr.createComponent(componentType); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AngularFrameworkComponentWrapper, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AngularFrameworkComponentWrapper }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AngularFrameworkComponentWrapper, decorators: [{ type: Injectable }] }); class BaseGuiComponent { init(params) { this._params = params; this._componentRef = this.createComponent(); this._agAwareComponent = this._componentRef.instance; this._frameworkComponentInstance = this._componentRef.instance; this._eGui = this._componentRef.location.nativeElement; // Angular appends the component to the DOM, so remove it _removeFromParent(this._eGui); this._agAwareComponent.agInit(this._params); } getGui() { return this._eGui; } /** `getGui()` returns the `ng-component` element. This returns the actual root element. */ getRootElement() { const firstChild = this._eGui.firstChild; return firstChild; } destroy() { if (this._frameworkComponentInstance && typeof this._frameworkComponentInstance.destroy === 'function') { this._frameworkComponentInstance.destroy(); } this._componentRef?.destroy(); } getFrameworkComponentInstance() { return this._frameworkComponentInstance; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhckZyYW1ld29ya0NvbXBvbmVudFdyYXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hZy1ncmlkLWFuZ3VsYXIvc3JjL2xpYi9hbmd1bGFyRnJhbWV3b3JrQ29tcG9uZW50V3JhcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHaEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBSzVFLDZGQUE2RjtBQUM3RixzRkFBc0Y7QUFDdEYsZ0RBQWdEO0FBS2hELE1BQU0sT0FBTyxvQkFBb0I7SUFKakM7UUFLVyxRQUFHLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDekM7K0dBRlksb0JBQW9CO21HQUFwQixvQkFBb0IsOERBRm5CLEVBQUU7OzRGQUVILG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxRQUFRLEVBQUUsRUFBRTtpQkFDZjs7QUFJRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRWpCLFNBQVMseUJBQXlCLENBQUMsR0FBcUI7SUFDcEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQThDLENBQUM7SUFDM0UsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNqQyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDNUQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDL0IsaUJBQWlCLENBQUMsU0FBUyxDQUFD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QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO1FBQ3JELElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUMvRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUN2RCx5REFBeUQ7UUFDekQsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTSxNQUFNO1FBQ1QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCwyRkFBMkY7SUFDcEYsY0FBYztRQUNqQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUN6QyxPQUFPLFVBQXlCLENBQUM7SUFDckMsQ0FBQztJQUVNLE9BQU87UUFDVixJQUFJLElBQUksQ0FBQywyQkFBMkIsSUFBSSxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFO1lBQ3BHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM5QztRQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVNLDZCQUE2QjtRQUNoQyxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQztJQUM1QyxDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbXBvbmVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RhYmxlLCBWaWV3Q29udGFpbmVyUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHR5cGUgeyBGcmFtZXdvcmtDb21wb25lbnRXcmFwcGVyLCBJRmlsdGVyLCBXcmFwcGFibGVJbnRlcmZhY2UgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50V3JhcHBlciwgX3JlbW92ZUZyb21QYXJlbnQgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5cbmltcG9ydCB0eXBlIHsgQW5ndWxhckZyYW1ld29ya092ZXJyaWRlcyB9IGZyb20gJy4vYW5ndWxhckZyYW1ld29ya092ZXJyaWRlcyc7XG5pbXBvcnQgdHlwZSB7IEFnRnJhbWV3b3JrQ29tcG9uZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuLy8gVG8gc3BlZWQgdXAgdGhlIHJlbW92YWwgb2YgY3VzdG9tIGNvbXBvbmVudHMgd2UgY3JlYXRlIGEgbnVtYmVyIG9mIHNoYXJkcyB0byBjb250YWluIHRoZW0uXG4vLyBSZW1vdmluZyBhIHNpbmdsZSBjb21wb25lbnQgY2FsbHMgYSBmdW5jdGlvbiB3aXRoaW4gQW5ndWxhciBjYWxsZWQgcmVtb3ZlRnJvbUFycmF5LlxuLy8gVGhpcyBpcyBhIGxvdCBmYXN0ZXIgaWYgdGhlIGFycmF5IGlzIHNtYWxsZXIuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FnLWNvbXBvbmVudC1jb250YWluZXInLFxuICAgIHRlbXBsYXRlOiAnJyxcbn0pXG5leHBvcnQgY2xhc3MgQWdDb21wb25lbnRDb250YWluZXIge1xuICAgIHB1YmxpYyB2Y3IgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG59XG5jb25zdCBOVU1fU0hBUkRTID0gMTY7XG5sZXQgc2hhcmRJZHggPSAwO1xuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRDb250YWluZXJzKHZjcjogVmlld0NvbnRhaW5lclJlZik6IE1hcDxudW1iZXIsIENvbXBvbmVudFJlZjxBZ0NvbXBvbmVudENvbnRhaW5lcj4+IHtcbiAgICBjb25zdCBjb250YWluZXJNYXAgPSBuZXcgTWFwPG51bWJlciwgQ29tcG9uZW50UmVmPEFnQ29tcG9uZW50Q29udGFpbmVyPj4oKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE5VTV9TSEFSRFM7IGkrKykge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB2Y3IuY3JlYXRlQ29tcG9uZW50KEFnQ29tcG9uZW50Q29udGFpbmVyKTtcbiAgICAgICAgY29udGFpbmVyTWFwLnNldChpLCBjb250YWluZXIpO1xuICAgICAgICBfcmVtb3ZlRnJvbVBhcmVudChjb250YWluZXIubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXJNYXA7XG59XG5cbi8qKlxuICogVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIG9uIGEgaG90IHBhdGggZm9yIGV2ZXJ5IHJvdyBzbyB3ZSBkbyBub3Qgd2FudCB0byBlbnRlciAvIGV4aXQgTmdab25lIGVhY2ggdGltZS5cbiAqIEFsc28gdGhlc2UgbWV0aG9kcyBzaG91bGQgbm90IGJlIHVzZWQgdG8gdXBkYXRlIHRoZSBVSSwgc28gd2UgZG9uJ3QgbmVlZCB0byBydW4gdGhlbSBpbnNpZGUgQW5ndWxhci5cbiAqL1xuY29uc3QgcnVuT3V0c2lkZU1ldGhvZHMgPSBuZXcgU2V0PGtleW9mIElGaWx0ZXI+KFsnZG9lc0ZpbHRlclBhc3MnLCAnaXNGaWx0ZXJBY3RpdmUnXSk7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBbmd1bGFyRnJhbWV3b3JrQ29tcG9uZW50V3JhcHBlclxuICAgIGV4dGVuZHMgQmFzZUNvbXBvbmVudFdyYXBwZXI8V3JhcHBhYmxlSW50ZXJmYWNlPlxuICAgIGltcGxlbWVudHMgRnJhbWV3b3JrQ29tcG9uZW50V3JhcHBlclxue1xuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcbiAgICBwcml2YXRlIGFuZ3VsYXJGcmFtZXdvcmtPdmVycmlkZXM6IEFuZ3VsYXJGcmFtZXdvcmtPdmVycmlkZXM7XG4gICAgcHJpdmF0ZSBjb21wU2hhcmRzOiBNYXA8bnVtYmVyLCBDb21wb25lbnRSZWY8QWdDb21wb25lbnRDb250YWluZXI+PjtcblxuICAgIHB1YmxpYyBzZXRWaWV3Q29udGFpbmVyUmVmKFxuICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBhbmd1bGFyRnJhbWV3b3JrT3ZlcnJpZGVzOiBBbmd1bGFyRnJhbWV3b3JrT3ZlcnJpZGVzXG4gICAgKSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZiA9IHZpZXdDb250YWluZXJSZWY7XG4gICAgICAgIHRoaXMuYW5ndWxhckZyYW1ld29ya092ZXJyaWRlcyA9IGFuZ3VsYXJGcmFtZXdvcmtPdmVycmlkZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVdyYXBwZXIoT3JpZ2luYWxDb25zdHJ1Y3RvcjogeyBuZXcgKCk6IGFueSB9KTogV3JhcHBhYmxlSW50ZXJmYWNlIHtcbiAgICAgICAgY29uc3QgYW5ndWxhckZyYW1ld29ya092ZXJyaWRlcyA9IHRoaXMuYW5ndWxhckZyYW1ld29ya092ZXJyaWRlcztcbiAgICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgICAgIHRoYXQuY29tcFNoYXJkcyA/Pz0gY3JlYXRlQ29tcG9uZW50Q29udGFpbmVycyh0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuXG4gICAgICAgIGNsYXNzIER5bmFtaWNBZ05nMkNvbXBvbmVudFxuICAgICAgICAgICAgZXh0ZW5kcyBCYXNlR3VpQ29tcG9uZW50PGFueSwgQWdGcmFtZXdvcmtDb21wb25lbnQ8YW55Pj5cbiAgICAgICAgICAgIGltcGxlbWVudHMgV3JhcHBhYmxlSW50ZXJmYWNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG92ZXJyaWRlIGluaXQocGFyYW1zOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICBhbmd1bGFyRnJhbWV3b3JrT3ZlcnJpZGVzLnJ1bkluc2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdXBlci5pbml0KHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb3RlY3RlZCBjcmVhdGVDb21wb25lbnQoKTogQ29tcG9uZW50UmVmPEFnRnJhbWV3b3JrQ29tcG9uZW50PGFueT4+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhhdC5jcmVhdGVDb21wb25lbnQoT3JpZ2luYWxDb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhhc01ldGhvZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlci5nZXRGcmFtZXdvcmtDb21wb25lbnRJbnN0YW5jZSgpW25hbWVdICE9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhbGxNZXRob2QobmFtZTogc3RyaW5nLCBhcmdzOiBJQXJndW1lbnRzKTogdm9pZCB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5nZXRGcmFtZXdvcmtDb21wb25lbnRJbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZENhbGwgPSBjb21wb25lbnRSZWZbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAocnVuT3V0c2lkZU1ldGhvZHMuaGFzKG5hbWUgYXMgYW55KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kQ2FsbC5hcHBseShjb21wb25lbnRSZWYsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYW5ndWxhckZyYW1ld29ya092ZXJyaWRlcy5ydW5JbnNpZGVBbmd1bGFyKCgpID0+IG1ldGhvZENhbGwuYXBwbHkoY29tcG9uZW50UmVmLCBhcmdzKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFkZE1ldGhvZChuYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiAoLi4uYXJnczogYW55W10pID0+IGFueSk6IHZvaWQge1xuICAgICAgICAgICAgICAgICh3cmFwcGVyIGFzIGFueSlbbmFtZV0gPSBjYWxsYmFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3cmFwcGVyID0gbmV3IER5bmFtaWNBZ05nMkNvbXBvbmVudCgpO1xuICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlQ29tcG9uZW50PFQ+KGNvbXBvbmVudFR5cGU6IHsgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQgfSk6IENvbXBvbmVudFJlZjxUPiB7XG4gICAgICAgIHNoYXJkSWR4ID0gKHNoYXJkSWR4ICsgMSkgJSBOVU1fU0hBUkRTO1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbXBTaGFyZHMuZ2V0KHNoYXJkSWR4KSE7XG4gICAgICAgIHJldHVybiBjb250YWluZXIuaW5zdGFuY2UudmNyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlKTtcbiAgICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIEJhc2VHdWlDb21wb25lbnQ8UCwgVCBleHRlbmRzIEFnRnJhbWV3b3JrQ29tcG9uZW50PFA+PiB7XG4gICAgcHJvdGVjdGVkIF9wYXJhbXM6IFA7XG4gICAgcHJvdGVjdGVkIF9lR3VpOiBIVE1MRWxlbWVudDtcbiAgICBwcm90ZWN0ZWQgX2NvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFQ+O1xuICAgIHByb3RlY3RlZCBfYWdBd2FyZUNvbXBvbmVudDogVDtcbiAgICBwcm90ZWN0ZWQgX2ZyYW1ld29ya0NvbXBvbmVudEluc3RhbmNlOiBhbnk7IC8vIHRoZSB1c2VycyBjb21wb25lbnQgLSBmb3IgYWNjZXNzaW5nIG1ldGhvZHMgdGhleSBjcmVhdGVcblxuICAgIHByb3RlY3RlZCBpbml0KHBhcmFtczogUCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXM7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmID0gdGhpcy5jcmVhdGVDb21wb25lbnQoKTtcbiAgICAgICAgdGhpcy5fYWdBd2FyZUNvbXBvbmVudCA9IHRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICAgICAgdGhpcy5fZnJhbWV3b3JrQ29tcG9uZW50SW5zdGFuY2UgPSB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgICAgIHRoaXMuX2VHdWkgPSB0aGlzLl9jb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgLy8gQW5ndWxhciBhcHBlbmRzIHRoZSBjb21wb25lbnQgdG8gdGhlIERPTSwgc28gcmVtb3ZlIGl0XG4gICAgICAgIF9yZW1vdmVGcm9tUGFyZW50KHRoaXMuX2VHdWkpO1xuXG4gICAgICAgIHRoaXMuX2FnQXdhcmVDb21wb25lbnQuYWdJbml0KHRoaXMuX3BhcmFtcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEd1aSgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lR3VpO1xuICAgIH1cblxuICAgIC8qKiBgZ2V0R3VpKClgIHJldHVybnMgdGhlIGBuZy1jb21wb25lbnRgIGVsZW1lbnQuIFRoaXMgcmV0dXJucyB0aGUgYWN0dWFsIHJvb3QgZWxlbWVudC4gKi9cbiAgICBwdWJsaWMgZ2V0Um9vdEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5fZUd1aS5maXJzdENoaWxkO1xuICAgICAgICByZXR1cm4gZmlyc3RDaGlsZCBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1ld29ya0NvbXBvbmVudEluc3RhbmNlICYmIHR5cGVvZiB0aGlzLl9mcmFtZXdvcmtDb21wb25lbnRJbnN0YW5jZS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZXdvcmtDb21wb25lbnRJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmPy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZyYW1ld29ya0NvbXBvbmVudEluc3RhbmNlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mcmFtZXdvcmtDb21wb25lbnRJbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlQ29tcG9uZW50KCk6IENvbXBvbmVudFJlZjxUPjtcbn1cbiJdfQ==