UNPKG

ngx-diagrams

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0.

328 lines 25.8 kB
/** * @fileoverview added by tsickle * Generated from: lib/models/node.model.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { BehaviorSubject } from 'rxjs'; import { BaseModel } from './base.model'; import { distinctUntilChanged, map, takeUntil } from 'rxjs/operators'; import { mapToArray } from '../utils/tool-kit.util'; /** * @template P */ export class NodeModel extends BaseModel { /** * @param {?=} nodeType * @param {?=} id * @param {?=} extras * @param {?=} x * @param {?=} y * @param {?=} width * @param {?=} height * @param {?=} logPrefix */ constructor(nodeType = 'default', id, extras = {}, x = 0, y = 0, width = 0, height = 0, logPrefix = '[Node]') { super(nodeType, id, logPrefix); this._extras = new BehaviorSubject(extras); this._ports = new BehaviorSubject({}); this._dimensions = new BehaviorSubject({ width, height }); this._coords = new BehaviorSubject({ x, y }); this.extras$ = this._extras.asObservable(); this.ports$ = this._ports.asObservable(); this.coords$ = this._coords.asObservable(); this.dimensions$ = this._dimensions.asObservable(); } /** * @return {?} */ getCoords() { return this._coords.getValue(); } /** * @param {?} __0 * @return {?} */ setCoords({ x, y }) { const { x: oldX, y: oldY } = this.getCoords(); Object.values(this._ports.getValue()).forEach((/** * @param {?} port * @return {?} */ port => { Object.values(port.getLinks()).forEach((/** * @param {?} link * @return {?} */ link => { /** @type {?} */ const point = link.getPointForPort(port); const { x: pointX, y: pointY } = point.getCoords(); point.setCoords({ x: pointX + x - oldX, y: pointY + y - oldY }); })); })); this._coords.next({ x, y }); } // TODO: implement better transition on auto arrange! /** * @param {?} __0 * @return {?} */ transitionToCoords({ x, y }) { // const transitionCompleted = new ReplaySubject(1); // let { x: oldX, y: oldY } = this.getCoords(); // console.log(x, y, oldX, oldY); // interval(0) // .pipe(takeUntil(transitionCompleted)) // .subscribe( // () => { // if (oldX < x) { // oldX++; // } else if (oldX > x) { // oldX--; // } // if (y > oldY) { // oldY++; // } else if (y < oldY) { // oldY--; // } // Object.values(this._ports.getValue()).forEach(port => { // Object.values(port.getLinks()).forEach(link => { // const point = link.getPointForPort(port); // const { x: pointX, y: pointY } = point.getCoords(); // point.setCoords({ x: pointX + x - oldX, y: pointY + y - oldY }); // }); // }); // this._coords.next({ x: oldX, y: oldY }); // if (x === oldX && y === oldY) { // transitionCompleted.next(true); // transitionCompleted.complete(); // } // }, // err => { // console.error(err); // }, // () => { // console.log('finished transition'); // } // ); } // TODO: override selectionChanges and replace this with it (convert to rx) /** * @return {?} */ getSelectedEntities() { /** @type {?} */ let entities = super.getSelectedEntities(); // add the points of each link that are selected here if (this.getSelected()) { Object.values(this._ports.getValue()).forEach((/** * @param {?} port * @return {?} */ port => { /** @type {?} */ const links = Object.values(port.getLinks()); entities = entities.concat(links.map((/** * @param {?} link * @return {?} */ link => { return link.getPointForPort(port); }))); })); } this.log('selectedEntities', entities); return entities; } // TODO: map to BaseEvent /** * @return {?} */ coordsChanges() { return this.coords$.pipe(takeUntil(this.onEntityDestroy())); } /** * @return {?} */ selectCoords() { return this.coords$.pipe(takeUntil(this.onEntityDestroy()), distinctUntilChanged()); } /** * @return {?} */ selectX() { return this.selectCoords().pipe(map((/** * @param {?} c * @return {?} */ c => c.x)), this.withLog('selectX'), distinctUntilChanged()); } /** * @return {?} */ selectY() { return this.selectCoords().pipe(map((/** * @param {?} c * @return {?} */ c => c.y)), this.withLog('selectY'), distinctUntilChanged()); } /** * Assign a port to the node and set the node as its getParent * @param {?} port * @return {?} the inserted port */ addPort(port) { port.setParent(this); this._ports.next(Object.assign({}, this._ports.value, { [port.id]: port })); return port; } /** * @param {?} id * @return {?} */ getPort(id) { return this._ports.value[id]; } /** * @param {?=} selector * @return {?} */ selectPorts(selector) { // TODO: implement selector // TODO: create coerce func return this.ports$.pipe(takeUntil(this.onEntityDestroy()), distinctUntilChanged(), map((/** * @param {?} ports * @return {?} */ ports => mapToArray(ports))), this.withLog('selectPorts')); } /** * @param {?=} ids * @return {?} */ getPorts(ids) { return this._ports.getValue(); } /** * @param {?} __0 * @return {?} */ setDimensions({ width, height }) { this._dimensions.next({ width, height }); } /** * @return {?} */ getDimensions() { return this._dimensions.getValue(); } // TODO: return BaseEvent extension /** * @return {?} */ dimensionChanges() { return this.dimensions$.pipe(takeUntil(this.onEntityDestroy()), distinctUntilChanged(), this.withLog('DimensionChanges')); } /** * @return {?} */ getHeight() { return this._dimensions.getValue().height; } /** * @return {?} */ getWidth() { return this._dimensions.getValue().width; } /** * @return {?} */ selectWidth() { return this.dimensions$.pipe(takeUntil(this.onEntityDestroy()), map((/** * @param {?} d * @return {?} */ d => d.width)), distinctUntilChanged(), this.withLog('selectWidth')); } /** * @return {?} */ selectHeight() { return this.dimensions$.pipe(takeUntil(this.onEntityDestroy()), map((/** * @param {?} d * @return {?} */ d => d.width)), distinctUntilChanged(), this.withLog('selectHeight')); } /** * @param {?} extras * @return {?} */ setExtras(extras) { this._extras.next(extras); } /** * @return {?} */ getExtras() { return this._extras.getValue(); } /** * @template E * @param {?=} selector * @return {?} */ selectExtras(selector) { // TODO: impl selector return this.extras$.pipe(takeUntil(this.onEntityDestroy()), distinctUntilChanged()); } } if (false) { /** @type {?} */ NodeModel.prototype.id; /** @type {?} */ NodeModel.prototype.diagramEngine; /** * @type {?} * @private */ NodeModel.prototype._extras; /** * @type {?} * @private */ NodeModel.prototype._ports; /** * @type {?} * @private */ NodeModel.prototype._coords; /** * @type {?} * @private */ NodeModel.prototype._dimensions; /** * @type {?} * @private */ NodeModel.prototype.extras$; /** * @type {?} * @private */ NodeModel.prototype.ports$; /** * @type {?} * @private */ NodeModel.prototype.coords$; /** * @type {?} * @private */ NodeModel.prototype.dimensions$; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1kaWFncmFtcy8iLCJzb3VyY2VzIjpbImxpYi9tb2RlbHMvbm9kZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFFbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUl6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBTSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUV4RCxNQUFNLE9BQU8sU0FBMkMsU0FBUSxTQUF1Qjs7Ozs7Ozs7Ozs7SUFhdEYsWUFDQyxXQUFtQixTQUFTLEVBQzVCLEVBQVcsRUFDWCxTQUErQixFQUFFLEVBQ2pDLElBQVksQ0FBQyxFQUNiLElBQVksQ0FBQyxFQUNiLFFBQWdCLENBQUMsRUFDakIsU0FBaUIsQ0FBQyxFQUNsQixTQUFTLEdBQUcsUUFBUTtRQUVwQixLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBYSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1B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Ozs7O0lBQ2hFLDJCQUE2RDs7Ozs7SUFDN0QsNEJBQWtEOzs7OztJQUNsRCxnQ0FBMEQ7Ozs7O0lBQzFELDRCQUEyRDs7Ozs7SUFDM0QsMkJBQXdEOzs7OztJQUN4RCw0QkFBNkM7Ozs7O0lBQzdDLGdDQUFxRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUG9ydE1vZGVsIH0gZnJvbSAnLi9wb3J0Lm1vZGVsJztcbmltcG9ydCB7IEJhc2VNb2RlbCB9IGZyb20gJy4vYmFzZS5tb2RlbCc7XG5pbXBvcnQgeyBEaWFncmFtTW9kZWwgfSBmcm9tICcuL2RpYWdyYW0ubW9kZWwnO1xuaW1wb3J0IHsgQ29vcmRzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb29yZHMuaW50ZXJmYWNlLmpzJztcbmltcG9ydCB7IERpYWdyYW1FbmdpbmUgfSBmcm9tICcuLi9zZXJ2aWNlcy9lbmdpbmUuc2VydmljZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEaW1lbnNpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9kaW1lbnNpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRCwgbWFwVG9BcnJheSB9IGZyb20gJy4uL3V0aWxzL3Rvb2wta2l0LnV0aWwnO1xuXG5leHBvcnQgY2xhc3MgTm9kZU1vZGVsPFAgZXh0ZW5kcyBQb3J0TW9kZWwgPSBQb3J0TW9kZWw+IGV4dGVuZHMgQmFzZU1vZGVsPERpYWdyYW1Nb2RlbD4ge1xuXHRpZDogSUQ7XG5cdGRpYWdyYW1FbmdpbmU6IERpYWdyYW1FbmdpbmU7XG5cblx0cHJpdmF0ZSByZWFkb25seSBfZXh0cmFzOiBCZWhhdmlvclN1YmplY3Q8eyBbczogc3RyaW5nXTogYW55IH0+O1xuXHRwcml2YXRlIHJlYWRvbmx5IF9wb3J0czogQmVoYXZpb3JTdWJqZWN0PHsgW3M6IHN0cmluZ106IFAgfT47XG5cdHByaXZhdGUgcmVhZG9ubHkgX2Nvb3JkczogQmVoYXZpb3JTdWJqZWN0PENvb3Jkcz47XG5cdHByaXZhdGUgcmVhZG9ubHkgX2RpbWVuc2lvbnM6IEJlaGF2aW9yU3ViamVjdDxEaW1lbnNpb25zPjtcblx0cHJpdmF0ZSByZWFkb25seSBleHRyYXMkOiBPYnNlcnZhYmxlPHsgW3M6IHN0cmluZ106IGFueSB9Pjtcblx0cHJpdmF0ZSByZWFkb25seSBwb3J0cyQ6IE9ic2VydmFibGU8eyBbczogc3RyaW5nXTogUCB9Pjtcblx0cHJpdmF0ZSByZWFkb25seSBjb29yZHMkOiBPYnNlcnZhYmxlPENvb3Jkcz47XG5cdHByaXZhdGUgcmVhZG9ubHkgZGltZW5zaW9ucyQ6IE9ic2VydmFibGU8RGltZW5zaW9ucz47XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0bm9kZVR5cGU6IHN0cmluZyA9ICdkZWZhdWx0Jyxcblx0XHRpZD86IHN0cmluZyxcblx0XHRleHRyYXM6IHsgW3M6IHN0cmluZ106IGFueSB9ID0ge30sXG5cdFx0eDogbnVtYmVyID0gMCxcblx0XHR5OiBudW1iZXIgPSAwLFxuXHRcdHdpZHRoOiBudW1iZXIgPSAwLFxuXHRcdGhlaWdodDogbnVtYmVyID0gMCxcblx0XHRsb2dQcmVmaXggPSAnW05vZGVdJ1xuXHQpIHtcblx0XHRzdXBlcihub2RlVHlwZSwgaWQsIGxvZ1ByZWZpeCk7XG5cdFx0dGhpcy5fZXh0cmFzID0gbmV3IEJlaGF2aW9yU3ViamVjdChleHRyYXMpO1xuXHRcdHRoaXMuX3BvcnRzID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7fSk7XG5cdFx0dGhpcy5fZGltZW5zaW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGltZW5zaW9ucz4oeyB3aWR0aCwgaGVpZ2h0IH0pO1xuXHRcdHRoaXMuX2Nvb3JkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29vcmRzPih7IHgsIHkgfSk7XG5cdFx0dGhpcy5leHRyYXMkID0gdGhpcy5fZXh0cmFzLmFzT2JzZXJ2YWJsZSgpO1xuXHRcdHRoaXMucG9ydHMkID0gdGhpcy5fcG9ydHMuYXNPYnNlcnZhYmxlKCk7XG5cdFx0dGhpcy5jb29yZHMkID0gdGhpcy5fY29vcmRzLmFzT2JzZXJ2YWJsZSgpO1xuXHRcdHRoaXMuZGltZW5zaW9ucyQgPSB0aGlzLl9kaW1lbnNpb25zLmFzT2JzZXJ2YWJsZSgpO1xuXHR9XG5cblx0Z2V0Q29vcmRzKCk6IENvb3JkcyB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nvb3Jkcy5nZXRWYWx1ZSgpO1xuXHR9XG5cblx0c2V0Q29vcmRzKHsgeCwgeSB9OiBDb29yZHMpIHtcblx0XHRjb25zdCB7IHg6IG9sZFgsIHk6IG9sZFkgfSA9IHRoaXMuZ2V0Q29vcmRzKCk7XG5cblx0XHRPYmplY3QudmFsdWVzKHRoaXMuX3BvcnRzLmdldFZhbHVlKCkpLmZvckVhY2gocG9ydCA9PiB7XG5cdFx0XHRPYmplY3QudmFsdWVzKHBvcnQuZ2V0TGlua3MoKSkuZm9yRWFjaChsaW5rID0+IHtcblx0XHRcdFx0Y29uc3QgcG9pbnQgPSBsaW5rLmdldFBvaW50Rm9yUG9ydChwb3J0KTtcblx0XHRcdFx0Y29uc3QgeyB4OiBwb2ludFgsIHk6IHBvaW50WSB9ID0gcG9pbnQuZ2V0Q29vcmRzKCk7XG5cdFx0XHRcdHBvaW50LnNldENvb3Jkcyh7IHg6IHBvaW50WCArIHggLSBvbGRYLCB5OiBwb2ludFkgKyB5IC0gb2xkWSB9KTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5fY29vcmRzLm5leHQoeyB4LCB5IH0pO1xuXHR9XG5cblx0Ly8gVE9ETzogaW1wbGVtZW50IGJldHRlciB0cmFuc2l0aW9uIG9uIGF1dG8gYXJyYW5nZSFcblx0dHJhbnNpdGlvblRvQ29vcmRzKHsgeCwgeSB9OiBDb29yZHMpIHtcblx0XHQvLyBjb25zdCB0cmFuc2l0aW9uQ29tcGxldGVkID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG5cdFx0Ly8gbGV0IHsgeDogb2xkWCwgeTogb2xkWSB9ID0gdGhpcy5nZXRDb29yZHMoKTtcblx0XHQvLyBjb25zb2xlLmxvZyh4LCB5LCBvbGRYLCBvbGRZKTtcblx0XHQvLyBpbnRlcnZhbCgwKVxuXHRcdC8vIFx0LnBpcGUodGFrZVVudGlsKHRyYW5zaXRpb25Db21wbGV0ZWQpKVxuXHRcdC8vIFx0LnN1YnNjcmliZShcblx0XHQvLyBcdFx0KCkgPT4ge1xuXHRcdC8vIFx0XHRcdGlmIChvbGRYIDwgeCkge1xuXHRcdC8vIFx0XHRcdFx0b2xkWCsrO1xuXHRcdC8vIFx0XHRcdH0gZWxzZSBpZiAob2xkWCA+IHgpIHtcblx0XHQvLyBcdFx0XHRcdG9sZFgtLTtcblx0XHQvLyBcdFx0XHR9XG5cdFx0Ly8gXHRcdFx0aWYgKHkgPiBvbGRZKSB7XG5cdFx0Ly8gXHRcdFx0XHRvbGRZKys7XG5cdFx0Ly8gXHRcdFx0fSBlbHNlIGlmICh5IDwgb2xkWSkge1xuXHRcdC8vIFx0XHRcdFx0b2xkWS0tO1xuXHRcdC8vIFx0XHRcdH1cblx0XHQvLyBcdFx0XHRPYmplY3QudmFsdWVzKHRoaXMuX3BvcnRzLmdldFZhbHVlKCkpLmZvckVhY2gocG9ydCA9PiB7XG5cdFx0Ly8gXHRcdFx0XHRPYmplY3QudmFsdWVzKHBvcnQuZ2V0TGlua3MoKSkuZm9yRWFjaChsaW5rID0+IHtcblx0XHQvLyBcdFx0XHRcdFx0Y29uc3QgcG9pbnQgPSBsaW5rLmdldFBvaW50Rm9yUG9ydChwb3J0KTtcblx0XHQvLyBcdFx0XHRcdFx0Y29uc3QgeyB4OiBwb2ludFgsIHk6IHBvaW50WSB9ID0gcG9pbnQuZ2V0Q29vcmRzKCk7XG5cdFx0Ly8gXHRcdFx0XHRcdHBvaW50LnNldENvb3Jkcyh7IHg6IHBvaW50WCArIHggLSBvbGRYLCB5OiBwb2ludFkgKyB5IC0gb2xkWSB9KTtcblx0XHQvLyBcdFx0XHRcdH0pO1xuXHRcdC8vIFx0XHRcdH0pO1xuXHRcdC8vIFx0XHRcdHRoaXMuX2Nvb3Jkcy5uZXh0KHsgeDogb2xkWCwgeTogb2xkWSB9KTtcblx0XHQvLyBcdFx0XHRpZiAoeCA9PT0gb2xkWCAmJiB5ID09PSBvbGRZKSB7XG5cdFx0Ly8gXHRcdFx0XHR0cmFuc2l0aW9uQ29tcGxldGVkLm5leHQodHJ1ZSk7XG5cdFx0Ly8gXHRcdFx0XHR0cmFuc2l0aW9uQ29tcGxldGVkLmNvbXBsZXRlKCk7XG5cdFx0Ly8gXHRcdFx0fVxuXHRcdC8vIFx0XHR9LFxuXHRcdC8vIFx0XHRlcnIgPT4ge1xuXHRcdC8vIFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyKTtcblx0XHQvLyBcdFx0fSxcblx0XHQvLyBcdFx0KCkgPT4ge1xuXHRcdC8vIFx0XHRcdGNvbnNvbGUubG9nKCdmaW5pc2hlZCB0cmFuc2l0aW9uJyk7XG5cdFx0Ly8gXHRcdH1cblx0XHQvLyBcdCk7XG5cdH1cblxuXHQvLyBUT0RPOiBvdmVycmlkZSBzZWxlY3Rpb25DaGFuZ2VzIGFuZCByZXBsYWNlIHRoaXMgd2l0aCBpdCAoY29udmVydCB0byByeClcblx0Z2V0U2VsZWN0ZWRFbnRpdGllcygpIHtcblx0XHRsZXQgZW50aXRpZXMgPSBzdXBlci5nZXRTZWxlY3RlZEVudGl0aWVzKCk7XG5cblx0XHQvLyBhZGQgdGhlIHBvaW50cyBvZiBlYWNoIGxpbmsgdGhhdCBhcmUgc2VsZWN0ZWQgaGVyZVxuXHRcdGlmICh0aGlzLmdldFNlbGVjdGVkKCkpIHtcblx0XHRcdE9iamVjdC52YWx1ZXModGhpcy5fcG9ydHMuZ2V0VmFsdWUoKSkuZm9yRWFjaChwb3J0ID0+IHtcblx0XHRcdFx0Y29uc3QgbGlua3MgPSBPYmplY3QudmFsdWVzKHBvcnQuZ2V0TGlua3MoKSk7XG5cdFx0XHRcdGVudGl0aWVzID0gZW50aXRpZXMuY29uY2F0KFxuXHRcdFx0XHRcdGxpbmtzLm1hcChsaW5rID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBsaW5rLmdldFBvaW50Rm9yUG9ydChwb3J0KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5sb2coJ3NlbGVjdGVkRW50aXRpZXMnLCBlbnRpdGllcyk7XG5cdFx0cmV0dXJuIGVudGl0aWVzO1xuXHR9XG5cblx0Ly8gVE9ETzogbWFwIHRvIEJhc2VFdmVudFxuXHRjb29yZHNDaGFuZ2VzKCk6IE9ic2VydmFibGU8Q29vcmRzPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29vcmRzJC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRW50aXR5RGVzdHJveSgpKSk7XG5cdH1cblxuXHRzZWxlY3RDb29yZHMoKTogT2JzZXJ2YWJsZTxDb29yZHM+IHtcblx0XHRyZXR1cm4gdGhpcy5jb29yZHMkLnBpcGUoXG5cdFx0XHR0YWtlVW50aWwodGhpcy5vbkVudGl0eURlc3Ryb3koKSksXG5cdFx0XHRkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG5cdFx0KTtcblx0fVxuXG5cdHNlbGVjdFgoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblx0XHRyZXR1cm4gdGhpcy5zZWxlY3RDb29yZHMoKS5waXBlKFxuXHRcdFx0bWFwKGMgPT4gYy54KSxcblx0XHRcdHRoaXMud2l0aExvZygnc2VsZWN0WCcpLFxuXHRcdFx0ZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuXHRcdCk7XG5cdH1cblxuXHRzZWxlY3RZKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG5cdFx0cmV0dXJuIHRoaXMuc2VsZWN0Q29vcmRzKCkucGlwZShcblx0XHRcdG1hcChjID0+IGMueSksXG5cdFx0XHR0aGlzLndpdGhMb2coJ3NlbGVjdFknKSxcblx0XHRcdGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFzc2lnbiBhIHBvcnQgdG8gdGhlIG5vZGUgYW5kIHNldCB0aGUgbm9kZSBhcyBpdHMgZ2V0UGFyZW50XG5cdCAqIEByZXR1cm5zIHRoZSBpbnNlcnRlZCBwb3J0XG5cdCAqL1xuXHRhZGRQb3J0KHBvcnQ6IFApOiBQIHtcblx0XHRwb3J0LnNldFBhcmVudCh0aGlzKTtcblx0XHR0aGlzLl9wb3J0cy5uZXh0KHsgLi4udGhpcy5fcG9ydHMudmFsdWUsIFtwb3J0LmlkXTogcG9ydCB9KTtcblx0XHRyZXR1cm4gcG9ydDtcblx0fVxuXG5cdGdldFBvcnQoaWQ6IElEKTogUCB7XG5cdFx0cmV0dXJuIHRoaXMuX3BvcnRzLnZhbHVlW2lkXTtcblx0fVxuXG5cdHNlbGVjdFBvcnRzKHNlbGVjdG9yPzogKCkgPT4gYm9vbGVhbiB8IElEIHwgSURbXSk6IE9ic2VydmFibGU8UFtdPiB7XG5cdFx0Ly8gVE9ETzogaW1wbGVtZW50IHNlbGVjdG9yXG5cdFx0Ly8gVE9ETzogY3JlYXRlIGNvZXJjZSBmdW5jXG5cdFx0cmV0dXJuIHRoaXMucG9ydHMkLnBpcGUoXG5cdFx0XHR0YWtlVW50aWwodGhpcy5vbkVudGl0eURlc3Ryb3koKSksXG5cdFx0XHRkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuXHRcdFx0bWFwKHBvcnRzID0+IG1hcFRvQXJyYXkocG9ydHMpKSxcblx0XHRcdHRoaXMud2l0aExvZygnc2VsZWN0UG9ydHMnKVxuXHRcdCk7XG5cdH1cblxuXHRnZXRQb3J0cyhpZHM/OiBJRFtdKTogeyBbczogc3RyaW5nXTogUCB8IFBbXSB9IHtcblx0XHRyZXR1cm4gdGhpcy5fcG9ydHMuZ2V0VmFsdWUoKTtcblx0fVxuXG5cdHNldERpbWVuc2lvbnMoeyB3aWR0aCwgaGVpZ2h0IH06IERpbWVuc2lvbnMpIHtcblx0XHR0aGlzLl9kaW1lbnNpb25zLm5leHQoeyB3aWR0aCwgaGVpZ2h0IH0pO1xuXHR9XG5cblx0Z2V0RGltZW5zaW9ucygpOiBEaW1lbnNpb25zIHtcblx0XHRyZXR1cm4gdGhpcy5fZGltZW5zaW9ucy5nZXRWYWx1ZSgpO1xuXHR9XG5cblx0Ly8gVE9ETzogcmV0dXJuIEJhc2VFdmVudCBleHRlbnNpb25cblx0ZGltZW5zaW9uQ2hhbmdlcygpOiBPYnNlcnZhYmxlPERpbWVuc2lvbnM+IHtcblx0XHRyZXR1cm4gdGhpcy5kaW1lbnNpb25zJC5waXBlKFxuXHRcdFx0dGFrZVVudGlsKHRoaXMub25FbnRpdHlEZXN0cm95KCkpLFxuXHRcdFx0ZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcblx0XHRcdHRoaXMud2l0aExvZygnRGltZW5zaW9uQ2hhbmdlcycpXG5cdFx0KTtcblx0fVxuXG5cdGdldEhlaWdodCgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLl9kaW1lbnNpb25zLmdldFZhbHVlKCkuaGVpZ2h0O1xuXHR9XG5cblx0Z2V0V2lkdGgoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fZGltZW5zaW9ucy5nZXRWYWx1ZSgpLndpZHRoO1xuXHR9XG5cblx0c2VsZWN0V2lkdGgoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblx0XHRyZXR1cm4gdGhpcy5kaW1lbnNpb25zJC5waXBlKFxuXHRcdFx0dGFrZVVudGlsKHRoaXMub25FbnRpdHlEZXN0cm95KCkpLFxuXHRcdFx0bWFwKGQgPT4gZC53aWR0aCksXG5cdFx0XHRkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuXHRcdFx0dGhpcy53aXRoTG9nKCdzZWxlY3RXaWR0aCcpXG5cdFx0KTtcblx0fVxuXG5cdHNlbGVjdEhlaWdodCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuXHRcdHJldHVybiB0aGlzLmRpbWVuc2lvbnMkLnBpcGUoXG5cdFx0XHR0YWtlVW50aWwodGhpcy5vbkVudGl0eURlc3Ryb3koKSksXG5cdFx0XHRtYXAoZCA9PiBkLndpZHRoKSxcblx0XHRcdGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG5cdFx0XHR0aGlzLndpdGhMb2coJ3NlbGVjdEhlaWdodCcpXG5cdFx0KTtcblx0fVxuXG5cdHNldEV4dHJhcyhleHRyYXM6IGFueSkge1xuXHRcdHRoaXMuX2V4dHJhcy5uZXh0KGV4dHJhcyk7XG5cdH1cblxuXHRnZXRFeHRyYXMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2V4dHJhcy5nZXRWYWx1ZSgpO1xuXHR9XG5cblx0c2VsZWN0RXh0cmFzPEUgPSBhbnk+KHNlbGVjdG9yPzogKGV4dHJhOiBFKSA9PiBFW2tleW9mIEVdIHwgc3RyaW5nIHwgc3RyaW5nW10pIHtcblx0XHQvLyBUT0RPOiBpbXBsIHNlbGVjdG9yXG5cdFx0cmV0dXJuIHRoaXMuZXh0cmFzJC5waXBlKFxuXHRcdFx0dGFrZVVudGlsKHRoaXMub25FbnRpdHlEZXN0cm95KCkpLFxuXHRcdFx0ZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuXHRcdCk7XG5cdH1cbn1cbiJdfQ==