carbon-components-angular
Version:
Next generation components
140 lines • 15.8 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) {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ljb24vaWNvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQTZFaEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE9BQWdCLFNBQVM7Q0FTOUI7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxLQUFLO0lBQy9DLFlBQVksSUFBWTtRQUN2QixLQUFLLENBQUMsUUFBUSxJQUFJLFlBQVksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDRDtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHFCQUFzQixTQUFRLEtBQUs7SUFDL0MsWUFBWSxJQUFZLEVBQUUsSUFBWTtRQUNyQyxLQUFLLENBQUMsUUFBUSxJQUFJLFFBQVEsSUFBSSxZQUFZLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0Q7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLFNBQVM7SUFBOUM7O1FBQ1MsWUFBTyxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO0lBb0IxRCxDQUFDO0lBbEJBLEdBQUcsQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDNUIsTUFBTSxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsTUFBTSxJQUFJLHFCQUFxQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM1QztRQUNELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsVUFBa0I7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDbEM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvQixDQUFDO0NBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUVILE1BQU0sT0FBTyxXQUFXO0lBRHhCO1FBRVMsY0FBUyxHQUFjLElBQUksZUFBZSxFQUFFLENBQUM7S0E4Q3JEO0lBNUNBOztPQUVHO0lBQ0ksV0FBVyxDQUFDLFdBQXFCO1FBQ3ZDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUSxDQUFDLFVBQWtCO1FBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxVQUE0QixDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBQyxJQUFZLEVBQUUsVUFBa0I7UUFDakQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQTRCLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxHQUFHLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDcEMsSUFBSTtZQUNILE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQW1CLENBQUM7WUFDekUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDMUI7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNaO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWCxNQUFNLENBQUMsQ0FBQztTQUNSO0lBQ0YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLE9BQTZCO1FBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDOzt3R0E5Q1csV0FBVzs0R0FBWCxXQUFXOzJGQUFYLFdBQVc7a0JBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHRvU3RyaW5nIH0gZnJvbSBcIkBjYXJib24vaWNvbi1oZWxwZXJzXCI7XG5cbi8vIGljb24gaW1wb3J0c1xuaW1wb3J0IHtcblx0QWRkMTYsXG5cdENhbGVuZGFyMTYsXG5cdENhcmV0RG93bjE2LFxuXHRDYXJldExlZnQxNixcblx0Q2FyZXRSaWdodDE2LFxuXHRDYXJldFVwMTYsXG5cdENoZWNrbWFyazE2LFxuXHRDaGVja21hcmtGaWxsZWQxNixcblx0Q2hlY2ttYXJrT3V0bGluZTE2LFxuXHRDaGV2cm9uRG93bjE2LFxuXHRDaGV2cm9uUmlnaHQxNixcblx0Q2xvc2UxNixcblx0Q29weTE2LFxuXHREb3dubG9hZDE2LFxuXHRFcnJvckZpbGxlZDE2LFxuXHRJbmZvcm1hdGlvbkZpbGxlZDE2LFxuXHRNZW51MTYsXG5cdE92ZXJmbG93TWVudVZlcnRpY2FsMTYsXG5cdFNhdmUxNixcblx0U2V0dGluZ3MxNixcblx0VHJhc2hDYW4xNixcblx0V2FybmluZzE2LFxuXHRXYXJuaW5nRmlsbGVkMTZcbn0gZnJvbSBcIkBjYXJib24vaWNvbnNcIjtcblxuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgcGFyc2VkIGljb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJY29uRGVzY3JpcHRvciB7XG5cdC8qKlxuXHQgKiBUaGUgZWxlbWVudCB0byByZW5kZXIuIEZvciB0aGUgcm9vdCB0aGlzIGlzIGBzdmdgXG5cdCAqL1xuXHRlbGVtOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBBbiBvYmplY3Qgb2YgYXR0cmlidXRlcyB0byBhcHBseSB0byB0aGUgZWxlbWVudC5cblx0ICpcblx0ICogVGhlIHR5cGUgaGVyZSBpcyBub24tZXhoYXVzdGl2ZS5cblx0ICovXG5cdGF0dHJzOiB7XG5cdFx0eG1sbnM6IHN0cmluZyxcblx0XHQvLyBuZWVkZWQgYnkgdGhlIGljb24gZGlyZWN0aXZlIHRvIGRldGVybWluZSBvdGhlciBhdHRyaWJ1dGVzXG5cdFx0dmlld0JveDogc3RyaW5nLFxuXHRcdGZpbGw6IHN0cmluZyxcblx0XHQvLyBuZWVkZWQgYnkgdGhlIGljb24gZGlyZWN0aXZlIHRvIGRldGVybWluZSBvdGhlciBhdHRyaWJ1dGVzXG5cdFx0d2lkdGg6IHN0cmluZyxcblx0XHQvLyBuZWVkZWQgYnkgdGhlIGljb24gZGlyZWN0aXZlIHRvIGRldGVybWluZSBvdGhlciBhdHRyaWJ1dGVzXG5cdFx0aGVpZ2h0OiBzdHJpbmcsXG5cdFx0W3g6IHN0cmluZ106IHN0cmluZ1xuXHR9O1xuXHQvKipcblx0ICogVGhlIGNvbnRlbnQgKGNoaWxkcmVuKSBvZiB0aGUgZWxlbWVudCBhcyBhbiBhcnJheSBvZiBgSWNvbkRlc2NyaXB0b3Jgc1xuXHQgKiAodXN1YWxseSB3aXRob3V0IGEgZmV3IGZpZWxkcywgbmFtZWx5IGBuYW1lYCBhbmQgYHNpemVgKVxuXHQgKi9cblx0Y29udGVudDogSWNvbkRlc2NyaXB0b3JbXTtcblx0LyoqXG5cdCAqIFRoZSBuYW1lIG9mIHRoZSBpY29uLlxuXHQgKlxuXHQgKiBOZWVkZWQgYnkgdGhlIGljb24gc2VydmljZS5cblx0ICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBzaXplIG9mIHRoZSBpY29uIGluIHBpeGVscy5cblx0ICpcblx0ICogTmVlZGVkIGJ5IHRoZSBpY29uIHNlcnZpY2UuXG5cdCAqL1xuXHRzaXplOiBudW1iZXI7XG5cdC8qKlxuXHQgKiBPcHRpb25hbC4gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbXBpbGVkIHN2Zy5cblx0ICogSWYgbWlzc2luZyB0aGUgaWNvbiBzZXJ2aWNlIHdpbGwgYWRkIHRoaXMuXG5cdCAqL1xuXHRzdmc/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQWJzdHJhY3QgY2xhc3MgdGhhdCByZXByZXNlbnQgYSBjYWNoZSBvZiBpY29ucy5cbiAqXG4gKiBUaGUgYWN0dWFsIGNhY2hpbmcgbWVjaGFuaXNtIHdpbGwgYmUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMsXG4gKiBidXQgaXQncyBsaWtlbHkgYSBnb29kIGlkZWEgdG8ga2V5IGJ5IHRoZSBpY29ucyBuYW1lIGFuZC9vciBzaXplLlxuICogSWNvbiBuYW1lIGFuZCBzaXplIHdpbGwgYWx3YXlzIGJlIHN0cmluZ3MsIGFuZCB0aGV5IHdpbGwgYmUgdGhlIHR3byBjb25zaXN0ZW50XG4gKiBpZGVudGlmaWVycyBvZiBhbiBpY29uLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHN0b3JhZ2UgYWRkaXRvbmFsIGRlc2NyaXB0b3IgcHJvcGVydGllcyBtYXlcbiAqIGJlIHVzZWQsIGJ1dCB0aGUgbmFtZSBhbmQgc2l6ZSBhcmUgdGhlIG9ubHkgb25lcyBndWFyZW50ZWVkIHRvIGJlIHBhc3NlZCBmb3IgbG9va3VwIHB1cnBvc2VzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSWNvbkNhY2hlIHtcblx0LyoqXG5cdCAqIEZpbmRzIGFuZCByZXR1cm5zIGFuIGljb24gYmFzZWQgb24gaXQncyBuYW1lIGFuZCBzaXplXG5cdCAqL1xuXHRhYnN0cmFjdCBnZXQobmFtZTogc3RyaW5nLCBzaXplOiBzdHJpbmcpOiBvYmplY3Q7XG5cdC8qKlxuXHQgKiBzdG9yZXMgYW4gaWNvbiBkZXNjcmlwdG9yIHRvIHRoZSBjYWNoZVxuXHQgKi9cblx0YWJzdHJhY3Qgc2V0KG5hbWU6IHN0cmluZywgc2l6ZTogc3RyaW5nLCBkZXNjcmlwdG9yOiBvYmplY3QpOiB2b2lkO1xufVxuXG4vKipcbiAqIEN1c3RvbSBlcnJvciBmb3Igd2hlbiBhIG5hbWUgY2FuJ3QgYmUgZm91bmRcbiAqL1xuZXhwb3J0IGNsYXNzIEljb25OYW1lTm90Rm91bmRFcnJvciBleHRlbmRzIEVycm9yIHtcblx0Y29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIoYEljb24gJHtuYW1lfSBub3QgZm91bmRgKTtcblx0fVxufVxuXG4vKipcbiAqIEN1c3RvbSBlcnJvciBmb3Igd2hlbiBhIHNwZWNpZmljIHNpemUgY2FuJ3QgYmUgZm91bmRcbiAqL1xuZXhwb3J0IGNsYXNzIEljb25TaXplTm90Rm91bmRFcnJvciBleHRlbmRzIEVycm9yIHtcblx0Y29uc3RydWN0b3Ioc2l6ZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcblx0XHRzdXBlcihgU2l6ZSAke3NpemV9IGZvciAke25hbWV9IG5vdCBmb3VuZGApO1xuXHR9XG59XG5cbi8qKlxuICogQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgYEljb25DYWNoZWAgYXMgYSBzaW1wbGUgaW4gbWVtb3J5IGNhY2hlXG4gKi9cbmV4cG9ydCBjbGFzcyBJY29uTWVtb3J5Q2FjaGUgZXh0ZW5kcyBJY29uQ2FjaGUge1xuXHRwcml2YXRlIGljb25NYXAgPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgb2JqZWN0Pj4oKTtcblxuXHRnZXQobmFtZTogc3RyaW5nLCBzaXplOiBzdHJpbmcpIHtcblx0XHRpZiAoIXRoaXMuaWNvbk1hcC5oYXMobmFtZSkpIHtcblx0XHRcdHRocm93IG5ldyBJY29uTmFtZU5vdEZvdW5kRXJyb3IobmFtZSk7XG5cdFx0fVxuXHRcdGNvbnN0IHNpemVNYXAgPSB0aGlzLmljb25NYXAuZ2V0KG5hbWUpO1xuXHRcdGlmICghc2l6ZU1hcC5oYXMoc2l6ZSkpIHtcblx0XHRcdHRocm93IG5ldyBJY29uU2l6ZU5vdEZvdW5kRXJyb3Ioc2l6ZSwgbmFtZSk7XG5cdFx0fVxuXHRcdHJldHVybiBzaXplTWFwLmdldChzaXplKTtcblx0fVxuXG5cdHNldChuYW1lOiBzdHJpbmcsIHNpemU6IHN0cmluZywgZGVzY3JpcHRvcjogb2JqZWN0KSB7XG5cdFx0aWYgKCF0aGlzLmljb25NYXAuaGFzKG5hbWUpKSB7XG5cdFx0XHR0aGlzLmljb25NYXAuc2V0KG5hbWUsIG5ldyBNYXAoKSk7XG5cdFx0fVxuXHRcdGNvbnN0IHNpemVNYXAgPSB0aGlzLmljb25NYXAuZ2V0KG5hbWUpO1xuXHRcdHNpemVNYXAuc2V0KHNpemUsIGRlc2NyaXB0b3IpO1xuXHR9XG59XG5cbi8qKlxuICogVGhlIGljb24gc2VydmljZSBpcyBhIHNpbmdsZXRvbiBzZXJ2aWNlIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyBhbmQgcmV0cml2aW5nIGljb25zIGZyb20gYEBjYXJib24vaWNvbnNgLlxuICpcbiAqIEl0J3MgaW1wb3J0YW50IHRvIHJlZ2lzdGVyIGljb25zIGJlZm9yZSB1c2UuIEl0J3MgcmVjY29tbWVuZGVkIHRvIHJlZ2lzdGVyIHlvdXIgaWNvbnMgZWFybHksIGxpa2VseSBpbiB5b3VyIGFwcC5jb21wb25lbnQuXG4gKlxuICogVG8gYWxsb3cgZm9yIGltcHJvdmVkIHRyZWUgc2hha2luZyBfZG8gbm90XyBpbXBvcnQgYWxsIHRoZSBpY29ucyBmcm9tIGBAY2FyYm9uL2ljb25zYCBhbmQgcmVnaXN0ZXIgdGhlbS5cbiAqIEluc3RlYWQgcmVnaXN0ZXIgb25seSB0aGUgaWNvbnMgaW4gdXNlIGJ5IHlvdXIgYXBwbGljYXRpb24uIElmIHlvdXIgYXBwbGljYXRpb24gbWFrZXMgdXNlIG9mIGxhenkgbG9hZGVkXG4gKiBtb2R1bGVzIHlvdSBtYXkgYWxzbyBsYXp5IGxvYWQgdGhlIGljb25zIHVzZWQgaW4gdGhhdCBtb2R1bGUgYnkgcmVnaXN0ZXJpbmcgdGhlbSBlYXJseSBvbiBpbiB0aGF0IG1vZHVsZS5cbiAqXG4gKiBgbmdPbkluaXRgIHNob3VsZCBiZSBzdWZmaWNpYW50bHkgZWFybHkgdG8gcmVnaXN0ZXIgaWNvbnMuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYFxuICogaW1wb3J0IHsgQWNjZXNzaWJpbGl0eTE2IH0gZnJvbSBcIkBjYXJib24vaWNvbnNcIjtcbiAqXG4gKiAvLyAuLi5cbiAqXG4gKiBjbGFzcyBNeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gKiBcdGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpY29uU2VydmljZTogSWNvblNlcnZpY2UpIHt9XG4gKlxuICogXHQvLyAuLi5cbiAqXG4gKiBcdG5nT25Jbml0KCkge1xuICogXHRcdHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXIoQWNjZXNzaWJpbGl0eTE2KTtcbiAqIFx0fVxuICpcbiAqIFx0Ly8gLi4uXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBJZiBuZWVkZWQgaXQgaXMgcG9zc2libGUgdG8gcmVnaXN0ZXIgYW4gaWNvbiB1bmRlciBhIGRpZmZlcmVudCBuYW1lLCB2aWEgYHJlZ2lzdGVyQXNgLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWNvblNlcnZpY2Uge1xuXHRwcml2YXRlIGljb25DYWNoZTogSWNvbkNhY2hlID0gbmV3IEljb25NZW1vcnlDYWNoZSgpO1xuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgYW4gYXJyYXkgb2YgaWNvbnMgYmFzZWQgb24gdGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IGBAY2FyYm9uL2ljb25zYFxuXHQgKi9cblx0cHVibGljIHJlZ2lzdGVyQWxsKGRlc2NyaXB0b3JzOiBvYmplY3RbXSkge1xuXHRcdGRlc2NyaXB0b3JzLmZvckVhY2goaWNvbiA9PiB0aGlzLnJlZ2lzdGVyKGljb24pKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgYW4gaWNvbiBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgYEBjYXJib24vaWNvbnNgXG5cdCAqL1xuXHRwdWJsaWMgcmVnaXN0ZXIoZGVzY3JpcHRvcjogb2JqZWN0KSB7XG5cdFx0Y29uc3QgeyBuYW1lIH0gPSBkZXNjcmlwdG9yIGFzIEljb25EZXNjcmlwdG9yO1xuXHRcdHRoaXMucmVnaXN0ZXJBcyhuYW1lLCBkZXNjcmlwdG9yKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgYW4gaWNvbiBiYXNlZCBvbiBhIHVuaXFlIG5hbWUgYW5kIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IGBAY2FyYm9uL2ljb25zYFxuXHQgKi9cblx0cHVibGljIHJlZ2lzdGVyQXMobmFtZTogc3RyaW5nLCBkZXNjcmlwdG9yOiBvYmplY3QpIHtcblx0XHRjb25zdCB7IHNpemUgfSA9IGRlc2NyaXB0b3IgYXMgSWNvbkRlc2NyaXB0b3I7XG5cdFx0dGhpcy5pY29uQ2FjaGUuc2V0KG5hbWUsIHNpemUudG9TdHJpbmcoKSwgZGVzY3JpcHRvcik7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhbiBpY29uLCBjb252ZXJ0cyBpdCB0byBhIHN0cmluZywgYW5kIGNhY2hlcyB0aGUgcmVzdWx0XG5cdCAqL1xuXHRwdWJsaWMgZ2V0KG5hbWU6IHN0cmluZywgc2l6ZTogc3RyaW5nKTogSWNvbkRlc2NyaXB0b3Ige1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBpY29uID0gdGhpcy5pY29uQ2FjaGUuZ2V0KG5hbWUsIHNpemUudG9TdHJpbmcoKSkgYXMgSWNvbkRlc2NyaXB0b3I7XG5cdFx0XHRpZiAoIWljb24uc3ZnKSB7XG5cdFx0XHRcdGljb24uc3ZnID0gdG9TdHJpbmcoaWNvbik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaWNvbjtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHR0aHJvdyBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDb25maWd1cmUgdmFyaW91cyBzZXJ2aWNlIHNldHRpbmdzIChjYWNoaW5nIHN0cmF0ZWd5IC4uLilcblx0ICovXG5cdHB1YmxpYyBjb25maWd1cmUob3B0aW9uczogeyBjYWNoZTogSWNvbkNhY2hlIH0pIHtcblx0XHR0aGlzLmljb25DYWNoZSA9IG9wdGlvbnMuY2FjaGU7XG5cdH1cbn1cbiJdfQ==