@hpcc-js/util 3.4.6 → 3.4.8
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/LICENSE +43 -43
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +1 -1
- package/dist/index.umd.cjs.map +1 -1
- package/package.json +4 -3
- package/src/__package__.ts +3 -3
- package/src/array.ts +97 -97
- package/src/cache.ts +65 -65
- package/src/debounce.ts +88 -88
- package/src/dictionary.ts +69 -69
- package/src/dispatch.ts +125 -125
- package/src/esp.ts +32 -32
- package/src/graph.ts +353 -353
- package/src/graph2.ts +675 -675
- package/src/hashSum.ts +55 -55
- package/src/immutable.ts +156 -156
- package/src/index.ts +21 -21
- package/src/logging.ts +212 -212
- package/src/math.ts +92 -92
- package/src/object.ts +122 -122
- package/src/observer.ts +91 -91
- package/src/platform.ts +20 -20
- package/src/saxParser.ts +135 -135
- package/src/stack.ts +41 -41
- package/src/stateful.ts +178 -178
- package/src/string.ts +21 -21
- package/src/url.ts +27 -27
- package/src/utf8ToBase64.ts +47 -47
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/__package__.ts","../src/array.ts","../src/hashSum.ts","../src/cache.ts","../src/debounce.ts","../src/dictionary.ts","../src/esp.ts","../src/graph.ts","../src/graph2.ts","../src/immutable.ts","../src/platform.ts","../src/stack.ts","../src/logging.ts","../src/math.ts","../src/object.ts","../src/observer.ts","../src/dispatch.ts","../src/saxParser.ts","../src/stateful.ts","../src/string.ts","../src/url.ts","../src/utf8ToBase64.ts"],"sourcesContent":["export const PKG_NAME = \"__PACKAGE_NAME__\";\nexport const PKG_VERSION = \"__PACKAGE_VERSION__\";\nexport const BUILD_VERSION = \"__BUILD_VERSION__\";\n","// Based on: https://tc39.github.io/ecma262/#sec-array.prototype.find\nexport function find<T>(o: ReadonlyArray<T>, predicate: (value: T, index: number) => boolean) {\n // 1. Let O be ? ToObject(this value).\n if (o == null) {\n throw new TypeError('\"o\" is null or not defined');\n }\n\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n const len = o.length >>> 0;\n\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n if (typeof predicate !== \"function\") {\n throw new TypeError(\"predicate must be a function\");\n }\n\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n const thisArg = arguments[1];\n\n // 5. Let k be 0.\n let k = 0;\n\n // 6. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ! ToString(k).\n // b. Let kValue be ? Get(O, Pk).\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n // d. If testResult is true, return kValue.\n const kValue = o[k];\n if (predicate.call(thisArg, kValue, k)) {\n return kValue;\n }\n // e. Increase k by 1.\n k++;\n }\n\n // 7. Return undefined.\n return undefined;\n}\nexport interface IDifferences2<T> {\n update: T[];\n exit: T[];\n enter: T[];\n}\n\nexport function compare<T>(before: readonly T[], after: readonly T[]): IDifferences2<T> {\n const retVal: IDifferences2<T> = {\n update: [],\n exit: [],\n enter: [...after]\n };\n for (const row of before) {\n const otherIdx = retVal.enter.indexOf(row);\n if (otherIdx >= 0) {\n retVal.update.push(row);\n retVal.enter.splice(otherIdx, 1);\n } else {\n retVal.exit.push(row);\n }\n }\n return retVal;\n}\n\nexport interface IDifferences2<T> {\n enter: T[];\n update: T[];\n exit: T[];\n}\n\nexport function compare2<T>(before: readonly T[], after: readonly T[], idFunc: (itme: T) => string | number, updateFunc: (before: T, after: T) => T = (before, after) => after): IDifferences2<T> {\n const retVal: IDifferences2<T> = {\n update: [],\n exit: [],\n enter: []\n };\n if (before === after) {\n retVal.update = before as T[];\n return retVal;\n }\n const unknownMap: { [key: string]: T } = {};\n after.forEach(item => {\n unknownMap[idFunc(item)] = item;\n });\n for (const row of before) {\n const id = idFunc(row);\n const item = unknownMap[id];\n if (item !== undefined) {\n delete unknownMap[id];\n retVal.update.push(updateFunc(row, item));\n } else {\n retVal.exit.push(row);\n }\n }\n for (const key in unknownMap) {\n retVal.enter.push(unknownMap[key]);\n }\n return retVal;\n}\n","// Ported to TypeScript from: https://github.com/bevacqua/hash-sum\n\nfunction pad(hash: string, len: number): string {\n while (hash.length < len) {\n hash = \"0\" + hash;\n }\n return hash;\n}\n\nfunction fold(hash: number, text: string): number {\n if (text.length === 0) {\n return hash;\n }\n for (let i = 0; i < text.length; ++i) {\n const chr = text.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0;\n }\n return hash < 0 ? hash * -2 : hash;\n}\n\nfunction foldObject(hash: number, o: any, seen: any[]): number {\n if (typeof o.hashSum === \"function\") {\n return o.hashSum();\n }\n return Object.keys(o).sort().reduce((input: any, key: string) => {\n return foldValue(input, o[key], key, seen);\n }, hash);\n}\n\nfunction foldValue(input: number, value: any, key: string, seen: any[]): number {\n const hash = fold(fold(fold(input, key), toString(value)), typeof value);\n if (value === null) {\n return fold(hash, \"null\");\n }\n if (value === undefined) {\n return fold(hash, \"undefined\");\n }\n if (typeof value === \"object\") {\n if (seen.indexOf(value) !== -1) {\n return fold(hash, \"[Circular]\" + key);\n }\n seen.push(value);\n return foldObject(hash, value, seen);\n }\n return fold(hash, value.toString());\n}\n\nfunction toString(o: any): string {\n return Object.prototype.toString.call(o);\n}\n\nexport function hashSum(o: any): string {\n return pad(foldValue(0, o, \"\", []).toString(16), 8);\n}\n","import { hashSum } from \"./hashSum.ts\";\n\nexport class Cache<I, C> {\n private _cache: { [id: string]: C } = {};\n private _calcID: (espObj: I | C) => string;\n\n static hash(...args: any[]) {\n return hashSum({ ...args });\n }\n\n constructor(calcID: (espObj: I | C) => string) {\n this._calcID = calcID;\n }\n\n has(espObj: I): boolean {\n return this._calcID(espObj) in this._cache;\n }\n\n set(obj: C): C {\n this._cache[this._calcID(obj)] = obj;\n return obj;\n }\n\n get(espObj: I): C | null;\n get(espObj: I, factory: () => C): C;\n get(espObj: I, factory?: () => C): C | null {\n const retVal = this._cache[this._calcID(espObj)];\n if (!retVal) {\n return factory ? this.set(factory()) : null;\n }\n return retVal;\n }\n}\n\nexport class AsyncCache<I, C> {\n private _cache: { [id: string]: Promise<C> } = {};\n private _calcID: (espObj: I | C) => string;\n\n static hash(...args: any[]) {\n return hashSum({ ...args });\n }\n\n constructor(calcID: (espObj: I | C) => string) {\n this._calcID = calcID;\n }\n\n has(espObj: I): boolean {\n return this._calcID(espObj) in this._cache;\n }\n\n set(espObj: I, obj: Promise<C>): Promise<C> {\n this._cache[this._calcID(espObj)] = obj;\n return obj;\n }\n\n get(espObj: I): Promise<C | null>;\n get(espObj: I, factory: () => Promise<C>): Promise<C>;\n get(espObj: I, factory?: () => Promise<C>): Promise<C | null> {\n const retVal = this._cache[this._calcID(espObj)];\n if (!retVal) {\n return factory ? this.set(espObj, factory()) : Promise.resolve(null);\n }\n return retVal;\n }\n}\n","import { hashSum } from \"./hashSum.ts\";\n\nexport function debounce<R extends Promise<any>>(fn: () => R, timeout?: number): () => R;\nexport function debounce<P1, R extends Promise<any>>(fn: (param1: P1) => R, timeout?: number): (param1: P1) => R;\nexport function debounce<P1, P2, R extends Promise<any>>(fn: (param1: P1, param2: P2) => R, timeout?: number): (param1: P1, param2: P2) => R;\nexport function debounce<P1, P2, P3, R extends Promise<any>>(fn: (param1: P1, param2: P2, param3: P3) => R, timeout?: number): (param1: P1, param2: P2, param3: P3) => R;\nexport function debounce<P1, P2, P3, P4, R extends Promise<any>>(fn: (param1: P1, param2: P2, param3: P3, param4: P4) => R, timeout?: number): (param1: P1, param2: P2, param3: P3, param4: P4) => R;\nexport function debounce<TParam, R extends Promise<any>>(fn: (...params: TParam[]) => R, timeout?: number): (...params: TParam[]) => R {\n const promises: { [key: string]: { promise: R, clockStart: number } | null } = {};\n\n return (...params) => {\n const hash = hashSum(params);\n if (!promises[hash]) {\n promises[hash] = {\n clockStart: Date.now(),\n promise: fn(...params).then(response => {\n if (timeout === undefined) {\n promises[hash] = null;\n } else {\n setTimeout(() => {\n promises[hash] = null;\n }, Math.max(timeout - (Date.now() - promises[hash]!.clockStart), 0));\n }\n return response;\n }).catch(e => {\n promises[hash] = null;\n throw e;\n }) as R\n };\n }\n return promises[hash]!.promise;\n };\n}\n\nexport function promiseTimeout<T>(ms: number, promise: Promise<T>): Promise<T> {\n let id: any;\n const timeout = new Promise((resolve, reject) => {\n id = setTimeout(() => {\n clearTimeout(id);\n reject(\"Timed out in \" + ms + \"ms.\");\n }, ms);\n });\n\n return Promise.race([\n promise,\n timeout\n ]).then((response: unknown) => {\n clearTimeout(id);\n return response as T;\n }).catch(e => {\n clearTimeout(id);\n throw e;\n });\n}\n\nexport class AsyncOrderedQueue {\n private _q: Array<Promise<any>> = [];\n\n private isTop(p: Promise<any>): boolean {\n return this._q[0] === p;\n }\n\n push<T>(p: Promise<T>): Promise<T> {\n const retVal = p.then(response => {\n if (this.isTop(retVal)) {\n this._q.shift();\n return response;\n }\n return new Promise<T>((resolve, reject) => {\n const intervalHandler = setInterval(() => {\n if (this.isTop(retVal)) {\n clearInterval(intervalHandler);\n this._q.shift();\n resolve(response);\n }\n }, 20);\n });\n });\n this._q.push(retVal);\n return retVal;\n }\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise(resolve => {\n setTimeout(() => resolve(), ms);\n });\n}\n","export type StringAnyMap = { [key: string]: any };\n\nexport class Dictionary<T> {\n private store: { [key: string]: T } = {};\n\n constructor(attrs?: StringAnyMap) {\n if (attrs) {\n for (const key in attrs) {\n this.set(key, attrs[key]);\n }\n }\n }\n\n set(key: string, value: T): T {\n const retVal: T = this.store[key];\n this.store[key] = value;\n return retVal;\n }\n\n get(key: string): T {\n return this.store[key];\n }\n\n has(key: string) {\n return this.store[key] !== undefined;\n }\n\n remove(key: string) {\n delete this.store[key];\n }\n\n keys(): string[] {\n const retVal: string[] = [];\n for (const key in this.store) {\n retVal.push(key);\n }\n return retVal;\n }\n\n values(): T[] {\n const retVal: T[] = [];\n for (const key in this.store) {\n retVal.push(this.store[key]);\n }\n return retVal;\n }\n}\n\nexport class DictionaryNoCase<T> extends Dictionary<T> {\n constructor(attrs?: StringAnyMap) {\n super(attrs);\n }\n\n set(key: string, value: T): T {\n return super.set(key.toLowerCase(), value);\n }\n\n get(key: string): T {\n return super.get(key.toLowerCase());\n }\n\n has(key: string) {\n return super.has(key.toLowerCase());\n }\n\n remove(key: string) {\n return super.remove(key.toLowerCase());\n }\n}\n","export function espTime2Seconds(duration: string): number {\n if (!duration) {\n return 0;\n } else {\n if (!isNaN(Number(duration))) {\n return Number(duration);\n }\n }\n // GH: <n>ns or <m>ms or <s>s or [<d> days ][<h>:][<m>:]<s>[.<ms>]\n const nsIndex = duration.indexOf(\"ns\");\n if (nsIndex !== -1) {\n return parseFloat(duration.substr(0, nsIndex)) / 1000000000;\n }\n const msIndex = duration.indexOf(\"ms\");\n if (msIndex !== -1) {\n return parseFloat(duration.substr(0, msIndex)) / 1000;\n }\n const sIndex = duration.indexOf(\"s\");\n if (sIndex !== -1 && duration.indexOf(\"days\") === -1) {\n return parseFloat(duration.substr(0, sIndex));\n }\n\n const dayTimeParts = duration.split(\" days \");\n const days: number = dayTimeParts.length > 1 ? parseFloat(dayTimeParts[0]) : 0.0;\n const time: string = dayTimeParts.length > 1 ? dayTimeParts[1] : dayTimeParts[0];\n let secs = 0.0;\n const timeParts = time.split(\":\").reverse();\n for (let j = 0; j < timeParts.length; ++j) {\n secs += parseFloat(timeParts[j]) * Math.pow(60, j);\n }\n return (days * 24 * 60 * 60) + secs;\n}\n","export class GraphItem<S, V, E> {\n protected _graph: Graph<S, V, E>;\n readonly parent: Subgraph<S, V, E> | null;\n readonly props: { [key: string]: any } = {};\n\n constructor(graph: Graph<S, V, E>, parent: Subgraph<S, V, E> | null) {\n this._graph = graph;\n this.parent = parent;\n }\n}\n\nexport class Subgraph<S, V, E> extends GraphItem<S, V, E> {\n readonly subgraphs: Array<Subgraph<S, V, E>> = [];\n readonly vertices: Array<Vertex<S, V, E>> = [];\n readonly edges: Array<Edge<S, V, E>> = [];\n readonly _?: S;\n\n constructor(graph: Graph<S, V, E>, parent: Subgraph<S, V, E> | null, _?: S) {\n super(graph, parent);\n if (parent) { // Only needed for dummy root\n parent._addSubgraph(this);\n }\n this._ = _;\n }\n\n remove(full: boolean = true): void {\n this._graph.removeSubgraph(this, full);\n }\n\n createSubgraph(_?: S): Subgraph<S, V, E> {\n return this._graph.createSubgraph(this, _);\n }\n\n _addSubgraph(subgraph: Subgraph<S, V, E>) {\n if (this.subgraphs.indexOf(subgraph) >= 0) {\n throw new Error(\"Subgraph already exists\");\n }\n this.subgraphs.push(subgraph);\n }\n\n _removeSubgraph(subgraph: Subgraph<S, V, E>) {\n const idx = this.subgraphs.indexOf(subgraph);\n if (idx < 0) {\n throw new Error(\"Subgraph does not exist\");\n }\n this.subgraphs.splice(idx, 1);\n }\n\n removeAllSubgraphs() {\n for (let i = this.subgraphs.length - 1; i >= 0; --i) {\n this._graph.removeSubgraph(this.subgraphs[i], true);\n }\n }\n\n createVertex(_?: V): Vertex<S, V, E> {\n return this._graph.createVertex(this, _);\n }\n\n _addVertex(vertex: Vertex<S, V, E>) {\n if (this.vertices.indexOf(vertex) >= 0) {\n throw new Error(\"Vertex already exists\");\n }\n this.vertices.push(vertex);\n }\n\n _removeVertex(vertex: Vertex<S, V, E>) {\n const idx = this.vertices.indexOf(vertex);\n if (idx < 0) {\n throw new Error(\"Vertex does not exist\");\n }\n this.vertices.splice(idx, 1);\n }\n\n removeAllVertices() {\n for (let i = this.vertices.length - 1; i >= 0; --i) {\n this._graph.removeVertex(this.vertices[i], true);\n }\n }\n\n createEdge(source: Vertex<S, V, E>, target: Vertex<S, V, E>, _?: E): Edge<S, V, E> {\n return this._graph.createEdge(this, source, target, _);\n }\n\n _addEdge(edge: Edge<S, V, E>) {\n if (this.edges.indexOf(edge) >= 0) {\n throw new Error(\"Edge already exists\");\n }\n this.edges.push(edge);\n }\n\n _removeEdge(edge: Edge<S, V, E>) {\n const idx = this.edges.indexOf(edge);\n if (idx < 0) {\n throw new Error(\"Edge does not exist\");\n }\n this.edges.splice(idx, 1);\n }\n\n _add(item: Subgraph<S, V, E> | Vertex<S, V, E> | Edge<S, V, E>) {\n if (item instanceof Subgraph) {\n this._addSubgraph(item);\n } else if (item instanceof Vertex) {\n this._addVertex(item);\n } else {\n this._addEdge(item);\n }\n }\n}\n\nexport class Vertex<S, V, E> extends GraphItem<S, V, E> {\n readonly inEdges: Array<Edge<S, V, E>> = [];\n readonly outEdges: Array<Edge<S, V, E>> = [];\n get edges(): ReadonlyArray<Edge<S, V, E>> {\n return [...this.inEdges, ...this.outEdges];\n }\n readonly _?: V;\n\n constructor(graph: Graph<S, V, E>, parent: Subgraph<S, V, E>, _?: V) {\n super(graph, parent);\n parent._addVertex(this);\n this._ = _;\n }\n\n remove(full: boolean = true, _?: (source: V, target: V) => E) {\n return this._graph.removeVertex(this, full, _);\n }\n\n addInEdge(edge: Edge<S, V, E>) {\n this.inEdges.push(edge);\n }\n\n removeInEdge(edge: Edge<S, V, E>) {\n const idx = this.inEdges.indexOf(edge);\n if (idx < 0) {\n throw new Error(\"In edge does not exist\");\n }\n this.inEdges.splice(idx, 1);\n }\n\n addOutEdge(edge: Edge<S, V, E>) {\n this.outEdges.push(edge);\n }\n\n removeOutEdge(edge: Edge<S, V, E>) {\n const idx = this.outEdges.indexOf(edge);\n if (idx < 0) {\n throw new Error(\"Out edge does not exist\");\n }\n this.outEdges.splice(idx, 1);\n }\n}\n\nexport class Edge<S, V, E> extends GraphItem<S, V, E> {\n readonly source: Vertex<S, V, E>;\n readonly target: Vertex<S, V, E>;\n readonly _?: E;\n\n constructor(graph: Graph<S, V, E>, parent: Subgraph<S, V, E>, source: Vertex<S, V, E>, target: Vertex<S, V, E>, _?: E) {\n super(graph, parent);\n if (!source) {\n throw new Error(\"Missing source vertex\");\n }\n if (!target) {\n throw new Error(\"Missing target vertex\");\n }\n parent._addEdge(this);\n this.source = source;\n this.source.addOutEdge(this);\n this.target = target;\n this.target.addInEdge(this);\n this._ = _;\n }\n\n remove(): void {\n this._graph.removeEdge(this);\n }\n}\n\nexport class Graph<S = undefined, V = undefined, E = undefined> {\n readonly root: Subgraph<S, V, E>;\n private _allSubgraphs: Array<Subgraph<S, V, E>> = [];\n private _allSubgraphsMap: { [id: string]: Subgraph<S, V, E> } = {};\n private _allVertices: Array<Vertex<S, V, E>> = [];\n private _allVerticesMap: { [id: string]: Vertex<S, V, E> } = {};\n private _allEdges: Array<Edge<S, V, E>> = [];\n private _allEdgesMap: { [id: string]: Edge<S, V, E> } = {};\n\n idOf: (item: Subgraph<S, V, E> | Vertex<S, V, E> | Edge<S, V, E>) => string;\n\n constructor(idOf: (item: Subgraph<S, V, E> | Vertex<S, V, E> | Edge<S, V, E>) => string = item => \"\" + item._, _?: S) {\n this.root = new Subgraph(this, null, _);\n this.idOf = idOf;\n }\n\n createSubgraph(parent?: Subgraph<S, V, E>, _?: S): Subgraph<S, V, E> {\n const retVal = new Subgraph(this, parent || this.root, _);\n this._allSubgraphs.push(retVal);\n this._allSubgraphsMap[this.idOf(retVal)] = retVal;\n return retVal;\n }\n\n removeSubgraph(subgraph: Subgraph<S, V, E>, full: boolean = true) {\n const idx = this._allSubgraphs.indexOf(subgraph);\n if (idx < 0) {\n throw new Error(\"Subgraph does not exist\");\n }\n this._allSubgraphs.splice(idx, 1);\n delete this._allSubgraphsMap[this.idOf(subgraph)];\n if (subgraph.parent) {\n subgraph.parent._removeSubgraph(subgraph);\n }\n subgraph.edges.forEach(edge => full ? this.removeEdge(edge) : subgraph.parent!._addEdge(edge));\n subgraph.vertices.forEach(vertex => full ? this.removeVertex(vertex, full) : subgraph.parent!._addVertex(vertex));\n subgraph.subgraphs.forEach(childSubgraph => full ? this.removeSubgraph(childSubgraph, full) : subgraph.parent!._addSubgraph(childSubgraph)\n );\n }\n\n get subgraphs(): ReadonlyArray<Subgraph<S, V, E>> {\n return this._allSubgraphs;\n }\n\n subgraph(id: string): Subgraph<S, V, E> {\n return this._allSubgraphsMap[id];\n }\n\n createVertex(parent: Subgraph<S, V, E>, _?: V): Vertex<S, V, E> {\n const retVal = new Vertex(this, parent, _);\n this._allVertices.push(retVal);\n this._allVerticesMap[this.idOf(retVal)] = retVal;\n return retVal;\n }\n\n removeVertex(vertex: Vertex<S, V, E>, full: boolean = true, _?: (source: V, target: V) => E) {\n const idx = this._allVertices.indexOf(vertex);\n if (idx < 0) {\n throw new Error(\"Vertex does not exist\");\n }\n this._allVertices.splice(idx, 1);\n delete this._allVerticesMap[this.idOf(vertex)];\n if (vertex.parent) {\n vertex.parent._removeVertex(vertex);\n }\n if (!full) {\n vertex.inEdges.forEach(inEdge => {\n vertex.outEdges.forEach(outEdge => {\n this.createEdge(this.root, inEdge.source, outEdge.target, _ ? _(inEdge.source._!, outEdge.target._!) : undefined);\n });\n });\n }\n vertex.inEdges.forEach(edge => this.removeEdge(edge));\n vertex.outEdges.forEach(edge => this.removeEdge(edge));\n }\n\n get vertices(): ReadonlyArray<Vertex<S, V, E>> {\n return this._allVertices;\n }\n\n vertex(id: string): Vertex<S, V, E> {\n return this._allVerticesMap[id];\n }\n\n createEdge(parent: Subgraph<S, V, E>, source: Vertex<S, V, E>, target: Vertex<S, V, E>, _?: E): Edge<S, V, E> {\n const retVal = new Edge<S, V, E>(this, parent, source, target, _);\n this._allEdges.push(retVal);\n this._allEdgesMap[this.idOf(retVal)] = retVal;\n return retVal;\n }\n\n removeEdge(edge: Edge<S, V, E>) {\n const idx = this._allEdges.indexOf(edge);\n if (idx < 0) {\n throw new Error(\"Edge does not exist\");\n }\n this._allEdges.splice(idx, 1);\n delete this._allEdgesMap[this.idOf(edge)];\n if (edge.parent) {\n edge.parent._removeEdge(edge);\n }\n edge.source.removeOutEdge(edge);\n edge.target.removeInEdge(edge);\n }\n\n get edges(): ReadonlyArray<Edge<S, V, E>> {\n return this._allEdges;\n }\n\n edge(id: string): Edge<S, V, E> {\n return this._allEdgesMap[id];\n }\n\n private _walk(parent: Subgraph<S, V, E>, visitor: (item: GraphItem<S, V, E>) => \"abort\" | \"stepover\" | void): true | false | void {\n for (const subgraph of parent.subgraphs) {\n switch (visitor(subgraph)) {\n case \"abort\":\n return true;\n case \"stepover\":\n break;\n default:\n if (this._walk(subgraph, visitor)) return true;\n }\n }\n for (const vertex of parent.vertices) {\n if (visitor(vertex) === \"abort\") return true;\n }\n }\n\n walk(visitor: (visitor: GraphItem<S, V, E>) => \"abort\" | \"stepover\" | void) {\n this._walk(this.root, visitor);\n for (const edge of this._allEdges) {\n if (visitor(edge) === \"abort\") return true;\n }\n }\n\n clone(): Graph<S, V, E> {\n const ctor: new (idOf: (item: Subgraph<S, V, E> | Vertex<S, V, E> | Edge<S, V, E>) => string, _?: S) => Graph<S, V, E> = this.constructor as any;\n const retVal = new ctor(this.idOf, this.root._);\n const map = ObjMap();\n map.put(this.root, retVal.root);\n this.walk(item => {\n const parent = map.get(item.parent);\n if (item instanceof Subgraph) {\n map.put(item, parent.createSubgraph(item._));\n } else if (item instanceof Vertex) {\n map.put(item, parent.createVertex(item._));\n } else if (item instanceof Edge) {\n const source = map.get(item.source);\n const target = map.get(item.target);\n parent.createEdge(source, target, item._);\n }\n });\n return retVal;\n }\n}\n\nfunction ObjMap() {\n const keys: any[] = [];\n const values: any[] = [];\n\n return {\n put(key: any, value: any) {\n const index = keys.indexOf(key);\n if (index === -1) {\n keys.push(key);\n values.push(value);\n } else {\n values[index] = value;\n }\n },\n get(key: any) {\n return values[keys.indexOf(key)];\n }\n };\n}\n","import { compare2 } from \"./array.ts\";\n\ntype ID = string | number;\n\nclass GraphItem<T = any> {\n protected _graph: Graph2;\n _: T;\n id(): ID {\n return this._graph.id(this._);\n }\n\n constructor(g: Graph2, _: T) {\n this._graph = g;\n this._ = _;\n }\n}\n\nclass ChildGraphItem<S = any> extends GraphItem<S> {\n\n private _parent: Subgraph | undefined;\n\n constructor(g: Graph2, _: S) {\n super(g, _);\n }\n\n clearParent(): this {\n if (this._parent) {\n this._parent.removeChild(this);\n delete this._parent;\n }\n return this;\n }\n\n parent(): Subgraph | undefined;\n parent(_: Subgraph | undefined): this;\n parent(_?: Subgraph): Subgraph | undefined | this {\n if (arguments.length === 0) return this._parent;\n if (this._parent !== _) {\n if (this._parent) {\n this._parent.removeChild(this);\n }\n this._parent = _;\n if (this._parent) {\n this._parent.addChild(this);\n }\n }\n return this;\n }\n}\n\nclass Subgraph<S = any> extends ChildGraphItem<S> {\n\n private _children: ChildGraphItem[] = [];\n\n constructor(g: Graph2, _: S) {\n super(g, _);\n }\n\n children(): ChildGraphItem[] {\n return this._children;\n }\n\n addChild(_: ChildGraphItem) {\n this._children.push(_);\n }\n\n removeChild(_: ChildGraphItem) {\n this._children = this._children.filter(row => row.id !== _.id);\n }\n}\n\nclass Vertex<V = any> extends ChildGraphItem<V> {\n\n private _inEdges: Edge[] = [];\n private _outEdges: Edge[] = [];\n\n constructor(g: Graph2, _: V) {\n super(g, _);\n }\n\n edges() {\n return [...this._inEdges, ...this._outEdges];\n }\n\n edgeCount() {\n return this._outEdges.length + this._inEdges.length;\n }\n\n inEdges() {\n return this._inEdges;\n }\n\n addInEdge(e: Edge) {\n this._inEdges.push(e);\n }\n\n removeInEdge(id: ID) {\n this._inEdges = this._inEdges.filter(e => e._.id !== id);\n }\n\n outEdges() {\n return this._outEdges;\n }\n\n addOutEdge(e: Edge) {\n this._outEdges.push(e);\n }\n\n removeOutEdge(id: ID) {\n this._outEdges = this._outEdges.filter(e => e._.id !== id);\n }\n}\n\nclass Edge<E = any> extends ChildGraphItem<E> {\n\n _source: Vertex;\n _target: Vertex;\n\n constructor(g: Graph2, _: E, source: Vertex, target: Vertex) {\n super(g, _);\n this._source = source;\n this._target = target;\n }\n}\n\ntype SubgraphMap<T> = { [id: string]: Subgraph<T> };\ntype VertexMap<T> = { [id: string]: Vertex<T> };\ntype EdgeMap<T> = { [id: string]: Edge<T> };\n\nexport type HierarchyFormatter<V, S> = (type: \"subgraph\" | \"vertex\", item: V | S, children?: object[]) => object;\n\nexport class Graph2<V = any, E = any, S = any> {\n\n private _directed: boolean;\n private _subgraphMap: SubgraphMap<S> = {};\n private _vertexMap: VertexMap<V> = {};\n private _edgeMap: EdgeMap<E> = {};\n\n constructor(directed = true) {\n this._directed = directed;\n }\n\n clear(): this {\n this._subgraphMap = {};\n this._vertexMap = {};\n this._edgeMap = {};\n return this;\n }\n\n clearParents(): this {\n for (const key in this._subgraphMap) {\n this._subgraphMap[key].clearParent();\n }\n for (const key in this._vertexMap) {\n this._vertexMap[key].clearParent();\n }\n return this;\n }\n\n isDirected(): boolean {\n return this._directed;\n }\n\n _idFunc = (_: any): ID => typeof _.id === \"function\" ? _.id() : _.id;\n idFunc(_: (_: S | V | E) => ID): this {\n this._idFunc = _;\n return this;\n }\n\n _sourceFunc = (_: any): ID => typeof _.source === \"function\" ? _.source() : _.source;\n sourceFunc(_: (_: E) => ID): this {\n this._sourceFunc = _;\n return this;\n }\n\n _targetFunc = (_: any): ID => typeof _.target === \"function\" ? _.target() : _.target;\n targetFunc(_: (_: E) => ID): this {\n this._targetFunc = _;\n return this;\n }\n\n _updateFunc = (before: S | V | E, after: S | V | E): S | V | E => after;\n updateFunc(_: (before: S | V | E, after: S | V | E) => S | V | E): this {\n this._updateFunc = _;\n return this;\n }\n\n id(_: S | V | E): ID {\n return this._idFunc(_);\n }\n\n type(id: ID): \"S\" | \"V\" | \"E\" | \"\" {\n if (this.subgraphExists(id)) return \"S\";\n if (this.vertexExists(id)) return \"V\";\n if (this.edgeExists(id)) return \"E\";\n return \"\";\n }\n\n isSubgraph(_: S | V | E): _ is S {\n return this.subgraphExists(this.id(_));\n }\n\n isVertex(_: S | V | E): _ is V {\n return this.vertexExists(this.id(_));\n }\n\n isEdge(_: S | V | E): _ is E {\n return this.edgeExists(this.id(_));\n }\n\n allItems(): Array<S | V | E> {\n return [...this.allSubgraphs(), ...this.allVertices(), ...this.allEdges()];\n }\n\n item(id: ID): S | V | E | undefined {\n if (this.subgraphExists(id)) return this.subgraph(id);\n if (this.vertexExists(id)) return this.vertex(id);\n if (this.edgeExists(id)) return this.edge(id);\n return undefined;\n }\n\n itemExists(id: ID): boolean {\n return this.edgeExists(id) || this.vertexExists(id) || this.subgraphExists(id);\n }\n\n // Subgraphs ---\n allSubgraphs(): S[] {\n const retVal: S[] = [];\n for (const key in this._subgraphMap) {\n retVal.push(this._subgraphMap[key]._);\n }\n return retVal;\n }\n\n subgraphs(): S[] {\n const retVal: S[] = [];\n for (const key in this._subgraphMap) {\n if (this._subgraphMap[key].parent() === undefined) {\n retVal.push(this._subgraphMap[key]._);\n }\n }\n return retVal;\n }\n\n subgraphExists(id: ID): boolean {\n return !!this._subgraphMap[id];\n }\n\n subgraph(id: ID): S {\n return this._subgraphMap[id]._;\n }\n\n subgraphSubgraphs(id: ID): S[] {\n return this._subgraphMap[id].children().filter(child => this.isSubgraph(child._)).map(child => child._);\n }\n\n subgraphVertices(id: ID): V[] {\n return this._subgraphMap[id].children().filter(child => this.isVertex(child._)).map(child => child._);\n }\n\n subgraphEdges(id: ID): E[] {\n return this._subgraphMap[id].children().filter(child => this.isEdge(child._)).map(child => child._);\n }\n\n addSubgraph(s: S, parent?: S): this {\n const s_id = this._idFunc(s);\n if (this._subgraphMap[s_id]) throw new Error(`Subgraph '${s_id}' already exists.`);\n const subgraph = new Subgraph(this, s);\n if (parent) {\n const p_id = this._idFunc(parent);\n if (!this._subgraphMap[p_id]) throw new Error(`Subgraph '${p_id}' does not exist.`);\n subgraph.parent(this._subgraphMap[p_id]);\n }\n this._subgraphMap[s_id] = subgraph;\n return this;\n }\n\n mergeSubgraphs(_subgraphs: S[] = []): this {\n const sgDiff = compare2<S>(this.allSubgraphs(), _subgraphs, sg => this._idFunc(sg), this._updateFunc as any);\n sgDiff.exit.forEach(sg => this.removeSubgraph(this._idFunc(sg)));\n sgDiff.enter.forEach(sg => this.addSubgraph(sg));\n sgDiff.update.forEach(sg => this.updateSubgraph(sg));\n return this;\n }\n\n updateSubgraph(sg: S): this {\n const sg_id = this._idFunc(sg);\n const subgraph = this._subgraphMap[sg_id];\n if (!subgraph) throw new Error(`Subgraph '${sg_id}' does not exist.`);\n subgraph._ = sg;\n return this;\n }\n\n removeSubgraph(id: ID, promoteChildren = true): this {\n const sg = this._subgraphMap[id];\n if (!sg) throw new Error(`Subgraph '${id}' does not exist.`);\n sg.children().forEach(child => {\n if (promoteChildren) {\n child.parent(sg.parent());\n } else {\n if (child instanceof Subgraph) {\n this.removeSubgraph(child.id());\n } else {\n this.removeVertex(child.id());\n }\n }\n });\n delete this._subgraphMap[id];\n return this;\n }\n\n subgraphParent(id: ID): S | undefined;\n subgraphParent(id: ID, parentID: ID): this;\n subgraphParent(id: ID, parentID?: ID): S | undefined | this {\n const item = this._subgraphMap[id];\n if (!item) throw new Error(`Subgraph '${id}' does not exist.`);\n if (parentID === void 0) {\n const parent = item.parent();\n return parent ? parent._ as S : undefined;\n }\n const parent = this._subgraphMap[parentID];\n if (!parent) throw new Error(`Vertex parent '${parent}' does not exist.`);\n item.parent(parent);\n return this;\n }\n\n // Vertices ---\n allVertices(): V[] {\n const retVal: V[] = [];\n for (const key in this._vertexMap) {\n retVal.push(this._vertexMap[key]._);\n }\n return retVal;\n }\n\n vertices(): V[] {\n const retVal: V[] = [];\n for (const key in this._vertexMap) {\n if (this._vertexMap[key].parent() === undefined) {\n retVal.push(this._vertexMap[key]._);\n }\n }\n return retVal;\n }\n\n vertexExists(id: ID): boolean {\n return !!this._vertexMap[id];\n }\n\n vertex(id: ID): V {\n return this._vertexMap[id]._;\n }\n\n allEdges(): E[] {\n const retVal: E[] = [];\n for (const key in this._edgeMap) {\n retVal.push(this._edgeMap[key]._);\n }\n return retVal;\n }\n\n edges(): E[] {\n const retVal: E[] = [];\n for (const key in this._edgeMap) {\n if (this._edgeMap[key].parent() === undefined) {\n retVal.push(this._edgeMap[key]._);\n }\n }\n return retVal;\n }\n\n vertexEdges(vertexID: ID): E[] {\n return this._vertexMap[vertexID].edges().map(e => e._);\n }\n\n inEdges(vertexID: ID): E[] {\n return this._vertexMap[vertexID].inEdges().map(e => e._);\n }\n\n outEdges(vertexID: ID): E[] {\n return this._vertexMap[vertexID].outEdges().map(e => e._);\n }\n\n private _neighbors(id: ID): Vertex[] {\n return [...this._vertexMap[id].outEdges().map(e => e._target), ...this._vertexMap[id].inEdges().map(e => e._source)];\n }\n\n neighbors(id: ID): V[] {\n return this._neighbors(id).map(n => n._);\n }\n\n singleNeighbors(id: ID): V[] {\n return this._neighbors(id).filter(n => n.edgeCount() === 1).map(n => n._);\n }\n\n addVertex(v: V, parent?: S): this {\n const v_id = this._idFunc(v);\n if (this._vertexMap[v_id]) throw new Error(`Vertex '${v_id}' already exists.`);\n const vertex = new Vertex(this, v);\n if (parent) {\n const p_id = this._idFunc(parent);\n if (!this.subgraphExists(p_id)) throw new Error(`Subgraph '${p_id}' does not exist.`);\n vertex.parent(this._subgraphMap[p_id]);\n }\n this._vertexMap[v_id] = vertex;\n return this;\n }\n\n mergeVertices(_vertices: V[]): this {\n const vDiff = compare2(this.allVertices(), _vertices, v => this._idFunc(v), this._updateFunc as any);\n vDiff.exit.forEach(v => this.removeVertex(this._idFunc(v)));\n vDiff.enter.forEach(v => this.addVertex(v));\n vDiff.update.forEach(v => this.updateVertex(v));\n return this;\n }\n\n updateVertex(v: V): this {\n const v_id = this._idFunc(v);\n const vertex = this._vertexMap[v_id];\n if (!vertex) throw new Error(`Vertex '${v_id}' does not exist.`);\n vertex._ = v;\n return this;\n }\n\n removeVertex(id: ID): this {\n const v = this._vertexMap[id];\n if (!v) throw new Error(`Vertex '${id}' does not exist.`);\n v.edges().forEach(e => {\n this.removeEdge(e.id());\n });\n delete this._vertexMap[id];\n return this;\n }\n\n vertexParent(id: ID): S | undefined;\n vertexParent(id: ID, parentID: ID): this;\n vertexParent(id: ID, parentID?: ID): S | undefined | this {\n const item = this._vertexMap[id];\n if (!item) throw new Error(`Vertex '${id}' does not exist.`);\n if (parentID === void 0) {\n const parent = item.parent();\n return parent ? parent._ as S : undefined;\n }\n const parent = this._subgraphMap[parentID];\n if (!parent) throw new Error(`Vertex parent '${parent}' does not exist.`);\n item.parent(parent);\n return this;\n }\n\n // Edges ---\n edgeExists(id: ID): boolean {\n return !!this._edgeMap[id];\n }\n\n edge(id: ID): E {\n return this._edgeMap[id]._;\n }\n\n addEdge(e: E, parent?: S): this {\n const e_id = this._idFunc(e);\n const e_source = this._sourceFunc(e);\n const e_target = this._targetFunc(e);\n if (this._edgeMap[e_id]) throw new Error(`Edge '${e_id}' already exists.`);\n if (!this.vertexExists(e_source)) throw new Error(`Edge Source '${e_source}' does not exist.`);\n if (!this.vertexExists(e_target)) throw new Error(`Edge Target '${e_target}' does not exist.`);\n const edge = new Edge(this, e, this._vertexMap[e_source], this._vertexMap[e_target]);\n if (parent) {\n const p_id = this._idFunc(parent);\n if (!this.subgraphExists(p_id)) throw new Error(`Subgraph '${p_id}' does not exist.`);\n edge.parent(this._subgraphMap[p_id]);\n }\n this._edgeMap[e_id] = edge;\n this._vertexMap[e_source].addOutEdge(edge);\n this._vertexMap[e_target].addInEdge(edge);\n return this;\n }\n\n mergeEdges(_edges: E[]): this {\n const eDiff = compare2(this.allEdges(), _edges, e => this._idFunc(e), this._updateFunc as any);\n eDiff.exit.forEach(e => this.removeEdge(this._idFunc(e)));\n eDiff.enter.forEach(e => this.addEdge(e));\n eDiff.update.forEach(e => this.updateEdge(e));\n return this;\n }\n\n updateEdge(e: E): this {\n const e_id = this._idFunc(e);\n const edge = this._edgeMap[e_id];\n if (!edge) throw new Error(`Edge '${e_id}' does not exist.`);\n const old_source = edge._source.id();\n const new_source = this._sourceFunc(e);\n if (old_source !== new_source) {\n this._vertexMap[old_source]?.removeOutEdge(e_id);\n this._vertexMap[new_source]?.addOutEdge(edge);\n }\n const old_target = edge._target.id();\n const new_target = this._targetFunc(e);\n if (old_target !== new_target) {\n this._vertexMap[old_target]?.removeInEdge(e_id);\n this._vertexMap[new_target]?.addInEdge(edge);\n }\n edge._ = e;\n edge._source = this._vertexMap[new_source];\n edge._target = this._vertexMap[new_target];\n return this;\n }\n\n removeEdge(id: ID): this {\n const e: Edge<E> = this._edgeMap[id];\n if (!e) throw new Error(`Edge '${id}' does not exist.`);\n\n const e_sourceID = this._idFunc(e._source._);\n if (!this.vertexExists(e_sourceID)) throw new Error(`Edge Source'${e_sourceID}' does not exist.`);\n this._vertexMap[e_sourceID].removeOutEdge(id);\n\n const e_targetID = this._idFunc(e._target._);\n if (!this.vertexExists(e_targetID)) throw new Error(`Edge Target'${e_targetID}' does not exist.`);\n this._vertexMap[e_targetID].removeInEdge(id);\n\n delete this._edgeMap[id];\n return this;\n }\n\n protected _hwalk(item: Subgraph<S> | Vertex<V>, formatter: HierarchyFormatter<V, S>): object {\n if (item instanceof Subgraph) {\n return formatter(\"subgraph\", item._, item.children().map(child => this._hwalk(child as Subgraph<S> | Vertex<V>, formatter)));\n } else {\n return formatter(\"vertex\", item._);\n }\n }\n\n hierarchy(formatter: HierarchyFormatter<V, S>): object[] {\n const retVal: object[] = [];\n for (const id in this._subgraphMap) {\n const sg = this._subgraphMap[id];\n if (sg.parent() === undefined) {\n retVal.push(this._hwalk(sg, formatter));\n }\n }\n for (const id in this._vertexMap) {\n const v = this._vertexMap[id];\n if (v.parent() === undefined) {\n retVal.push(this._hwalk(v, formatter));\n }\n }\n return retVal;\n }\n\n dijkstra(source: ID, target: ID): { ids: ID[], len: number } {\n const edges = this.allEdges();\n const Q = new Set<string | number>();\n const prev: { [key: string]: string } = {};\n const dist: { [key: string]: number } = {};\n const adj: { [key: string]: { [key: string]: number } } = {};\n\n function vertex_with_min_dist(Q: Set<string | number>, dist: { [key: string]: number }) {\n let min_distance = Infinity;\n let u: string | number | null = null;\n\n Q.forEach(v => {\n if (dist[v] < min_distance) {\n min_distance = dist[v];\n u = v;\n }\n });\n return u;\n }\n\n for (let i = 0; i < edges.length; i++) {\n const v1 = this._sourceFunc(edges[i]);\n const v2 = this._targetFunc(edges[i]);\n const len = 1;\n\n Q.add(v1);\n Q.add(v2);\n\n dist[v1] = Infinity;\n dist[v2] = Infinity;\n\n if (adj[v1] === undefined) adj[v1] = {};\n if (adj[v2] === undefined) adj[v2] = {};\n\n adj[v1][v2] = len;\n adj[v2][v1] = len;\n }\n\n dist[source] = 0;\n\n while (Q.size) {\n const u = vertex_with_min_dist(Q, dist);\n if (u === null) break;\n const neighbors = Object.keys(adj[u]).filter(v => Q.has(v)); // Neighbor still in Q\n\n Q.delete(u);\n\n if (u === target) break; // Break when the target has been found\n\n for (const v of neighbors) {\n const alt = dist[u] + adj[u][v];\n if (alt < dist[v]) {\n dist[v] = alt;\n prev[v] = u;\n }\n }\n }\n\n let u = target;\n const ids = [u];\n let len = 0;\n\n while (prev[u] !== undefined) {\n ids.unshift(prev[u]);\n len += adj[u][prev[u]];\n u = prev[u];\n }\n return { ids, len };\n }\n\n sort(v_id?: string): V[] {\n const retVal: V[] = [];\n const visited: { [id: string]: boolean } = {};\n\n const visit = (vertex: Vertex<V>, ancestors: Vertex<V>[] = []) => {\n const v_id = vertex.id();\n if (visited[v_id]) return;\n visited[v_id] = true;\n ancestors.push(vertex);\n vertex.outEdges().forEach(e => {\n if (ancestors.indexOf(e._target) < 0) {\n visit(e._target, [...ancestors]);\n }\n });\n retVal.unshift(vertex._);\n };\n\n if (v_id) {\n visit(this._vertexMap[v_id]);\n } else {\n for (const key in this._vertexMap) {\n visit(this._vertexMap[key]);\n }\n }\n\n return retVal;\n }\n}\n\nclass Set<T> {\n\n private _content: T[] = [];\n get size(): number {\n return this._content.length;\n }\n\n has(_: T) {\n return this._content.indexOf(_) >= 0;\n }\n\n add(_: T) {\n if (!this.has(_)) {\n this._content.push(_);\n }\n }\n\n delete(_: T) {\n const idx = this._content.indexOf(_);\n if (idx >= 0) {\n this._content.splice(idx, 1);\n }\n }\n\n forEach(_: (value: T, index: number, array: T[]) => void) {\n this._content.forEach(_);\n }\n}\n","const isArray = Array.isArray;\nconst keyList = Object.keys;\nconst hasProp = Object.prototype.hasOwnProperty;\n\nexport function verboseDeepEquals(a: any, b: any, functionRefCompare: boolean = false) {\n if (a === b) return true;\n\n if (a && b) {\n if (typeof a === \"object\" && typeof b === \"object\") {\n const arrA = isArray(a);\n const arrB = isArray(b);\n let i;\n let length;\n let key;\n\n if (arrA && arrB) {\n length = a.length;\n if (length !== b.length) {\n console.warn(`lengths not equal: ${length} !== ${b.length}`);\n return false;\n }\n for (i = length; i-- !== 0;)\n if (!verboseDeepEquals(a[i], b[i], functionRefCompare)) {\n return false;\n }\n return true;\n }\n\n if (arrA !== arrB) {\n console.warn(`arrays not equal: ${arrA} !== ${arrB}`);\n return false;\n }\n\n const dateA = a instanceof Date;\n const dateB = b instanceof Date;\n if (dateA !== dateB) {\n console.warn(`dates not equal: ${dateA} !== ${dateB}`);\n return false;\n }\n if (dateA && dateB) {\n const retVal = a.getTime() === b.getTime();\n if (!retVal) {\n console.warn(`dates not equal: ${a.getTime()} !== ${b.getTime()}`);\n }\n return retVal;\n }\n\n const regexpA = a instanceof RegExp;\n const regexpB = b instanceof RegExp;\n if (regexpA !== regexpB) {\n console.warn(`regexps not equal: ${regexpA} !== ${regexpB}`);\n return false;\n }\n if (regexpA && regexpB) {\n const retVal = a.toString() === b.toString();\n if (!retVal) {\n console.warn(`regexps not equal: ${a.toString()} !== ${b.toString()}`);\n }\n return retVal;\n }\n\n const keys = keyList(a);\n length = keys.length;\n\n if (length !== keyList(b).length) {\n console.warn(`key lengths not equal: ${length} !== ${keyList(b).length}`);\n return false;\n }\n\n for (i = length; i-- !== 0;)\n if (!hasProp.call(b, keys[i])) {\n console.warn(`${keys[i]} in a but not b`);\n return false;\n }\n\n for (i = length; i-- !== 0;) {\n key = keys[i];\n if (!verboseDeepEquals(a[key], b[key], functionRefCompare)) {\n return false;\n }\n }\n\n return true;\n } else if (!functionRefCompare && typeof a === \"function\" && typeof b === \"function\") {\n const retVal = a.toString() === b.toString();\n if (!retVal) {\n console.warn(`functions not equal: ${a.toString()} !== ${b.toString()}`);\n }\n return retVal;\n }\n }\n\n const retVal = a !== a && b !== b;\n if (!retVal) {\n console.warn(`values not equal: ${a} !== ${b}`);\n }\n return retVal;\n}\n\nexport function deepEquals(a: any, b: any, functionRefCompare: boolean = false) {\n if (a === b) return true;\n\n if (a && b) {\n if (typeof a === \"object\" && typeof b === \"object\") {\n const arrA = isArray(a);\n const arrB = isArray(b);\n let i;\n let length;\n let key;\n\n if (arrA && arrB) {\n length = a.length;\n if (length !== b.length) return false;\n for (i = length; i-- !== 0;)\n if (!deepEquals(a[i], b[i], functionRefCompare)) return false;\n return true;\n }\n\n if (arrA !== arrB) return false;\n\n const dateA = a instanceof Date;\n const dateB = b instanceof Date;\n if (dateA !== dateB) return false;\n if (dateA && dateB) return a.getTime() === b.getTime();\n\n const regexpA = a instanceof RegExp;\n const regexpB = b instanceof RegExp;\n if (regexpA !== regexpB) return false;\n if (regexpA && regexpB) return a.toString() === b.toString();\n\n const keys = keyList(a);\n length = keys.length;\n\n if (length !== keyList(b).length)\n return false;\n\n for (i = length; i-- !== 0;)\n if (!hasProp.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n key = keys[i];\n if (!deepEquals(a[key], b[key], functionRefCompare)) return false;\n }\n\n return true;\n } else if (!functionRefCompare && typeof a === \"function\" && typeof b === \"function\") {\n return a.toString() === b.toString();\n }\n }\n\n return a !== a && b !== b;\n}\n\nexport function update<T>(origItem: T, newItem: T, functionRefCompare: boolean = false): T {\n return deepEquals(origItem, newItem, functionRefCompare) ? origItem : newItem;\n}\n","declare const process: any;\n\nexport const root: any = typeof globalThis !== \"undefined\" ? globalThis : window;\nexport const isBrowser: boolean = typeof window !== \"undefined\" && root === window;\nexport const isNode: boolean = typeof process !== \"undefined\" && process.versions != null && process.versions.node != null;\nexport const isCI: boolean = isNode && process.env != null && (process.env.TRAVIS != null || process.env.GITHUB_ACTIONS != null || process.env.CI != null);\n\nexport function getScriptSrc(partial: string) {\n const scripts = document.scripts || [];\n for (let i = document.scripts.length - 1; i >= 0; --i) {\n const script = scripts[i];\n if (script.src) {\n const idx = script.src.indexOf(partial);\n if (idx >= 0) {\n return script.src.substring(0, idx);\n }\n }\n }\n return \"\";\n}\n","/**\n * A generic Stack\n */\nexport class Stack<T> {\n private stack: T[] = [];\n\n /**\n * Push element onto the stack\n *\n * @param e - element to push\n */\n push(e: T) {\n this.stack.push(e);\n return e;\n }\n\n /**\n * Pop element off the stack\n */\n pop(): T | undefined {\n return this.stack.pop();\n }\n\n /**\n * Top item on the stack\n *\n * @returns Top element on the stack\n */\n top(): T | undefined {\n return this.stack.length ? this.stack[this.stack.length - 1] : undefined;\n }\n\n /**\n * Depth of stack\n *\n * @returns Depth\n */\n depth(): number {\n return this.stack.length;\n }\n}\n","/* eslint-disable no-console */\nimport { isNode } from \"./platform.ts\";\nimport { Stack } from \"./stack.ts\";\n\nexport enum Level {\n debug,\n info,\n notice,\n warning,\n error,\n critical,\n alert,\n emergency\n}\n\nconst colours: { [key: string]: string } = {\n debug: \"cyan\",\n info: \"green\",\n notice: \"grey\",\n warning: \"blue\",\n error: \"red\",\n critical: \"magenta\",\n alert: \"magenta\",\n emergency: \"magenta\"\n};\n\nexport interface Writer {\n write?(dateTime: string, level: Level, id: string, msg: string): void;\n rawWrite?(dateTime: string, level: Level, id: string, msg: string | object): void;\n}\n\nclass ConsoleWriter implements Writer {\n write(dateTime: string, level: Level, id: string, msg: string) {\n if (isNode) {\n console.log(`[${dateTime}] ${Level[level].toUpperCase()} ${id}: ${msg}`);\n } else {\n console.log(`[${dateTime}] %c${Level[level].toUpperCase()}%c ${id}: ${msg}`, `color:${colours[Level[level]]}`, \"\");\n }\n }\n}\n\nexport class Logging {\n private static _instance: Logging;\n private _levelStack = new Stack<Level>();\n private _level = Level.info;\n private _filter: string = \"\";\n private _writer: Writer = new ConsoleWriter();\n\n public static Instance() {\n return this._instance || (this._instance = new this());\n }\n\n private constructor() {\n }\n\n private stringify(obj: object): string {\n const cache: any[] = [];\n return JSON.stringify(obj, function (_key, value) {\n if (typeof value === \"object\" && value !== null) {\n if (cache.indexOf(value) !== -1) {\n return;\n }\n cache.push(value);\n }\n return value;\n }, 2);\n }\n\n writer(): Writer;\n writer(_: Writer): Logging;\n writer(_?: Writer): Writer | Logging {\n if (_ === void 0) return this._writer;\n this._writer = _;\n return this;\n }\n\n log(level: Level, id: string, msg: string | object) {\n if (level < this._level) return;\n if (this._filter && this._filter !== id) return;\n\n const dateTime = new Date().toISOString();\n\n if (this._writer.rawWrite) {\n this._writer.rawWrite(dateTime, level, id, msg);\n } else {\n if (typeof msg !== \"string\") {\n msg = this.stringify(msg);\n }\n\n if (this._writer.write) {\n this._writer.write(dateTime, level, id, msg);\n }\n }\n }\n\n debug(id: string, msg: string | object) {\n this.log(Level.debug, id, msg);\n }\n\n info(id: string, msg: string | object) {\n this.log(Level.info, id, msg);\n }\n\n notice(id: string, msg: string | object) {\n this.log(Level.notice, id, msg);\n }\n\n warning(id: string, msg: string | object) {\n this.log(Level.warning, id, msg);\n }\n\n error(id: string, msg: string | object) {\n this.log(Level.error, id, msg);\n }\n\n critical(id: string, msg: string | object) {\n this.log(Level.critical, id, msg);\n }\n\n alert(id: string, msg: string | object) {\n this.log(Level.alert, id, msg);\n }\n\n emergency(id: string, msg: string | object) {\n this.log(Level.emergency, id, msg);\n }\n\n level(): Level;\n level(_: Level): this;\n level(_?: Level): Level | this {\n if (_ === void 0) return this._level;\n this._level = _;\n return this;\n }\n\n pushLevel(_: Level): this {\n this._levelStack.push(this._level);\n this._level = _;\n return this;\n }\n\n popLevel(): this {\n this._level = this._levelStack.pop()!;\n return this;\n }\n\n filter(): string;\n filter(_: string): this;\n filter(_?: string): string | this {\n if (_ === void 0) return this._filter;\n this._filter = _;\n return this;\n }\n}\nexport const logger = Logging.Instance();\n\nexport class ScopedLogging {\n protected _scopeID: string;\n\n constructor(scopeID: string) {\n this._scopeID = scopeID;\n }\n\n debug(msg: string | object) {\n logger.debug(this._scopeID, msg);\n }\n\n info(msg: string | object) {\n logger.info(this._scopeID, msg);\n }\n\n notice(msg: string | object) {\n logger.notice(this._scopeID, msg);\n }\n\n warning(msg: string | object) {\n logger.warning(this._scopeID, msg);\n }\n\n error(msg: string | object) {\n logger.error(this._scopeID, msg);\n }\n\n critical(msg: string | object) {\n logger.critical(this._scopeID, msg);\n }\n\n alert(msg: string | object) {\n logger.alert(this._scopeID, msg);\n }\n\n emergency(msg: string | object) {\n logger.emergency(this._scopeID, msg);\n }\n\n pushLevel(_: Level): this {\n logger.pushLevel(_);\n return this;\n }\n\n popLevel(): this {\n logger.popLevel();\n return this;\n }\n}\n\nexport function scopedLogger(scopeID: string, filter: boolean = false) {\n if (filter) {\n logger.filter(scopeID);\n }\n return new ScopedLogging(scopeID);\n}\n","/**\n * degreesToRadians - converts degrees to radians\n * Usage: degreesToRadians(1080);\n *\n * @param degrees\n * @returns Number radians\n */\nexport function degreesToRadians(degrees: number): number {\n return degrees * (Math.PI / 180);\n}\n\n/**\n * radiansToDegrees - converts radians to degrees\n * Usage: radiansToDegrees(7);\n *\n * @param radians\n * @returns Number degreees\n */\nexport function radiansToDegrees(radians: number): number {\n return radians * (180 / Math.PI);\n}\n\n/**\n * polarToCartesian - converts (r, theta) to {x, y}\n * Usage: polarToCartesian(5, Math.PI);\n *\n * @param r radius\n * @param theta angle in radians\n * @returns { x: number, y: number }\n */\nexport function polarToCartesian(r: number, theta: number): { x:number, y:number } {\n return {\n x: r * Math.cos(theta),\n y: r * Math.sin(theta)\n };\n}\n\n/**\n * cartesianToPolar - converts (x, y) to {r, theta}\n * Usage: cartesianToPolar(100, 200);\n *\n * @param x\n * @param y\n * @returns { r: number, theta: number }\n */\nexport function cartesianToPolar(x: number, y: number): { r: number, theta: number } {\n return {\n r: Math.sqrt(x * x + y * y),\n theta: Math.atan2(y, x)\n };\n}\n\n/**\n * normalizeRadians - normalizes a radian value to within the provided range\n * Usage: normalizeRadians(7);\n *\n * @param radians value to be normalized\n * @param min lower limit\n * @param max upper limit\n * @returns Number normalized to within the provided range\n */\nexport function normalizeRadians(radians: number, min: number = -Math.PI, max: number = Math.PI): number {\n return normalize(radians, min, max);\n}\n\n/**\n * normalizeDegrees - normalizes a degree value to within the provided range\n * Usage: normalizeDegrees(1080);\n *\n * @param degrees value to be normalized\n * @param min lower limit\n * @param max upper limit\n * @returns Number normalized to within the provided range\n */\nexport function normalizeDegrees(degrees: number, min: number = -180, max: number = 180): number {\n return normalize(degrees, min, max);\n}\n\n/**\n * normalize - normalizes a value to within the provided range\n * Usage: normalize(1000, 0, 365);\n *\n * @param value value to be normalized\n * @param min lower limit\n * @param max upper limit\n * @returns Number normalized to within the provided range\n */\nexport function normalize(value: number, min: number, max: number): number {\n const spread = max - min;\n const offsetValue = value - min;\n return (offsetValue - (Math.floor(offsetValue / spread) * spread)) + min;\n}\n","export type RecursivePartial<T> = {\n [P in keyof T]?: T[P] extends (infer U)[] ? RecursivePartial<U>[] :\n T[P] extends object | undefined ? RecursivePartial<T[P]> : T[P];\n};\n\n/**\n * inner - return inner property of Object\n * Usage: inner(\"some.prop.to.locate\", obj);\n *\n * @param prop - property to locate\n * @param obj - object to locate property in\n */\nexport function inner(prop: string, obj: any): any {\n if (prop === void 0 || obj === void 0) return void 0;\n for (const item of prop.split(\".\")) {\n if (!obj.hasOwnProperty(item)) {\n return undefined;\n }\n obj = obj[item];\n }\n return obj;\n}\n\n/**\n * exists - return true if inner property of Object exists\n * Usage: exists(\"some.prop.to.locate\", obj);\n *\n * @param prop - property to locate\n * @param obj - object to locate property in\n */\nexport function exists(prop: string, obj: any): boolean {\n return inner(prop, obj) !== undefined;\n}\n\nfunction _mixin(dest: any, source: any): any {\n const empty: any = {};\n for (const key in source) {\n if (!source.hasOwnProperty(key)) continue;\n if (key === \"__proto__\" || key === \"constructor\") continue;\n let s: any = source[key];\n if (s instanceof Array) {\n // TODO: Do we need to support arrays?\n } else if (typeof s === \"object\") {\n s = deepMixin(dest[key], s);\n }\n if (!(key in dest) || (dest[key] !== s && (!(key in empty) || empty[key] !== s))) {\n dest[key] = s;\n }\n }\n return dest;\n}\n\n/**\n * deepMixin - combine several objects from right to left\n * Usage: deepMixin({a: \"a\"}, {b: \"b\"});\n *\n * @param dest - target object to mix into.\n * @param sources - objects to mix in\n */\nexport function deepMixin(dest: any = {}, ...sources: any[]): any {\n if (typeof dest !== \"object\") throw new Error(`Destination \"${dest}\" must be an object.`);\n for (const source of sources) {\n _mixin(dest, source);\n }\n return dest;\n}\n\n/**\n * deepMixinT - combine several objects of Partial<T> from right to left\n * Usage: deepMixinT<MyInterface>({a: \"a\"}, {b: \"b\"});\n *\n * Note: Only provided as a convenience, so user gets auto completion based on destination type.\n *\n * @param dest - target object to mix into.\n * @param sources - objects to mix in\n */\nexport function deepMixinT<T>(dest: RecursivePartial<T> = {}, ...sources: Array<RecursivePartial<T>>): T {\n return deepMixin(dest, ...sources);\n}\n\n/**\n * safeStingify - JSONsimilar to .stringify, except ignores circular references.\n * Usage: safeStingify(object);\n *\n * @param obj - any object.\n */\nexport function safeStringify(obj: object) {\n const cache: any[] = [];\n return JSON.stringify(obj, function (key, value) {\n if (typeof value === \"object\" && value !== null) {\n if (cache.indexOf(value) !== -1) {\n return;\n }\n\n cache.push(value);\n }\n return value;\n });\n}\n\nexport function isArray(arg: any): arg is any[] {\n if (Array.isArray !== undefined) {\n return Array.isArray(arg);\n }\n return Object.prototype.toString.call(arg) === \"[object Array]\";\n}\n\nexport interface ClassMeta {\n module: string;\n file: string;\n class: string;\n}\n\nexport function classID2Meta(classID: string): ClassMeta {\n const info = classID.split(\"_\");\n const classInfo = info[1].split(\".\");\n return {\n module: `@hpcc-js/${info[0]}`,\n file: classInfo[0],\n class: classInfo[1] || classInfo[0]\n };\n}\n","/**\n * IObserverHandle - Reference to an observing instance\n */\nexport interface IObserverHandle {\n release(): void;\n unwatch(): void;\n}\n\nexport type CallbackFunction = (...args: any[]) => void;\n\nclass ObserverHandle<T extends string> implements IObserverHandle {\n private eventTarget: Observable<T>;\n private eventID: T;\n private callback: CallbackFunction;\n\n constructor(eventTarget: Observable<T>, eventID: T, callback: CallbackFunction) {\n this.eventTarget = eventTarget;\n this.eventID = eventID;\n this.callback = callback;\n }\n\n release() {\n this.eventTarget.removeObserver(this.eventID, this.callback);\n }\n\n unwatch() {\n this.release();\n }\n}\n\nexport type EventID = string;\nexport class Observable<T extends EventID> {\n private _eventObservers: { [eventID: string]: CallbackFunction[] } = {};\n\n constructor(...events: T[]) {\n }\n\n addObserver(eventID: T, callback: CallbackFunction): IObserverHandle {\n let eventObservers: CallbackFunction[] = this._eventObservers[eventID];\n if (!eventObservers) {\n eventObservers = [];\n this._eventObservers[eventID] = eventObservers;\n }\n eventObservers.push(callback);\n return new ObserverHandle<T>(this, eventID, callback);\n }\n\n removeObserver(eventID: T, callback: CallbackFunction): this {\n const eventObservers = this._eventObservers[eventID];\n if (eventObservers) {\n for (let i = eventObservers.length - 1; i >= 0; --i) {\n if (eventObservers[i] === callback) {\n eventObservers.splice(i, 1);\n }\n }\n }\n return this;\n }\n\n dispatchEvent(eventID: T, ...args: any[]): this {\n const eventObservers = this._eventObservers[eventID];\n if (eventObservers) {\n for (const observer of eventObservers) {\n observer(...args);\n }\n }\n return this;\n }\n\n private _hasObserver(eventID: string): boolean {\n const eventObservers = this._eventObservers[eventID];\n for (const observer in eventObservers) {\n if (eventObservers[observer]) {\n return true;\n }\n }\n return false;\n }\n\n hasObserver(_eventID?: T): boolean {\n if (_eventID !== void 0) {\n return this._hasObserver(_eventID);\n }\n for (const eventID in this._eventObservers) {\n if (this._hasObserver(eventID)) {\n return true;\n }\n }\n return false;\n }\n}\n","import type { IObserverHandle } from \"./observer.ts\";\nimport { root } from \"./platform.ts\";\n\nexport type RequestAnimationFrame = (callback: FrameRequestCallback) => number | undefined;\nexport type CancelAnimationFrame = (handle: number) => void | undefined;\n\nlet requestAnimationFrame: RequestAnimationFrame;\n// let cancelAnimationFrame: CancelAnimationFrame;\n\n(function () {\n if (root.requestAnimationFrame) {\n requestAnimationFrame = root.requestAnimationFrame;\n // cancelAnimationFrame = root.cancelAnimationFrame;\n } else {\n let lastTime = 0;\n requestAnimationFrame = function (callback: FrameRequestCallback): any {\n const currTime = new Date().getTime();\n const timeToCall = Math.max(0, 16 - (currTime - lastTime));\n const id = setTimeout(() => callback(currTime + timeToCall), timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n // cancelAnimationFrame = function (handle: number): void {\n // clearTimeout(handle);\n // };\n }\n})();\n\nexport class Message {\n\n get canConflate(): boolean { return false; }\n conflate(other: Message): boolean {\n return false;\n }\n\n void(): boolean {\n return false;\n }\n}\ntype MessageConstructor<T extends Message> = new (...args: any[]) => T;\n\nexport type Callback<T extends Message> = (messages: T[]) => void;\nexport { IObserverHandle };\n\ntype ObserverAdapter<T extends Message = Message> = {\n id: number;\n type?: MessageConstructor<T>;\n callback: Callback<T>;\n};\n\nexport class Dispatch<T extends Message = Message> {\n\n private _observerID: number = 0;\n private _observers: ObserverAdapter<T>[] = [];\n private _messageBuffer: T[] = [];\n private _rafHandle: number | undefined = undefined;\n\n constructor() {\n }\n\n private observers(): ObserverAdapter<T>[] {\n return this._observers;\n }\n\n private messages(): T[] {\n const retVal: T[] = [];\n this._messageBuffer.forEach(msg => {\n if (!retVal.some(msg2 => msg2.canConflate && msg2.conflate(msg))) {\n retVal.push(msg);\n }\n });\n return retVal;\n }\n\n private dispatchAll() {\n this._rafHandle = undefined;\n this.dispatch(this.messages());\n this.flush();\n }\n\n private dispatch(messages: T[]) {\n if (messages.length === 0) return;\n this.observers().forEach(o => {\n const msgs = messages.filter(m => !m.void() && (o.type === undefined || m instanceof o.type));\n if (msgs.length) {\n o.callback(msgs);\n }\n });\n }\n\n hasObserver(): boolean {\n return this._observers.length > 0;\n }\n\n flush() {\n this._messageBuffer = [];\n }\n\n send(msg: T) {\n if (!this.hasObserver()) return;\n this.dispatch([msg]);\n }\n\n post(msg: T) {\n if (!this.hasObserver()) return;\n this._messageBuffer.push(msg);\n if (this._rafHandle === undefined) {\n this._rafHandle = requestAnimationFrame(() => this.dispatchAll());\n }\n }\n\n attach(callback: Callback<T>, type?: MessageConstructor<T>): IObserverHandle {\n const context = this;\n const id = ++this._observerID;\n this._observers.push({ id, type, callback });\n return {\n release() {\n context._observers = context._observers.filter(o => o.id !== id);\n },\n unwatch() {\n this.release();\n }\n };\n }\n}\n","import { StringAnyMap } from \"./dictionary.ts\";\nimport { Stack } from \"./stack.ts\";\n\nexport class XMLNode {\n name: string = \"\";\n $: StringAnyMap = {};\n protected _children: XMLNode[] = [];\n content: string = \"\";\n\n constructor(name: string) {\n this.name = name;\n }\n\n appendAttribute(key: string, val: string) {\n this.$[key] = val;\n }\n\n appendContent(content: string) {\n this.content += content;\n }\n\n appendChild(child: XMLNode) {\n this._children.push(child);\n }\n\n children(tag?: string): XMLNode[] {\n if (tag === undefined) {\n return this._children;\n }\n return this._children.filter((xmlNode) => {\n return xmlNode.name === tag;\n });\n }\n}\n\nexport class SAXStackParser {\n root?: XMLNode;\n stack: Stack<XMLNode> = new Stack<XMLNode>();\n\n constructor() {\n }\n\n private walkDoc(node: any) {\n const xmlNode = this._startXMLNode(node);\n if (node.attributes) {\n for (let i = 0; i < node.attributes.length; ++i) {\n const attribute = node.attributes.item(i);\n this.attributes(attribute.nodeName, attribute.nodeValue);\n }\n }\n this.startXMLNode(xmlNode);\n if (node.childNodes) {\n for (let i = 0; i < node.childNodes.length; ++i) {\n const childNode = node.childNodes.item(i);\n if (childNode.nodeType === childNode.TEXT_NODE) {\n this.characters(childNode.nodeValue!);\n } else {\n this.walkDoc(childNode);\n }\n }\n }\n this.endXMLNode(this.stack.pop()!);\n }\n\n private _startXMLNode(node: Node): XMLNode {\n const newNode = new XMLNode(node.nodeName);\n if (!this.stack.depth()) {\n this.root = newNode;\n } else {\n this.stack.top()!.appendChild(newNode);\n }\n return this.stack.push(newNode);\n }\n\n parse(xml: string) {\n const domParser = new DOMParser();\n const doc = domParser.parseFromString(xml, \"application/xml\");\n this.startDocument();\n this.walkDoc(doc);\n this.endDocument();\n }\n\n // Callbacks ---\n startDocument() {\n }\n\n endDocument() {\n }\n\n startXMLNode(node: XMLNode) {\n }\n\n endXMLNode(node: XMLNode) {\n }\n\n attributes(key: string, val: any) {\n this.stack.top()!.appendAttribute(key, val);\n }\n\n characters(text: string) {\n this.stack.top()!.appendContent(text);\n }\n}\n\nclass XML2JSONParser extends SAXStackParser {\n startXMLNode(node: XMLNode) {\n super.startXMLNode(node);\n switch (node.name) {\n case \"xs:element\":\n break;\n case \"xs:simpleType\":\n break;\n default:\n break;\n }\n }\n\n endXMLNode(node: XMLNode) {\n switch (node.name) {\n case \"xs:element\":\n break;\n case \"xs:simpleType\":\n break;\n default:\n break;\n }\n super.endXMLNode(node);\n }\n}\n\nexport function xml2json(xml: string): XMLNode | undefined {\n const saxParser = new XML2JSONParser();\n saxParser.parse(xml);\n return saxParser.root;\n}\n","import { Dispatch, IObserverHandle, Message } from \"./dispatch.ts\";\nimport { deepEquals } from \"./immutable.ts\";\n\nclass PropChangedMessage extends Message {\n\n constructor(readonly property: string, public newValue: any, public oldValue?: any) {\n super();\n }\n\n get canConflate(): boolean { return true; }\n conflate(other: PropChangedMessage) {\n if (this.property === other.property) {\n this.newValue = other.newValue;\n return true;\n }\n return false;\n }\n\n void(): boolean {\n return deepEquals(this.newValue, this.oldValue);\n }\n}\n\nexport interface IEvent {\n id: string;\n oldValue: any;\n newValue: any;\n}\n\nexport type StatePropCallback = (changes: IEvent) => void;\nexport type StateCallback = (changes: IEvent[]) => void;\nexport type StateEvents = \"propChanged\" | \"changed\";\nexport class StateObject<U, I> {\n private _espState: Partial<U> = {} as U;\n private _dispatch = new Dispatch<PropChangedMessage>();\n private _monitorHandle?: any;\n protected _monitorTickCount: number = 0;\n\n protected clear(newVals?: Partial<I>) {\n this._espState = {} as U;\n if (newVals !== void 0) {\n this.set(newVals as I);\n }\n this._monitorTickCount = 0;\n }\n\n protected get(): U;\n protected get<K extends keyof U>(key: K, defValue?: U[K]): U[K];\n protected get<K extends keyof U>(key?: K, defValue?: U[K]): Partial<U> | U[K] | undefined {\n if (key === void 0) {\n return this._espState;\n }\n return this.has(key) ? this._espState[key] : defValue;\n }\n\n protected set(newVals: I): void;\n protected set<K extends keyof U>(key: K, newVal: U[K], batchMode?: boolean): void;\n protected set<K extends keyof U>(keyOrNewVals: K | U, newVal?: U[K]): void {\n if (typeof keyOrNewVals === \"string\") {\n return this.setSingle(keyOrNewVals as any, newVal as U[K]); // TODO: \"as any\" should not be needed (TS >= 3.1.x)\n }\n this.setAll(keyOrNewVals as Partial<U>);\n }\n\n private setSingle<K extends keyof U>(key: K, newVal: U[K] | undefined): void {\n const oldVal = this._espState[key];\n this._espState[key] = newVal;\n this._dispatch.post(new PropChangedMessage(key as string, newVal, oldVal));\n }\n\n private setAll(_: Partial<U>): void {\n for (const key in _) {\n if (_.hasOwnProperty(key)) {\n this.setSingle(key, _[key]);\n }\n }\n }\n\n protected has<K extends keyof U>(key: K): boolean {\n return this._espState[key] !== void 0;\n }\n\n addObserver(eventID: StateEvents, callback: StateCallback): IObserverHandle;\n addObserver(eventID: StateEvents, propID: keyof U, callback: StatePropCallback): IObserverHandle;\n addObserver(eventID: StateEvents, propIDOrCallback: StateCallback | keyof U, callback?: StatePropCallback): IObserverHandle {\n if (this.isCallback(propIDOrCallback)) {\n if (eventID !== \"changed\") throw new Error(\"Invalid eventID: \" + eventID);\n return this._dispatch.attach((messages: PropChangedMessage[]) => {\n propIDOrCallback(messages.map(m => ({\n id: m.property,\n oldValue: m.oldValue,\n newValue: m.newValue\n })));\n });\n } else {\n if (eventID !== \"propChanged\") throw new Error(\"Invalid eventID: \" + eventID);\n return this._dispatch.attach((messages: PropChangedMessage[]) => {\n const filteredMessages = messages.filter(m => m.property === propIDOrCallback);\n if (filteredMessages.length) {\n if (filteredMessages.length > 1) {\n console.warn(\"Should only be 1 message?\");\n }\n const event = filteredMessages[filteredMessages.length - 1];\n callback!({\n id: event.property,\n oldValue: event.oldValue,\n newValue: event.newValue\n });\n }\n });\n }\n }\n\n on(eventID: StateEvents, callback: StateCallback): this;\n on(eventID: StateEvents, propID: keyof U, callback: StatePropCallback): this;\n on(eventID: StateEvents, propIDOrCallback: StateCallback | keyof U, callback?: StatePropCallback): this {\n this.addObserver(eventID, propIDOrCallback as any, callback as any);\n return this;\n }\n\n protected isCallback(propIDOrCallback: StateCallback | keyof U): propIDOrCallback is StateCallback {\n return (typeof propIDOrCallback === \"function\");\n }\n\n protected hasEventListener(): boolean {\n return this._dispatch.hasObserver();\n }\n\n // Monitoring ---\n protected async refresh(full: boolean = false): Promise<this> {\n await Promise.resolve();\n return this;\n }\n\n protected _monitor(): void {\n if (this._monitorHandle) {\n this._monitorTickCount = 0;\n return;\n }\n\n this._monitorHandle = setTimeout(() => {\n const refreshPromise: Promise<any> = this.hasEventListener() ? this.refresh() : Promise.resolve();\n refreshPromise.then(() => {\n this._monitor();\n });\n delete this._monitorHandle;\n }, this._monitorTimeoutDuration());\n }\n\n protected _monitorTimeoutDuration(): number {\n ++this._monitorTickCount;\n if (this._monitorTickCount <= 1) { // Once\n return 0;\n }\n return 30000;\n }\n\n watch(callback: StateCallback, triggerChange: boolean = true): IObserverHandle {\n if (typeof callback !== \"function\") {\n throw new Error(\"Invalid Callback\");\n }\n if (triggerChange) {\n setTimeout(() => {\n const props: any = this.get();\n const changes: IEvent[] = [];\n for (const key in props) {\n if (props.hasOwnProperty(props)) {\n changes.push({ id: key, newValue: props[key], oldValue: undefined });\n }\n }\n callback(changes);\n }, 0);\n }\n const retVal = this.addObserver(\"changed\", callback);\n this._monitor();\n return retVal;\n }\n}\n","export function trim(str: string, char: string): string {\n if (typeof char !== \"string\") return str;\n if (char.length === 0) return str;\n while (str.indexOf(char) === 0) {\n str = str.substring(1);\n }\n while (endsWith(str, char)) {\n str = str.substring(0, str.length - 1);\n }\n return str;\n}\n\nexport function endsWith(origString: string, searchString: string, position?: number) {\n const subjectString = origString.toString();\n if (typeof position !== \"number\" || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n const lastIndex = subjectString.lastIndexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n","export function join(...segments: string[]) {\n const parts: string[] = segments.reduce((parts: string[], segment) => {\n // Remove leading slashes from non-first part.\n if (parts.length > 0) {\n segment = segment.replace(/^\\//, \"\");\n }\n // Remove trailing slashes.\n segment = segment.replace(/\\/$/, \"\");\n return [...parts, ...segment.split(\"/\")];\n }, []);\n const resultParts = [];\n for (const part of parts) {\n if (part === \".\") {\n continue;\n }\n if (part === \"..\") {\n resultParts.pop();\n continue;\n }\n resultParts.push(part);\n }\n return resultParts.join(\"/\");\n}\n\nexport function dirname(path: string) {\n return join(path, \"..\");\n}\n","const BASE64_ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\nfunction toUTF8Bytes(value: string): Uint8Array {\n if (typeof TextEncoder !== \"undefined\") {\n return new TextEncoder().encode(value);\n }\n\n const encoded = encodeURIComponent(value);\n const bytes: number[] = [];\n for (let i = 0; i < encoded.length; ++i) {\n if (encoded[i] === \"%\") {\n bytes.push(parseInt(encoded.substring(i + 1, i + 3), 16));\n i += 2;\n } else {\n bytes.push(encoded.charCodeAt(i));\n }\n }\n return Uint8Array.from(bytes);\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let output = \"\";\n for (let i = 0; i < bytes.length; i += 3) {\n const byte1 = bytes[i];\n const hasByte2 = i + 1 < bytes.length;\n const hasByte3 = i + 2 < bytes.length;\n const byte2 = hasByte2 ? bytes[i + 1] : 0;\n const byte3 = hasByte3 ? bytes[i + 2] : 0;\n\n output += BASE64_ALPHABET[byte1 >> 2];\n output += BASE64_ALPHABET[((byte1 & 0x03) << 4) | (byte2 >> 4)];\n output += hasByte2 ? BASE64_ALPHABET[((byte2 & 0x0f) << 2) | (byte3 >> 6)] : \"=\";\n output += hasByte3 ? BASE64_ALPHABET[byte3 & 0x3f] : \"=\";\n }\n return output;\n}\n\nexport function utf8ToBase64(value: string = \"\"): string {\n const normalized = value == null ? \"\" : String(value);\n\n const maybeBuffer = (globalThis as any)?.Buffer;\n if (maybeBuffer?.from) {\n return maybeBuffer.from(normalized, \"utf8\").toString(\"base64\");\n }\n\n return bytesToBase64(toUTF8Bytes(normalized));\n}\n"],"names":["_a","_b","_c","_d","PKG_NAME","PKG_VERSION","BUILD_VERSION","find","o","predicate","TypeError","len","length","thisArg","arguments","k","kValue","call","compare","before","after","retVal","update","exit","enter","row","otherIdx","indexOf","push","splice","compare2","idFunc","updateFunc","unknownMap","forEach","item","id","key","pad","hash","fold","text","i","charCodeAt","foldObject","seen","hashSum","Object","keys","sort","reduce","input","foldValue","value","toString","prototype","__name","_Cache","_cache","_calcID","args","constructor","calcID","this","has","espObj","set","obj","get","factory","Cache","_AsyncCache","Promise","resolve","AsyncCache","debounce","fn","timeout","promises","params","clockStart","Date","now","promise","then","response","setTimeout","Math","max","catch","e","promiseTimeout","ms","reject","clearTimeout","race","_AsyncOrderedQueue","_q","isTop","p","shift","intervalHandler","setInterval","clearInterval","AsyncOrderedQueue","sleep","_Dictionary","store","attrs","remove","values","Dictionary","_DictionaryNoCase","super","toLowerCase","DictionaryNoCase","espTime2Seconds","duration","isNaN","Number","nsIndex","parseFloat","substr","msIndex","sIndex","dayTimeParts","split","days","secs","timeParts","reverse","j","pow","GraphItem$1","_graph","parent","props","graph","GraphItem","subgraphs","vertices","edges","_","_addSubgraph","full","removeSubgraph","createSubgraph","subgraph","Error","_removeSubgraph","idx","removeAllSubgraphs","createVertex","_addVertex","vertex","_removeVertex","removeAllVertices","removeVertex","createEdge","source","target","_addEdge","edge","_removeEdge","_add","Vertex","inEdges","outEdges","addInEdge","removeInEdge","addOutEdge","removeOutEdge","removeEdge","_Graph","root","_allSubgraphs","_allSubgraphsMap","_allVertices","_allVerticesMap","_allEdges","_allEdgesMap","idOf","Subgraph","childSubgraph","inEdge","outEdge","Edge","_walk","visitor","walk","clone","ctor","map","ObjMap","put","Graph","index","_GraphItem","g","_ChildGraphItem","_parent","clearParent","removeChild","addChild","ChildGraphItem","_Subgraph","_children","children","filter","_Vertex","_inEdges","_outEdges","edgeCount","_Edge","_source","_target","_Graph2","_directed","_subgraphMap","_vertexMap","_edgeMap","directed","clear","clearParents","isDirected","_idFunc","_sourceFunc","sourceFunc","_targetFunc","targetFunc","_updateFunc","type","subgraphExists","vertexExists","edgeExists","isSubgraph","isVertex","isEdge","allItems","allSubgraphs","allVertices","allEdges","itemExists","subgraphSubgraphs","child","subgraphVertices","subgraphEdges","addSubgraph","s","s_id","p_id","mergeSubgraphs","_subgraphs","sgDiff","sg","updateSubgraph","sg_id","promoteChildren","subgraphParent","parentID","vertexEdges","vertexID","_neighbors","neighbors","n","singleNeighbors","addVertex","v","v_id","mergeVertices","_vertices","vDiff","updateVertex","vertexParent","addEdge","e_id","e_source","e_target","mergeEdges","_edges","eDiff","updateEdge","old_source","new_source","old_target","new_target","e_sourceID","e_targetID","_hwalk","formatter","hierarchy","dijkstra","Q","Set","prev","dist","adj","vertex_with_min_dist","min_distance","Infinity","u","v1","v2","add","size","delete","alt","ids","unshift","visited","visit","ancestors","Graph2","_Set","_content","isArray","Array","keyList","hasProp","hasOwnProperty","verboseDeepEquals","a","b","functionRefCompare","arrA","arrB","console","warn","dateA","dateB","getTime","regexpA","RegExp","regexpB","deepEquals","origItem","newItem","globalThis","window","isBrowser","isNode","process","versions","node","isCI","env","TRAVIS","GITHUB_ACTIONS","CI","getScriptSrc","partial","scripts","document","script","src","substring","_Stack","stack","pop","top","depth","Stack","Level","colours","debug","info","notice","warning","error","critical","alert","emergency","_ConsoleWriter","write","dateTime","level","msg","log","toUpperCase","ConsoleWriter","_Logging","_levelStack","_level","_filter","_writer","Instance","_instance","stringify","cache","JSON","_key","writer","toISOString","rawWrite","pushLevel","popLevel","Logging","logger","_ScopedLogging","_scopeID","scopeID","ScopedLogging","scopedLogger","degreesToRadians","degrees","PI","radiansToDegrees","radians","polarToCartesian","r","theta","x","cos","y","sin","cartesianToPolar","sqrt","atan2","normalizeRadians","min","normalize","normalizeDegrees","spread","offsetValue","floor","inner","prop","exists","_mixin","dest","empty","deepMixin","sources","deepMixinT","safeStringify","arg","classID2Meta","classID","classInfo","module","file","class","_ObserverHandle","eventTarget","eventID","callback","release","removeObserver","unwatch","ObserverHandle","_Observable","_eventObservers","events","addObserver","eventObservers","dispatchEvent","observer","_hasObserver","hasObserver","_eventID","requestAnimationFrame","Observable","lastTime","currTime","timeToCall","_Message","canConflate","conflate","other","Message","_Dispatch","_observerID","_observers","_messageBuffer","_rafHandle","observers","messages","some","msg2","dispatchAll","dispatch","flush","msgs","m","void","send","post","attach","context","Dispatch","_XMLNode","name","$","content","appendAttribute","val","appendContent","appendChild","tag","xmlNode","XMLNode","_SAXStackParser","walkDoc","_startXMLNode","attributes","attribute","nodeName","nodeValue","startXMLNode","childNodes","childNode","nodeType","TEXT_NODE","characters","endXMLNode","newNode","parse","xml","doc","DOMParser","parseFromString","startDocument","endDocument","SAXStackParser","_XML2JSONParser","XML2JSONParser","xml2json","saxParser","_PropChangedMessage","property","newValue","oldValue","PropChangedMessage","_StateObject","_espState","_dispatch","_monitorHandle","_monitorTickCount","newVals","defValue","keyOrNewVals","newVal","setSingle","setAll","oldVal","propIDOrCallback","isCallback","filteredMessages","event","on","hasEventListener","refresh","_monitor","_monitorTimeoutDuration","watch","triggerChange","changes","StateObject","trim","str","char","endsWith","origString","searchString","position","subjectString","isFinite","lastIndex","lastIndexOf","join","segments","parts","segment","replace","resultParts","part","dirname","path","BASE64_ALPHABET","toUTF8Bytes","TextEncoder","encode","encoded","encodeURIComponent","bytes","parseInt","Uint8Array","from","bytesToBase64","output","byte1","hasByte2","hasByte3","byte2","byte3","utf8ToBase64","normalized","String","maybeBuffer","Buffer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/__package__.ts","../src/array.ts","../src/hashSum.ts","../src/cache.ts","../src/debounce.ts","../src/dictionary.ts","../src/esp.ts","../src/graph.ts","../src/graph2.ts","../src/immutable.ts","../src/platform.ts","../src/stack.ts","../src/logging.ts","../src/math.ts","../src/object.ts","../src/observer.ts","../src/dispatch.ts","../src/saxParser.ts","../src/stateful.ts","../src/string.ts","../src/url.ts","../src/utf8ToBase64.ts"],"sourcesContent":["export const PKG_NAME = \"__PACKAGE_NAME__\";\r\nexport const PKG_VERSION = \"__PACKAGE_VERSION__\";\r\nexport const BUILD_VERSION = \"__BUILD_VERSION__\";\r\n","// Based on: https://tc39.github.io/ecma262/#sec-array.prototype.find\r\nexport function find<T>(o: ReadonlyArray<T>, predicate: (value: T, index: number) => boolean) {\r\n // 1. Let O be ? ToObject(this value).\r\n if (o == null) {\r\n throw new TypeError('\"o\" is null or not defined');\r\n }\r\n\r\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\r\n const len = o.length >>> 0;\r\n\r\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\r\n if (typeof predicate !== \"function\") {\r\n throw new TypeError(\"predicate must be a function\");\r\n }\r\n\r\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n const thisArg = arguments[1];\r\n\r\n // 5. Let k be 0.\r\n let k = 0;\r\n\r\n // 6. Repeat, while k < len\r\n while (k < len) {\r\n // a. Let Pk be ! ToString(k).\r\n // b. Let kValue be ? Get(O, Pk).\r\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\r\n // d. If testResult is true, return kValue.\r\n const kValue = o[k];\r\n if (predicate.call(thisArg, kValue, k)) {\r\n return kValue;\r\n }\r\n // e. Increase k by 1.\r\n k++;\r\n }\r\n\r\n // 7. Return undefined.\r\n return undefined;\r\n}\r\nexport interface IDifferences2<T> {\r\n update: T[];\r\n exit: T[];\r\n enter: T[];\r\n}\r\n\r\nexport function compare<T>(before: readonly T[], after: readonly T[]): IDifferences2<T> {\r\n const retVal: IDifferences2<T> = {\r\n update: [],\r\n exit: [],\r\n enter: [...after]\r\n };\r\n for (const row of before) {\r\n const otherIdx = retVal.enter.indexOf(row);\r\n if (otherIdx >= 0) {\r\n retVal.update.push(row);\r\n retVal.enter.splice(otherIdx, 1);\r\n } else {\r\n retVal.exit.push(row);\r\n }\r\n }\r\n return retVal;\r\n}\r\n\r\nexport interface IDifferences2<T> {\r\n enter: T[];\r\n update: T[];\r\n exit: T[];\r\n}\r\n\r\nexport function compare2<T>(before: readonly T[], after: readonly T[], idFunc: (itme: T) => string | number, updateFunc: (before: T, after: T) => T = (before, after) => after): IDifferences2<T> {\r\n const retVal: IDifferences2<T> = {\r\n update: [],\r\n exit: [],\r\n enter: []\r\n };\r\n if (before === after) {\r\n retVal.update = before as T[];\r\n return retVal;\r\n }\r\n const unknownMap: { [key: string]: T } = {};\r\n after.forEach(item => {\r\n unknownMap[idFunc(item)] = item;\r\n });\r\n for (const row of before) {\r\n const id = idFunc(row);\r\n const item = unknownMap[id];\r\n if (item !== undefined) {\r\n delete unknownMap[id];\r\n retVal.update.push(updateFunc(row, item));\r\n } else {\r\n retVal.exit.push(row);\r\n }\r\n }\r\n for (const key in unknownMap) {\r\n retVal.enter.push(unknownMap[key]);\r\n }\r\n return retVal;\r\n}\r\n","// Ported to TypeScript from: https://github.com/bevacqua/hash-sum\r\n\r\nfunction pad(hash: string, len: number): string {\r\n while (hash.length < len) {\r\n hash = \"0\" + hash;\r\n }\r\n return hash;\r\n}\r\n\r\nfunction fold(hash: number, text: string): number {\r\n if (text.length === 0) {\r\n return hash;\r\n }\r\n for (let i = 0; i < text.length; ++i) {\r\n const chr = text.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + chr;\r\n hash |= 0;\r\n }\r\n return hash < 0 ? hash * -2 : hash;\r\n}\r\n\r\nfunction foldObject(hash: number, o: any, seen: any[]): number {\r\n if (typeof o.hashSum === \"function\") {\r\n return o.hashSum();\r\n }\r\n return Object.keys(o).sort().reduce((input: any, key: string) => {\r\n return foldValue(input, o[key], key, seen);\r\n }, hash);\r\n}\r\n\r\nfunction foldValue(input: number, value: any, key: string, seen: any[]): number {\r\n const hash = fold(fold(fold(input, key), toString(value)), typeof value);\r\n if (value === null) {\r\n return fold(hash, \"null\");\r\n }\r\n if (value === undefined) {\r\n return fold(hash, \"undefined\");\r\n }\r\n if (typeof value === \"object\") {\r\n if (seen.indexOf(value) !== -1) {\r\n return fold(hash, \"[Circular]\" + key);\r\n }\r\n seen.push(value);\r\n return foldObject(hash, value, seen);\r\n }\r\n return fold(hash, value.toString());\r\n}\r\n\r\nfunction toString(o: any): string {\r\n return Object.prototype.toString.call(o);\r\n}\r\n\r\nexport function hashSum(o: any): string {\r\n return pad(foldValue(0, o, \"\", []).toString(16), 8);\r\n}\r\n","import { hashSum } from \"./hashSum.ts\";\r\n\r\nexport class Cache<I, C> {\r\n private _cache: { [id: string]: C } = {};\r\n private _calcID: (espObj: I | C) => string;\r\n\r\n static hash(...args: any[]) {\r\n return hashSum({ ...args });\r\n }\r\n\r\n constructor(calcID: (espObj: I | C) => string) {\r\n this._calcID = calcID;\r\n }\r\n\r\n has(espObj: I): boolean {\r\n return this._calcID(espObj) in this._cache;\r\n }\r\n\r\n set(obj: C): C {\r\n this._cache[this._calcID(obj)] = obj;\r\n return obj;\r\n }\r\n\r\n get(espObj: I): C | null;\r\n get(espObj: I, factory: () => C): C;\r\n get(espObj: I, factory?: () => C): C | null {\r\n const retVal = this._cache[this._calcID(espObj)];\r\n if (!retVal) {\r\n return factory ? this.set(factory()) : null;\r\n }\r\n return retVal;\r\n }\r\n}\r\n\r\nexport class AsyncCache<I, C> {\r\n private _cache: { [id: string]: Promise<C> } = {};\r\n private _calcID: (espObj: I | C) => string;\r\n\r\n static hash(...args: any[]) {\r\n return hashSum({ ...args });\r\n }\r\n\r\n constructor(calcID: (espObj: I | C) => string) {\r\n this._calcID = calcID;\r\n }\r\n\r\n has(espObj: I): boolean {\r\n return this._calcID(espObj) in this._cache;\r\n }\r\n\r\n set(espObj: I, obj: Promise<C>): Promise<C> {\r\n this._cache[this._calcID(espObj)] = obj;\r\n return obj;\r\n }\r\n\r\n get(espObj: I): Promise<C | null>;\r\n get(espObj: I, factory: () => Promise<C>): Promise<C>;\r\n get(espObj: I, factory?: () => Promise<C>): Promise<C | null> {\r\n const retVal = this._cache[this._calcID(espObj)];\r\n if (!retVal) {\r\n return factory ? this.set(espObj, factory()) : Promise.resolve(null);\r\n }\r\n return retVal;\r\n }\r\n}\r\n","import { hashSum } from \"./hashSum.ts\";\r\n\r\nexport function debounce<R extends Promise<any>>(fn: () => R, timeout?: number): () => R;\r\nexport function debounce<P1, R extends Promise<any>>(fn: (param1: P1) => R, timeout?: number): (param1: P1) => R;\r\nexport function debounce<P1, P2, R extends Promise<any>>(fn: (param1: P1, param2: P2) => R, timeout?: number): (param1: P1, param2: P2) => R;\r\nexport function debounce<P1, P2, P3, R extends Promise<any>>(fn: (param1: P1, param2: P2, param3: P3) => R, timeout?: number): (param1: P1, param2: P2, param3: P3) => R;\r\nexport function debounce<P1, P2, P3, P4, R extends Promise<any>>(fn: (param1: P1, param2: P2, param3: P3, param4: P4) => R, timeout?: number): (param1: P1, param2: P2, param3: P3, param4: P4) => R;\r\nexport function debounce<TParam, R extends Promise<any>>(fn: (...params: TParam[]) => R, timeout?: number): (...params: TParam[]) => R {\r\n const promises: { [key: string]: { promise: R, clockStart: number } | null } = {};\r\n\r\n return (...params) => {\r\n const hash = hashSum(params);\r\n if (!promises[hash]) {\r\n promises[hash] = {\r\n clockStart: Date.now(),\r\n promise: fn(...params).then(response => {\r\n if (timeout === undefined) {\r\n promises[hash] = null;\r\n } else {\r\n setTimeout(() => {\r\n promises[hash] = null;\r\n }, Math.max(timeout - (Date.now() - promises[hash]!.clockStart), 0));\r\n }\r\n return response;\r\n }).catch(e => {\r\n promises[hash] = null;\r\n throw e;\r\n }) as R\r\n };\r\n }\r\n return promises[hash]!.promise;\r\n };\r\n}\r\n\r\nexport function promiseTimeout<T>(ms: number, promise: Promise<T>): Promise<T> {\r\n let id: any;\r\n const timeout = new Promise((resolve, reject) => {\r\n id = setTimeout(() => {\r\n clearTimeout(id);\r\n reject(\"Timed out in \" + ms + \"ms.\");\r\n }, ms);\r\n });\r\n\r\n return Promise.race([\r\n promise,\r\n timeout\r\n ]).then((response: unknown) => {\r\n clearTimeout(id);\r\n return response as T;\r\n }).catch(e => {\r\n clearTimeout(id);\r\n throw e;\r\n });\r\n}\r\n\r\nexport class AsyncOrderedQueue {\r\n private _q: Array<Promise<any>> = [];\r\n\r\n private isTop(p: Promise<any>): boolean {\r\n return this._q[0] === p;\r\n }\r\n\r\n push<T>(p: Promise<T>): Promise<T> {\r\n const retVal = p.then(response => {\r\n if (this.isTop(retVal)) {\r\n this._q.shift();\r\n return response;\r\n }\r\n return new Promise<T>((resolve, reject) => {\r\n const intervalHandler = setInterval(() => {\r\n if (this.isTop(retVal)) {\r\n clearInterval(intervalHandler);\r\n this._q.shift();\r\n resolve(response);\r\n }\r\n }, 20);\r\n });\r\n });\r\n this._q.push(retVal);\r\n return retVal;\r\n }\r\n}\r\n\r\nexport function sleep(ms: number): Promise<void> {\r\n return new Promise(resolve => {\r\n setTimeout(() => resolve(), ms);\r\n });\r\n}\r\n","export type StringAnyMap = { [key: string]: any };\r\n\r\nexport class Dictionary<T> {\r\n private store: { [key: string]: T } = {};\r\n\r\n constructor(attrs?: StringAnyMap) {\r\n if (attrs) {\r\n for (const key in attrs) {\r\n this.set(key, attrs[key]);\r\n }\r\n }\r\n }\r\n\r\n set(key: string, value: T): T {\r\n const retVal: T = this.store[key];\r\n this.store[key] = value;\r\n return retVal;\r\n }\r\n\r\n get(key: string): T {\r\n return this.store[key];\r\n }\r\n\r\n has(key: string) {\r\n return this.store[key] !== undefined;\r\n }\r\n\r\n remove(key: string) {\r\n delete this.store[key];\r\n }\r\n\r\n keys(): string[] {\r\n const retVal: string[] = [];\r\n for (const key in this.store) {\r\n retVal.push(key);\r\n }\r\n return retVal;\r\n }\r\n\r\n values(): T[] {\r\n const retVal: T[] = [];\r\n for (const key in this.store) {\r\n retVal.push(this.store[key]);\r\n }\r\n return retVal;\r\n }\r\n}\r\n\r\nexport class DictionaryNoCase<T> extends Dictionary<T> {\r\n constructor(attrs?: StringAnyMap) {\r\n super(attrs);\r\n }\r\n\r\n set(key: string, value: T): T {\r\n return super.set(key.toLowerCase(), value);\r\n }\r\n\r\n get(key: string): T {\r\n return super.get(key.toLowerCase());\r\n }\r\n\r\n has(key: string) {\r\n return super.has(key.toLowerCase());\r\n }\r\n\r\n remove(key: string) {\r\n return super.remove(key.toLowerCase());\r\n }\r\n}\r\n","export function espTime2Seconds(duration: string): number {\r\n if (!duration) {\r\n return 0;\r\n } else {\r\n if (!isNaN(Number(duration))) {\r\n return Number(duration);\r\n }\r\n }\r\n // GH: <n>ns or <m>ms or <s>s or [<d> days ][<h>:][<m>:]<s>[.<ms>]\r\n const nsIndex = duration.indexOf(\"ns\");\r\n if (nsIndex !== -1) {\r\n return parseFloat(duration.substr(0, nsIndex)) / 1000000000;\r\n }\r\n const msIndex = duration.indexOf(\"ms\");\r\n if (msIndex !== -1) {\r\n return parseFloat(duration.substr(0, msIndex)) / 1000;\r\n }\r\n const sIndex = duration.indexOf(\"s\");\r\n if (sIndex !== -1 && duration.indexOf(\"days\") === -1) {\r\n return parseFloat(duration.substr(0, sIndex));\r\n }\r\n\r\n const dayTimeParts = duration.split(\" days \");\r\n const days: number = dayTimeParts.length > 1 ? parseFloat(dayTimeParts[0]) : 0.0;\r\n const time: string = dayTimeParts.length > 1 ? dayTimeParts[1] : dayTimeParts[0];\r\n let secs = 0.0;\r\n const timeParts = time.split(\":\").reverse();\r\n for (let j = 0; j < timeParts.length; ++j) {\r\n secs += parseFloat(timeParts[j]) * Math.pow(60, j);\r\n }\r\n return (days * 24 * 60 * 60) + secs;\r\n}\r\n","export class GraphItem<S, V, E> {\r\n protected _graph: Graph<S, V, E>;\r\n readonly parent: Subgraph<S, V, E> | null;\r\n readonly props: { [key: string]: any } = {};\r\n\r\n constructor(graph: Graph<S, V, E>, parent: Subgraph<S, V, E> | null) {\r\n this._graph = graph;\r\n this.parent = parent;\r\n }\r\n}\r\n\r\nexport class Subgraph<S, V, E> extends GraphItem<S, V, E> {\r\n readonly subgraphs: Array<Subgraph<S, V, E>> = [];\r\n readonly vertices: Array<Vertex<S, V, E>> = [];\r\n readonly edges: Array<Edge<S, V, E>> = [];\r\n readonly _?: S;\r\n\r\n constructor(graph: Graph<S, V, E>, parent: Subgraph<S, V, E> | null, _?: S) {\r\n super(graph, parent);\r\n if (parent) { // Only needed for dummy root\r\n parent._addSubgraph(this);\r\n }\r\n this._ = _;\r\n }\r\n\r\n remove(full: boolean = true): void {\r\n this._graph.removeSubgraph(this, full);\r\n }\r\n\r\n createSubgraph(_?: S): Subgraph<S, V, E> {\r\n return this._graph.createSubgraph(this, _);\r\n }\r\n\r\n _addSubgraph(subgraph: Subgraph<S, V, E>) {\r\n if (this.subgraphs.indexOf(subgraph) >= 0) {\r\n throw new Error(\"Subgraph already exists\");\r\n }\r\n this.subgraphs.push(subgraph);\r\n }\r\n\r\n _removeSubgraph(subgraph: Subgraph<S, V, E>) {\r\n const idx = this.subgraphs.indexOf(subgraph);\r\n if (idx < 0) {\r\n throw new Error(\"Subgraph does not exist\");\r\n }\r\n this.subgraphs.splice(idx, 1);\r\n }\r\n\r\n removeAllSubgraphs() {\r\n for (let i = this.subgraphs.length - 1; i >= 0; --i) {\r\n this._graph.removeSubgraph(this.subgraphs[i], true);\r\n }\r\n }\r\n\r\n createVertex(_?: V): Vertex<S, V, E> {\r\n return this._graph.createVertex(this, _);\r\n }\r\n\r\n _addVertex(vertex: Vertex<S, V, E>) {\r\n if (this.vertices.indexOf(vertex) >= 0) {\r\n throw new Error(\"Vertex already exists\");\r\n }\r\n this.vertices.push(vertex);\r\n }\r\n\r\n _removeVertex(vertex: Vertex<S, V, E>) {\r\n const idx = this.vertices.indexOf(vertex);\r\n if (idx < 0) {\r\n throw new Error(\"Vertex does not exist\");\r\n }\r\n this.vertices.splice(idx, 1);\r\n }\r\n\r\n removeAllVertices() {\r\n for (let i = this.vertices.length - 1; i >= 0; --i) {\r\n this._graph.removeVertex(this.vertices[i], true);\r\n }\r\n }\r\n\r\n createEdge(source: Vertex<S, V, E>, target: Vertex<S, V, E>, _?: E): Edge<S, V, E> {\r\n return this._graph.createEdge(this, source, target, _);\r\n }\r\n\r\n _addEdge(edge: Edge<S, V, E>) {\r\n if (this.edges.indexOf(edge) >= 0) {\r\n throw new Error(\"Edge already exists\");\r\n }\r\n this.edges.push(edge);\r\n }\r\n\r\n _removeEdge(edge: Edge<S, V, E>) {\r\n const idx = this.edges.indexOf(edge);\r\n if (idx < 0) {\r\n throw new Error(\"Edge does not exist\");\r\n }\r\n this.edges.splice(idx, 1);\r\n }\r\n\r\n _add(item: Subgraph<S, V, E> | Vertex<S, V, E> | Edge<S, V, E>) {\r\n if (item instanceof Subgraph) {\r\n this._addSubgraph(item);\r\n } else if (item instanceof Vertex) {\r\n this._addVertex(item);\r\n } else {\r\n this._addEdge(item);\r\n }\r\n }\r\n}\r\n\r\nexport class Vertex<S, V, E> extends GraphItem<S, V, E> {\r\n readonly inEdges: Array<Edge<S, V, E>> = [];\r\n readonly outEdges: Array<Edge<S, V, E>> = [];\r\n get edges(): ReadonlyArray<Edge<S, V, E>> {\r\n return [...this.inEdges, ...this.outEdges];\r\n }\r\n readonly _?: V;\r\n\r\n constructor(graph: Graph<S, V, E>, parent: Subgraph<S, V, E>, _?: V) {\r\n super(graph, parent);\r\n parent._addVertex(this);\r\n this._ = _;\r\n }\r\n\r\n remove(full: boolean = true, _?: (source: V, target: V) => E) {\r\n return this._graph.removeVertex(this, full, _);\r\n }\r\n\r\n addInEdge(edge: Edge<S, V, E>) {\r\n this.inEdges.push(edge);\r\n }\r\n\r\n removeInEdge(edge: Edge<S, V, E>) {\r\n const idx = this.inEdges.indexOf(edge);\r\n if (idx < 0) {\r\n throw new Error(\"In edge does not exist\");\r\n }\r\n this.inEdges.splice(idx, 1);\r\n }\r\n\r\n addOutEdge(edge: Edge<S, V, E>) {\r\n this.outEdges.push(edge);\r\n }\r\n\r\n removeOutEdge(edge: Edge<S, V, E>) {\r\n const idx = this.outEdges.indexOf(edge);\r\n if (idx < 0) {\r\n throw new Error(\"Out edge does not exist\");\r\n }\r\n this.outEdges.splice(idx, 1);\r\n }\r\n}\r\n\r\nexport class Edge<S, V, E> extends GraphItem<S, V, E> {\r\n readonly source: Vertex<S, V, E>;\r\n readonly target: Vertex<S, V, E>;\r\n readonly _?: E;\r\n\r\n constructor(graph: Graph<S, V, E>, parent: Subgraph<S, V, E>, source: Vertex<S, V, E>, target: Vertex<S, V, E>, _?: E) {\r\n super(graph, parent);\r\n if (!source) {\r\n throw new Error(\"Missing source vertex\");\r\n }\r\n if (!target) {\r\n throw new Error(\"Missing target vertex\");\r\n }\r\n parent._addEdge(this);\r\n this.source = source;\r\n this.source.addOutEdge(this);\r\n this.target = target;\r\n this.target.addInEdge(this);\r\n this._ = _;\r\n }\r\n\r\n remove(): void {\r\n this._graph.removeEdge(this);\r\n }\r\n}\r\n\r\nexport class Graph<S = undefined, V = undefined, E = undefined> {\r\n readonly root: Subgraph<S, V, E>;\r\n private _allSubgraphs: Array<Subgraph<S, V, E>> = [];\r\n private _allSubgraphsMap: { [id: string]: Subgraph<S, V, E> } = {};\r\n private _allVertices: Array<Vertex<S, V, E>> = [];\r\n private _allVerticesMap: { [id: string]: Vertex<S, V, E> } = {};\r\n private _allEdges: Array<Edge<S, V, E>> = [];\r\n private _allEdgesMap: { [id: string]: Edge<S, V, E> } = {};\r\n\r\n idOf: (item: Subgraph<S, V, E> | Vertex<S, V, E> | Edge<S, V, E>) => string;\r\n\r\n constructor(idOf: (item: Subgraph<S, V, E> | Vertex<S, V, E> | Edge<S, V, E>) => string = item => \"\" + item._, _?: S) {\r\n this.root = new Subgraph(this, null, _);\r\n this.idOf = idOf;\r\n }\r\n\r\n createSubgraph(parent?: Subgraph<S, V, E>, _?: S): Subgraph<S, V, E> {\r\n const retVal = new Subgraph(this, parent || this.root, _);\r\n this._allSubgraphs.push(retVal);\r\n this._allSubgraphsMap[this.idOf(retVal)] = retVal;\r\n return retVal;\r\n }\r\n\r\n removeSubgraph(subgraph: Subgraph<S, V, E>, full: boolean = true) {\r\n const idx = this._allSubgraphs.indexOf(subgraph);\r\n if (idx < 0) {\r\n throw new Error(\"Subgraph does not exist\");\r\n }\r\n this._allSubgraphs.splice(idx, 1);\r\n delete this._allSubgraphsMap[this.idOf(subgraph)];\r\n if (subgraph.parent) {\r\n subgraph.parent._removeSubgraph(subgraph);\r\n }\r\n subgraph.edges.forEach(edge => full ? this.removeEdge(edge) : subgraph.parent!._addEdge(edge));\r\n subgraph.vertices.forEach(vertex => full ? this.removeVertex(vertex, full) : subgraph.parent!._addVertex(vertex));\r\n subgraph.subgraphs.forEach(childSubgraph => full ? this.removeSubgraph(childSubgraph, full) : subgraph.parent!._addSubgraph(childSubgraph)\r\n );\r\n }\r\n\r\n get subgraphs(): ReadonlyArray<Subgraph<S, V, E>> {\r\n return this._allSubgraphs;\r\n }\r\n\r\n subgraph(id: string): Subgraph<S, V, E> {\r\n return this._allSubgraphsMap[id];\r\n }\r\n\r\n createVertex(parent: Subgraph<S, V, E>, _?: V): Vertex<S, V, E> {\r\n const retVal = new Vertex(this, parent, _);\r\n this._allVertices.push(retVal);\r\n this._allVerticesMap[this.idOf(retVal)] = retVal;\r\n return retVal;\r\n }\r\n\r\n removeVertex(vertex: Vertex<S, V, E>, full: boolean = true, _?: (source: V, target: V) => E) {\r\n const idx = this._allVertices.indexOf(vertex);\r\n if (idx < 0) {\r\n throw new Error(\"Vertex does not exist\");\r\n }\r\n this._allVertices.splice(idx, 1);\r\n delete this._allVerticesMap[this.idOf(vertex)];\r\n if (vertex.parent) {\r\n vertex.parent._removeVertex(vertex);\r\n }\r\n if (!full) {\r\n vertex.inEdges.forEach(inEdge => {\r\n vertex.outEdges.forEach(outEdge => {\r\n this.createEdge(this.root, inEdge.source, outEdge.target, _ ? _(inEdge.source._!, outEdge.target._!) : undefined);\r\n });\r\n });\r\n }\r\n vertex.inEdges.forEach(edge => this.removeEdge(edge));\r\n vertex.outEdges.forEach(edge => this.removeEdge(edge));\r\n }\r\n\r\n get vertices(): ReadonlyArray<Vertex<S, V, E>> {\r\n return this._allVertices;\r\n }\r\n\r\n vertex(id: string): Vertex<S, V, E> {\r\n return this._allVerticesMap[id];\r\n }\r\n\r\n createEdge(parent: Subgraph<S, V, E>, source: Vertex<S, V, E>, target: Vertex<S, V, E>, _?: E): Edge<S, V, E> {\r\n const retVal = new Edge<S, V, E>(this, parent, source, target, _);\r\n this._allEdges.push(retVal);\r\n this._allEdgesMap[this.idOf(retVal)] = retVal;\r\n return retVal;\r\n }\r\n\r\n removeEdge(edge: Edge<S, V, E>) {\r\n const idx = this._allEdges.indexOf(edge);\r\n if (idx < 0) {\r\n throw new Error(\"Edge does not exist\");\r\n }\r\n this._allEdges.splice(idx, 1);\r\n delete this._allEdgesMap[this.idOf(edge)];\r\n if (edge.parent) {\r\n edge.parent._removeEdge(edge);\r\n }\r\n edge.source.removeOutEdge(edge);\r\n edge.target.removeInEdge(edge);\r\n }\r\n\r\n get edges(): ReadonlyArray<Edge<S, V, E>> {\r\n return this._allEdges;\r\n }\r\n\r\n edge(id: string): Edge<S, V, E> {\r\n return this._allEdgesMap[id];\r\n }\r\n\r\n private _walk(parent: Subgraph<S, V, E>, visitor: (item: GraphItem<S, V, E>) => \"abort\" | \"stepover\" | void): true | false | void {\r\n for (const subgraph of parent.subgraphs) {\r\n switch (visitor(subgraph)) {\r\n case \"abort\":\r\n return true;\r\n case \"stepover\":\r\n break;\r\n default:\r\n if (this._walk(subgraph, visitor)) return true;\r\n }\r\n }\r\n for (const vertex of parent.vertices) {\r\n if (visitor(vertex) === \"abort\") return true;\r\n }\r\n }\r\n\r\n walk(visitor: (visitor: GraphItem<S, V, E>) => \"abort\" | \"stepover\" | void) {\r\n this._walk(this.root, visitor);\r\n for (const edge of this._allEdges) {\r\n if (visitor(edge) === \"abort\") return true;\r\n }\r\n }\r\n\r\n clone(): Graph<S, V, E> {\r\n const ctor: new (idOf: (item: Subgraph<S, V, E> | Vertex<S, V, E> | Edge<S, V, E>) => string, _?: S) => Graph<S, V, E> = this.constructor as any;\r\n const retVal = new ctor(this.idOf, this.root._);\r\n const map = ObjMap();\r\n map.put(this.root, retVal.root);\r\n this.walk(item => {\r\n const parent = map.get(item.parent);\r\n if (item instanceof Subgraph) {\r\n map.put(item, parent.createSubgraph(item._));\r\n } else if (item instanceof Vertex) {\r\n map.put(item, parent.createVertex(item._));\r\n } else if (item instanceof Edge) {\r\n const source = map.get(item.source);\r\n const target = map.get(item.target);\r\n parent.createEdge(source, target, item._);\r\n }\r\n });\r\n return retVal;\r\n }\r\n}\r\n\r\nfunction ObjMap() {\r\n const keys: any[] = [];\r\n const values: any[] = [];\r\n\r\n return {\r\n put(key: any, value: any) {\r\n const index = keys.indexOf(key);\r\n if (index === -1) {\r\n keys.push(key);\r\n values.push(value);\r\n } else {\r\n values[index] = value;\r\n }\r\n },\r\n get(key: any) {\r\n return values[keys.indexOf(key)];\r\n }\r\n };\r\n}\r\n","import { compare2 } from \"./array.ts\";\r\n\r\ntype ID = string | number;\r\n\r\nclass GraphItem<T = any> {\r\n protected _graph: Graph2;\r\n _: T;\r\n id(): ID {\r\n return this._graph.id(this._);\r\n }\r\n\r\n constructor(g: Graph2, _: T) {\r\n this._graph = g;\r\n this._ = _;\r\n }\r\n}\r\n\r\nclass ChildGraphItem<S = any> extends GraphItem<S> {\r\n\r\n private _parent: Subgraph | undefined;\r\n\r\n constructor(g: Graph2, _: S) {\r\n super(g, _);\r\n }\r\n\r\n clearParent(): this {\r\n if (this._parent) {\r\n this._parent.removeChild(this);\r\n delete this._parent;\r\n }\r\n return this;\r\n }\r\n\r\n parent(): Subgraph | undefined;\r\n parent(_: Subgraph | undefined): this;\r\n parent(_?: Subgraph): Subgraph | undefined | this {\r\n if (arguments.length === 0) return this._parent;\r\n if (this._parent !== _) {\r\n if (this._parent) {\r\n this._parent.removeChild(this);\r\n }\r\n this._parent = _;\r\n if (this._parent) {\r\n this._parent.addChild(this);\r\n }\r\n }\r\n return this;\r\n }\r\n}\r\n\r\nclass Subgraph<S = any> extends ChildGraphItem<S> {\r\n\r\n private _children: ChildGraphItem[] = [];\r\n\r\n constructor(g: Graph2, _: S) {\r\n super(g, _);\r\n }\r\n\r\n children(): ChildGraphItem[] {\r\n return this._children;\r\n }\r\n\r\n addChild(_: ChildGraphItem) {\r\n this._children.push(_);\r\n }\r\n\r\n removeChild(_: ChildGraphItem) {\r\n this._children = this._children.filter(row => row.id !== _.id);\r\n }\r\n}\r\n\r\nclass Vertex<V = any> extends ChildGraphItem<V> {\r\n\r\n private _inEdges: Edge[] = [];\r\n private _outEdges: Edge[] = [];\r\n\r\n constructor(g: Graph2, _: V) {\r\n super(g, _);\r\n }\r\n\r\n edges() {\r\n return [...this._inEdges, ...this._outEdges];\r\n }\r\n\r\n edgeCount() {\r\n return this._outEdges.length + this._inEdges.length;\r\n }\r\n\r\n inEdges() {\r\n return this._inEdges;\r\n }\r\n\r\n addInEdge(e: Edge) {\r\n this._inEdges.push(e);\r\n }\r\n\r\n removeInEdge(id: ID) {\r\n this._inEdges = this._inEdges.filter(e => e._.id !== id);\r\n }\r\n\r\n outEdges() {\r\n return this._outEdges;\r\n }\r\n\r\n addOutEdge(e: Edge) {\r\n this._outEdges.push(e);\r\n }\r\n\r\n removeOutEdge(id: ID) {\r\n this._outEdges = this._outEdges.filter(e => e._.id !== id);\r\n }\r\n}\r\n\r\nclass Edge<E = any> extends ChildGraphItem<E> {\r\n\r\n _source: Vertex;\r\n _target: Vertex;\r\n\r\n constructor(g: Graph2, _: E, source: Vertex, target: Vertex) {\r\n super(g, _);\r\n this._source = source;\r\n this._target = target;\r\n }\r\n}\r\n\r\ntype SubgraphMap<T> = { [id: string]: Subgraph<T> };\r\ntype VertexMap<T> = { [id: string]: Vertex<T> };\r\ntype EdgeMap<T> = { [id: string]: Edge<T> };\r\n\r\nexport type HierarchyFormatter<V, S> = (type: \"subgraph\" | \"vertex\", item: V | S, children?: object[]) => object;\r\n\r\nexport class Graph2<V = any, E = any, S = any> {\r\n\r\n private _directed: boolean;\r\n private _subgraphMap: SubgraphMap<S> = {};\r\n private _vertexMap: VertexMap<V> = {};\r\n private _edgeMap: EdgeMap<E> = {};\r\n\r\n constructor(directed = true) {\r\n this._directed = directed;\r\n }\r\n\r\n clear(): this {\r\n this._subgraphMap = {};\r\n this._vertexMap = {};\r\n this._edgeMap = {};\r\n return this;\r\n }\r\n\r\n clearParents(): this {\r\n for (const key in this._subgraphMap) {\r\n this._subgraphMap[key].clearParent();\r\n }\r\n for (const key in this._vertexMap) {\r\n this._vertexMap[key].clearParent();\r\n }\r\n return this;\r\n }\r\n\r\n isDirected(): boolean {\r\n return this._directed;\r\n }\r\n\r\n _idFunc = (_: any): ID => typeof _.id === \"function\" ? _.id() : _.id;\r\n idFunc(_: (_: S | V | E) => ID): this {\r\n this._idFunc = _;\r\n return this;\r\n }\r\n\r\n _sourceFunc = (_: any): ID => typeof _.source === \"function\" ? _.source() : _.source;\r\n sourceFunc(_: (_: E) => ID): this {\r\n this._sourceFunc = _;\r\n return this;\r\n }\r\n\r\n _targetFunc = (_: any): ID => typeof _.target === \"function\" ? _.target() : _.target;\r\n targetFunc(_: (_: E) => ID): this {\r\n this._targetFunc = _;\r\n return this;\r\n }\r\n\r\n _updateFunc = (before: S | V | E, after: S | V | E): S | V | E => after;\r\n updateFunc(_: (before: S | V | E, after: S | V | E) => S | V | E): this {\r\n this._updateFunc = _;\r\n return this;\r\n }\r\n\r\n id(_: S | V | E): ID {\r\n return this._idFunc(_);\r\n }\r\n\r\n type(id: ID): \"S\" | \"V\" | \"E\" | \"\" {\r\n if (this.subgraphExists(id)) return \"S\";\r\n if (this.vertexExists(id)) return \"V\";\r\n if (this.edgeExists(id)) return \"E\";\r\n return \"\";\r\n }\r\n\r\n isSubgraph(_: S | V | E): _ is S {\r\n return this.subgraphExists(this.id(_));\r\n }\r\n\r\n isVertex(_: S | V | E): _ is V {\r\n return this.vertexExists(this.id(_));\r\n }\r\n\r\n isEdge(_: S | V | E): _ is E {\r\n return this.edgeExists(this.id(_));\r\n }\r\n\r\n allItems(): Array<S | V | E> {\r\n return [...this.allSubgraphs(), ...this.allVertices(), ...this.allEdges()];\r\n }\r\n\r\n item(id: ID): S | V | E | undefined {\r\n if (this.subgraphExists(id)) return this.subgraph(id);\r\n if (this.vertexExists(id)) return this.vertex(id);\r\n if (this.edgeExists(id)) return this.edge(id);\r\n return undefined;\r\n }\r\n\r\n itemExists(id: ID): boolean {\r\n return this.edgeExists(id) || this.vertexExists(id) || this.subgraphExists(id);\r\n }\r\n\r\n // Subgraphs ---\r\n allSubgraphs(): S[] {\r\n const retVal: S[] = [];\r\n for (const key in this._subgraphMap) {\r\n retVal.push(this._subgraphMap[key]._);\r\n }\r\n return retVal;\r\n }\r\n\r\n subgraphs(): S[] {\r\n const retVal: S[] = [];\r\n for (const key in this._subgraphMap) {\r\n if (this._subgraphMap[key].parent() === undefined) {\r\n retVal.push(this._subgraphMap[key]._);\r\n }\r\n }\r\n return retVal;\r\n }\r\n\r\n subgraphExists(id: ID): boolean {\r\n return !!this._subgraphMap[id];\r\n }\r\n\r\n subgraph(id: ID): S {\r\n return this._subgraphMap[id]._;\r\n }\r\n\r\n subgraphSubgraphs(id: ID): S[] {\r\n return this._subgraphMap[id].children().filter(child => this.isSubgraph(child._)).map(child => child._);\r\n }\r\n\r\n subgraphVertices(id: ID): V[] {\r\n return this._subgraphMap[id].children().filter(child => this.isVertex(child._)).map(child => child._);\r\n }\r\n\r\n subgraphEdges(id: ID): E[] {\r\n return this._subgraphMap[id].children().filter(child => this.isEdge(child._)).map(child => child._);\r\n }\r\n\r\n addSubgraph(s: S, parent?: S): this {\r\n const s_id = this._idFunc(s);\r\n if (this._subgraphMap[s_id]) throw new Error(`Subgraph '${s_id}' already exists.`);\r\n const subgraph = new Subgraph(this, s);\r\n if (parent) {\r\n const p_id = this._idFunc(parent);\r\n if (!this._subgraphMap[p_id]) throw new Error(`Subgraph '${p_id}' does not exist.`);\r\n subgraph.parent(this._subgraphMap[p_id]);\r\n }\r\n this._subgraphMap[s_id] = subgraph;\r\n return this;\r\n }\r\n\r\n mergeSubgraphs(_subgraphs: S[] = []): this {\r\n const sgDiff = compare2<S>(this.allSubgraphs(), _subgraphs, sg => this._idFunc(sg), this._updateFunc as any);\r\n sgDiff.exit.forEach(sg => this.removeSubgraph(this._idFunc(sg)));\r\n sgDiff.enter.forEach(sg => this.addSubgraph(sg));\r\n sgDiff.update.forEach(sg => this.updateSubgraph(sg));\r\n return this;\r\n }\r\n\r\n updateSubgraph(sg: S): this {\r\n const sg_id = this._idFunc(sg);\r\n const subgraph = this._subgraphMap[sg_id];\r\n if (!subgraph) throw new Error(`Subgraph '${sg_id}' does not exist.`);\r\n subgraph._ = sg;\r\n return this;\r\n }\r\n\r\n removeSubgraph(id: ID, promoteChildren = true): this {\r\n const sg = this._subgraphMap[id];\r\n if (!sg) throw new Error(`Subgraph '${id}' does not exist.`);\r\n sg.children().forEach(child => {\r\n if (promoteChildren) {\r\n child.parent(sg.parent());\r\n } else {\r\n if (child instanceof Subgraph) {\r\n this.removeSubgraph(child.id());\r\n } else {\r\n this.removeVertex(child.id());\r\n }\r\n }\r\n });\r\n delete this._subgraphMap[id];\r\n return this;\r\n }\r\n\r\n subgraphParent(id: ID): S | undefined;\r\n subgraphParent(id: ID, parentID: ID): this;\r\n subgraphParent(id: ID, parentID?: ID): S | undefined | this {\r\n const item = this._subgraphMap[id];\r\n if (!item) throw new Error(`Subgraph '${id}' does not exist.`);\r\n if (parentID === void 0) {\r\n const parent = item.parent();\r\n return parent ? parent._ as S : undefined;\r\n }\r\n const parent = this._subgraphMap[parentID];\r\n if (!parent) throw new Error(`Vertex parent '${parent}' does not exist.`);\r\n item.parent(parent);\r\n return this;\r\n }\r\n\r\n // Vertices ---\r\n allVertices(): V[] {\r\n const retVal: V[] = [];\r\n for (const key in this._vertexMap) {\r\n retVal.push(this._vertexMap[key]._);\r\n }\r\n return retVal;\r\n }\r\n\r\n vertices(): V[] {\r\n const retVal: V[] = [];\r\n for (const key in this._vertexMap) {\r\n if (this._vertexMap[key].parent() === undefined) {\r\n retVal.push(this._vertexMap[key]._);\r\n }\r\n }\r\n return retVal;\r\n }\r\n\r\n vertexExists(id: ID): boolean {\r\n return !!this._vertexMap[id];\r\n }\r\n\r\n vertex(id: ID): V {\r\n return this._vertexMap[id]._;\r\n }\r\n\r\n allEdges(): E[] {\r\n const retVal: E[] = [];\r\n for (const key in this._edgeMap) {\r\n retVal.push(this._edgeMap[key]._);\r\n }\r\n return retVal;\r\n }\r\n\r\n edges(): E[] {\r\n const retVal: E[] = [];\r\n for (const key in this._edgeMap) {\r\n if (this._edgeMap[key].parent() === undefined) {\r\n retVal.push(this._edgeMap[key]._);\r\n }\r\n }\r\n return retVal;\r\n }\r\n\r\n vertexEdges(vertexID: ID): E[] {\r\n return this._vertexMap[vertexID].edges().map(e => e._);\r\n }\r\n\r\n inEdges(vertexID: ID): E[] {\r\n return this._vertexMap[vertexID].inEdges().map(e => e._);\r\n }\r\n\r\n outEdges(vertexID: ID): E[] {\r\n return this._vertexMap[vertexID].outEdges().map(e => e._);\r\n }\r\n\r\n private _neighbors(id: ID): Vertex[] {\r\n return [...this._vertexMap[id].outEdges().map(e => e._target), ...this._vertexMap[id].inEdges().map(e => e._source)];\r\n }\r\n\r\n neighbors(id: ID): V[] {\r\n return this._neighbors(id).map(n => n._);\r\n }\r\n\r\n singleNeighbors(id: ID): V[] {\r\n return this._neighbors(id).filter(n => n.edgeCount() === 1).map(n => n._);\r\n }\r\n\r\n addVertex(v: V, parent?: S): this {\r\n const v_id = this._idFunc(v);\r\n if (this._vertexMap[v_id]) throw new Error(`Vertex '${v_id}' already exists.`);\r\n const vertex = new Vertex(this, v);\r\n if (parent) {\r\n const p_id = this._idFunc(parent);\r\n if (!this.subgraphExists(p_id)) throw new Error(`Subgraph '${p_id}' does not exist.`);\r\n vertex.parent(this._subgraphMap[p_id]);\r\n }\r\n this._vertexMap[v_id] = vertex;\r\n return this;\r\n }\r\n\r\n mergeVertices(_vertices: V[]): this {\r\n const vDiff = compare2(this.allVertices(), _vertices, v => this._idFunc(v), this._updateFunc as any);\r\n vDiff.exit.forEach(v => this.removeVertex(this._idFunc(v)));\r\n vDiff.enter.forEach(v => this.addVertex(v));\r\n vDiff.update.forEach(v => this.updateVertex(v));\r\n return this;\r\n }\r\n\r\n updateVertex(v: V): this {\r\n const v_id = this._idFunc(v);\r\n const vertex = this._vertexMap[v_id];\r\n if (!vertex) throw new Error(`Vertex '${v_id}' does not exist.`);\r\n vertex._ = v;\r\n return this;\r\n }\r\n\r\n removeVertex(id: ID): this {\r\n const v = this._vertexMap[id];\r\n if (!v) throw new Error(`Vertex '${id}' does not exist.`);\r\n v.edges().forEach(e => {\r\n this.removeEdge(e.id());\r\n });\r\n delete this._vertexMap[id];\r\n return this;\r\n }\r\n\r\n vertexParent(id: ID): S | undefined;\r\n vertexParent(id: ID, parentID: ID): this;\r\n vertexParent(id: ID, parentID?: ID): S | undefined | this {\r\n const item = this._vertexMap[id];\r\n if (!item) throw new Error(`Vertex '${id}' does not exist.`);\r\n if (parentID === void 0) {\r\n const parent = item.parent();\r\n return parent ? parent._ as S : undefined;\r\n }\r\n const parent = this._subgraphMap[parentID];\r\n if (!parent) throw new Error(`Vertex parent '${parent}' does not exist.`);\r\n item.parent(parent);\r\n return this;\r\n }\r\n\r\n // Edges ---\r\n edgeExists(id: ID): boolean {\r\n return !!this._edgeMap[id];\r\n }\r\n\r\n edge(id: ID): E {\r\n return this._edgeMap[id]._;\r\n }\r\n\r\n addEdge(e: E, parent?: S): this {\r\n const e_id = this._idFunc(e);\r\n const e_source = this._sourceFunc(e);\r\n const e_target = this._targetFunc(e);\r\n if (this._edgeMap[e_id]) throw new Error(`Edge '${e_id}' already exists.`);\r\n if (!this.vertexExists(e_source)) throw new Error(`Edge Source '${e_source}' does not exist.`);\r\n if (!this.vertexExists(e_target)) throw new Error(`Edge Target '${e_target}' does not exist.`);\r\n const edge = new Edge(this, e, this._vertexMap[e_source], this._vertexMap[e_target]);\r\n if (parent) {\r\n const p_id = this._idFunc(parent);\r\n if (!this.subgraphExists(p_id)) throw new Error(`Subgraph '${p_id}' does not exist.`);\r\n edge.parent(this._subgraphMap[p_id]);\r\n }\r\n this._edgeMap[e_id] = edge;\r\n this._vertexMap[e_source].addOutEdge(edge);\r\n this._vertexMap[e_target].addInEdge(edge);\r\n return this;\r\n }\r\n\r\n mergeEdges(_edges: E[]): this {\r\n const eDiff = compare2(this.allEdges(), _edges, e => this._idFunc(e), this._updateFunc as any);\r\n eDiff.exit.forEach(e => this.removeEdge(this._idFunc(e)));\r\n eDiff.enter.forEach(e => this.addEdge(e));\r\n eDiff.update.forEach(e => this.updateEdge(e));\r\n return this;\r\n }\r\n\r\n updateEdge(e: E): this {\r\n const e_id = this._idFunc(e);\r\n const edge = this._edgeMap[e_id];\r\n if (!edge) throw new Error(`Edge '${e_id}' does not exist.`);\r\n const old_source = edge._source.id();\r\n const new_source = this._sourceFunc(e);\r\n if (old_source !== new_source) {\r\n this._vertexMap[old_source]?.removeOutEdge(e_id);\r\n this._vertexMap[new_source]?.addOutEdge(edge);\r\n }\r\n const old_target = edge._target.id();\r\n const new_target = this._targetFunc(e);\r\n if (old_target !== new_target) {\r\n this._vertexMap[old_target]?.removeInEdge(e_id);\r\n this._vertexMap[new_target]?.addInEdge(edge);\r\n }\r\n edge._ = e;\r\n edge._source = this._vertexMap[new_source];\r\n edge._target = this._vertexMap[new_target];\r\n return this;\r\n }\r\n\r\n removeEdge(id: ID): this {\r\n const e: Edge<E> = this._edgeMap[id];\r\n if (!e) throw new Error(`Edge '${id}' does not exist.`);\r\n\r\n const e_sourceID = this._idFunc(e._source._);\r\n if (!this.vertexExists(e_sourceID)) throw new Error(`Edge Source'${e_sourceID}' does not exist.`);\r\n this._vertexMap[e_sourceID].removeOutEdge(id);\r\n\r\n const e_targetID = this._idFunc(e._target._);\r\n if (!this.vertexExists(e_targetID)) throw new Error(`Edge Target'${e_targetID}' does not exist.`);\r\n this._vertexMap[e_targetID].removeInEdge(id);\r\n\r\n delete this._edgeMap[id];\r\n return this;\r\n }\r\n\r\n protected _hwalk(item: Subgraph<S> | Vertex<V>, formatter: HierarchyFormatter<V, S>): object {\r\n if (item instanceof Subgraph) {\r\n return formatter(\"subgraph\", item._, item.children().map(child => this._hwalk(child as Subgraph<S> | Vertex<V>, formatter)));\r\n } else {\r\n return formatter(\"vertex\", item._);\r\n }\r\n }\r\n\r\n hierarchy(formatter: HierarchyFormatter<V, S>): object[] {\r\n const retVal: object[] = [];\r\n for (const id in this._subgraphMap) {\r\n const sg = this._subgraphMap[id];\r\n if (sg.parent() === undefined) {\r\n retVal.push(this._hwalk(sg, formatter));\r\n }\r\n }\r\n for (const id in this._vertexMap) {\r\n const v = this._vertexMap[id];\r\n if (v.parent() === undefined) {\r\n retVal.push(this._hwalk(v, formatter));\r\n }\r\n }\r\n return retVal;\r\n }\r\n\r\n dijkstra(source: ID, target: ID): { ids: ID[], len: number } {\r\n const edges = this.allEdges();\r\n const Q = new Set<string | number>();\r\n const prev: { [key: string]: string } = {};\r\n const dist: { [key: string]: number } = {};\r\n const adj: { [key: string]: { [key: string]: number } } = {};\r\n\r\n function vertex_with_min_dist(Q: Set<string | number>, dist: { [key: string]: number }) {\r\n let min_distance = Infinity;\r\n let u: string | number | null = null;\r\n\r\n Q.forEach(v => {\r\n if (dist[v] < min_distance) {\r\n min_distance = dist[v];\r\n u = v;\r\n }\r\n });\r\n return u;\r\n }\r\n\r\n for (let i = 0; i < edges.length; i++) {\r\n const v1 = this._sourceFunc(edges[i]);\r\n const v2 = this._targetFunc(edges[i]);\r\n const len = 1;\r\n\r\n Q.add(v1);\r\n Q.add(v2);\r\n\r\n dist[v1] = Infinity;\r\n dist[v2] = Infinity;\r\n\r\n if (adj[v1] === undefined) adj[v1] = {};\r\n if (adj[v2] === undefined) adj[v2] = {};\r\n\r\n adj[v1][v2] = len;\r\n adj[v2][v1] = len;\r\n }\r\n\r\n dist[source] = 0;\r\n\r\n while (Q.size) {\r\n const u = vertex_with_min_dist(Q, dist);\r\n if (u === null) break;\r\n const neighbors = Object.keys(adj[u]).filter(v => Q.has(v)); // Neighbor still in Q\r\n\r\n Q.delete(u);\r\n\r\n if (u === target) break; // Break when the target has been found\r\n\r\n for (const v of neighbors) {\r\n const alt = dist[u] + adj[u][v];\r\n if (alt < dist[v]) {\r\n dist[v] = alt;\r\n prev[v] = u;\r\n }\r\n }\r\n }\r\n\r\n let u = target;\r\n const ids = [u];\r\n let len = 0;\r\n\r\n while (prev[u] !== undefined) {\r\n ids.unshift(prev[u]);\r\n len += adj[u][prev[u]];\r\n u = prev[u];\r\n }\r\n return { ids, len };\r\n }\r\n\r\n sort(v_id?: string): V[] {\r\n const retVal: V[] = [];\r\n const visited: { [id: string]: boolean } = {};\r\n\r\n const visit = (vertex: Vertex<V>, ancestors: Vertex<V>[] = []) => {\r\n const v_id = vertex.id();\r\n if (visited[v_id]) return;\r\n visited[v_id] = true;\r\n ancestors.push(vertex);\r\n vertex.outEdges().forEach(e => {\r\n if (ancestors.indexOf(e._target) < 0) {\r\n visit(e._target, [...ancestors]);\r\n }\r\n });\r\n retVal.unshift(vertex._);\r\n };\r\n\r\n if (v_id) {\r\n visit(this._vertexMap[v_id]);\r\n } else {\r\n for (const key in this._vertexMap) {\r\n visit(this._vertexMap[key]);\r\n }\r\n }\r\n\r\n return retVal;\r\n }\r\n}\r\n\r\nclass Set<T> {\r\n\r\n private _content: T[] = [];\r\n get size(): number {\r\n return this._content.length;\r\n }\r\n\r\n has(_: T) {\r\n return this._content.indexOf(_) >= 0;\r\n }\r\n\r\n add(_: T) {\r\n if (!this.has(_)) {\r\n this._content.push(_);\r\n }\r\n }\r\n\r\n delete(_: T) {\r\n const idx = this._content.indexOf(_);\r\n if (idx >= 0) {\r\n this._content.splice(idx, 1);\r\n }\r\n }\r\n\r\n forEach(_: (value: T, index: number, array: T[]) => void) {\r\n this._content.forEach(_);\r\n }\r\n}\r\n","const isArray = Array.isArray;\r\nconst keyList = Object.keys;\r\nconst hasProp = Object.prototype.hasOwnProperty;\r\n\r\nexport function verboseDeepEquals(a: any, b: any, functionRefCompare: boolean = false) {\r\n if (a === b) return true;\r\n\r\n if (a && b) {\r\n if (typeof a === \"object\" && typeof b === \"object\") {\r\n const arrA = isArray(a);\r\n const arrB = isArray(b);\r\n let i;\r\n let length;\r\n let key;\r\n\r\n if (arrA && arrB) {\r\n length = a.length;\r\n if (length !== b.length) {\r\n console.warn(`lengths not equal: ${length} !== ${b.length}`);\r\n return false;\r\n }\r\n for (i = length; i-- !== 0;)\r\n if (!verboseDeepEquals(a[i], b[i], functionRefCompare)) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n if (arrA !== arrB) {\r\n console.warn(`arrays not equal: ${arrA} !== ${arrB}`);\r\n return false;\r\n }\r\n\r\n const dateA = a instanceof Date;\r\n const dateB = b instanceof Date;\r\n if (dateA !== dateB) {\r\n console.warn(`dates not equal: ${dateA} !== ${dateB}`);\r\n return false;\r\n }\r\n if (dateA && dateB) {\r\n const retVal = a.getTime() === b.getTime();\r\n if (!retVal) {\r\n console.warn(`dates not equal: ${a.getTime()} !== ${b.getTime()}`);\r\n }\r\n return retVal;\r\n }\r\n\r\n const regexpA = a instanceof RegExp;\r\n const regexpB = b instanceof RegExp;\r\n if (regexpA !== regexpB) {\r\n console.warn(`regexps not equal: ${regexpA} !== ${regexpB}`);\r\n return false;\r\n }\r\n if (regexpA && regexpB) {\r\n const retVal = a.toString() === b.toString();\r\n if (!retVal) {\r\n console.warn(`regexps not equal: ${a.toString()} !== ${b.toString()}`);\r\n }\r\n return retVal;\r\n }\r\n\r\n const keys = keyList(a);\r\n length = keys.length;\r\n\r\n if (length !== keyList(b).length) {\r\n console.warn(`key lengths not equal: ${length} !== ${keyList(b).length}`);\r\n return false;\r\n }\r\n\r\n for (i = length; i-- !== 0;)\r\n if (!hasProp.call(b, keys[i])) {\r\n console.warn(`${keys[i]} in a but not b`);\r\n return false;\r\n }\r\n\r\n for (i = length; i-- !== 0;) {\r\n key = keys[i];\r\n if (!verboseDeepEquals(a[key], b[key], functionRefCompare)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n } else if (!functionRefCompare && typeof a === \"function\" && typeof b === \"function\") {\r\n const retVal = a.toString() === b.toString();\r\n if (!retVal) {\r\n console.warn(`functions not equal: ${a.toString()} !== ${b.toString()}`);\r\n }\r\n return retVal;\r\n }\r\n }\r\n\r\n const retVal = a !== a && b !== b;\r\n if (!retVal) {\r\n console.warn(`values not equal: ${a} !== ${b}`);\r\n }\r\n return retVal;\r\n}\r\n\r\nexport function deepEquals(a: any, b: any, functionRefCompare: boolean = false) {\r\n if (a === b) return true;\r\n\r\n if (a && b) {\r\n if (typeof a === \"object\" && typeof b === \"object\") {\r\n const arrA = isArray(a);\r\n const arrB = isArray(b);\r\n let i;\r\n let length;\r\n let key;\r\n\r\n if (arrA && arrB) {\r\n length = a.length;\r\n if (length !== b.length) return false;\r\n for (i = length; i-- !== 0;)\r\n if (!deepEquals(a[i], b[i], functionRefCompare)) return false;\r\n return true;\r\n }\r\n\r\n if (arrA !== arrB) return false;\r\n\r\n const dateA = a instanceof Date;\r\n const dateB = b instanceof Date;\r\n if (dateA !== dateB) return false;\r\n if (dateA && dateB) return a.getTime() === b.getTime();\r\n\r\n const regexpA = a instanceof RegExp;\r\n const regexpB = b instanceof RegExp;\r\n if (regexpA !== regexpB) return false;\r\n if (regexpA && regexpB) return a.toString() === b.toString();\r\n\r\n const keys = keyList(a);\r\n length = keys.length;\r\n\r\n if (length !== keyList(b).length)\r\n return false;\r\n\r\n for (i = length; i-- !== 0;)\r\n if (!hasProp.call(b, keys[i])) return false;\r\n\r\n for (i = length; i-- !== 0;) {\r\n key = keys[i];\r\n if (!deepEquals(a[key], b[key], functionRefCompare)) return false;\r\n }\r\n\r\n return true;\r\n } else if (!functionRefCompare && typeof a === \"function\" && typeof b === \"function\") {\r\n return a.toString() === b.toString();\r\n }\r\n }\r\n\r\n return a !== a && b !== b;\r\n}\r\n\r\nexport function update<T>(origItem: T, newItem: T, functionRefCompare: boolean = false): T {\r\n return deepEquals(origItem, newItem, functionRefCompare) ? origItem : newItem;\r\n}\r\n","declare const process: any;\r\n\r\nexport const root: any = typeof globalThis !== \"undefined\" ? globalThis : window;\r\nexport const isBrowser: boolean = typeof window !== \"undefined\" && root === window;\r\nexport const isNode: boolean = typeof process !== \"undefined\" && process.versions != null && process.versions.node != null;\r\nexport const isCI: boolean = isNode && process.env != null && (process.env.TRAVIS != null || process.env.GITHUB_ACTIONS != null || process.env.CI != null);\r\n\r\nexport function getScriptSrc(partial: string) {\r\n const scripts = document.scripts || [];\r\n for (let i = document.scripts.length - 1; i >= 0; --i) {\r\n const script = scripts[i];\r\n if (script.src) {\r\n const idx = script.src.indexOf(partial);\r\n if (idx >= 0) {\r\n return script.src.substring(0, idx);\r\n }\r\n }\r\n }\r\n return \"\";\r\n}\r\n","/**\r\n * A generic Stack\r\n */\r\nexport class Stack<T> {\r\n private stack: T[] = [];\r\n\r\n /**\r\n * Push element onto the stack\r\n *\r\n * @param e - element to push\r\n */\r\n push(e: T) {\r\n this.stack.push(e);\r\n return e;\r\n }\r\n\r\n /**\r\n * Pop element off the stack\r\n */\r\n pop(): T | undefined {\r\n return this.stack.pop();\r\n }\r\n\r\n /**\r\n * Top item on the stack\r\n *\r\n * @returns Top element on the stack\r\n */\r\n top(): T | undefined {\r\n return this.stack.length ? this.stack[this.stack.length - 1] : undefined;\r\n }\r\n\r\n /**\r\n * Depth of stack\r\n *\r\n * @returns Depth\r\n */\r\n depth(): number {\r\n return this.stack.length;\r\n }\r\n}\r\n","/* eslint-disable no-console */\r\nimport { isNode } from \"./platform.ts\";\r\nimport { Stack } from \"./stack.ts\";\r\n\r\nexport enum Level {\r\n debug,\r\n info,\r\n notice,\r\n warning,\r\n error,\r\n critical,\r\n alert,\r\n emergency\r\n}\r\n\r\nconst colours: { [key: string]: string } = {\r\n debug: \"cyan\",\r\n info: \"green\",\r\n notice: \"grey\",\r\n warning: \"blue\",\r\n error: \"red\",\r\n critical: \"magenta\",\r\n alert: \"magenta\",\r\n emergency: \"magenta\"\r\n};\r\n\r\nexport interface Writer {\r\n write?(dateTime: string, level: Level, id: string, msg: string): void;\r\n rawWrite?(dateTime: string, level: Level, id: string, msg: string | object): void;\r\n}\r\n\r\nclass ConsoleWriter implements Writer {\r\n write(dateTime: string, level: Level, id: string, msg: string) {\r\n if (isNode) {\r\n console.log(`[${dateTime}] ${Level[level].toUpperCase()} ${id}: ${msg}`);\r\n } else {\r\n console.log(`[${dateTime}] %c${Level[level].toUpperCase()}%c ${id}: ${msg}`, `color:${colours[Level[level]]}`, \"\");\r\n }\r\n }\r\n}\r\n\r\nexport class Logging {\r\n private static _instance: Logging;\r\n private _levelStack = new Stack<Level>();\r\n private _level = Level.info;\r\n private _filter: string = \"\";\r\n private _writer: Writer = new ConsoleWriter();\r\n\r\n public static Instance() {\r\n return this._instance || (this._instance = new this());\r\n }\r\n\r\n private constructor() {\r\n }\r\n\r\n private stringify(obj: object): string {\r\n const cache: any[] = [];\r\n return JSON.stringify(obj, function (_key, value) {\r\n if (typeof value === \"object\" && value !== null) {\r\n if (cache.indexOf(value) !== -1) {\r\n return;\r\n }\r\n cache.push(value);\r\n }\r\n return value;\r\n }, 2);\r\n }\r\n\r\n writer(): Writer;\r\n writer(_: Writer): Logging;\r\n writer(_?: Writer): Writer | Logging {\r\n if (_ === void 0) return this._writer;\r\n this._writer = _;\r\n return this;\r\n }\r\n\r\n log(level: Level, id: string, msg: string | object) {\r\n if (level < this._level) return;\r\n if (this._filter && this._filter !== id) return;\r\n\r\n const dateTime = new Date().toISOString();\r\n\r\n if (this._writer.rawWrite) {\r\n this._writer.rawWrite(dateTime, level, id, msg);\r\n } else {\r\n if (typeof msg !== \"string\") {\r\n msg = this.stringify(msg);\r\n }\r\n\r\n if (this._writer.write) {\r\n this._writer.write(dateTime, level, id, msg);\r\n }\r\n }\r\n }\r\n\r\n debug(id: string, msg: string | object) {\r\n this.log(Level.debug, id, msg);\r\n }\r\n\r\n info(id: string, msg: string | object) {\r\n this.log(Level.info, id, msg);\r\n }\r\n\r\n notice(id: string, msg: string | object) {\r\n this.log(Level.notice, id, msg);\r\n }\r\n\r\n warning(id: string, msg: string | object) {\r\n this.log(Level.warning, id, msg);\r\n }\r\n\r\n error(id: string, msg: string | object) {\r\n this.log(Level.error, id, msg);\r\n }\r\n\r\n critical(id: string, msg: string | object) {\r\n this.log(Level.critical, id, msg);\r\n }\r\n\r\n alert(id: string, msg: string | object) {\r\n this.log(Level.alert, id, msg);\r\n }\r\n\r\n emergency(id: string, msg: string | object) {\r\n this.log(Level.emergency, id, msg);\r\n }\r\n\r\n level(): Level;\r\n level(_: Level): this;\r\n level(_?: Level): Level | this {\r\n if (_ === void 0) return this._level;\r\n this._level = _;\r\n return this;\r\n }\r\n\r\n pushLevel(_: Level): this {\r\n this._levelStack.push(this._level);\r\n this._level = _;\r\n return this;\r\n }\r\n\r\n popLevel(): this {\r\n this._level = this._levelStack.pop()!;\r\n return this;\r\n }\r\n\r\n filter(): string;\r\n filter(_: string): this;\r\n filter(_?: string): string | this {\r\n if (_ === void 0) return this._filter;\r\n this._filter = _;\r\n return this;\r\n }\r\n}\r\nexport const logger = Logging.Instance();\r\n\r\nexport class ScopedLogging {\r\n protected _scopeID: string;\r\n\r\n constructor(scopeID: string) {\r\n this._scopeID = scopeID;\r\n }\r\n\r\n debug(msg: string | object) {\r\n logger.debug(this._scopeID, msg);\r\n }\r\n\r\n info(msg: string | object) {\r\n logger.info(this._scopeID, msg);\r\n }\r\n\r\n notice(msg: string | object) {\r\n logger.notice(this._scopeID, msg);\r\n }\r\n\r\n warning(msg: string | object) {\r\n logger.warning(this._scopeID, msg);\r\n }\r\n\r\n error(msg: string | object) {\r\n logger.error(this._scopeID, msg);\r\n }\r\n\r\n critical(msg: string | object) {\r\n logger.critical(this._scopeID, msg);\r\n }\r\n\r\n alert(msg: string | object) {\r\n logger.alert(this._scopeID, msg);\r\n }\r\n\r\n emergency(msg: string | object) {\r\n logger.emergency(this._scopeID, msg);\r\n }\r\n\r\n pushLevel(_: Level): this {\r\n logger.pushLevel(_);\r\n return this;\r\n }\r\n\r\n popLevel(): this {\r\n logger.popLevel();\r\n return this;\r\n }\r\n}\r\n\r\nexport function scopedLogger(scopeID: string, filter: boolean = false) {\r\n if (filter) {\r\n logger.filter(scopeID);\r\n }\r\n return new ScopedLogging(scopeID);\r\n}\r\n","/**\r\n * degreesToRadians - converts degrees to radians\r\n * Usage: degreesToRadians(1080);\r\n *\r\n * @param degrees\r\n * @returns Number radians\r\n */\r\nexport function degreesToRadians(degrees: number): number {\r\n return degrees * (Math.PI / 180);\r\n}\r\n\r\n/**\r\n * radiansToDegrees - converts radians to degrees\r\n * Usage: radiansToDegrees(7);\r\n *\r\n * @param radians\r\n * @returns Number degreees\r\n */\r\nexport function radiansToDegrees(radians: number): number {\r\n return radians * (180 / Math.PI);\r\n}\r\n\r\n/**\r\n * polarToCartesian - converts (r, theta) to {x, y}\r\n * Usage: polarToCartesian(5, Math.PI);\r\n *\r\n * @param r radius\r\n * @param theta angle in radians\r\n * @returns { x: number, y: number }\r\n */\r\nexport function polarToCartesian(r: number, theta: number): { x:number, y:number } {\r\n return {\r\n x: r * Math.cos(theta),\r\n y: r * Math.sin(theta)\r\n };\r\n}\r\n\r\n/**\r\n * cartesianToPolar - converts (x, y) to {r, theta}\r\n * Usage: cartesianToPolar(100, 200);\r\n *\r\n * @param x\r\n * @param y\r\n * @returns { r: number, theta: number }\r\n */\r\nexport function cartesianToPolar(x: number, y: number): { r: number, theta: number } {\r\n return {\r\n r: Math.sqrt(x * x + y * y),\r\n theta: Math.atan2(y, x)\r\n };\r\n}\r\n\r\n/**\r\n * normalizeRadians - normalizes a radian value to within the provided range\r\n * Usage: normalizeRadians(7);\r\n *\r\n * @param radians value to be normalized\r\n * @param min lower limit\r\n * @param max upper limit\r\n * @returns Number normalized to within the provided range\r\n */\r\nexport function normalizeRadians(radians: number, min: number = -Math.PI, max: number = Math.PI): number {\r\n return normalize(radians, min, max);\r\n}\r\n\r\n/**\r\n * normalizeDegrees - normalizes a degree value to within the provided range\r\n * Usage: normalizeDegrees(1080);\r\n *\r\n * @param degrees value to be normalized\r\n * @param min lower limit\r\n * @param max upper limit\r\n * @returns Number normalized to within the provided range\r\n */\r\nexport function normalizeDegrees(degrees: number, min: number = -180, max: number = 180): number {\r\n return normalize(degrees, min, max);\r\n}\r\n\r\n/**\r\n * normalize - normalizes a value to within the provided range\r\n * Usage: normalize(1000, 0, 365);\r\n *\r\n * @param value value to be normalized\r\n * @param min lower limit\r\n * @param max upper limit\r\n * @returns Number normalized to within the provided range\r\n */\r\nexport function normalize(value: number, min: number, max: number): number {\r\n const spread = max - min;\r\n const offsetValue = value - min;\r\n return (offsetValue - (Math.floor(offsetValue / spread) * spread)) + min;\r\n}\r\n","export type RecursivePartial<T> = {\r\n [P in keyof T]?: T[P] extends (infer U)[] ? RecursivePartial<U>[] :\r\n T[P] extends object | undefined ? RecursivePartial<T[P]> : T[P];\r\n};\r\n\r\n/**\r\n * inner - return inner property of Object\r\n * Usage: inner(\"some.prop.to.locate\", obj);\r\n *\r\n * @param prop - property to locate\r\n * @param obj - object to locate property in\r\n */\r\nexport function inner(prop: string, obj: any): any {\r\n if (prop === void 0 || obj === void 0) return void 0;\r\n for (const item of prop.split(\".\")) {\r\n if (!obj.hasOwnProperty(item)) {\r\n return undefined;\r\n }\r\n obj = obj[item];\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * exists - return true if inner property of Object exists\r\n * Usage: exists(\"some.prop.to.locate\", obj);\r\n *\r\n * @param prop - property to locate\r\n * @param obj - object to locate property in\r\n */\r\nexport function exists(prop: string, obj: any): boolean {\r\n return inner(prop, obj) !== undefined;\r\n}\r\n\r\nfunction _mixin(dest: any, source: any): any {\r\n const empty: any = {};\r\n for (const key in source) {\r\n if (!source.hasOwnProperty(key)) continue;\r\n if (key === \"__proto__\" || key === \"constructor\") continue;\r\n let s: any = source[key];\r\n if (s instanceof Array) {\r\n // TODO: Do we need to support arrays?\r\n } else if (typeof s === \"object\") {\r\n s = deepMixin(dest[key], s);\r\n }\r\n if (!(key in dest) || (dest[key] !== s && (!(key in empty) || empty[key] !== s))) {\r\n dest[key] = s;\r\n }\r\n }\r\n return dest;\r\n}\r\n\r\n/**\r\n * deepMixin - combine several objects from right to left\r\n * Usage: deepMixin({a: \"a\"}, {b: \"b\"});\r\n *\r\n * @param dest - target object to mix into.\r\n * @param sources - objects to mix in\r\n */\r\nexport function deepMixin(dest: any = {}, ...sources: any[]): any {\r\n if (typeof dest !== \"object\") throw new Error(`Destination \"${dest}\" must be an object.`);\r\n for (const source of sources) {\r\n _mixin(dest, source);\r\n }\r\n return dest;\r\n}\r\n\r\n/**\r\n * deepMixinT - combine several objects of Partial<T> from right to left\r\n * Usage: deepMixinT<MyInterface>({a: \"a\"}, {b: \"b\"});\r\n *\r\n * Note: Only provided as a convenience, so user gets auto completion based on destination type.\r\n *\r\n * @param dest - target object to mix into.\r\n * @param sources - objects to mix in\r\n */\r\nexport function deepMixinT<T>(dest: RecursivePartial<T> = {}, ...sources: Array<RecursivePartial<T>>): T {\r\n return deepMixin(dest, ...sources);\r\n}\r\n\r\n/**\r\n * safeStingify - JSONsimilar to .stringify, except ignores circular references.\r\n * Usage: safeStingify(object);\r\n *\r\n * @param obj - any object.\r\n */\r\nexport function safeStringify(obj: object) {\r\n const cache: any[] = [];\r\n return JSON.stringify(obj, function (key, value) {\r\n if (typeof value === \"object\" && value !== null) {\r\n if (cache.indexOf(value) !== -1) {\r\n return;\r\n }\r\n\r\n cache.push(value);\r\n }\r\n return value;\r\n });\r\n}\r\n\r\nexport function isArray(arg: any): arg is any[] {\r\n if (Array.isArray !== undefined) {\r\n return Array.isArray(arg);\r\n }\r\n return Object.prototype.toString.call(arg) === \"[object Array]\";\r\n}\r\n\r\nexport interface ClassMeta {\r\n module: string;\r\n file: string;\r\n class: string;\r\n}\r\n\r\nexport function classID2Meta(classID: string): ClassMeta {\r\n const info = classID.split(\"_\");\r\n const classInfo = info[1].split(\".\");\r\n return {\r\n module: `@hpcc-js/${info[0]}`,\r\n file: classInfo[0],\r\n class: classInfo[1] || classInfo[0]\r\n };\r\n}\r\n","/**\r\n * IObserverHandle - Reference to an observing instance\r\n */\r\nexport interface IObserverHandle {\r\n release(): void;\r\n unwatch(): void;\r\n}\r\n\r\nexport type CallbackFunction = (...args: any[]) => void;\r\n\r\nclass ObserverHandle<T extends string> implements IObserverHandle {\r\n private eventTarget: Observable<T>;\r\n private eventID: T;\r\n private callback: CallbackFunction;\r\n\r\n constructor(eventTarget: Observable<T>, eventID: T, callback: CallbackFunction) {\r\n this.eventTarget = eventTarget;\r\n this.eventID = eventID;\r\n this.callback = callback;\r\n }\r\n\r\n release() {\r\n this.eventTarget.removeObserver(this.eventID, this.callback);\r\n }\r\n\r\n unwatch() {\r\n this.release();\r\n }\r\n}\r\n\r\nexport type EventID = string;\r\nexport class Observable<T extends EventID> {\r\n private _eventObservers: { [eventID: string]: CallbackFunction[] } = {};\r\n\r\n constructor(...events: T[]) {\r\n }\r\n\r\n addObserver(eventID: T, callback: CallbackFunction): IObserverHandle {\r\n let eventObservers: CallbackFunction[] = this._eventObservers[eventID];\r\n if (!eventObservers) {\r\n eventObservers = [];\r\n this._eventObservers[eventID] = eventObservers;\r\n }\r\n eventObservers.push(callback);\r\n return new ObserverHandle<T>(this, eventID, callback);\r\n }\r\n\r\n removeObserver(eventID: T, callback: CallbackFunction): this {\r\n const eventObservers = this._eventObservers[eventID];\r\n if (eventObservers) {\r\n for (let i = eventObservers.length - 1; i >= 0; --i) {\r\n if (eventObservers[i] === callback) {\r\n eventObservers.splice(i, 1);\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n dispatchEvent(eventID: T, ...args: any[]): this {\r\n const eventObservers = this._eventObservers[eventID];\r\n if (eventObservers) {\r\n for (const observer of eventObservers) {\r\n observer(...args);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n private _hasObserver(eventID: string): boolean {\r\n const eventObservers = this._eventObservers[eventID];\r\n for (const observer in eventObservers) {\r\n if (eventObservers[observer]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n hasObserver(_eventID?: T): boolean {\r\n if (_eventID !== void 0) {\r\n return this._hasObserver(_eventID);\r\n }\r\n for (const eventID in this._eventObservers) {\r\n if (this._hasObserver(eventID)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n","import type { IObserverHandle } from \"./observer.ts\";\r\nimport { root } from \"./platform.ts\";\r\n\r\nexport type RequestAnimationFrame = (callback: FrameRequestCallback) => number | undefined;\r\nexport type CancelAnimationFrame = (handle: number) => void | undefined;\r\n\r\nlet requestAnimationFrame: RequestAnimationFrame;\r\n// let cancelAnimationFrame: CancelAnimationFrame;\r\n\r\n(function () {\r\n if (root.requestAnimationFrame) {\r\n requestAnimationFrame = root.requestAnimationFrame;\r\n // cancelAnimationFrame = root.cancelAnimationFrame;\r\n } else {\r\n let lastTime = 0;\r\n requestAnimationFrame = function (callback: FrameRequestCallback): any {\r\n const currTime = new Date().getTime();\r\n const timeToCall = Math.max(0, 16 - (currTime - lastTime));\r\n const id = setTimeout(() => callback(currTime + timeToCall), timeToCall);\r\n lastTime = currTime + timeToCall;\r\n return id;\r\n };\r\n // cancelAnimationFrame = function (handle: number): void {\r\n // clearTimeout(handle);\r\n // };\r\n }\r\n})();\r\n\r\nexport class Message {\r\n\r\n get canConflate(): boolean { return false; }\r\n conflate(other: Message): boolean {\r\n return false;\r\n }\r\n\r\n void(): boolean {\r\n return false;\r\n }\r\n}\r\ntype MessageConstructor<T extends Message> = new (...args: any[]) => T;\r\n\r\nexport type Callback<T extends Message> = (messages: T[]) => void;\r\nexport { IObserverHandle };\r\n\r\ntype ObserverAdapter<T extends Message = Message> = {\r\n id: number;\r\n type?: MessageConstructor<T>;\r\n callback: Callback<T>;\r\n};\r\n\r\nexport class Dispatch<T extends Message = Message> {\r\n\r\n private _observerID: number = 0;\r\n private _observers: ObserverAdapter<T>[] = [];\r\n private _messageBuffer: T[] = [];\r\n private _rafHandle: number | undefined = undefined;\r\n\r\n constructor() {\r\n }\r\n\r\n private observers(): ObserverAdapter<T>[] {\r\n return this._observers;\r\n }\r\n\r\n private messages(): T[] {\r\n const retVal: T[] = [];\r\n this._messageBuffer.forEach(msg => {\r\n if (!retVal.some(msg2 => msg2.canConflate && msg2.conflate(msg))) {\r\n retVal.push(msg);\r\n }\r\n });\r\n return retVal;\r\n }\r\n\r\n private dispatchAll() {\r\n this._rafHandle = undefined;\r\n this.dispatch(this.messages());\r\n this.flush();\r\n }\r\n\r\n private dispatch(messages: T[]) {\r\n if (messages.length === 0) return;\r\n this.observers().forEach(o => {\r\n const msgs = messages.filter(m => !m.void() && (o.type === undefined || m instanceof o.type));\r\n if (msgs.length) {\r\n o.callback(msgs);\r\n }\r\n });\r\n }\r\n\r\n hasObserver(): boolean {\r\n return this._observers.length > 0;\r\n }\r\n\r\n flush() {\r\n this._messageBuffer = [];\r\n }\r\n\r\n send(msg: T) {\r\n if (!this.hasObserver()) return;\r\n this.dispatch([msg]);\r\n }\r\n\r\n post(msg: T) {\r\n if (!this.hasObserver()) return;\r\n this._messageBuffer.push(msg);\r\n if (this._rafHandle === undefined) {\r\n this._rafHandle = requestAnimationFrame(() => this.dispatchAll());\r\n }\r\n }\r\n\r\n attach(callback: Callback<T>, type?: MessageConstructor<T>): IObserverHandle {\r\n const context = this;\r\n const id = ++this._observerID;\r\n this._observers.push({ id, type, callback });\r\n return {\r\n release() {\r\n context._observers = context._observers.filter(o => o.id !== id);\r\n },\r\n unwatch() {\r\n this.release();\r\n }\r\n };\r\n }\r\n}\r\n","import { StringAnyMap } from \"./dictionary.ts\";\r\nimport { Stack } from \"./stack.ts\";\r\n\r\nexport class XMLNode {\r\n name: string = \"\";\r\n $: StringAnyMap = {};\r\n protected _children: XMLNode[] = [];\r\n content: string = \"\";\r\n\r\n constructor(name: string) {\r\n this.name = name;\r\n }\r\n\r\n appendAttribute(key: string, val: string) {\r\n this.$[key] = val;\r\n }\r\n\r\n appendContent(content: string) {\r\n this.content += content;\r\n }\r\n\r\n appendChild(child: XMLNode) {\r\n this._children.push(child);\r\n }\r\n\r\n children(tag?: string): XMLNode[] {\r\n if (tag === undefined) {\r\n return this._children;\r\n }\r\n return this._children.filter((xmlNode) => {\r\n return xmlNode.name === tag;\r\n });\r\n }\r\n}\r\n\r\nexport class SAXStackParser {\r\n root?: XMLNode;\r\n stack: Stack<XMLNode> = new Stack<XMLNode>();\r\n\r\n constructor() {\r\n }\r\n\r\n private walkDoc(node: any) {\r\n const xmlNode = this._startXMLNode(node);\r\n if (node.attributes) {\r\n for (let i = 0; i < node.attributes.length; ++i) {\r\n const attribute = node.attributes.item(i);\r\n this.attributes(attribute.nodeName, attribute.nodeValue);\r\n }\r\n }\r\n this.startXMLNode(xmlNode);\r\n if (node.childNodes) {\r\n for (let i = 0; i < node.childNodes.length; ++i) {\r\n const childNode = node.childNodes.item(i);\r\n if (childNode.nodeType === childNode.TEXT_NODE) {\r\n this.characters(childNode.nodeValue!);\r\n } else {\r\n this.walkDoc(childNode);\r\n }\r\n }\r\n }\r\n this.endXMLNode(this.stack.pop()!);\r\n }\r\n\r\n private _startXMLNode(node: Node): XMLNode {\r\n const newNode = new XMLNode(node.nodeName);\r\n if (!this.stack.depth()) {\r\n this.root = newNode;\r\n } else {\r\n this.stack.top()!.appendChild(newNode);\r\n }\r\n return this.stack.push(newNode);\r\n }\r\n\r\n parse(xml: string) {\r\n const domParser = new DOMParser();\r\n const doc = domParser.parseFromString(xml, \"application/xml\");\r\n this.startDocument();\r\n this.walkDoc(doc);\r\n this.endDocument();\r\n }\r\n\r\n // Callbacks ---\r\n startDocument() {\r\n }\r\n\r\n endDocument() {\r\n }\r\n\r\n startXMLNode(node: XMLNode) {\r\n }\r\n\r\n endXMLNode(node: XMLNode) {\r\n }\r\n\r\n attributes(key: string, val: any) {\r\n this.stack.top()!.appendAttribute(key, val);\r\n }\r\n\r\n characters(text: string) {\r\n this.stack.top()!.appendContent(text);\r\n }\r\n}\r\n\r\nclass XML2JSONParser extends SAXStackParser {\r\n startXMLNode(node: XMLNode) {\r\n super.startXMLNode(node);\r\n switch (node.name) {\r\n case \"xs:element\":\r\n break;\r\n case \"xs:simpleType\":\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n endXMLNode(node: XMLNode) {\r\n switch (node.name) {\r\n case \"xs:element\":\r\n break;\r\n case \"xs:simpleType\":\r\n break;\r\n default:\r\n break;\r\n }\r\n super.endXMLNode(node);\r\n }\r\n}\r\n\r\nexport function xml2json(xml: string): XMLNode | undefined {\r\n const saxParser = new XML2JSONParser();\r\n saxParser.parse(xml);\r\n return saxParser.root;\r\n}\r\n","import { Dispatch, IObserverHandle, Message } from \"./dispatch.ts\";\r\nimport { deepEquals } from \"./immutable.ts\";\r\n\r\nclass PropChangedMessage extends Message {\r\n\r\n constructor(readonly property: string, public newValue: any, public oldValue?: any) {\r\n super();\r\n }\r\n\r\n get canConflate(): boolean { return true; }\r\n conflate(other: PropChangedMessage) {\r\n if (this.property === other.property) {\r\n this.newValue = other.newValue;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n void(): boolean {\r\n return deepEquals(this.newValue, this.oldValue);\r\n }\r\n}\r\n\r\nexport interface IEvent {\r\n id: string;\r\n oldValue: any;\r\n newValue: any;\r\n}\r\n\r\nexport type StatePropCallback = (changes: IEvent) => void;\r\nexport type StateCallback = (changes: IEvent[]) => void;\r\nexport type StateEvents = \"propChanged\" | \"changed\";\r\nexport class StateObject<U, I> {\r\n private _espState: Partial<U> = {} as U;\r\n private _dispatch = new Dispatch<PropChangedMessage>();\r\n private _monitorHandle?: any;\r\n protected _monitorTickCount: number = 0;\r\n\r\n protected clear(newVals?: Partial<I>) {\r\n this._espState = {} as U;\r\n if (newVals !== void 0) {\r\n this.set(newVals as I);\r\n }\r\n this._monitorTickCount = 0;\r\n }\r\n\r\n protected get(): U;\r\n protected get<K extends keyof U>(key: K, defValue?: U[K]): U[K];\r\n protected get<K extends keyof U>(key?: K, defValue?: U[K]): Partial<U> | U[K] | undefined {\r\n if (key === void 0) {\r\n return this._espState;\r\n }\r\n return this.has(key) ? this._espState[key] : defValue;\r\n }\r\n\r\n protected set(newVals: I): void;\r\n protected set<K extends keyof U>(key: K, newVal: U[K], batchMode?: boolean): void;\r\n protected set<K extends keyof U>(keyOrNewVals: K | U, newVal?: U[K]): void {\r\n if (typeof keyOrNewVals === \"string\") {\r\n return this.setSingle(keyOrNewVals as any, newVal as U[K]); // TODO: \"as any\" should not be needed (TS >= 3.1.x)\r\n }\r\n this.setAll(keyOrNewVals as Partial<U>);\r\n }\r\n\r\n private setSingle<K extends keyof U>(key: K, newVal: U[K] | undefined): void {\r\n const oldVal = this._espState[key];\r\n this._espState[key] = newVal;\r\n this._dispatch.post(new PropChangedMessage(key as string, newVal, oldVal));\r\n }\r\n\r\n private setAll(_: Partial<U>): void {\r\n for (const key in _) {\r\n if (_.hasOwnProperty(key)) {\r\n this.setSingle(key, _[key]);\r\n }\r\n }\r\n }\r\n\r\n protected has<K extends keyof U>(key: K): boolean {\r\n return this._espState[key] !== void 0;\r\n }\r\n\r\n addObserver(eventID: StateEvents, callback: StateCallback): IObserverHandle;\r\n addObserver(eventID: StateEvents, propID: keyof U, callback: StatePropCallback): IObserverHandle;\r\n addObserver(eventID: StateEvents, propIDOrCallback: StateCallback | keyof U, callback?: StatePropCallback): IObserverHandle {\r\n if (this.isCallback(propIDOrCallback)) {\r\n if (eventID !== \"changed\") throw new Error(\"Invalid eventID: \" + eventID);\r\n return this._dispatch.attach((messages: PropChangedMessage[]) => {\r\n propIDOrCallback(messages.map(m => ({\r\n id: m.property,\r\n oldValue: m.oldValue,\r\n newValue: m.newValue\r\n })));\r\n });\r\n } else {\r\n if (eventID !== \"propChanged\") throw new Error(\"Invalid eventID: \" + eventID);\r\n return this._dispatch.attach((messages: PropChangedMessage[]) => {\r\n const filteredMessages = messages.filter(m => m.property === propIDOrCallback);\r\n if (filteredMessages.length) {\r\n if (filteredMessages.length > 1) {\r\n console.warn(\"Should only be 1 message?\");\r\n }\r\n const event = filteredMessages[filteredMessages.length - 1];\r\n callback!({\r\n id: event.property,\r\n oldValue: event.oldValue,\r\n newValue: event.newValue\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n on(eventID: StateEvents, callback: StateCallback): this;\r\n on(eventID: StateEvents, propID: keyof U, callback: StatePropCallback): this;\r\n on(eventID: StateEvents, propIDOrCallback: StateCallback | keyof U, callback?: StatePropCallback): this {\r\n this.addObserver(eventID, propIDOrCallback as any, callback as any);\r\n return this;\r\n }\r\n\r\n protected isCallback(propIDOrCallback: StateCallback | keyof U): propIDOrCallback is StateCallback {\r\n return (typeof propIDOrCallback === \"function\");\r\n }\r\n\r\n protected hasEventListener(): boolean {\r\n return this._dispatch.hasObserver();\r\n }\r\n\r\n // Monitoring ---\r\n protected async refresh(full: boolean = false): Promise<this> {\r\n await Promise.resolve();\r\n return this;\r\n }\r\n\r\n protected _monitor(): void {\r\n if (this._monitorHandle) {\r\n this._monitorTickCount = 0;\r\n return;\r\n }\r\n\r\n this._monitorHandle = setTimeout(() => {\r\n const refreshPromise: Promise<any> = this.hasEventListener() ? this.refresh() : Promise.resolve();\r\n refreshPromise.then(() => {\r\n this._monitor();\r\n });\r\n delete this._monitorHandle;\r\n }, this._monitorTimeoutDuration());\r\n }\r\n\r\n protected _monitorTimeoutDuration(): number {\r\n ++this._monitorTickCount;\r\n if (this._monitorTickCount <= 1) { // Once\r\n return 0;\r\n }\r\n return 30000;\r\n }\r\n\r\n watch(callback: StateCallback, triggerChange: boolean = true): IObserverHandle {\r\n if (typeof callback !== \"function\") {\r\n throw new Error(\"Invalid Callback\");\r\n }\r\n if (triggerChange) {\r\n setTimeout(() => {\r\n const props: any = this.get();\r\n const changes: IEvent[] = [];\r\n for (const key in props) {\r\n if (props.hasOwnProperty(props)) {\r\n changes.push({ id: key, newValue: props[key], oldValue: undefined });\r\n }\r\n }\r\n callback(changes);\r\n }, 0);\r\n }\r\n const retVal = this.addObserver(\"changed\", callback);\r\n this._monitor();\r\n return retVal;\r\n }\r\n}\r\n","export function trim(str: string, char: string): string {\r\n if (typeof char !== \"string\") return str;\r\n if (char.length === 0) return str;\r\n while (str.indexOf(char) === 0) {\r\n str = str.substring(1);\r\n }\r\n while (endsWith(str, char)) {\r\n str = str.substring(0, str.length - 1);\r\n }\r\n return str;\r\n}\r\n\r\nexport function endsWith(origString: string, searchString: string, position?: number) {\r\n const subjectString = origString.toString();\r\n if (typeof position !== \"number\" || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\r\n position = subjectString.length;\r\n }\r\n position -= searchString.length;\r\n const lastIndex = subjectString.lastIndexOf(searchString, position);\r\n return lastIndex !== -1 && lastIndex === position;\r\n}\r\n","export function join(...segments: string[]) {\r\n const parts: string[] = segments.reduce((parts: string[], segment) => {\r\n // Remove leading slashes from non-first part.\r\n if (parts.length > 0) {\r\n segment = segment.replace(/^\\//, \"\");\r\n }\r\n // Remove trailing slashes.\r\n segment = segment.replace(/\\/$/, \"\");\r\n return [...parts, ...segment.split(\"/\")];\r\n }, []);\r\n const resultParts = [];\r\n for (const part of parts) {\r\n if (part === \".\") {\r\n continue;\r\n }\r\n if (part === \"..\") {\r\n resultParts.pop();\r\n continue;\r\n }\r\n resultParts.push(part);\r\n }\r\n return resultParts.join(\"/\");\r\n}\r\n\r\nexport function dirname(path: string) {\r\n return join(path, \"..\");\r\n}\r\n","const BASE64_ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\r\n\r\nfunction toUTF8Bytes(value: string): Uint8Array {\r\n if (typeof TextEncoder !== \"undefined\") {\r\n return new TextEncoder().encode(value);\r\n }\r\n\r\n const encoded = encodeURIComponent(value);\r\n const bytes: number[] = [];\r\n for (let i = 0; i < encoded.length; ++i) {\r\n if (encoded[i] === \"%\") {\r\n bytes.push(parseInt(encoded.substring(i + 1, i + 3), 16));\r\n i += 2;\r\n } else {\r\n bytes.push(encoded.charCodeAt(i));\r\n }\r\n }\r\n return Uint8Array.from(bytes);\r\n}\r\n\r\nfunction bytesToBase64(bytes: Uint8Array): string {\r\n let output = \"\";\r\n for (let i = 0; i < bytes.length; i += 3) {\r\n const byte1 = bytes[i];\r\n const hasByte2 = i + 1 < bytes.length;\r\n const hasByte3 = i + 2 < bytes.length;\r\n const byte2 = hasByte2 ? bytes[i + 1] : 0;\r\n const byte3 = hasByte3 ? bytes[i + 2] : 0;\r\n\r\n output += BASE64_ALPHABET[byte1 >> 2];\r\n output += BASE64_ALPHABET[((byte1 & 0x03) << 4) | (byte2 >> 4)];\r\n output += hasByte2 ? BASE64_ALPHABET[((byte2 & 0x0f) << 2) | (byte3 >> 6)] : \"=\";\r\n output += hasByte3 ? BASE64_ALPHABET[byte3 & 0x3f] : \"=\";\r\n }\r\n return output;\r\n}\r\n\r\nexport function utf8ToBase64(value: string = \"\"): string {\r\n const normalized = value == null ? \"\" : String(value);\r\n\r\n const maybeBuffer = (globalThis as any)?.Buffer;\r\n if (maybeBuffer?.from) {\r\n return maybeBuffer.from(normalized, \"utf8\").toString(\"base64\");\r\n }\r\n\r\n return bytesToBase64(toUTF8Bytes(normalized));\r\n}\r\n"],"names":["_a","_b","_c","_d","PKG_NAME","PKG_VERSION","BUILD_VERSION","find","o","predicate","TypeError","len","length","thisArg","arguments","k","kValue","call","compare","before","after","retVal","update","exit","enter","row","otherIdx","indexOf","push","splice","compare2","idFunc","updateFunc","unknownMap","forEach","item","id","key","pad","hash","fold","text","i","charCodeAt","foldObject","seen","hashSum","Object","keys","sort","reduce","input","foldValue","value","toString","prototype","__name","_Cache","_cache","_calcID","args","constructor","calcID","this","has","espObj","set","obj","get","factory","Cache","_AsyncCache","Promise","resolve","AsyncCache","debounce","fn","timeout","promises","params","clockStart","Date","now","promise","then","response","setTimeout","Math","max","catch","e","promiseTimeout","ms","reject","clearTimeout","race","_AsyncOrderedQueue","_q","isTop","p","shift","intervalHandler","setInterval","clearInterval","AsyncOrderedQueue","sleep","_Dictionary","store","attrs","remove","values","Dictionary","_DictionaryNoCase","super","toLowerCase","DictionaryNoCase","espTime2Seconds","duration","isNaN","Number","nsIndex","parseFloat","substr","msIndex","sIndex","dayTimeParts","split","days","secs","timeParts","reverse","j","pow","GraphItem$1","_graph","parent","props","graph","GraphItem","subgraphs","vertices","edges","_","_addSubgraph","full","removeSubgraph","createSubgraph","subgraph","Error","_removeSubgraph","idx","removeAllSubgraphs","createVertex","_addVertex","vertex","_removeVertex","removeAllVertices","removeVertex","createEdge","source","target","_addEdge","edge","_removeEdge","_add","Vertex","inEdges","outEdges","addInEdge","removeInEdge","addOutEdge","removeOutEdge","removeEdge","_Graph","root","_allSubgraphs","_allSubgraphsMap","_allVertices","_allVerticesMap","_allEdges","_allEdgesMap","idOf","Subgraph","childSubgraph","inEdge","outEdge","Edge","_walk","visitor","walk","clone","ctor","map","ObjMap","put","Graph","index","_GraphItem","g","_ChildGraphItem","_parent","clearParent","removeChild","addChild","ChildGraphItem","_Subgraph","_children","children","filter","_Vertex","_inEdges","_outEdges","edgeCount","_Edge","_source","_target","_Graph2","_directed","_subgraphMap","_vertexMap","_edgeMap","directed","clear","clearParents","isDirected","_idFunc","_sourceFunc","sourceFunc","_targetFunc","targetFunc","_updateFunc","type","subgraphExists","vertexExists","edgeExists","isSubgraph","isVertex","isEdge","allItems","allSubgraphs","allVertices","allEdges","itemExists","subgraphSubgraphs","child","subgraphVertices","subgraphEdges","addSubgraph","s","s_id","p_id","mergeSubgraphs","_subgraphs","sgDiff","sg","updateSubgraph","sg_id","promoteChildren","subgraphParent","parentID","vertexEdges","vertexID","_neighbors","neighbors","n","singleNeighbors","addVertex","v","v_id","mergeVertices","_vertices","vDiff","updateVertex","vertexParent","addEdge","e_id","e_source","e_target","mergeEdges","_edges","eDiff","updateEdge","old_source","new_source","old_target","new_target","e_sourceID","e_targetID","_hwalk","formatter","hierarchy","dijkstra","Q","Set","prev","dist","adj","vertex_with_min_dist","min_distance","Infinity","u","v1","v2","add","size","delete","alt","ids","unshift","visited","visit","ancestors","Graph2","_Set","_content","isArray","Array","keyList","hasProp","hasOwnProperty","verboseDeepEquals","a","b","functionRefCompare","arrA","arrB","console","warn","dateA","dateB","getTime","regexpA","RegExp","regexpB","deepEquals","origItem","newItem","globalThis","window","isBrowser","isNode","process","versions","node","isCI","env","TRAVIS","GITHUB_ACTIONS","CI","getScriptSrc","partial","scripts","document","script","src","substring","_Stack","stack","pop","top","depth","Stack","Level","colours","debug","info","notice","warning","error","critical","alert","emergency","_ConsoleWriter","write","dateTime","level","msg","log","toUpperCase","ConsoleWriter","_Logging","_levelStack","_level","_filter","_writer","Instance","_instance","stringify","cache","JSON","_key","writer","toISOString","rawWrite","pushLevel","popLevel","Logging","logger","_ScopedLogging","_scopeID","scopeID","ScopedLogging","scopedLogger","degreesToRadians","degrees","PI","radiansToDegrees","radians","polarToCartesian","r","theta","x","cos","y","sin","cartesianToPolar","sqrt","atan2","normalizeRadians","min","normalize","normalizeDegrees","spread","offsetValue","floor","inner","prop","exists","_mixin","dest","empty","deepMixin","sources","deepMixinT","safeStringify","arg","classID2Meta","classID","classInfo","module","file","class","_ObserverHandle","eventTarget","eventID","callback","release","removeObserver","unwatch","ObserverHandle","_Observable","_eventObservers","events","addObserver","eventObservers","dispatchEvent","observer","_hasObserver","hasObserver","_eventID","requestAnimationFrame","Observable","lastTime","currTime","timeToCall","_Message","canConflate","conflate","other","Message","_Dispatch","_observerID","_observers","_messageBuffer","_rafHandle","observers","messages","some","msg2","dispatchAll","dispatch","flush","msgs","m","void","send","post","attach","context","Dispatch","_XMLNode","name","$","content","appendAttribute","val","appendContent","appendChild","tag","xmlNode","XMLNode","_SAXStackParser","walkDoc","_startXMLNode","attributes","attribute","nodeName","nodeValue","startXMLNode","childNodes","childNode","nodeType","TEXT_NODE","characters","endXMLNode","newNode","parse","xml","doc","DOMParser","parseFromString","startDocument","endDocument","SAXStackParser","_XML2JSONParser","XML2JSONParser","xml2json","saxParser","_PropChangedMessage","property","newValue","oldValue","PropChangedMessage","_StateObject","_espState","_dispatch","_monitorHandle","_monitorTickCount","newVals","defValue","keyOrNewVals","newVal","setSingle","setAll","oldVal","propIDOrCallback","isCallback","filteredMessages","event","on","hasEventListener","refresh","_monitor","_monitorTimeoutDuration","watch","triggerChange","changes","StateObject","trim","str","char","endsWith","origString","searchString","position","subjectString","isFinite","lastIndex","lastIndexOf","join","segments","parts","segment","replace","resultParts","part","dirname","path","BASE64_ALPHABET","toUTF8Bytes","TextEncoder","encode","encoded","encodeURIComponent","bytes","parseInt","Uint8Array","from","bytesToBase64","output","byte1","hasByte2","hasByte3","byte2","byte3","utf8ToBase64","normalized","String","maybeBuffer","Buffer"],"mappings":"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"}
|