UNPKG

ngx-diagrams

Version:

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

491 lines 29.5 kB
/** * @fileoverview added by tsickle * Generated from: lib/models/diagram.model.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; 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'; var DiagramModel = /** @class */ (function (_super) { tslib_1.__extends(DiagramModel, _super); function DiagramModel(diagramEngine, id) { var _this = _super.call(this, id) || this; _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); return _this; } // TODO: support the following events for links and nodes // removed, updated<positionChanged/dataChanged>, added // TODO: support the following events for links and nodes // removed, updated<positionChanged/dataChanged>, added /** * @return {?} */ DiagramModel.prototype.getNodes = // TODO: support the following events for links and nodes // removed, updated<positionChanged/dataChanged>, added /** * @return {?} */ function () { return this.nodes$.getValue(); }; /** * @param {?} id * @return {?} */ DiagramModel.prototype.getNode = /** * @param {?} id * @return {?} */ function (id) { return this.nodes$.getValue()[id]; }; /** * @param {?} id * @return {?} */ DiagramModel.prototype.getLink = /** * @param {?} id * @return {?} */ function (id) { return this.links$.getValue()[id]; }; /** * @return {?} */ DiagramModel.prototype.getLinks = /** * @return {?} */ function () { return this.links$.getValue(); }; /** * Add a node to the diagram * @returns Inserted Node */ /** * Add a node to the diagram * @param {?} node * @return {?} Inserted Node */ DiagramModel.prototype.addNode = /** * Add a node to the diagram * @param {?} node * @return {?} Inserted Node */ function (node) { var _a; this.nodes$.next(tslib_1.__assign({}, this.nodes$.value, (_a = {}, _a[node.id] = node, _a))); return node; }; /** * Delete a node from the diagram */ /** * Delete a node from the diagram * @param {?} nodeOrId * @return {?} */ DiagramModel.prototype.deleteNode = /** * Delete a node from the diagram * @param {?} nodeOrId * @return {?} */ function (nodeOrId) { /** @type {?} */ var nodeID = typeof nodeOrId === 'string' ? nodeOrId : nodeOrId.id; // TODO: delete all related links /** @type {?} */ var updNodes = tslib_1.__assign({}, this.nodes$.value); delete updNodes[nodeID]; this.nodes$.next(updNodes); }; /** * Get nodes behaviour subject, use `.getValue()` for snapshot */ /** * Get nodes behaviour subject, use `.getValue()` for snapshot * @return {?} */ DiagramModel.prototype.selectNodes = /** * Get nodes behaviour subject, use `.getValue()` for snapshot * @return {?} */ function () { return this.nodes$.asObservable(); }; /** * Add link * @returns Newly created link */ /** * Add link * @param {?} link * @return {?} Newly created link */ DiagramModel.prototype.addLink = /** * Add link * @param {?} link * @return {?} Newly created link */ function (link) { var _a; this.links$.next(tslib_1.__assign({}, this.links$.value, (_a = {}, _a[link.id] = link, _a))); return link; }; /** * Delete link */ /** * Delete link * @param {?} linkOrId * @return {?} */ DiagramModel.prototype.deleteLink = /** * Delete link * @param {?} linkOrId * @return {?} */ function (linkOrId) { /** @type {?} */ var linkID = typeof linkOrId === 'string' ? linkOrId : linkOrId.id; /** @type {?} */ var updLinks = tslib_1.__assign({}, this.links$.value); delete updLinks[linkID]; this.links$.next(updLinks); }; /** * Get links behaviour subject, use `.getValue()` for snapshot */ /** * Get links behaviour subject, use `.getValue()` for snapshot * @return {?} */ DiagramModel.prototype.selectLinks = /** * Get links behaviour subject, use `.getValue()` for snapshot * @return {?} */ function () { 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 */ // deserialize(serializedModel: string) { // this.model = JSON.parse(serializedModel); // } /** * 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); // } DiagramModel.prototype.setOffset = /** * 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); // } function (x, y) { this.offsetX$.next(x); this.offsetY$.next(y); }; /** * @param {?} x * @return {?} */ DiagramModel.prototype.setOffsetX = /** * @param {?} x * @return {?} */ function (x) { this.offsetX$.next(x); }; /** * @return {?} */ DiagramModel.prototype.getOffsetX = /** * @return {?} */ function () { return this.offsetX$.getValue(); }; /** * @return {?} */ DiagramModel.prototype.selectOffsetX = /** * @return {?} */ function () { return this.offsetX$.asObservable(); }; /** * @param {?} y * @return {?} */ DiagramModel.prototype.setOffsetY = /** * @param {?} y * @return {?} */ function (y) { this.offsetY$.next(y); }; /** * @return {?} */ DiagramModel.prototype.getOffsetY = /** * @return {?} */ function () { return this.offsetY$.getValue(); }; /** * @return {?} */ DiagramModel.prototype.selectOffsetY = /** * @return {?} */ function () { return this.offsetY$.asObservable(); }; /** * @param {?} z * @return {?} */ DiagramModel.prototype.setZoomLevel = /** * @param {?} z * @return {?} */ function (z) { this.zoom$.next(z); }; /** * @return {?} */ DiagramModel.prototype.getZoomLevel = /** * @return {?} */ function () { return this.zoom$.getValue(); }; /** * @return {?} */ DiagramModel.prototype.selectZoomLevel = /** * @return {?} */ function () { return this.zoom$.asObservable(); }; /** * @return {?} */ DiagramModel.prototype.getDiagramEngine = /** * @return {?} */ function () { return this.diagramEngine; }; /** * @param {?=} ignore * @return {?} */ DiagramModel.prototype.clearSelection = /** * @param {?=} ignore * @return {?} */ function (ignore) { if (ignore === void 0) { ignore = null; } this.getSelectedItems().forEach((/** * @param {?} element * @return {?} */ function (element) { if (ignore && ignore.id === element.id) { return; } element.setSelected(false); })); }; /** * @param {?} __0 * @return {?} */ DiagramModel.prototype.getGridPosition = /** * @param {?} __0 * @return {?} */ function (_a) { var x = _a.x, y = _a.y; /** @type {?} */ var gridSize = this.gridSize$.getValue(); if (gridSize === 0) { return { x: x, y: y }; } return { x: gridSize * Math.floor((x + gridSize / 2) / gridSize), y: gridSize * Math.floor((y + gridSize / 2) / gridSize) }; }; /** * @param {...?} filters * @return {?} */ DiagramModel.prototype.getSelectedItems = /** * @param {...?} filters * @return {?} */ function () { var filters = []; for (var _i = 0; _i < arguments.length; _i++) { filters[_i] = arguments[_i]; } if (!Array.isArray(filters)) { filters = [filters]; } /** @type {?} */ var items = []; // run through nodes items = items.concat(flatMap(this.nodes$.getValue(), (/** * @param {?} node * @return {?} */ function (node) { return node.getSelectedEntities(); }))); // find all the links items = items.concat(flatMap(this.links$.getValue(), (/** * @param {?} link * @return {?} */ function (link) { return link.getSelectedEntities(); }))); // find all points items = items.concat(flatMap(this.links$.getValue(), (/** * @param {?} link * @return {?} */ function (link) { return flatMap(link.getPoints(), (/** * @param {?} point * @return {?} */ function (point) { return point.getSelectedEntities(); })); }))); items = uniq(items); if (filters.length > 0) { items = uniq(items).filter((/** * @param {?} item * @return {?} */ function (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 {?} */ DiagramModel.prototype.addAll = /** * @param {...?} models * @return {?} */ function () { var _this = this; var models = []; for (var _i = 0; _i < arguments.length; _i++) { models[_i] = arguments[_i]; } models.forEach((/** * @param {?} model * @return {?} */ function (model) { if (model instanceof LinkModel) { _this.addLink(model); } else if (model instanceof NodeModel) { _this.addNode(model); } })); return models; }; return DiagramModel; }(BaseEntity)); export { DiagramModel }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ3JhbS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1kaWFncmFtcy8iLCJzb3VyY2VzIjpbImxpYi9tb2RlbHMvZGlhZ3JhbS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLGdCQUFnQixDQUFDO0FBRzVELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzQztJQUFrQyx3Q0FBVTtJQVEzQyxzQkFBb0IsYUFBNEIsRUFBRSxFQUFXO1FBQTdELFlBQ0Msa0JBQU0sRUFBRSxDQUFDLFNBT1Q7UUFSbUIsbUJBQWEsR0FBYixhQUFhLENBQWU7UUFFL0MsS0FBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBNkIsRUFBRSxDQUFDLENBQUM7UUFDbEUsS0FBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBNkIsRUFBRSxDQUFDLENBQUM7UUFDbEUsS0FBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxLQUFJLENBQUMsUUFBUSxHQUFHLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLEtBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsS0FBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFDekMsQ0FBQztJ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QUFRLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxZQUFZLFVBQVUsRUFBRTtvQkFDNUQsT0FBTyxJQUFJLENBQUM7aUJBQ1o7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZCxDQUFDLEVBQUMsQ0FBQztTQUNIO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDOzs7OztJQUVELDZCQUFNOzs7O0lBQU47UUFBQSxpQkFTQztRQVRNLGdCQUFzQjthQUF0QixVQUFzQixFQUF0QixxQkFBc0IsRUFBdEIsSUFBc0I7WUFBdEIsMkJBQXNCOztRQUM1QixNQUFNLENBQUMsT0FBTzs7OztRQUFDLFVBQUEsS0FBSztZQUNuQixJQUFJLEtBQUssWUFBWSxTQUFTLEVBQUU7Z0JBQy9CLEtBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDcEI7aUJBQU0sSUFBSSxLQUFLLFlBQVksU0FBUyxFQUFFO2dCQUN0QyxLQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3BCO1FBQ0YsQ0FBQyxFQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUM7SUFDRixtQkFBQztBQUFELENBQUMsQUEzT0QsQ0FBa0MsVUFBVSxHQTJPM0M7Ozs7SUExT0EsOEJBQW9EOztJQUNwRCw4QkFBb0Q7O0lBQ3BELDZCQUErQjs7SUFDL0IsZ0NBQWtDOztJQUNsQyxnQ0FBa0M7O0lBQ2xDLGlDQUFtQzs7Ozs7SUFFdkIscUNBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuL25vZGUubW9kZWwnO1xuaW1wb3J0IHsgTGlua01vZGVsIH0gZnJvbSAnLi9saW5rLm1vZGVsJztcbmltcG9ydCB7IEJhc2VFbnRpdHksIEJhc2VFbnRpdHlUeXBlIH0gZnJvbSAnLi4vYmFzZS5lbnRpdHknO1xuaW1wb3J0IHsgRGlhZ3JhbUVuZ2luZSB9IGZyb20gJy4uL3NlcnZpY2VzL2VuZ2luZS5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VNb2RlbCB9IGZyb20gJy4vYmFzZS5tb2RlbCc7XG5pbXBvcnQgeyB1bmlxLCBmbGF0TWFwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFBvcnRNb2RlbCB9IGZyb20gJy4vcG9ydC5tb2RlbCc7XG5pbXBvcnQgeyBQb2ludE1vZGVsIH0gZnJvbSAnLi9wb2ludC5tb2RlbCc7XG5pbXBvcnQgeyBDb29yZHMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nvb3Jkcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUQgfSBmcm9tICcuLi91dGlscy90b29sLWtpdC51dGlsJztcblxuZXhwb3J0IGNsYXNzIERpYWdyYW1Nb2RlbCBleHRlbmRzIEJhc2VFbnRpdHkge1xuXHRsaW5rcyQ6IEJlaGF2aW9yU3ViamVjdDx7IFtzOiBzdHJpbmddOiBMaW5rTW9kZWwgfT47XG5cdG5vZGVzJDogQmVoYXZpb3JTdWJqZWN0PHsgW3M6IHN0cmluZ106IE5vZGVNb2RlbCB9Pjtcblx0em9vbSQ6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+O1xuXHRvZmZzZXRYJDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj47XG5cdG9mZnNldFkkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcblx0Z3JpZFNpemUkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWdyYW1FbmdpbmU6IERpYWdyYW1FbmdpbmUsIGlkPzogc3RyaW5nKSB7XG5cdFx0c3VwZXIoaWQpO1xuXHRcdHRoaXMubm9kZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtzOiBzdHJpbmddOiBOb2RlTW9kZWwgfT4oe30pO1xuXHRcdHRoaXMubGlua3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtzOiBzdHJpbmddOiBMaW5rTW9kZWwgfT4oe30pO1xuXHRcdHRoaXMuem9vbSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDEwMCk7XG5cdFx0dGhpcy5vZmZzZXRYJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG5cdFx0dGhpcy5vZmZzZXRZJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG5cdFx0dGhpcy5ncmlkU2l6ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDApO1xuXHR9XG5cblx0Ly8gVE9ETzogc3VwcG9ydCB0aGUgZm9sbG93aW5nIGV2ZW50cyBmb3IgbGlua3MgYW5kIG5vZGVzXG5cdC8vIHJlbW92ZWQsIHVwZGF0ZWQ8cG9zaXRpb25DaGFuZ2VkL2RhdGFDaGFuZ2VkPiwgYWRkZWRcblxuXHRnZXROb2RlcygpOiB7IFtzOiBzdHJpbmddOiBOb2RlTW9kZWwgfSB7XG5cdFx0cmV0dXJuIHRoaXMubm9kZXMkLmdldFZhbHVlKCk7XG5cdH1cblxuXHRnZXROb2RlKGlkOiBJRCk6IE5vZGVNb2RlbCB8IG51bGwge1xuXHRcdHJldHVybiB0aGlzLm5vZGVzJC5nZXRWYWx1ZSgpW2lkXTtcblx0fVxuXG5cdGdldExpbmsoaWQ6IElEKTogTGlua01vZGVsIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHRoaXMubGlua3MkLmdldFZhbHVlKClbaWRdO1xuXHR9XG5cblx0Z2V0TGlua3MoKTogeyBbczogc3RyaW5nXTogTGlua01vZGVsIH0ge1xuXHRcdHJldHVybiB0aGlzLmxpbmtzJC5nZXRWYWx1ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIG5vZGUgdG8gdGhlIGRpYWdyYW1cblx0ICogQHJldHVybnMgSW5zZXJ0ZWQgTm9kZVxuXHQgKi9cblx0YWRkTm9kZShub2RlOiBOb2RlTW9kZWwpOiBOb2RlTW9kZWwge1xuXHRcdHRoaXMubm9kZXMkLm5leHQoeyAuLi50aGlzLm5vZGVzJC52YWx1ZSwgW25vZGUuaWRdOiBub2RlIH0pO1xuXHRcdHJldHVybiBub2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZSBhIG5vZGUgZnJvbSB0aGUgZGlhZ3JhbVxuXHQgKi9cblx0ZGVsZXRlTm9kZShub2RlT3JJZDogTm9kZU1vZGVsIHwgc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgbm9kZUlEOiBJRCA9IHR5cGVvZiBub2RlT3JJZCA9PT0gJ3N0cmluZycgPyBub2RlT3JJZCA6IG5vZGVPcklkLmlkO1xuXG5cdFx0Ly8gVE9ETzogZGVsZXRlIGFsbCByZWxhdGVkIGxpbmtzXG5cdFx0Y29uc3QgdXBkTm9kZXMgPSB7IC4uLnRoaXMubm9kZXMkLnZhbHVlIH07XG5cdFx0ZGVsZXRlIHVwZE5vZGVzW25vZGVJRF07XG5cdFx0dGhpcy5ub2RlcyQubmV4dCh1cGROb2Rlcyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IG5vZGVzIGJlaGF2aW91ciBzdWJqZWN0LCB1c2UgYC5nZXRWYWx1ZSgpYCBmb3Igc25hcHNob3Rcblx0ICovXG5cdHNlbGVjdE5vZGVzKCk6IE9ic2VydmFibGU8eyBbczogc3RyaW5nXTogTm9kZU1vZGVsIH0+IHtcblx0XHRyZXR1cm4gdGhpcy5ub2RlcyQuYXNPYnNlcnZhYmxlKCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGxpbmtcblx0ICogQHJldHVybnMgTmV3bHkgY3JlYXRlZCBsaW5rXG5cdCAqL1xuXHRhZGRMaW5rKGxpbms6IExpbmtNb2RlbCk6IExpbmtNb2RlbCB7XG5cdFx0dGhpcy5saW5rcyQubmV4dCh7IC4uLnRoaXMubGlua3MkLnZhbHVlLCBbbGluay5pZF06IGxpbmsgfSk7XG5cdFx0cmV0dXJuIGxpbms7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlIGxpbmtcblx0ICovXG5cdGRlbGV0ZUxpbmsobGlua09ySWQ6IExpbmtNb2RlbCB8IHN0cmluZykge1xuXHRcdGNvbnN0IGxpbmtJRDogSUQgPSB0eXBlb2YgbGlua09ySWQgPT09ICdzdHJpbmcnID8gbGlua09ySWQgOiBsaW5rT3JJZC5pZDtcblxuXHRcdGNvbnN0IHVwZExpbmtzID0geyAuLi50aGlzLmxpbmtzJC52YWx1ZSB9O1xuXHRcdGRlbGV0ZSB1cGRMaW5rc1tsaW5rSURdO1xuXG5cdFx0dGhpcy5saW5rcyQubmV4dCh1cGRMaW5rcyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGxpbmtzIGJlaGF2aW91ciBzdWJqZWN0LCB1c2UgYC5nZXRWYWx1ZSgpYCBmb3Igc25hcHNob3Rcblx0ICovXG5cdHNlbGVjdExpbmtzKCk6IE9ic2VydmFibGU8eyBbczogc3RyaW5nXTogTGlua01vZGVsIH0+IHtcblx0XHRyZXR1cm4gdGhpcy5saW5rcyQuYXNPYnNlcnZhYmxlKCk7XG5cdH1cblxuXHQvKipcblx0ICogU2VyaWFsaXplIHRoZSBkaWFncmFtIG1vZGVsXG5cdCAqIEByZXR1cm5zIGRpYWdyYW0gbW9kZWwgYXMgYSBzdHJpbmdcblx0ICovXG5cdC8vIHNlcmlhbGl6ZSgpOiBzdHJpbmcge1xuXHQvLyBcdHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsKTtcblx0Ly8gfVxuXG5cdC8qKlxuXHQgKiBMb2FkIGludG8gdGhlIGRpYWdyYW0gbW9kZWwgYSBzZXJpYWxpemVkIGRpYWdyYW1cblx0ICovXG5cdC8vIGRlc2VyaWFsaXplKHNlcmlhbGl6ZWRNb2RlbDogc3RyaW5nKSB7XG5cdC8vIFx0dGhpcy5tb2RlbCA9IEpTT04ucGFyc2Uoc2VyaWFsaXplZE1vZGVsKTtcblx0Ly8gfVxuXG5cdHNldE9mZnNldCh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuXHRcdHRoaXMub2Zmc2V0WCQubmV4dCh4KTtcblx0XHR0aGlzLm9mZnNldFkkLm5leHQoeSk7XG5cdH1cblxuXHRzZXRPZmZzZXRYKHg6IG51bWJlcikge1xuXHRcdHRoaXMub2Zmc2V0WCQubmV4dCh4KTtcblx0fVxuXG5cdGdldE9mZnNldFgoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5vZmZzZXRYJC5nZXRWYWx1ZSgpO1xuXHR9XG5cblx0c2VsZWN0T2Zmc2V0WCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuXHRcdHJldHVybiB0aGlzLm9mZnNldFgkLmFzT2JzZXJ2YWJsZSgpO1xuXHR9XG5cblx0c2V0T2Zmc2V0WSh5OiBudW1iZXIpIHtcblx0XHR0aGlzLm9mZnNldFkkLm5leHQoeSk7XG5cdH1cblxuXHRnZXRPZmZzZXRZKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMub2Zmc2V0WSQuZ2V0VmFsdWUoKTtcblx0fVxuXG5cdHNlbGVjdE9mZnNldFkoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblx0XHRyZXR1cm4gdGhpcy5vZmZzZXRZJC5hc09ic2VydmFibGUoKTtcblx0fVxuXG5cdHNldFpvb21MZXZlbCh6OiBudW1iZXIpIHtcblx0XHR0aGlzLnpvb20kLm5leHQoeik7XG5cdH1cblxuXHRnZXRab29tTGV2ZWwoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy56b29tJC5nZXRWYWx1ZSgpO1xuXHR9XG5cblx0c2VsZWN0Wm9vbUxldmVsKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG5cdFx0cmV0dXJuIHRoaXMuem9vbSQuYXNPYnNlcnZhYmxlKCk7XG5cdH1cblxuXHRnZXREaWFncmFtRW5naW5lKCk6IERpYWdyYW1FbmdpbmUge1xuXHRcdHJldHVybiB0aGlzLmRpYWdyYW1FbmdpbmU7XG5cdH1cblxuXHRjbGVhclNlbGVjdGlvbihpZ25vcmU6IEJhc2VNb2RlbCB8IG51bGwgPSBudWxsKSB7XG5cdFx0dGhpcy5nZXRTZWxlY3RlZEl0ZW1zKCkuZm9yRWFjaChlbGVtZW50ID0+IHtcblx0XHRcdGlmIChpZ25vcmUgJiYgaWdub3JlLmlkID09PSBlbGVtZW50LmlkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGVsZW1lbnQuc2V0U2VsZWN0ZWQoZmFsc2UpO1xuXHRcdH0pO1xuXHR9XG5cblx0Z2V0R3JpZFBvc2l0aW9uKHsgeCwgeSB9OiBDb29yZHMpOiBDb29yZHMge1xuXHRcdGNvbnN0IGdyaWRTaXplID0gdGhpcy5ncmlkU2l6ZSQuZ2V0VmFsdWUoKTtcblx0XHRpZiAoZ3JpZFNpemUgPT09IDApIHtcblx0XHRcdHJldHVybiB7IHgsIHkgfTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHg6IGdyaWRTaXplICogTWF0aC5mbG9vcigoeCArIGdyaWRTaXplIC8gMikgLyBncmlkU2l6ZSksXG5cdFx0XHR5OiBncmlkU2l6ZSAqIE1hdGguZmxvb3IoKHkgKyBncmlkU2l6ZSAvIDIpIC8gZ3JpZFNpemUpXG5cdFx0fTtcblx0fVxuXG5cdGdldFNlbGVjdGVkSXRlbXMoLi4uZmlsdGVyczogQmFzZUVudGl0eVR5cGVbXSk6IEJhc2VNb2RlbFtdIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVycykpIHtcblx0XHRcdGZpbHRlcnMgPSBbZmlsdGVyc107XG5cdFx0fVxuXHRcdGxldCBpdGVtcyA9IFtdO1xuXG5cdFx0Ly8gcnVuIHRocm91Z2ggbm9kZXNcblx0XHRpdGVtcyA9IGl0ZW1zLmNvbmNhdChcblx0XHRcdGZsYXRNYXAodGhpcy5ub2RlcyQuZ2V0VmFsdWUoKSwgbm9kZSA9PiB7XG5cdFx0XHRcdHJldHVybiBub2RlLmdldFNlbGVjdGVkRW50aXRpZXMoKTtcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdC8vIGZpbmQgYWxsIHRoZSBsaW5rc1xuXHRcdGl0ZW1zID0gaXRlbXMuY29uY2F0KFxuXHRcdFx0ZmxhdE1hcCh0aGlzLmxpbmtzJC5nZXRWYWx1ZSgpLCBsaW5rID0+IHtcblx0XHRcdFx0cmV0dXJuIGxpbmsuZ2V0U2VsZWN0ZWRFbnRpdGllcygpO1xuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0Ly8gZmluZCBhbGwgcG9pbnRzXG5cdFx0aXRlbXMgPSBpdGVtcy5jb25jYXQoXG5cdFx0XHRmbGF0TWFwKHRoaXMubGlua3MkLmdldFZhbHVlKCksIGxpbmsgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmxhdE1hcChsaW5rLmdldFBvaW50cygpLCBwb2ludCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHBvaW50LmdldFNlbGVjdGVkRW50aXRpZXMoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHRpdGVtcyA9IHVuaXEoaXRlbXMpO1xuXG5cdFx0aWYgKGZpbHRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0aXRlbXMgPSB1bmlxKGl0ZW1zKS5maWx0ZXIoKGl0ZW06IEJhc2VNb2RlbCkgPT4ge1xuXHRcdFx0XHRpZiAoZmlsdGVycy5pbmNsdWRlcygnbm9kZScpICYmIGl0ZW0gaW5zdGFuY2VvZiBOb2RlTW9kZWwpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZmlsdGVycy5pbmNsdWRlcygnbGluaycpICYmIGl0ZW0gaW5zdGFuY2VvZiBMaW5rTW9kZWwpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZmlsdGVycy5pbmNsdWRlcygncG9ydCcpICYmIGl0ZW0gaW5zdGFuY2VvZiBQb3J0TW9kZWwpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZmlsdGVycy5pbmNsdWRlcygncG9pbnQnKSAmJiBpdGVtIGluc3RhbmNlb2YgUG9pbnRNb2RlbCkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBpdGVtcztcblx0fVxuXG5cdGFkZEFsbCguLi5tb2RlbHM6IEJhc2VNb2RlbFtdKSB7XG5cdFx0bW9kZWxzLmZvckVhY2gobW9kZWwgPT4ge1xuXHRcdFx0aWYgKG1vZGVsIGluc3RhbmNlb2YgTGlua01vZGVsKSB7XG5cdFx0XHRcdHRoaXMuYWRkTGluayhtb2RlbCk7XG5cdFx0XHR9IGVsc2UgaWYgKG1vZGVsIGluc3RhbmNlb2YgTm9kZU1vZGVsKSB7XG5cdFx0XHRcdHRoaXMuYWRkTm9kZShtb2RlbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG1vZGVscztcblx0fVxufVxuIl19