@angular/material
Version:
Angular Material
162 lines • 16.3 kB
JavaScript
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import { __awaiter, __extends, __generator } from "tslib";
import { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';
import { MatSelectHarness } from '@angular/material/select/testing';
import { coerceNumberProperty } from '@angular/cdk/coercion';
/** Harness for interacting with a standard mat-paginator in tests. */
var MatPaginatorHarness = /** @class */ (function (_super) {
__extends(MatPaginatorHarness, _super);
function MatPaginatorHarness() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this._nextButton = _this.locatorFor('.mat-paginator-navigation-next');
_this._previousButton = _this.locatorFor('.mat-paginator-navigation-previous');
_this._firstPageButton = _this.locatorForOptional('.mat-paginator-navigation-first');
_this._lastPageButton = _this.locatorForOptional('.mat-paginator-navigation-last');
_this._select = _this.locatorForOptional(MatSelectHarness.with({
ancestor: '.mat-paginator-page-size'
}));
_this._pageSizeFallback = _this.locatorFor('.mat-paginator-page-size-value');
_this._rangeLabel = _this.locatorFor('.mat-paginator-range-label');
return _this;
}
/**
* Gets a `HarnessPredicate` that can be used to search for a `MatPaginatorHarness` that meets
* certain criteria.
* @param options Options for filtering which paginator instances are considered a match.
* @return a `HarnessPredicate` configured with the given options.
*/
MatPaginatorHarness.with = function (options) {
if (options === void 0) { options = {}; }
return new HarnessPredicate(MatPaginatorHarness, options);
};
/** Goes to the next page in the paginator. */
MatPaginatorHarness.prototype.goToNextPage = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this._nextButton()];
case 1: return [2 /*return*/, (_a.sent()).click()];
}
});
});
};
/** Goes to the previous page in the paginator. */
MatPaginatorHarness.prototype.goToPreviousPage = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this._previousButton()];
case 1: return [2 /*return*/, (_a.sent()).click()];
}
});
});
};
/** Goes to the first page in the paginator. */
MatPaginatorHarness.prototype.goToFirstPage = function () {
return __awaiter(this, void 0, void 0, function () {
var button;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this._firstPageButton()];
case 1:
button = _a.sent();
// The first page button isn't enabled by default so we need to check for it.
if (!button) {
throw Error('Could not find first page button inside paginator. ' +
'Make sure that `showFirstLastButtons` is enabled.');
}
return [2 /*return*/, button.click()];
}
});
});
};
/** Goes to the last page in the paginator. */
MatPaginatorHarness.prototype.goToLastPage = function () {
return __awaiter(this, void 0, void 0, function () {
var button;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this._lastPageButton()];
case 1:
button = _a.sent();
// The last page button isn't enabled by default so we need to check for it.
if (!button) {
throw Error('Could not find last page button inside paginator. ' +
'Make sure that `showFirstLastButtons` is enabled.');
}
return [2 /*return*/, button.click()];
}
});
});
};
/**
* Sets the page size of the paginator.
* @param size Page size that should be select.
*/
MatPaginatorHarness.prototype.setPageSize = function (size) {
return __awaiter(this, void 0, void 0, function () {
var select;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this._select()];
case 1:
select = _a.sent();
// The select is only available if the `pageSizeOptions` are
// set to an array with more than one item.
if (!select) {
throw Error('Cannot find page size selector in paginator. ' +
'Make sure that the `pageSizeOptions` have been configured.');
}
return [2 /*return*/, select.clickOptions({ text: "" + size })];
}
});
});
};
/** Gets the page size of the paginator. */
MatPaginatorHarness.prototype.getPageSize = function () {
return __awaiter(this, void 0, void 0, function () {
var select, value, _a, _b;
return __generator(this, function (_c) {
switch (_c.label) {
case 0: return [4 /*yield*/, this._select()];
case 1:
select = _c.sent();
if (!select) return [3 /*break*/, 2];
_a = select.getValueText();
return [3 /*break*/, 4];
case 2: return [4 /*yield*/, this._pageSizeFallback()];
case 3:
_a = (_c.sent()).text();
_c.label = 4;
case 4:
value = _a;
_b = coerceNumberProperty;
return [4 /*yield*/, value];
case 5: return [2 /*return*/, _b.apply(void 0, [_c.sent()])];
}
});
});
};
/** Gets the text of the range labe of the paginator. */
MatPaginatorHarness.prototype.getRangeLabel = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this._rangeLabel()];
case 1: return [2 /*return*/, (_a.sent()).text()];
}
});
});
};
/** Selector used to find paginator instances. */
MatPaginatorHarness.hostSelector = '.mat-paginator';
return MatPaginatorHarness;
}(ComponentHarness));
export { MatPaginatorHarness };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLWhhcm5lc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvcGFnaW5hdG9yL3Rlc3RpbmcvcGFnaW5hdG9yLWhhcm5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSTNELHNFQUFzRTtBQUN0RTtJQUF5Qyx1Q0FBZ0I7SUFBekQ7UUFBQSxxRUF1RkM7UUFwRlMsaUJBQVcsR0FBRyxLQUFJLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDaEUscUJBQWUsR0FBRyxLQUFJLENBQUMsVUFBVSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDeEUsc0JBQWdCLEdBQUcsS0FBSSxDQUFDLGtCQUFrQixDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDOUUscUJBQWUsR0FBRyxLQUFJLENBQUMsa0JBQWtCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUM1RSxhQUFPLEdBQUcsS0FBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUM5RCxRQUFRLEVBQUUsMEJBQTBCO1NBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBQ0ksdUJBQWlCLEdBQUcsS0FBSSxDQUFDLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3RFLGlCQUFXLEdBQUcsS0FBSSxDQUFDLFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDOztJQTRFdEUsQ0FBQztJQTFFQzs7Ozs7T0FLRztJQUNJLHdCQUFJLEdBQVgsVUFBWSxPQUFxQztRQUFyQyx3QkFBQSxFQUFBLFlBQXFDO1FBQy9DLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsOENBQThDO0lBQ3hDLDBDQUFZLEdBQWxCOzs7OzRCQUNVLHFCQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBQTs0QkFBaEMsc0JBQU8sQ0FBQyxTQUF3QixDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUM7Ozs7S0FDM0M7SUFFRCxrREFBa0Q7SUFDNUMsOENBQWdCLEdBQXRCOzs7OzRCQUNVLHFCQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBQTs0QkFBcEMsc0JBQU8sQ0FBQyxTQUE0QixDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUM7Ozs7S0FDL0M7SUFFRCwrQ0FBK0M7SUFDekMsMkNBQWEsR0FBbkI7Ozs7OzRCQUNpQixxQkFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBQTs7d0JBQXRDLE1BQU0sR0FBRyxTQUE2Qjt3QkFFNUMsNkVBQTZFO3dCQUM3RSxJQUFJLENBQUMsTUFBTSxFQUFFOzRCQUNYLE1BQU0sS0FBSyxDQUFDLHFEQUFxRDtnQ0FDckQsbURBQW1ELENBQUMsQ0FBQzt5QkFDbEU7d0JBRUQsc0JBQU8sTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFDOzs7O0tBQ3ZCO0lBRUQsOENBQThDO0lBQ3hDLDBDQUFZLEdBQWxCOzs7Ozs0QkFDaUIscUJBQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFBOzt3QkFBckMsTUFBTSxHQUFHLFNBQTRCO3dCQUUzQyw0RUFBNEU7d0JBQzVFLElBQUksQ0FBQyxNQUFNLEVBQUU7NEJBQ1gsTUFBTSxLQUFLLENBQUMsb0RBQW9EO2dDQUNwRCxtREFBbUQsQ0FBQyxDQUFDO3lCQUNsRTt3QkFFRCxzQkFBTyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUM7Ozs7S0FDdkI7SUFFRDs7O09BR0c7SUFDRyx5Q0FBVyxHQUFqQixVQUFrQixJQUFZOzs7Ozs0QkFDYixxQkFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUE7O3dCQUE3QixNQUFNLEdBQUcsU0FBb0I7d0JBRW5DLDREQUE0RDt3QkFDNUQsMkNBQTJDO3dCQUMzQyxJQUFJLENBQUMsTUFBTSxFQUFFOzRCQUNYLE1BQU0sS0FBSyxDQUFDLCtDQUErQztnQ0FDL0MsNERBQTRELENBQUMsQ0FBQzt5QkFDM0U7d0JBRUQsc0JBQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFDLElBQUksRUFBRSxLQUFHLElBQU0sRUFBQyxDQUFDLEVBQUM7Ozs7S0FDL0M7SUFFRCwyQ0FBMkM7SUFDckMseUNBQVcsR0FBakI7Ozs7OzRCQUNpQixxQkFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUE7O3dCQUE3QixNQUFNLEdBQUcsU0FBb0I7NkJBQ3JCLE1BQU0sRUFBTix3QkFBTTt3QkFBRyxLQUFBLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQTs7NEJBQUkscUJBQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUE7O3dCQUEvQixLQUFBLENBQUMsU0FBOEIsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBOzs7d0JBQWhGLEtBQUssS0FBMkU7d0JBQy9FLEtBQUEsb0JBQW9CLENBQUE7d0JBQUMscUJBQU0sS0FBSyxFQUFBOzRCQUF2QyxzQkFBTyxrQkFBcUIsU0FBVyxFQUFDLEVBQUM7Ozs7S0FDMUM7SUFFRCx3REFBd0Q7SUFDbEQsMkNBQWEsR0FBbkI7Ozs7NEJBQ1UscUJBQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFBOzRCQUFoQyxzQkFBTyxDQUFDLFNBQXdCLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBQzs7OztLQUMxQztJQXJGRCxpREFBaUQ7SUFDMUMsZ0NBQVksR0FBRyxnQkFBZ0IsQ0FBQztJQXFGekMsMEJBQUM7Q0FBQSxBQXZGRCxDQUF5QyxnQkFBZ0IsR0F1RnhEO1NBdkZZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudEhhcm5lc3MsIEhhcm5lc3NQcmVkaWNhdGV9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXN0aW5nJztcbmltcG9ydCB7TWF0U2VsZWN0SGFybmVzc30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0L3Rlc3RpbmcnO1xuaW1wb3J0IHtjb2VyY2VOdW1iZXJQcm9wZXJ0eX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7UGFnaW5hdG9ySGFybmVzc0ZpbHRlcnN9IGZyb20gJy4vcGFnaW5hdG9yLWhhcm5lc3MtZmlsdGVycyc7XG5cblxuLyoqIEhhcm5lc3MgZm9yIGludGVyYWN0aW5nIHdpdGggYSBzdGFuZGFyZCBtYXQtcGFnaW5hdG9yIGluIHRlc3RzLiAqL1xuZXhwb3J0IGNsYXNzIE1hdFBhZ2luYXRvckhhcm5lc3MgZXh0ZW5kcyBDb21wb25lbnRIYXJuZXNzIHtcbiAgLyoqIFNlbGVjdG9yIHVzZWQgdG8gZmluZCBwYWdpbmF0b3IgaW5zdGFuY2VzLiAqL1xuICBzdGF0aWMgaG9zdFNlbGVjdG9yID0gJy5tYXQtcGFnaW5hdG9yJztcbiAgcHJpdmF0ZSBfbmV4dEJ1dHRvbiA9IHRoaXMubG9jYXRvckZvcignLm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1uZXh0Jyk7XG4gIHByaXZhdGUgX3ByZXZpb3VzQnV0dG9uID0gdGhpcy5sb2NhdG9yRm9yKCcubWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLXByZXZpb3VzJyk7XG4gIHByaXZhdGUgX2ZpcnN0UGFnZUJ1dHRvbiA9IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKCcubWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWZpcnN0Jyk7XG4gIHByaXZhdGUgX2xhc3RQYWdlQnV0dG9uID0gdGhpcy5sb2NhdG9yRm9yT3B0aW9uYWwoJy5tYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tbGFzdCcpO1xuICBwcml2YXRlIF9zZWxlY3QgPSB0aGlzLmxvY2F0b3JGb3JPcHRpb25hbChNYXRTZWxlY3RIYXJuZXNzLndpdGgoe1xuICAgIGFuY2VzdG9yOiAnLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplJ1xuICB9KSk7XG4gIHByaXZhdGUgX3BhZ2VTaXplRmFsbGJhY2sgPSB0aGlzLmxvY2F0b3JGb3IoJy5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS12YWx1ZScpO1xuICBwcml2YXRlIF9yYW5nZUxhYmVsID0gdGhpcy5sb2NhdG9yRm9yKCcubWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbCcpO1xuXG4gIC8qKlxuICAgKiBHZXRzIGEgYEhhcm5lc3NQcmVkaWNhdGVgIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBhIGBNYXRQYWdpbmF0b3JIYXJuZXNzYCB0aGF0IG1lZXRzXG4gICAqIGNlcnRhaW4gY3JpdGVyaWEuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGZpbHRlcmluZyB3aGljaCBwYWdpbmF0b3IgaW5zdGFuY2VzIGFyZSBjb25zaWRlcmVkIGEgbWF0Y2guXG4gICAqIEByZXR1cm4gYSBgSGFybmVzc1ByZWRpY2F0ZWAgY29uZmlndXJlZCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICAgKi9cbiAgc3RhdGljIHdpdGgob3B0aW9uczogUGFnaW5hdG9ySGFybmVzc0ZpbHRlcnMgPSB7fSk6IEhhcm5lc3NQcmVkaWNhdGU8TWF0UGFnaW5hdG9ySGFybmVzcz4ge1xuICAgIHJldHVybiBuZXcgSGFybmVzc1ByZWRpY2F0ZShNYXRQYWdpbmF0b3JIYXJuZXNzLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKiBHb2VzIHRvIHRoZSBuZXh0IHBhZ2UgaW4gdGhlIHBhZ2luYXRvci4gKi9cbiAgYXN5bmMgZ29Ub05leHRQYWdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5fbmV4dEJ1dHRvbigpKS5jbGljaygpO1xuICB9XG5cbiAgLyoqIEdvZXMgdG8gdGhlIHByZXZpb3VzIHBhZ2UgaW4gdGhlIHBhZ2luYXRvci4gKi9cbiAgYXN5bmMgZ29Ub1ByZXZpb3VzUGFnZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuX3ByZXZpb3VzQnV0dG9uKCkpLmNsaWNrKCk7XG4gIH1cblxuICAvKiogR29lcyB0byB0aGUgZmlyc3QgcGFnZSBpbiB0aGUgcGFnaW5hdG9yLiAqL1xuICBhc3luYyBnb1RvRmlyc3RQYWdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJ1dHRvbiA9IGF3YWl0IHRoaXMuX2ZpcnN0UGFnZUJ1dHRvbigpO1xuXG4gICAgLy8gVGhlIGZpcnN0IHBhZ2UgYnV0dG9uIGlzbid0IGVuYWJsZWQgYnkgZGVmYXVsdCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBpdC5cbiAgICBpZiAoIWJ1dHRvbikge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGZpcnN0IHBhZ2UgYnV0dG9uIGluc2lkZSBwYWdpbmF0b3IuICcgK1xuICAgICAgICAgICAgICAgICAgJ01ha2Ugc3VyZSB0aGF0IGBzaG93Rmlyc3RMYXN0QnV0dG9uc2AgaXMgZW5hYmxlZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnV0dG9uLmNsaWNrKCk7XG4gIH1cblxuICAvKiogR29lcyB0byB0aGUgbGFzdCBwYWdlIGluIHRoZSBwYWdpbmF0b3IuICovXG4gIGFzeW5jIGdvVG9MYXN0UGFnZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBidXR0b24gPSBhd2FpdCB0aGlzLl9sYXN0UGFnZUJ1dHRvbigpO1xuXG4gICAgLy8gVGhlIGxhc3QgcGFnZSBidXR0b24gaXNuJ3QgZW5hYmxlZCBieSBkZWZhdWx0IHNvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGl0LlxuICAgIGlmICghYnV0dG9uKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ291bGQgbm90IGZpbmQgbGFzdCBwYWdlIGJ1dHRvbiBpbnNpZGUgcGFnaW5hdG9yLiAnICtcbiAgICAgICAgICAgICAgICAgICdNYWtlIHN1cmUgdGhhdCBgc2hvd0ZpcnN0TGFzdEJ1dHRvbnNgIGlzIGVuYWJsZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1dHRvbi5jbGljaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHBhZ2Ugc2l6ZSBvZiB0aGUgcGFnaW5hdG9yLlxuICAgKiBAcGFyYW0gc2l6ZSBQYWdlIHNpemUgdGhhdCBzaG91bGQgYmUgc2VsZWN0LlxuICAgKi9cbiAgYXN5bmMgc2V0UGFnZVNpemUoc2l6ZTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2VsZWN0ID0gYXdhaXQgdGhpcy5fc2VsZWN0KCk7XG5cbiAgICAvLyBUaGUgc2VsZWN0IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBgcGFnZVNpemVPcHRpb25zYCBhcmVcbiAgICAvLyBzZXQgdG8gYW4gYXJyYXkgd2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0uXG4gICAgaWYgKCFzZWxlY3QpIHtcbiAgICAgIHRocm93IEVycm9yKCdDYW5ub3QgZmluZCBwYWdlIHNpemUgc2VsZWN0b3IgaW4gcGFnaW5hdG9yLiAnICtcbiAgICAgICAgICAgICAgICAgICdNYWtlIHN1cmUgdGhhdCB0aGUgYHBhZ2VTaXplT3B0aW9uc2AgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdC5jbGlja09wdGlvbnMoe3RleHQ6IGAke3NpemV9YH0pO1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIHBhZ2Ugc2l6ZSBvZiB0aGUgcGFnaW5hdG9yLiAqL1xuICBhc3luYyBnZXRQYWdlU2l6ZSgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHNlbGVjdCA9IGF3YWl0IHRoaXMuX3NlbGVjdCgpO1xuICAgIGNvbnN0IHZhbHVlID0gc2VsZWN0ID8gc2VsZWN0LmdldFZhbHVlVGV4dCgpIDogKGF3YWl0IHRoaXMuX3BhZ2VTaXplRmFsbGJhY2soKSkudGV4dCgpO1xuICAgIHJldHVybiBjb2VyY2VOdW1iZXJQcm9wZXJ0eShhd2FpdCB2YWx1ZSk7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgdGV4dCBvZiB0aGUgcmFuZ2UgbGFiZSBvZiB0aGUgcGFnaW5hdG9yLiAqL1xuICBhc3luYyBnZXRSYW5nZUxhYmVsKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLl9yYW5nZUxhYmVsKCkpLnRleHQoKTtcbiAgfVxufVxuIl19