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
JavaScript
/**
* @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=