UNPKG

carbon-components-angular

Version:
140 lines 15.7 kB
import { Injectable } from "@angular/core"; import { toString } from "@carbon/icon-helpers"; import * as i0 from "@angular/core"; /** * Abstract class that represent a cache of icons. * * The actual caching mechanism will be implementation specific, * but it's likely a good idea to key by the icons name and/or size. * Icon name and size will always be strings, and they will be the two consistent * identifiers of an icon. For the purposes of storage additonal descriptor properties may * be used, but the name and size are the only ones guarenteed to be passed for lookup purposes. */ export class IconCache { } /** * Custom error for when a name can't be found */ export class IconNameNotFoundError extends Error { constructor(name) { super(`Icon ${name} not found`); } } /** * Custom error for when a specific size can't be found */ export class IconSizeNotFoundError extends Error { constructor(size, name) { super("Size ${size} for ${name} not found"); } } /** * Concrete implementation of `IconCache` as a simple in memory cache */ export class IconMemoryCache extends IconCache { constructor() { super(...arguments); this.iconMap = new Map(); } get(name, size) { if (!this.iconMap.has(name)) { throw new IconNameNotFoundError(name); } const sizeMap = this.iconMap.get(name); if (!sizeMap.has(size)) { throw new IconSizeNotFoundError(size, name); } return sizeMap.get(size); } set(name, size, descriptor) { if (!this.iconMap.has(name)) { this.iconMap.set(name, new Map()); } const sizeMap = this.iconMap.get(name); sizeMap.set(size, descriptor); } } /** * The icon service is a singleton service responsible for registering and retriving icons from `@carbon/icons`. * * It's important to register icons before use. It's reccommended to register your icons early, likely in your app.component. * * To allow for improved tree shaking _do not_ import all the icons from `@carbon/icons` and register them. * Instead register only the icons in use by your application. If your application makes use of lazy loaded * modules you may also lazy load the icons used in that module by registering them early on in that module. * * `ngOnInit` should be sufficiantly early to register icons. * * Example: * ``` * import { Accessibility16 } from "@carbon/icons"; * * // ... * * class MyComponent implements OnInit { * constructor(protected iconService: IconService) {} * * // ... * * ngOnInit() { * this.iconService.register(Accessibility16); * } * * // ... * } * ``` * * If needed it is possible to register an icon under a different name, via `registerAs`. */ export class IconService { constructor() { this.iconCache = new IconMemoryCache(); } /** * Registers an array of icons based on the metadata provided by `@carbon/icons` */ registerAll(descriptors) { descriptors.forEach(icon => this.register(icon)); } /** * Registers an icon based on the metadata provided by `@carbon/icons` */ register(descriptor) { const { name } = descriptor; this.registerAs(name, descriptor); } /** * Registers an icon based on a uniqe name and metadata provided by `@carbon/icons` */ registerAs(name, descriptor) { const { size } = descriptor; this.iconCache.set(name, size.toString(), descriptor); } /** * Gets an icon, converts it to a string, and caches the result */ get(name, size) { try { const icon = this.iconCache.get(name, size.toString()); if (!icon.svg) { icon.svg = toString(icon); } return icon; } catch (e) { throw e; } } /** * Configure various service settings (caching strategy ...) */ configure(options) { this.iconCache = options.cache; } } IconService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IconService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); IconService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IconService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IconService, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ljb24vaWNvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQTZFaEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE9BQWdCLFNBQVM7Q0FTOUI7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxLQUFLO0lBQy9DLFlBQVksSUFBWTtRQUN2QixLQUFLLENBQUMsUUFBUSxJQUFJLFlBQVksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDRDtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHFCQUFzQixTQUFRLEtBQUs7SUFDL0MsWUFBWSxJQUFZLEVBQUUsSUFBWTtRQUNyQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0Q7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLFNBQVM7SUFBOUM7O1FBQ1MsWUFBTyxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO0lBb0IxRCxDQUFDO0lBbEJBLEdBQUcsQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDNUIsTUFBTSxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsTUFBTSxJQUFJLHFCQUFxQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM1QztRQUNELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsVUFBa0I7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDbEM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvQixDQUFDO0NBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUVILE1BQU0sT0FBTyxXQUFXO0lBRHhCO1FBRVMsY0FBUyxHQUFjLElBQUksZUFBZSxFQUFFLENBQUM7S0E4Q3JEO0lBNUNBOztPQUVHO0lBQ0ksV0FBVyxDQUFDLFdBQXFCO1FBQ3ZDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUSxDQUFDLFVBQWtCO1FBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxVQUE0QixDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBQyxJQUFZLEVBQUUsVUFBa0I7UUFDakQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQTRCLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxHQUFHLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDcEMsSUFBSTtZQUNILE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQW1CLENBQUM7WUFDekUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDMUI7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNaO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWCxNQUFNLENBQUMsQ0FBQztTQUNSO0lBQ0YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLE9BQTZCO1FBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDOzt3R0E5Q1csV0FBVzs0R0FBWCxXQUFXOzJGQUFYLFdBQVc7a0JBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHRvU3RyaW5nIH0gZnJvbSBcIkBjYXJib24vaWNvbi1oZWxwZXJzXCI7XG5cbi8vIGljb24gaW1wb3J0c1xuaW1wb3J0IHtcblx0QWRkMTYsXG5cdENhbGVuZGFyMTYsXG5cdENhcmV0RG93bjE2LFxuXHRDYXJldExlZnQxNixcblx0Q2FyZXRSaWdodDE2LFxuXHRDYXJldFVwMTYsXG5cdENoZWNrbWFyazE2LFxuXHRDaGVja21hcmtGaWxsZWQxNixcblx0Q2hlY2ttYXJrT3V0bGluZTE2LFxuXHRDaGV2cm9uRG93bjE2LFxuXHRDaGV2cm9uUmlnaHQxNixcblx0Q2xvc2UxNixcblx0Q29weTE2LFxuXHREb3dubG9hZDE2LFxuXHRFcnJvckZpbGxlZDE2LFxuXHRJbmZvcm1hdGlvbkZpbGxlZDE2LFxuXHRNZW51MTYsXG5cdE92ZXJmbG93TWVudVZlcnRpY2FsMTYsXG5cdFNhdmUxNixcblx0U2V0dGluZ3MxNixcblx0VHJhc2hDYW4xNixcblx0V2FybmluZzE2LFxuXHRXYXJuaW5nRmlsbGVkMTZcbn0gZnJvbSBcIkBjYXJib24vaWNvbnNcIjtcblxuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgcGFyc2VkIGljb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJY29uRGVzY3JpcHRvciB7XG5cdC8qKlxuXHQgKiBUaGUgZWxlbWVudCB0byByZW5kZXIuIEZvciB0aGUgcm9vdCB0aGlzIGlzIGBzdmdgXG5cdCAqL1xuXHRlbGVtOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBBbiBvYmplY3Qgb2YgYXR0cmlidXRlcyB0byBhcHBseSB0byB0aGUgZWxlbWVudC5cblx0ICpcblx0ICogVGhlIHR5cGUgaGVyZSBpcyBub24tZXhoYXVzdGl2ZS5cblx0ICovXG5cdGF0dHJzOiB7XG5cdFx0eG1sbnM6IHN0cmluZyxcblx0XHQvLyBuZWVkZWQgYnkgdGhlIGljb24gZGlyZWN0aXZlIHRvIGRldGVybWluZSBvdGhlciBhdHRyaWJ1dGVzXG5cdFx0dmlld0JveDogc3RyaW5nLFxuXHRcdGZpbGw6IHN0cmluZyxcblx0XHQvLyBuZWVkZWQgYnkgdGhlIGljb24gZGlyZWN0aXZlIHRvIGRldGVybWluZSBvdGhlciBhdHRyaWJ1dGVzXG5cdFx0d2lkdGg6IHN0cmluZyxcblx0XHQvLyBuZWVkZWQgYnkgdGhlIGljb24gZGlyZWN0aXZlIHRvIGRldGVybWluZSBvdGhlciBhdHRyaWJ1dGVzXG5cdFx0aGVpZ2h0OiBzdHJpbmcsXG5cdFx0W3g6IHN0cmluZ106IHN0cmluZ1xuXHR9O1xuXHQvKipcblx0ICogVGhlIGNvbnRlbnQgKGNoaWxkcmVuKSBvZiB0aGUgZWxlbWVudCBhcyBhbiBhcnJheSBvZiBgSWNvbkRlc2NyaXB0b3Jgc1xuXHQgKiAodXN1YWxseSB3aXRob3V0IGEgZmV3IGZpZWxkcywgbmFtZWx5IGBuYW1lYCBhbmQgYHNpemVgKVxuXHQgKi9cblx0Y29udGVudDogSWNvbkRlc2NyaXB0b3JbXTtcblx0LyoqXG5cdCAqIFRoZSBuYW1lIG9mIHRoZSBpY29uLlxuXHQgKlxuXHQgKiBOZWVkZWQgYnkgdGhlIGljb24gc2VydmljZS5cblx0ICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBzaXplIG9mIHRoZSBpY29uIGluIHBpeGVscy5cblx0ICpcblx0ICogTmVlZGVkIGJ5IHRoZSBpY29uIHNlcnZpY2UuXG5cdCAqL1xuXHRzaXplOiBudW1iZXI7XG5cdC8qKlxuXHQgKiBPcHRpb25hbC4gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbXBpbGVkIHN2Zy5cblx0ICogSWYgbWlzc2luZyB0aGUgaWNvbiBzZXJ2aWNlIHdpbGwgYWRkIHRoaXMuXG5cdCAqL1xuXHRzdmc/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQWJzdHJhY3QgY2xhc3MgdGhhdCByZXByZXNlbnQgYSBjYWNoZSBvZiBpY29ucy5cbiAqXG4gKiBUaGUgYWN0dWFsIGNhY2hpbmcgbWVjaGFuaXNtIHdpbGwgYmUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMsXG4gKiBidXQgaXQncyBsaWtlbHkgYSBnb29kIGlkZWEgdG8ga2V5IGJ5IHRoZSBpY29ucyBuYW1lIGFuZC9vciBzaXplLlxuICogSWNvbiBuYW1lIGFuZCBzaXplIHdpbGwgYWx3YXlzIGJlIHN0cmluZ3MsIGFuZCB0aGV5IHdpbGwgYmUgdGhlIHR3byBjb25zaXN0ZW50XG4gKiBpZGVudGlmaWVycyBvZiBhbiBpY29uLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHN0b3JhZ2UgYWRkaXRvbmFsIGRlc2NyaXB0b3IgcHJvcGVydGllcyBtYXlcbiAqIGJlIHVzZWQsIGJ1dCB0aGUgbmFtZSBhbmQgc2l6ZSBhcmUgdGhlIG9ubHkgb25lcyBndWFyZW50ZWVkIHRvIGJlIHBhc3NlZCBmb3IgbG9va3VwIHB1cnBvc2VzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSWNvbkNhY2hlIHtcblx0LyoqXG5cdCAqIEZpbmRzIGFuZCByZXR1cm5zIGFuIGljb24gYmFzZWQgb24gaXQncyBuYW1lIGFuZCBzaXplXG5cdCAqL1xuXHRhYnN0cmFjdCBnZXQobmFtZTogc3RyaW5nLCBzaXplOiBzdHJpbmcpOiBvYmplY3Q7XG5cdC8qKlxuXHQgKiBzdG9yZXMgYW4gaWNvbiBkZXNjcmlwdG9yIHRvIHRoZSBjYWNoZVxuXHQgKi9cblx0YWJzdHJhY3Qgc2V0KG5hbWU6IHN0cmluZywgc2l6ZTogc3RyaW5nLCBkZXNjcmlwdG9yOiBvYmplY3QpOiB2b2lkO1xufVxuXG4vKipcbiAqIEN1c3RvbSBlcnJvciBmb3Igd2hlbiBhIG5hbWUgY2FuJ3QgYmUgZm91bmRcbiAqL1xuZXhwb3J0IGNsYXNzIEljb25OYW1lTm90Rm91bmRFcnJvciBleHRlbmRzIEVycm9yIHtcblx0Y29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIoYEljb24gJHtuYW1lfSBub3QgZm91bmRgKTtcblx0fVxufVxuXG4vKipcbiAqIEN1c3RvbSBlcnJvciBmb3Igd2hlbiBhIHNwZWNpZmljIHNpemUgY2FuJ3QgYmUgZm91bmRcbiAqL1xuZXhwb3J0IGNsYXNzIEljb25TaXplTm90Rm91bmRFcnJvciBleHRlbmRzIEVycm9yIHtcblx0Y29uc3RydWN0b3Ioc2l6ZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcblx0XHRzdXBlcihcIlNpemUgJHtzaXplfSBmb3IgJHtuYW1lfSBub3QgZm91bmRcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBgSWNvbkNhY2hlYCBhcyBhIHNpbXBsZSBpbiBtZW1vcnkgY2FjaGVcbiAqL1xuZXhwb3J0IGNsYXNzIEljb25NZW1vcnlDYWNoZSBleHRlbmRzIEljb25DYWNoZSB7XG5cdHByaXZhdGUgaWNvbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBvYmplY3Q+PigpO1xuXG5cdGdldChuYW1lOiBzdHJpbmcsIHNpemU6IHN0cmluZykge1xuXHRcdGlmICghdGhpcy5pY29uTWFwLmhhcyhuYW1lKSkge1xuXHRcdFx0dGhyb3cgbmV3IEljb25OYW1lTm90Rm91bmRFcnJvcihuYW1lKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2l6ZU1hcCA9IHRoaXMuaWNvbk1hcC5nZXQobmFtZSk7XG5cdFx0aWYgKCFzaXplTWFwLmhhcyhzaXplKSkge1xuXHRcdFx0dGhyb3cgbmV3IEljb25TaXplTm90Rm91bmRFcnJvcihzaXplLCBuYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNpemVNYXAuZ2V0KHNpemUpO1xuXHR9XG5cblx0c2V0KG5hbWU6IHN0cmluZywgc2l6ZTogc3RyaW5nLCBkZXNjcmlwdG9yOiBvYmplY3QpIHtcblx0XHRpZiAoIXRoaXMuaWNvbk1hcC5oYXMobmFtZSkpIHtcblx0XHRcdHRoaXMuaWNvbk1hcC5zZXQobmFtZSwgbmV3IE1hcCgpKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2l6ZU1hcCA9IHRoaXMuaWNvbk1hcC5nZXQobmFtZSk7XG5cdFx0c2l6ZU1hcC5zZXQoc2l6ZSwgZGVzY3JpcHRvcik7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGUgaWNvbiBzZXJ2aWNlIGlzIGEgc2luZ2xldG9uIHNlcnZpY2UgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIGFuZCByZXRyaXZpbmcgaWNvbnMgZnJvbSBgQGNhcmJvbi9pY29uc2AuXG4gKlxuICogSXQncyBpbXBvcnRhbnQgdG8gcmVnaXN0ZXIgaWNvbnMgYmVmb3JlIHVzZS4gSXQncyByZWNjb21tZW5kZWQgdG8gcmVnaXN0ZXIgeW91ciBpY29ucyBlYXJseSwgbGlrZWx5IGluIHlvdXIgYXBwLmNvbXBvbmVudC5cbiAqXG4gKiBUbyBhbGxvdyBmb3IgaW1wcm92ZWQgdHJlZSBzaGFraW5nIF9kbyBub3RfIGltcG9ydCBhbGwgdGhlIGljb25zIGZyb20gYEBjYXJib24vaWNvbnNgIGFuZCByZWdpc3RlciB0aGVtLlxuICogSW5zdGVhZCByZWdpc3RlciBvbmx5IHRoZSBpY29ucyBpbiB1c2UgYnkgeW91ciBhcHBsaWNhdGlvbi4gSWYgeW91ciBhcHBsaWNhdGlvbiBtYWtlcyB1c2Ugb2YgbGF6eSBsb2FkZWRcbiAqIG1vZHVsZXMgeW91IG1heSBhbHNvIGxhenkgbG9hZCB0aGUgaWNvbnMgdXNlZCBpbiB0aGF0IG1vZHVsZSBieSByZWdpc3RlcmluZyB0aGVtIGVhcmx5IG9uIGluIHRoYXQgbW9kdWxlLlxuICpcbiAqIGBuZ09uSW5pdGAgc2hvdWxkIGJlIHN1ZmZpY2lhbnRseSBlYXJseSB0byByZWdpc3RlciBpY29ucy5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgXG4gKiBpbXBvcnQgeyBBY2Nlc3NpYmlsaXR5MTYgfSBmcm9tIFwiQGNhcmJvbi9pY29uc1wiO1xuICpcbiAqIC8vIC4uLlxuICpcbiAqIGNsYXNzIE15Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAqIFx0Y29uc3RydWN0b3IocHJvdGVjdGVkIGljb25TZXJ2aWNlOiBJY29uU2VydmljZSkge31cbiAqXG4gKiBcdC8vIC4uLlxuICpcbiAqIFx0bmdPbkluaXQoKSB7XG4gKiBcdFx0dGhpcy5pY29uU2VydmljZS5yZWdpc3RlcihBY2Nlc3NpYmlsaXR5MTYpO1xuICogXHR9XG4gKlxuICogXHQvLyAuLi5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIElmIG5lZWRlZCBpdCBpcyBwb3NzaWJsZSB0byByZWdpc3RlciBhbiBpY29uIHVuZGVyIGEgZGlmZmVyZW50IG5hbWUsIHZpYSBgcmVnaXN0ZXJBc2AuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJY29uU2VydmljZSB7XG5cdHByaXZhdGUgaWNvbkNhY2hlOiBJY29uQ2FjaGUgPSBuZXcgSWNvbk1lbW9yeUNhY2hlKCk7XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBhcnJheSBvZiBpY29ucyBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgYEBjYXJib24vaWNvbnNgXG5cdCAqL1xuXHRwdWJsaWMgcmVnaXN0ZXJBbGwoZGVzY3JpcHRvcnM6IG9iamVjdFtdKSB7XG5cdFx0ZGVzY3JpcHRvcnMuZm9yRWFjaChpY29uID0+IHRoaXMucmVnaXN0ZXIoaWNvbikpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBpY29uIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBwcm92aWRlZCBieSBgQGNhcmJvbi9pY29uc2Bcblx0ICovXG5cdHB1YmxpYyByZWdpc3RlcihkZXNjcmlwdG9yOiBvYmplY3QpIHtcblx0XHRjb25zdCB7IG5hbWUgfSA9IGRlc2NyaXB0b3IgYXMgSWNvbkRlc2NyaXB0b3I7XG5cdFx0dGhpcy5yZWdpc3RlckFzKG5hbWUsIGRlc2NyaXB0b3IpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBpY29uIGJhc2VkIG9uIGEgdW5pcWUgbmFtZSBhbmQgbWV0YWRhdGEgcHJvdmlkZWQgYnkgYEBjYXJib24vaWNvbnNgXG5cdCAqL1xuXHRwdWJsaWMgcmVnaXN0ZXJBcyhuYW1lOiBzdHJpbmcsIGRlc2NyaXB0b3I6IG9iamVjdCkge1xuXHRcdGNvbnN0IHsgc2l6ZSB9ID0gZGVzY3JpcHRvciBhcyBJY29uRGVzY3JpcHRvcjtcblx0XHR0aGlzLmljb25DYWNoZS5zZXQobmFtZSwgc2l6ZS50b1N0cmluZygpLCBkZXNjcmlwdG9yKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGFuIGljb24sIGNvbnZlcnRzIGl0IHRvIGEgc3RyaW5nLCBhbmQgY2FjaGVzIHRoZSByZXN1bHRcblx0ICovXG5cdHB1YmxpYyBnZXQobmFtZTogc3RyaW5nLCBzaXplOiBzdHJpbmcpOiBJY29uRGVzY3JpcHRvciB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGljb24gPSB0aGlzLmljb25DYWNoZS5nZXQobmFtZSwgc2l6ZS50b1N0cmluZygpKSBhcyBJY29uRGVzY3JpcHRvcjtcblx0XHRcdGlmICghaWNvbi5zdmcpIHtcblx0XHRcdFx0aWNvbi5zdmcgPSB0b1N0cmluZyhpY29uKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBpY29uO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRocm93IGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpZ3VyZSB2YXJpb3VzIHNlcnZpY2Ugc2V0dGluZ3MgKGNhY2hpbmcgc3RyYXRlZ3kgLi4uKVxuXHQgKi9cblx0cHVibGljIGNvbmZpZ3VyZShvcHRpb25zOiB7IGNhY2hlOiBJY29uQ2FjaGUgfSkge1xuXHRcdHRoaXMuaWNvbkNhY2hlID0gb3B0aW9ucy5jYWNoZTtcblx0fVxufVxuIl19