UNPKG

truly-ui

Version:

Web Components for Desktop Applications.

140 lines (138 loc) 19.3 kB
/* MIT License Copyright (c) 2019 Temainfo Software Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import { DataSource } from '@angular/cdk/collections'; import { BehaviorSubject, Subscription } from 'rxjs'; export class DatatableDataSource extends DataSource { get isEmpty() { return this._cachedData.length === 0; } constructor(datatable) { super(); this._fetchedPages = new Set(); this._subscription = new Subscription(); this._recordsCount = datatable.recordsCount; this._pageSize = datatable.rowsPage; this._cachedData = Array.from({ length: this._recordsCount }); this._dataStream = new BehaviorSubject(this._cachedData); this.datatable = datatable; this.filterService = datatable.filterService; this.sortService = datatable.sortService; } connect(collectionViewer) { this._subscription.add(this.filterService.onFilter().subscribe(this.onFilter.bind(this))); this._subscription.add(this.sortService.onSort().subscribe(this.onSort.bind(this))); this._subscription.add(collectionViewer.viewChange.subscribe(this.viewData.bind(this))); return this._dataStream; } disconnect(collectionViewer) { this._subscription.unsubscribe(); } setNavigating(navigate) { this.navigating = navigate; if (!this.navigating) { this.fetchPage(this.currentPage); } } changes(changes) { if (changes['rowsPage'] && changes['rowsPage'].currentValue) { this._pageSize = changes['rowsPage'].currentValue; } if (changes['recordsCount'] && changes['recordsCount'].currentValue) { this._recordsCount = changes['recordsCount'].currentValue; this._cachedData = Array.from({ length: this._recordsCount }); this._dataStream.next(this._cachedData); } if (changes['data'] && changes['data'].currentValue) { if (this.isInMemory()) { this._cachedData = changes['data'].currentValue; this._dataStream.next(this._cachedData); } this.dispatchData(changes['data'].currentValue); } } onFilter() { if (this.isInMemory()) { this.dispatchData(); } { this.emitLoadData(); } } onSort() { if (this.isInMemory()) { this.dispatchData(); } { this.emitLoadData(); } } _getPageForIndex(index) { return Math.floor(index / this._pageSize); } viewData(range) { const startPage = this._getPageForIndex(range.start); const endPage = this._getPageForIndex(range.end - 1); for (let i = startPage; i <= endPage; i++) { this.fetchPage(i); } } fetchPage(page) { this.currentPage = page; if (this.navigating) { return; } if (this._fetchedPages.has(this.currentPage)) { return; } this.emitLoadData(page); } dispatchData(data = this._cachedData) { if (this.isInMemory()) { const cached = this.sortService.sortWithData(this.filterService.filterWithData(data)); cached.slice(this.currentPage * this._pageSize, this._pageSize); return this._dataStream.next(cached); } if (this.isInfinite() && data.length > 0) { this._cachedData.splice(this.currentPage * this._pageSize, this._pageSize, ...data); } else { this._cachedData = data; } this._dataStream.next(this._cachedData); } emitLoadData(page = this.currentPage) { if (this.isInfinite()) { this.datatable.loadData.emit({ skip: page * this._pageSize, take: this._pageSize, filters: this.filterService.getFilter(), sorts: this.sortService.getSort() }); this._fetchedPages.add(page); } } isInfinite() { return this.datatable.rowModel === 'infinite'; } isInMemory() { return this.datatable.rowModel === 'inmemory'; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLWRhdGFzb3VyY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL2RhdGF0YWJsZS9zZXJ2aWNlcy9kYXRhdGFibGUtZGF0YXNvdXJjZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW9CRTtBQUVGLE9BQU8sRUFBb0IsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBYyxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFNakUsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFVBQThCO0lBaUJyRSxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsWUFBYSxTQUFzQjtRQUNqQyxLQUFLLEVBQUUsQ0FBQztRQWZGLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNsQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFlekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQVMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBNEIsSUFBSSxDQUFDLFdBQVcsQ0FBRSxDQUFDO1FBRXJGLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQztRQUM3QyxJQUFJLENBQUMs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Z2h0IChjKSAyMDE5IFRlbWFpbmZvIFNvZnR3YXJlXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gICAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICAgIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAgICB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gICAgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gICAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAgICBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAgICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAgICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gICAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICAgIFNPRlRXQVJFLlxuKi9cblxuaW1wb3J0IHsgQ29sbGVjdGlvblZpZXdlciwgRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHR5cGUgeyBUbERhdGF0YWJsZUZpbHRlclNlcnZpY2UgfSBmcm9tICcuL2RhdGF0YWJsZS1maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgdHlwZSB7IFRsRGF0YXRhYmxlU29ydFNlcnZpY2UgfSBmcm9tICcuL2RhdGF0YWJsZS1zb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHR5cGUgeyBUbERhdGF0YWJsZSB9IGZyb20gJy4uL2RhdGF0YWJsZSc7XG5pbXBvcnQgeyBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBEYXRhdGFibGVEYXRhU291cmNlIGV4dGVuZHMgRGF0YVNvdXJjZTxvYmplY3QgfCB1bmRlZmluZWQ+IHtcblxuICBwcml2YXRlIF9yZWNvcmRzQ291bnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcGFnZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfY2FjaGVkRGF0YTogQXJyYXk8b2JqZWN0PjtcbiAgcHJpdmF0ZSBfZGF0YVN0cmVhbTogQmVoYXZpb3JTdWJqZWN0PCggb2JqZWN0IHwgdW5kZWZpbmVkIClbXT47XG5cbiAgcHJpdmF0ZSBfZmV0Y2hlZFBhZ2VzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwcml2YXRlIGZpbHRlclNlcnZpY2U6IFRsRGF0YXRhYmxlRmlsdGVyU2VydmljZTtcbiAgcHJpdmF0ZSBzb3J0U2VydmljZTogVGxEYXRhdGFibGVTb3J0U2VydmljZTtcbiAgcHJpdmF0ZSBkYXRhdGFibGU6IFRsRGF0YXRhYmxlO1xuICBwcml2YXRlIGN1cnJlbnRQYWdlOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0aW5nOiBib29sZWFuO1xuXG4gIGdldCBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZWREYXRhLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCBkYXRhdGFibGU6IFRsRGF0YXRhYmxlICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fcmVjb3Jkc0NvdW50ID0gZGF0YXRhYmxlLnJlY29yZHNDb3VudDtcbiAgICB0aGlzLl9wYWdlU2l6ZSA9IGRhdGF0YWJsZS5yb3dzUGFnZTtcbiAgICB0aGlzLl9jYWNoZWREYXRhID0gQXJyYXkuZnJvbTxvYmplY3Q+KHtsZW5ndGg6IHRoaXMuX3JlY29yZHNDb3VudH0pO1xuICAgIHRoaXMuX2RhdGFTdHJlYW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PCggb2JqZWN0IHwgdW5kZWZpbmVkIClbXT4oIHRoaXMuX2NhY2hlZERhdGEgKTtcblxuICAgIHRoaXMuZGF0YXRhYmxlID0gZGF0YXRhYmxlO1xuICAgIHRoaXMuZmlsdGVyU2VydmljZSA9IGRhdGF0YWJsZS5maWx0ZXJTZXJ2aWNlO1xuICAgIHRoaXMuc29ydFNlcnZpY2UgPSBkYXRhdGFibGUuc29ydFNlcnZpY2U7XG4gIH1cblxuICBjb25uZWN0KCBjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyICk6IE9ic2VydmFibGU8KCBvYmplY3QgfCB1bmRlZmluZWQgKVtdIHwgUmVhZG9ubHlBcnJheTxvYmplY3QgfCB1bmRlZmluZWQ+PiB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCggdGhpcy5maWx0ZXJTZXJ2aWNlLm9uRmlsdGVyKCkuc3Vic2NyaWJlKHRoaXMub25GaWx0ZXIuYmluZCh0aGlzKSkgKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKCB0aGlzLnNvcnRTZXJ2aWNlLm9uU29ydCgpLnN1YnNjcmliZSh0aGlzLm9uU29ydC5iaW5kKHRoaXMpKSApO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoIGNvbGxlY3Rpb25WaWV3ZXIudmlld0NoYW5nZS5zdWJzY3JpYmUoIHRoaXMudmlld0RhdGEuYmluZCh0aGlzKSApICk7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTdHJlYW07XG4gIH1cblxuICBkaXNjb25uZWN0KCBjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyICk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgc2V0TmF2aWdhdGluZyggbmF2aWdhdGUgKSB7XG4gICAgdGhpcy5uYXZpZ2F0aW5nID0gbmF2aWdhdGU7XG4gICAgaWYgKCAhdGhpcy5uYXZpZ2F0aW5nICkge1xuICAgICAgdGhpcy5mZXRjaFBhZ2UoIHRoaXMuY3VycmVudFBhZ2UgKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VzKCBjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzICkge1xuICAgIGlmICggY2hhbmdlc1sncm93c1BhZ2UnXSAmJiBjaGFuZ2VzWydyb3dzUGFnZSddLmN1cnJlbnRWYWx1ZSApIHtcbiAgICAgIHRoaXMuX3BhZ2VTaXplID0gY2hhbmdlc1sncm93c1BhZ2UnXS5jdXJyZW50VmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKCBjaGFuZ2VzWydyZWNvcmRzQ291bnQnXSAmJiBjaGFuZ2VzWydyZWNvcmRzQ291bnQnXS5jdXJyZW50VmFsdWUgKSB7XG4gICAgICB0aGlzLl9yZWNvcmRzQ291bnQgPSBjaGFuZ2VzWydyZWNvcmRzQ291bnQnXS5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLl9jYWNoZWREYXRhID0gQXJyYXkuZnJvbTxvYmplY3Q+KHtsZW5ndGg6IHRoaXMuX3JlY29yZHNDb3VudH0pO1xuICAgICAgdGhpcy5fZGF0YVN0cmVhbS5uZXh0KCB0aGlzLl9jYWNoZWREYXRhICk7XG4gICAgfVxuXG4gICAgaWYgKCBjaGFuZ2VzWydkYXRhJ10gJiYgY2hhbmdlc1snZGF0YSddLmN1cnJlbnRWYWx1ZSApIHtcbiAgICAgIGlmICh0aGlzLmlzSW5NZW1vcnkoKSkge1xuICAgICAgICB0aGlzLl9jYWNoZWREYXRhID0gY2hhbmdlc1snZGF0YSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgdGhpcy5fZGF0YVN0cmVhbS5uZXh0KCB0aGlzLl9jYWNoZWREYXRhICk7XG4gICAgICB9XG4gICAgICB0aGlzLmRpc3BhdGNoRGF0YSggY2hhbmdlc1snZGF0YSddLmN1cnJlbnRWYWx1ZSApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25GaWx0ZXIoICkge1xuICAgIGlmICh0aGlzLmlzSW5NZW1vcnkoKSkge1xuICAgICAgdGhpcy5kaXNwYXRjaERhdGEoKTtcbiAgICB9IHtcbiAgICAgIHRoaXMuZW1pdExvYWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvblNvcnQoICkge1xuICAgIGlmICh0aGlzLmlzSW5NZW1vcnkoKSkge1xuICAgICAgdGhpcy5kaXNwYXRjaERhdGEoKTtcbiAgICB9IHtcbiAgICAgIHRoaXMuZW1pdExvYWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UGFnZUZvckluZGV4KCBpbmRleDogbnVtYmVyICk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoIGluZGV4IC8gdGhpcy5fcGFnZVNpemUgKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSB2aWV3RGF0YShyYW5nZSkge1xuICAgIGNvbnN0IHN0YXJ0UGFnZSA9IHRoaXMuX2dldFBhZ2VGb3JJbmRleCggcmFuZ2Uuc3RhcnQgKTtcbiAgICBjb25zdCBlbmRQYWdlID0gdGhpcy5fZ2V0UGFnZUZvckluZGV4KCByYW5nZS5lbmQgLSAxICk7XG4gICAgZm9yICggbGV0IGkgPSBzdGFydFBhZ2U7IGkgPD0gZW5kUGFnZTsgaSsrICkge1xuICAgICAgdGhpcy5mZXRjaFBhZ2UoIGkgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZldGNoUGFnZSggcGFnZTogbnVtYmVyICkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlO1xuICAgIGlmICggdGhpcy5uYXZpZ2F0aW5nICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIHRoaXMuX2ZldGNoZWRQYWdlcy5oYXMoIHRoaXMuY3VycmVudFBhZ2UgKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbWl0TG9hZERhdGEoIHBhZ2UgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hEYXRhKGRhdGEgPSB0aGlzLl9jYWNoZWREYXRhKSB7XG4gICAgaWYgKHRoaXMuaXNJbk1lbW9yeSgpKSB7XG4gICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnNvcnRTZXJ2aWNlLnNvcnRXaXRoRGF0YSggdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlcldpdGhEYXRhKGRhdGEpICk7XG4gICAgICBjYWNoZWQuc2xpY2UoIHRoaXMuY3VycmVudFBhZ2UgICogdGhpcy5fcGFnZVNpemUsIHRoaXMuX3BhZ2VTaXplKTtcbiAgICAgIHJldHVybiB0aGlzLl9kYXRhU3RyZWFtLm5leHQoIGNhY2hlZCApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzSW5maW5pdGUoKSAmJiBkYXRhLmxlbmd0aCA+IDAgKSB7XG4gICAgICB0aGlzLl9jYWNoZWREYXRhLnNwbGljZSh0aGlzLmN1cnJlbnRQYWdlICAqIHRoaXMuX3BhZ2VTaXplLCB0aGlzLl9wYWdlU2l6ZSwgLi4uZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NhY2hlZERhdGEgPSBkYXRhO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhU3RyZWFtLm5leHQoIHRoaXMuX2NhY2hlZERhdGEgKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdExvYWREYXRhKCBwYWdlID0gdGhpcy5jdXJyZW50UGFnZSApIHtcbiAgICBpZiAodGhpcy5pc0luZmluaXRlKCkgICkge1xuICAgICAgdGhpcy5kYXRhdGFibGUubG9hZERhdGEuZW1pdCh7XG4gICAgICAgIHNraXA6IHBhZ2UgKiB0aGlzLl9wYWdlU2l6ZSxcbiAgICAgICAgdGFrZTogdGhpcy5fcGFnZVNpemUsXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuZmlsdGVyU2VydmljZS5nZXRGaWx0ZXIoKSxcbiAgICAgICAgc29ydHM6IHRoaXMuc29ydFNlcnZpY2UuZ2V0U29ydCgpXG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2ZldGNoZWRQYWdlcy5hZGQoIHBhZ2UgKTtcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgaXNJbmZpbml0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhdGFibGUucm93TW9kZWwgPT09ICdpbmZpbml0ZSc7XG4gIH1cblxuICBwcml2YXRlIGlzSW5NZW1vcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YXRhYmxlLnJvd01vZGVsID09PSAnaW5tZW1vcnknO1xuICB9XG59XG4iXX0=