UNPKG

ngx-diagrams

Version:

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

332 lines 24.4 kB
/** * @fileoverview added by tsickle * Generated from: lib/models/diagram.model.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { BehaviorSubject } from 'rxjs'; import { NodeModel } from './node.model'; import { LinkModel } from './link.model'; import { BaseEntity } from '../base.entity'; import { uniq, flatMap } from 'lodash'; import { PortModel } from './port.model'; import { PointModel } from './point.model'; export class DiagramModel extends BaseEntity { /** * @param {?} diagramEngine * @param {?=} id */ constructor(diagramEngine, id) { super(id); this.diagramEngine = diagramEngine; this.nodes$ = new BehaviorSubject({}); this.links$ = new BehaviorSubject({}); this.zoom$ = new BehaviorSubject(100); this.offsetX$ = new BehaviorSubject(0); this.offsetY$ = new BehaviorSubject(0); this.gridSize$ = new BehaviorSubject(0); } // TODO: support the following events for links and nodes // removed, updated<positionChanged/dataChanged>, added /** * @return {?} */ getNodes() { return this.nodes$.getValue(); } /** * @param {?} id * @return {?} */ getNode(id) { return this.nodes$.getValue()[id]; } /** * @param {?} id * @return {?} */ getLink(id) { return this.links$.getValue()[id]; } /** * @return {?} */ getLinks() { return this.links$.getValue(); } /** * Add a node to the diagram * @param {?} node * @return {?} Inserted Node */ addNode(node) { this.nodes$.next(Object.assign({}, this.nodes$.value, { [node.id]: node })); return node; } /** * Delete a node from the diagram * @param {?} nodeOrId * @return {?} */ deleteNode(nodeOrId) { /** @type {?} */ const nodeID = typeof nodeOrId === 'string' ? nodeOrId : nodeOrId.id; // TODO: delete all related links /** @type {?} */ const updNodes = Object.assign({}, this.nodes$.value); delete updNodes[nodeID]; this.nodes$.next(updNodes); } /** * Get nodes behaviour subject, use `.getValue()` for snapshot * @return {?} */ selectNodes() { return this.nodes$.asObservable(); } /** * Add link * @param {?} link * @return {?} Newly created link */ addLink(link) { this.links$.next(Object.assign({}, this.links$.value, { [link.id]: link })); return link; } /** * Delete link * @param {?} linkOrId * @return {?} */ deleteLink(linkOrId) { /** @type {?} */ const linkID = typeof linkOrId === 'string' ? linkOrId : linkOrId.id; /** @type {?} */ const updLinks = Object.assign({}, this.links$.value); delete updLinks[linkID]; this.links$.next(updLinks); } /** * Get links behaviour subject, use `.getValue()` for snapshot * @return {?} */ selectLinks() { return this.links$.asObservable(); } /** * Serialize the diagram model * @returns diagram model as a string */ // serialize(): string { // return JSON.stringify(this.model); // } /** * Load into the diagram model a serialized diagram * @param {?} x * @param {?} y * @return {?} */ // deserialize(serializedModel: string) { // this.model = JSON.parse(serializedModel); // } setOffset(x, y) { this.offsetX$.next(x); this.offsetY$.next(y); } /** * @param {?} x * @return {?} */ setOffsetX(x) { this.offsetX$.next(x); } /** * @return {?} */ getOffsetX() { return this.offsetX$.getValue(); } /** * @return {?} */ selectOffsetX() { return this.offsetX$.asObservable(); } /** * @param {?} y * @return {?} */ setOffsetY(y) { this.offsetY$.next(y); } /** * @return {?} */ getOffsetY() { return this.offsetY$.getValue(); } /** * @return {?} */ selectOffsetY() { return this.offsetY$.asObservable(); } /** * @param {?} z * @return {?} */ setZoomLevel(z) { this.zoom$.next(z); } /** * @return {?} */ getZoomLevel() { return this.zoom$.getValue(); } /** * @return {?} */ selectZoomLevel() { return this.zoom$.asObservable(); } /** * @return {?} */ getDiagramEngine() { return this.diagramEngine; } /** * @param {?=} ignore * @return {?} */ clearSelection(ignore = null) { this.getSelectedItems().forEach((/** * @param {?} element * @return {?} */ element => { if (ignore && ignore.id === element.id) { return; } element.setSelected(false); })); } /** * @param {?} __0 * @return {?} */ getGridPosition({ x, y }) { /** @type {?} */ const gridSize = this.gridSize$.getValue(); if (gridSize === 0) { return { x, y }; } return { x: gridSize * Math.floor((x + gridSize / 2) / gridSize), y: gridSize * Math.floor((y + gridSize / 2) / gridSize) }; } /** * @param {...?} filters * @return {?} */ getSelectedItems(...filters) { if (!Array.isArray(filters)) { filters = [filters]; } /** @type {?} */ let items = []; // run through nodes items = items.concat(flatMap(this.nodes$.getValue(), (/** * @param {?} node * @return {?} */ node => { return node.getSelectedEntities(); }))); // find all the links items = items.concat(flatMap(this.links$.getValue(), (/** * @param {?} link * @return {?} */ link => { return link.getSelectedEntities(); }))); // find all points items = items.concat(flatMap(this.links$.getValue(), (/** * @param {?} link * @return {?} */ link => { return flatMap(link.getPoints(), (/** * @param {?} point * @return {?} */ point => { return point.getSelectedEntities(); })); }))); items = uniq(items); if (filters.length > 0) { items = uniq(items).filter((/** * @param {?} item * @return {?} */ (item) => { if (filters.includes('node') && item instanceof NodeModel) { return true; } if (filters.includes('link') && item instanceof LinkModel) { return true; } if (filters.includes('port') && item instanceof PortModel) { return true; } if (filters.includes('point') && item instanceof PointModel) { return true; } return false; })); } return items; } /** * @param {...?} models * @return {?} */ addAll(...models) { models.forEach((/** * @param {?} model * @return {?} */ model => { if (model instanceof LinkModel) { this.addLink(model); } else if (model instanceof NodeModel) { this.addNode(model); } })); return models; } } if (false) { /** @type {?} */ DiagramModel.prototype.links$; /** @type {?} */ DiagramModel.prototype.nodes$; /** @type {?} */ DiagramModel.prototype.zoom$; /** @type {?} */ DiagramModel.prototype.offsetX$; /** @type {?} */ DiagramModel.prototype.offsetY$; /** @type {?} */ DiagramModel.prototype.gridSize$; /** * @type {?} * @private */ DiagramModel.prototype.diagramEngine; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ3JhbS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1kaWFncmFtcy8iLCJzb3VyY2VzIjpbImxpYi9tb2RlbHMvZGlhZ3JhbS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQWtCLE1BQU0sZ0JBQWdCLENBQUM7QUFHNUQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTNDLE1BQU0sT0FBTyxZQUFhLFNBQVEsVUFBVTs7Ozs7SUFRM0MsWUFBb0IsYUFBNEIsRUFBRSxFQUFXO1FBQzVELEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQURTLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBRS9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQTZCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQTZCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7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QUFDO0NBQ0Q7OztJQTFPQSw4QkFBb0Q7O0lBQ3BELDhCQUFvRDs7SUFDcEQsNkJBQStCOztJQUMvQixnQ0FBa0M7O0lBQ2xDLGdDQUFrQzs7SUFDbEMsaUNBQW1DOzs7OztJQUV2QixxQ0FBb0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4vbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBMaW5rTW9kZWwgfSBmcm9tICcuL2xpbmsubW9kZWwnO1xuaW1wb3J0IHsgQmFzZUVudGl0eSwgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi9iYXNlLmVudGl0eSc7XG5pbXBvcnQgeyBEaWFncmFtRW5naW5lIH0gZnJvbSAnLi4vc2VydmljZXMvZW5naW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZU1vZGVsIH0gZnJvbSAnLi9iYXNlLm1vZGVsJztcbmltcG9ydCB7IHVuaXEsIGZsYXRNYXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUG9ydE1vZGVsIH0gZnJvbSAnLi9wb3J0Lm1vZGVsJztcbmltcG9ydCB7IFBvaW50TW9kZWwgfSBmcm9tICcuL3BvaW50Lm1vZGVsJztcbmltcG9ydCB7IENvb3JkcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29vcmRzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRCB9IGZyb20gJy4uL3V0aWxzL3Rvb2wta2l0LnV0aWwnO1xuXG5leHBvcnQgY2xhc3MgRGlhZ3JhbU1vZGVsIGV4dGVuZHMgQmFzZUVudGl0eSB7XG5cdGxpbmtzJDogQmVoYXZpb3JTdWJqZWN0PHsgW3M6IHN0cmluZ106IExpbmtNb2RlbCB9Pjtcblx0bm9kZXMkOiBCZWhhdmlvclN1YmplY3Q8eyBbczogc3RyaW5nXTogTm9kZU1vZGVsIH0+O1xuXHR6b29tJDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj47XG5cdG9mZnNldFgkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcblx0b2Zmc2V0WSQ6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+O1xuXHRncmlkU2l6ZSQ6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+O1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhZ3JhbUVuZ2luZTogRGlhZ3JhbUVuZ2luZSwgaWQ/OiBzdHJpbmcpIHtcblx0XHRzdXBlcihpZCk7XG5cdFx0dGhpcy5ub2RlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW3M6IHN0cmluZ106IE5vZGVNb2RlbCB9Pih7fSk7XG5cdFx0dGhpcy5saW5rcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW3M6IHN0cmluZ106IExpbmtNb2RlbCB9Pih7fSk7XG5cdFx0dGhpcy56b29tJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMTAwKTtcblx0XHR0aGlzLm9mZnNldFgkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgwKTtcblx0XHR0aGlzLm9mZnNldFkkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgwKTtcblx0XHR0aGlzLmdyaWRTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG5cdH1cblxuXHQvLyBUT0RPOiBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgZXZlbnRzIGZvciBsaW5rcyBhbmQgbm9kZXNcblx0Ly8gcmVtb3ZlZCwgdXBkYXRlZDxwb3NpdGlvbkNoYW5nZWQvZGF0YUNoYW5nZWQ+LCBhZGRlZFxuXG5cdGdldE5vZGVzKCk6IHsgW3M6IHN0cmluZ106IE5vZGVNb2RlbCB9IHtcblx0XHRyZXR1cm4gdGhpcy5ub2RlcyQuZ2V0VmFsdWUoKTtcblx0fVxuXG5cdGdldE5vZGUoaWQ6IElEKTogTm9kZU1vZGVsIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHRoaXMubm9kZXMkLmdldFZhbHVlKClbaWRdO1xuXHR9XG5cblx0Z2V0TGluayhpZDogSUQpOiBMaW5rTW9kZWwgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5saW5rcyQuZ2V0VmFsdWUoKVtpZF07XG5cdH1cblxuXHRnZXRMaW5rcygpOiB7IFtzOiBzdHJpbmddOiBMaW5rTW9kZWwgfSB7XG5cdFx0cmV0dXJuIHRoaXMubGlua3MkLmdldFZhbHVlKCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgbm9kZSB0byB0aGUgZGlhZ3JhbVxuXHQgKiBAcmV0dXJucyBJbnNlcnRlZCBOb2RlXG5cdCAqL1xuXHRhZGROb2RlKG5vZGU6IE5vZGVNb2RlbCk6IE5vZGVNb2RlbCB7XG5cdFx0dGhpcy5ub2RlcyQubmV4dCh7IC4uLnRoaXMubm9kZXMkLnZhbHVlLCBbbm9kZS5pZF06IG5vZGUgfSk7XG5cdFx0cmV0dXJuIG5vZGU7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlIGEgbm9kZSBmcm9tIHRoZSBkaWFncmFtXG5cdCAqL1xuXHRkZWxldGVOb2RlKG5vZGVPcklkOiBOb2RlTW9kZWwgfCBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBub2RlSUQ6IElEID0gdHlwZW9mIG5vZGVPcklkID09PSAnc3RyaW5nJyA/IG5vZGVPcklkIDogbm9kZU9ySWQuaWQ7XG5cblx0XHQvLyBUT0RPOiBkZWxldGUgYWxsIHJlbGF0ZWQgbGlua3Ncblx0XHRjb25zdCB1cGROb2RlcyA9IHsgLi4udGhpcy5ub2RlcyQudmFsdWUgfTtcblx0XHRkZWxldGUgdXBkTm9kZXNbbm9kZUlEXTtcblx0XHR0aGlzLm5vZGVzJC5uZXh0KHVwZE5vZGVzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgbm9kZXMgYmVoYXZpb3VyIHN1YmplY3QsIHVzZSBgLmdldFZhbHVlKClgIGZvciBzbmFwc2hvdFxuXHQgKi9cblx0c2VsZWN0Tm9kZXMoKTogT2JzZXJ2YWJsZTx7IFtzOiBzdHJpbmddOiBOb2RlTW9kZWwgfT4ge1xuXHRcdHJldHVybiB0aGlzLm5vZGVzJC5hc09ic2VydmFibGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgbGlua1xuXHQgKiBAcmV0dXJucyBOZXdseSBjcmVhdGVkIGxpbmtcblx0ICovXG5cdGFkZExpbmsobGluazogTGlua01vZGVsKTogTGlua01vZGVsIHtcblx0XHR0aGlzLmxpbmtzJC5uZXh0KHsgLi4udGhpcy5saW5rcyQudmFsdWUsIFtsaW5rLmlkXTogbGluayB9KTtcblx0XHRyZXR1cm4gbGluaztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGUgbGlua1xuXHQgKi9cblx0ZGVsZXRlTGluayhsaW5rT3JJZDogTGlua01vZGVsIHwgc3RyaW5nKSB7XG5cdFx0Y29uc3QgbGlua0lEOiBJRCA9IHR5cGVvZiBsaW5rT3JJZCA9PT0gJ3N0cmluZycgPyBsaW5rT3JJZCA6IGxpbmtPcklkLmlkO1xuXG5cdFx0Y29uc3QgdXBkTGlua3MgPSB7IC4uLnRoaXMubGlua3MkLnZhbHVlIH07XG5cdFx0ZGVsZXRlIHVwZExpbmtzW2xpbmtJRF07XG5cblx0XHR0aGlzLmxpbmtzJC5uZXh0KHVwZExpbmtzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgbGlua3MgYmVoYXZpb3VyIHN1YmplY3QsIHVzZSBgLmdldFZhbHVlKClgIGZvciBzbmFwc2hvdFxuXHQgKi9cblx0c2VsZWN0TGlua3MoKTogT2JzZXJ2YWJsZTx7IFtzOiBzdHJpbmddOiBMaW5rTW9kZWwgfT4ge1xuXHRcdHJldHVybiB0aGlzLmxpbmtzJC5hc09ic2VydmFibGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXJpYWxpemUgdGhlIGRpYWdyYW0gbW9kZWxcblx0ICogQHJldHVybnMgZGlhZ3JhbSBtb2RlbCBhcyBhIHN0cmluZ1xuXHQgKi9cblx0Ly8gc2VyaWFsaXplKCk6IHN0cmluZyB7XG5cdC8vIFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMubW9kZWwpO1xuXHQvLyB9XG5cblx0LyoqXG5cdCAqIExvYWQgaW50byB0aGUgZGlhZ3JhbSBtb2RlbCBhIHNlcmlhbGl6ZWQgZGlhZ3JhbVxuXHQgKi9cblx0Ly8gZGVzZXJpYWxpemUoc2VyaWFsaXplZE1vZGVsOiBzdHJpbmcpIHtcblx0Ly8gXHR0aGlzLm1vZGVsID0gSlNPTi5wYXJzZShzZXJpYWxpemVkTW9kZWwpO1xuXHQvLyB9XG5cblx0c2V0T2Zmc2V0KHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG5cdFx0dGhpcy5vZmZzZXRYJC5uZXh0KHgpO1xuXHRcdHRoaXMub2Zmc2V0WSQubmV4dCh5KTtcblx0fVxuXG5cdHNldE9mZnNldFgoeDogbnVtYmVyKSB7XG5cdFx0dGhpcy5vZmZzZXRYJC5uZXh0KHgpO1xuXHR9XG5cblx0Z2V0T2Zmc2V0WCgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm9mZnNldFgkLmdldFZhbHVlKCk7XG5cdH1cblxuXHRzZWxlY3RPZmZzZXRYKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG5cdFx0cmV0dXJuIHRoaXMub2Zmc2V0WCQuYXNPYnNlcnZhYmxlKCk7XG5cdH1cblxuXHRzZXRPZmZzZXRZKHk6IG51bWJlcikge1xuXHRcdHRoaXMub2Zmc2V0WSQubmV4dCh5KTtcblx0fVxuXG5cdGdldE9mZnNldFkoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5vZmZzZXRZJC5nZXRWYWx1ZSgpO1xuXHR9XG5cblx0c2VsZWN0T2Zmc2V0WSgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuXHRcdHJldHVybiB0aGlzLm9mZnNldFkkLmFzT2JzZXJ2YWJsZSgpO1xuXHR9XG5cblx0c2V0Wm9vbUxldmVsKHo6IG51bWJlcikge1xuXHRcdHRoaXMuem9vbSQubmV4dCh6KTtcblx0fVxuXG5cdGdldFpvb21MZXZlbCgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLnpvb20kLmdldFZhbHVlKCk7XG5cdH1cblxuXHRzZWxlY3Rab29tTGV2ZWwoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblx0XHRyZXR1cm4gdGhpcy56b29tJC5hc09ic2VydmFibGUoKTtcblx0fVxuXG5cdGdldERpYWdyYW1FbmdpbmUoKTogRGlhZ3JhbUVuZ2luZSB7XG5cdFx0cmV0dXJuIHRoaXMuZGlhZ3JhbUVuZ2luZTtcblx0fVxuXG5cdGNsZWFyU2VsZWN0aW9uKGlnbm9yZTogQmFzZU1vZGVsIHwgbnVsbCA9IG51bGwpIHtcblx0XHR0aGlzLmdldFNlbGVjdGVkSXRlbXMoKS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuXHRcdFx0aWYgKGlnbm9yZSAmJiBpZ25vcmUuaWQgPT09IGVsZW1lbnQuaWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZWxlbWVudC5zZXRTZWxlY3RlZChmYWxzZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRHcmlkUG9zaXRpb24oeyB4LCB5IH06IENvb3Jkcyk6IENvb3JkcyB7XG5cdFx0Y29uc3QgZ3JpZFNpemUgPSB0aGlzLmdyaWRTaXplJC5nZXRWYWx1ZSgpO1xuXHRcdGlmIChncmlkU2l6ZSA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHsgeCwgeSB9O1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0eDogZ3JpZFNpemUgKiBNYXRoLmZsb29yKCh4ICsgZ3JpZFNpemUgLyAyKSAvIGdyaWRTaXplKSxcblx0XHRcdHk6IGdyaWRTaXplICogTWF0aC5mbG9vcigoeSArIGdyaWRTaXplIC8gMikgLyBncmlkU2l6ZSlcblx0XHR9O1xuXHR9XG5cblx0Z2V0U2VsZWN0ZWRJdGVtcyguLi5maWx0ZXJzOiBCYXNlRW50aXR5VHlwZVtdKTogQmFzZU1vZGVsW10ge1xuXHRcdGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXJzKSkge1xuXHRcdFx0ZmlsdGVycyA9IFtmaWx0ZXJzXTtcblx0XHR9XG5cdFx0bGV0IGl0ZW1zID0gW107XG5cblx0XHQvLyBydW4gdGhyb3VnaCBub2Rlc1xuXHRcdGl0ZW1zID0gaXRlbXMuY29uY2F0KFxuXHRcdFx0ZmxhdE1hcCh0aGlzLm5vZGVzJC5nZXRWYWx1ZSgpLCBub2RlID0+IHtcblx0XHRcdFx0cmV0dXJuIG5vZGUuZ2V0U2VsZWN0ZWRFbnRpdGllcygpO1xuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0Ly8gZmluZCBhbGwgdGhlIGxpbmtzXG5cdFx0aXRlbXMgPSBpdGVtcy5jb25jYXQoXG5cdFx0XHRmbGF0TWFwKHRoaXMubGlua3MkLmdldFZhbHVlKCksIGxpbmsgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbGluay5nZXRTZWxlY3RlZEVudGl0aWVzKCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHQvLyBmaW5kIGFsbCBwb2ludHNcblx0XHRpdGVtcyA9IGl0ZW1zLmNvbmNhdChcblx0XHRcdGZsYXRNYXAodGhpcy5saW5rcyQuZ2V0VmFsdWUoKSwgbGluayA9PiB7XG5cdFx0XHRcdHJldHVybiBmbGF0TWFwKGxpbmsuZ2V0UG9pbnRzKCksIHBvaW50ID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gcG9pbnQuZ2V0U2VsZWN0ZWRFbnRpdGllcygpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGl0ZW1zID0gdW5pcShpdGVtcyk7XG5cblx0XHRpZiAoZmlsdGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRpdGVtcyA9IHVuaXEoaXRlbXMpLmZpbHRlcigoaXRlbTogQmFzZU1vZGVsKSA9PiB7XG5cdFx0XHRcdGlmIChmaWx0ZXJzLmluY2x1ZGVzKCdub2RlJykgJiYgaXRlbSBpbnN0YW5jZW9mIE5vZGVNb2RlbCkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChmaWx0ZXJzLmluY2x1ZGVzKCdsaW5rJykgJiYgaXRlbSBpbnN0YW5jZW9mIExpbmtNb2RlbCkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChmaWx0ZXJzLmluY2x1ZGVzKCdwb3J0JykgJiYgaXRlbSBpbnN0YW5jZW9mIFBvcnRNb2RlbCkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChmaWx0ZXJzLmluY2x1ZGVzKCdwb2ludCcpICYmIGl0ZW0gaW5zdGFuY2VvZiBQb2ludE1vZGVsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGl0ZW1zO1xuXHR9XG5cblx0YWRkQWxsKC4uLm1vZGVsczogQmFzZU1vZGVsW10pIHtcblx0XHRtb2RlbHMuZm9yRWFjaChtb2RlbCA9PiB7XG5cdFx0XHRpZiAobW9kZWwgaW5zdGFuY2VvZiBMaW5rTW9kZWwpIHtcblx0XHRcdFx0dGhpcy5hZGRMaW5rKG1vZGVsKTtcblx0XHRcdH0gZWxzZSBpZiAobW9kZWwgaW5zdGFuY2VvZiBOb2RlTW9kZWwpIHtcblx0XHRcdFx0dGhpcy5hZGROb2RlKG1vZGVsKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gbW9kZWxzO1xuXHR9XG59XG4iXX0=