@hpcc-js/eclwatch 3.2.20 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/__package__.ts","../src/ECLArchiveViewer.ts","../src/WUGraphLegend.ts","../src/WUScopeController.ts","../src/WUGraph.ts","../src/WUResultStore.ts","../src/WUResult.ts","../src/WUStatus.ts","../src/WUTimeline.ts"],"sourcesContent":["export const PKG_NAME = \"@hpcc-js/eclwatch\";\nexport const PKG_VERSION = \"3.1.1\";\nexport const BUILD_VERSION = \"3.2.1\";\n","import { Editor } from \"@hpcc-js/codemirror\";\nimport { Workunit } from \"@hpcc-js/comms\";\nimport { SplitPanel } from \"@hpcc-js/phosphor\";\nimport { DirectoryTree } from \"@hpcc-js/tree\";\nimport { hashSum, xml2json } from \"@hpcc-js/util\";\n\nexport class ECLArchiveViewer extends SplitPanel {\n private _prevHash;\n private _contentStr;\n public _directoryPane = new DirectoryTree();\n public _fileEditorPane = new Editor()\n .text(\"\")\n ;\n\n constructor() {\n super(\"horizontal\");\n this._directoryPane.rowClick = (text) => {\n this._fileEditorPane\n .text(text)\n .render()\n ;\n };\n }\n\n protected transformArchiveTreeData(json) {\n const ret = {\n label: json.name,\n children: json._children.map(transformNode).filter(n => n)\n };\n\n if (ret.children && ret.children[0] && ret.children[0].label === \"html\") {\n // must be parsererror\n return {\n label: \"root\",\n children: [\n {\n label: \"error\",\n content: JSON.stringify(ret, null, 4)\n }\n ]\n };\n }\n return ret;\n\n function transformNode(node) {\n const _node: any = {};\n _node.label = node.name + (node[\"$\"] && node[\"$\"].key ? ` (${node[\"$\"].key})` : \"\");\n if (node._children && node._children.length > 0) {\n _node.children = node._children.map(_node => {\n return transformNode(_node);\n })\n .filter(n => n)\n ;\n } else if (typeof node.content === \"string\" && node.content.trim()) {\n _node.content = node.content;\n } else {\n return false;\n }\n return _node;\n }\n }\n\n updateDirectoryPane(contentStr) {\n let json;\n if (contentStr) {\n try {\n json = JSON.parse(contentStr);\n } catch (e) {\n json = xml2json(contentStr);\n }\n }\n if (json) {\n const _data = this.transformArchiveTreeData(json);\n this._directoryPane\n .data(_data)\n .render()\n ;\n }\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this\n .addWidget(this._directoryPane)\n .addWidget(this._fileEditorPane)\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid()\n });\n\n if (this._prevHash !== hash || typeof this._contentStr === \"undefined\") {\n Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid())\n .fetchArchive()\n .then(resp => {\n\n this._contentStr = resp;\n this.updateDirectoryPane(this._contentStr);\n\n this._prevHash = hash;\n });\n } else {\n this.updateDirectoryPane(this._contentStr);\n }\n\n this.relativeSizes([this.directoryWidthRatio(), 1 - this.directoryWidthRatio()]);\n }\n}\nECLArchiveViewer.prototype._class += \" eclwatch_ECLArchiveViewer\";\n\nexport interface ECLArchiveViewer {\n directoryPaneColor(): string;\n directoryPaneColor(_: string): this;\n directoryPaneHoverColor(): string;\n directoryPaneHoverColor(_: string): this;\n fontColor(): string;\n fontColor(_: string): this;\n fontFamily(): string;\n fontFamily(_: string): this;\n fontSize(): number;\n fontSize(_: number): this;\n fileIconSize(): number;\n fileIconSize(_: number): this;\n folderIconOpen(): string;\n folderIconOpen(_: string): this;\n folderIconClosed(): string;\n folderIconClosed(_: string): this;\n textFileIcon(): string;\n textFileIcon(_: string): this;\n codeFileIcon(): string;\n codeFileIcon(_: string): this;\n verticalScroll(): boolean;\n verticalScroll(_: boolean): this;\n directoryWidthRatio(): number;\n directoryWidthRatio(_: number): this;\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n}\nECLArchiveViewer.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nECLArchiveViewer.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nECLArchiveViewer.prototype.publish(\"directoryWidthRatio\", 0.38, \"number\", \"Default directory panel width ratio relative to the full width\");\nECLArchiveViewer.prototype.publish(\"contentString\", null, \"string\", \"XML/JSON archive content string\");\nECLArchiveViewer.prototype.publishProxy(\"directoryPaneColor\", \"_directoryPane\", \"backgroundColor\");\nECLArchiveViewer.prototype.publishProxy(\"directoryPaneHoverColor\", \"_directoryPane\", \"hoverBackgroundColor\");\nECLArchiveViewer.prototype.publishProxy(\"iconSize\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontColor\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontFamily\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontSize\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"folderIconOpen\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"folderIconClosed\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"textFileIcon\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"codeFileIcon\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"verticalScroll\", \"_directoryPane\");\n","import { Vertex } from \"@hpcc-js/graph\";\nimport { Legend } from \"@hpcc-js/layout\";\nimport { local as d3Local, select as d3Select } from \"d3-selection\";\n\nimport \"../src/WUGraphLegend.css\";\n\nexport interface WUGraphLegendData {\n kind: number;\n faChar: string;\n label: string;\n count: number;\n}\n\nclass LegendVertex extends Vertex {\n\n constructor() {\n super();\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._icon.on(\"click\", () => {\n this.click(this.data());\n });\n }\n\n click(kind: number) {\n }\n}\n\nexport class WUGraphLegend extends Legend {\n\n private icon = d3Local<Vertex>();\n protected _disabled2: { [kind: number]: boolean } = {\n /* TODO: Default some to disabled?\n 43: true,\n 71: true,\n 82: true,\n 88: true\n */\n };\n\n disabled(): number[];\n disabled(_: number[]): this;\n disabled(_?: number[]): number[] | this {\n if (!arguments.length) {\n const retVal = [];\n for (const key in this._disabled2) {\n if (this._disabled2[key]) {\n retVal.push(key);\n }\n }\n return retVal;\n }\n this._disabled2 = {};\n _.forEach(kind => this._disabled2[kind] = true);\n return this;\n }\n\n toggle(kind: number) {\n this._disabled2[kind] = !this._disabled2[kind];\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const context = this;\n const items = this._g.selectAll(\".legendItem\").data(this.data(), (d: any) => d.kind);\n items.enter().append(\"g\")\n .attr(\"class\", \"legendItem\")\n .each(function (this: HTMLElement, d) {\n context.icon.set(this, new LegendVertex()\n .target(this)\n .data(d.kind)\n .textbox_shape_colorStroke(\"none\")\n .textbox_shape_colorFill(\"none\")\n .iconAnchor(\"left\")\n .faChar(d.faChar)\n .text(`${d.label} (${d.count})`)\n .tooltip(`${d.kind} - ${d.label}`)\n .on(\"click\", kind => {\n context.toggle(kind);\n context.render();\n context.click(kind);\n })\n .on(\"mouseover\", kind => {\n context.mouseover(kind);\n })\n .on(\"mouseout\", kind => {\n context.mouseout(kind);\n })\n );\n })\n .merge(items)\n .each(function (this: HTMLElement, d, i) {\n const bbox = context.icon.get(this)\n .icon_shape_colorFill(context._disabled2[d.kind] ? \"gray\" : null)\n .render().getBBox();\n\n d3Select(this)\n .attr(\"transform\", `translate(${+bbox.width / 2}, ${i * 30})`)\n ;\n })\n ;\n items.exit()\n .each(function (this: HTMLElement, d) {\n context.icon.get(this)\n .target(null)\n .render();\n })\n .remove();\n const bbox = this.getBBox(true, true);\n this._g.attr(\"transform\", `translate(16, ${this.height() / 2 - bbox.height / 2})`);\n }\n\n // Events ---\n click(kind: number) {\n }\n\n mouseover(kind: number) {\n }\n\n mouseout(kind: number) {\n }\n}\nWUGraphLegend.prototype._class += \" eclwatch_WUGraphLegend\";\n","import { Icon } from \"@hpcc-js/common\";\nimport { BaseScope, ScopeEdge, ScopeGraph, ScopeSubgraph, ScopeVertex } from \"@hpcc-js/comms\";\nimport { Edge, IGraphData, Lineage, Subgraph, Vertex } from \"@hpcc-js/graph\";\nimport { Edge as UtilEdge, Subgraph as UtilSubgraph, Vertex as UtilVertex } from \"@hpcc-js/util\";\nimport { WUGraphLegendData } from \"./WUGraphLegend.ts\";\n\nexport type VertexType = Vertex | Icon;\n\nexport interface MyGraphData {\n subgraphs: Subgraph[];\n vertices: VertexType[];\n edges: Edge[];\n hierarchy: Lineage[];\n}\n\nfunction faCharFactory(kind): string {\n switch (kind) {\n case \"2\": return \"\\uf0c7\"; // Disk Write\n case \"3\": return \"\\uf15d\"; // sort\n case \"5\": return \"\\uf0b0\"; // Filter\n case \"6\": return \"\\uf1e0\"; // Split\n case \"12\": return \"\\uf039\"; // First N\n case \"15\": return \"\\uf126\"; // Lightweight Join\n case \"17\": return \"\\uf126\"; // Lookup Join\n case \"22\": return \"\\uf1e6\"; // Pipe Output\n case \"23\": return \"\\uf078\"; // Funnel\n case \"25\": return \"\\uf0ce\"; // Inline Dataset\n case \"26\": return \"\\uf074\"; // distribute\n case \"29\": return \"\\uf005\"; // Store Internal Result\n case \"36\": return \"\\uf128\"; // If\n case \"44\": return \"\\uf0c7\"; // write csv\n case \"47\": return \"\\uf0c7\"; // write\n case \"54\": return \"\\uf013\"; // Workunit Read\n case \"56\": return \"\\uf0c7\"; // Spill\n case \"59\": return \"\\uf126\"; // Merge\n case \"61\": return \"\\uf0c7\"; // write xml\n case \"82\": return \"\\uf1c0\"; // Projected Disk Read Spill\n case \"88\": return \"\\uf1c0\"; // Projected Disk Read Spill\n case \"92\": return \"\\uf129\"; // Limted Index Read\n case \"93\": return \"\\uf129\"; // Limted Index Read\n case \"99\": return \"\\uf1c0\"; // CSV Read\n case \"105\": return \"\\uf1c0\"; // CSV Read\n\n case \"7\": return \"\\uf090\"; // Project\n case \"9\": return \"\\uf0e2\"; // Local Iterate\n case \"16\": return \"\\uf005\"; // Output Internal\n case \"19\": return \"\\uf074\"; // Hash Distribute\n case \"21\": return \"\\uf275\"; // Normalize\n case \"35\": return \"\\uf0c7\"; // CSV Write\n case \"37\": return \"\\uf0c7\"; // Index Write\n case \"71\": return \"\\uf1c0\"; // Disk Read Spill\n case \"133\": return \"\\uf0ce\"; // Inline Dataset\n case \"148\": return \"\\uf0ce\"; // Inline Dataset\n case \"168\": return \"\\uf275\"; // Local Denormalize\n }\n return \"\\uf063\";\n}\n\nexport class WUScopeController {\n private graphDB: ScopeGraph;\n private subgraphsMap: { [id: string]: Subgraph } = {};\n private rSubgraphsMap: { [id: string]: ScopeSubgraph } = {};\n private verticesMap: { [id: string]: VertexType } = {};\n private rVerticesMap: { [id: string]: ScopeVertex } = {};\n private edgesMap: { [id: string]: Edge } = {};\n private rEdgesMap: { [id: string]: ScopeEdge } = {};\n private kindMap: { [id: string]: ScopeVertex[] } = {};\n\n protected _disabled: { [kind: number]: boolean } = {};\n\n constructor() {\n }\n\n clear() {\n this.subgraphsMap = {};\n this.rSubgraphsMap = {};\n this.verticesMap = {};\n this.rVerticesMap = {};\n this.edgesMap = {};\n this.rEdgesMap = {};\n }\n\n set(masterGraph: ScopeGraph) {\n this.graphDB = masterGraph;\n this.graphGui(this.graphDB);\n\n this.kindMap = {};\n this.graphDB.walk(item => {\n if (item instanceof UtilSubgraph) {\n } else if (item instanceof UtilVertex) {\n const kind = item._.attr(\"Kind\").RawValue;\n if (!this.kindMap[kind]) {\n this.kindMap[kind] = [];\n }\n this.kindMap[kind].push(item);\n } else if (item instanceof UtilEdge) {\n }\n });\n }\n\n disabled(): number[];\n disabled(_: number[]): this;\n disabled(_?: number[]): number[] | this {\n if (!arguments.length) {\n const retVal = [];\n for (const key in this._disabled) {\n if (this._disabled[key]) {\n retVal.push(key);\n }\n }\n return retVal;\n }\n this._disabled = {};\n _.forEach(kind => this._disabled[kind] = true);\n return this;\n }\n\n graphGui(graphDB: ScopeGraph): IGraphData {\n const graphGui: MyGraphData = {\n subgraphs: [],\n vertices: [],\n edges: [],\n hierarchy: []\n };\n\n graphDB.walk((item) => {\n if (item instanceof UtilSubgraph) {\n const subgraph = this.appendSubgraph(item, graphGui.hierarchy, graphGui.subgraphs);\n subgraph.showMinMax(item.vertices.length > 3 || subgraph.minState() !== \"normal\");\n } else if (item instanceof UtilVertex) {\n this.appendVertex(item, graphGui.hierarchy, graphGui.vertices);\n } else if (item instanceof UtilEdge) {\n this.appendEdge(item, graphGui.edges);\n }\n });\n\n return graphGui;\n }\n\n format(labelTpl, obj) {\n let retVal = \"\";\n let lpos = labelTpl.indexOf(\"%\");\n let rpos = -1;\n while (lpos >= 0) {\n retVal += labelTpl.substring(rpos + 1, lpos);\n rpos = labelTpl.indexOf(\"%\", lpos + 1);\n if (rpos < 0) {\n console.warn(\"Invalid Label Template\");\n break;\n }\n const key = labelTpl.substring(lpos + 1, rpos);\n retVal += !key ? \"%\" : (obj[labelTpl.substring(lpos + 1, rpos)] || \"\");\n lpos = labelTpl.indexOf(\"%\", rpos + 1);\n }\n retVal += labelTpl.substring(rpos + 1, labelTpl.length);\n return retVal.split(\"\\\\n\").join(\"\\n\");\n }\n\n createSubgraph(subgraph: ScopeSubgraph): Subgraph {\n let sg = this.subgraphsMap[subgraph._.Id];\n if (!sg) {\n sg = new Subgraph()\n .title(subgraph._.Id)\n .on(\"minClick\", () => {\n this.minClick(sg);\n })\n ;\n this.subgraphsMap[subgraph._.Id] = sg;\n this.rSubgraphsMap[sg.id()] = subgraph;\n }\n return sg;\n }\n\n createVertex(vertex: ScopeVertex): VertexType {\n let v = this.verticesMap[vertex._.Id];\n if (!v) {\n const attrs = vertex._.rawAttrs();\n if (vertex._.ScopeType === \"dummy\") {\n const parent = this.subgraphsMap[vertex.parent._.Id];\n v = new Icon()\n .shape_colorFill(\"darkred\")\n .shape_colorStroke(\"darkred\")\n .image_colorFill(\"white\")\n .faChar(\"\\uf067\")\n .on(\"click\", () => {\n parent.minState(\"normal\");\n this.minClick(parent);\n })\n ;\n } else {\n v = new Vertex()\n .icon_shape_colorFill(\"#1f77b4\")\n .icon_image_colorFill(\"white\")\n .faChar(faCharFactory(attrs[\"Kind\"]))\n .text(attrs[\"Label\"])\n ;\n const annotations = [];\n if (vertex._.hasAttr(\"Definition\")) {\n annotations.push({\n faChar: \"\\uf036\",\n tooltip: \"Definition\",\n shape_colorFill: \"lightgray\",\n shape_colorStroke: \"lightgray\",\n image_colorFill: \"black\"\n });\n }\n if (vertex._.hasAttr(\"IsInternal\")) {\n annotations.push({\n faChar: \"\\uf085\",\n tooltip: \"IsInternal\",\n shape_colorFill: \"red\",\n shape_colorStroke: \"red\",\n image_colorFill: \"white\"\n });\n }\n v.annotationIcons(annotations);\n }\n this.verticesMap[vertex._.Id] = v;\n this.rVerticesMap[v.id()] = vertex;\n }\n return v;\n }\n\n isSpill(edge: ScopeEdge): boolean {\n const sourceKind = edge.source._.attr(\"Kind\").RawValue;\n const targetKind = edge.target._.attr(\"Kind\").RawValue;\n return sourceKind === \"2\" || targetKind === \"71\";\n }\n\n spansSubgraph(edge: ScopeEdge): boolean {\n return edge.source.parent._.Id !== edge.target.parent._.Id;\n }\n\n createEdge(edge: ScopeEdge): Edge | undefined {\n let e = this.edgesMap[edge._.Id];\n if (!e) {\n const attrs = edge._.rawAttrs();\n const sourceV = this.verticesMap[edge.source._.Id];\n const targetV = this.verticesMap[edge.target._.Id];\n if (sourceV && targetV) {\n const isSpill = this.isSpill(edge);\n const spansSubgraph = this.spansSubgraph(edge);\n\n const label = this.format(\"%Label%\\n%NumRowsProcessed%\", attrs);\n /* TODO: Add extra annotations once WUDetails is fixed...\n const numSlaves = parseInt(attrs[\"NumSlaves\"]);\n const numStarts = parseInt(attrs[\"NumStarts\"]);\n const numStops = parseInt(attrs[\"NumStops\"]);\n const started = numStarts > 0;\n const finished = numStops === numSlaves;\n const active = started && !finished;\n */\n\n let strokeDasharray = null;\n let weight = 100;\n if (attrs[\"IsDependency\"]) {\n weight = 10;\n strokeDasharray = \"1,5\";\n } else if (attrs[\"_childGraph\"]) {\n strokeDasharray = \"5,5\";\n } else if (isSpill) {\n weight = 25;\n strokeDasharray = \"5,5,10,5\";\n } else if (spansSubgraph) {\n weight = 5;\n strokeDasharray = \"5,5\";\n }\n e = new Edge()\n .sourceVertex(sourceV)\n .targetVertex(targetV)\n .sourceMarker(\"circle\")\n .targetMarker(\"arrow\")\n .weight(weight)\n .strokeDasharray(strokeDasharray)\n .text(label)\n ;\n this.edgesMap[edge._.Id] = e;\n this.rEdgesMap[e.id()] = edge;\n }\n }\n return e;\n }\n\n appendSubgraph(subgraph: ScopeSubgraph, hierarchy: Lineage[], subgraphs: Subgraph[]): Subgraph {\n const sg = this.createSubgraph(subgraph);\n subgraphs.push(sg);\n const parent = this.subgraphsMap[subgraph.parent._.Id];\n if (parent) {\n hierarchy.push({ parent, child: sg });\n }\n return sg;\n }\n\n appendVertex(vertex: ScopeVertex, hierarchy: Lineage[], vertices: VertexType[]): VertexType {\n const v = this.createVertex(vertex);\n vertices.push(v);\n const parent = this.subgraphsMap[vertex.parent._.Id];\n if (parent) {\n hierarchy.push({ parent, child: v });\n }\n return v;\n }\n\n appendEdge(edge: ScopeEdge, edges: Edge[]): Edge {\n const e = this.createEdge(edge);\n if (e) {\n edges.push(e);\n }\n return e;\n }\n\n filterLegend(graphDB: ScopeGraph) {\n for (let i = graphDB.vertices.length - 1; i >= 0; --i) {\n const vertex = graphDB.vertices[i];\n const kind = vertex._.attr(\"Kind\").RawValue;\n if (this._disabled[kind]) {\n vertex.remove(false, (source: BaseScope, target: BaseScope) => {\n return new BaseScope({\n ScopeName: vertex._.ScopeName + \":in\",\n Id: source.Id + \"->\" + target.Id,\n ScopeType: \"dummy-edge\",\n Properties: {\n Property: [vertex._.attr(\"Label\")]\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n });\n }\n }\n }\n\n filterPartial(graphDB: ScopeGraph) {\n for (const subgraph of graphDB.subgraphs) {\n const sg = this.subgraphsMap[subgraph._.Id];\n switch (sg.minState()) {\n case \"partial\":\n const childVertices: ReadonlyArray<ScopeVertex> = subgraph.vertices;\n const vShow: ScopeVertex[] = [];\n const vHide: ScopeVertex[] = [];\n\n for (const vertex of childVertices) {\n if (vertex.inEdges.length === 0 || vertex.inEdges.some(edge => edge.source.parent !== edge.target.parent) ||\n vertex.outEdges.length === 0 || vertex.outEdges.some(edge => edge.source.parent !== edge.target.parent)) {\n vShow.push(vertex);\n } else {\n vHide.push(vertex);\n }\n }\n\n if (vHide.length > 1) {\n const dummyDetails = {\n ScopeName: subgraph._.ScopeName,\n Id: subgraph._.Id + \":dummy\",\n ScopeType: \"dummy\",\n Properties: {\n Property: [{\n Name: \"Activities\",\n RawValue: \"\" + vHide.length,\n Formatted: \"\" + vHide.length,\n Measure: \"count\",\n Creator: \"\",\n CreatorType: \"\"\n }]\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n };\n const dummyScope = new BaseScope(dummyDetails);\n const dummyVertex = subgraph.createVertex(dummyScope);\n\n for (const vertex of vHide) {\n for (const edge of vertex.inEdges) {\n if (vShow.indexOf(edge.source) >= 0) {\n const dummyEdgeScope = new BaseScope({\n ScopeName: edge.source._.ScopeName,\n Id: edge.source._.Id + \"->\" + dummyVertex._.Id,\n ScopeType: \"dummy-in\",\n Properties: {\n Property: []\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n subgraph.createEdge(edge.source, dummyVertex, dummyEdgeScope);\n }\n }\n for (const edge of vertex.outEdges) {\n if (vShow.indexOf(edge.target) >= 0) {\n const dummyEdgeScope = new BaseScope({\n ScopeName: edge.target._.ScopeName,\n Id: dummyVertex._.Id + \"->\" + edge.target._.Id,\n ScopeType: \"dummy-out\",\n Properties: {\n Property: []\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n subgraph.createEdge(dummyVertex, edge.target, dummyEdgeScope);\n }\n }\n }\n vHide.forEach(vertex => vertex.remove(true));\n }\n break;\n }\n }\n }\n\n filterEmptySubgraphs(graphDB: ScopeGraph) {\n while (true) {\n const emptySubgraphs = graphDB.subgraphs.filter(subgraph => subgraph.subgraphs.length === 0 && subgraph.vertices.length === 0);\n if (emptySubgraphs.length === 0) break;\n emptySubgraphs.forEach(subgraph => subgraph.remove(true));\n }\n }\n\n removeObsoleteSubgraphs(graphDB: ScopeGraph) {\n for (const subgraph of [...graphDB.subgraphs]) {\n if (subgraph.vertices.length === 0) {\n subgraph.remove(false);\n }\n }\n }\n\n graphData(): IGraphData {\n const graphDB = this.graphDB.clone();\n this.filterLegend(graphDB);\n this.filterPartial(graphDB);\n this.filterEmptySubgraphs(graphDB);\n this.removeObsoleteSubgraphs(graphDB);\n return this.graphGui(graphDB);\n }\n\n calcLegend(): WUGraphLegendData[] {\n const retVal: WUGraphLegendData[] = [];\n for (const kind in this.kindMap) {\n retVal.push({\n kind: parseInt(kind),\n faChar: faCharFactory(kind),\n label: this.kindMap[kind][0]._.attr(\"Label\").RawValue.split(\"\\n\")[0],\n count: this.kindMap[kind].length\n });\n }\n return retVal;\n }\n\n vertices(kind: number): VertexType[] {\n const retVal: VertexType[] = [];\n for (const v of this.kindMap[kind]) {\n retVal.push(this.verticesMap[v._.Id]);\n }\n return retVal;\n }\n\n formatRow(item: ScopeEdge | ScopeSubgraph | ScopeVertex, columns, row) {\n const attrs = item._.formattedAttrs();\n for (const key in attrs) {\n const idx = columns.indexOf(key);\n if (idx === -1) {\n columns.push(key);\n row.push(attrs[key]);\n } else {\n row[idx] = attrs[key];\n }\n }\n for (let i = 0; i < 100; ++i) {\n if (row[i] === undefined) {\n row[i] = \"\";\n }\n }\n return row;\n }\n\n activityData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Kind\", \"Label\"];\n const data = this.graphDB.vertices.map(v => {\n const row = [parseInt(v._.Id.split(\"a\")[1])];\n return this.formatRow(v, columns, row);\n });\n return { columns, data };\n }\n\n edgeData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Label\"];\n const data = this.graphDB.edges.map(e => {\n const row = [e._.Id];\n return this.formatRow(e, columns, row);\n });\n return { columns, data };\n }\n\n subgraphData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Label\"];\n const data = this.graphDB.subgraphs.map(sg => {\n const row = [sg._.Id];\n return this.formatRow(sg, columns, row);\n });\n return { columns, data };\n }\n\n calcGraphTooltip(item: VertexType | Edge) {\n let scope;\n let parentScope;\n if (item instanceof Subgraph) {\n const subgraph = this.rSubgraphsMap[item.id()];\n scope = subgraph._;\n parentScope = subgraph.parent._;\n } else if (item instanceof Vertex || item instanceof Icon) {\n const vertex = this.rVerticesMap[item.id()];\n scope = vertex._;\n parentScope = vertex.parent._;\n } else if (item instanceof Edge) {\n const edge = this.rEdgesMap[item.id()];\n scope = edge._;\n parentScope = edge.parent._;\n }\n if (scope) {\n return scope.calcTooltip(parentScope);\n }\n return \"\";\n }\n\n subgraph(id: string): Subgraph | undefined {\n return this.subgraphsMap[id];\n }\n\n vertex(id: string): VertexType | undefined {\n return this.verticesMap[id];\n }\n\n edge(id: string): Edge {\n return this.edgesMap[id];\n }\n\n // Events ---\n minClick(sg: Subgraph) {\n }\n}\n","import { Button, Spacer, ToggleButton, Widget } from \"@hpcc-js/common\";\nimport { ScopeGraph, Workunit } from \"@hpcc-js/comms\";\nimport { Table } from \"@hpcc-js/dgrid\";\nimport { Graph as GraphWidget, Subgraph, Vertex } from \"@hpcc-js/graph\";\nimport { Carousel, ChartPanel } from \"@hpcc-js/layout\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { WUGraphLegend } from \"./WUGraphLegend.ts\";\nimport { WUScopeController } from \"./WUScopeController.ts\";\n\nimport \"../src/WUGraph.css\";\n\nexport class WUGraph extends ChartPanel {\n\n private _partialAll = new Button().faChar(\"fa-window-restore\").tooltip(\"Partial All\")\n .on(\"click\", () => {\n this.stateClick(this._partialAll);\n });\n\n private _maxAll = new Button().faChar(\"fa-window-maximize\").tooltip(\"Max All\")\n .on(\"click\", () => {\n this.stateClick(this._maxAll);\n });\n\n private _toggleGraph = new ToggleButton().faChar(\"fa-chain\").tooltip(\"Graph\")\n .selected(true)\n .on(\"click\", () => {\n this.viewClick(this._toggleGraph);\n });\n\n private _toggleActivities = new ToggleButton().faChar(\"fa-table\").tooltip(\"Activitiies\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleActivities);\n });\n\n private _toggleEdges = new ToggleButton().faChar(\"fa-table\").tooltip(\"Edges\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleEdges);\n });\n\n private _toggleSubgraphs = new ToggleButton().faChar(\"fa-table\").tooltip(\"Subgraphs\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleSubgraphs);\n });\n\n protected _graph = new GraphWidget()\n .layout(\"Hierarchy\")\n .applyScaleOnLayout(true)\n .showToolbar(false)\n .allowDragging(false)\n ;\n\n private _activities = new Table()\n .pagination(false)\n ;\n\n private _edges = new Table()\n .pagination(false)\n ;\n\n private _subgraphs = new Table()\n .pagination(false)\n ;\n\n protected _legend = new WUGraphLegend(this)\n .on(\"click\", kind => {\n this.render();\n })\n .on(\"mouseover\", kind => {\n const verticesMap: { [id: string]: boolean } = {};\n for (const vertex of this._gc.vertices(kind)) {\n verticesMap[vertex.id()] = true;\n }\n this._graph.highlightVerticies(verticesMap);\n })\n .on(\"mouseout\", kind => {\n this._graph.highlightVerticies();\n })\n ;\n\n protected _view = new Carousel().widgets([this._graph, this._activities, this._edges, this._subgraphs]);\n\n protected _gc = new WUScopeController();\n\n constructor() {\n super();\n this.topOverlay(false);\n this.widget(this._view);\n const buttons: Widget[] = [\n this._toggleGraph,\n this._toggleActivities,\n this._toggleEdges,\n this._toggleSubgraphs,\n new Spacer(),\n this._partialAll,\n this._maxAll,\n new Spacer(),\n ...this._graph.iconBarButtons(),\n new Spacer()];\n this.buttons(buttons.concat(this.buttons()));\n this._gc.minClick = (sg: Subgraph) => {\n this.loadGraph();\n this._graph.render(w => {\n this._graph\n .selection([sg])\n .centerOnItem(sg)\n ;\n });\n };\n\n this._graph.tooltipHTML((v: Vertex) => {\n return this._gc.calcGraphTooltip(v);\n });\n }\n\n stateClick(sourceB: Button) {\n switch (sourceB) {\n case this._partialAll:\n this._graph.data().subgraphs.forEach((sg: Subgraph) => {\n sg.minState(\"partial\");\n });\n break;\n case this._maxAll:\n this._graph.data().subgraphs.forEach((sg: Subgraph) => {\n sg.minState(\"normal\");\n });\n break;\n }\n this.render();\n }\n\n viewClick(sourceTB: ToggleButton) {\n this._toggleGraph.selected(sourceTB === this._toggleGraph);\n this._toggleActivities.selected(sourceTB === this._toggleActivities);\n this._toggleEdges.selected(sourceTB === this._toggleEdges);\n this._toggleSubgraphs.selected(sourceTB === this._toggleSubgraphs);\n switch (sourceTB) {\n case this._toggleGraph:\n this._view.active(0);\n break;\n case this._toggleActivities:\n this._view.active(1);\n break;\n case this._toggleEdges:\n this._view.active(2);\n break;\n case this._toggleSubgraphs:\n this._view.active(3);\n break;\n }\n this.render(w => {\n });\n }\n\n private _prevHashSum;\n private _prevScopeGraph: ScopeGraph;\n fetchScopeGraph(): Promise<ScopeGraph> {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n graphID: this.graphID(),\n subgraphID: this.subgraphID()\n });\n if (!this._prevScopeGraph || this._prevHashSum !== hash) {\n this.startProgress();\n this._prevHashSum = hash;\n this._gc.clear();\n const wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n return wu.fetchGraphs().then(graphs => {\n for (const graph of graphs) {\n if (graph.Name === this.graphID()) {\n this.finishProgress();\n return graph.fetchScopeGraph(this.subgraphID());\n }\n }\n }).then(scopeGraph => {\n this._prevScopeGraph = scopeGraph;\n return this._prevScopeGraph;\n });\n }\n return Promise.resolve(this._prevScopeGraph);\n }\n\n enter(domNode, _element) {\n super.enter(domNode, _element);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n loadGraph() {\n this._gc.disabled(this._legend.disabled());\n this._graph\n .data(this._gc.graphData(), true)\n ;\n {\n const { columns, data } = this._gc.activityData();\n this._activities\n .columns(columns)\n .data(data)\n ;\n }\n {\n const { columns, data } = this._gc.edgeData();\n this._edges\n .columns(columns)\n .data(data)\n ;\n }\n {\n const { columns, data } = this._gc.subgraphData();\n this._subgraphs\n .columns(columns)\n .data(data)\n ;\n }\n }\n\n render(callback?: (w: Widget) => void): this {\n if (this.wuid() && this.graphID()) {\n this.fetchScopeGraph().then(scopedGraph => {\n this._gc.set(scopedGraph);\n this._legend.data(this._gc.calcLegend());\n this.loadGraph();\n super.render(callback);\n });\n } else {\n super.render(callback);\n }\n return this;\n }\n\n selection(_?) {\n if (!arguments.length) return this._graph.selection();\n const item = this._gc.vertex(_) || this._gc.edge(_) || this._gc.subgraph(_);\n if (item) {\n this._graph.selection([item]);\n }\n return this;\n }\n}\nWUGraph.prototype._class += \" eclwatch_WUGraph\";\n\nexport interface WUGraph {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n graphID(): string;\n graphID(_: string): this;\n subgraphID(): string;\n subgraphID(_: string): this;\n}\n\nWUGraph.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUGraph.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUGraph.prototype.publish(\"graphID\", \"\", \"string\", \"Graph ID\");\nWUGraph.prototype.publish(\"subgraphID\", \"\", \"string\", \"Subgraph ID\");\n","import { Exception, ResultFilter, Result, XSDSchema, XSDXMLNode } from \"@hpcc-js/comms\";\nimport { ColumnType, Deferred, domConstruct, QueryResults, RowFormatter } from \"@hpcc-js/dgrid\";\n\nfunction entitiesEncode(str) {\n return String(str).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\n\nfunction safeEncode(item) {\n switch (Object.prototype.toString.call(item)) {\n case \"[object Undefined]\":\n case \"[object Boolean]\":\n case \"[object Number]\":\n return item;\n case \"[object String]\":\n return entitiesEncode(item);\n default:\n console.warn(\"Unknown cell type: \" + Object.prototype.toString.call(item)); \n }\n return item;\n}\n\nexport class Store {\n protected wuResult: Result;\n protected schema: XSDSchema;\n protected _columns: any[];\n protected _cache: { [key: string]: Promise<{ totalLength: number, data: any[] }> } = {};\n private rowFormatter: RowFormatter;\n protected _filter: ResultFilter = {};\n private onError?: (msg: string) => void;\n\n constructor(wuResult: Result, schema: XSDSchema, renderHtml: boolean, filter: ResultFilter = {}, onError?: (msg: string) => void) {\n this.wuResult = wuResult;\n this.schema = schema;\n this._columns = this.schema2Columns(this.schema.root);\n this.rowFormatter = new RowFormatter(this._columns, renderHtml);\n this._filter = filter;\n this.onError = onError;\n }\n\n columns() {\n return this._columns;\n }\n\n schema2Columns(parentNode: XSDXMLNode, prefix: string = \"\"): ColumnType[] {\n if (!parentNode) return [];\n return parentNode.children().filter(node => node.name.indexOf(\"__hidden\", node.name.length - \"__hidden\".length) === -1).map((node, idx) => {\n const label = node.name;\n const keyed = node.attrs[\"hpcc:keyed\"];\n const column: ColumnType = {\n field: prefix + label,\n leafID: label,\n idx,\n label: label + (keyed ? \" (i)\" : \"\"),\n className: \"resultGridCell\",\n sortable: false,\n width: keyed ? 16 : 0,\n isSet: node.isSet\n };\n const children = this.schema2Columns(node, prefix + label + \"_\");\n if (children.length) {\n column.width += 10 + children.reduce((prev: number, childNode: ColumnType) => {\n return prev + childNode.width!;\n }, 0);\n column.children = children;\n } else {\n column.width += node.charWidth() * 9;\n column.formatter = (cell, row) => {\n switch (typeof cell) {\n case \"string\":\n return {\n html: cell.replace(/\\t/g, \"&nbsp;&nbsp;&nbsp;&nbsp;\").trim()\n };\n case \"undefined\":\n return \"\";\n }\n return cell;\n };\n }\n return column;\n });\n }\n\n isChildDataset(cell) {\n if (Object.prototype.toString.call(cell) !== \"[object Object]\") {\n return false;\n }\n let propCount = 0;\n let firstPropType = null;\n for (const key in cell) {\n if (!firstPropType) {\n firstPropType = Object.prototype.toString.call(cell[key]);\n }\n propCount++;\n }\n return propCount === 1 && firstPropType === \"[object Array]\";\n }\n\n rowToTable(cell, __row, node) {\n if (this.isChildDataset(cell)) { // Don't display \"Row\" as a header ---\n for (const key in cell) {\n this.rowToTable(cell[key], __row, node);\n }\n return;\n }\n\n const table = domConstruct.create(\"table\", { border: 1, cellspacing: 0, width: \"100%\" }, node);\n switch (Object.prototype.toString.call(cell)) {\n case \"[object Object]\":\n let tr = domConstruct.create(\"tr\", null, table);\n for (const key in cell) {\n domConstruct.create(\"th\", { innerHTML: safeEncode(key) }, tr);\n }\n tr = domConstruct.create(\"tr\", null, table);\n for (const key in cell) {\n switch (Object.prototype.toString.call(cell[key])) {\n case \"[object Object]\":\n case \"[object Array]\":\n this.rowToTable(cell[key], __row, node);\n break;\n default:\n domConstruct.create(\"td\", { innerHTML: safeEncode(cell[key]) }, tr);\n break;\n }\n }\n break;\n case \"[object Array]\":\n for (let i = 0; i < cell.length; ++i) {\n switch (Object.prototype.toString.call(cell[i])) {\n case \"[object Boolean]\":\n case \"[object Number]\":\n case \"[object String]\":\n // Item in Scalar ---\n const tr1 = domConstruct.create(\"tr\", null, table);\n domConstruct.create(\"td\", { innerHTML: safeEncode(cell[i]) }, tr1);\n break;\n default:\n // Child Dataset ---\n if (i === 0) {\n const tr2 = domConstruct.create(\"tr\", null, table);\n for (const key in cell[i]) {\n domConstruct.create(\"th\", { innerHTML: safeEncode(key) }, tr2);\n }\n }\n domConstruct.create(\"tr\", null, table);\n for (const key in cell[i]) {\n if (cell[i][key]) {\n if (Object.prototype.toString.call(cell[i][key]) === \"[object Object]\" || Object.prototype.toString.call(cell[i][key]) === \"[object Array]\") {\n const td = domConstruct.create(\"td\", null, tr1);\n this.rowToTable(cell[i][key], cell[i], td);\n } else if (key.indexOf(\"__html\", key.length - \"__html\".length) !== -1) {\n domConstruct.create(\"td\", { innerHTML: cell[i][key] }, tr1);\n } else if (key.indexOf(\"__javascript\", key.length - \"__javascript\".length) !== -1) {\n /*const td = */ domConstruct.create(\"td\", null, tr1);\n // this.injectJavascript(cell[i][key], cell[i], td);\n } else {\n const val = cell[i][key];\n domConstruct.create(\"td\", { innerHTML: safeEncode(val) }, tr1);\n }\n } else {\n domConstruct.create(\"td\", { innerHTML: \"\" }, tr1);\n }\n }\n }\n }\n break;\n }\n }\n\n getIdentity(row) {\n return row.__hpcc_id;\n }\n\n _request(start, end): Promise<{ totalLength: number, data: any[] }> {\n if (!this.wuResult) return Promise.resolve({ totalLength: 0, data: [] });\n const cacheKey = `${start}->${end}`;\n if (this._cache[cacheKey]) return this._cache[cacheKey];\n const retVal = this.wuResult.fetchRows(start, end - start, false, this._filter).then((rows: any[]) => {\n return {\n totalLength: this.wuResult.Total,\n data: rows.map((row, idx) => {\n const formattedRow: any = this.rowFormatter.format(row);\n formattedRow.__hpcc_id = start + idx;\n formattedRow.__hpcc_orig = row;\n return formattedRow;\n })\n };\n }).catch((err: Exception) => {\n this.onError(err.Message || \"An exception has occurred\");\n return { totalLength: 0, data: [] };\n });\n this._cache[cacheKey] = retVal;\n return retVal;\n }\n\n fetchRange(options): Promise<any[]> {\n const retVal = new Deferred();\n this._request(options.start, options.end).then(response => retVal.resolve(response));\n return new QueryResults(retVal.then(response => response.data), {\n totalLength: retVal.then(response => response.totalLength)\n });\n }\n}\n","import { ResultFilter, IOptions, Result } from \"@hpcc-js/comms\";\nimport { Common } from \"@hpcc-js/dgrid\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { Store } from \"./WUResultStore.ts\";\n\nexport class WUResult extends Common {\n\n protected _result: Result;\n protected _localStore: Store;\n\n constructor() {\n super();\n this.renderHtml(false);\n }\n\n hashSum(opts: any = {}) {\n return hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n resultName: this.resultName(),\n sequence: this.sequence(),\n nodeGroup: this.nodeGroup(),\n logicalFile: this.logicalFile(),\n userID: this.user(),\n password: this.password(),\n ...opts\n });\n }\n\n protected _prevResultHash: string;\n calcResult(): Result | null {\n const resultHash = this.hashSum();\n if (this._prevResultHash !== resultHash) {\n this._prevResultHash = resultHash;\n\n const opts: IOptions = {\n baseUrl: this.baseUrl(),\n userID: this.user(),\n password: this.password()\n };\n if (this.wuid() && this.resultName()) {\n this._result = Result.attach(opts, this.wuid(), this.resultName());\n } else if (this.wuid() && this.sequence() !== undefined) {\n this._result = Result.attach(opts, this.wuid(), this.sequence());\n } else if (this.logicalFile() && this.nodeGroup()) {\n this._result = Result.attachLogicalFile(opts, this.nodeGroup(), this.logicalFile());\n } else if (this.logicalFile()) {\n this._result = Result.attachLogicalFile(opts, \"\", this.logicalFile());\n }\n }\n return this._result;\n }\n\n fetch(row, count, abortController = new AbortController()): Promise<object[]> {\n const result = this.calcResult();\n if (result) {\n return result.fetchRows(row, count, false, {}, abortController.signal);\n }\n return Promise.resolve([]);\n }\n\n protected _prevStoreHash: string;\n protected _prevQueryHash: string;\n update(domNode, element) {\n super.update(domNode, element);\n const storeHash = this.hashSum({\n renderHtml: this.renderHtml(),\n filter: this.filter()\n });\n if (this._prevStoreHash !== storeHash) {\n this._prevStoreHash = storeHash;\n const result = this.calcResult();\n if (result) {\n result.fetchXMLSchema().then(schema => {\n this._localStore = new Store(result, schema, this.renderHtml(), this.filter(), (msg) => {\n if (this._dgrid) {\n this._dgrid.noDataMessage = `<span class='dojoxGridNoData'>${msg}</span>`;\n this._dgrid.refresh();\n }\n });\n this._dgrid?.set(\"columns\", this._localStore.columns());\n this._dgrid?.set(\"collection\", this._localStore);\n });\n }\n }\n }\n\n click(row, col, sel) {\n }\n}\nWUResult.prototype._class += \" eclwatch_WUResult\";\n\nexport interface WUResult {\n baseUrl(): string;\n baseUrl(_: string): this;\n user(): string;\n user(_: string): this;\n password(): string;\n password(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n resultName(): string;\n resultName(_: string): this;\n sequence(): number;\n sequence(_: number): this;\n nodeGroup(): string;\n nodeGroup(_: string): this;\n logicalFile(): string;\n logicalFile(_: string): this;\n filter(): ResultFilter;\n filter(_: ResultFilter): this;\n}\n\nWUResult.prototype.publish(\"baseUrl\", \"\", \"string\", \"URL to WsWorkunits\");\nWUResult.prototype.publish(\"user\", \"\", \"string\", \"User ID\");\nWUResult.prototype.publish(\"password\", \"\", \"string\", \"Password\");\nWUResult.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUResult.prototype.publish(\"resultName\", \"\", \"string\", \"Result Name\");\nWUResult.prototype.publish(\"sequence\", undefined, \"number\", \"Sequence Number\");\nWUResult.prototype.publish(\"nodeGroup\", \"\", \"string\", \"NodeGroup\");\nWUResult.prototype.publish(\"logicalFile\", \"\", \"string\", \"Logical File Name\");\nWUResult.prototype.publish(\"filter\", {}, \"object\", \"Filter\");\n","import { Workunit, WUStateID } from \"@hpcc-js/comms\";\nimport { Edge, Graph, Vertex } from \"@hpcc-js/graph\";\nimport { hashSum, IObserverHandle } from \"@hpcc-js/util\";\n\nexport enum STATUS {\n CREATE = \"Created\",\n COMPILE = \"Compiled\",\n EXECUTE = \"Executed\",\n COMPLETE = \"Completed\"\n}\n\nexport enum STATUS_ACTIVE {\n CREATE = \"Creating\",\n COMPILE = \"Compiling\",\n EXECUTE = \"Executing\",\n COMPLETE = \"Completed\"\n}\n\nexport class WUStatus extends Graph {\n\n protected _wu: Workunit;\n protected _wuHandle: IObserverHandle;\n\n protected _create: Vertex;\n protected _compile: Vertex;\n protected _execute: Vertex;\n protected _complete: Vertex;\n\n constructor() {\n super();\n this\n .zoomable(false)\n .zoomToFitLimit(1)\n .layout(\"Hierarchy\")\n .hierarchyRankDirection(\"LR\")\n .showToolbar(false)\n .allowDragging(false)\n ;\n }\n\n private _prevHash;\n attachWorkunit() {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid()\n });\n if (this._prevHash !== hash) {\n this._prevHash = hash;\n this._wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n if (this._wuHandle) {\n this._wuHandle.release();\n }\n this._wuHandle = this._wu.watch(changes => {\n this.lazyRender();\n });\n }\n }\n\n createVertex(faChar: string) {\n return new Vertex()\n .icon_diameter(32)\n .icon_shape_colorFill(\"none\")\n .icon_shape_colorStroke(\"none\")\n .icon_image_colorFill(\"darkgray\")\n .iconAnchor(\"middle\")\n .textbox_shape_colorFill(\"none\")\n .textbox_shape_colorStroke(\"none\")\n .textbox_text_colorFill(\"darkgray\")\n .faChar(faChar)\n ;\n }\n\n updateVertex(vertex: Vertex, color: string) {\n vertex\n .icon_image_colorFill(color)\n .textbox_text_colorFill(color)\n ;\n }\n\n updateVertexStatus(level: 0 | 1 | 2 | 3 | 4, active: boolean = false) {\n const completeColor = this._wu.isFailed() ? \"darkred\" : \"darkgreen\";\n this._create.text(STATUS.CREATE);\n this._compile.text(STATUS.COMPILE);\n this._execute.text(STATUS.EXECUTE);\n this._complete.text(STATUS.COMPLETE);\n switch (level) {\n case 0:\n this.updateVertex(this._create, \"darkgray\");\n this.updateVertex(this._compile, \"darkgray\");\n this.updateVertex(this._execute, \"darkgray\");\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 1:\n this._create.text(STATUS_ACTIVE.CREATE);\n this.updateVertex(this._create, active ? \"orange\" : completeColor);\n this.updateVertex(this._compile, \"darkgray\");\n this.updateVertex(this._execute, \"darkgray\");\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 2:\n this._compile.text(STATUS_ACTIVE.COMPILE);\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, active ? \"orange\" : completeColor);\n this.updateVertex(this._execute, completeColor);\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 3:\n this._execute.text(STATUS_ACTIVE.EXECUTE);\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, completeColor);\n this.updateVertex(this._execute, active ? \"orange\" : completeColor);\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 4:\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, completeColor);\n this.updateVertex(this._execute, completeColor);\n this.updateVertex(this._complete, completeColor);\n break;\n }\n }\n\n createEdge(source, target) {\n return new Edge()\n .sourceVertex(source)\n .targetVertex(target)\n .strokeColor(\"black\")\n .showArc(false)\n ;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._create = this.createVertex(\"\\uf11d\");\n this._compile = this.createVertex(\"\\uf085\");\n this._execute = this.createVertex(\"\\uf275\");\n this._complete = this.createVertex(\"\\uf11e\");\n const e1 = this.createEdge(this._create, this._compile);\n const e2 = this.createEdge(this._compile, this._execute);\n const e3 = this.createEdge(this._execute, this._complete);\n this.data({\n vertices: [this._create, this._compile, this._execute, this._complete],\n edges: [e1, e2, e3]\n });\n }\n\n update(domNode, element) {\n this.attachWorkunit();\n switch (this._wu.StateID) {\n case WUStateID.Blocked:\n case WUStateID.Wait:\n case WUStateID.Scheduled:\n case WUStateID.UploadingFiled:\n this.updateVertexStatus(1);\n break;\n case WUStateID.Compiling:\n this.updateVertexStatus(2, true);\n break;\n case WUStateID.Submitted:\n this.updateVertexStatus(1, true);\n break;\n case WUStateID.Compiled:\n this.updateVertexStatus(2);\n break;\n case WUStateID.Aborting:\n case WUStateID.Running:\n this.updateVertexStatus(3, true);\n break;\n case WUStateID.Aborted:\n case WUStateID.Archived:\n case WUStateID.Completed:\n this.updateVertexStatus(4);\n break;\n case WUStateID.Failed:\n this.updateVertexStatus(4, false);\n break;\n case WUStateID.DebugPaused:\n case WUStateID.DebugRunning:\n case WUStateID.Paused:\n case WUStateID.Unknown:\n default:\n this.updateVertexStatus(0);\n break;\n }\n super.update(domNode, element);\n this.zoomToFit();\n }\n\n exit(domNode, element) {\n if (this._wuHandle) {\n this._wuHandle.release();\n }\n super.exit(domNode, element);\n }\n}\nWUStatus.prototype._class += \" eclwatch_WUStatus\";\n\nexport interface WUStatus {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n}\n\nWUStatus.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUStatus.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\n","import { Palette } from \"@hpcc-js/common\";\nimport { Scope, Workunit, WsWorkunits } from \"@hpcc-js/comms\";\nimport { ReactTimelineSeries } from \"@hpcc-js/timeline\";\nimport { hashSum, RecursivePartial } from \"@hpcc-js/util\";\n\nimport \"../src/WUGraph.css\";\n\nconst columns = [\"label\", \"start\", \"end\", \"icon\", \"color\", \"series\"];\n\nexport class WUTimeline extends ReactTimelineSeries {\n\n protected _palette = Palette.ordinal(\"default\");\n\n constructor() {\n super();\n this\n .columns(columns)\n .titleColumn(\"label\")\n .iconColumn(\"icon\")\n .colorColumn(\"color\")\n .seriesColumn(\"series\")\n .timePattern(\"%Y-%m-%dT%H:%M:%S.%LZ\")\n .tickFormat(\"%H:%M\")\n .tooltipTimeFormat(\"%H:%M:%S.%L\")\n .tooltipHTML(d => {\n return d[columns.length].calcTooltip();\n })\n ;\n }\n\n private _prevHashSum;\n clear(): this {\n delete this._prevHashSum;\n return this;\n }\n fetchScopes() {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n request: this.request()\n });\n if (this._prevHashSum !== hash) {\n this._prevHashSum = hash;\n const wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n wu.fetchDetails(this.request()).then(scopes => {\n return scopes.filter(scope => scope.Id && scope.attr(\"WhenStarted\").RawValue).map((scope: Scope) => {\n const whenStarted = +scope.attr(\"WhenStarted\").RawValue / 1000;\n const timeElapsed = +scope.attr(\"TimeElapsed\").RawValue / 1000000;\n return [\n scope.Id,\n new Date(whenStarted).toISOString(),\n timeElapsed ? new Date(whenStarted + timeElapsed).toISOString() : undefined,\n null,\n this._palette(scope.ScopeType),\n scope.ScopeName.split(\"::\").join(\":\").split(\":\").slice(0, 1),\n scope\n ];\n });\n }).then(scopes => {\n this\n .data(scopes)\n .render()\n ;\n });\n }\n }\n\n enter(domNode, _element) {\n super.enter(domNode, _element);\n }\n\n update(domNode, element) {\n this.fetchScopes();\n super.update(domNode, element);\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n}\nWUTimeline.prototype._class += \" eclwatch_WUTimeline\";\n\nexport interface WUTimeline {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n request(): Partial<WsWorkunits.WUDetails>;\n request(_: RecursivePartial<WsWorkunits.WUDetails>): this;\n}\n\nWUTimeline.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUTimeline.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUTimeline.prototype.publish(\"request\", {\n ScopeFilter: {\n MaxDepth: 3,\n ScopeTypes: [\"graph\", \"subgraph\"]\n },\n NestedFilter: {\n Depth: 0,\n ScopeTypes: []\n },\n PropertiesToReturn: {\n AllProperties: false,\n AllStatistics: true,\n AllHints: false,\n Properties: [\"WhenStarted\", \"TimeElapsed\"]\n },\n ScopeOptions: {\n IncludeId: true,\n IncludeScope: true,\n IncludeScopeType: true\n },\n PropertyOptions: {\n IncludeName: true,\n IncludeRawValue: true,\n IncludeFormatted: true,\n IncludeMeasure: true,\n IncludeCreator: false,\n IncludeCreatorType: false\n }\n}, \"object\", \"WUDetails Request\");\n"],"names":["_node","d3Local","bbox","d3Select","UtilSubgraph","UtilVertex","UtilEdge","Subgraph","Edge","columns","GraphWidget","STATUS","STATUS_ACTIVE"],"mappings":";;;;;;;;;;;;;;AAAO,MAAM,WAAW;AACjB,MAAM,cAAc;AACpB,MAAM,gBAAgB;ACItB,MAAM,oBAAN,MAAM,0BAAyB,WAAW;AAAA,EAQ7C,cAAc;AACV,UAAM,YAAY;AARd;AACA;AACD,0CAAiB,IAAI,cAAA;AACrB,2CAAkB,IAAI,SACxB,KAAK,EAAE;AAKR,SAAK,eAAe,WAAW,CAAC,SAAS;AACrC,WAAK,gBACA,KAAK,IAAI,EACT,OAAA;AAAA,IAET;AAAA,EACJ;AAAA,EAEU,yBAAyB,MAAM;AACrC,UAAM,MAAM;AAAA,MACR,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK,UAAU,IAAI,aAAa,EAAE,OAAO,OAAK,CAAC;AAAA,IAAA;AAG7D,QAAI,IAAI,YAAY,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,EAAE,UAAU,QAAQ;AAErE,aAAO;AAAA,QACH,OAAO;AAAA,QACP,UAAU;AAAA,UACN;AAAA,YACI,OAAO;AAAA,YACP,SAAS,KAAK,UAAU,KAAK,MAAM,CAAC;AAAA,UAAA;AAAA,QACxC;AAAA,MACJ;AAAA,IAER;AACA,WAAO;AAEP,aAAS,cAAc,MAAM;AACzB,YAAM,QAAa,CAAA;AACnB,YAAM,QAAQ,KAAK,QAAQ,KAAK,GAAG,KAAK,KAAK,GAAG,EAAE,MAAM,KAAK,KAAK,GAAG,EAAE,GAAG,MAAM;AAChF,UAAI,KAAK,aAAa,KAAK,UAAU,SAAS,GAAG;AAC7C,cAAM,WAAW,KAAK,UAAU,IAAI,CAAAA,WAAS;AACzC,iBAAO,cAAcA,MAAK;AAAA,QAC9B,CAAC,EACA,OAAO,CAAA,MAAK,CAAC;AAAA,MAElB,WAAW,OAAO,KAAK,YAAY,YAAY,KAAK,QAAQ,QAAQ;AAChE,cAAM,UAAU,KAAK;AAAA,MACzB,OAAO;AACH,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AAfS;AAAA,EAgBb;AAAA,EAEA,oBAAoB,YAAY;AAC5B,QAAI;AACJ,QAAI,YAAY;AACZ,UAAI;AACA,eAAO,KAAK,MAAM,UAAU;AAAA,MAChC,SAAS,GAAG;AACR,eAAO,SAAS,UAAU;AAAA,MAC9B;AAAA,IACJ;AACA,QAAI,MAAM;AACN,YAAM,QAAQ,KAAK,yBAAyB,IAAI;AAChD,WAAK,eACA,KAAK,KAAK,EACV,OAAA;AAAA,IAET;AAAA,EACJ;AAAA,EAEA,MAAM,SAAS,SAAS;AACpB,UAAM,MAAM,SAAS,OAAO;AAC5B,SACK,UAAU,KAAK,cAAc,EAC7B,UAAU,KAAK,eAAe;AAAA,EAEvC;AAAA,EAEA,OAAO,SAAS,SAAS;AACrB,UAAM,OAAO,SAAS,OAAO;AAE7B,UAAM,OAAO,QAAQ;AAAA,MACjB,SAAS,KAAK,QAAA;AAAA,MACd,MAAM,KAAK,KAAA;AAAA,IAAK,CACnB;AAED,QAAI,KAAK,cAAc,QAAQ,OAAO,KAAK,gBAAgB,aAAa;AACpE,eAAS,OAAO,EAAE,SAAS,KAAK,UAAQ,GAAK,KAAK,KAAA,CAAM,EACnD,aAAA,EACA,KAAK,CAAA,SAAQ;AAEV,aAAK,cAAc;AACnB,aAAK,oBAAoB,KAAK,WAAW;AAEzC,aAAK,YAAY;AAAA,MACrB,CAAC;AAAA,IACT,OAAO;AACH,WAAK,oBAAoB,KAAK,WAAW;AAAA,IAC7C;AAEA,SAAK,cAAc,CAAC,KAAK,oBAAA,GAAuB,IAAI,KAAK,oBAAA,CAAqB,CAAC;AAAA,EACnF;AACJ;AA1GiD;AAA1C,IAAM,mBAAN;AA2GP,iBAAiB,UAAU,UAAU;AAgCrC,iBAAiB,UAAU,QAAQ,WAAW,IAAI,UAAU,wBAAwB;AACpF,iBAAiB,UAAU,QAAQ,QAAQ,IAAI,UAAU,aAAa;AACtE,iBAAiB,UAAU,QAAQ,uBAAuB,MAAM,UAAU,gEAAgE;AAC1I,iBAAiB,UAAU,QAAQ,iBAAiB,MAAM,UAAU,iCAAiC;AACrG,iBAAiB,UAAU,aAAa,sBAAsB,kBAAkB,iBAAiB;AACjG,iBAAiB,UAAU,aAAa,2BAA2B,kBAAkB,sBAAsB;AAC3G,iBAAiB,UAAU,aAAa,YAAY,gBAAgB;AACpE,iBAAiB,UAAU,aAAa,aAAa,gBAAgB;AACrE,iBAAiB,UAAU,aAAa,cAAc,gBAAgB;AACtE,iBAAiB,UAAU,aAAa,YAAY,gBAAgB;AACpE,iBAAiB,UAAU,aAAa,kBAAkB,gBAAgB;AAC1E,iBAAiB,UAAU,aAAa,oBAAoB,gBAAgB;AAC5E,iBAAiB,UAAU,aAAa,gBAAgB,gBAAgB;AACxE,iBAAiB,UAAU,aAAa,gBAAgB,gBAAgB;AACxE,iBAAiB,UAAU,aAAa,kBAAkB,gBAAgB;AClJ1E,MAAM,gBAAN,MAAM,sBAAqB,OAAO;AAAA,EAE9B,cAAc;AACV,UAAA;AAAA,EACJ;AAAA,EAEA,MAAM,SAAS,SAAS;AACpB,UAAM,MAAM,SAAS,OAAO;AAC5B,SAAK,MAAM,GAAG,SAAS,MAAM;AACzB,WAAK,MAAM,KAAK,MAAM;AAAA,IAC1B,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,MAAc;AAAA,EACpB;AACJ;AAfkC;AAAlC,IAAM,eAAN;AAiBO,MAAM,iBAAN,MAAM,uBAAsB,OAAO;AAAA,EAAnC;AAAA;AAEK,gCAAOC,MAAA;AACL,sCAA0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA;AAAA;AAAA,EAWpD,SAAS,GAA+B;AACpC,QAAI,CAAC,UAAU,QAAQ;AACnB,YAAM,SAAS,CAAA;AACf,iBAAW,OAAO,KAAK,YAAY;AAC/B,YAAI,KAAK,WAAW,GAAG,GAAG;AACtB,iBAAO,KAAK,GAAG;AAAA,QACnB;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AACA,SAAK,aAAa,CAAA;AAClB,MAAE,QAAQ,CAAA,SAAQ,KAAK,WAAW,IAAI,IAAI,IAAI;AAC9C,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,MAAc;AACjB,SAAK,WAAW,IAAI,IAAI,CAAC,KAAK,WAAW,IAAI;AAAA,EACjD;AAAA,EAEA,OAAO,SAAS,SAAS;AACrB,UAAM,OAAO,SAAS,OAAO;AAE7B,UAAM,UAAU;AAChB,UAAM,QAAQ,KAAK,GAAG,UAAU,aAAa,EAAE,KAAK,KAAK,KAAA,GAAQ,CAAC,MAAW,EAAE,IAAI;AACnF,UAAM,MAAA,EAAQ,OAAO,GAAG,EACnB,KAAK,SAAS,YAAY,EAC1B,KAAK,SAA6B,GAAG;AAClC,cAAQ,KAAK;AAAA,QAAI;AAAA,QAAM,IAAI,aAAA,EACtB,OAAO,IAAI,EACX,KAAK,EAAE,IAAI,EACX,0BAA0B,MAAM,EAChC,wBAAwB,MAAM,EAC9B,WAAW,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,GAAG,EAAE,KAAK,KAAK,EAAE,KAAK,GAAG,EAC9B,QAAQ,GAAG,EAAE,IAAI,MAAM,EAAE,KAAK,EAAE,EAChC,GAAG,SAAS,CAAA,SAAQ;AACjB,kBAAQ,OAAO,IAAI;AACnB,kBAAQ,OAAA;AACR,kBAAQ,MAAM,IAAI;AAAA,QACtB,CAAC,EACA,GAAG,aAAa,CAAA,SAAQ;AACrB,kBAAQ,UAAU,IAAI;AAAA,QAC1B,CAAC,EACA,GAAG,YAAY,CAAA,SAAQ;AACpB,kBAAQ,SAAS,IAAI;AAAA,QACzB,CAAC;AAAA,MAAA;AAAA,IAET,CAAC,EACA,MAAM,KAAK,EACX,KAAK,SAA6B,GAAG,GAAG;AACrC,YAAMC,QAAO,QAAQ,KAAK,IAAI,IAAI,EAC7B,qBAAqB,QAAQ,WAAW,EAAE,IAAI,IAAI,SAAS,IAAI,EAC/D,OAAA,EAAS,QAAA;AAEdC,aAAS,IAAI,EACR,KAAK,aAAa,aAAa,CAACD,MAAK,QAAQ,CAAC,KAAK,IAAI,EAAE,GAAG;AAAA,IAErE,CAAC;AAEL,UAAM,KAAA,EACD,KAAK,SAA6B,GAAG;AAClC,cAAQ,KAAK,IAAI,IAAI,EAChB,OAAO,IAAI,EACX,OAAA;AAAA,IACT,CAAC,EACA,OAAA;AACL,UAAM,OAAO,KAAK,QAAQ,MAAM,IAAI;AACpC,SAAK,GAAG,KAAK,aAAa,iBAAiB,KAAK,OAAA,IAAW,IAAI,KAAK,SAAS,CAAC,GAAG;AAAA,EACrF;AAAA;AAAA,EAGA,MAAM,MAAc;AAAA,EACpB;AAAA,EAEA,UAAU,MAAc;AAAA,EACxB;AAAA,EAEA,SAAS,MAAc;AAAA,EACvB;AACJ;AA9F0C;AAAnC,IAAM,gBAAN;AA+FP,cAAc,UAAU,UAAU;AC9GlC,SAAS,cAAc,MAAc;AACjC,UAAQ,MAAA;AAAA,IACJ,KAAK;AAAK,aAAO;AAAA,IACjB,KAAK;AAAK,aAAO;AAAA,IACjB,KAAK;AAAK,aAAO;AAAA,IACjB,KAAK;AAAK,aAAO;AAAA,IACjB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAO,aAAO;AAAA,IAEnB,KAAK;AAAK,aAAO;AAAA,IACjB,KAAK;AAAK,aAAO;AAAA,IACjB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAM,aAAO;AAAA,IAClB,KAAK;AAAO,aAAO;AAAA,IACnB,KAAK;AAAO,aAAO;AAAA,IACnB,KAAK;AAAO,aAAO;AAAA,EAAA;AAEvB,SAAO;AACX;AAzCS;AA2CF,MAAM,qBAAN,MAAM,mBAAkB;AAAA,EAY3B,cAAc;AAXN;AACA,wCAA2C,CAAA;AAC3C,yCAAiD,CAAA;AACjD,uCAA4C,CAAA;AAC5C,wCAA8C,CAAA;AAC9C,oCAAmC,CAAA;AACnC,qCAAyC,CAAA;AACzC,mCAA2C,CAAA;AAEzC,qCAAyC,CAAA;AAAA,EAGnD;AAAA,EAEA,QAAQ;AACJ,SAAK,eAAe,CAAA;AACpB,SAAK,gBAAgB,CAAA;AACrB,SAAK,cAAc,CAAA;AACnB,SAAK,eAAe,CAAA;AACpB,SAAK,WAAW,CAAA;AAChB,SAAK,YAAY,CAAA;AAAA,EACrB;AAAA,EAEA,IAAI,aAAyB;AACzB,SAAK,UAAU;AACf,SAAK,SAAS,KAAK,OAAO;AAE1B,SAAK,UAAU,CAAA;AACf,SAAK,QAAQ,KAAK,CAAA,SAAQ;AACtB,UAAI,gBAAgBE,SAAc;AAAA,eACvB,gBAAgBC,UAAY;AACnC,cAAM,OAAO,KAAK,EAAE,KAAK,MAAM,EAAE;AACjC,YAAI,CAAC,KAAK,QAAQ,IAAI,GAAG;AACrB,eAAK,QAAQ,IAAI,IAAI,CAAA;AAAA,QACzB;AACA,aAAK,QAAQ,IAAI,EAAE,KAAK,IAAI;AAAA,MAChC,MAAA;AAAA,IAEJ,CAAC;AAAA,EACL;AAAA,EAIA,SAAS,GAA+B;AACpC,QAAI,CAAC,UAAU,QAAQ;AACnB,YAAM,SAAS,CAAA;AACf,iBAAW,OAAO,KAAK,WAAW;AAC9B,YAAI,KAAK,UAAU,GAAG,GAAG;AACrB,iBAAO,KAAK,GAAG;AAAA,QACnB;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AACA,SAAK,YAAY,CAAA;AACjB,MAAE,QAAQ,CAAA,SAAQ,KAAK,UAAU,IAAI,IAAI,IAAI;AAC7C,WAAO;AAAA,EACX;AAAA,EAEA,SAAS,SAAiC;AACtC,UAAM,WAAwB;AAAA,MAC1B,WAAW,CAAA;AAAA,MACX,UAAU,CAAA;AAAA,MACV,OAAO,CAAA;AAAA,MACP,WAAW,CAAA;AAAA,IAAC;AAGhB,YAAQ,KAAK,CAAC,SAAS;AACnB,UAAI,gBAAgBD,UAAc;AAC9B,cAAM,WAAW,KAAK,eAAe,MAAM,SAAS,WAAW,SAAS,SAAS;AACjF,iBAAS,WAAW,KAAK,SAAS,SAAS,KAAK,SAAS,SAAA,MAAe,QAAQ;AAAA,MACpF,WAAW,gBAAgBC,UAAY;AACnC,aAAK,aAAa,MAAM,SAAS,WAAW,SAAS,QAAQ;AAAA,MACjE,WAAW,gBAAgBC,MAAU;AACjC,aAAK,WAAW,MAAM,SAAS,KAAK;AAAA,MACxC;AAAA,IACJ,CAAC;AAED,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,UAAU,KAAK;AAClB,QAAI,SAAS;AACb,QAAI,OAAO,SAAS,QAAQ,GAAG;AAC/B,QAAI,OAAO;AACX,WAAO,QAAQ,GAAG;AACd,gBAAU,SAAS,UAAU,OAAO,GAAG,IAAI;AAC3C,aAAO,SAAS,QAAQ,KAAK,OAAO,CAAC;AACrC,UAAI,OAAO,GAAG;AACV,gBAAQ,KAAK,wBAAwB;AACrC;AAAA,MACJ;AACA,YAAM,MAAM,SAAS,UAAU,OAAO,GAAG,IAAI;AAC7C,gBAAU,CAAC,MAAM,MAAO,IAAI,SAAS,UAAU,OAAO,GAAG,IAAI,CAAC,KAAK;AACnE,aAAO,SAAS,QAAQ,KAAK,OAAO,CAAC;AAAA,IACzC;AACA,cAAU,SAAS,UAAU,OAAO,GAAG,SAAS,MAAM;AACtD,WAAO,OAAO,MAAM,KAAK,EAAE,KAAK,IAAI;AAAA,EACxC;AAAA,EAEA,eAAe,UAAmC;AAC9C,QAAI,KAAK,KAAK,aAAa,SAAS,EAAE,EAAE;AACxC,QAAI,CAAC,IAAI;AACL,WAAK,IAAIC,WAAA,EACJ,MAAM,SAAS,EAAE,EAAE,EACnB,GAAG,YAAY,MAAM;AAClB,aAAK,SAAS,EAAE;AAAA,MACpB,CAAC;AAEL,WAAK,aAAa,SAAS,EAAE,EAAE,IAAI;AACnC,WAAK,cAAc,GAAG,GAAA,CAAI,IAAI;AAAA,IAClC;AACA,WAAO;AAAA,EACX;AAAA,EAEA,aAAa,QAAiC;AAC1C,QAAI,IAAI,KAAK,YAAY,OAAO,EAAE,EAAE;AACpC,QAAI,CAAC,GAAG;AACJ,YAAM,QAAQ,OAAO,EAAE,SAAA;AACvB,UAAI,OAAO,EAAE,cAAc,SAAS;AAChC,cAAM,SAAS,KAAK,aAAa,OAAO,OAAO,EAAE,EAAE;AACnD,YAAI,IAAI,KAAA,EACH,gBAAgB,SAAS,EACzB,kBAAkB,SAAS,EAC3B,gBAAgB,OAAO,EACvB,OAAO,GAAQ,EACf,GAAG,SAAS,MAAM;AACf,iBAAO,SAAS,QAAQ;AACxB,eAAK,SAAS,MAAM;AAAA,QACxB,CAAC;AAAA,MAET,OAAO;AACH,YAAI,IAAI,SACH,qBAAqB,SAAS,EAC9B,qBAAqB,OAAO,EAC5B,OAAO,cAAc,MAAM,MAAM,CAAC,CAAC,EACnC,KAAK,MAAM,OAAO,CAAC;AAExB,cAAM,cAAc,CAAA;AACpB,YAAI,OAAO,EAAE,QAAQ,YAAY,GAAG;AAChC,sBAAY,KAAK;AAAA,YACb,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,iBAAiB;AAAA,YACjB,mBAAmB;AAAA,YACnB,iBAAiB;AAAA,UAAA,CACpB;AAAA,QACL;AACA,YAAI,OAAO,EAAE,QAAQ,YAAY,GAAG;AAChC,sBAAY,KAAK;AAAA,YACb,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,iBAAiB;AAAA,YACjB,mBAAmB;AAAA,YACnB,iBAAiB;AAAA,UAAA,CACpB;AAAA,QACL;AACA,UAAE,gBAAgB,WAAW;AAAA,MACjC;AACA,WAAK,YAAY,OAAO,EAAE,EAAE,IAAI;AAChC,WAAK,aAAa,EAAE,GAAA,CAAI,IAAI;AAAA,IAChC;AACA,WAAO;AAAA,EACX;AAAA,EAEA,QAAQ,MAA0B;AAC9B,UAAM,aAAa,KAAK,OAAO,EAAE,KAAK,MAAM,EAAE;AAC9C,UAAM,aAAa,KAAK,OAAO,EAAE,KAAK,MAAM,EAAE;AAC9C,WAAO,eAAe,OAAO,eAAe;AAAA,EAChD;AAAA,EAEA,cAAc,MAA0B;AACpC,WAAO,KAAK,OAAO,OAAO,EAAE,OAAO,KAAK,OAAO,OAAO,EAAE;AAAA,EAC5D;AAAA,EAEA,WAAW,MAAmC;AAC1C,QAAI,IAAI,KAAK,SAAS,KAAK,EAAE,EAAE;AAC/B,QAAI,CAAC,GAAG;AACJ,YAAM,QAAQ,KAAK,EAAE,SAAA;AACrB,YAAM,UAAU,KAAK,YAAY,KAAK,OAAO,EAAE,EAAE;AACjD,YAAM,UAAU,KAAK,YAAY,KAAK,OAAO,EAAE,EAAE;AACjD,UAAI,WAAW,SAAS;AACpB,cAAM,UAAU,KAAK,QAAQ,IAAI;AACjC,cAAM,gBAAgB,KAAK,cAAc,IAAI;AAE7C,cAAM,QAAQ,KAAK,OAAO,+BAA+B,KAAK;AAU9D,YAAI,kBAAkB;AACtB,YAAI,SAAS;AACb,YAAI,MAAM,cAAc,GAAG;AACvB,mBAAS;AACT,4BAAkB;AAAA,QACtB,WAAW,MAAM,aAAa,GAAG;AAC7B,4BAAkB;AAAA,QACtB,WAAW,SAAS;AAChB,mBAAS;AACT,4BAAkB;AAAA,QACtB,WAAW,eAAe;AACtB,mBAAS;AACT,4BAAkB;AAAA,QACtB;AACA,YAAI,IAAIC,SACH,aAAa,OAAO,EACpB,aAAa,OAAO,EACpB,aAAa,QAAQ,EACrB,aAAa,OAAO,EACpB,OAAO,MAAM,EACb,gBAAgB,eAAe,EAC/B,KAAK,KAAK;AAEf,aAAK,SAAS,KAAK,EAAE,EAAE,IAAI;AAC3B,aAAK,UAAU,EAAE,GAAA,CAAI,IAAI;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,eAAe,UAAyB,WAAsB,WAAiC;AAC3F,UAAM,KAAK,KAAK,eAAe,QAAQ;AACvC,cAAU,KAAK,EAAE;AACjB,UAAM,SAAS,KAAK,aAAa,SAAS,OAAO,EAAE,EAAE;AACrD,QAAI,QAAQ;AACR,gBAAU,KAAK,EAAE,QAAQ,OAAO,IAAI;AAAA,IACxC;AACA,WAAO;AAAA,EACX;AAAA,EAEA,aAAa,QAAqB,WAAsB,UAAoC;AACxF,UAAM,IAAI,KAAK,aAAa,MAAM;AAClC,aAAS,KAAK,CAAC;AACf,UAAM,SAAS,KAAK,aAAa,OAAO,OAAO,EAAE,EAAE;AACnD,QAAI,QAAQ;AACR,gBAAU,KAAK,EAAE,QAAQ,OAAO,GAAG;AAAA,IACvC;AACA,WAAO;AAAA,EACX;AAAA,EAEA,WAAW,MAAiB,OAAqB;AAC7C,UAAM,IAAI,KAAK,WAAW,IAAI;AAC9B,QAAI,GAAG;AACH,YAAM,KAAK,CAAC;AAAA,IAChB;AACA,WAAO;AAAA,EACX;AAAA,EAEA,aAAa,SAAqB;AAC9B,aAAS,IAAI,QAAQ,SAAS,SAAS,GAAG,KAAK,GAAG,EAAE,GAAG;AACnD,YAAM,SAAS,QAAQ,SAAS,CAAC;AACjC,YAAM,OAAO,OAAO,EAAE,KAAK,MAAM,EAAE;AACnC,UAAI,KAAK,UAAU,IAAI,GAAG;AACtB,eAAO,OAAO,OAAO,CAAC,QAAmB,WAAsB;AAC3D,iBAAO,IAAI,UAAU;AAAA,YACjB,WAAW,OAAO,EAAE,YAAY;AAAA,YAChC,IAAI,OAAO,KAAK,OAAO,OAAO;AAAA,YAC9B,WAAW;AAAA,YACX,YAAY;AAAA,cACR,UAAU,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC;AAAA,YAAA;AAAA,YAErC,OAAO;AAAA,cACH,MAAM,CAAA;AAAA,YAAC;AAAA,YAEX,cAAc;AAAA,UAAA,CACjB;AAAA,QACL,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,cAAc,SAAqB;AAC/B,eAAW,YAAY,QAAQ,WAAW;AACtC,YAAM,KAAK,KAAK,aAAa,SAAS,EAAE,EAAE;AAC1C,cAAQ,GAAG,YAAS;AAAA,QAChB,KAAK;AACD,gBAAM,gBAA4C,SAAS;AAC3D,gBAAM,QAAuB,CAAA;AAC7B,gBAAM,QAAuB,CAAA;AAE7B,qBAAW,UAAU,eAAe;AAChC,gBAAI,OAAO,QAAQ,WAAW,KAAK,OAAO,QAAQ,KAAK,CAAA,SAAQ,KAAK,OAAO,WAAW,KAAK,OAAO,MAAM,KACpG,OAAO,SAAS,WAAW,KAAK,OAAO,SAAS,KAAK,CAAA,SAAQ,KAAK,OAAO,WAAW,KAAK,OAAO,MAAM,GAAG;AACzG,oBAAM,KAAK,MAAM;AAAA,YACrB,OAAO;AACH,oBAAM,KAAK,MAAM;AAAA,YACrB;AAAA,UACJ;AAEA,cAAI,MAAM,SAAS,GAAG;AAClB,kBAAM,eAAe;AAAA,cACjB,WAAW,SAAS,EAAE;AAAA,cACtB,IAAI,SAAS,EAAE,KAAK;AAAA,cACpB,WAAW;AAAA,cACX,YAAY;AAAA,gBACR,UAAU,CAAC;AAAA,kBACP,MAAM;AAAA,kBACN,UAAU,KAAK,MAAM;AAAA,kBACrB,WAAW,KAAK,MAAM;AAAA,kBACtB,SAAS;AAAA,kBACT,SAAS;AAAA,kBACT,aAAa;AAAA,gBAAA,CAChB;AAAA,cAAA;AAAA,cAEL,OAAO;AAAA,gBACH,MAAM,CAAA;AAAA,cAAC;AAAA,cAEX,cAAc;AAAA,YAAA;AAElB,kBAAM,aAAa,IAAI,UAAU,YAAY;AAC7C,kBAAM,cAAc,SAAS,aAAa,UAAU;AAEpD,uBAAW,UAAU,OAAO;AACxB,yBAAW,QAAQ,OAAO,SAAS;AAC/B,oBAAI,MAAM,QAAQ,KAAK,MAAM,KAAK,GAAG;AACjC,wBAAM,iBAAiB,IAAI,UAAU;AAAA,oBACjC,WAAW,KAAK,OAAO,EAAE;AAAA,oBACzB,IAAI,KAAK,OAAO,EAAE,KAAK,OAAO,YAAY,EAAE;AAAA,oBAC5C,WAAW;AAAA,oBACX,YAAY;AAAA,sBACR,UAAU,CAAA;AAAA,oBAAC;AAAA,oBAEf,OAAO;AAAA,sBACH,MAAM,CAAA;AAAA,oBAAC;AAAA,oBAEX,cAAc;AAAA,kBAAA,CACjB;AACD,2BAAS,WAAW,KAAK,QAAQ,aAAa,cAAc;AAAA,gBAChE;AAAA,cACJ;AACA,yBAAW,QAAQ,OAAO,UAAU;AAChC,oBAAI,MAAM,QAAQ,KAAK,MAAM,KAAK,GAAG;AACjC,wBAAM,iBAAiB,IAAI,UAAU;AAAA,oBACjC,WAAW,KAAK,OAAO,EAAE;AAAA,oBACzB,IAAI,YAAY,EAAE,KAAK,OAAO,KAAK,OAAO,EAAE;AAAA,oBAC5C,WAAW;AAAA,oBACX,YAAY;AAAA,sBACR,UAAU,CAAA;AAAA,oBAAC;AAAA,oBAEf,OAAO;AAAA,sBACH,MAAM,CAAA;AAAA,oBAAC;AAAA,oBAEX,cAAc;AAAA,kBAAA,CACjB;AACD,2BAAS,WAAW,aAAa,KAAK,QAAQ,cAAc;AAAA,gBAChE;AAAA,cACJ;AAAA,YACJ;AACA,kBAAM,QAAQ,CAAA,WAAU,OAAO,OAAO,IAAI,CAAC;AAAA,UAC/C;AACA;AAAA,MAAA;AAAA,IAEZ;AAAA,EACJ;AAAA,EAEA,qBAAqB,SAAqB;AACtC,WAAO,MAAM;AACT,YAAM,iBAAiB,QAAQ,UAAU,OAAO,CAAA,aAAY,SAAS,UAAU,WAAW,KAAK,SAAS,SAAS,WAAW,CAAC;AAC7H,UAAI,eAAe,WAAW,EAAG;AACjC,qBAAe,QAAQ,CAAA,aAAY,SAAS,OAAO,IAAI,CAAC;AAAA,IAC5D;AAAA,EACJ;AAAA,EAEA,wBAAwB,SAAqB;AACzC,eAAW,YAAY,CAAC,GAAG,QAAQ,SAAS,GAAG;AAC3C,UAAI,SAAS,SAAS,WAAW,GAAG;AAChC,iBAAS,OAAO,KAAK;AAAA,MACzB;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,YAAwB;AACpB,UAAM,UAAU,KAAK,QAAQ,MAAA;AAC7B,SAAK,aAAa,OAAO;AACzB,SAAK,cAAc,OAAO;AAC1B,SAAK,qBAAqB,OAAO;AACjC,SAAK,wBAAwB,OAAO;AACpC,WAAO,KAAK,SAAS,OAAO;AAAA,EAChC;AAAA,EAEA,aAAkC;AAC9B,UAAM,SAA8B,CAAA;AACpC,eAAW,QAAQ,KAAK,SAAS;AAC7B,aAAO,KAAK;AAAA,QACR,MAAM,SAAS,IAAI;AAAA,QACnB,QAAQ,cAAc,IAAI;AAAA,QAC1B,OAAO,KAAK,QAAQ,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,OAAO,EAAE,SAAS,MAAM,IAAI,EAAE,CAAC;AAAA,QACnE,OAAO,KAAK,QAAQ,IAAI,EAAE;AAAA,MAAA,CAC7B;AAAA,IACL;AACA,WAAO;AAAA,EACX;AAAA,EAEA,SAAS,MAA4B;AACjC,UAAM,SAAuB,CAAA;AAC7B,eAAW,KAAK,KAAK,QAAQ,IAAI,GAAG;AAChC,aAAO,KAAK,KAAK,YAAY,EAAE,EAAE,EAAE,CAAC;AAAA,IACxC;AACA,WAAO;AAAA,EACX;AAAA,EAEA,UAAU,MAA+CC,UAAS,KAAK;AACnE,UAAM,QAAQ,KAAK,EAAE,eAAA;AACrB,eAAW,OAAO,OAAO;AACrB,YAAM,MAAMA,SAAQ,QAAQ,GAAG;AAC/B,UAAI,QAAQ,IAAI;AACZ,QAAAA,SAAQ,KAAK,GAAG;AAChB,YAAI,KAAK,MAAM,GAAG,CAAC;AAAA,MACvB,OAAO;AACH,YAAI,GAAG,IAAI,MAAM,GAAG;AAAA,MACxB;AAAA,IACJ;AACA,aAAS,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAC1B,UAAI,IAAI,CAAC,MAAM,QAAW;AACtB,YAAI,CAAC,IAAI;AAAA,MACb;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,eAAqD;AACjD,UAAMA,WAAU,CAAC,MAAM,QAAQ,OAAO;AACtC,UAAM,OAAO,KAAK,QAAQ,SAAS,IAAI,CAAA,MAAK;AACxC,YAAM,MAAM,CAAC,SAAS,EAAE,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AAC3C,aAAO,KAAK,UAAU,GAAGA,UAAS,GAAG;AAAA,IACzC,CAAC;AACD,WAAO,EAAE,SAAAA,UAAS,KAAA;AAAA,EACtB;AAAA,EAEA,WAAiD;AAC7C,UAAMA,WAAU,CAAC,MAAM,OAAO;AAC9B,UAAM,OAAO,KAAK,QAAQ,MAAM,IAAI,CAAA,MAAK;AACrC,YAAM,MAAM,CAAC,EAAE,EAAE,EAAE;AACnB,aAAO,KAAK,UAAU,GAAGA,UAAS,GAAG;AAAA,IACzC,CAAC;AACD,WAAO,EAAE,SAAAA,UAAS,KAAA;AAAA,EACtB;AAAA,EAEA,eAAqD;AACjD,UAAMA,WAAU,CAAC,MAAM,OAAO;AAC9B,UAAM,OAAO,KAAK,QAAQ,UAAU,IAAI,CAAA,OAAM;AAC1C,YAAM,MAAM,CAAC,GAAG,EAAE,EAAE;AACpB,aAAO,KAAK,UAAU,IAAIA,UAAS,GAAG;AAAA,IAC1C,CAAC;AACD,WAAO,EAAE,SAAAA,UAAS,KAAA;AAAA,EACtB;AAAA,EAEA,iBAAiB,MAAyB;AACtC,QAAI;AACJ,QAAI;AACJ,QAAI,gBAAgBF,YAAU;AAC1B,YAAM,WAAW,KAAK,cAAc,KAAK,IAAI;AAC7C,cAAQ,SAAS;AACjB,oBAAc,SAAS,OAAO;AAAA,IAClC,WAAW,gBAAgB,UAAU,gBAAgB,MAAM;AACvD,YAAM,SAAS,KAAK,aAAa,KAAK,IAAI;AAC1C,cAAQ,OAAO;AACf,oBAAc,OAAO,OAAO;AAAA,IAChC,WAAW,gBAAgBC,QAAM;AAC7B,YAAM,OAAO,KAAK,UAAU,KAAK,IAAI;AACrC,cAAQ,KAAK;AACb,oBAAc,KAAK,OAAO;AAAA,IAC9B;AACA,QAAI,OAAO;AACP,aAAO,MAAM,YAAY,WAAW;AAAA,IACxC;AACA,WAAO;AAAA,EACX;AAAA,EAEA,SAAS,IAAkC;AACvC,WAAO,KAAK,aAAa,EAAE;AAAA,EAC/B;AAAA,EAEA,OAAO,IAAoC;AACvC,WAAO,KAAK,YAAY,EAAE;AAAA,EAC9B;AAAA,EAEA,KAAK,IAAkB;AACnB,WAAO,KAAK,SAAS,EAAE;AAAA,EAC3B;AAAA;AAAA,EAGA,SAAS,IAAc;AAAA,EACvB;AACJ;AAze+B;AAAxB,IAAM,oBAAN;AC/CA,MAAM,WAAN,MAAM,iBAAgB,WAAW;AAAA,EA2EpC,cAAc;AACV,UAAA;AA1EI,uCAAc,IAAI,SAAS,OAAO,mBAAmB,EAAE,QAAQ,aAAa,EAC/E,GAAG,SAAS,MAAM;AACf,WAAK,WAAW,KAAK,WAAW;AAAA,IACpC,CAAC;AAEG,mCAAU,IAAI,SAAS,OAAO,oBAAoB,EAAE,QAAQ,SAAS,EACxE,GAAG,SAAS,MAAM;AACf,WAAK,WAAW,KAAK,OAAO;AAAA,IAChC,CAAC;AAEG,wCAAe,IAAI,aAAA,EAAe,OAAO,UAAU,EAAE,QAAQ,OAAO,EACvE,SAAS,IAAI,EACb,GAAG,SAAS,MAAM;AACf,WAAK,UAAU,KAAK,YAAY;AAAA,IACpC,CAAC;AAEG,6CAAoB,IAAI,aAAA,EAAe,OAAO,UAAU,EAAE,QAAQ,aAAa,EAClF,SAAS,KAAK,EACd,GAAG,SAAS,MAAM;AACf,WAAK,UAAU,KAAK,iBAAiB;AAAA,IACzC,CAAC;AAEG,wCAAe,IAAI,aAAA,EAAe,OAAO,UAAU,EAAE,QAAQ,OAAO,EACvE,SAAS,KAAK,EACd,GAAG,SAAS,MAAM;AACf,WAAK,UAAU,KAAK,YAAY;AAAA,IACpC,CAAC;AAEG,4CAAmB,IAAI,aAAA,EAAe,OAAO,UAAU,EAAE,QAAQ,WAAW,EAC/E,SAAS,KAAK,EACd,GAAG,SAAS,MAAM;AACf,WAAK,UAAU,KAAK,gBAAgB;AAAA,IACxC,CAAC;AAEK,kCAAS,IAAIE,MAAA,EAClB,OAAO,WAAW,EAClB,mBAAmB,IAAI,EACvB,YAAY,KAAK,EACjB,cAAc,KAAK;AAGhB,uCAAc,IAAI,QACrB,WAAW,KAAK;AAGb,kCAAS,IAAI,QAChB,WAAW,KAAK;AAGb,sCAAa,IAAI,QACpB,WAAW,KAAK;AAGX,mCAAU,IAAI,cAAc,IAAI,EACrC,GAAG,SAAS,CAAA,SAAQ;AACjB,WAAK,OAAA;AAAA,IACT,CAAC,EACA,GAAG,aAAa,CAAA,SAAQ;AACrB,YAAM,cAAyC,CAAA;AAC/C,iBAAW,UAAU,KAAK,IAAI,SAAS,IAAI,GAAG;AAC1C,oBAAY,OAAO,GAAA,CAAI,IAAI;AAAA,MAC/B;AACA,WAAK,OAAO,mBAAmB,WAAW;AAAA,IAC9C,CAAC,EACA,GAAG,YAAY,CAAA,SAAQ;AACpB,WAAK,OAAO,mBAAA;AAAA,IAChB,CAAC;AAGK,iCAAQ,IAAI,SAAA,EAAW,QAAQ,CAAC,KAAK,QAAQ,KAAK,aAAa,KAAK,QAAQ,KAAK,UAAU,CAAC;AAE5F,+BAAM,IAAI,kBAAA;AAwEZ;AACA;AArEJ,SAAK,WAAW,KAAK;AACrB,SAAK,OAAO,KAAK,KAAK;AACtB,UAAM,UAAoB;AAAA,MACtB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,IAAI,OAAA;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,IAAI,OAAA;AAAA,MACJ,GAAG,KAAK,OAAO,eAAA;AAAA,MACf,IAAI,OAAA;AAAA,IAAO;AACf,SAAK,QAAQ,QAAQ,OAAO,KAAK,QAAA,CAAS,CAAC;AAC3C,SAAK,IAAI,WAAW,CAAC,OAAiB;AAClC,WAAK,UAAA;AACL,WAAK,OAAO,OAAO,CAAA,MAAK;AACpB,aAAK,OACA,UAAU,CAAC,EAAE,CAAC,EACd,aAAa,EAAE;AAAA,MAExB,CAAC;AAAA,IACL;AAEA,SAAK,OAAO,YAAY,CAAC,MAAc;AACnC,aAAO,KAAK,IAAI,iBAAiB,CAAC;AAAA,IACtC,CAAC;AAAA,EACL;AAAA,EAEA,WAAW,SAAiB;AACxB,YAAQ,SAAA;AAAA,MACJ,KAAK,KAAK;AACN,aAAK,OAAO,KAAA,EAAO,UAAU,QAAQ,CAAC,OAAiB;AACnD,aAAG,SAAS,SAAS;AAAA,QACzB,CAAC;AACD;AAAA,MACJ,KAAK,KAAK;AACN,aAAK,OAAO,KAAA,EAAO,UAAU,QAAQ,CAAC,OAAiB;AACnD,aAAG,SAAS,QAAQ;AAAA,QACxB,CAAC;AACD;AAAA,IAAA;AAER,SAAK,OAAA;AAAA,EACT;AAAA,EAEA,UAAU,UAAwB;AAC9B,SAAK,aAAa,SAAS,aAAa,KAAK,YAAY;AACzD,SAAK,kBAAkB,SAAS,aAAa,KAAK,iBAAiB;AACnE,SAAK,aAAa,SAAS,aAAa,KAAK,YAAY;AACzD,SAAK,iBAAiB,SAAS,aAAa,KAAK,gBAAgB;AACjE,YAAQ,UAAA;AAAA,MACJ,KAAK,KAAK;AACN,aAAK,MAAM,OAAO,CAAC;AACnB;AAAA,MACJ,KAAK,KAAK;AACN,aAAK,MAAM,OAAO,CAAC;AACnB;AAAA,MACJ,KAAK,KAAK;AACN,aAAK,MAAM,OAAO,CAAC;AACnB;AAAA,MACJ,KAAK,KAAK;AACN,aAAK,MAAM,OAAO,CAAC;AACnB;AAAA,IAAA;AAER,SAAK,OAAO,CAAA,MAAK;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EAIA,kBAAuC;AACnC,UAAM,OAAO,QAAQ;AAAA,MACjB,SAAS,KAAK,QAAA;AAAA,MACd,MAAM,KAAK,KAAA;AAAA,MACX,SAAS,KAAK,QAAA;AAAA,MACd,YAAY,KAAK,WAAA;AAAA,IAAW,CAC/B;AACD,QAAI,CAAC,KAAK,mBAAmB,KAAK,iBAAiB,MAAM;AACrD,WAAK,cAAA;AACL,WAAK,eAAe;AACpB,WAAK,IAAI,MAAA;AACT,YAAM,KAAK,SAAS,OAAO,EAAE,SAAS,KAAK,UAAQ,GAAK,KAAK,MAAM;AACnE,aAAO,GAAG,YAAA,EAAc,KAAK,CAAA,WAAU;AACnC,mBAAW,SAAS,QAAQ;AACxB,cAAI,MAAM,SAAS,KAAK,QAAA,GAAW;AAC/B,iBAAK,eAAA;AACL,mBAAO,MAAM,gBAAgB,KAAK,WAAA,CAAY;AAAA,UAClD;AAAA,QACJ;AAAA,MACJ,CAAC,EAAE,KAAK,CAAA,eAAc;AAClB,aAAK,kBAAkB;AACvB,eAAO,KAAK;AAAA,MAChB,CAAC;AAAA,IACL;AACA,WAAO,QAAQ,QAAQ,KAAK,eAAe;AAAA,EAC/C;AAAA,EAEA,MAAM,SAAS,UAAU;AACrB,UAAM,MAAM,SAAS,QAAQ;AAAA,EACjC;AAAA,EAEA,OAAO,SAAS,SAAS;AACrB,UAAM,OAAO,SAAS,OAAO;AAAA,EACjC;AAAA,EAEA,KAAK,SAAS,SAAS;AACnB,UAAM,KAAK,SAAS,OAAO;AAAA,EAC/B;AAAA,EAEA,YAAY;AACR,SAAK,IAAI,SAAS,KAAK,QAAQ,UAAU;AACzC,SAAK,OACA,KAAK,KAAK,IAAI,UAAA,GAAa,IAAI;AAEpC;AACI,YAAM,EAAE,SAAAD,UAAS,KAAA,IAAS,KAAK,IAAI,aAAA;AACnC,WAAK,YACA,QAAQA,QAAO,EACf,KAAK,IAAI;AAAA,IAElB;AACA;AACI,YAAM,EAAE,SAAAA,UAAS,KAAA,IAAS,KAAK,IAAI,SAAA;AACnC,WAAK,OACA,QAAQA,QAAO,EACf,KAAK,IAAI;AAAA,IAElB;AACA;AACI,YAAM,EAAE,SAAAA,UAAS,KAAA,IAAS,KAAK,IAAI,aAAA;AACnC,WAAK,WACA,QAAQA,QAAO,EACf,KAAK,IAAI;AAAA,IAElB;AAAA,EACJ;AAAA,EAEA,OAAO,UAAsC;AACzC,QAAI,KAAK,KAAA,KAAU,KAAK,WAAW;AAC/B,WAAK,gBAAA,EAAkB,KAAK,CAAA,gBAAe;AACvC,aAAK,IAAI,IAAI,WAAW;AACxB,aAAK,QAAQ,KAAK,KAAK,IAAI,YAAY;AACvC,aAAK,UAAA;AACL,cAAM,OAAO,QAAQ;AAAA,MACzB,CAAC;AAAA,IACL,OAAO;AACH,YAAM,OAAO,QAAQ;AAAA,IACzB;AACA,WAAO;AAAA,EACX;AAAA,EAEA,UAAU,GAAI;AACV,QAAI,CAAC,UAAU,OAAQ,QAAO,KAAK,OAAO,UAAA;AAC1C,UAAM,OAAO,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,SAAS,CAAC;AAC1E,QAAI,MAAM;AACN,WAAK,OAAO,UAAU,CAAC,IAAI,CAAC;AAAA,IAChC;AACA,WAAO;AAAA,EACX;AACJ;AA5OwC;AAAjC,IAAM,UAAN;AA6OP,QAAQ,UAAU,UAAU;AAa5B,QAAQ,UAAU,QAAQ,WAAW,IAAI,UAAU,wBAAwB;AAC3E,QAAQ,UAAU,QAAQ,QAAQ,IAAI,UAAU,aAAa;AAC7D,QAAQ,UAAU,QAAQ,WAAW,IAAI,UAAU,UAAU;AAC7D,QAAQ,UAAU,QAAQ,cAAc,IAAI,UAAU,aAAa;ACrQnE,SAAS,eAAe,KAAK;AACzB,SAAO,OAAO,GAAG,EAAE,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,QAAQ;AAChH;AAFS;AAIT,SAAS,WAAW,MAAM;AACtB,UAAQ,OAAO,UAAU,SAAS,KAAK,IAAI,GAAA;AAAA,IACvC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO,eAAe,IAAI;AAAA,IAC9B;AACI,cAAQ,KAAK,yBAAyB,OAAO,UAAU,SAAS,KAAK,IAAI,CAAC;AAAA,EAAA;AAElF,SAAO;AACX;AAZS;AAcF,MAAM,SAAN,MAAM,OAAM;AAAA,EASf,YAAY,UAAkB,QAAmB,YAAqB,SAAuB,CAAA,GAAI,SAAiC;AARxH;AACA;AACA;AACA,kCAA2E,CAAA;AAC7E;AACE,mCAAwB,CAAA;AAC1B;AAGJ,SAAK,WAAW;AAChB,SAAK,SAAS;AACd,SAAK,WAAW,KAAK,eAAe,KAAK,OAAO,IAAI;AACpD,SAAK,eAAe,IAAI,aAAa,KAAK,UAAU,UAAU;AAC9D,SAAK,UAAU;AACf,SAAK,UAAU;AAAA,EACnB;AAAA,EAEA,UAAU;AACN,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,eAAe,YAAwB,SAAiB,IAAkB;AACtE,QAAI,CAAC,WAAY,QAAO,CAAA;AACxB,WAAO,WAAW,WAAW,OAAO,UAAQ,KAAK,KAAK,QAAQ,YAAY,KAAK,KAAK,SAAS,WAAW,MAAM,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,QAAQ;AACvI,YAAM,QAAQ,KAAK;AACnB,YAAM,QAAQ,KAAK,MAAM,YAAY;AACrC,YAAM,SAAqB;AAAA,QACvB,OAAO,SAAS;AAAA,QAChB,QAAQ;AAAA,QACR;AAAA,QACA,OAAO,SAAS,QAAQ,SAAS;AAAA,QACjC,WAAW;AAAA,QACX,UAAU;AAAA,QACV,OAAO,QAAQ,KAAK;AAAA,QACpB,OAAO,KAAK;AAAA,MAAA;AAEhB,YAAM,WAAW,KAAK,eAAe,MAAM,SAAS,QAAQ,GAAG;AAC/D,UAAI,SAAS,QAAQ;AACjB,eAAO,SAAS,KAAK,SAAS,OAAO,CAAC,MAAc,cAA0B;AAC1E,iBAAO,OAAO,UAAU;AAAA,QAC5B,GAAG,CAAC;AACJ,eAAO,WAAW;AAAA,MACtB,OAAO;AACH,eAAO,SAAS,KAAK,UAAA,IAAc;AACnC,eAAO,YAAY,CAAC,MAAM,QAAQ;AAC9B,kBAAQ,OAAO,MAAA;AAAA,YACX,KAAK;AACD,qBAAO;AAAA,gBACH,MAAM,KAAK,QAAQ,OAAO,0BAA0B,EAAE,KAAA;AAAA,cAAK;AAAA,YAEnE,KAAK;AACD,qBAAO;AAAA,UAAA;AAEf,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO;AAAA,IACX,CAAC;AAAA,EACL;AAAA,EAEA,eAAe,MAAM;AACjB,QAAI,OAAO,UAAU,SAAS,KAAK,IAAI,MAAM,mBAAmB;AAC5D,aAAO;AAAA,IACX;AACA,QAAI,YAAY;AAChB,QAAI,gBAAgB;AACpB,eAAW,OAAO,MAAM;AACpB,UAAI,CAAC,eAAe;AAChB,wBAAgB,OAAO,UAAU,SAAS,KAAK,KAAK,GAAG,CAAC;AAAA,MAC5D;AACA;AAAA,IACJ;AACA,WAAO,cAAc,KAAK,kBAAkB;AAAA,EAChD;AAAA,EAEA,WAAW,MAAM,OAAO,MAAM;AAC1B,QAAI,KAAK,eAAe,IAAI,GAAG;AAC3B,iBAAW,OAAO,MAAM;AACpB,aAAK,WAAW,KAAK,GAAG,GAAG,OAAO,IAAI;AAAA,MAC1C;AACA;AAAA,IACJ;AAEA,UAAM,QAAQ,aAAa,OAAO,SAAS,EAAE,QAAQ,GAAG,aAAa,GAAG,OAAO,OAAA,GAAU,IAAI;AAC7F,YAAQ,OAAO,UAAU,SAAS,KAAK,IAAI,GAAA;AAAA,MACvC,KAAK;AACD,YAAI,KAAK,aAAa,OAAO,MAAM,MAAM,KAAK;AAC9C,mBAAW,OAAO,MAAM;AACpB,uBAAa,OAAO,MAAM,EAAE,WAAW,WAAW,GAAG,EAAA,GAAK,EAAE;AAAA,QAChE;AACA,aAAK,aAAa,OAAO,MAAM,MAAM,KAAK;AAC1C,mBAAW,OAAO,MAAM;AACpB,kBAAQ,OAAO,UAAU,SAAS,KAAK,KAAK,GAAG,CAAC,GAAA;AAAA,YAC5C,KAAK;AAAA,YACL,KAAK;AACD,mBAAK,WAAW,KAAK,GAAG,GAAG,OAAO,IAAI;AACtC;AAAA,YACJ;AACI,2BAAa,OAAO,MAAM,EAAE,WAAW,WAAW,KAAK,GAAG,CAAC,EAAA,GAAK,EAAE;AAClE;AAAA,UAAA;AAAA,QAEZ;AACA;AAAA,MACJ,KAAK;AACD,iBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AAClC,kBAAQ,OAAO,UAAU,SAAS,KAAK,KAAK,CAAC,CAAC,GAAA;AAAA,YAC1C,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAED,oBAAM,MAAM,aAAa,OAAO,MAAM,MAAM,KAAK;AACjD,2BAAa,OAAO,MAAM,EAAE,WAAW,WAAW,KAAK,CAAC,CAAC,EAAA,GAAK,GAAG;AACjE;AAAA,YACJ;AAEI,kBAAI,MAAM,GAAG;AACT,sBAAM,MAAM,aAAa,OAAO,MAAM,MAAM,KAAK;AACjD,2BAAW,OAAO,KAAK,CAAC,GAAG;AACvB,+BAAa,OAAO,MAAM,EAAE,WAAW,WAAW,GAAG,EAAA,GAAK,GAAG;AAAA,gBACjE;AAAA,cACJ;AACA,2BAAa,OAAO,MAAM,MAAM,KAAK;AACrC,yBAAW,OAAO,KAAK,CAAC,GAAG;AACvB,oBAAI,KAAK,CAAC,EAAE,GAAG,GAAG;AACd,sBAAI,OAAO,UAAU,SAAS,KAAK,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,qBAAqB,OAAO,UAAU,SAAS,KAAK,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,kBAAkB;AACzI,0BAAM,KAAK,aAAa,OAAO,MAAM,MAAM,GAAG;AAC9C,yBAAK,WAAW,KAAK,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE;AAAA,kBAC7C,WAAW,IAAI,QAAQ,UAAU,IAAI,SAAS,SAAS,MAAM,MAAM,IAAI;AACnE,iCAAa,OAAO,MAAM,EAAE,WAAW,KAAK,CAAC,EAAE,GAAG,EAAA,GAAK,GAAG;AAAA,kBAC9D,WAAW,IAAI,QAAQ,gBAAgB,IAAI,SAAS,eAAe,MAAM,MAAM,IAAI;AAC/D,iCAAa,OAAO,MAAM,MAAM,GAAG;AAAA,kBAEvD,OAAO;AACH,0BAAM,MAAM,KAAK,CAAC,EAAE,GAAG;AACvB,iCAAa,OAAO,MAAM,EAAE,WAAW,WAAW,GAAG,EAAA,GAAK,GAAG;AAAA,kBACjE;AAAA,gBACJ,OAAO;AACH,+BAAa,OAAO,MAAM,EAAE,WAAW,GAAA,GAAM,GAAG;AAAA,gBACpD;AAAA,cACJ;AAAA,UAAA;AAAA,QAEZ;AACA;AAAA,IAAA;AAAA,EAEZ;AAAA,EAEA,YAAY,KAAK;AACb,WAAO,IAAI;AAAA,EACf;AAAA,EAEA,SAAS,OAAO,KAAoD;AAChE,QAAI,CAAC,KAAK,SAAU,QAAO,QAAQ,QAAQ,EAAE,aAAa,GAAG,MAAM,CAAA,GAAI;AACvE,UAAM,WAAW,GAAG,KAAK,KAAK,GAAG;AACjC,QAAI,KAAK,OAAO,QAAQ,EAAG,QAAO,KAAK,OAAO,QAAQ;AACtD,UAAM,SAAS,KAAK,SAAS,UAAU,OAAO,MAAM,OAAO,OAAO,KAAK,OAAO,EAAE,KAAK,CAAC,SAAgB;AAClG,aAAO;AAAA,QACH,aAAa,KAAK,SAAS;AAAA,QAC3B,MAAM,KAAK,IAAI,CAAC,KAAK,QAAQ;AACzB,gBAAM,eAAoB,KAAK,aAAa,OAAO,GAAG;AACtD,uBAAa,YAAY,QAAQ;AACjC,uBAAa,cAAc;AAC3B,iBAAO;AAAA,QACX,CAAC;AAAA,MAAA;AAAA,IAET,CAAC,EAAE,MAAM,CAAC,QAAmB;AACzB,WAAK,QAAQ,IAAI,WAAW,2BAA2B;AACvD,aAAO,EAAE,aAAa,GAAG,MAAM,CAAA,EAAC;AAAA,IACpC,CAAC;AACD,SAAK,OAAO,QAAQ,IAAI;AACxB,WAAO;AAAA,EACX;AAAA,EAEA,WAAW,SAAyB;AAChC,UAAM,SAAS,IAAI,SAAA;AACnB,SAAK,SAAS,QAAQ,OAAO,QAAQ,GAAG,EAAE,KAAK,CAAA,aAAY,OAAO,QAAQ,QAAQ,CAAC;AACnF,WAAO,IAAI,aAAa,OAAO,KAAK,CAAA,aAAY,SAAS,IAAI,GAAG;AAAA,MAC5D,aAAa,OAAO,KAAK,CAAA,aAAY,SAAS,WAAW;AAAA,IAAA,CAC5D;AAAA,EACL;AACJ;AApLmB;AAAZ,IAAM,QAAN;AChBA,MAAM,YAAN,MAAM,kBAAiB,OAAO;AAAA,EAKjC,cAAc;AACV,UAAA;AAJM;AACA;AAqBA;AAgCA;AACA;AAlDN,SAAK,WAAW,KAAK;AAAA,EACzB;AAAA,EAEA,QAAQ,OAAY,IAAI;AACpB,WAAO,QAAQ;AAAA,MACX,SAAS,KAAK,QAAA;AAAA,MACd,MAAM,KAAK,KAAA;AAAA,MACX,YAAY,KAAK,WAAA;AAAA,MACjB,UAAU,KAAK,SAAA;AAAA,MACf,WAAW,KAAK,UAAA;AAAA,MAChB,aAAa,KAAK,YAAA;AAAA,MAClB,QAAQ,KAAK,KAAA;AAAA,MACb,UAAU,KAAK,SAAA;AAAA,MACf,GAAG;AAAA,IAAA,CACN;AAAA,EACL;AAAA,EAGA,aAA4B;AACxB,UAAM,aAAa,KAAK,QAAA;AACxB,QAAI,KAAK,oBAAoB,YAAY;AACrC,WAAK,kBAAkB;AAEvB,YAAM,OAAiB;AAAA,QACnB,SAAS,KAAK,QAAA;AAAA,QACd,QAAQ,KAAK,KAAA;AAAA,QACb,UAAU,KAAK,SAAA;AAAA,MAAS;AAE5B,UAAI,KAAK,KAAA,KAAU,KAAK,cAAc;AAClC,aAAK,UAAU,OAAO,OAAO,MAAM,KAAK,KAAA,GAAQ,KAAK,YAAY;AAAA,MACrE,WAAW,KAAK,KAAA,KAAU,KAAK,SAAA,MAAe,QAAW;AACrD,aAAK,UAAU,OAAO,OAAO,MAAM,KAAK,KAAA,GAAQ,KAAK,UAAU;AAAA,MACnE,WAAW,KAAK,YAAA,KAAiB,KAAK,aAAa;AAC/C,aAAK,UAAU,OAAO,kBAAkB,MAAM,KAAK,UAAA,GAAa,KAAK,aAAa;AAAA,MACtF,WAAW,KAAK,eAAe;AAC3B,aAAK,UAAU,OAAO,kBAAkB,MAAM,IAAI,KAAK,aAAa;AAAA,MACxE;AAAA,IACJ;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAM,KAAK,OAAO,kBAAkB,IAAI,mBAAsC;AAC1E,UAAM,SAAS,KAAK,WAAA;AACpB,QAAI,QAAQ;AACR,aAAO,OAAO,UAAU,KAAK,OAAO,OAAO,CAAA,GAAI,gBAAgB,MAAM;AAAA,IACzE;AACA,WAAO,QAAQ,QAAQ,EAAE;AAAA,EAC7B;AAAA,EAIA,OAAO,SAAS,SAAS;AACrB,UAAM,OAAO,SAAS,OAAO;AAC7B,UAAM,YAAY,KAAK,QAAQ;AAAA,MAC3B,YAAY,KAAK,WAAA;AAAA,MACjB,QAAQ,KAAK,OAAA;AAAA,IAAO,CACvB;AACD,QAAI,KAAK,mBAAmB,WAAW;AACnC,WAAK,iBAAiB;AACtB,YAAM,SAAS,KAAK,WAAA;AACpB,UAAI,QAAQ;AACR,eAAO,eAAA,EAAiB,KAAK,CAAA,WAAU;;AACnC,eAAK,cAAc,IAAI,MAAM,QAAQ,QAAQ,KAAK,WAAA,GAAc,KAAK,OAAA,GAAU,CAAC,QAAQ;AACpF,gBAAI,KAAK,QAAQ;AACb,mBAAK,OAAO,gBAAgB,iCAAiC,GAAG;AAChE,mBAAK,OAAO,QAAA;AAAA,YAChB;AAAA,UACJ,CAAC;AACD,qBAAK,WAAL,mBAAa,IAAI,WAAW,KAAK,YAAY;AAC7C,qBAAK,WAAL,mBAAa,IAAI,cAAc,KAAK;AAAA,QACxC,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,KAAK,KAAK,KAAK;AAAA,EACrB;AACJ;AApFqC;AAA9B,IAAM,WAAN;AAqFP,SAAS,UAAU,UAAU;AAuB7B,SAAS,UAAU,QAAQ,WAAW,IAAI,UAAU,oBAAoB;AACxE,SAAS,UAAU,QAAQ,QAAQ,IAAI,UAAU,SAAS;AAC1D,SAAS,UAAU,QAAQ,YAAY,IAAI,UAAU,UAAU;AAC/D,SAAS,UAAU,QAAQ,QAAQ,IAAI,UAAU,aAAa;AAC9D,SAAS,UAAU,QAAQ,cAAc,IAAI,UAAU,aAAa;AACpE,SAAS,UAAU,QAAQ,YAAY,QAAW,UAAU,iBAAiB;AAC7E,SAAS,UAAU,QAAQ,aAAa,IAAI,UAAU,WAAW;AACjE,SAAS,UAAU,QAAQ,eAAe,IAAI,UAAU,mBAAmB;AAC3E,SAAS,UAAU,QAAQ,UAAU,CAAA,GAAI,UAAU,QAAQ;ACrHpD,IAAK,2BAAAE,YAAL;AACHA,UAAA,QAAA,IAAS;AACTA,UAAA,SAAA,IAAU;AACVA,UAAA,SAAA,IAAU;AACVA,UAAA,UAAA,IAAW;AAJH,SAAAA;AAAA,GAAA,UAAA,CAAA,CAAA;AAOL,IAAK,kCAAAC,mBAAL;AACHA,iBAAA,QAAA,IAAS;AACTA,iBAAA,SAAA,IAAU;AACVA,iBAAA,SAAA,IAAU;AACVA,iBAAA,UAAA,IAAW;AAJH,SAAAA;AAAA,GAAA,iBAAA,CAAA,CAAA;AAOL,MAAM,YAAN,MAAM,kBAAiB,MAAM;AAAA,EAUhC,cAAc;AACV,UAAA;AATM;AACA;AAEA;AACA;AACA;AACA;AAcF;AAVJ,SACK,SAAS,KAAK,EACd,eAAe,CAAC,EAChB,OAAO,WAAW,EAClB,uBAAuB,IAAI,EAC3B,YAAY,KAAK,EACjB,cAAc,KAAK;AAAA,EAE5B;AAAA,EAGA,iBAAiB;AACb,UAAM,OAAO,QAAQ;AAAA,MACjB,SAAS,KAAK,QAAA;AAAA,MACd,MAAM,KAAK,KAAA;AAAA,IAAK,CACnB;AACD,QAAI,KAAK,cAAc,MAAM;AACzB,WAAK,YAAY;AACjB,WAAK,MAAM,SAAS,OAAO,EAAE,SAAS,KAAK,QAAA,EAAQ,GAAK,KAAK,KAAA,CAAM;AACnE,UAAI,KAAK,WAAW;AAChB,aAAK,UAAU,QAAA;AAAA,MACnB;AACA,WAAK,YAAY,KAAK,IAAI,MAAM,CAAA,YAAW;AACvC,aAAK,WAAA;AAAA,MACT,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EAEA,aAAa,QAAgB;AACzB,WAAO,IAAI,OAAA,EACN,cAAc,EAAE,EAChB,qBAAqB,MAAM,EAC3B,uBAAuB,MAAM,EAC7B,qBAAqB,UAAU,EAC/B,WAAW,QAAQ,EACnB,wBAAwB,MAAM,EAC9B,0BAA0B,MAAM,EAChC,uBAAuB,UAAU,EACjC,OAAO,MAAM;AAAA,EAEtB;AAAA,EAEA,aAAa,QAAgB,OAAe;AACxC,WACK,qBAAqB,KAAK,EAC1B,uBAAuB,KAAK;AAAA,EAErC;AAAA,EAEA,mBAAmB,OAA0B,SAAkB,OAAO;AAClE,UAAM,gBAAgB,KAAK,IAAI,SAAA,IAAa,YAAY;AACxD,SAAK,QAAQ;AAAA,MAAK;AAAA;AAAA,IAAA;AAClB,SAAK,SAAS;AAAA,MAAK;AAAA;AAAA,IAAA;AACnB,SAAK,SAAS;AAAA,MAAK;AAAA;AAAA,IAAA;AACnB,SAAK,UAAU;AAAA,MAAK;AAAA;AAAA,IAAA;AACpB,YAAQ,OAAA;AAAA,MACJ,KAAK;AACD,aAAK,aAAa,KAAK,SAAS,UAAU;AAC1C,aAAK,aAAa,KAAK,UAAU,UAAU;AAC3C,aAAK,aAAa,KAAK,UAAU,UAAU;AAC3C,aAAK,aAAa,KAAK,WAAW,UAAU;AAC5C;AAAA,MACJ,KAAK;AACD,aAAK,QAAQ;AAAA,UAAK;AAAA;AAAA,QAAA;AAClB,aAAK,aAAa,KAAK,SAAS,SAAS,WAAW,aAAa;AACjE,aAAK,aAAa,KAAK,UAAU,UAAU;AAC3C,aAAK,aAAa,KAAK,UAAU,UAAU;AAC3C,aAAK,aAAa,KAAK,WAAW,UAAU;AAC5C;AAAA,MACJ,KAAK;AACD,aAAK,SAAS;AAAA,UAAK;AAAA;AAAA,QAAA;AACnB,aAAK,aAAa,KAAK,SAAS,aAAa;AAC7C,aAAK,aAAa,KAAK,UAAU,SAAS,WAAW,aAAa;AAClE,aAAK,aAAa,KAAK,UAAU,aAAa;AAC9C,aAAK,aAAa,KAAK,WAAW,UAAU;AAC5C;AAAA,MACJ,KAAK;AACD,aAAK,SAAS;AAAA,UAAK;AAAA;AAAA,QAAA;AACnB,aAAK,aAAa,KAAK,SAAS,aAAa;AAC7C,aAAK,aAAa,KAAK,UAAU,aAAa;AAC9C,aAAK,aAAa,KAAK,UAAU,SAAS,WAAW,aAAa;AAClE,aAAK,aAAa,KAAK,WAAW,UAAU;AAC5C;AAAA,MACJ,KAAK;AACD,aAAK,aAAa,KAAK,SAAS,aAAa;AAC7C,aAAK,aAAa,KAAK,UAAU,aAAa;AAC9C,aAAK,aAAa,KAAK,UAAU,aAAa;AAC9C,aAAK,aAAa,KAAK,WAAW,aAAa;AAC/C;AAAA,IAAA;AAAA,EAEZ;AAAA,EAEA,WAAW,QAAQ,QAAQ;AACvB,WAAO,IAAIJ,OAAA,EACN,aAAa,MAAM,EACnB,aAAa,MAAM,EACnB,YAAY,OAAO,EACnB,QAAQ,KAAK;AAAA,EAEtB;AAAA,EAEA,MAAM,SAAS,SAAS;AACpB,UAAM,MAAM,SAAS,OAAO;AAC5B,SAAK,UAAU,KAAK,aAAa,GAAQ;AACzC,SAAK,WAAW,KAAK,aAAa,GAAQ;AAC1C,SAAK,WAAW,KAAK,aAAa,GAAQ;AAC1C,SAAK,YAAY,KAAK,aAAa,GAAQ;AAC3C,UAAM,KAAK,KAAK,WAAW,KAAK,SAAS,KAAK,QAAQ;AACtD,UAAM,KAAK,KAAK,WAAW,KAAK,UAAU,KAAK,QAAQ;AACvD,UAAM,KAAK,KAAK,WAAW,KAAK,UAAU,KAAK,SAAS;AACxD,SAAK,KAAK;AAAA,MACN,UAAU,CAAC,KAAK,SAAS,KAAK,UAAU,KAAK,UAAU,KAAK,SAAS;AAAA,MACrE,OAAO,CAAC,IAAI,IAAI,EAAE;AAAA,IAAA,CACrB;AAAA,EACL;AAAA,EAEA,OAAO,SAAS,SAAS;AACrB,SAAK,eAAA;AACL,YAAQ,KAAK,IAAI,SAAA;AAAA,MACb,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AACX,aAAK,mBAAmB,CAAC;AACzB;AAAA,MACJ,KAAK,UAAU;AACX,aAAK,mBAAmB,GAAG,IAAI;AAC/B;AAAA,MACJ,KAAK,UAAU;AACX,aAAK,mBAAmB,GAAG,IAAI;AAC/B;AAAA,MACJ,KAAK,UAAU;AACX,aAAK,mBAAmB,CAAC;AACzB;AAAA,MACJ,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AACX,aAAK,mBAAmB,GAAG,IAAI;AAC/B;AAAA,MACJ,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AACX,aAAK,mBAAmB,CAAC;AACzB;AAAA,MACJ,KAAK,UAAU;AACX,aAAK,mBAAmB,GAAG,KAAK;AAChC;AAAA,MACJ,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf;AACI,aAAK,mBAAmB,CAAC;AACzB;AAAA,IAAA;AAER,UAAM,OAAO,SAAS,OAAO;AAC7B,SAAK,UAAA;AAAA,EACT;AAAA,EAEA,KAAK,SAAS,SAAS;AACnB,QAAI,KAAK,WAAW;AAChB,WAAK,UAAU,QAAA;AAAA,IACnB;AACA,UAAM,KAAK,SAAS,OAAO;AAAA,EAC/B;AACJ;AAhLoC;AAA7B,IAAM,WAAN;AAiLP,SAAS,UAAU,UAAU;AAS7B,SAAS,UAAU,QAAQ,WAAW,IAAI,UAAU,wBAAwB;AAC5E,SAAS,UAAU,QAAQ,QAAQ,IAAI,UAAU,aAAa;ACtM9D,MAAM,UAAU,CAAC,SAAS,SAAS,OAAO,QAAQ,SAAS,QAAQ;AAE5D,MAAM,cAAN,MAAM,oBAAmB,oBAAoB;AAAA,EAIhD,cAAc;AACV,UAAA;AAHM,oCAAW,QAAQ,QAAQ,SAAS;AAmBtC;AAfJ,SACK,QAAQ,OAAO,EACf,YAAY,OAAO,EACnB,WAAW,MAAM,EACjB,YAAY,OAAO,EACnB,aAAa,QAAQ,EACrB,YAAY,uBAAuB,EACnC,WAAW,OAAO,EAClB,kBAAkB,aAAa,EAC/B,YAAY,CAAA,MAAK;AACd,aAAO,EAAE,QAAQ,MAAM,EAAE,YAAA;AAAA,IAC7B,CAAC;AAAA,EAET;AAAA,EAGA,QAAc;AACV,WAAO,KAAK;AACZ,WAAO;AAAA,EACX;AAAA,EACA,cAAc;AACV,UAAM,OAAO,QAAQ;AAAA,MACjB,SAAS,KAAK,QAAA;AAAA,MACd,MAAM,KAAK,KAAA;AAAA,MACX,SAAS,KAAK,QAAA;AAAA,IAAQ,CACzB;AACD,QAAI,KAAK,iBAAiB,MAAM;AAC5B,WAAK,eAAe;AACpB,YAAM,KAAK,SAAS,OAAO,EAAE,SAAS,KAAK,UAAQ,GAAK,KAAK,MAAM;AACnE,SAAG,aAAa,KAAK,QAAA,CAAS,EAAE,KAAK,CAAA,WAAU;AAC3C,eAAO,OAAO,OAAO,CAAA,UAAS,MAAM,MAAM,MAAM,KAAK,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAiB;AAChG,gBAAM,cAAc,CAAC,MAAM,KAAK,aAAa,EAAE,WAAW;AAC1D,gBAAM,cAAc,CAAC,MAAM,KAAK,aAAa,EAAE,WAAW;AAC1D,iBAAO;AAAA,YACH,MAAM;AAAA,YACN,IAAI,KAAK,WAAW,EAAE,YAAA;AAAA,YACtB,cAAc,IAAI,KAAK,cAAc,WAAW,EAAE,gBAAgB;AAAA,YAClE;AAAA,YACA,KAAK,SAAS,MAAM,SAAS;AAAA,YAC7B,MAAM,UAAU,MAAM,IAAI,EAAE,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC;AAAA,YAC3D;AAAA,UAAA;AAAA,QAER,CAAC;AAAA,MACL,CAAC,EAAE,KAAK,CAAA,WAAU;AACd,aACK,KAAK,MAAM,EACX,OAAA;AAAA,MAET,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EAEA,MAAM,SAAS,UAAU;AACrB,UAAM,MAAM,SAAS,QAAQ;AAAA,EACjC;AAAA,EAEA,OAAO,SAAS,SAAS;AACrB,SAAK,YAAA;AACL,UAAM,OAAO,SAAS,OAAO;AAAA,EACjC;AAAA,EAEA,KAAK,SAAS,SAAS;AACnB,UAAM,KAAK,SAAS,OAAO;AAAA,EAC/B;AACJ;AAtEoD;AAA7C,IAAM,aAAN;AAuEP,WAAW,UAAU,UAAU;AAW/B,WAAW,UAAU,QAAQ,WAAW,IAAI,UAAU,wBAAwB;AAC9E,WAAW,UAAU,QAAQ,QAAQ,IAAI,UAAU,aAAa;AAChE,WAAW,UAAU,QAAQ,WAAW;AAAA,EACpC,aAAa;AAAA,IACT,UAAU;AAAA,IACV,YAAY,CAAC,SAAS,UAAU;AAAA,EAAA;AAAA,EAEpC,cAAc;AAAA,IACV,OAAO;AAAA,IACP,YAAY,CAAA;AAAA,EAAC;AAAA,EAEjB,oBAAoB;AAAA,IAChB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,UAAU;AAAA,IACV,YAAY,CAAC,eAAe,aAAa;AAAA,EAAA;AAAA,EAE7C,cAAc;AAAA,IACV,WAAW;AAAA,IACX,cAAc;AAAA,IACd,kBAAkB;AAAA,EAAA;AAAA,EAEtB,iBAAiB;AAAA,IACb,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,EAAA;AAE5B,GAAG,UAAU,mBAAmB;"}
1
+ {"version":3,"file":"index.js","sources":["../src/__package__.ts","../src/ECLArchiveViewer.ts","../src/WUGraphLegend.ts","../src/WUScopeController.ts","../src/WUGraph.ts","../src/WUResultStore.ts","../src/WUResult.ts","../src/WUStatus.ts","../src/WUTimeline.ts"],"sourcesContent":["export const PKG_NAME = \"@hpcc-js/eclwatch\";\nexport const PKG_VERSION = \"3.1.1\";\nexport const BUILD_VERSION = \"3.2.1\";\n","import { Editor } from \"@hpcc-js/codemirror\";\nimport { Workunit } from \"@hpcc-js/comms\";\nimport { SplitPanel } from \"@hpcc-js/phosphor\";\nimport { DirectoryTree } from \"@hpcc-js/tree\";\nimport { hashSum, xml2json } from \"@hpcc-js/util\";\n\nexport class ECLArchiveViewer extends SplitPanel {\n private _prevHash;\n private _contentStr;\n public _directoryPane = new DirectoryTree();\n public _fileEditorPane = new Editor()\n .text(\"\")\n ;\n\n constructor() {\n super(\"horizontal\");\n this._directoryPane.rowClick = (text) => {\n this._fileEditorPane\n .text(text)\n .render()\n ;\n };\n }\n\n protected transformArchiveTreeData(json) {\n const ret = {\n label: json.name,\n children: json._children.map(transformNode).filter(n => n)\n };\n\n if (ret.children && ret.children[0] && ret.children[0].label === \"html\") {\n // must be parsererror\n return {\n label: \"root\",\n children: [\n {\n label: \"error\",\n content: JSON.stringify(ret, null, 4)\n }\n ]\n };\n }\n return ret;\n\n function transformNode(node) {\n const _node: any = {};\n _node.label = node.name + (node[\"$\"] && node[\"$\"].key ? ` (${node[\"$\"].key})` : \"\");\n if (node._children && node._children.length > 0) {\n _node.children = node._children.map(_node => {\n return transformNode(_node);\n })\n .filter(n => n)\n ;\n } else if (typeof node.content === \"string\" && node.content.trim()) {\n _node.content = node.content;\n } else {\n return false;\n }\n return _node;\n }\n }\n\n updateDirectoryPane(contentStr) {\n let json;\n if (contentStr) {\n try {\n json = JSON.parse(contentStr);\n } catch (e) {\n json = xml2json(contentStr);\n }\n }\n if (json) {\n const _data = this.transformArchiveTreeData(json);\n this._directoryPane\n .data(_data)\n .render()\n ;\n }\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this\n .addWidget(this._directoryPane)\n .addWidget(this._fileEditorPane)\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid()\n });\n\n if (this._prevHash !== hash || typeof this._contentStr === \"undefined\") {\n Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid())\n .fetchArchive()\n .then(resp => {\n\n this._contentStr = resp;\n this.updateDirectoryPane(this._contentStr);\n\n this._prevHash = hash;\n });\n } else {\n this.updateDirectoryPane(this._contentStr);\n }\n\n this.relativeSizes([this.directoryWidthRatio(), 1 - this.directoryWidthRatio()]);\n }\n}\nECLArchiveViewer.prototype._class += \" eclwatch_ECLArchiveViewer\";\n\nexport interface ECLArchiveViewer {\n directoryPaneColor(): string;\n directoryPaneColor(_: string): this;\n directoryPaneHoverColor(): string;\n directoryPaneHoverColor(_: string): this;\n fontColor(): string;\n fontColor(_: string): this;\n fontFamily(): string;\n fontFamily(_: string): this;\n fontSize(): number;\n fontSize(_: number): this;\n fileIconSize(): number;\n fileIconSize(_: number): this;\n folderIconOpen(): string;\n folderIconOpen(_: string): this;\n folderIconClosed(): string;\n folderIconClosed(_: string): this;\n textFileIcon(): string;\n textFileIcon(_: string): this;\n codeFileIcon(): string;\n codeFileIcon(_: string): this;\n verticalScroll(): boolean;\n verticalScroll(_: boolean): this;\n directoryWidthRatio(): number;\n directoryWidthRatio(_: number): this;\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n}\nECLArchiveViewer.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nECLArchiveViewer.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nECLArchiveViewer.prototype.publish(\"directoryWidthRatio\", 0.38, \"number\", \"Default directory panel width ratio relative to the full width\");\nECLArchiveViewer.prototype.publish(\"contentString\", null, \"string\", \"XML/JSON archive content string\");\nECLArchiveViewer.prototype.publishProxy(\"directoryPaneColor\", \"_directoryPane\", \"backgroundColor\");\nECLArchiveViewer.prototype.publishProxy(\"directoryPaneHoverColor\", \"_directoryPane\", \"hoverBackgroundColor\");\nECLArchiveViewer.prototype.publishProxy(\"iconSize\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontColor\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontFamily\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"fontSize\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"folderIconOpen\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"folderIconClosed\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"textFileIcon\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"codeFileIcon\", \"_directoryPane\");\nECLArchiveViewer.prototype.publishProxy(\"verticalScroll\", \"_directoryPane\");\n","import { Vertex } from \"@hpcc-js/graph\";\nimport { Legend } from \"@hpcc-js/layout\";\nimport { local as d3Local, select as d3Select } from \"d3-selection\";\n\nimport \"../src/WUGraphLegend.css\";\n\nexport interface WUGraphLegendData {\n kind: number;\n faChar: string;\n label: string;\n count: number;\n}\n\nclass LegendVertex extends Vertex {\n\n constructor() {\n super();\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._icon.on(\"click\", () => {\n this.click(this.data());\n });\n }\n\n click(kind: number) {\n }\n}\n\nexport class WUGraphLegend extends Legend {\n\n private icon = d3Local<Vertex>();\n protected _disabled2: { [kind: number]: boolean } = {\n /* TODO: Default some to disabled?\n 43: true,\n 71: true,\n 82: true,\n 88: true\n */\n };\n\n disabled(): number[];\n disabled(_: number[]): this;\n disabled(_?: number[]): number[] | this {\n if (!arguments.length) {\n const retVal = [];\n for (const key in this._disabled2) {\n if (this._disabled2[key]) {\n retVal.push(key);\n }\n }\n return retVal;\n }\n this._disabled2 = {};\n _.forEach(kind => this._disabled2[kind] = true);\n return this;\n }\n\n toggle(kind: number) {\n this._disabled2[kind] = !this._disabled2[kind];\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const context = this;\n const items = this._g.selectAll(\".legendItem\").data(this.data(), (d: any) => d.kind);\n items.enter().append(\"g\")\n .attr(\"class\", \"legendItem\")\n .each(function (this: HTMLElement, d) {\n context.icon.set(this, new LegendVertex()\n .target(this)\n .data(d.kind)\n .textbox_shape_colorStroke(\"none\")\n .textbox_shape_colorFill(\"none\")\n .iconAnchor(\"left\")\n .faChar(d.faChar)\n .text(`${d.label} (${d.count})`)\n .tooltip(`${d.kind} - ${d.label}`)\n .on(\"click\", kind => {\n context.toggle(kind);\n context.render();\n context.click(kind);\n })\n .on(\"mouseover\", kind => {\n context.mouseover(kind);\n })\n .on(\"mouseout\", kind => {\n context.mouseout(kind);\n })\n );\n })\n .merge(items)\n .each(function (this: HTMLElement, d, i) {\n const bbox = context.icon.get(this)\n .icon_shape_colorFill(context._disabled2[d.kind] ? \"gray\" : null)\n .render().getBBox();\n\n d3Select(this)\n .attr(\"transform\", `translate(${+bbox.width / 2}, ${i * 30})`)\n ;\n })\n ;\n items.exit()\n .each(function (this: HTMLElement, d) {\n context.icon.get(this)\n .target(null)\n .render();\n })\n .remove();\n const bbox = this.getBBox(true, true);\n this._g.attr(\"transform\", `translate(16, ${this.height() / 2 - bbox.height / 2})`);\n }\n\n // Events ---\n click(kind: number) {\n }\n\n mouseover(kind: number) {\n }\n\n mouseout(kind: number) {\n }\n}\nWUGraphLegend.prototype._class += \" eclwatch_WUGraphLegend\";\n","import { Icon } from \"@hpcc-js/common\";\nimport { BaseScope, ScopeEdge, ScopeGraph, ScopeSubgraph, ScopeVertex } from \"@hpcc-js/comms\";\nimport { Edge, IGraphData, Lineage, Subgraph, Vertex } from \"@hpcc-js/graph\";\nimport { Edge as UtilEdge, Subgraph as UtilSubgraph, Vertex as UtilVertex } from \"@hpcc-js/util\";\nimport { WUGraphLegendData } from \"./WUGraphLegend.ts\";\n\nexport type VertexType = Vertex | Icon;\n\nexport interface MyGraphData {\n subgraphs: Subgraph[];\n vertices: VertexType[];\n edges: Edge[];\n hierarchy: Lineage[];\n}\n\nfunction faCharFactory(kind): string {\n switch (kind) {\n case \"2\": return \"\\uf0c7\"; // Disk Write\n case \"3\": return \"\\uf15d\"; // sort\n case \"5\": return \"\\uf0b0\"; // Filter\n case \"6\": return \"\\uf1e0\"; // Split\n case \"12\": return \"\\uf039\"; // First N\n case \"15\": return \"\\uf126\"; // Lightweight Join\n case \"17\": return \"\\uf126\"; // Lookup Join\n case \"22\": return \"\\uf1e6\"; // Pipe Output\n case \"23\": return \"\\uf078\"; // Funnel\n case \"25\": return \"\\uf0ce\"; // Inline Dataset\n case \"26\": return \"\\uf074\"; // distribute\n case \"29\": return \"\\uf005\"; // Store Internal Result\n case \"36\": return \"\\uf128\"; // If\n case \"44\": return \"\\uf0c7\"; // write csv\n case \"47\": return \"\\uf0c7\"; // write\n case \"54\": return \"\\uf013\"; // Workunit Read\n case \"56\": return \"\\uf0c7\"; // Spill\n case \"59\": return \"\\uf126\"; // Merge\n case \"61\": return \"\\uf0c7\"; // write xml\n case \"82\": return \"\\uf1c0\"; // Projected Disk Read Spill\n case \"88\": return \"\\uf1c0\"; // Projected Disk Read Spill\n case \"92\": return \"\\uf129\"; // Limted Index Read\n case \"93\": return \"\\uf129\"; // Limted Index Read\n case \"99\": return \"\\uf1c0\"; // CSV Read\n case \"105\": return \"\\uf1c0\"; // CSV Read\n\n case \"7\": return \"\\uf090\"; // Project\n case \"9\": return \"\\uf0e2\"; // Local Iterate\n case \"16\": return \"\\uf005\"; // Output Internal\n case \"19\": return \"\\uf074\"; // Hash Distribute\n case \"21\": return \"\\uf275\"; // Normalize\n case \"35\": return \"\\uf0c7\"; // CSV Write\n case \"37\": return \"\\uf0c7\"; // Index Write\n case \"71\": return \"\\uf1c0\"; // Disk Read Spill\n case \"133\": return \"\\uf0ce\"; // Inline Dataset\n case \"148\": return \"\\uf0ce\"; // Inline Dataset\n case \"168\": return \"\\uf275\"; // Local Denormalize\n }\n return \"\\uf063\";\n}\n\nexport class WUScopeController {\n private graphDB: ScopeGraph;\n private subgraphsMap: { [id: string]: Subgraph } = {};\n private rSubgraphsMap: { [id: string]: ScopeSubgraph } = {};\n private verticesMap: { [id: string]: VertexType } = {};\n private rVerticesMap: { [id: string]: ScopeVertex } = {};\n private edgesMap: { [id: string]: Edge } = {};\n private rEdgesMap: { [id: string]: ScopeEdge } = {};\n private kindMap: { [id: string]: ScopeVertex[] } = {};\n\n protected _disabled: { [kind: number]: boolean } = {};\n\n constructor() {\n }\n\n clear() {\n this.subgraphsMap = {};\n this.rSubgraphsMap = {};\n this.verticesMap = {};\n this.rVerticesMap = {};\n this.edgesMap = {};\n this.rEdgesMap = {};\n }\n\n set(masterGraph: ScopeGraph) {\n this.graphDB = masterGraph;\n this.graphGui(this.graphDB);\n\n this.kindMap = {};\n this.graphDB.walk(item => {\n if (item instanceof UtilSubgraph) {\n } else if (item instanceof UtilVertex) {\n const kind = item._.attr(\"Kind\").RawValue;\n if (!this.kindMap[kind]) {\n this.kindMap[kind] = [];\n }\n this.kindMap[kind].push(item);\n } else if (item instanceof UtilEdge) {\n }\n });\n }\n\n disabled(): number[];\n disabled(_: number[]): this;\n disabled(_?: number[]): number[] | this {\n if (!arguments.length) {\n const retVal = [];\n for (const key in this._disabled) {\n if (this._disabled[key]) {\n retVal.push(key);\n }\n }\n return retVal;\n }\n this._disabled = {};\n _.forEach(kind => this._disabled[kind] = true);\n return this;\n }\n\n graphGui(graphDB: ScopeGraph): IGraphData {\n const graphGui: MyGraphData = {\n subgraphs: [],\n vertices: [],\n edges: [],\n hierarchy: []\n };\n\n graphDB.walk((item) => {\n if (item instanceof UtilSubgraph) {\n const subgraph = this.appendSubgraph(item, graphGui.hierarchy, graphGui.subgraphs);\n subgraph.showMinMax(item.vertices.length > 3 || subgraph.minState() !== \"normal\");\n } else if (item instanceof UtilVertex) {\n this.appendVertex(item, graphGui.hierarchy, graphGui.vertices);\n } else if (item instanceof UtilEdge) {\n this.appendEdge(item, graphGui.edges);\n }\n });\n\n return graphGui;\n }\n\n format(labelTpl, obj) {\n let retVal = \"\";\n let lpos = labelTpl.indexOf(\"%\");\n let rpos = -1;\n while (lpos >= 0) {\n retVal += labelTpl.substring(rpos + 1, lpos);\n rpos = labelTpl.indexOf(\"%\", lpos + 1);\n if (rpos < 0) {\n console.warn(\"Invalid Label Template\");\n break;\n }\n const key = labelTpl.substring(lpos + 1, rpos);\n retVal += !key ? \"%\" : (obj[labelTpl.substring(lpos + 1, rpos)] || \"\");\n lpos = labelTpl.indexOf(\"%\", rpos + 1);\n }\n retVal += labelTpl.substring(rpos + 1, labelTpl.length);\n return retVal.split(\"\\\\n\").join(\"\\n\");\n }\n\n createSubgraph(subgraph: ScopeSubgraph): Subgraph {\n let sg = this.subgraphsMap[subgraph._.Id];\n if (!sg) {\n sg = new Subgraph()\n .title(subgraph._.Id)\n .on(\"minClick\", () => {\n this.minClick(sg);\n })\n ;\n this.subgraphsMap[subgraph._.Id] = sg;\n this.rSubgraphsMap[sg.id()] = subgraph;\n }\n return sg;\n }\n\n createVertex(vertex: ScopeVertex): VertexType {\n let v = this.verticesMap[vertex._.Id];\n if (!v) {\n const attrs = vertex._.rawAttrs();\n if (vertex._.ScopeType === \"dummy\") {\n const parent = this.subgraphsMap[vertex.parent._.Id];\n v = new Icon()\n .shape_colorFill(\"darkred\")\n .shape_colorStroke(\"darkred\")\n .image_colorFill(\"white\")\n .faChar(\"\\uf067\")\n .on(\"click\", () => {\n parent.minState(\"normal\");\n this.minClick(parent);\n })\n ;\n } else {\n v = new Vertex()\n .icon_shape_colorFill(\"#1f77b4\")\n .icon_image_colorFill(\"white\")\n .faChar(faCharFactory(attrs[\"Kind\"]))\n .text(attrs[\"Label\"])\n ;\n const annotations = [];\n if (vertex._.hasAttr(\"Definition\")) {\n annotations.push({\n faChar: \"\\uf036\",\n tooltip: \"Definition\",\n shape_colorFill: \"lightgray\",\n shape_colorStroke: \"lightgray\",\n image_colorFill: \"black\"\n });\n }\n if (vertex._.hasAttr(\"IsInternal\")) {\n annotations.push({\n faChar: \"\\uf085\",\n tooltip: \"IsInternal\",\n shape_colorFill: \"red\",\n shape_colorStroke: \"red\",\n image_colorFill: \"white\"\n });\n }\n v.annotationIcons(annotations);\n }\n this.verticesMap[vertex._.Id] = v;\n this.rVerticesMap[v.id()] = vertex;\n }\n return v;\n }\n\n isSpill(edge: ScopeEdge): boolean {\n const sourceKind = edge.source._.attr(\"Kind\").RawValue;\n const targetKind = edge.target._.attr(\"Kind\").RawValue;\n return sourceKind === \"2\" || targetKind === \"71\";\n }\n\n spansSubgraph(edge: ScopeEdge): boolean {\n return edge.source.parent._.Id !== edge.target.parent._.Id;\n }\n\n createEdge(edge: ScopeEdge): Edge | undefined {\n let e = this.edgesMap[edge._.Id];\n if (!e) {\n const attrs = edge._.rawAttrs();\n const sourceV = this.verticesMap[edge.source._.Id];\n const targetV = this.verticesMap[edge.target._.Id];\n if (sourceV && targetV) {\n const isSpill = this.isSpill(edge);\n const spansSubgraph = this.spansSubgraph(edge);\n\n const label = this.format(\"%Label%\\n%NumRowsProcessed%\", attrs);\n /* TODO: Add extra annotations once WUDetails is fixed...\n const numSlaves = parseInt(attrs[\"NumSlaves\"]);\n const numStarts = parseInt(attrs[\"NumStarts\"]);\n const numStops = parseInt(attrs[\"NumStops\"]);\n const started = numStarts > 0;\n const finished = numStops === numSlaves;\n const active = started && !finished;\n */\n\n let strokeDasharray = null;\n let weight = 100;\n if (attrs[\"IsDependency\"]) {\n weight = 10;\n strokeDasharray = \"1,5\";\n } else if (attrs[\"_childGraph\"]) {\n strokeDasharray = \"5,5\";\n } else if (isSpill) {\n weight = 25;\n strokeDasharray = \"5,5,10,5\";\n } else if (spansSubgraph) {\n weight = 5;\n strokeDasharray = \"5,5\";\n }\n e = new Edge()\n .sourceVertex(sourceV)\n .targetVertex(targetV)\n .sourceMarker(\"circle\")\n .targetMarker(\"arrow\")\n .weight(weight)\n .strokeDasharray(strokeDasharray)\n .text(label)\n ;\n this.edgesMap[edge._.Id] = e;\n this.rEdgesMap[e.id()] = edge;\n }\n }\n return e;\n }\n\n appendSubgraph(subgraph: ScopeSubgraph, hierarchy: Lineage[], subgraphs: Subgraph[]): Subgraph {\n const sg = this.createSubgraph(subgraph);\n subgraphs.push(sg);\n const parent = this.subgraphsMap[subgraph.parent._.Id];\n if (parent) {\n hierarchy.push({ parent, child: sg });\n }\n return sg;\n }\n\n appendVertex(vertex: ScopeVertex, hierarchy: Lineage[], vertices: VertexType[]): VertexType {\n const v = this.createVertex(vertex);\n vertices.push(v);\n const parent = this.subgraphsMap[vertex.parent._.Id];\n if (parent) {\n hierarchy.push({ parent, child: v });\n }\n return v;\n }\n\n appendEdge(edge: ScopeEdge, edges: Edge[]): Edge {\n const e = this.createEdge(edge);\n if (e) {\n edges.push(e);\n }\n return e;\n }\n\n filterLegend(graphDB: ScopeGraph) {\n for (let i = graphDB.vertices.length - 1; i >= 0; --i) {\n const vertex = graphDB.vertices[i];\n const kind = vertex._.attr(\"Kind\").RawValue;\n if (this._disabled[kind]) {\n vertex.remove(false, (source: BaseScope, target: BaseScope) => {\n return new BaseScope({\n ScopeName: vertex._.ScopeName + \":in\",\n Id: source.Id + \"->\" + target.Id,\n ScopeType: \"dummy-edge\",\n Properties: {\n Property: [vertex._.attr(\"Label\")]\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n });\n }\n }\n }\n\n filterPartial(graphDB: ScopeGraph) {\n for (const subgraph of graphDB.subgraphs) {\n const sg = this.subgraphsMap[subgraph._.Id];\n switch (sg.minState()) {\n case \"partial\":\n const childVertices: ReadonlyArray<ScopeVertex> = subgraph.vertices;\n const vShow: ScopeVertex[] = [];\n const vHide: ScopeVertex[] = [];\n\n for (const vertex of childVertices) {\n if (vertex.inEdges.length === 0 || vertex.inEdges.some(edge => edge.source.parent !== edge.target.parent) ||\n vertex.outEdges.length === 0 || vertex.outEdges.some(edge => edge.source.parent !== edge.target.parent)) {\n vShow.push(vertex);\n } else {\n vHide.push(vertex);\n }\n }\n\n if (vHide.length > 1) {\n const dummyDetails = {\n ScopeName: subgraph._.ScopeName,\n Id: subgraph._.Id + \":dummy\",\n ScopeType: \"dummy\",\n Properties: {\n Property: [{\n Name: \"Activities\",\n RawValue: \"\" + vHide.length,\n Formatted: \"\" + vHide.length,\n Measure: \"count\",\n Creator: \"\",\n CreatorType: \"\"\n }]\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n };\n const dummyScope = new BaseScope(dummyDetails);\n const dummyVertex = subgraph.createVertex(dummyScope);\n\n for (const vertex of vHide) {\n for (const edge of vertex.inEdges) {\n if (vShow.indexOf(edge.source) >= 0) {\n const dummyEdgeScope = new BaseScope({\n ScopeName: edge.source._.ScopeName,\n Id: edge.source._.Id + \"->\" + dummyVertex._.Id,\n ScopeType: \"dummy-in\",\n Properties: {\n Property: []\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n subgraph.createEdge(edge.source, dummyVertex, dummyEdgeScope);\n }\n }\n for (const edge of vertex.outEdges) {\n if (vShow.indexOf(edge.target) >= 0) {\n const dummyEdgeScope = new BaseScope({\n ScopeName: edge.target._.ScopeName,\n Id: dummyVertex._.Id + \"->\" + edge.target._.Id,\n ScopeType: \"dummy-out\",\n Properties: {\n Property: []\n },\n Notes: {\n Note: []\n },\n SinkActivity: \"\"\n });\n subgraph.createEdge(dummyVertex, edge.target, dummyEdgeScope);\n }\n }\n }\n vHide.forEach(vertex => vertex.remove(true));\n }\n break;\n }\n }\n }\n\n filterEmptySubgraphs(graphDB: ScopeGraph) {\n while (true) {\n const emptySubgraphs = graphDB.subgraphs.filter(subgraph => subgraph.subgraphs.length === 0 && subgraph.vertices.length === 0);\n if (emptySubgraphs.length === 0) break;\n emptySubgraphs.forEach(subgraph => subgraph.remove(true));\n }\n }\n\n removeObsoleteSubgraphs(graphDB: ScopeGraph) {\n for (const subgraph of [...graphDB.subgraphs]) {\n if (subgraph.vertices.length === 0) {\n subgraph.remove(false);\n }\n }\n }\n\n graphData(): IGraphData {\n const graphDB = this.graphDB.clone();\n this.filterLegend(graphDB);\n this.filterPartial(graphDB);\n this.filterEmptySubgraphs(graphDB);\n this.removeObsoleteSubgraphs(graphDB);\n return this.graphGui(graphDB);\n }\n\n calcLegend(): WUGraphLegendData[] {\n const retVal: WUGraphLegendData[] = [];\n for (const kind in this.kindMap) {\n retVal.push({\n kind: parseInt(kind),\n faChar: faCharFactory(kind),\n label: this.kindMap[kind][0]._.attr(\"Label\").RawValue.split(\"\\n\")[0],\n count: this.kindMap[kind].length\n });\n }\n return retVal;\n }\n\n vertices(kind: number): VertexType[] {\n const retVal: VertexType[] = [];\n for (const v of this.kindMap[kind]) {\n retVal.push(this.verticesMap[v._.Id]);\n }\n return retVal;\n }\n\n formatRow(item: ScopeEdge | ScopeSubgraph | ScopeVertex, columns, row) {\n const attrs = item._.formattedAttrs();\n for (const key in attrs) {\n const idx = columns.indexOf(key);\n if (idx === -1) {\n columns.push(key);\n row.push(attrs[key]);\n } else {\n row[idx] = attrs[key];\n }\n }\n for (let i = 0; i < 100; ++i) {\n if (row[i] === undefined) {\n row[i] = \"\";\n }\n }\n return row;\n }\n\n activityData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Kind\", \"Label\"];\n const data = this.graphDB.vertices.map(v => {\n const row = [parseInt(v._.Id.split(\"a\")[1])];\n return this.formatRow(v, columns, row);\n });\n return { columns, data };\n }\n\n edgeData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Label\"];\n const data = this.graphDB.edges.map(e => {\n const row = [e._.Id];\n return this.formatRow(e, columns, row);\n });\n return { columns, data };\n }\n\n subgraphData(): { columns: string[], data: any[][] } {\n const columns = [\"Id\", \"Label\"];\n const data = this.graphDB.subgraphs.map(sg => {\n const row = [sg._.Id];\n return this.formatRow(sg, columns, row);\n });\n return { columns, data };\n }\n\n calcGraphTooltip(item: VertexType | Edge) {\n let scope;\n let parentScope;\n if (item instanceof Subgraph) {\n const subgraph = this.rSubgraphsMap[item.id()];\n scope = subgraph._;\n parentScope = subgraph.parent._;\n } else if (item instanceof Vertex || item instanceof Icon) {\n const vertex = this.rVerticesMap[item.id()];\n scope = vertex._;\n parentScope = vertex.parent._;\n } else if (item instanceof Edge) {\n const edge = this.rEdgesMap[item.id()];\n scope = edge._;\n parentScope = edge.parent._;\n }\n if (scope) {\n return scope.calcTooltip(parentScope);\n }\n return \"\";\n }\n\n subgraph(id: string): Subgraph | undefined {\n return this.subgraphsMap[id];\n }\n\n vertex(id: string): VertexType | undefined {\n return this.verticesMap[id];\n }\n\n edge(id: string): Edge {\n return this.edgesMap[id];\n }\n\n // Events ---\n minClick(sg: Subgraph) {\n }\n}\n","import { Button, Spacer, ToggleButton, Widget } from \"@hpcc-js/common\";\nimport { ScopeGraph, Workunit } from \"@hpcc-js/comms\";\nimport { Table } from \"@hpcc-js/dgrid\";\nimport { Graph as GraphWidget, Subgraph, Vertex } from \"@hpcc-js/graph\";\nimport { Carousel, ChartPanel } from \"@hpcc-js/layout\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { WUGraphLegend } from \"./WUGraphLegend.ts\";\nimport { WUScopeController } from \"./WUScopeController.ts\";\n\nimport \"../src/WUGraph.css\";\n\nexport class WUGraph extends ChartPanel {\n\n private _partialAll = new Button().faChar(\"fa-window-restore\").tooltip(\"Partial All\")\n .on(\"click\", () => {\n this.stateClick(this._partialAll);\n });\n\n private _maxAll = new Button().faChar(\"fa-window-maximize\").tooltip(\"Max All\")\n .on(\"click\", () => {\n this.stateClick(this._maxAll);\n });\n\n private _toggleGraph = new ToggleButton().faChar(\"fa-chain\").tooltip(\"Graph\")\n .selected(true)\n .on(\"click\", () => {\n this.viewClick(this._toggleGraph);\n });\n\n private _toggleActivities = new ToggleButton().faChar(\"fa-table\").tooltip(\"Activitiies\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleActivities);\n });\n\n private _toggleEdges = new ToggleButton().faChar(\"fa-table\").tooltip(\"Edges\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleEdges);\n });\n\n private _toggleSubgraphs = new ToggleButton().faChar(\"fa-table\").tooltip(\"Subgraphs\")\n .selected(false)\n .on(\"click\", () => {\n this.viewClick(this._toggleSubgraphs);\n });\n\n protected _graph = new GraphWidget()\n .layout(\"Hierarchy\")\n .applyScaleOnLayout(true)\n .showToolbar(false)\n .allowDragging(false)\n ;\n\n private _activities = new Table()\n .pagination(false)\n ;\n\n private _edges = new Table()\n .pagination(false)\n ;\n\n private _subgraphs = new Table()\n .pagination(false)\n ;\n\n protected _legend = new WUGraphLegend(this)\n .on(\"click\", kind => {\n this.render();\n })\n .on(\"mouseover\", kind => {\n const verticesMap: { [id: string]: boolean } = {};\n for (const vertex of this._gc.vertices(kind)) {\n verticesMap[vertex.id()] = true;\n }\n this._graph.highlightVerticies(verticesMap);\n })\n .on(\"mouseout\", kind => {\n this._graph.highlightVerticies();\n })\n ;\n\n protected _view = new Carousel().widgets([this._graph, this._activities, this._edges, this._subgraphs]);\n\n protected _gc = new WUScopeController();\n\n constructor() {\n super();\n this.topOverlay(false);\n this.widget(this._view);\n const buttons: Widget[] = [\n this._toggleGraph,\n this._toggleActivities,\n this._toggleEdges,\n this._toggleSubgraphs,\n new Spacer(),\n this._partialAll,\n this._maxAll,\n new Spacer(),\n ...this._graph.iconBarButtons(),\n new Spacer()];\n this.buttons(buttons.concat(this.buttons()));\n this._gc.minClick = (sg: Subgraph) => {\n this.loadGraph();\n this._graph.render(w => {\n this._graph\n .selection([sg])\n .centerOnItem(sg)\n ;\n });\n };\n\n this._graph.tooltipHTML((v: Vertex) => {\n return this._gc.calcGraphTooltip(v);\n });\n }\n\n stateClick(sourceB: Button) {\n switch (sourceB) {\n case this._partialAll:\n this._graph.data().subgraphs.forEach((sg: Subgraph) => {\n sg.minState(\"partial\");\n });\n break;\n case this._maxAll:\n this._graph.data().subgraphs.forEach((sg: Subgraph) => {\n sg.minState(\"normal\");\n });\n break;\n }\n this.render();\n }\n\n viewClick(sourceTB: ToggleButton) {\n this._toggleGraph.selected(sourceTB === this._toggleGraph);\n this._toggleActivities.selected(sourceTB === this._toggleActivities);\n this._toggleEdges.selected(sourceTB === this._toggleEdges);\n this._toggleSubgraphs.selected(sourceTB === this._toggleSubgraphs);\n switch (sourceTB) {\n case this._toggleGraph:\n this._view.active(0);\n break;\n case this._toggleActivities:\n this._view.active(1);\n break;\n case this._toggleEdges:\n this._view.active(2);\n break;\n case this._toggleSubgraphs:\n this._view.active(3);\n break;\n }\n this.render(w => {\n });\n }\n\n private _prevHashSum;\n private _prevScopeGraph: ScopeGraph;\n fetchScopeGraph(): Promise<ScopeGraph> {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n graphID: this.graphID(),\n subgraphID: this.subgraphID()\n });\n if (!this._prevScopeGraph || this._prevHashSum !== hash) {\n this.startProgress();\n this._prevHashSum = hash;\n this._gc.clear();\n const wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n return wu.fetchGraphs().then(graphs => {\n for (const graph of graphs) {\n if (graph.Name === this.graphID()) {\n this.finishProgress();\n return graph.fetchScopeGraph(this.subgraphID());\n }\n }\n }).then(scopeGraph => {\n this._prevScopeGraph = scopeGraph;\n return this._prevScopeGraph;\n });\n }\n return Promise.resolve(this._prevScopeGraph);\n }\n\n enter(domNode, _element) {\n super.enter(domNode, _element);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n loadGraph() {\n this._gc.disabled(this._legend.disabled());\n this._graph\n .data(this._gc.graphData(), true)\n ;\n {\n const { columns, data } = this._gc.activityData();\n this._activities\n .columns(columns)\n .data(data)\n ;\n }\n {\n const { columns, data } = this._gc.edgeData();\n this._edges\n .columns(columns)\n .data(data)\n ;\n }\n {\n const { columns, data } = this._gc.subgraphData();\n this._subgraphs\n .columns(columns)\n .data(data)\n ;\n }\n }\n\n render(callback?: (w: Widget) => void): this {\n if (this.wuid() && this.graphID()) {\n this.fetchScopeGraph().then(scopedGraph => {\n this._gc.set(scopedGraph);\n this._legend.data(this._gc.calcLegend());\n this.loadGraph();\n super.render(callback);\n });\n } else {\n super.render(callback);\n }\n return this;\n }\n\n selection(_?) {\n if (!arguments.length) return this._graph.selection();\n const item = this._gc.vertex(_) || this._gc.edge(_) || this._gc.subgraph(_);\n if (item) {\n this._graph.selection([item]);\n }\n return this;\n }\n}\nWUGraph.prototype._class += \" eclwatch_WUGraph\";\n\nexport interface WUGraph {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n graphID(): string;\n graphID(_: string): this;\n subgraphID(): string;\n subgraphID(_: string): this;\n}\n\nWUGraph.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUGraph.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUGraph.prototype.publish(\"graphID\", \"\", \"string\", \"Graph ID\");\nWUGraph.prototype.publish(\"subgraphID\", \"\", \"string\", \"Subgraph ID\");\n","import { Exception, ResultFilter, Result, XSDSchema, XSDXMLNode } from \"@hpcc-js/comms\";\nimport { ColumnType, Deferred, domConstruct, QueryResults, RowFormatter } from \"@hpcc-js/dgrid\";\n\nfunction entitiesEncode(str) {\n return String(str).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\n\nfunction safeEncode(item) {\n switch (Object.prototype.toString.call(item)) {\n case \"[object Undefined]\":\n case \"[object Boolean]\":\n case \"[object Number]\":\n return item;\n case \"[object String]\":\n return entitiesEncode(item);\n default:\n console.warn(\"Unknown cell type: \" + Object.prototype.toString.call(item)); \n }\n return item;\n}\n\nexport class Store {\n protected wuResult: Result;\n protected schema: XSDSchema;\n protected _columns: any[];\n protected _cache: { [key: string]: Promise<{ totalLength: number, data: any[] }> } = {};\n private rowFormatter: RowFormatter;\n protected _filter: ResultFilter = {};\n private onError?: (msg: string) => void;\n\n constructor(wuResult: Result, schema: XSDSchema, renderHtml: boolean, filter: ResultFilter = {}, onError?: (msg: string) => void) {\n this.wuResult = wuResult;\n this.schema = schema;\n this._columns = this.schema2Columns(this.schema.root);\n this.rowFormatter = new RowFormatter(this._columns, renderHtml);\n this._filter = filter;\n this.onError = onError;\n }\n\n columns() {\n return this._columns;\n }\n\n schema2Columns(parentNode: XSDXMLNode, prefix: string = \"\"): ColumnType[] {\n if (!parentNode) return [];\n return parentNode.children().filter(node => node.name.indexOf(\"__hidden\", node.name.length - \"__hidden\".length) === -1).map((node, idx) => {\n const label = node.name;\n const keyed = node.attrs[\"hpcc:keyed\"];\n const column: ColumnType = {\n field: prefix + label,\n leafID: label,\n idx,\n label: label + (keyed ? \" (i)\" : \"\"),\n className: \"resultGridCell\",\n sortable: false,\n width: keyed ? 16 : 0,\n isSet: node.isSet\n };\n const children = this.schema2Columns(node, prefix + label + \"_\");\n if (children.length) {\n column.width += 10 + children.reduce((prev: number, childNode: ColumnType) => {\n return prev + childNode.width!;\n }, 0);\n column.children = children;\n } else {\n column.width += node.charWidth() * 9;\n column.formatter = (cell, row) => {\n switch (typeof cell) {\n case \"string\":\n return {\n html: cell.replace(/\\t/g, \"&nbsp;&nbsp;&nbsp;&nbsp;\").trim()\n };\n case \"undefined\":\n return \"\";\n }\n return cell;\n };\n }\n return column;\n });\n }\n\n isChildDataset(cell) {\n if (Object.prototype.toString.call(cell) !== \"[object Object]\") {\n return false;\n }\n let propCount = 0;\n let firstPropType = null;\n for (const key in cell) {\n if (!firstPropType) {\n firstPropType = Object.prototype.toString.call(cell[key]);\n }\n propCount++;\n }\n return propCount === 1 && firstPropType === \"[object Array]\";\n }\n\n rowToTable(cell, __row, node) {\n if (this.isChildDataset(cell)) { // Don't display \"Row\" as a header ---\n for (const key in cell) {\n this.rowToTable(cell[key], __row, node);\n }\n return;\n }\n\n const table = domConstruct.create(\"table\", { border: 1, cellspacing: 0, width: \"100%\" }, node);\n switch (Object.prototype.toString.call(cell)) {\n case \"[object Object]\":\n let tr = domConstruct.create(\"tr\", null, table);\n for (const key in cell) {\n domConstruct.create(\"th\", { innerHTML: safeEncode(key) }, tr);\n }\n tr = domConstruct.create(\"tr\", null, table);\n for (const key in cell) {\n switch (Object.prototype.toString.call(cell[key])) {\n case \"[object Object]\":\n case \"[object Array]\":\n this.rowToTable(cell[key], __row, node);\n break;\n default:\n domConstruct.create(\"td\", { innerHTML: safeEncode(cell[key]) }, tr);\n break;\n }\n }\n break;\n case \"[object Array]\":\n for (let i = 0; i < cell.length; ++i) {\n switch (Object.prototype.toString.call(cell[i])) {\n case \"[object Boolean]\":\n case \"[object Number]\":\n case \"[object String]\":\n // Item in Scalar ---\n const tr1 = domConstruct.create(\"tr\", null, table);\n domConstruct.create(\"td\", { innerHTML: safeEncode(cell[i]) }, tr1);\n break;\n default:\n // Child Dataset ---\n if (i === 0) {\n const tr2 = domConstruct.create(\"tr\", null, table);\n for (const key in cell[i]) {\n domConstruct.create(\"th\", { innerHTML: safeEncode(key) }, tr2);\n }\n }\n domConstruct.create(\"tr\", null, table);\n for (const key in cell[i]) {\n if (cell[i][key]) {\n if (Object.prototype.toString.call(cell[i][key]) === \"[object Object]\" || Object.prototype.toString.call(cell[i][key]) === \"[object Array]\") {\n const td = domConstruct.create(\"td\", null, tr1);\n this.rowToTable(cell[i][key], cell[i], td);\n } else if (key.indexOf(\"__html\", key.length - \"__html\".length) !== -1) {\n domConstruct.create(\"td\", { innerHTML: cell[i][key] }, tr1);\n } else if (key.indexOf(\"__javascript\", key.length - \"__javascript\".length) !== -1) {\n /*const td = */ domConstruct.create(\"td\", null, tr1);\n // this.injectJavascript(cell[i][key], cell[i], td);\n } else {\n const val = cell[i][key];\n domConstruct.create(\"td\", { innerHTML: safeEncode(val) }, tr1);\n }\n } else {\n domConstruct.create(\"td\", { innerHTML: \"\" }, tr1);\n }\n }\n }\n }\n break;\n }\n }\n\n getIdentity(row) {\n return row.__hpcc_id;\n }\n\n _request(start, end): Promise<{ totalLength: number, data: any[] }> {\n if (!this.wuResult) return Promise.resolve({ totalLength: 0, data: [] });\n const cacheKey = `${start}->${end}`;\n if (this._cache[cacheKey]) return this._cache[cacheKey];\n const retVal = this.wuResult.fetchRows(start, end - start, false, this._filter).then((rows: any[]) => {\n return {\n totalLength: this.wuResult.Total,\n data: rows.map((row, idx) => {\n const formattedRow: any = this.rowFormatter.format(row);\n formattedRow.__hpcc_id = start + idx;\n formattedRow.__hpcc_orig = row;\n return formattedRow;\n })\n };\n }).catch((err: Exception) => {\n this.onError(err.Message || \"An exception has occurred\");\n return { totalLength: 0, data: [] };\n });\n this._cache[cacheKey] = retVal;\n return retVal;\n }\n\n fetchRange(options): Promise<any[]> {\n const retVal = new Deferred();\n this._request(options.start, options.end).then(response => retVal.resolve(response));\n return new QueryResults(retVal.then(response => response.data), {\n totalLength: retVal.then(response => response.totalLength)\n });\n }\n}\n","import { ResultFilter, IOptions, Result } from \"@hpcc-js/comms\";\nimport { Common } from \"@hpcc-js/dgrid\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { Store } from \"./WUResultStore.ts\";\n\nexport class WUResult extends Common {\n\n protected _result: Result;\n protected _localStore: Store;\n\n constructor() {\n super();\n this.renderHtml(false);\n }\n\n hashSum(opts: any = {}) {\n return hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n resultName: this.resultName(),\n sequence: this.sequence(),\n nodeGroup: this.nodeGroup(),\n logicalFile: this.logicalFile(),\n userID: this.user(),\n password: this.password(),\n bypassCache: this.bypassCache(),\n ...opts\n });\n }\n\n protected _prevResultHash: string;\n calcResult(): Result | null {\n const resultHash = this.hashSum();\n if (this._prevResultHash !== resultHash) {\n this._prevResultHash = resultHash;\n\n const opts: IOptions = {\n baseUrl: this.baseUrl(),\n userID: this.user(),\n password: this.password()\n };\n if (this.wuid() && this.resultName()) {\n this._result = Result.attach(opts, this.wuid(), this.resultName());\n } else if (this.wuid() && this.sequence() !== undefined) {\n this._result = Result.attach(opts, this.wuid(), this.sequence());\n } else if (this.logicalFile() && this.nodeGroup()) {\n this._result = Result.attachLogicalFile(opts, this.nodeGroup(), this.logicalFile());\n } else if (this.logicalFile()) {\n this._result = Result.attachLogicalFile(opts, \"\", this.logicalFile());\n }\n\n if (this._result && this.bypassCache()) {\n this._result.bypassCache(this.bypassCache());\n }\n }\n return this._result;\n }\n\n fetch(row, count, abortController = new AbortController()): Promise<object[]> {\n const result = this.calcResult();\n if (result) {\n return result.fetchRows(row, count, false, {}, abortController.signal);\n }\n return Promise.resolve([]);\n }\n\n protected _prevStoreHash: string;\n protected _prevQueryHash: string;\n update(domNode, element) {\n super.update(domNode, element);\n const storeHash = this.hashSum({\n renderHtml: this.renderHtml(),\n filter: this.filter()\n });\n if (this._prevStoreHash !== storeHash) {\n this._prevStoreHash = storeHash;\n const result = this.calcResult();\n if (result) {\n result.fetchXMLSchema().then(schema => {\n this._localStore = new Store(result, schema, this.renderHtml(), this.filter(), (msg) => {\n if (this._dgrid) {\n this._dgrid.noDataMessage = `<span class='dojoxGridNoData'>${msg}</span>`;\n this._dgrid.refresh();\n }\n });\n this._dgrid?.set(\"columns\", this._localStore.columns());\n this._dgrid?.set(\"collection\", this._localStore);\n });\n }\n }\n }\n\n click(row, col, sel) {\n }\n}\nWUResult.prototype._class += \" eclwatch_WUResult\";\n\nexport interface WUResult {\n baseUrl(): string;\n baseUrl(_: string): this;\n user(): string;\n user(_: string): this;\n password(): string;\n password(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n resultName(): string;\n resultName(_: string): this;\n sequence(): number;\n sequence(_: number): this;\n nodeGroup(): string;\n nodeGroup(_: string): this;\n logicalFile(): string;\n logicalFile(_: string): this;\n filter(): ResultFilter;\n filter(_: ResultFilter): this;\n bypassCache(): boolean;\n bypassCache(_: boolean): this;\n}\n\nWUResult.prototype.publish(\"baseUrl\", \"\", \"string\", \"URL to WsWorkunits\");\nWUResult.prototype.publish(\"user\", \"\", \"string\", \"User ID\");\nWUResult.prototype.publish(\"password\", \"\", \"string\", \"Password\");\nWUResult.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUResult.prototype.publish(\"resultName\", \"\", \"string\", \"Result Name\");\nWUResult.prototype.publish(\"sequence\", undefined, \"number\", \"Sequence Number\");\nWUResult.prototype.publish(\"nodeGroup\", \"\", \"string\", \"NodeGroup\");\nWUResult.prototype.publish(\"logicalFile\", \"\", \"string\", \"Logical File Name\");\nWUResult.prototype.publish(\"filter\", {}, \"object\", \"Filter\");\nWUResult.prototype.publish(\"bypassCache\", false, \"boolean\", \"Bypass cached results\");\n","import { Workunit, WUStateID } from \"@hpcc-js/comms\";\nimport { Edge, Graph, Vertex } from \"@hpcc-js/graph\";\nimport { hashSum, IObserverHandle } from \"@hpcc-js/util\";\n\nexport enum STATUS {\n CREATE = \"Created\",\n COMPILE = \"Compiled\",\n EXECUTE = \"Executed\",\n COMPLETE = \"Completed\"\n}\n\nexport enum STATUS_ACTIVE {\n CREATE = \"Creating\",\n COMPILE = \"Compiling\",\n EXECUTE = \"Executing\",\n COMPLETE = \"Completed\"\n}\n\nexport class WUStatus extends Graph {\n\n protected _wu: Workunit;\n protected _wuHandle: IObserverHandle;\n\n protected _create: Vertex;\n protected _compile: Vertex;\n protected _execute: Vertex;\n protected _complete: Vertex;\n\n constructor() {\n super();\n this\n .zoomable(false)\n .zoomToFitLimit(1)\n .layout(\"Hierarchy\")\n .hierarchyRankDirection(\"LR\")\n .showToolbar(false)\n .allowDragging(false)\n ;\n }\n\n private _prevHash;\n attachWorkunit() {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid()\n });\n if (this._prevHash !== hash) {\n this._prevHash = hash;\n this._wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n if (this._wuHandle) {\n this._wuHandle.release();\n }\n this._wuHandle = this._wu.watch(changes => {\n this.lazyRender();\n });\n }\n }\n\n createVertex(faChar: string) {\n return new Vertex()\n .icon_diameter(32)\n .icon_shape_colorFill(\"none\")\n .icon_shape_colorStroke(\"none\")\n .icon_image_colorFill(\"darkgray\")\n .iconAnchor(\"middle\")\n .textbox_shape_colorFill(\"none\")\n .textbox_shape_colorStroke(\"none\")\n .textbox_text_colorFill(\"darkgray\")\n .faChar(faChar)\n ;\n }\n\n updateVertex(vertex: Vertex, color: string) {\n vertex\n .icon_image_colorFill(color)\n .textbox_text_colorFill(color)\n ;\n }\n\n updateVertexStatus(level: 0 | 1 | 2 | 3 | 4, active: boolean = false) {\n const completeColor = this._wu.isFailed() ? \"darkred\" : \"darkgreen\";\n this._create.text(STATUS.CREATE);\n this._compile.text(STATUS.COMPILE);\n this._execute.text(STATUS.EXECUTE);\n this._complete.text(STATUS.COMPLETE);\n switch (level) {\n case 0:\n this.updateVertex(this._create, \"darkgray\");\n this.updateVertex(this._compile, \"darkgray\");\n this.updateVertex(this._execute, \"darkgray\");\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 1:\n this._create.text(STATUS_ACTIVE.CREATE);\n this.updateVertex(this._create, active ? \"orange\" : completeColor);\n this.updateVertex(this._compile, \"darkgray\");\n this.updateVertex(this._execute, \"darkgray\");\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 2:\n this._compile.text(STATUS_ACTIVE.COMPILE);\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, active ? \"orange\" : completeColor);\n this.updateVertex(this._execute, completeColor);\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 3:\n this._execute.text(STATUS_ACTIVE.EXECUTE);\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, completeColor);\n this.updateVertex(this._execute, active ? \"orange\" : completeColor);\n this.updateVertex(this._complete, \"darkgray\");\n break;\n case 4:\n this.updateVertex(this._create, completeColor);\n this.updateVertex(this._compile, completeColor);\n this.updateVertex(this._execute, completeColor);\n this.updateVertex(this._complete, completeColor);\n break;\n }\n }\n\n createEdge(source, target) {\n return new Edge()\n .sourceVertex(source)\n .targetVertex(target)\n .strokeColor(\"black\")\n .showArc(false)\n ;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._create = this.createVertex(\"\\uf11d\");\n this._compile = this.createVertex(\"\\uf085\");\n this._execute = this.createVertex(\"\\uf275\");\n this._complete = this.createVertex(\"\\uf11e\");\n const e1 = this.createEdge(this._create, this._compile);\n const e2 = this.createEdge(this._compile, this._execute);\n const e3 = this.createEdge(this._execute, this._complete);\n this.data({\n vertices: [this._create, this._compile, this._execute, this._complete],\n edges: [e1, e2, e3]\n });\n }\n\n update(domNode, element) {\n this.attachWorkunit();\n switch (this._wu.StateID) {\n case WUStateID.Blocked:\n case WUStateID.Wait:\n case WUStateID.Scheduled:\n case WUStateID.UploadingFiled:\n this.updateVertexStatus(1);\n break;\n case WUStateID.Compiling:\n this.updateVertexStatus(2, true);\n break;\n case WUStateID.Submitted:\n this.updateVertexStatus(1, true);\n break;\n case WUStateID.Compiled:\n this.updateVertexStatus(2);\n break;\n case WUStateID.Aborting:\n case WUStateID.Running:\n this.updateVertexStatus(3, true);\n break;\n case WUStateID.Aborted:\n case WUStateID.Archived:\n case WUStateID.Completed:\n this.updateVertexStatus(4);\n break;\n case WUStateID.Failed:\n this.updateVertexStatus(4, false);\n break;\n case WUStateID.DebugPaused:\n case WUStateID.DebugRunning:\n case WUStateID.Paused:\n case WUStateID.Unknown:\n default:\n this.updateVertexStatus(0);\n break;\n }\n super.update(domNode, element);\n this.zoomToFit();\n }\n\n exit(domNode, element) {\n if (this._wuHandle) {\n this._wuHandle.release();\n }\n super.exit(domNode, element);\n }\n}\nWUStatus.prototype._class += \" eclwatch_WUStatus\";\n\nexport interface WUStatus {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n}\n\nWUStatus.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUStatus.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\n","import { Palette } from \"@hpcc-js/common\";\nimport { Scope, Workunit, WsWorkunits } from \"@hpcc-js/comms\";\nimport { ReactTimelineSeries } from \"@hpcc-js/timeline\";\nimport { hashSum, RecursivePartial } from \"@hpcc-js/util\";\n\nimport \"../src/WUGraph.css\";\n\nconst columns = [\"label\", \"start\", \"end\", \"icon\", \"color\", \"series\"];\n\nexport class WUTimeline extends ReactTimelineSeries {\n\n protected _palette = Palette.ordinal(\"default\");\n\n constructor() {\n super();\n this\n .columns(columns)\n .titleColumn(\"label\")\n .iconColumn(\"icon\")\n .colorColumn(\"color\")\n .seriesColumn(\"series\")\n .timePattern(\"%Y-%m-%dT%H:%M:%S.%LZ\")\n .tickFormat(\"%H:%M\")\n .tooltipTimeFormat(\"%H:%M:%S.%L\")\n .tooltipHTML(d => {\n return d[columns.length].calcTooltip();\n })\n ;\n }\n\n private _prevHashSum;\n clear(): this {\n delete this._prevHashSum;\n return this;\n }\n fetchScopes() {\n const hash = hashSum({\n baseUrl: this.baseUrl(),\n wuid: this.wuid(),\n request: this.request()\n });\n if (this._prevHashSum !== hash) {\n this._prevHashSum = hash;\n const wu = Workunit.attach({ baseUrl: this.baseUrl() }, this.wuid());\n wu.fetchDetails(this.request()).then(scopes => {\n return scopes.filter(scope => scope.Id && scope.attr(\"WhenStarted\").RawValue).map((scope: Scope) => {\n const whenStarted = +scope.attr(\"WhenStarted\").RawValue / 1000;\n const timeElapsed = +scope.attr(\"TimeElapsed\").RawValue / 1000000;\n return [\n scope.Id,\n new Date(whenStarted).toISOString(),\n timeElapsed ? new Date(whenStarted + timeElapsed).toISOString() : undefined,\n null,\n this._palette(scope.ScopeType),\n scope.ScopeName.split(\"::\").join(\":\").split(\":\").slice(0, 1),\n scope\n ];\n });\n }).then(scopes => {\n this\n .data(scopes)\n .render()\n ;\n });\n }\n }\n\n enter(domNode, _element) {\n super.enter(domNode, _element);\n }\n\n update(domNode, element) {\n this.fetchScopes();\n super.update(domNode, element);\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n}\nWUTimeline.prototype._class += \" eclwatch_WUTimeline\";\n\nexport interface WUTimeline {\n baseUrl(): string;\n baseUrl(_: string): this;\n wuid(): string;\n wuid(_: string): this;\n request(): Partial<WsWorkunits.WUDetails>;\n request(_: RecursivePartial<WsWorkunits.WUDetails>): this;\n}\n\nWUTimeline.prototype.publish(\"baseUrl\", \"\", \"string\", \"HPCC Platform Base URL\");\nWUTimeline.prototype.publish(\"wuid\", \"\", \"string\", \"Workunit ID\");\nWUTimeline.prototype.publish(\"request\", {\n ScopeFilter: {\n MaxDepth: 3,\n ScopeTypes: [\"graph\", \"subgraph\"]\n },\n NestedFilter: {\n Depth: 0,\n ScopeTypes: []\n },\n PropertiesToReturn: {\n AllProperties: false,\n AllStatistics: true,\n AllHints: false,\n Properties: [\"WhenStarted\", \"TimeElapsed\"]\n },\n ScopeOptions: {\n IncludeId: true,\n IncludeScope: true,\n IncludeScopeType: true\n },\n PropertyOptions: {\n IncludeName: true,\n IncludeRawValue: true,\n IncludeFormatted: true,\n IncludeMeasure: true,\n IncludeCreator: false,\n IncludeCreatorType: false\n }\n}, \"object\", \"WUDetails Request\");\n"],"names":["_node","d3Local","bbox","d3Select","UtilSubgraph","UtilVertex","UtilEdge","Subgraph","Edge","columns","GraphWidget","STATUS","STATUS_ACTIVE"],"mappings":"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"}