@hpcc-js/util 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ (function(global,factory){typeof exports=="object"&&typeof module<"u"?factory(exports):typeof define=="function"&&define.amd?define(["exports"],factory):(global=typeof globalThis<"u"?globalThis:global||self,factory(global["@hpcc-js/util"]={}))})(this,function(exports2){"use strict";var __defProp=Object.defineProperty;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value;var __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!="symbol"?key+"":key,value);const PKG_NAME="@hpcc-js/util",PKG_VERSION="3.2.0",BUILD_VERSION="3.2.1";function find(o,predicate){if(o==null)throw new TypeError('"o" is null or not defined');const len=o.length>>>0;if(typeof predicate!="function")throw new TypeError("predicate must be a function");const thisArg=arguments[1];let k=0;for(;k<len;){const kValue=o[k];if(predicate.call(thisArg,kValue,k))return kValue;k++}}function compare(before,after){const retVal={update:[],exit:[],enter:[...after]};for(const row of before){const otherIdx=retVal.enter.indexOf(row);otherIdx>=0?(retVal.update.push(row),retVal.enter.splice(otherIdx,1)):retVal.exit.push(row)}return retVal}function compare2(before,after,idFunc,updateFunc=(before2,after2)=>after2){const retVal={update:[],exit:[],enter:[]};if(before===after)return retVal.update=before,retVal;const unknownMap={};after.forEach(item=>{unknownMap[idFunc(item)]=item});for(const row of before){const id=idFunc(row),item=unknownMap[id];item!==void 0?(delete unknownMap[id],retVal.update.push(updateFunc(row,item))):retVal.exit.push(row)}for(const key in unknownMap)retVal.enter.push(unknownMap[key]);return retVal}function pad(hash,len){for(;hash.length<len;)hash="0"+hash;return hash}function fold(hash,text){if(text.length===0)return hash;for(let i=0;i<text.length;++i){const chr=text.charCodeAt(i);hash=(hash<<5)-hash+chr,hash|=0}return hash<0?hash*-2:hash}function foldObject(hash,o,seen){return typeof o.hashSum=="function"?o.hashSum():Object.keys(o).sort().reduce((input,key)=>foldValue(input,o[key],key,seen),hash)}function foldValue(input,value,key,seen){const hash=fold(fold(fold(input,key),toString(value)),typeof value);return value===null?fold(hash,"null"):value===void 0?fold(hash,"undefined"):typeof value=="object"?seen.indexOf(value)!==-1?fold(hash,"[Circular]"+key):(seen.push(value),foldObject(hash,value,seen)):fold(hash,value.toString())}function toString(o){return Object.prototype.toString.call(o)}function hashSum(o){return pad(foldValue(0,o,"",[]).toString(16),8)}class Cache{constructor(calcID){__publicField(this,"_cache",{});__publicField(this,"_calcID");this._calcID=calcID}static hash(...args){return hashSum({...args})}has(espObj){return this._calcID(espObj)in this._cache}set(obj){return this._cache[this._calcID(obj)]=obj,obj}get(espObj,factory){const retVal=this._cache[this._calcID(espObj)];return retVal||(factory?this.set(factory()):null)}}class AsyncCache{constructor(calcID){__publicField(this,"_cache",{});__publicField(this,"_calcID");this._calcID=calcID}static hash(...args){return hashSum({...args})}has(espObj){return this._calcID(espObj)in this._cache}set(espObj,obj){return this._cache[this._calcID(espObj)]=obj,obj}get(espObj,factory){const retVal=this._cache[this._calcID(espObj)];return retVal||(factory?this.set(espObj,factory()):Promise.resolve(null))}}function debounce(fn,timeout){const promises={};return(...params)=>{const hash=hashSum(params);return promises[hash]||(promises[hash]={clockStart:Date.now(),promise:fn(...params).then(response=>(timeout===void 0?promises[hash]=null:setTimeout(()=>{promises[hash]=null},Math.max(timeout-(Date.now()-promises[hash].clockStart),0)),response)).catch(e=>{throw promises[hash]=null,e})}),promises[hash].promise}}function promiseTimeout(ms,promise){let id;const timeout=new Promise((resolve,reject)=>{id=setTimeout(()=>{clearTimeout(id),reject("Timed out in "+ms+"ms.")},ms)});return Promise.race([promise,timeout]).then(response=>(clearTimeout(id),response)).catch(e=>{throw clearTimeout(id),e})}class AsyncOrderedQueue{constructor(){__publicField(this,"_q",[])}isTop(p){return this._q[0]===p}push(p){const retVal=p.then(response=>this.isTop(retVal)?(this._q.shift(),response):new Promise((resolve,reject)=>{const intervalHandler=setInterval(()=>{this.isTop(retVal)&&(clearInterval(intervalHandler),this._q.shift(),resolve(response))},20)}));return this._q.push(retVal),retVal}}function sleep(ms){return new Promise(resolve=>{setTimeout(()=>resolve(),ms)})}class Dictionary{constructor(attrs){__publicField(this,"store",{});if(attrs)for(const key in attrs)this.set(key,attrs[key])}set(key,value){const retVal=this.store[key];return this.store[key]=value,retVal}get(key){return this.store[key]}has(key){return this.store[key]!==void 0}remove(key){delete this.store[key]}keys(){const retVal=[];for(const key in this.store)retVal.push(key);return retVal}values(){const retVal=[];for(const key in this.store)retVal.push(this.store[key]);return retVal}}class DictionaryNoCase extends Dictionary{constructor(attrs){super(attrs)}set(key,value){return super.set(key.toLowerCase(),value)}get(key){return super.get(key.toLowerCase())}has(key){return super.has(key.toLowerCase())}remove(key){return super.remove(key.toLowerCase())}}function espTime2Seconds(duration){if(duration){if(!isNaN(Number(duration)))return Number(duration)}else return 0;const nsIndex=duration.indexOf("ns");if(nsIndex!==-1)return parseFloat(duration.substr(0,nsIndex))/1e9;const msIndex=duration.indexOf("ms");if(msIndex!==-1)return parseFloat(duration.substr(0,msIndex))/1e3;const sIndex=duration.indexOf("s");if(sIndex!==-1&&duration.indexOf("days")===-1)return parseFloat(duration.substr(0,sIndex));const dayTimeParts=duration.split(" days "),days=dayTimeParts.length>1?parseFloat(dayTimeParts[0]):0,time=dayTimeParts.length>1?dayTimeParts[1]:dayTimeParts[0];let secs=0;const timeParts=time.split(":").reverse();for(let j=0;j<timeParts.length;++j)secs+=parseFloat(timeParts[j])*Math.pow(60,j);return days*24*60*60+secs}let GraphItem$1=class{constructor(graph,parent){__publicField(this,"_graph");__publicField(this,"parent");__publicField(this,"props",{});this._graph=graph,this.parent=parent}},Subgraph$1=class Subgraph2 extends GraphItem$1{constructor(graph,parent,_){super(graph,parent);__publicField(this,"subgraphs",[]);__publicField(this,"vertices",[]);__publicField(this,"edges",[]);__publicField(this,"_");parent&&parent._addSubgraph(this),this._=_}remove(full=!0){this._graph.removeSubgraph(this,full)}createSubgraph(_){return this._graph.createSubgraph(this,_)}_addSubgraph(subgraph){if(this.subgraphs.indexOf(subgraph)>=0)throw new Error("Subgraph already exists");this.subgraphs.push(subgraph)}_removeSubgraph(subgraph){const idx=this.subgraphs.indexOf(subgraph);if(idx<0)throw new Error("Subgraph does not exist");this.subgraphs.splice(idx,1)}removeAllSubgraphs(){for(let i=this.subgraphs.length-1;i>=0;--i)this._graph.removeSubgraph(this.subgraphs[i],!0)}createVertex(_){return this._graph.createVertex(this,_)}_addVertex(vertex){if(this.vertices.indexOf(vertex)>=0)throw new Error("Vertex already exists");this.vertices.push(vertex)}_removeVertex(vertex){const idx=this.vertices.indexOf(vertex);if(idx<0)throw new Error("Vertex does not exist");this.vertices.splice(idx,1)}removeAllVertices(){for(let i=this.vertices.length-1;i>=0;--i)this._graph.removeVertex(this.vertices[i],!0)}createEdge(source,target,_){return this._graph.createEdge(this,source,target,_)}_addEdge(edge){if(this.edges.indexOf(edge)>=0)throw new Error("Edge already exists");this.edges.push(edge)}_removeEdge(edge){const idx=this.edges.indexOf(edge);if(idx<0)throw new Error("Edge does not exist");this.edges.splice(idx,1)}_add(item){item instanceof Subgraph2?this._addSubgraph(item):item instanceof Vertex$1?this._addVertex(item):this._addEdge(item)}},Vertex$1=class extends GraphItem$1{constructor(graph,parent,_){super(graph,parent);__publicField(this,"inEdges",[]);__publicField(this,"outEdges",[]);__publicField(this,"_");parent._addVertex(this),this._=_}get edges(){return[...this.inEdges,...this.outEdges]}remove(full=!0,_){return this._graph.removeVertex(this,full,_)}addInEdge(edge){this.inEdges.push(edge)}removeInEdge(edge){const idx=this.inEdges.indexOf(edge);if(idx<0)throw new Error("In edge does not exist");this.inEdges.splice(idx,1)}addOutEdge(edge){this.outEdges.push(edge)}removeOutEdge(edge){const idx=this.outEdges.indexOf(edge);if(idx<0)throw new Error("Out edge does not exist");this.outEdges.splice(idx,1)}},Edge$1=class extends GraphItem$1{constructor(graph,parent,source,target,_){super(graph,parent);__publicField(this,"source");__publicField(this,"target");__publicField(this,"_");if(!source)throw new Error("Missing source vertex");if(!target)throw new Error("Missing target vertex");parent._addEdge(this),this.source=source,this.source.addOutEdge(this),this.target=target,this.target.addInEdge(this),this._=_}remove(){this._graph.removeEdge(this)}};class Graph{constructor(idOf=item=>""+item._,_){__publicField(this,"root");__publicField(this,"_allSubgraphs",[]);__publicField(this,"_allSubgraphsMap",{});__publicField(this,"_allVertices",[]);__publicField(this,"_allVerticesMap",{});__publicField(this,"_allEdges",[]);__publicField(this,"_allEdgesMap",{});__publicField(this,"idOf");this.root=new Subgraph$1(this,null,_),this.idOf=idOf}createSubgraph(parent,_){const retVal=new Subgraph$1(this,parent||this.root,_);return this._allSubgraphs.push(retVal),this._allSubgraphsMap[this.idOf(retVal)]=retVal,retVal}removeSubgraph(subgraph,full=!0){const idx=this._allSubgraphs.indexOf(subgraph);if(idx<0)throw new Error("Subgraph does not exist");this._allSubgraphs.splice(idx,1),delete this._allSubgraphsMap[this.idOf(subgraph)],subgraph.parent&&subgraph.parent._removeSubgraph(subgraph),subgraph.edges.forEach(edge=>full?this.removeEdge(edge):subgraph.parent._addEdge(edge)),subgraph.vertices.forEach(vertex=>full?this.removeVertex(vertex,full):subgraph.parent._addVertex(vertex)),subgraph.subgraphs.forEach(childSubgraph=>full?this.removeSubgraph(childSubgraph,full):subgraph.parent._addSubgraph(childSubgraph))}get subgraphs(){return this._allSubgraphs}subgraph(id){return this._allSubgraphsMap[id]}createVertex(parent,_){const retVal=new Vertex$1(this,parent,_);return this._allVertices.push(retVal),this._allVerticesMap[this.idOf(retVal)]=retVal,retVal}removeVertex(vertex,full=!0,_){const idx=this._allVertices.indexOf(vertex);if(idx<0)throw new Error("Vertex does not exist");this._allVertices.splice(idx,1),delete this._allVerticesMap[this.idOf(vertex)],vertex.parent&&vertex.parent._removeVertex(vertex),full||vertex.inEdges.forEach(inEdge=>{vertex.outEdges.forEach(outEdge=>{this.createEdge(this.root,inEdge.source,outEdge.target,_?_(inEdge.source._,outEdge.target._):void 0)})}),vertex.inEdges.forEach(edge=>this.removeEdge(edge)),vertex.outEdges.forEach(edge=>this.removeEdge(edge))}get vertices(){return this._allVertices}vertex(id){return this._allVerticesMap[id]}createEdge(parent,source,target,_){const retVal=new Edge$1(this,parent,source,target,_);return this._allEdges.push(retVal),this._allEdgesMap[this.idOf(retVal)]=retVal,retVal}removeEdge(edge){const idx=this._allEdges.indexOf(edge);if(idx<0)throw new Error("Edge does not exist");this._allEdges.splice(idx,1),delete this._allEdgesMap[this.idOf(edge)],edge.parent&&edge.parent._removeEdge(edge),edge.source.removeOutEdge(edge),edge.target.removeInEdge(edge)}get edges(){return this._allEdges}edge(id){return this._allEdgesMap[id]}_walk(parent,visitor){for(const subgraph of parent.subgraphs)switch(visitor(subgraph)){case"abort":return!0;case"stepover":break;default:if(this._walk(subgraph,visitor))return!0}for(const vertex of parent.vertices)if(visitor(vertex)==="abort")return!0}walk(visitor){this._walk(this.root,visitor);for(const edge of this._allEdges)if(visitor(edge)==="abort")return!0}clone(){const ctor=this.constructor,retVal=new ctor(this.idOf,this.root._),map=ObjMap();return map.put(this.root,retVal.root),this.walk(item=>{const parent=map.get(item.parent);if(item instanceof Subgraph$1)map.put(item,parent.createSubgraph(item._));else if(item instanceof Vertex$1)map.put(item,parent.createVertex(item._));else if(item instanceof Edge$1){const source=map.get(item.source),target=map.get(item.target);parent.createEdge(source,target,item._)}}),retVal}}function ObjMap(){const keys=[],values=[];return{put(key,value){const index=keys.indexOf(key);index===-1?(keys.push(key),values.push(value)):values[index]=value},get(key){return values[keys.indexOf(key)]}}}class GraphItem{constructor(g,_){__publicField(this,"_graph");__publicField(this,"_");this._graph=g,this._=_}id(){return this._graph.id(this._)}}class ChildGraphItem extends GraphItem{constructor(g,_){super(g,_);__publicField(this,"_parent")}clearParent(){return this._parent&&(this._parent.removeChild(this),delete this._parent),this}parent(_){return arguments.length===0?this._parent:(this._parent!==_&&(this._parent&&this._parent.removeChild(this),this._parent=_,this._parent&&this._parent.addChild(this)),this)}}class Subgraph extends ChildGraphItem{constructor(g,_){super(g,_);__publicField(this,"_children",[])}children(){return this._children}addChild(_){this._children.push(_)}removeChild(_){this._children=this._children.filter(row=>row.id!==_.id)}}class Vertex extends ChildGraphItem{constructor(g,_){super(g,_);__publicField(this,"_inEdges",[]);__publicField(this,"_outEdges",[])}edges(){return[...this._inEdges,...this._outEdges]}edgeCount(){return this._outEdges.length+this._inEdges.length}inEdges(){return this._inEdges}addInEdge(e){this._inEdges.push(e)}removeInEdge(id){this._inEdges=this._inEdges.filter(e=>e._.id!==id)}outEdges(){return this._outEdges}addOutEdge(e){this._outEdges.push(e)}removeOutEdge(id){this._outEdges=this._outEdges.filter(e=>e._.id!==id)}}class Edge extends ChildGraphItem{constructor(g,_,source,target){super(g,_);__publicField(this,"_source");__publicField(this,"_target");this._source=source,this._target=target}}class Graph2{constructor(directed=!0){__publicField(this,"_directed");__publicField(this,"_subgraphMap",{});__publicField(this,"_vertexMap",{});__publicField(this,"_edgeMap",{});__publicField(this,"_idFunc",_=>typeof _.id=="function"?_.id():_.id);__publicField(this,"_sourceFunc",_=>typeof _.source=="function"?_.source():_.source);__publicField(this,"_targetFunc",_=>typeof _.target=="function"?_.target():_.target);__publicField(this,"_updateFunc",(before,after)=>after);this._directed=directed}clear(){return this._subgraphMap={},this._vertexMap={},this._edgeMap={},this}clearParents(){for(const key in this._subgraphMap)this._subgraphMap[key].clearParent();for(const key in this._vertexMap)this._vertexMap[key].clearParent();return this}isDirected(){return this._directed}idFunc(_){return this._idFunc=_,this}sourceFunc(_){return this._sourceFunc=_,this}targetFunc(_){return this._targetFunc=_,this}updateFunc(_){return this._updateFunc=_,this}id(_){return this._idFunc(_)}type(id){return this.subgraphExists(id)?"S":this.vertexExists(id)?"V":this.edgeExists(id)?"E":""}isSubgraph(_){return this.subgraphExists(this.id(_))}isVertex(_){return this.vertexExists(this.id(_))}isEdge(_){return this.edgeExists(this.id(_))}allItems(){return[...this.allSubgraphs(),...this.allVertices(),...this.allEdges()]}item(id){if(this.subgraphExists(id))return this.subgraph(id);if(this.vertexExists(id))return this.vertex(id);if(this.edgeExists(id))return this.edge(id)}itemExists(id){return this.edgeExists(id)||this.vertexExists(id)||this.subgraphExists(id)}allSubgraphs(){const retVal=[];for(const key in this._subgraphMap)retVal.push(this._subgraphMap[key]._);return retVal}subgraphs(){const retVal=[];for(const key in this._subgraphMap)this._subgraphMap[key].parent()===void 0&&retVal.push(this._subgraphMap[key]._);return retVal}subgraphExists(id){return!!this._subgraphMap[id]}subgraph(id){return this._subgraphMap[id]._}subgraphSubgraphs(id){return this._subgraphMap[id].children().filter(child=>this.isSubgraph(child._)).map(child=>child._)}subgraphVertices(id){return this._subgraphMap[id].children().filter(child=>this.isVertex(child._)).map(child=>child._)}subgraphEdges(id){return this._subgraphMap[id].children().filter(child=>this.isEdge(child._)).map(child=>child._)}addSubgraph(s,parent){const s_id=this._idFunc(s);if(this._subgraphMap[s_id])throw new Error(`Subgraph '${s_id}' already exists.`);const subgraph=new Subgraph(this,s);if(parent){const p_id=this._idFunc(parent);if(!this._subgraphMap[p_id])throw new Error(`Subgraph '${p_id}' does not exist.`);subgraph.parent(this._subgraphMap[p_id])}return this._subgraphMap[s_id]=subgraph,this}mergeSubgraphs(_subgraphs=[]){const sgDiff=compare2(this.allSubgraphs(),_subgraphs,sg=>this._idFunc(sg),this._updateFunc);return sgDiff.exit.forEach(sg=>this.removeSubgraph(this._idFunc(sg))),sgDiff.enter.forEach(sg=>this.addSubgraph(sg)),sgDiff.update.forEach(sg=>this.updateSubgraph(sg)),this}updateSubgraph(sg){const sg_id=this._idFunc(sg),subgraph=this._subgraphMap[sg_id];if(!subgraph)throw new Error(`Subgraph '${sg_id}' does not exist.`);return subgraph._=sg,this}removeSubgraph(id,promoteChildren=!0){const sg=this._subgraphMap[id];if(!sg)throw new Error(`Subgraph '${id}' does not exist.`);return sg.children().forEach(child=>{promoteChildren?child.parent(sg.parent()):child instanceof Subgraph?this.removeSubgraph(child.id()):this.removeVertex(child.id())}),delete this._subgraphMap[id],this}subgraphParent(id,parentID){const item=this._subgraphMap[id];if(!item)throw new Error(`Subgraph '${id}' does not exist.`);if(parentID===void 0){const parent2=item.parent();return parent2?parent2._:void 0}const parent=this._subgraphMap[parentID];if(!parent)throw new Error(`Vertex parent '${parent}' does not exist.`);return item.parent(parent),this}allVertices(){const retVal=[];for(const key in this._vertexMap)retVal.push(this._vertexMap[key]._);return retVal}vertices(){const retVal=[];for(const key in this._vertexMap)this._vertexMap[key].parent()===void 0&&retVal.push(this._vertexMap[key]._);return retVal}vertexExists(id){return!!this._vertexMap[id]}vertex(id){return this._vertexMap[id]._}allEdges(){const retVal=[];for(const key in this._edgeMap)retVal.push(this._edgeMap[key]._);return retVal}edges(){const retVal=[];for(const key in this._edgeMap)this._edgeMap[key].parent()===void 0&&retVal.push(this._edgeMap[key]._);return retVal}vertexEdges(vertexID){return this._vertexMap[vertexID].edges().map(e=>e._)}inEdges(vertexID){return this._vertexMap[vertexID].inEdges().map(e=>e._)}outEdges(vertexID){return this._vertexMap[vertexID].outEdges().map(e=>e._)}_neighbors(id){return[...this._vertexMap[id].outEdges().map(e=>e._target),...this._vertexMap[id].inEdges().map(e=>e._source)]}neighbors(id){return this._neighbors(id).map(n=>n._)}singleNeighbors(id){return this._neighbors(id).filter(n=>n.edgeCount()===1).map(n=>n._)}addVertex(v,parent){const v_id=this._idFunc(v);if(this._vertexMap[v_id])throw new Error(`Vertex '${v_id}' already exists.`);const vertex=new Vertex(this,v);if(parent){const p_id=this._idFunc(parent);if(!this.subgraphExists(p_id))throw new Error(`Subgraph '${p_id}' does not exist.`);vertex.parent(this._subgraphMap[p_id])}return this._vertexMap[v_id]=vertex,this}mergeVertices(_vertices){const vDiff=compare2(this.allVertices(),_vertices,v=>this._idFunc(v),this._updateFunc);return vDiff.exit.forEach(v=>this.removeVertex(this._idFunc(v))),vDiff.enter.forEach(v=>this.addVertex(v)),vDiff.update.forEach(v=>this.updateVertex(v)),this}updateVertex(v){const v_id=this._idFunc(v),vertex=this._vertexMap[v_id];if(!vertex)throw new Error(`Vertex '${v_id}' does not exist.`);return vertex._=v,this}removeVertex(id){const v=this._vertexMap[id];if(!v)throw new Error(`Vertex '${id}' does not exist.`);return v.edges().forEach(e=>{this.removeEdge(e.id())}),delete this._vertexMap[id],this}vertexParent(id,parentID){const item=this._vertexMap[id];if(!item)throw new Error(`Vertex '${id}' does not exist.`);if(parentID===void 0){const parent2=item.parent();return parent2?parent2._:void 0}const parent=this._subgraphMap[parentID];if(!parent)throw new Error(`Vertex parent '${parent}' does not exist.`);return item.parent(parent),this}edgeExists(id){return!!this._edgeMap[id]}edge(id){return this._edgeMap[id]._}addEdge(e,parent){const e_id=this._idFunc(e),e_source=this._sourceFunc(e),e_target=this._targetFunc(e);if(this._edgeMap[e_id])throw new Error(`Edge '${e_id}' already exists.`);if(!this.vertexExists(e_source))throw new Error(`Edge Source '${e_source}' does not exist.`);if(!this.vertexExists(e_target))throw new Error(`Edge Target '${e_target}' does not exist.`);const edge=new Edge(this,e,this._vertexMap[e_source],this._vertexMap[e_target]);if(parent){const p_id=this._idFunc(parent);if(!this.subgraphExists(p_id))throw new Error(`Subgraph '${p_id}' does not exist.`);edge.parent(this._subgraphMap[p_id])}return this._edgeMap[e_id]=edge,this._vertexMap[e_source].addOutEdge(edge),this._vertexMap[e_target].addInEdge(edge),this}mergeEdges(_edges){const eDiff=compare2(this.allEdges(),_edges,e=>this._idFunc(e),this._updateFunc);return eDiff.exit.forEach(e=>this.removeEdge(this._idFunc(e))),eDiff.enter.forEach(e=>this.addEdge(e)),eDiff.update.forEach(e=>this.updateEdge(e)),this}updateEdge(e){var _a,_b,_c,_d;const e_id=this._idFunc(e),edge=this._edgeMap[e_id];if(!edge)throw new Error(`Edge '${e_id}' does not exist.`);const old_source=edge._source.id(),new_source=this._sourceFunc(e);old_source!==new_source&&((_a=this._vertexMap[old_source])==null||_a.removeOutEdge(e_id),(_b=this._vertexMap[new_source])==null||_b.addOutEdge(edge));const old_target=edge._target.id(),new_target=this._targetFunc(e);return old_target!==new_target&&((_c=this._vertexMap[old_target])==null||_c.removeInEdge(e_id),(_d=this._vertexMap[new_target])==null||_d.addInEdge(edge)),edge._=e,edge._source=this._vertexMap[new_source],edge._target=this._vertexMap[new_target],this}removeEdge(id){const e=this._edgeMap[id];if(!e)throw new Error(`Edge '${id}' does not exist.`);const e_sourceID=this._idFunc(e._source._);if(!this.vertexExists(e_sourceID))throw new Error(`Edge Source'${e_sourceID}' does not exist.`);this._vertexMap[e_sourceID].removeOutEdge(id);const e_targetID=this._idFunc(e._target._);if(!this.vertexExists(e_targetID))throw new Error(`Edge Target'${e_targetID}' does not exist.`);return this._vertexMap[e_targetID].removeInEdge(id),delete this._edgeMap[id],this}_hwalk(item,formatter){return item instanceof Subgraph?formatter("subgraph",item._,item.children().map(child=>this._hwalk(child,formatter))):formatter("vertex",item._)}hierarchy(formatter){const retVal=[];for(const id in this._subgraphMap){const sg=this._subgraphMap[id];sg.parent()===void 0&&retVal.push(this._hwalk(sg,formatter))}for(const id in this._vertexMap){const v=this._vertexMap[id];v.parent()===void 0&&retVal.push(this._hwalk(v,formatter))}return retVal}dijkstra(source,target){const edges=this.allEdges(),Q=new Set,prev={},dist={},adj={};function vertex_with_min_dist(Q2,dist2){let min_distance=1/0,u2=null;return Q2.forEach(v=>{dist2[v]<min_distance&&(min_distance=dist2[v],u2=v)}),u2}for(let i=0;i<edges.length;i++){const v1=this._sourceFunc(edges[i]),v2=this._targetFunc(edges[i]),len2=1;Q.add(v1),Q.add(v2),dist[v1]=1/0,dist[v2]=1/0,adj[v1]===void 0&&(adj[v1]={}),adj[v2]===void 0&&(adj[v2]={}),adj[v1][v2]=len2,adj[v2][v1]=len2}for(dist[source]=0;Q.size;){const u2=vertex_with_min_dist(Q,dist);if(u2===null)break;const neighbors=Object.keys(adj[u2]).filter(v=>Q.has(v));if(Q.delete(u2),u2===target)break;for(const v of neighbors){const alt=dist[u2]+adj[u2][v];alt<dist[v]&&(dist[v]=alt,prev[v]=u2)}}let u=target;const ids=[u];let len=0;for(;prev[u]!==void 0;)ids.unshift(prev[u]),len+=adj[u][prev[u]],u=prev[u];return{ids,len}}sort(v_id){const retVal=[],visited={},visit=(vertex,ancestors=[])=>{const v_id2=vertex.id();visited[v_id2]||(visited[v_id2]=!0,ancestors.push(vertex),vertex.outEdges().forEach(e=>{ancestors.indexOf(e._target)<0&&visit(e._target,[...ancestors])}),retVal.unshift(vertex._))};if(v_id)visit(this._vertexMap[v_id]);else for(const key in this._vertexMap)visit(this._vertexMap[key]);return retVal}}class Set{constructor(){__publicField(this,"_content",[])}get size(){return this._content.length}has(_){return this._content.indexOf(_)>=0}add(_){this.has(_)||this._content.push(_)}delete(_){const idx=this._content.indexOf(_);idx>=0&&this._content.splice(idx,1)}forEach(_){this._content.forEach(_)}}const isArray$1=Array.isArray,keyList=Object.keys,hasProp=Object.prototype.hasOwnProperty;function verboseDeepEquals(a,b,functionRefCompare=!1){if(a===b)return!0;if(a&&b){if(typeof a=="object"&&typeof b=="object"){const arrA=isArray$1(a),arrB=isArray$1(b);let i,length,key;if(arrA&&arrB){if(length=a.length,length!==b.length)return console.warn(`lengths not equal: ${length} !== ${b.length}`),!1;for(i=length;i--!==0;)if(!verboseDeepEquals(a[i],b[i],functionRefCompare))return!1;return!0}if(arrA!==arrB)return console.warn(`arrays not equal: ${arrA} !== ${arrB}`),!1;const dateA=a instanceof Date,dateB=b instanceof Date;if(dateA!==dateB)return console.warn(`dates not equal: ${dateA} !== ${dateB}`),!1;if(dateA&&dateB){const retVal2=a.getTime()===b.getTime();return retVal2||console.warn(`dates not equal: ${a.getTime()} !== ${b.getTime()}`),retVal2}const regexpA=a instanceof RegExp,regexpB=b instanceof RegExp;if(regexpA!==regexpB)return console.warn(`regexps not equal: ${regexpA} !== ${regexpB}`),!1;if(regexpA&&regexpB){const retVal2=a.toString()===b.toString();return retVal2||console.warn(`regexps not equal: ${a.toString()} !== ${b.toString()}`),retVal2}const keys=keyList(a);if(length=keys.length,length!==keyList(b).length)return console.warn(`key lengths not equal: ${length} !== ${keyList(b).length}`),!1;for(i=length;i--!==0;)if(!hasProp.call(b,keys[i]))return console.warn(`${keys[i]} in a but not b`),!1;for(i=length;i--!==0;)if(key=keys[i],!verboseDeepEquals(a[key],b[key],functionRefCompare))return!1;return!0}else if(!functionRefCompare&&typeof a=="function"&&typeof b=="function"){const retVal2=a.toString()===b.toString();return retVal2||console.warn(`functions not equal: ${a.toString()} !== ${b.toString()}`),retVal2}}const retVal=a!==a&&b!==b;return retVal||console.warn(`values not equal: ${a} !== ${b}`),retVal}function deepEquals(a,b,functionRefCompare=!1){if(a===b)return!0;if(a&&b){if(typeof a=="object"&&typeof b=="object"){const arrA=isArray$1(a),arrB=isArray$1(b);let i,length,key;if(arrA&&arrB){if(length=a.length,length!==b.length)return!1;for(i=length;i--!==0;)if(!deepEquals(a[i],b[i],functionRefCompare))return!1;return!0}if(arrA!==arrB)return!1;const dateA=a instanceof Date,dateB=b instanceof Date;if(dateA!==dateB)return!1;if(dateA&&dateB)return a.getTime()===b.getTime();const regexpA=a instanceof RegExp,regexpB=b instanceof RegExp;if(regexpA!==regexpB)return!1;if(regexpA&&regexpB)return a.toString()===b.toString();const keys=keyList(a);if(length=keys.length,length!==keyList(b).length)return!1;for(i=length;i--!==0;)if(!hasProp.call(b,keys[i]))return!1;for(i=length;i--!==0;)if(key=keys[i],!deepEquals(a[key],b[key],functionRefCompare))return!1;return!0}else if(!functionRefCompare&&typeof a=="function"&&typeof b=="function")return a.toString()===b.toString()}return a!==a&&b!==b}function update(origItem,newItem,functionRefCompare=!1){return deepEquals(origItem,newItem,functionRefCompare)?origItem:newItem}const root=typeof globalThis<"u"?globalThis:window,isBrowser=typeof window<"u"&&root===window,isNode=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,isCI=isNode&&process.env!=null&&(process.env.TRAVIS!=null||process.env.GITHUB_ACTIONS!=null);function getScriptSrc(partial){const scripts=document.scripts||[];for(let i=document.scripts.length-1;i>=0;--i){const script=scripts[i];if(script.src){const idx=script.src.indexOf(partial);if(idx>=0)return script.src.substring(0,idx)}}return""}class Stack{constructor(){__publicField(this,"stack",[])}push(e){return this.stack.push(e),e}pop(){return this.stack.pop()}top(){return this.stack.length?this.stack[this.stack.length-1]:void 0}depth(){return this.stack.length}}var Level=(Level2=>(Level2[Level2.debug=0]="debug",Level2[Level2.info=1]="info",Level2[Level2.notice=2]="notice",Level2[Level2.warning=3]="warning",Level2[Level2.error=4]="error",Level2[Level2.critical=5]="critical",Level2[Level2.alert=6]="alert",Level2[Level2.emergency=7]="emergency",Level2))(Level||{});const colours={debug:"cyan",info:"green",notice:"grey",warning:"blue",error:"red",critical:"magenta",alert:"magenta",emergency:"magenta"};class ConsoleWriter{write(dateTime,level,id,msg){isNode?console.log(`[${dateTime}] ${Level[level].toUpperCase()} ${id}: ${msg}`):console.log(`[${dateTime}] %c${Level[level].toUpperCase()}%c ${id}: ${msg}`,`color:${colours[Level[level]]}`,"")}}class Logging{constructor(){__publicField(this,"_levelStack",new Stack);__publicField(this,"_level",1);__publicField(this,"_filter","");__publicField(this,"_writer",new ConsoleWriter)}static Instance(){return this._instance||(this._instance=new this)}stringify(obj){const cache=[];return JSON.stringify(obj,function(_key,value){if(typeof value=="object"&&value!==null){if(cache.indexOf(value)!==-1)return;cache.push(value)}return value},2)}writer(_){return _===void 0?this._writer:(this._writer=_,this)}log(level,id,msg){if(level<this._level||this._filter&&this._filter!==id)return;const dateTime=new Date().toISOString();this._writer.rawWrite?this._writer.rawWrite(dateTime,level,id,msg):(typeof msg!="string"&&(msg=this.stringify(msg)),this._writer.write&&this._writer.write(dateTime,level,id,msg))}debug(id,msg){this.log(0,id,msg)}info(id,msg){this.log(1,id,msg)}notice(id,msg){this.log(2,id,msg)}warning(id,msg){this.log(3,id,msg)}error(id,msg){this.log(4,id,msg)}critical(id,msg){this.log(5,id,msg)}alert(id,msg){this.log(6,id,msg)}emergency(id,msg){this.log(7,id,msg)}level(_){return _===void 0?this._level:(this._level=_,this)}pushLevel(_){return this._levelStack.push(this._level),this._level=_,this}popLevel(){return this._level=this._levelStack.pop(),this}filter(_){return _===void 0?this._filter:(this._filter=_,this)}}__publicField(Logging,"_instance");const logger=Logging.Instance();class ScopedLogging{constructor(scopeID){__publicField(this,"_scopeID");this._scopeID=scopeID}debug(msg){logger.debug(this._scopeID,msg)}info(msg){logger.info(this._scopeID,msg)}notice(msg){logger.notice(this._scopeID,msg)}warning(msg){logger.warning(this._scopeID,msg)}error(msg){logger.error(this._scopeID,msg)}critical(msg){logger.critical(this._scopeID,msg)}alert(msg){logger.alert(this._scopeID,msg)}emergency(msg){logger.emergency(this._scopeID,msg)}pushLevel(_){return logger.pushLevel(_),this}popLevel(){return logger.popLevel(),this}}function scopedLogger(scopeID,filter=!1){return filter&&logger.filter(scopeID),new ScopedLogging(scopeID)}function degreesToRadians(degrees){return degrees*(Math.PI/180)}function radiansToDegrees(radians){return radians*(180/Math.PI)}function polarToCartesian(r,theta){return{x:r*Math.cos(theta),y:r*Math.sin(theta)}}function cartesianToPolar(x,y){return{r:Math.sqrt(x*x+y*y),theta:Math.atan2(y,x)}}function normalizeRadians(radians,min=-Math.PI,max=Math.PI){return normalize(radians,min,max)}function normalizeDegrees(degrees,min=-180,max=180){return normalize(degrees,min,max)}function normalize(value,min,max){const spread=max-min,offsetValue=value-min;return offsetValue-Math.floor(offsetValue/spread)*spread+min}function inner(prop,obj){if(!(prop===void 0||obj===void 0)){for(const item of prop.split(".")){if(!obj.hasOwnProperty(item))return;obj=obj[item]}return obj}}function exists(prop,obj){return inner(prop,obj)!==void 0}function _mixin(dest,source){const empty={};for(const key in source){if(!source.hasOwnProperty(key)||key==="__proto__"||key==="constructor")continue;let s=source[key];s instanceof Array||typeof s=="object"&&(s=deepMixin(dest[key],s)),(!(key in dest)||dest[key]!==s&&(!(key in empty)||empty[key]!==s))&&(dest[key]=s)}return dest}function deepMixin(dest={},...sources){if(typeof dest!="object")throw new Error(`Destination "${dest}" must be an object.`);for(const source of sources)_mixin(dest,source);return dest}function deepMixinT(dest={},...sources){return deepMixin(dest,...sources)}function safeStringify(obj){const cache=[];return JSON.stringify(obj,function(key,value){if(typeof value=="object"&&value!==null){if(cache.indexOf(value)!==-1)return;cache.push(value)}return value})}function isArray(arg){return Array.isArray!==void 0?Array.isArray(arg):Object.prototype.toString.call(arg)==="[object Array]"}function classID2Meta(classID){const info=classID.split("_"),classInfo=info[1].split(".");return{module:`@hpcc-js/${info[0]}`,file:classInfo[0],class:classInfo[1]||classInfo[0]}}class ObserverHandle{constructor(eventTarget,eventID,callback){__publicField(this,"eventTarget");__publicField(this,"eventID");__publicField(this,"callback");this.eventTarget=eventTarget,this.eventID=eventID,this.callback=callback}release(){this.eventTarget.removeObserver(this.eventID,this.callback)}unwatch(){this.release()}}class Observable{constructor(...events){__publicField(this,"_eventObservers",{})}addObserver(eventID,callback){let eventObservers=this._eventObservers[eventID];return eventObservers||(eventObservers=[],this._eventObservers[eventID]=eventObservers),eventObservers.push(callback),new ObserverHandle(this,eventID,callback)}removeObserver(eventID,callback){const eventObservers=this._eventObservers[eventID];if(eventObservers)for(let i=eventObservers.length-1;i>=0;--i)eventObservers[i]===callback&&eventObservers.splice(i,1);return this}dispatchEvent(eventID,...args){const eventObservers=this._eventObservers[eventID];if(eventObservers)for(const observer of eventObservers)observer(...args);return this}_hasObserver(eventID){const eventObservers=this._eventObservers[eventID];for(const observer in eventObservers)if(eventObservers[observer])return!0;return!1}hasObserver(_eventID){if(_eventID!==void 0)return this._hasObserver(_eventID);for(const eventID in this._eventObservers)if(this._hasObserver(eventID))return!0;return!1}}let requestAnimationFrame;(function(){if(root.requestAnimationFrame)requestAnimationFrame=root.requestAnimationFrame;else{let lastTime=0;requestAnimationFrame=function(callback){const currTime=new Date().getTime(),timeToCall=Math.max(0,16-(currTime-lastTime)),id=setTimeout(()=>callback(currTime+timeToCall),timeToCall);return lastTime=currTime+timeToCall,id}}})();class Message{get canConflate(){return!1}conflate(other){return!1}void(){return!1}}class Dispatch{constructor(){__publicField(this,"_observerID",0);__publicField(this,"_observers",[]);__publicField(this,"_messageBuffer",[])}observers(){return this._observers}messages(){const retVal=[];return this._messageBuffer.forEach(msg=>{retVal.some(msg2=>msg2.canConflate&&msg2.conflate(msg))||retVal.push(msg)}),retVal}dispatchAll(){this.dispatch(this.messages()),this.flush()}dispatch(messages){messages.length!==0&&this.observers().forEach(o=>{const msgs=messages.filter(m=>!m.void()&&(o.type===void 0||m instanceof o.type));msgs.length&&o.callback(msgs)})}hasObserver(){return this._observers.length>0}flush(){this._messageBuffer=[]}send(msg){this.dispatch([msg])}post(msg){this._messageBuffer.push(msg),requestAnimationFrame(()=>this.dispatchAll())}attach(callback,type){const context=this,id=++this._observerID;return this._observers.push({id,type,callback}),{release(){context._observers=context._observers.filter(o=>o.id!==id)},unwatch(){this.release()}}}}class XMLNode{constructor(name){__publicField(this,"name","");__publicField(this,"$",{});__publicField(this,"_children",[]);__publicField(this,"content","");this.name=name}appendAttribute(key,val){this.$[key]=val}appendContent(content){this.content+=content}appendChild(child){this._children.push(child)}children(tag){return tag===void 0?this._children:this._children.filter(xmlNode=>xmlNode.name===tag)}}class SAXStackParser{constructor(){__publicField(this,"root");__publicField(this,"stack",new Stack)}walkDoc(node){const xmlNode=this._startXMLNode(node);if(node.attributes)for(let i=0;i<node.attributes.length;++i){const attribute=node.attributes.item(i);this.attributes(attribute.nodeName,attribute.nodeValue)}if(this.startXMLNode(xmlNode),node.childNodes)for(let i=0;i<node.childNodes.length;++i){const childNode=node.childNodes.item(i);childNode.nodeType===childNode.TEXT_NODE?this.characters(childNode.nodeValue):this.walkDoc(childNode)}this.endXMLNode(this.stack.pop())}_startXMLNode(node){const newNode=new XMLNode(node.nodeName);return this.stack.depth()?this.stack.top().appendChild(newNode):this.root=newNode,this.stack.push(newNode)}parse(xml){const doc=new DOMParser().parseFromString(xml,"application/xml");this.startDocument(),this.walkDoc(doc),this.endDocument()}startDocument(){}endDocument(){}startXMLNode(node){}endXMLNode(node){}attributes(key,val){this.stack.top().appendAttribute(key,val)}characters(text){this.stack.top().appendContent(text)}}class XML2JSONParser extends SAXStackParser{startXMLNode(node){switch(super.startXMLNode(node),node.name){}}endXMLNode(node){switch(node.name){}super.endXMLNode(node)}}function xml2json(xml){const saxParser=new XML2JSONParser;return saxParser.parse(xml),saxParser.root}class PropChangedMessage extends Message{constructor(property,newValue,oldValue){super(),this.property=property,this.newValue=newValue,this.oldValue=oldValue}get canConflate(){return!0}conflate(other){return this.property===other.property?(this.newValue=other.newValue,!0):!1}void(){return deepEquals(this.newValue,this.oldValue)}}class StateObject{constructor(){__publicField(this,"_espState",{});__publicField(this,"_dispatch",new Dispatch);__publicField(this,"_monitorHandle");__publicField(this,"_monitorTickCount",0)}clear(newVals){this._espState={},newVals!==void 0&&this.set(newVals),this._monitorTickCount=0}get(key,defValue){return key===void 0?this._espState:this.has(key)?this._espState[key]:defValue}set(keyOrNewVals,newVal){if(typeof keyOrNewVals=="string")return this.setSingle(keyOrNewVals,newVal);this.setAll(keyOrNewVals)}setSingle(key,newVal){const oldVal=this._espState[key];this._espState[key]=newVal,this._dispatch.post(new PropChangedMessage(key,newVal,oldVal))}setAll(_){for(const key in _)_.hasOwnProperty(key)&&this.setSingle(key,_[key])}has(key){return this._espState[key]!==void 0}addObserver(eventID,propIDOrCallback,callback){if(this.isCallback(propIDOrCallback)){if(eventID!=="changed")throw new Error("Invalid eventID: "+eventID);return this._dispatch.attach(messages=>{propIDOrCallback(messages.map(m=>({id:m.property,oldValue:m.oldValue,newValue:m.newValue})))})}else{if(eventID!=="propChanged")throw new Error("Invalid eventID: "+eventID);return this._dispatch.attach(messages=>{const filteredMessages=messages.filter(m=>m.property===propIDOrCallback);if(filteredMessages.length){filteredMessages.length>1&&console.warn("Should only be 1 message?");const event=filteredMessages[filteredMessages.length-1];callback({id:event.property,oldValue:event.oldValue,newValue:event.newValue})}})}}on(eventID,propIDOrCallback,callback){return this.addObserver(eventID,propIDOrCallback,callback),this}isCallback(propIDOrCallback){return typeof propIDOrCallback=="function"}hasEventListener(){return this._dispatch.hasObserver()}async refresh(full=!1){return await Promise.resolve(),this}_monitor(){if(this._monitorHandle){this._monitorTickCount=0;return}this._monitorHandle=setTimeout(()=>{(this.hasEventListener()?this.refresh():Promise.resolve()).then(()=>{this._monitor()}),delete this._monitorHandle},this._monitorTimeoutDuration())}_monitorTimeoutDuration(){return++this._monitorTickCount,this._monitorTickCount<=1?0:3e4}watch(callback,triggerChange=!0){if(typeof callback!="function")throw new Error("Invalid Callback");triggerChange&&setTimeout(()=>{const props=this.get(),changes=[];for(const key in props)props.hasOwnProperty(props)&&changes.push({id:key,newValue:props[key],oldValue:void 0});callback(changes)},0);const retVal=this.addObserver("changed",callback);return this._monitor(),retVal}}function trim(str,char){if(typeof char!="string"||char.length===0)return str;for(;str.indexOf(char)===0;)str=str.substring(1);for(;endsWith(str,char);)str=str.substring(0,str.length-1);return str}function endsWith(origString,searchString,position){const subjectString=origString.toString();(typeof position!="number"||!isFinite(position)||Math.floor(position)!==position||position>subjectString.length)&&(position=subjectString.length),position-=searchString.length;const lastIndex=subjectString.lastIndexOf(searchString,position);return lastIndex!==-1&&lastIndex===position}function join(...segments){const parts=segments.reduce((parts2,segment)=>(parts2.length>0&&(segment=segment.replace(/^\//,"")),segment=segment.replace(/\/$/,""),[...parts2,...segment.split("/")]),[]),resultParts=[];for(const part of parts)if(part!=="."){if(part===".."){resultParts.pop();continue}resultParts.push(part)}return resultParts.join("/")}function dirname(path){return join(path,"..")}exports2.AsyncCache=AsyncCache,exports2.AsyncOrderedQueue=AsyncOrderedQueue,exports2.BUILD_VERSION=BUILD_VERSION,exports2.Cache=Cache,exports2.Dictionary=Dictionary,exports2.DictionaryNoCase=DictionaryNoCase,exports2.Dispatch=Dispatch,exports2.Edge=Edge$1,exports2.Graph=Graph,exports2.Graph2=Graph2,exports2.GraphItem=GraphItem$1,exports2.Level=Level,exports2.Logging=Logging,exports2.Message=Message,exports2.Observable=Observable,exports2.PKG_NAME=PKG_NAME,exports2.PKG_VERSION=PKG_VERSION,exports2.SAXStackParser=SAXStackParser,exports2.ScopedLogging=ScopedLogging,exports2.Stack=Stack,exports2.StateObject=StateObject,exports2.Subgraph=Subgraph$1,exports2.Vertex=Vertex$1,exports2.XMLNode=XMLNode,exports2.cartesianToPolar=cartesianToPolar,exports2.classID2Meta=classID2Meta,exports2.compare=compare,exports2.compare2=compare2,exports2.debounce=debounce,exports2.deepEquals=deepEquals,exports2.deepMixin=deepMixin,exports2.deepMixinT=deepMixinT,exports2.degreesToRadians=degreesToRadians,exports2.dirname=dirname,exports2.endsWith=endsWith,exports2.espTime2Seconds=espTime2Seconds,exports2.exists=exists,exports2.find=find,exports2.getScriptSrc=getScriptSrc,exports2.hashSum=hashSum,exports2.inner=inner,exports2.isArray=isArray,exports2.isBrowser=isBrowser,exports2.isCI=isCI,exports2.isNode=isNode,exports2.join=join,exports2.logger=logger,exports2.normalize=normalize,exports2.normalizeDegrees=normalizeDegrees,exports2.normalizeRadians=normalizeRadians,exports2.polarToCartesian=polarToCartesian,exports2.promiseTimeout=promiseTimeout,exports2.radiansToDegrees=radiansToDegrees,exports2.root=root,exports2.safeStringify=safeStringify,exports2.scopedLogger=scopedLogger,exports2.sleep=sleep,exports2.trim=trim,exports2.update=update,exports2.verboseDeepEquals=verboseDeepEquals,exports2.xml2json=xml2json,Object.defineProperty(exports2,Symbol.toStringTag,{value:"Module"})});
2
+ //# sourceMappingURL=index.umd.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.umd.cjs","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"],"sourcesContent":["export const PKG_NAME = \"@hpcc-js/util\";\nexport const PKG_VERSION = \"3.2.0\";\nexport const BUILD_VERSION = \"3.2.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);\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 RquestAnimationFrame = (callback: FrameRequestCallback) => number | undefined;\nexport type CancelAnimationFrame = (handle: number) => void | undefined;\n\nlet requestAnimationFrame: RquestAnimationFrame;\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\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.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 this.dispatch([msg]);\n }\n\n post(msg: T) {\n this._messageBuffer.push(msg);\n requestAnimationFrame(() => this.dispatchAll());\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"],"names":["before","after","Subgraph","GraphItem","Vertex","Edge","parent","Q","dist","u","len","v_id","isArray","retVal","Level","parts"],"mappings":"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"}
package/package.json CHANGED
@@ -1,16 +1,19 @@
1
1
  {
2
2
  "name": "@hpcc-js/util",
3
- "version": "3.2.0",
3
+ "version": "3.3.0",
4
4
  "description": "hpcc-js - Utilities",
5
5
  "type": "module",
6
+ "main": "./dist/index.umd.cjs",
7
+ "module": "./dist/index.js",
6
8
  "exports": {
7
9
  ".": {
8
10
  "types": "./types/index.d.ts",
9
- "default": "./dist/index.js"
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.umd.cjs"
10
13
  },
11
14
  "./dist/*": "./dist/*"
12
15
  },
13
- "main": "./dist/index.js",
16
+ "browser": "./dist/index.umd.cjs",
14
17
  "types": "./types/index.d.ts",
15
18
  "files": [
16
19
  "dist/*",
@@ -19,25 +22,26 @@
19
22
  ],
20
23
  "scripts": {
21
24
  "clean": "rimraf --glob lib* types dist dist-test *.tsbuildinfo .turbo",
22
- "bundle": "node esbuild.js",
23
- "bundle-watch": "npm run bundle -- --development --watch",
25
+ "bundle": "vite build",
26
+ "bundle-watch": "vite",
24
27
  "gen-types": "tsc --project tsconfig.json",
25
28
  "gen-types-watch": "npm run gen-types -- --watch",
26
29
  "build": "run-p gen-types bundle",
27
30
  "lint": "eslint ./src",
31
+ "lint-fix": "eslint --fix src/**/*.ts",
28
32
  "docs": "typedoc --options tdoptions.json .",
29
33
  "test-browser": "vitest run --project browser",
30
34
  "test-node": "vitest run --project node",
31
35
  "test": "vitest run",
32
36
  "coverage": "vitest run --coverage",
33
- "update": "npx -y npm-check-updates -u -t minor",
34
- "update-major": "npx -y npm-check-updates -u"
37
+ "update": "npx --yes npm-check-updates -u -t minor",
38
+ "update-major": "npx --yes npm-check-updates -u"
35
39
  },
36
40
  "dependencies": {
37
41
  "@xmldom/xmldom": "0.9.5"
38
42
  },
39
43
  "devDependencies": {
40
- "@hpcc-js/esbuild-plugins": "^1.3.0"
44
+ "@hpcc-js/esbuild-plugins": "^1.4.0"
41
45
  },
42
46
  "repository": {
43
47
  "type": "git",
@@ -50,5 +54,5 @@
50
54
  "url": "https://github.com/hpcc-systems/Visualization/issues"
51
55
  },
52
56
  "homepage": "https://github.com/hpcc-systems/Visualization/tree/trunk/packages/util",
53
- "gitHead": "658c50fd965a7744ba8db675ba6878607c44d5e2"
57
+ "gitHead": "145a4d4c8189c70f08e9804e63959d6dd398bd9f"
54
58
  }
@@ -1,3 +1,3 @@
1
1
  export const PKG_NAME = "@hpcc-js/util";
2
2
  export const PKG_VERSION = "3.2.0";
3
- export const BUILD_VERSION = "3.2.0";
3
+ export const BUILD_VERSION = "3.2.1";
@@ -1,3 +1,3 @@
1
1
  export declare const PKG_NAME = "@hpcc-js/util";
2
2
  export declare const PKG_VERSION = "3.2.0";
3
- export declare const BUILD_VERSION = "3.2.0";
3
+ export declare const BUILD_VERSION = "3.2.1";