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: "18.2.14", ngImport: i0, type: AgComponentContainer, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AgComponentContainer, selector: "ag-component-container", ngImport: i0, template: '', isInline: true }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", 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: "18.2.14", ngImport: i0, type: AngularFrameworkComponentWrapper, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularFrameworkComponentWrapper }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhckZyYW1ld29ya0NvbXBvbmVudFdyYXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hZy1ncmlkLWFuZ3VsYXIvc3JjL2xpYi9hbmd1bGFyRnJhbWV3b3JrQ29tcG9uZW50V3JhcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHaEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBSzVFLDZGQUE2RjtBQUM3RixzRkFBc0Y7QUFDdEYsZ0RBQWdEO0FBS2hELE1BQU0sT0FBTyxvQkFBb0I7SUFKakM7UUFLVyxRQUFHLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDekM7K0dBRlksb0JBQW9CO21HQUFwQixvQkFBb0IsOERBRm5CLEVBQUU7OzRGQUVILG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxRQUFRLEVBQUUsRUFBRTtpQkFDZjs7QUFJRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRWpCLFNBQVMseUJBQXlCLENBQUMsR0FBcUI7SUFDcEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQThDLENBQUM7SUFDM0UsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUM1RCxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvQixpQkFBaUIsQ0FBQyxTQUFT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QUM1QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFDckQsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO1FBQy9ELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQ3ZELHlEQUF5RDtRQUN6RCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFOUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLE1BQU07UUFDVCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELDJGQUEyRjtJQUNwRixjQUFjO1FBQ2pCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ3pDLE9BQU8sVUFBeUIsQ0FBQztJQUNyQyxDQUFDO0lBRU0sT0FBTztRQUNWLElBQUksSUFBSSxDQUFDLDJCQUEyQixJQUFJLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0MsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVNLDZCQUE2QjtRQUNoQyxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQztJQUM1QyxDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbXBvbmVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RhYmxlLCBWaWV3Q29udGFpbmVyUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHR5cGUgeyBGcmFtZXdvcmtDb21wb25lbnRXcmFwcGVyLCBJRmlsdGVyLCBXcmFwcGFibGVJbnRlcmZhY2UgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50V3JhcHBlciwgX3JlbW92ZUZyb21QYXJlbnQgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5cbmltcG9ydCB0eXBlIHsgQW5ndWxhckZyYW1ld29ya092ZXJyaWRlcyB9IGZyb20gJy4vYW5ndWxhckZyYW1ld29ya092ZXJyaWRlcyc7XG5pbXBvcnQgdHlwZSB7IEFnRnJhbWV3b3JrQ29tcG9uZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuLy8gVG8gc3BlZWQgdXAgdGhlIHJlbW92YWwgb2YgY3VzdG9tIGNvbXBvbmVudHMgd2UgY3JlYXRlIGEgbnVtYmVyIG9mIHNoYXJkcyB0byBjb250YWluIHRoZW0uXG4vLyBSZW1vdmluZyBhIHNpbmdsZSBjb21wb25lbnQgY2FsbHMgYSBmdW5jdGlvbiB3aXRoaW4gQW5ndWxhciBjYWxsZWQgcmVtb3ZlRnJvbUFycmF5LlxuLy8gVGhpcyBpcyBhIGxvdCBmYXN0ZXIgaWYgdGhlIGFycmF5IGlzIHNtYWxsZXIuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FnLWNvbXBvbmVudC1jb250YWluZXInLFxuICAgIHRlbXBsYXRlOiAnJyxcbn0pXG5leHBvcnQgY2xhc3MgQWdDb21wb25lbnRDb250YWluZXIge1xuICAgIHB1YmxpYyB2Y3IgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG59XG5jb25zdCBOVU1fU0hBUkRTID0gMTY7XG5sZXQgc2hhcmRJZHggPSAwO1xuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRDb250YWluZXJzKHZjcjogVmlld0NvbnRhaW5lclJlZik6IE1hcDxudW1iZXIsIENvbXBvbmVudFJlZjxBZ0NvbXBvbmVudENvbnRhaW5lcj4+IHtcbiAgICBjb25zdCBjb250YWluZXJNYXAgPSBuZXcgTWFwPG51bWJlciwgQ29tcG9uZW50UmVmPEFnQ29tcG9uZW50Q29udGFpbmVyPj4oKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE5VTV9TSEFSRFM7IGkrKykge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB2Y3IuY3JlYXRlQ29tcG9uZW50KEFnQ29tcG9uZW50Q29udGFpbmVyKTtcbiAgICAgICAgY29udGFpbmVyTWFwLnNldChpLCBjb250YWluZXIpO1xuICAgICAgICBfcmVtb3ZlRnJvbVBhcmVudChjb250YWluZXIubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXJNYXA7XG59XG5cbi8qKlxuICogVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIG9uIGEgaG90IHBhdGggZm9yIGV2ZXJ5IHJvdyBzbyB3ZSBkbyBub3Qgd2FudCB0byBlbnRlciAvIGV4aXQgTmdab25lIGVhY2ggdGltZS5cbiAqIEFsc28gdGhlc2UgbWV0aG9kcyBzaG91bGQgbm90IGJlIHVzZWQgdG8gdXBkYXRlIHRoZSBVSSwgc28gd2UgZG9uJ3QgbmVlZCB0byBydW4gdGhlbSBpbnNpZGUgQW5ndWxhci5cbiAqL1xuY29uc3QgcnVuT3V0c2lkZU1ldGhvZHMgPSBuZXcgU2V0PGtleW9mIElGaWx0ZXI+KFsnZG9lc0ZpbHRlclBhc3MnLCAnaXNGaWx0ZXJBY3RpdmUnXSk7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBbmd1bGFyRnJhbWV3b3JrQ29tcG9uZW50V3JhcHBlclxuICAgIGV4dGVuZHMgQmFzZUNvbXBvbmVudFdyYXBwZXI8V3JhcHBhYmxlSW50ZXJmYWNlPlxuICAgIGltcGxlbWVudHMgRnJhbWV3b3JrQ29tcG9uZW50V3JhcHBlclxue1xuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcbiAgICBwcml2YXRlIGFuZ3VsYXJGcmFtZXdvcmtPdmVycmlkZXM6IEFuZ3VsYXJGcmFtZXdvcmtPdmVycmlkZXM7XG4gICAgcHJpdmF0ZSBjb21wU2hhcmRzOiBNYXA8bnVtYmVyLCBDb21wb25lbnRSZWY8QWdDb21wb25lbnRDb250YWluZXI+PjtcblxuICAgIHB1YmxpYyBzZXRWaWV3Q29udGFpbmVyUmVmKFxuICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBhbmd1bGFyRnJhbWV3b3JrT3ZlcnJpZGVzOiBBbmd1bGFyRnJhbWV3b3JrT3ZlcnJpZGVzXG4gICAgKSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZiA9IHZpZXdDb250YWluZXJSZWY7XG4gICAgICAgIHRoaXMuYW5ndWxhckZyYW1ld29ya092ZXJyaWRlcyA9IGFuZ3VsYXJGcmFtZXdvcmtPdmVycmlkZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVdyYXBwZXIoT3JpZ2luYWxDb25zdHJ1Y3RvcjogeyBuZXcgKCk6IGFueSB9KTogV3JhcHBhYmxlSW50ZXJmYWNlIHtcbiAgICAgICAgY29uc3QgYW5ndWxhckZyYW1ld29ya092ZXJyaWRlcyA9IHRoaXMuYW5ndWxhckZyYW1ld29ya092ZXJyaWRlcztcbiAgICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgICAgIHRoYXQuY29tcFNoYXJkcyA/Pz0gY3JlYXRlQ29tcG9uZW50Q29udGFpbmVycyh0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuXG4gICAgICAgIGNsYXNzIER5bmFtaWNBZ05nMkNvbXBvbmVudFxuICAgICAgICAgICAgZXh0ZW5kcyBCYXNlR3VpQ29tcG9uZW50PGFueSwgQWdGcmFtZXdvcmtDb21wb25lbnQ8YW55Pj5cbiAgICAgICAgICAgIGltcGxlbWVudHMgV3JhcHBhYmxlSW50ZXJmYWNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG92ZXJyaWRlIGluaXQocGFyYW1zOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICBhbmd1bGFyRnJhbWV3b3JrT3ZlcnJpZGVzLnJ1bkluc2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdXBlci5pbml0KHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb3RlY3RlZCBjcmVhdGVDb21wb25lbnQoKTogQ29tcG9uZW50UmVmPEFnRnJhbWV3b3JrQ29tcG9uZW50PGFueT4+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhhdC5jcmVhdGVDb21wb25lbnQoT3JpZ2luYWxDb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhhc01ldGhvZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlci5nZXRGcmFtZXdvcmtDb21wb25lbnRJbnN0YW5jZSgpW25hbWVdICE9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhbGxNZXRob2QobmFtZTogc3RyaW5nLCBhcmdzOiBJQXJndW1lbnRzKTogdm9pZCB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5nZXRGcmFtZXdvcmtDb21wb25lbnRJbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZENhbGwgPSBjb21wb25lbnRSZWZbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAocnVuT3V0c2lkZU1ldGhvZHMuaGFzKG5hbWUgYXMgYW55KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kQ2FsbC5hcHBseShjb21wb25lbnRSZWYsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYW5ndWxhckZyYW1ld29ya092ZXJyaWRlcy5ydW5JbnNpZGVBbmd1bGFyKCgpID0+IG1ldGhvZENhbGwuYXBwbHkoY29tcG9uZW50UmVmLCBhcmdzKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFkZE1ldGhvZChuYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiAoLi4uYXJnczogYW55W10pID0+IGFueSk6IHZvaWQge1xuICAgICAgICAgICAgICAgICh3cmFwcGVyIGFzIGFueSlbbmFtZV0gPSBjYWxsYmFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3cmFwcGVyID0gbmV3IER5bmFtaWNBZ05nMkNvbXBvbmVudCgpO1xuICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlQ29tcG9uZW50PFQ+KGNvbXBvbmVudFR5cGU6IHsgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQgfSk6IENvbXBvbmVudFJlZjxUPiB7XG4gICAgICAgIHNoYXJkSWR4ID0gKHNoYXJkSWR4ICsgMSkgJSBOVU1fU0hBUkRTO1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbXBTaGFyZHMuZ2V0KHNoYXJkSWR4KSE7XG4gICAgICAgIHJldHVybiBjb250YWluZXIuaW5zdGFuY2UudmNyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlKTtcbiAgICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIEJhc2VHdWlDb21wb25lbnQ8UCwgVCBleHRlbmRzIEFnRnJhbWV3b3JrQ29tcG9uZW50PFA+PiB7XG4gICAgcHJvdGVjdGVkIF9wYXJhbXM6IFA7XG4gICAgcHJvdGVjdGVkIF9lR3VpOiBIVE1MRWxlbWVudDtcbiAgICBwcm90ZWN0ZWQgX2NvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFQ+O1xuICAgIHByb3RlY3RlZCBfYWdBd2FyZUNvbXBvbmVudDogVDtcbiAgICBwcm90ZWN0ZWQgX2ZyYW1ld29ya0NvbXBvbmVudEluc3RhbmNlOiBhbnk7IC8vIHRoZSB1c2VycyBjb21wb25lbnQgLSBmb3IgYWNjZXNzaW5nIG1ldGhvZHMgdGhleSBjcmVhdGVcblxuICAgIHByb3RlY3RlZCBpbml0KHBhcmFtczogUCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXM7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmID0gdGhpcy5jcmVhdGVDb21wb25lbnQoKTtcbiAgICAgICAgdGhpcy5fYWdBd2FyZUNvbXBvbmVudCA9IHRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICAgICAgdGhpcy5fZnJhbWV3b3JrQ29tcG9uZW50SW5zdGFuY2UgPSB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgICAgIHRoaXMuX2VHdWkgPSB0aGlzLl9jb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgLy8gQW5ndWxhciBhcHBlbmRzIHRoZSBjb21wb25lbnQgdG8gdGhlIERPTSwgc28gcmVtb3ZlIGl0XG4gICAgICAgIF9yZW1vdmVGcm9tUGFyZW50KHRoaXMuX2VHdWkpO1xuXG4gICAgICAgIHRoaXMuX2FnQXdhcmVDb21wb25lbnQuYWdJbml0KHRoaXMuX3BhcmFtcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEd1aSgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lR3VpO1xuICAgIH1cblxuICAgIC8qKiBgZ2V0R3VpKClgIHJldHVybnMgdGhlIGBuZy1jb21wb25lbnRgIGVsZW1lbnQuIFRoaXMgcmV0dXJucyB0aGUgYWN0dWFsIHJvb3QgZWxlbWVudC4gKi9cbiAgICBwdWJsaWMgZ2V0Um9vdEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5fZUd1aS5maXJzdENoaWxkO1xuICAgICAgICByZXR1cm4gZmlyc3RDaGlsZCBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1ld29ya0NvbXBvbmVudEluc3RhbmNlICYmIHR5cGVvZiB0aGlzLl9mcmFtZXdvcmtDb21wb25lbnRJbnN0YW5jZS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZXdvcmtDb21wb25lbnRJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29tcG9uZW50UmVmPy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZyYW1ld29ya0NvbXBvbmVudEluc3RhbmNlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mcmFtZXdvcmtDb21wb25lbnRJbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlQ29tcG9uZW50KCk6IENvbXBvbmVudFJlZjxUPjtcbn1cbiJdfQ==