ngx-xyflow
Version:
Angular wrapper for the popular xyflow (formerly Reactflow) library
218 lines • 24.5 kB
JavaScript
import { NgTemplateOutlet } from '@angular/common';
import { Component, ContentChild, ContentChildren, Directive, EventEmitter, Input, Output, TemplateRef } from '@angular/core';
import { Handle, NodeResizer, NodeToolbar } from '@xyflow/react';
import * as React from 'react';
import { HandleDirective } from './handle.directive';
import { NodeResizerDirective } from './node-resizer.directive';
import { NodeToolbarDirective } from './node-toolbar.directive';
import { AutoWrapAngularObject, ng2ReactProps } from 'ngx-reactify';
import * as i0 from "@angular/core";
import * as i1 from "./xyflow.component";
class XYFlowNodeComponent {
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: XYFlowNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: XYFlowNodeComponent, isStandalone: true, selector: "ngx-xyflow-node", inputs: { template: "template", data: "data", node: "node" }, ngImport: i0, template: `
@if(template) {
<ng-container
[ngTemplateOutlet]="template"
[ngTemplateOutletContext]="{ '$implicit': data }"
/>
}
@else {
<span style="color: red">
Node has no template.
</span>
}
`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: XYFlowNodeComponent, decorators: [{
type: Component,
args: [{
selector: "ngx-xyflow-node",
template: `
@if(template) {
<ng-container
[ngTemplateOutlet]="template"
[ngTemplateOutletContext]="{ '$implicit': data }"
/>
}
@else {
<span style="color: red">
Node has no template.
</span>
}
`,
imports: [
NgTemplateOutlet
],
standalone: true
}]
}], propDecorators: { template: [{
type: Input
}], data: [{
type: Input
}], node: [{
type: Input
}] } });
export class NodeDirective {
constructor(xyflow, appRef, injector, ngZone) {
this.xyflow = xyflow;
this.appRef = appRef;
this.injector = injector;
this.ngZone = ngZone;
this.blur = new EventEmitter();
this.click = new EventEmitter();
this.contextmenu = new EventEmitter();
this.dblclick = new EventEmitter();
this.drag = new EventEmitter();
this.dragend = new EventEmitter();
this.dragenter = new EventEmitter();
this.dragleave = new EventEmitter();
this.dragover = new EventEmitter();
this.dragstart = new EventEmitter();
this.focus = new EventEmitter();
this.keydown = new EventEmitter();
this.keyup = new EventEmitter();
this.keypress = new EventEmitter();
this.mousedown = new EventEmitter();
this.mouseenter = new EventEmitter();
this.mouseleave = new EventEmitter();
this.mousemove = new EventEmitter();
this.mouseout = new EventEmitter();
this.mouseover = new EventEmitter();
this.mouseup = new EventEmitter();
this.mousewheel = new EventEmitter();
this.pointercancel = new EventEmitter();
this.pointerdown = new EventEmitter();
this.pointerenter = new EventEmitter();
this.pointerleave = new EventEmitter();
this.pointermove = new EventEmitter();
this.pointerout = new EventEmitter();
this.pointerover = new EventEmitter();
this.pointerrawupdate = new EventEmitter();
this.pointerup = new EventEmitter();
this.resize = new EventEmitter();
this.scroll = new EventEmitter();
this.wheel = new EventEmitter();
}
ngOnChanges(changes) {
this.xyflow.ngOnChanges(changes);
}
ngAfterViewInit() {
if (!this.nodeType) {
console.error(new Error("NGX: XYFlow Node bootstrapped without a node type!\n"));
return;
}
this.xyflow.nodeTypes[this.nodeType] = AutoWrapAngularObject({
component: XYFlowNodeComponent,
appRef: this.appRef,
injector: this.injector,
instance: this,
ngZone: this.ngZone,
containerTag: "ngx-xyflow-node-container",
reactTemplate: el => {
return React.createElement(React.Fragment, {}, ...[
this.nodeResizer ? React.createElement(NodeResizer, ng2ReactProps(this.nodeResizer)) : null,
this.nodeToolbar ? React.createElement(NodeToolbar, ng2ReactProps(this.nodeToolbar)) : null,
el,
...(this.handles?.map(handle => {
const props = ng2ReactProps(handle);
// props.onConnect = (connection) =>
// handle.onConnect.next(connection);
return React.createElement(Handle, props);
}) || []),
].filter(n => !!n));
}
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NodeDirective, deps: [{ token: i1.XYFlowComponent }, { token: i0.ApplicationRef }, { token: i0.Injector }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: NodeDirective, selector: "ngx-xyflow>ngx-xyflow-node", inputs: { nodeType: "nodeType" }, outputs: { blur: "blur", click: "click", contextmenu: "contextmenu", dblclick: "dblclick", drag: "drag", dragend: "dragend", dragenter: "dragenter", dragleave: "dragleave", dragover: "dragover", dragstart: "dragstart", focus: "focus", keydown: "keydown", keyup: "keyup", keypress: "keypress", mousedown: "mousedown", mouseenter: "mouseenter", mouseleave: "mouseleave", mousemove: "mousemove", mouseout: "mouseout", mouseover: "mouseover", mouseup: "mouseup", mousewheel: "mousewheel", pointercancel: "pointercancel", pointerdown: "pointerdown", pointerenter: "pointerenter", pointerleave: "pointerleave", pointermove: "pointermove", pointerout: "pointerout", pointerover: "pointerover", pointerrawupdate: "pointerrawupdate", pointerup: "pointerup", resize: "resize", scroll: "scroll", wheel: "wheel" }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }, { propertyName: "nodeResizer", first: true, predicate: NodeResizerDirective, descendants: true }, { propertyName: "nodeToolbar", first: true, predicate: NodeToolbarDirective, descendants: true }, { propertyName: "handles", predicate: HandleDirective }], usesOnChanges: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NodeDirective, decorators: [{
type: Directive,
args: [{
selector: 'ngx-xyflow>ngx-xyflow-node'
}]
}], ctorParameters: () => [{ type: i1.XYFlowComponent }, { type: i0.ApplicationRef }, { type: i0.Injector }, { type: i0.NgZone }], propDecorators: { handles: [{
type: ContentChildren,
args: [HandleDirective]
}], nodeType: [{
type: Input
}], template: [{
type: ContentChild,
args: [TemplateRef]
}], nodeResizer: [{
type: ContentChild,
args: [NodeResizerDirective]
}], nodeToolbar: [{
type: ContentChild,
args: [NodeToolbarDirective]
}], blur: [{
type: Output
}], click: [{
type: Output
}], contextmenu: [{
type: Output
}], dblclick: [{
type: Output
}], drag: [{
type: Output
}], dragend: [{
type: Output
}], dragenter: [{
type: Output
}], dragleave: [{
type: Output
}], dragover: [{
type: Output
}], dragstart: [{
type: Output
}], focus: [{
type: Output
}], keydown: [{
type: Output
}], keyup: [{
type: Output
}], keypress: [{
type: Output
}], mousedown: [{
type: Output
}], mouseenter: [{
type: Output
}], mouseleave: [{
type: Output
}], mousemove: [{
type: Output
}], mouseout: [{
type: Output
}], mouseover: [{
type: Output
}], mouseup: [{
type: Output
}], mousewheel: [{
type: Output
}], pointercancel: [{
type: Output
}], pointerdown: [{
type: Output
}], pointerenter: [{
type: Output
}], pointerleave: [{
type: Output
}], pointermove: [{
type: Output
}], pointerout: [{
type: Output
}], pointerover: [{
type: Output
}], pointerrawupdate: [{
type: Output
}], pointerup: [{
type: Output
}], resize: [{
type: Output
}], scroll: [{
type: Output
}], wheel: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMveHlmbG93L25vZGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixTQUFTLEVBRVQsWUFBWSxFQUVaLEtBQUssRUFFTCxNQUFNLEVBR04sV0FBVyxFQUVkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7O0FBR3BFLE1Bb0JNLG1CQUFtQjsrR0FBbkIsbUJBQW1CO21HQUFuQixtQkFBbUIseUlBbEJYOzs7Ozs7Ozs7Ozs7S0FZVCw0REFFRyxnQkFBZ0I7OzRGQUlsQixtQkFBbUI7a0JBcEJ4QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7O0tBWVQ7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLGdCQUFnQjtxQkFDbkI7b0JBQ0QsVUFBVSxFQUFFLElBQUk7aUJBQ25COzhCQUVZLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSzs7QUFPVixNQUFNLE9BQU8sYUFBYTtJQTZD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O2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQXBwbGljYXRpb25SZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSGFuZGxlLCBOb2RlUmVzaXplciwgTm9kZVRvb2xiYXIgfSBmcm9tICdAeHlmbG93L3JlYWN0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEhhbmRsZURpcmVjdGl2ZSB9IGZyb20gJy4vaGFuZGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBYWUZsb3dDb21wb25lbnQgfSBmcm9tICcuL3h5Zmxvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZVJlc2l6ZXJEaXJlY3RpdmUgfSBmcm9tICcuL25vZGUtcmVzaXplci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTm9kZVRvb2xiYXJEaXJlY3RpdmUgfSBmcm9tICcuL25vZGUtdG9vbGJhci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQXV0b1dyYXBBbmd1bGFyT2JqZWN0LCBuZzJSZWFjdFByb3BzIH0gZnJvbSAnbmd4LXJlYWN0aWZ5JztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJuZ3gteHlmbG93LW5vZGVcIixcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICBAaWYodGVtcGxhdGUpIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJyRpbXBsaWNpdCc6IGRhdGEgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IHJlZFwiPlxuICAgICAgICAgICAgICAgIE5vZGUgaGFzIG5vIHRlbXBsYXRlLlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICB9XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXRcbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5jbGFzcyBYWUZsb3dOb2RlQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBASW5wdXQoKSBkYXRhOiBhbnk7XG4gICAgQElucHV0KCkgbm9kZTogYW55O1xufVxuXG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnbmd4LXh5Zmxvdz5uZ3gteHlmbG93LW5vZGUnXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVEaXJlY3RpdmUge1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihIYW5kbGVEaXJlY3RpdmUpIGhhbmRsZXM6IFF1ZXJ5TGlzdDxIYW5kbGVEaXJlY3RpdmU+O1xuXG4gICAgQElucHV0KCkgbm9kZVR5cGU6IHN0cmluZztcblxuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpIHRlbXBsYXRlOiBFbGVtZW50UmVmO1xuICAgIEBDb250ZW50Q2hpbGQoTm9kZVJlc2l6ZXJEaXJlY3RpdmUpIG5vZGVSZXNpemVyOiBOb2RlUmVzaXplckRpcmVjdGl2ZTtcbiAgICBAQ29udGVudENoaWxkKE5vZGVUb29sYmFyRGlyZWN0aXZlKSBub2RlVG9vbGJhcjogTm9kZVRvb2xiYXJEaXJlY3RpdmU7XG5cbiAgICBAT3V0cHV0KCkgYmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnRFdmVudE1hcFsnYmx1ciddPigpO1xuICAgIEBPdXRwdXQoKSBjbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnRFdmVudE1hcFsnY2xpY2snXT4oKTtcbiAgICBAT3V0cHV0KCkgY29udGV4dG1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPEhUTUxFbGVtZW50RXZlbnRNYXBbJ2NvbnRleHRtZW51J10+KCk7XG4gICAgQE91dHB1dCgpIGRibGNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydkYmxjbGljayddPigpO1xuICAgIEBPdXRwdXQoKSBkcmFnID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydkcmFnJ10+KCk7XG4gICAgQE91dHB1dCgpIGRyYWdlbmQgPSBuZXcgRXZlbnRFbWl0dGVyPEhUTUxFbGVtZW50RXZlbnRNYXBbJ2RyYWdlbmQnXT4oKTtcbiAgICBAT3V0cHV0KCkgZHJhZ2VudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydkcmFnZW50ZXInXT4oKTtcbiAgICBAT3V0cHV0KCkgZHJhZ2xlYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydkcmFnbGVhdmUnXT4oKTtcbiAgICBAT3V0cHV0KCkgZHJhZ292ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEhUTUxFbGVtZW50RXZlbnRNYXBbJ2RyYWdvdmVyJ10+KCk7XG4gICAgQE91dHB1dCgpIGRyYWdzdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnRFdmVudE1hcFsnZHJhZ3N0YXJ0J10+KCk7XG4gICAgQE91dHB1dCgpIGZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydmb2N1cyddPigpO1xuICAgIEBPdXRwdXQoKSBrZXlkb3duID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydrZXlkb3duJ10+KCk7XG4gICAgQE91dHB1dCgpIGtleXVwID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydrZXl1cCddPigpO1xuICAgIEBPdXRwdXQoKSBrZXlwcmVzcyA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnRFdmVudE1hcFsna2V5cHJlc3MnXT4oKTtcbiAgICBAT3V0cHV0KCkgbW91c2Vkb3duID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydtb3VzZWRvd24nXT4oKTtcbiAgICBAT3V0cHV0KCkgbW91c2VlbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnRFdmVudE1hcFsnbW91c2VlbnRlciddPigpO1xuICAgIEBPdXRwdXQoKSBtb3VzZWxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydtb3VzZWxlYXZlJ10+KCk7XG4gICAgQE91dHB1dCgpIG1vdXNlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnRFdmVudE1hcFsnbW91c2Vtb3ZlJ10+KCk7XG4gICAgQE91dHB1dCgpIG1vdXNlb3V0ID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydtb3VzZW91dCddPigpO1xuICAgIEBPdXRwdXQoKSBtb3VzZW92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEhUTUxFbGVtZW50RXZlbnRNYXBbJ21vdXNlb3ZlciddPigpO1xuICAgIEBPdXRwdXQoKSBtb3VzZXVwID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydtb3VzZXVwJ10+KCk7XG4gICAgQE91dHB1dCgpIG1vdXNld2hlZWwgPSBuZXcgRXZlbnRFbWl0dGVyPEhUTUxFbGVtZW50RXZlbnRNYXBbJ3doZWVsJ10+KCk7XG4gICAgQE91dHB1dCgpIHBvaW50ZXJjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPEhUTUxFbGVtZW50RXZlbnRNYXBbJ3BvaW50ZXJjYW5jZWwnXT4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcmRvd24gPSBuZXcgRXZlbnRFbWl0dGVyPEhUTUxFbGVtZW50RXZlbnRNYXBbJ3BvaW50ZXJkb3duJ10+KCk7XG4gICAgQE91dHB1dCgpIHBvaW50ZXJlbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnRFdmVudE1hcFsncG9pbnRlcmVudGVyJ10+KCk7XG4gICAgQE91dHB1dCgpIHBvaW50ZXJsZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnRFdmVudE1hcFsncG9pbnRlcmxlYXZlJ10+KCk7XG4gICAgQE91dHB1dCgpIHBvaW50ZXJtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydwb2ludGVybW92ZSddPigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVyb3V0ID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydwb2ludGVyb3V0J10+KCk7XG4gICAgQE91dHB1dCgpIHBvaW50ZXJvdmVyID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydwb2ludGVyb3ZlciddPigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVycmF3dXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcnVwID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydwb2ludGVydXAnXT4oKTtcbiAgICBAT3V0cHV0KCkgcmVzaXplID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydyZXNpemUnXT4oKTtcbiAgICBAT3V0cHV0KCkgc2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudEV2ZW50TWFwWydzY3JvbGwnXT4oKTtcbiAgICBAT3V0cHV0KCkgd2hlZWwgPSBuZXcgRXZlbnRFbWl0dGVyPEhUTUxFbGVtZW50RXZlbnRNYXBbJ3doZWVsJ10+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB4eWZsb3c6IFhZRmxvd0NvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZVxuICAgICkgeyB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMueHlmbG93Lm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm5vZGVUeXBlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKG5ldyBFcnJvcihcIk5HWDogWFlGbG93IE5vZGUgYm9vdHN0cmFwcGVkIHdpdGhvdXQgYSBub2RlIHR5cGUhXFxuXCIpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMueHlmbG93Lm5vZGVUeXBlc1t0aGlzLm5vZGVUeXBlXSA9IEF1dG9XcmFwQW5ndWxhck9iamVjdCh7XG4gICAgICAgICAgICBjb21wb25lbnQ6IFhZRmxvd05vZGVDb21wb25lbnQsXG4gICAgICAgICAgICBhcHBSZWY6IHRoaXMuYXBwUmVmLFxuICAgICAgICAgICAgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICBpbnN0YW5jZTogdGhpcyxcbiAgICAgICAgICAgIG5nWm9uZTogdGhpcy5uZ1pvbmUsXG4gICAgICAgICAgICBjb250YWluZXJUYWc6IFwibmd4LXh5Zmxvdy1ub2RlLWNvbnRhaW5lclwiLFxuICAgICAgICAgICAgcmVhY3RUZW1wbGF0ZTogZWwgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCB7fSxcbiAgICAgICAgICAgICAgICAgICAgLi4uW1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlUmVzaXplciA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoTm9kZVJlc2l6ZXIsIG5nMlJlYWN0UHJvcHModGhpcy5ub2RlUmVzaXplcikpIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZVRvb2xiYXIgPyBSZWFjdC5jcmVhdGVFbGVtZW50KE5vZGVUb29sYmFyLCBuZzJSZWFjdFByb3BzKHRoaXMubm9kZVRvb2xiYXIpKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLih0aGlzLmhhbmRsZXM/Lm1hcChoYW5kbGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0gbmcyUmVhY3RQcm9wcyhoYW5kbGUpIGFzIGFueTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wcy5vbkNvbm5lY3QgPSAoY29ubmVjdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgaGFuZGxlLm9uQ29ubmVjdC5uZXh0KGNvbm5lY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSGFuZGxlLCBwcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSB8fCBbXSksXG4gICAgICAgICAgICAgICAgICAgIF0uZmlsdGVyKG4gPT4gISFuKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG59XG4iXX0=