carbon-components-angular
Version:
Next generation components
140 lines • 15.9 kB
JavaScript
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) {
let { size, attrs: { width } } = descriptor;
this.iconCache.set(name, (size ?? width).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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ljb24vaWNvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQTZFaEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE9BQWdCLFNBQVM7Q0FTOUI7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxLQUFLO0lBQy9DLFlBQVksSUFBWTtRQUN2QixLQUFLLENBQUMsUUFBUSxJQUFJLFlBQVksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDRDtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHFCQUFzQixTQUFRLEtBQUs7SUFDL0MsWUFBWSxJQUFZLEVBQUUsSUFBWTtRQUNyQyxLQUFLLENBQUMsUUFBUSxJQUFJLFFBQVEsSUFBSSxZQUFZLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0Q7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLFNBQVM7SUFBOUM7O1FBQ1MsWUFBTyxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO0lBb0IxRCxDQUFDO0lBbEJBLEdBQUcsQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDNUIsTUFBTSxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsTUFBTSxJQUFJLHFCQUFxQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM1QztRQUNELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsVUFBa0I7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDbEM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvQixDQUFDO0NBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUVILE1BQU0sT0FBTyxXQUFXO0lBRHhCO1FBRVMsY0FBUyxHQUFjLElBQUksZUFBZSxFQUFFLENBQUM7S0E4Q3JEO0lBNUNBOztPQUVHO0lBQ0ksV0FBVyxDQUFDLFdBQXFCO1FBQ3ZDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUSxDQUFDLFVBQWtCO1FBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxVQUE0QixDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBQyxJQUFZLEVBQUUsVUFBa0I7UUFDakQsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLFVBQTRCLENBQUM7UUFDOUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7T0FFRztJQUNJLEdBQUcsQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUNwQyxJQUFJO1lBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBbUIsQ0FBQztZQUN6RSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMxQjtZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNYLE1BQU0sQ0FBQyxDQUFDO1NBQ1I7SUFDRixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTLENBQUMsT0FBNkI7UUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ2hDLENBQUM7O3dHQTlDVyxXQUFXOzRHQUFYLFdBQVc7MkZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgdG9TdHJpbmcgfSBmcm9tIFwiQGNhcmJvbi9pY29uLWhlbHBlcnNcIjtcblxuLy8gaWNvbiBpbXBvcnRzXG5pbXBvcnQge1xuXHRBZGQxNixcblx0Q2FsZW5kYXIxNixcblx0Q2FyZXREb3duMTYsXG5cdENhcmV0TGVmdDE2LFxuXHRDYXJldFJpZ2h0MTYsXG5cdENhcmV0VXAxNixcblx0Q2hlY2ttYXJrMTYsXG5cdENoZWNrbWFya0ZpbGxlZDE2LFxuXHRDaGVja21hcmtPdXRsaW5lMTYsXG5cdENoZXZyb25Eb3duMTYsXG5cdENoZXZyb25SaWdodDE2LFxuXHRDbG9zZTE2LFxuXHRDb3B5MTYsXG5cdERvd25sb2FkMTYsXG5cdEVycm9yRmlsbGVkMTYsXG5cdEluZm9ybWF0aW9uRmlsbGVkMTYsXG5cdE1lbnUxNixcblx0T3ZlcmZsb3dNZW51VmVydGljYWwxNixcblx0U2F2ZTE2LFxuXHRTZXR0aW5nczE2LFxuXHRUcmFzaENhbjE2LFxuXHRXYXJuaW5nMTYsXG5cdFdhcm5pbmdGaWxsZWQxNlxufSBmcm9tIFwiQGNhcmJvbi9pY29uc1wiO1xuXG4vKipcbiAqIEFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSBwYXJzZWQgaWNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEljb25EZXNjcmlwdG9yIHtcblx0LyoqXG5cdCAqIFRoZSBlbGVtZW50IHRvIHJlbmRlci4gRm9yIHRoZSByb290IHRoaXMgaXMgYHN2Z2Bcblx0ICovXG5cdGVsZW06IHN0cmluZztcblx0LyoqXG5cdCAqIEFuIG9iamVjdCBvZiBhdHRyaWJ1dGVzIHRvIGFwcGx5IHRvIHRoZSBlbGVtZW50LlxuXHQgKlxuXHQgKiBUaGUgdHlwZSBoZXJlIGlzIG5vbi1leGhhdXN0aXZlLlxuXHQgKi9cblx0YXR0cnM6IHtcblx0XHR4bWxuczogc3RyaW5nLFxuXHRcdC8vIG5lZWRlZCBieSB0aGUgaWNvbiBkaXJlY3RpdmUgdG8gZGV0ZXJtaW5lIG90aGVyIGF0dHJpYnV0ZXNcblx0XHR2aWV3Qm94OiBzdHJpbmcsXG5cdFx0ZmlsbDogc3RyaW5nLFxuXHRcdC8vIG5lZWRlZCBieSB0aGUgaWNvbiBkaXJlY3RpdmUgdG8gZGV0ZXJtaW5lIG90aGVyIGF0dHJpYnV0ZXNcblx0XHR3aWR0aDogc3RyaW5nLFxuXHRcdC8vIG5lZWRlZCBieSB0aGUgaWNvbiBkaXJlY3RpdmUgdG8gZGV0ZXJtaW5lIG90aGVyIGF0dHJpYnV0ZXNcblx0XHRoZWlnaHQ6IHN0cmluZyxcblx0XHRbeDogc3RyaW5nXTogc3RyaW5nXG5cdH07XG5cdC8qKlxuXHQgKiBUaGUgY29udGVudCAoY2hpbGRyZW4pIG9mIHRoZSBlbGVtZW50IGFzIGFuIGFycmF5IG9mIGBJY29uRGVzY3JpcHRvcmBzXG5cdCAqICh1c3VhbGx5IHdpdGhvdXQgYSBmZXcgZmllbGRzLCBuYW1lbHkgYG5hbWVgIGFuZCBgc2l6ZWApXG5cdCAqL1xuXHRjb250ZW50OiBJY29uRGVzY3JpcHRvcltdO1xuXHQvKipcblx0ICogVGhlIG5hbWUgb2YgdGhlIGljb24uXG5cdCAqXG5cdCAqIE5lZWRlZCBieSB0aGUgaWNvbiBzZXJ2aWNlLlxuXHQgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIHNpemUgb2YgdGhlIGljb24gaW4gcGl4ZWxzLlxuXHQgKlxuXHQgKiBOZWVkZWQgYnkgdGhlIGljb24gc2VydmljZS5cblx0ICovXG5cdHNpemU6IG51bWJlcjtcblx0LyoqXG5cdCAqIE9wdGlvbmFsLiBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGlsZWQgc3ZnLlxuXHQgKiBJZiBtaXNzaW5nIHRoZSBpY29uIHNlcnZpY2Ugd2lsbCBhZGQgdGhpcy5cblx0ICovXG5cdHN2Zz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBYnN0cmFjdCBjbGFzcyB0aGF0IHJlcHJlc2VudCBhIGNhY2hlIG9mIGljb25zLlxuICpcbiAqIFRoZSBhY3R1YWwgY2FjaGluZyBtZWNoYW5pc20gd2lsbCBiZSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyxcbiAqIGJ1dCBpdCdzIGxpa2VseSBhIGdvb2QgaWRlYSB0byBrZXkgYnkgdGhlIGljb25zIG5hbWUgYW5kL29yIHNpemUuXG4gKiBJY29uIG5hbWUgYW5kIHNpemUgd2lsbCBhbHdheXMgYmUgc3RyaW5ncywgYW5kIHRoZXkgd2lsbCBiZSB0aGUgdHdvIGNvbnNpc3RlbnRcbiAqIGlkZW50aWZpZXJzIG9mIGFuIGljb24uIEZvciB0aGUgcHVycG9zZXMgb2Ygc3RvcmFnZSBhZGRpdG9uYWwgZGVzY3JpcHRvciBwcm9wZXJ0aWVzIG1heVxuICogYmUgdXNlZCwgYnV0IHRoZSBuYW1lIGFuZCBzaXplIGFyZSB0aGUgb25seSBvbmVzIGd1YXJlbnRlZWQgdG8gYmUgcGFzc2VkIGZvciBsb29rdXAgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJY29uQ2FjaGUge1xuXHQvKipcblx0ICogRmluZHMgYW5kIHJldHVybnMgYW4gaWNvbiBiYXNlZCBvbiBpdCdzIG5hbWUgYW5kIHNpemVcblx0ICovXG5cdGFic3RyYWN0IGdldChuYW1lOiBzdHJpbmcsIHNpemU6IHN0cmluZyk6IG9iamVjdDtcblx0LyoqXG5cdCAqIHN0b3JlcyBhbiBpY29uIGRlc2NyaXB0b3IgdG8gdGhlIGNhY2hlXG5cdCAqL1xuXHRhYnN0cmFjdCBzZXQobmFtZTogc3RyaW5nLCBzaXplOiBzdHJpbmcsIGRlc2NyaXB0b3I6IG9iamVjdCk6IHZvaWQ7XG59XG5cbi8qKlxuICogQ3VzdG9tIGVycm9yIGZvciB3aGVuIGEgbmFtZSBjYW4ndCBiZSBmb3VuZFxuICovXG5leHBvcnQgY2xhc3MgSWNvbk5hbWVOb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcblx0XHRzdXBlcihgSWNvbiAke25hbWV9IG5vdCBmb3VuZGApO1xuXHR9XG59XG5cbi8qKlxuICogQ3VzdG9tIGVycm9yIGZvciB3aGVuIGEgc3BlY2lmaWMgc2l6ZSBjYW4ndCBiZSBmb3VuZFxuICovXG5leHBvcnQgY2xhc3MgSWNvblNpemVOb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihzaXplOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuXHRcdHN1cGVyKGBTaXplICR7c2l6ZX0gZm9yICR7bmFtZX0gbm90IGZvdW5kYCk7XG5cdH1cbn1cblxuLyoqXG4gKiBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBgSWNvbkNhY2hlYCBhcyBhIHNpbXBsZSBpbiBtZW1vcnkgY2FjaGVcbiAqL1xuZXhwb3J0IGNsYXNzIEljb25NZW1vcnlDYWNoZSBleHRlbmRzIEljb25DYWNoZSB7XG5cdHByaXZhdGUgaWNvbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBvYmplY3Q+PigpO1xuXG5cdGdldChuYW1lOiBzdHJpbmcsIHNpemU6IHN0cmluZykge1xuXHRcdGlmICghdGhpcy5pY29uTWFwLmhhcyhuYW1lKSkge1xuXHRcdFx0dGhyb3cgbmV3IEljb25OYW1lTm90Rm91bmRFcnJvcihuYW1lKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2l6ZU1hcCA9IHRoaXMuaWNvbk1hcC5nZXQobmFtZSk7XG5cdFx0aWYgKCFzaXplTWFwLmhhcyhzaXplKSkge1xuXHRcdFx0dGhyb3cgbmV3IEljb25TaXplTm90Rm91bmRFcnJvcihzaXplLCBuYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNpemVNYXAuZ2V0KHNpemUpO1xuXHR9XG5cblx0c2V0KG5hbWU6IHN0cmluZywgc2l6ZTogc3RyaW5nLCBkZXNjcmlwdG9yOiBvYmplY3QpIHtcblx0XHRpZiAoIXRoaXMuaWNvbk1hcC5oYXMobmFtZSkpIHtcblx0XHRcdHRoaXMuaWNvbk1hcC5zZXQobmFtZSwgbmV3IE1hcCgpKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2l6ZU1hcCA9IHRoaXMuaWNvbk1hcC5nZXQobmFtZSk7XG5cdFx0c2l6ZU1hcC5zZXQoc2l6ZSwgZGVzY3JpcHRvcik7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGUgaWNvbiBzZXJ2aWNlIGlzIGEgc2luZ2xldG9uIHNlcnZpY2UgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIGFuZCByZXRyaXZpbmcgaWNvbnMgZnJvbSBgQGNhcmJvbi9pY29uc2AuXG4gKlxuICogSXQncyBpbXBvcnRhbnQgdG8gcmVnaXN0ZXIgaWNvbnMgYmVmb3JlIHVzZS4gSXQncyByZWNjb21tZW5kZWQgdG8gcmVnaXN0ZXIgeW91ciBpY29ucyBlYXJseSwgbGlrZWx5IGluIHlvdXIgYXBwLmNvbXBvbmVudC5cbiAqXG4gKiBUbyBhbGxvdyBmb3IgaW1wcm92ZWQgdHJlZSBzaGFraW5nIF9kbyBub3RfIGltcG9ydCBhbGwgdGhlIGljb25zIGZyb20gYEBjYXJib24vaWNvbnNgIGFuZCByZWdpc3RlciB0aGVtLlxuICogSW5zdGVhZCByZWdpc3RlciBvbmx5IHRoZSBpY29ucyBpbiB1c2UgYnkgeW91ciBhcHBsaWNhdGlvbi4gSWYgeW91ciBhcHBsaWNhdGlvbiBtYWtlcyB1c2Ugb2YgbGF6eSBsb2FkZWRcbiAqIG1vZHVsZXMgeW91IG1heSBhbHNvIGxhenkgbG9hZCB0aGUgaWNvbnMgdXNlZCBpbiB0aGF0IG1vZHVsZSBieSByZWdpc3RlcmluZyB0aGVtIGVhcmx5IG9uIGluIHRoYXQgbW9kdWxlLlxuICpcbiAqIGBuZ09uSW5pdGAgc2hvdWxkIGJlIHN1ZmZpY2lhbnRseSBlYXJseSB0byByZWdpc3RlciBpY29ucy5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgXG4gKiBpbXBvcnQgeyBBY2Nlc3NpYmlsaXR5MTYgfSBmcm9tIFwiQGNhcmJvbi9pY29uc1wiO1xuICpcbiAqIC8vIC4uLlxuICpcbiAqIGNsYXNzIE15Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAqIFx0Y29uc3RydWN0b3IocHJvdGVjdGVkIGljb25TZXJ2aWNlOiBJY29uU2VydmljZSkge31cbiAqXG4gKiBcdC8vIC4uLlxuICpcbiAqIFx0bmdPbkluaXQoKSB7XG4gKiBcdFx0dGhpcy5pY29uU2VydmljZS5yZWdpc3RlcihBY2Nlc3NpYmlsaXR5MTYpO1xuICogXHR9XG4gKlxuICogXHQvLyAuLi5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIElmIG5lZWRlZCBpdCBpcyBwb3NzaWJsZSB0byByZWdpc3RlciBhbiBpY29uIHVuZGVyIGEgZGlmZmVyZW50IG5hbWUsIHZpYSBgcmVnaXN0ZXJBc2AuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJY29uU2VydmljZSB7XG5cdHByaXZhdGUgaWNvbkNhY2hlOiBJY29uQ2FjaGUgPSBuZXcgSWNvbk1lbW9yeUNhY2hlKCk7XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBhcnJheSBvZiBpY29ucyBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgYEBjYXJib24vaWNvbnNgXG5cdCAqL1xuXHRwdWJsaWMgcmVnaXN0ZXJBbGwoZGVzY3JpcHRvcnM6IG9iamVjdFtdKSB7XG5cdFx0ZGVzY3JpcHRvcnMuZm9yRWFjaChpY29uID0+IHRoaXMucmVnaXN0ZXIoaWNvbikpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBpY29uIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBwcm92aWRlZCBieSBgQGNhcmJvbi9pY29uc2Bcblx0ICovXG5cdHB1YmxpYyByZWdpc3RlcihkZXNjcmlwdG9yOiBvYmplY3QpIHtcblx0XHRjb25zdCB7IG5hbWUgfSA9IGRlc2NyaXB0b3IgYXMgSWNvbkRlc2NyaXB0b3I7XG5cdFx0dGhpcy5yZWdpc3RlckFzKG5hbWUsIGRlc2NyaXB0b3IpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBhbiBpY29uIGJhc2VkIG9uIGEgdW5pcWUgbmFtZSBhbmQgbWV0YWRhdGEgcHJvdmlkZWQgYnkgYEBjYXJib24vaWNvbnNgXG5cdCAqL1xuXHRwdWJsaWMgcmVnaXN0ZXJBcyhuYW1lOiBzdHJpbmcsIGRlc2NyaXB0b3I6IG9iamVjdCkge1xuXHRcdGxldCB7IHNpemUsIGF0dHJzOiB7IHdpZHRoIH0gfSA9IGRlc2NyaXB0b3IgYXMgSWNvbkRlc2NyaXB0b3I7XG5cdFx0dGhpcy5pY29uQ2FjaGUuc2V0KG5hbWUsIChzaXplID8/IHdpZHRoKS50b1N0cmluZygpLCBkZXNjcmlwdG9yKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGFuIGljb24sIGNvbnZlcnRzIGl0IHRvIGEgc3RyaW5nLCBhbmQgY2FjaGVzIHRoZSByZXN1bHRcblx0ICovXG5cdHB1YmxpYyBnZXQobmFtZTogc3RyaW5nLCBzaXplOiBzdHJpbmcpOiBJY29uRGVzY3JpcHRvciB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGljb24gPSB0aGlzLmljb25DYWNoZS5nZXQobmFtZSwgc2l6ZS50b1N0cmluZygpKSBhcyBJY29uRGVzY3JpcHRvcjtcblx0XHRcdGlmICghaWNvbi5zdmcpIHtcblx0XHRcdFx0aWNvbi5zdmcgPSB0b1N0cmluZyhpY29uKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBpY29uO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRocm93IGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpZ3VyZSB2YXJpb3VzIHNlcnZpY2Ugc2V0dGluZ3MgKGNhY2hpbmcgc3RyYXRlZ3kgLi4uKVxuXHQgKi9cblx0cHVibGljIGNvbmZpZ3VyZShvcHRpb25zOiB7IGNhY2hlOiBJY29uQ2FjaGUgfSkge1xuXHRcdHRoaXMuaWNvbkNhY2hlID0gb3B0aW9ucy5jYWNoZTtcblx0fVxufVxuIl19