@angular/material
Version:
Angular Material
88 lines • 16.6 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 { ComponentHarness, parallel } from '@angular/cdk/testing';
import { MatDividerHarness } from '@angular/material/divider/testing';
import { MatSubheaderHarness } from './list-item-harness-base';
/**
* Shared behavior among the harnesses for the various `MatList` flavors.
* @template T A constructor type for a list item harness type used by this list harness.
* @template C The list item harness type that `T` constructs.
* @template F The filter type used filter list item harness of type `C`.
* @docs-private
*/
export class MatListHarnessBase extends ComponentHarness {
/**
* Gets a list of harnesses representing the items in this list.
* @param filters Optional filters used to narrow which harnesses are included
* @return The list of items matching the given filters.
*/
async getItems(filters) {
return this.locatorForAll(this._itemHarness.with(filters))();
}
/**
* Gets a list of `ListSection` representing the list items grouped by subheaders. If the list has
* no subheaders it is represented as a single `ListSection` with an undefined `heading` property.
* @param filters Optional filters used to narrow which list item harnesses are included
* @return The list of items matching the given filters, grouped into sections by subheader.
*/
async getItemsGroupedBySubheader(filters) {
const listSections = [];
let currentSection = { items: [] };
const itemsAndSubheaders = await this.getItemsWithSubheadersAndDividers({ item: filters, divider: false });
for (const itemOrSubheader of itemsAndSubheaders) {
if (itemOrSubheader instanceof MatSubheaderHarness) {
if (currentSection.heading !== undefined || currentSection.items.length) {
listSections.push(currentSection);
}
currentSection = { heading: itemOrSubheader.getText(), items: [] };
}
else {
currentSection.items.push(itemOrSubheader);
}
}
if (currentSection.heading !== undefined || currentSection.items.length ||
!listSections.length) {
listSections.push(currentSection);
}
// Concurrently wait for all sections to resolve their heading if present.
return parallel(() => listSections.map(async (s) => ({ items: s.items, heading: await s.heading })));
}
/**
* Gets a list of sub-lists representing the list items grouped by dividers. If the list has no
* dividers it is represented as a list with a single sub-list.
* @param filters Optional filters used to narrow which list item harnesses are included
* @return The list of items matching the given filters, grouped into sub-lists by divider.
*/
async getItemsGroupedByDividers(filters) {
const listSections = [[]];
const itemsAndDividers = await this.getItemsWithSubheadersAndDividers({ item: filters, subheader: false });
for (const itemOrDivider of itemsAndDividers) {
if (itemOrDivider instanceof MatDividerHarness) {
listSections.push([]);
}
else {
listSections[listSections.length - 1].push(itemOrDivider);
}
}
return listSections;
}
async getItemsWithSubheadersAndDividers(filters = {}) {
const query = [];
if (filters.item !== false) {
query.push(this._itemHarness.with(filters.item || {}));
}
if (filters.subheader !== false) {
query.push(MatSubheaderHarness.with(filters.subheader));
}
if (filters.divider !== false) {
query.push(MatDividerHarness.with(filters.divider));
}
return this.locatorForAll(...query)();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1oYXJuZXNzLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvbGlzdC90ZXN0aW5nL2xpc3QtaGFybmVzcy1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFDTCxnQkFBZ0IsRUFHaEIsUUFBUSxFQUNULE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUF3QixpQkFBaUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRTNGLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBVzdEOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBZ0Isa0JBS2hCLFNBQVEsZ0JBQWdCO0lBRzVCOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQVc7UUFDeEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsMEJBQTBCLENBQUMsT0FBVztRQUUxQyxNQUFNLFlBQVksR0FBYyxFQUFFLENBQUM7UUFDbkMsSUFBSSxjQUFjLEdBQVksRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUM7UUFDMUMsTUFBTSxrQkFBa0IsR0FDcEIsTUFBTSxJQUFJLENBQUMsaUNBQWlDLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQ2xGLEtBQUssTUFBTSxlQUFlLElBQUksa0JBQWtCLEVBQUU7WUFDaEQsSUFBSSxlQUFlLFlBQVksbUJBQW1CLEVBQUU7Z0JBQ2xELElBQUksY0FBYyxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7b0JBQ3ZFLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ25DO2dCQUNELGNBQWMsR0FBRyxFQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBQyxDQUFDO2FBQ2xFO2lCQUFNO2dCQUNMLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQzVDO1NBQ0Y7UUFDRCxJQUFJLGNBQWMsQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUNuRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNuQztRQUVELDBFQUEwRTtRQUMxRSxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUNqRCxDQUFDLEVBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxPQUFXO1FBQ3pDLE1BQU0sWUFBWSxHQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakMsTUFBTSxnQkFBZ0IsR0FDbEIsTUFBTSxJQUFJLENBQUMsaUNBQWlDLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQ3BGLEtBQUssTUFBTSxhQUFhLElBQUksZ0JBQWdCLEVBQUU7WUFDNUMsSUFBSSxhQUFhLFlBQVksaUJBQWlCLEVBQUU7Z0JBQzlDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDdkI7aUJBQU07Z0JBQ0wsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzNEO1NBQ0Y7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBb0RELEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxVQUlwQyxFQUFFO1FBQ0osTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7WUFDMUIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQU8sQ0FBQyxDQUFDLENBQUM7U0FDN0Q7UUFDRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO1lBQy9CLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRTtZQUM3QixLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNyRDtRQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDeEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudEhhcm5lc3MsXG4gIENvbXBvbmVudEhhcm5lc3NDb25zdHJ1Y3RvcixcbiAgSGFybmVzc1ByZWRpY2F0ZSxcbiAgcGFyYWxsZWxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuaW1wb3J0IHtEaXZpZGVySGFybmVzc0ZpbHRlcnMsIE1hdERpdmlkZXJIYXJuZXNzfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyL3Rlc3RpbmcnO1xuaW1wb3J0IHtCYXNlTGlzdEl0ZW1IYXJuZXNzRmlsdGVycywgU3ViaGVhZGVySGFybmVzc0ZpbHRlcnN9IGZyb20gJy4vbGlzdC1oYXJuZXNzLWZpbHRlcnMnO1xuaW1wb3J0IHtNYXRTdWJoZWFkZXJIYXJuZXNzfSBmcm9tICcuL2xpc3QtaXRlbS1oYXJuZXNzLWJhc2UnO1xuXG4vKiogUmVwcmVzZW50cyBhIHNlY3Rpb24gb2YgYSBsaXN0IGZhbGxpbmcgdW5kZXIgYSBzcGVjaWZpYyBoZWFkZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RTZWN0aW9uPEk+IHtcbiAgLyoqIFRoZSBoZWFkaW5nIGZvciB0aGlzIGxpc3Qgc2VjdGlvbi4gYHVuZGVmaW5lZGAgaWYgdGhlcmUgaXMgbm8gaGVhZGluZy4gKi9cbiAgaGVhZGluZz86IHN0cmluZztcblxuICAvKiogVGhlIGl0ZW1zIGluIHRoaXMgbGlzdCBzZWN0aW9uLiAqL1xuICBpdGVtczogSVtdO1xufVxuXG4vKipcbiAqIFNoYXJlZCBiZWhhdmlvciBhbW9uZyB0aGUgaGFybmVzc2VzIGZvciB0aGUgdmFyaW91cyBgTWF0TGlzdGAgZmxhdm9ycy5cbiAqIEB0ZW1wbGF0ZSBUIEEgY29uc3RydWN0b3IgdHlwZSBmb3IgYSBsaXN0IGl0ZW0gaGFybmVzcyB0eXBlIHVzZWQgYnkgdGhpcyBsaXN0IGhhcm5lc3MuXG4gKiBAdGVtcGxhdGUgQyBUaGUgbGlzdCBpdGVtIGhhcm5lc3MgdHlwZSB0aGF0IGBUYCBjb25zdHJ1Y3RzLlxuICogQHRlbXBsYXRlIEYgVGhlIGZpbHRlciB0eXBlIHVzZWQgZmlsdGVyIGxpc3QgaXRlbSBoYXJuZXNzIG9mIHR5cGUgYENgLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTWF0TGlzdEhhcm5lc3NCYXNlXG4gICAgPFxuICAgICAgVCBleHRlbmRzIChDb21wb25lbnRIYXJuZXNzQ29uc3RydWN0b3I8Qz4gJiB7d2l0aDogKG9wdGlvbnM/OiBGKSA9PiBIYXJuZXNzUHJlZGljYXRlPEM+fSksXG4gICAgICBDIGV4dGVuZHMgQ29tcG9uZW50SGFybmVzcyxcbiAgICAgIEYgZXh0ZW5kcyBCYXNlTGlzdEl0ZW1IYXJuZXNzRmlsdGVyc1xuICAgID4gZXh0ZW5kcyBDb21wb25lbnRIYXJuZXNzIHtcbiAgcHJvdGVjdGVkIF9pdGVtSGFybmVzczogVDtcblxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2YgaGFybmVzc2VzIHJlcHJlc2VudGluZyB0aGUgaXRlbXMgaW4gdGhpcyBsaXN0LlxuICAgKiBAcGFyYW0gZmlsdGVycyBPcHRpb25hbCBmaWx0ZXJzIHVzZWQgdG8gbmFycm93IHdoaWNoIGhhcm5lc3NlcyBhcmUgaW5jbHVkZWRcbiAgICogQHJldHVybiBUaGUgbGlzdCBvZiBpdGVtcyBtYXRjaGluZyB0aGUgZ2l2ZW4gZmlsdGVycy5cbiAgICovXG4gIGFzeW5jIGdldEl0ZW1zKGZpbHRlcnM/OiBGKTogUHJvbWlzZTxDW10+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhdG9yRm9yQWxsKHRoaXMuX2l0ZW1IYXJuZXNzLndpdGgoZmlsdGVycykpKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2YgYExpc3RTZWN0aW9uYCByZXByZXNlbnRpbmcgdGhlIGxpc3QgaXRlbXMgZ3JvdXBlZCBieSBzdWJoZWFkZXJzLiBJZiB0aGUgbGlzdCBoYXNcbiAgICogbm8gc3ViaGVhZGVycyBpdCBpcyByZXByZXNlbnRlZCBhcyBhIHNpbmdsZSBgTGlzdFNlY3Rpb25gIHdpdGggYW4gdW5kZWZpbmVkIGBoZWFkaW5nYCBwcm9wZXJ0eS5cbiAgICogQHBhcmFtIGZpbHRlcnMgT3B0aW9uYWwgZmlsdGVycyB1c2VkIHRvIG5hcnJvdyB3aGljaCBsaXN0IGl0ZW0gaGFybmVzc2VzIGFyZSBpbmNsdWRlZFxuICAgKiBAcmV0dXJuIFRoZSBsaXN0IG9mIGl0ZW1zIG1hdGNoaW5nIHRoZSBnaXZlbiBmaWx0ZXJzLCBncm91cGVkIGludG8gc2VjdGlvbnMgYnkgc3ViaGVhZGVyLlxuICAgKi9cbiAgYXN5bmMgZ2V0SXRlbXNHcm91cGVkQnlTdWJoZWFkZXIoZmlsdGVycz86IEYpOiBQcm9taXNlPExpc3RTZWN0aW9uPEM+W10+IHtcbiAgICB0eXBlIFNlY3Rpb24gPSB7aXRlbXM6IENbXSwgaGVhZGluZz86IFByb21pc2U8c3RyaW5nPn07XG4gICAgY29uc3QgbGlzdFNlY3Rpb25zOiBTZWN0aW9uW10gPSBbXTtcbiAgICBsZXQgY3VycmVudFNlY3Rpb246IFNlY3Rpb24gPSB7aXRlbXM6IFtdfTtcbiAgICBjb25zdCBpdGVtc0FuZFN1YmhlYWRlcnMgPVxuICAgICAgICBhd2FpdCB0aGlzLmdldEl0ZW1zV2l0aFN1YmhlYWRlcnNBbmREaXZpZGVycyh7aXRlbTogZmlsdGVycywgZGl2aWRlcjogZmFsc2V9KTtcbiAgICBmb3IgKGNvbnN0IGl0ZW1PclN1YmhlYWRlciBvZiBpdGVtc0FuZFN1YmhlYWRlcnMpIHtcbiAgICAgIGlmIChpdGVtT3JTdWJoZWFkZXIgaW5zdGFuY2VvZiBNYXRTdWJoZWFkZXJIYXJuZXNzKSB7XG4gICAgICAgIGlmIChjdXJyZW50U2VjdGlvbi5oZWFkaW5nICE9PSB1bmRlZmluZWQgfHwgY3VycmVudFNlY3Rpb24uaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgbGlzdFNlY3Rpb25zLnB1c2goY3VycmVudFNlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRTZWN0aW9uID0ge2hlYWRpbmc6IGl0ZW1PclN1YmhlYWRlci5nZXRUZXh0KCksIGl0ZW1zOiBbXX07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50U2VjdGlvbi5pdGVtcy5wdXNoKGl0ZW1PclN1YmhlYWRlcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjdXJyZW50U2VjdGlvbi5oZWFkaW5nICE9PSB1bmRlZmluZWQgfHwgY3VycmVudFNlY3Rpb24uaXRlbXMubGVuZ3RoIHx8XG4gICAgICAgICFsaXN0U2VjdGlvbnMubGVuZ3RoKSB7XG4gICAgICBsaXN0U2VjdGlvbnMucHVzaChjdXJyZW50U2VjdGlvbik7XG4gICAgfVxuXG4gICAgLy8gQ29uY3VycmVudGx5IHdhaXQgZm9yIGFsbCBzZWN0aW9ucyB0byByZXNvbHZlIHRoZWlyIGhlYWRpbmcgaWYgcHJlc2VudC5cbiAgICByZXR1cm4gcGFyYWxsZWwoKCkgPT4gbGlzdFNlY3Rpb25zLm1hcChhc3luYyAocykgPT5cbiAgICAgICh7aXRlbXM6IHMuaXRlbXMsIGhlYWRpbmc6IGF3YWl0IHMuaGVhZGluZ30pKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2Ygc3ViLWxpc3RzIHJlcHJlc2VudGluZyB0aGUgbGlzdCBpdGVtcyBncm91cGVkIGJ5IGRpdmlkZXJzLiBJZiB0aGUgbGlzdCBoYXMgbm9cbiAgICogZGl2aWRlcnMgaXQgaXMgcmVwcmVzZW50ZWQgYXMgYSBsaXN0IHdpdGggYSBzaW5nbGUgc3ViLWxpc3QuXG4gICAqIEBwYXJhbSBmaWx0ZXJzIE9wdGlvbmFsIGZpbHRlcnMgdXNlZCB0byBuYXJyb3cgd2hpY2ggbGlzdCBpdGVtIGhhcm5lc3NlcyBhcmUgaW5jbHVkZWRcbiAgICogQHJldHVybiBUaGUgbGlzdCBvZiBpdGVtcyBtYXRjaGluZyB0aGUgZ2l2ZW4gZmlsdGVycywgZ3JvdXBlZCBpbnRvIHN1Yi1saXN0cyBieSBkaXZpZGVyLlxuICAgKi9cbiAgYXN5bmMgZ2V0SXRlbXNHcm91cGVkQnlEaXZpZGVycyhmaWx0ZXJzPzogRik6IFByb21pc2U8Q1tdW10+IHtcbiAgICBjb25zdCBsaXN0U2VjdGlvbnM6IENbXVtdID0gW1tdXTtcbiAgICBjb25zdCBpdGVtc0FuZERpdmlkZXJzID1cbiAgICAgICAgYXdhaXQgdGhpcy5nZXRJdGVtc1dpdGhTdWJoZWFkZXJzQW5kRGl2aWRlcnMoe2l0ZW06IGZpbHRlcnMsIHN1YmhlYWRlcjogZmFsc2V9KTtcbiAgICBmb3IgKGNvbnN0IGl0ZW1PckRpdmlkZXIgb2YgaXRlbXNBbmREaXZpZGVycykge1xuICAgICAgaWYgKGl0ZW1PckRpdmlkZXIgaW5zdGFuY2VvZiBNYXREaXZpZGVySGFybmVzcykge1xuICAgICAgICBsaXN0U2VjdGlvbnMucHVzaChbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaXN0U2VjdGlvbnNbbGlzdFNlY3Rpb25zLmxlbmd0aCAtIDFdLnB1c2goaXRlbU9yRGl2aWRlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsaXN0U2VjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2YgaGFybmVzc2VzIHJlcHJlc2VudGluZyBhbGwgb2YgdGhlIGl0ZW1zLCBzdWJoZWFkZXJzLCBhbmQgZGl2aWRlcnNcbiAgICogKGluIHRoZSBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgbGlzdCkuIFVzZSBgaW5zdGFuY2VvZmAgdG8gY2hlY2sgd2hpY2ggdHlwZSBvZiBoYXJuZXNzIGEgZ2l2ZW5cbiAgICogaXRlbSBpcy5cbiAgICogQHBhcmFtIGZpbHRlcnMgT3B0aW9uYWwgZmlsdGVycyB1c2VkIHRvIG5hcnJvdyB3aGljaCBsaXN0IGl0ZW1zLCBzdWJoZWFkZXJzLCBhbmQgZGl2aWRlcnMgYXJlXG4gICAqICAgICBpbmNsdWRlZC4gQSB2YWx1ZSBvZiBgZmFsc2VgIGZvciB0aGUgYGl0ZW1gLCBgc3ViaGVhZGVyYCwgb3IgYGRpdmlkZXJgIHByb3BlcnRpZXMgaW5kaWNhdGVzXG4gICAqICAgICB0aGF0IHRoZSByZXNwZWN0aXZlIGhhcm5lc3MgdHlwZSBzaG91bGQgYmUgb21pdHRlZCBjb21wbGV0ZWx5LlxuICAgKiBAcmV0dXJuIFRoZSBsaXN0IG9mIGhhcm5lc3NlcyByZXByZXNlbnRpbmcgdGhlIGl0ZW1zLCBzdWJoZWFkZXJzLCBhbmQgZGl2aWRlcnMgbWF0Y2hpbmcgdGhlXG4gICAqICAgICBnaXZlbiBmaWx0ZXJzLlxuICAgKi9cbiAgZ2V0SXRlbXNXaXRoU3ViaGVhZGVyc0FuZERpdmlkZXJzKGZpbHRlcnM6IHtcbiAgICBpdGVtOiBmYWxzZSxcbiAgICBzdWJoZWFkZXI6IGZhbHNlLFxuICAgIGRpdmlkZXI6IGZhbHNlXG4gIH0pOiBQcm9taXNlPFtdPjtcbiAgZ2V0SXRlbXNXaXRoU3ViaGVhZGVyc0FuZERpdmlkZXJzKGZpbHRlcnM6IHtcbiAgICBpdGVtPzogRiB8IGZhbHNlLFxuICAgIHN1YmhlYWRlcjogZmFsc2UsXG4gICAgZGl2aWRlcjogZmFsc2VcbiAgfSk6IFByb21pc2U8Q1tdPjtcbiAgZ2V0SXRlbXNXaXRoU3ViaGVhZGVyc0FuZERpdmlkZXJzKGZpbHRlcnM6IHtcbiAgICBpdGVtOiBmYWxzZSxcbiAgICBzdWJoZWFkZXI/OiBTdWJoZWFkZXJIYXJuZXNzRmlsdGVycyB8IGZhbHNlLFxuICAgIGRpdmlkZXI6IGZhbHNlXG4gIH0pOiBQcm9taXNlPE1hdFN1YmhlYWRlckhhcm5lc3NbXT47XG4gIGdldEl0ZW1zV2l0aFN1YmhlYWRlcnNBbmREaXZpZGVycyhmaWx0ZXJzOiB7XG4gICAgaXRlbTogZmFsc2UsXG4gICAgc3ViaGVhZGVyOiBmYWxzZSxcbiAgICBkaXZpZGVyPzogRGl2aWRlckhhcm5lc3NGaWx0ZXJzIHwgZmFsc2VcbiAgfSk6IFByb21pc2U8TWF0RGl2aWRlckhhcm5lc3NbXT47XG4gIGdldEl0ZW1zV2l0aFN1YmhlYWRlcnNBbmREaXZpZGVycyhmaWx0ZXJzOiB7XG4gICAgaXRlbT86IEYgfCBmYWxzZSxcbiAgICBzdWJoZWFkZXI/OiBTdWJoZWFkZXJIYXJuZXNzRmlsdGVycyB8IGZhbHNlLFxuICAgIGRpdmlkZXI6IGZhbHNlXG4gIH0pOiBQcm9taXNlPChDIHwgTWF0U3ViaGVhZGVySGFybmVzcylbXT47XG4gIGdldEl0ZW1zV2l0aFN1YmhlYWRlcnNBbmREaXZpZGVycyhmaWx0ZXJzOiB7XG4gICAgaXRlbT86IEYgfCBmYWxzZSxcbiAgICBzdWJoZWFkZXI6IGZhbHNlLFxuICAgIGRpdmlkZXI/OiBmYWxzZSB8IERpdmlkZXJIYXJuZXNzRmlsdGVyc1xuICB9KTogUHJvbWlzZTwoQyB8IE1hdERpdmlkZXJIYXJuZXNzKVtdPjtcbiAgZ2V0SXRlbXNXaXRoU3ViaGVhZGVyc0FuZERpdmlkZXJzKGZpbHRlcnM6IHtcbiAgICBpdGVtOiBmYWxzZSxcbiAgICBzdWJoZWFkZXI/OiBmYWxzZSB8IFN1YmhlYWRlckhhcm5lc3NGaWx0ZXJzLFxuICAgIGRpdmlkZXI/OiBmYWxzZSB8IERpdmlkZXJIYXJuZXNzRmlsdGVyc1xuICB9KTogUHJvbWlzZTwoTWF0U3ViaGVhZGVySGFybmVzcyB8IE1hdERpdmlkZXJIYXJuZXNzKVtdPjtcbiAgZ2V0SXRlbXNXaXRoU3ViaGVhZGVyc0FuZERpdmlkZXJzKGZpbHRlcnM/OiB7XG4gICAgaXRlbT86IEYgfCBmYWxzZSxcbiAgICBzdWJoZWFkZXI/OiBTdWJoZWFkZXJIYXJuZXNzRmlsdGVycyB8IGZhbHNlLFxuICAgIGRpdmlkZXI/OiBEaXZpZGVySGFybmVzc0ZpbHRlcnMgfCBmYWxzZVxuICB9KTogUHJvbWlzZTwoQyB8IE1hdFN1YmhlYWRlckhhcm5lc3MgfCBNYXREaXZpZGVySGFybmVzcylbXT47XG4gIGFzeW5jIGdldEl0ZW1zV2l0aFN1YmhlYWRlcnNBbmREaXZpZGVycyhmaWx0ZXJzOiB7XG4gICAgaXRlbT86IEYgfCBmYWxzZSxcbiAgICBzdWJoZWFkZXI/OiBTdWJoZWFkZXJIYXJuZXNzRmlsdGVycyB8IGZhbHNlLFxuICAgIGRpdmlkZXI/OiBEaXZpZGVySGFybmVzc0ZpbHRlcnMgfCBmYWxzZVxuICB9ID0ge30pOiBQcm9taXNlPChDIHwgTWF0U3ViaGVhZGVySGFybmVzcyB8IE1hdERpdmlkZXJIYXJuZXNzKVtdPiB7XG4gICAgY29uc3QgcXVlcnkgPSBbXTtcbiAgICBpZiAoZmlsdGVycy5pdGVtICE9PSBmYWxzZSkge1xuICAgICAgcXVlcnkucHVzaCh0aGlzLl9pdGVtSGFybmVzcy53aXRoKGZpbHRlcnMuaXRlbSB8fCB7fSBhcyBGKSk7XG4gICAgfVxuICAgIGlmIChmaWx0ZXJzLnN1YmhlYWRlciAhPT0gZmFsc2UpIHtcbiAgICAgIHF1ZXJ5LnB1c2goTWF0U3ViaGVhZGVySGFybmVzcy53aXRoKGZpbHRlcnMuc3ViaGVhZGVyKSk7XG4gICAgfVxuICAgIGlmIChmaWx0ZXJzLmRpdmlkZXIgIT09IGZhbHNlKSB7XG4gICAgICBxdWVyeS5wdXNoKE1hdERpdmlkZXJIYXJuZXNzLndpdGgoZmlsdGVycy5kaXZpZGVyKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvY2F0b3JGb3JBbGwoLi4ucXVlcnkpKCk7XG4gIH1cbn1cbiJdfQ==