{"version":3,"file":"index.umd.cjs","names":[],"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 = \"@hpcc-js/util\";\nexport const PKG_VERSION = \"3.6.6\";\nexport const BUILD_VERSION = \"3.29.1\";\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"],"mappings":"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"}