08-27-周三_17-09-29
This commit is contained in:
19
node_modules/graphlib/LICENSE
generated
vendored
Normal file
19
node_modules/graphlib/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
Copyright (c) 2012-2014 Chris Pettitt
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
16
node_modules/graphlib/README.md
generated
vendored
Normal file
16
node_modules/graphlib/README.md
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
# Graphlib
|
||||
|
||||
Graphlib is a JavaScript library that provides data structures for undirected
|
||||
and directed multi-graphs along with algorithms that can be used with them.
|
||||
|
||||
[](http://travis-ci.org/dagrejs/graphlib)
|
||||
|
||||
To learn more [see our Wiki](https://github.com/cpettitt/graphlib/wiki).
|
||||
|
||||
# License
|
||||
|
||||
Graphlib is licensed under the terms of the MIT License. See the
|
||||
[LICENSE](LICENSE) file
|
||||
for details.
|
||||
|
||||
[npm package manager]: http://npmjs.org/
|
1238
node_modules/graphlib/dist/graphlib.core.js
generated
vendored
Normal file
1238
node_modules/graphlib/dist/graphlib.core.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
143
node_modules/graphlib/dist/graphlib.core.min.js
generated
vendored
Normal file
143
node_modules/graphlib/dist/graphlib.core.min.js
generated
vendored
Normal file
@@ -0,0 +1,143 @@
|
||||
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.graphlib=f()}})(function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r}()({1:[function(require,module,exports){
|
||||
/**
|
||||
* Copyright (c) 2014, Chris Pettitt
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
var lib=require("./lib");module.exports={Graph:lib.Graph,json:require("./lib/json"),alg:require("./lib/alg"),version:lib.version}},{"./lib":17,"./lib/alg":8,"./lib/json":18}],2:[function(require,module,exports){var _=require("../lodash");module.exports=components;function components(g){var visited={};var cmpts=[];var cmpt;function dfs(v){if(_.has(visited,v))return;visited[v]=true;cmpt.push(v);_.each(g.successors(v),dfs);_.each(g.predecessors(v),dfs)}_.each(g.nodes(),function(v){cmpt=[];dfs(v);if(cmpt.length){cmpts.push(cmpt)}});return cmpts}},{"../lodash":19}],3:[function(require,module,exports){var _=require("../lodash");module.exports=dfs;
|
||||
/*
|
||||
* A helper that preforms a pre- or post-order traversal on the input graph
|
||||
* and returns the nodes in the order they were visited. If the graph is
|
||||
* undirected then this algorithm will navigate using neighbors. If the graph
|
||||
* is directed then this algorithm will navigate using successors.
|
||||
*
|
||||
* Order must be one of "pre" or "post".
|
||||
*/function dfs(g,vs,order){if(!_.isArray(vs)){vs=[vs]}var navigation=(g.isDirected()?g.successors:g.neighbors).bind(g);var acc=[];var visited={};_.each(vs,function(v){if(!g.hasNode(v)){throw new Error("Graph does not have node: "+v)}doDfs(g,v,order==="post",visited,navigation,acc)});return acc}function doDfs(g,v,postorder,visited,navigation,acc){if(!_.has(visited,v)){visited[v]=true;if(!postorder){acc.push(v)}_.each(navigation(v),function(w){doDfs(g,w,postorder,visited,navigation,acc)});if(postorder){acc.push(v)}}}},{"../lodash":19}],4:[function(require,module,exports){var dijkstra=require("./dijkstra");var _=require("../lodash");module.exports=dijkstraAll;function dijkstraAll(g,weightFunc,edgeFunc){return _.transform(g.nodes(),function(acc,v){acc[v]=dijkstra(g,v,weightFunc,edgeFunc)},{})}},{"../lodash":19,"./dijkstra":5}],5:[function(require,module,exports){var _=require("../lodash");var PriorityQueue=require("../data/priority-queue");module.exports=dijkstra;var DEFAULT_WEIGHT_FUNC=_.constant(1);function dijkstra(g,source,weightFn,edgeFn){return runDijkstra(g,String(source),weightFn||DEFAULT_WEIGHT_FUNC,edgeFn||function(v){return g.outEdges(v)})}function runDijkstra(g,source,weightFn,edgeFn){var results={};var pq=new PriorityQueue;var v,vEntry;var updateNeighbors=function(edge){var w=edge.v!==v?edge.v:edge.w;var wEntry=results[w];var weight=weightFn(edge);var distance=vEntry.distance+weight;if(weight<0){throw new Error("dijkstra does not allow negative edge weights. "+"Bad edge: "+edge+" Weight: "+weight)}if(distance<wEntry.distance){wEntry.distance=distance;wEntry.predecessor=v;pq.decrease(w,distance)}};g.nodes().forEach(function(v){var distance=v===source?0:Number.POSITIVE_INFINITY;results[v]={distance:distance};pq.add(v,distance)});while(pq.size()>0){v=pq.removeMin();vEntry=results[v];if(vEntry.distance===Number.POSITIVE_INFINITY){break}edgeFn(v).forEach(updateNeighbors)}return results}},{"../data/priority-queue":15,"../lodash":19}],6:[function(require,module,exports){var _=require("../lodash");var tarjan=require("./tarjan");module.exports=findCycles;function findCycles(g){return _.filter(tarjan(g),function(cmpt){return cmpt.length>1||cmpt.length===1&&g.hasEdge(cmpt[0],cmpt[0])})}},{"../lodash":19,"./tarjan":13}],7:[function(require,module,exports){var _=require("../lodash");module.exports=floydWarshall;var DEFAULT_WEIGHT_FUNC=_.constant(1);function floydWarshall(g,weightFn,edgeFn){return runFloydWarshall(g,weightFn||DEFAULT_WEIGHT_FUNC,edgeFn||function(v){return g.outEdges(v)})}function runFloydWarshall(g,weightFn,edgeFn){var results={};var nodes=g.nodes();nodes.forEach(function(v){results[v]={};results[v][v]={distance:0};nodes.forEach(function(w){if(v!==w){results[v][w]={distance:Number.POSITIVE_INFINITY}}});edgeFn(v).forEach(function(edge){var w=edge.v===v?edge.w:edge.v;var d=weightFn(edge);results[v][w]={distance:d,predecessor:v}})});nodes.forEach(function(k){var rowK=results[k];nodes.forEach(function(i){var rowI=results[i];nodes.forEach(function(j){var ik=rowI[k];var kj=rowK[j];var ij=rowI[j];var altDistance=ik.distance+kj.distance;if(altDistance<ij.distance){ij.distance=altDistance;ij.predecessor=kj.predecessor}})})});return results}},{"../lodash":19}],8:[function(require,module,exports){module.exports={components:require("./components"),dijkstra:require("./dijkstra"),dijkstraAll:require("./dijkstra-all"),findCycles:require("./find-cycles"),floydWarshall:require("./floyd-warshall"),isAcyclic:require("./is-acyclic"),postorder:require("./postorder"),preorder:require("./preorder"),prim:require("./prim"),tarjan:require("./tarjan"),topsort:require("./topsort")}},{"./components":2,"./dijkstra":5,"./dijkstra-all":4,"./find-cycles":6,"./floyd-warshall":7,"./is-acyclic":9,"./postorder":10,"./preorder":11,"./prim":12,"./tarjan":13,"./topsort":14}],9:[function(require,module,exports){var topsort=require("./topsort");module.exports=isAcyclic;function isAcyclic(g){try{topsort(g)}catch(e){if(e instanceof topsort.CycleException){return false}throw e}return true}},{"./topsort":14}],10:[function(require,module,exports){var dfs=require("./dfs");module.exports=postorder;function postorder(g,vs){return dfs(g,vs,"post")}},{"./dfs":3}],11:[function(require,module,exports){var dfs=require("./dfs");module.exports=preorder;function preorder(g,vs){return dfs(g,vs,"pre")}},{"./dfs":3}],12:[function(require,module,exports){var _=require("../lodash");var Graph=require("../graph");var PriorityQueue=require("../data/priority-queue");module.exports=prim;function prim(g,weightFunc){var result=new Graph;var parents={};var pq=new PriorityQueue;var v;function updateNeighbors(edge){var w=edge.v===v?edge.w:edge.v;var pri=pq.priority(w);if(pri!==undefined){var edgeWeight=weightFunc(edge);if(edgeWeight<pri){parents[w]=v;pq.decrease(w,edgeWeight)}}}if(g.nodeCount()===0){return result}_.each(g.nodes(),function(v){pq.add(v,Number.POSITIVE_INFINITY);result.setNode(v)});
|
||||
// Start from an arbitrary node
|
||||
pq.decrease(g.nodes()[0],0);var init=false;while(pq.size()>0){v=pq.removeMin();if(_.has(parents,v)){result.setEdge(v,parents[v])}else if(init){throw new Error("Input graph is not connected: "+g)}else{init=true}g.nodeEdges(v).forEach(updateNeighbors)}return result}},{"../data/priority-queue":15,"../graph":16,"../lodash":19}],13:[function(require,module,exports){var _=require("../lodash");module.exports=tarjan;function tarjan(g){var index=0;var stack=[];var visited={};// node id -> { onStack, lowlink, index }
|
||||
var results=[];function dfs(v){var entry=visited[v]={onStack:true,lowlink:index,index:index++};stack.push(v);g.successors(v).forEach(function(w){if(!_.has(visited,w)){dfs(w);entry.lowlink=Math.min(entry.lowlink,visited[w].lowlink)}else if(visited[w].onStack){entry.lowlink=Math.min(entry.lowlink,visited[w].index)}});if(entry.lowlink===entry.index){var cmpt=[];var w;do{w=stack.pop();visited[w].onStack=false;cmpt.push(w)}while(v!==w);results.push(cmpt)}}g.nodes().forEach(function(v){if(!_.has(visited,v)){dfs(v)}});return results}},{"../lodash":19}],14:[function(require,module,exports){var _=require("../lodash");module.exports=topsort;topsort.CycleException=CycleException;function topsort(g){var visited={};var stack={};var results=[];function visit(node){if(_.has(stack,node)){throw new CycleException}if(!_.has(visited,node)){stack[node]=true;visited[node]=true;_.each(g.predecessors(node),visit);delete stack[node];results.push(node)}}_.each(g.sinks(),visit);if(_.size(visited)!==g.nodeCount()){throw new CycleException}return results}function CycleException(){}CycleException.prototype=new Error;// must be an instance of Error to pass testing
|
||||
},{"../lodash":19}],15:[function(require,module,exports){var _=require("../lodash");module.exports=PriorityQueue;
|
||||
/**
|
||||
* A min-priority queue data structure. This algorithm is derived from Cormen,
|
||||
* et al., "Introduction to Algorithms". The basic idea of a min-priority
|
||||
* queue is that you can efficiently (in O(1) time) get the smallest key in
|
||||
* the queue. Adding and removing elements takes O(log n) time. A key can
|
||||
* have its priority decreased in O(log n) time.
|
||||
*/function PriorityQueue(){this._arr=[];this._keyIndices={}}
|
||||
/**
|
||||
* Returns the number of elements in the queue. Takes `O(1)` time.
|
||||
*/PriorityQueue.prototype.size=function(){return this._arr.length};
|
||||
/**
|
||||
* Returns the keys that are in the queue. Takes `O(n)` time.
|
||||
*/PriorityQueue.prototype.keys=function(){return this._arr.map(function(x){return x.key})};
|
||||
/**
|
||||
* Returns `true` if **key** is in the queue and `false` if not.
|
||||
*/PriorityQueue.prototype.has=function(key){return _.has(this._keyIndices,key)};
|
||||
/**
|
||||
* Returns the priority for **key**. If **key** is not present in the queue
|
||||
* then this function returns `undefined`. Takes `O(1)` time.
|
||||
*
|
||||
* @param {Object} key
|
||||
*/PriorityQueue.prototype.priority=function(key){var index=this._keyIndices[key];if(index!==undefined){return this._arr[index].priority}};
|
||||
/**
|
||||
* Returns the key for the minimum element in this queue. If the queue is
|
||||
* empty this function throws an Error. Takes `O(1)` time.
|
||||
*/PriorityQueue.prototype.min=function(){if(this.size()===0){throw new Error("Queue underflow")}return this._arr[0].key};
|
||||
/**
|
||||
* Inserts a new key into the priority queue. If the key already exists in
|
||||
* the queue this function returns `false`; otherwise it will return `true`.
|
||||
* Takes `O(n)` time.
|
||||
*
|
||||
* @param {Object} key the key to add
|
||||
* @param {Number} priority the initial priority for the key
|
||||
*/PriorityQueue.prototype.add=function(key,priority){var keyIndices=this._keyIndices;key=String(key);if(!_.has(keyIndices,key)){var arr=this._arr;var index=arr.length;keyIndices[key]=index;arr.push({key:key,priority:priority});this._decrease(index);return true}return false};
|
||||
/**
|
||||
* Removes and returns the smallest key in the queue. Takes `O(log n)` time.
|
||||
*/PriorityQueue.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var min=this._arr.pop();delete this._keyIndices[min.key];this._heapify(0);return min.key};
|
||||
/**
|
||||
* Decreases the priority for **key** to **priority**. If the new priority is
|
||||
* greater than the previous priority, this function will throw an Error.
|
||||
*
|
||||
* @param {Object} key the key for which to raise priority
|
||||
* @param {Number} priority the new priority for the key
|
||||
*/PriorityQueue.prototype.decrease=function(key,priority){var index=this._keyIndices[key];if(priority>this._arr[index].priority){throw new Error("New priority is greater than current priority. "+"Key: "+key+" Old: "+this._arr[index].priority+" New: "+priority)}this._arr[index].priority=priority;this._decrease(index)};PriorityQueue.prototype._heapify=function(i){var arr=this._arr;var l=2*i;var r=l+1;var largest=i;if(l<arr.length){largest=arr[l].priority<arr[largest].priority?l:largest;if(r<arr.length){largest=arr[r].priority<arr[largest].priority?r:largest}if(largest!==i){this._swap(i,largest);this._heapify(largest)}}};PriorityQueue.prototype._decrease=function(index){var arr=this._arr;var priority=arr[index].priority;var parent;while(index!==0){parent=index>>1;if(arr[parent].priority<priority){break}this._swap(index,parent);index=parent}};PriorityQueue.prototype._swap=function(i,j){var arr=this._arr;var keyIndices=this._keyIndices;var origArrI=arr[i];var origArrJ=arr[j];arr[i]=origArrJ;arr[j]=origArrI;keyIndices[origArrJ.key]=i;keyIndices[origArrI.key]=j}},{"../lodash":19}],16:[function(require,module,exports){"use strict";var _=require("./lodash");module.exports=Graph;var DEFAULT_EDGE_NAME="\0";var GRAPH_NODE="\0";var EDGE_KEY_DELIM="";
|
||||
// Implementation notes:
|
||||
//
|
||||
// * Node id query functions should return string ids for the nodes
|
||||
// * Edge id query functions should return an "edgeObj", edge object, that is
|
||||
// composed of enough information to uniquely identify an edge: {v, w, name}.
|
||||
// * Internally we use an "edgeId", a stringified form of the edgeObj, to
|
||||
// reference edges. This is because we need a performant way to look these
|
||||
// edges up and, object properties, which have string keys, are the closest
|
||||
// we're going to get to a performant hashtable in JavaScript.
|
||||
function Graph(opts){this._isDirected=_.has(opts,"directed")?opts.directed:true;this._isMultigraph=_.has(opts,"multigraph")?opts.multigraph:false;this._isCompound=_.has(opts,"compound")?opts.compound:false;
|
||||
// Label for the graph itself
|
||||
this._label=undefined;
|
||||
// Defaults to be set when creating a new node
|
||||
this._defaultNodeLabelFn=_.constant(undefined);
|
||||
// Defaults to be set when creating a new edge
|
||||
this._defaultEdgeLabelFn=_.constant(undefined);
|
||||
// v -> label
|
||||
this._nodes={};if(this._isCompound){
|
||||
// v -> parent
|
||||
this._parent={};
|
||||
// v -> children
|
||||
this._children={};this._children[GRAPH_NODE]={}}
|
||||
// v -> edgeObj
|
||||
this._in={};
|
||||
// u -> v -> Number
|
||||
this._preds={};
|
||||
// v -> edgeObj
|
||||
this._out={};
|
||||
// v -> w -> Number
|
||||
this._sucs={};
|
||||
// e -> edgeObj
|
||||
this._edgeObjs={};
|
||||
// e -> label
|
||||
this._edgeLabels={}}
|
||||
/* Number of nodes in the graph. Should only be changed by the implementation. */Graph.prototype._nodeCount=0;
|
||||
/* Number of edges in the graph. Should only be changed by the implementation. */Graph.prototype._edgeCount=0;
|
||||
/* === Graph functions ========= */Graph.prototype.isDirected=function(){return this._isDirected};Graph.prototype.isMultigraph=function(){return this._isMultigraph};Graph.prototype.isCompound=function(){return this._isCompound};Graph.prototype.setGraph=function(label){this._label=label;return this};Graph.prototype.graph=function(){return this._label};
|
||||
/* === Node functions ========== */Graph.prototype.setDefaultNodeLabel=function(newDefault){if(!_.isFunction(newDefault)){newDefault=_.constant(newDefault)}this._defaultNodeLabelFn=newDefault;return this};Graph.prototype.nodeCount=function(){return this._nodeCount};Graph.prototype.nodes=function(){return _.keys(this._nodes)};Graph.prototype.sources=function(){var self=this;return _.filter(this.nodes(),function(v){return _.isEmpty(self._in[v])})};Graph.prototype.sinks=function(){var self=this;return _.filter(this.nodes(),function(v){return _.isEmpty(self._out[v])})};Graph.prototype.setNodes=function(vs,value){var args=arguments;var self=this;_.each(vs,function(v){if(args.length>1){self.setNode(v,value)}else{self.setNode(v)}});return this};Graph.prototype.setNode=function(v,value){if(_.has(this._nodes,v)){if(arguments.length>1){this._nodes[v]=value}return this}this._nodes[v]=arguments.length>1?value:this._defaultNodeLabelFn(v);if(this._isCompound){this._parent[v]=GRAPH_NODE;this._children[v]={};this._children[GRAPH_NODE][v]=true}this._in[v]={};this._preds[v]={};this._out[v]={};this._sucs[v]={};++this._nodeCount;return this};Graph.prototype.node=function(v){return this._nodes[v]};Graph.prototype.hasNode=function(v){return _.has(this._nodes,v)};Graph.prototype.removeNode=function(v){var self=this;if(_.has(this._nodes,v)){var removeEdge=function(e){self.removeEdge(self._edgeObjs[e])};delete this._nodes[v];if(this._isCompound){this._removeFromParentsChildList(v);delete this._parent[v];_.each(this.children(v),function(child){self.setParent(child)});delete this._children[v]}_.each(_.keys(this._in[v]),removeEdge);delete this._in[v];delete this._preds[v];_.each(_.keys(this._out[v]),removeEdge);delete this._out[v];delete this._sucs[v];--this._nodeCount}return this};Graph.prototype.setParent=function(v,parent){if(!this._isCompound){throw new Error("Cannot set parent in a non-compound graph")}if(_.isUndefined(parent)){parent=GRAPH_NODE}else{
|
||||
// Coerce parent to string
|
||||
parent+="";for(var ancestor=parent;!_.isUndefined(ancestor);ancestor=this.parent(ancestor)){if(ancestor===v){throw new Error("Setting "+parent+" as parent of "+v+" would create a cycle")}}this.setNode(parent)}this.setNode(v);this._removeFromParentsChildList(v);this._parent[v]=parent;this._children[parent][v]=true;return this};Graph.prototype._removeFromParentsChildList=function(v){delete this._children[this._parent[v]][v]};Graph.prototype.parent=function(v){if(this._isCompound){var parent=this._parent[v];if(parent!==GRAPH_NODE){return parent}}};Graph.prototype.children=function(v){if(_.isUndefined(v)){v=GRAPH_NODE}if(this._isCompound){var children=this._children[v];if(children){return _.keys(children)}}else if(v===GRAPH_NODE){return this.nodes()}else if(this.hasNode(v)){return[]}};Graph.prototype.predecessors=function(v){var predsV=this._preds[v];if(predsV){return _.keys(predsV)}};Graph.prototype.successors=function(v){var sucsV=this._sucs[v];if(sucsV){return _.keys(sucsV)}};Graph.prototype.neighbors=function(v){var preds=this.predecessors(v);if(preds){return _.union(preds,this.successors(v))}};Graph.prototype.isLeaf=function(v){var neighbors;if(this.isDirected()){neighbors=this.successors(v)}else{neighbors=this.neighbors(v)}return neighbors.length===0};Graph.prototype.filterNodes=function(filter){var copy=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});copy.setGraph(this.graph());var self=this;_.each(this._nodes,function(value,v){if(filter(v)){copy.setNode(v,value)}});_.each(this._edgeObjs,function(e){if(copy.hasNode(e.v)&©.hasNode(e.w)){copy.setEdge(e,self.edge(e))}});var parents={};function findParent(v){var parent=self.parent(v);if(parent===undefined||copy.hasNode(parent)){parents[v]=parent;return parent}else if(parent in parents){return parents[parent]}else{return findParent(parent)}}if(this._isCompound){_.each(copy.nodes(),function(v){copy.setParent(v,findParent(v))})}return copy};
|
||||
/* === Edge functions ========== */Graph.prototype.setDefaultEdgeLabel=function(newDefault){if(!_.isFunction(newDefault)){newDefault=_.constant(newDefault)}this._defaultEdgeLabelFn=newDefault;return this};Graph.prototype.edgeCount=function(){return this._edgeCount};Graph.prototype.edges=function(){return _.values(this._edgeObjs)};Graph.prototype.setPath=function(vs,value){var self=this;var args=arguments;_.reduce(vs,function(v,w){if(args.length>1){self.setEdge(v,w,value)}else{self.setEdge(v,w)}return w});return this};
|
||||
/*
|
||||
* setEdge(v, w, [value, [name]])
|
||||
* setEdge({ v, w, [name] }, [value])
|
||||
*/Graph.prototype.setEdge=function(){var v,w,name,value;var valueSpecified=false;var arg0=arguments[0];if(typeof arg0==="object"&&arg0!==null&&"v"in arg0){v=arg0.v;w=arg0.w;name=arg0.name;if(arguments.length===2){value=arguments[1];valueSpecified=true}}else{v=arg0;w=arguments[1];name=arguments[3];if(arguments.length>2){value=arguments[2];valueSpecified=true}}v=""+v;w=""+w;if(!_.isUndefined(name)){name=""+name}var e=edgeArgsToId(this._isDirected,v,w,name);if(_.has(this._edgeLabels,e)){if(valueSpecified){this._edgeLabels[e]=value}return this}if(!_.isUndefined(name)&&!this._isMultigraph){throw new Error("Cannot set a named edge when isMultigraph = false")}
|
||||
// It didn't exist, so we need to create it.
|
||||
// First ensure the nodes exist.
|
||||
this.setNode(v);this.setNode(w);this._edgeLabels[e]=valueSpecified?value:this._defaultEdgeLabelFn(v,w,name);var edgeObj=edgeArgsToObj(this._isDirected,v,w,name);
|
||||
// Ensure we add undirected edges in a consistent way.
|
||||
v=edgeObj.v;w=edgeObj.w;Object.freeze(edgeObj);this._edgeObjs[e]=edgeObj;incrementOrInitEntry(this._preds[w],v);incrementOrInitEntry(this._sucs[v],w);this._in[w][e]=edgeObj;this._out[v][e]=edgeObj;this._edgeCount++;return this};Graph.prototype.edge=function(v,w,name){var e=arguments.length===1?edgeObjToId(this._isDirected,arguments[0]):edgeArgsToId(this._isDirected,v,w,name);return this._edgeLabels[e]};Graph.prototype.hasEdge=function(v,w,name){var e=arguments.length===1?edgeObjToId(this._isDirected,arguments[0]):edgeArgsToId(this._isDirected,v,w,name);return _.has(this._edgeLabels,e)};Graph.prototype.removeEdge=function(v,w,name){var e=arguments.length===1?edgeObjToId(this._isDirected,arguments[0]):edgeArgsToId(this._isDirected,v,w,name);var edge=this._edgeObjs[e];if(edge){v=edge.v;w=edge.w;delete this._edgeLabels[e];delete this._edgeObjs[e];decrementOrRemoveEntry(this._preds[w],v);decrementOrRemoveEntry(this._sucs[v],w);delete this._in[w][e];delete this._out[v][e];this._edgeCount--}return this};Graph.prototype.inEdges=function(v,u){var inV=this._in[v];if(inV){var edges=_.values(inV);if(!u){return edges}return _.filter(edges,function(edge){return edge.v===u})}};Graph.prototype.outEdges=function(v,w){var outV=this._out[v];if(outV){var edges=_.values(outV);if(!w){return edges}return _.filter(edges,function(edge){return edge.w===w})}};Graph.prototype.nodeEdges=function(v,w){var inEdges=this.inEdges(v,w);if(inEdges){return inEdges.concat(this.outEdges(v,w))}};function incrementOrInitEntry(map,k){if(map[k]){map[k]++}else{map[k]=1}}function decrementOrRemoveEntry(map,k){if(!--map[k]){delete map[k]}}function edgeArgsToId(isDirected,v_,w_,name){var v=""+v_;var w=""+w_;if(!isDirected&&v>w){var tmp=v;v=w;w=tmp}return v+EDGE_KEY_DELIM+w+EDGE_KEY_DELIM+(_.isUndefined(name)?DEFAULT_EDGE_NAME:name)}function edgeArgsToObj(isDirected,v_,w_,name){var v=""+v_;var w=""+w_;if(!isDirected&&v>w){var tmp=v;v=w;w=tmp}var edgeObj={v:v,w:w};if(name){edgeObj.name=name}return edgeObj}function edgeObjToId(isDirected,edgeObj){return edgeArgsToId(isDirected,edgeObj.v,edgeObj.w,edgeObj.name)}},{"./lodash":19}],17:[function(require,module,exports){
|
||||
// Includes only the "core" of graphlib
|
||||
module.exports={Graph:require("./graph"),version:require("./version")}},{"./graph":16,"./version":20}],18:[function(require,module,exports){var _=require("./lodash");var Graph=require("./graph");module.exports={write:write,read:read};function write(g){var json={options:{directed:g.isDirected(),multigraph:g.isMultigraph(),compound:g.isCompound()},nodes:writeNodes(g),edges:writeEdges(g)};if(!_.isUndefined(g.graph())){json.value=_.clone(g.graph())}return json}function writeNodes(g){return _.map(g.nodes(),function(v){var nodeValue=g.node(v);var parent=g.parent(v);var node={v:v};if(!_.isUndefined(nodeValue)){node.value=nodeValue}if(!_.isUndefined(parent)){node.parent=parent}return node})}function writeEdges(g){return _.map(g.edges(),function(e){var edgeValue=g.edge(e);var edge={v:e.v,w:e.w};if(!_.isUndefined(e.name)){edge.name=e.name}if(!_.isUndefined(edgeValue)){edge.value=edgeValue}return edge})}function read(json){var g=new Graph(json.options).setGraph(json.value);_.each(json.nodes,function(entry){g.setNode(entry.v,entry.value);if(entry.parent){g.setParent(entry.v,entry.parent)}});_.each(json.edges,function(entry){g.setEdge({v:entry.v,w:entry.w,name:entry.name},entry.value)});return g}},{"./graph":16,"./lodash":19}],19:[function(require,module,exports){
|
||||
/* global window */
|
||||
var lodash;if(typeof require==="function"){try{lodash={clone:require("lodash/clone"),constant:require("lodash/constant"),each:require("lodash/each"),filter:require("lodash/filter"),has:require("lodash/has"),isArray:require("lodash/isArray"),isEmpty:require("lodash/isEmpty"),isFunction:require("lodash/isFunction"),isUndefined:require("lodash/isUndefined"),keys:require("lodash/keys"),map:require("lodash/map"),reduce:require("lodash/reduce"),size:require("lodash/size"),transform:require("lodash/transform"),union:require("lodash/union"),values:require("lodash/values")}}catch(e){
|
||||
// continue regardless of error
|
||||
}}if(!lodash){lodash=window._}module.exports=lodash},{"lodash/clone":undefined,"lodash/constant":undefined,"lodash/each":undefined,"lodash/filter":undefined,"lodash/has":undefined,"lodash/isArray":undefined,"lodash/isEmpty":undefined,"lodash/isFunction":undefined,"lodash/isUndefined":undefined,"lodash/keys":undefined,"lodash/map":undefined,"lodash/reduce":undefined,"lodash/size":undefined,"lodash/transform":undefined,"lodash/union":undefined,"lodash/values":undefined}],20:[function(require,module,exports){module.exports="2.1.8"},{}]},{},[1])(1)});
|
6905
node_modules/graphlib/dist/graphlib.js
generated
vendored
Normal file
6905
node_modules/graphlib/dist/graphlib.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2522
node_modules/graphlib/dist/graphlib.min.js
generated
vendored
Normal file
2522
node_modules/graphlib/dist/graphlib.min.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
38
node_modules/graphlib/index.js
generated
vendored
Normal file
38
node_modules/graphlib/index.js
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Chris Pettitt
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
var lib = require("./lib");
|
||||
|
||||
module.exports = {
|
||||
Graph: lib.Graph,
|
||||
json: require("./lib/json"),
|
||||
alg: require("./lib/alg"),
|
||||
version: lib.version
|
||||
};
|
27
node_modules/graphlib/lib/alg/components.js
generated
vendored
Normal file
27
node_modules/graphlib/lib/alg/components.js
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
var _ = require("../lodash");
|
||||
|
||||
module.exports = components;
|
||||
|
||||
function components(g) {
|
||||
var visited = {};
|
||||
var cmpts = [];
|
||||
var cmpt;
|
||||
|
||||
function dfs(v) {
|
||||
if (_.has(visited, v)) return;
|
||||
visited[v] = true;
|
||||
cmpt.push(v);
|
||||
_.each(g.successors(v), dfs);
|
||||
_.each(g.predecessors(v), dfs);
|
||||
}
|
||||
|
||||
_.each(g.nodes(), function(v) {
|
||||
cmpt = [];
|
||||
dfs(v);
|
||||
if (cmpt.length) {
|
||||
cmpts.push(cmpt);
|
||||
}
|
||||
});
|
||||
|
||||
return cmpts;
|
||||
}
|
42
node_modules/graphlib/lib/alg/dfs.js
generated
vendored
Normal file
42
node_modules/graphlib/lib/alg/dfs.js
generated
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
var _ = require("../lodash");
|
||||
|
||||
module.exports = dfs;
|
||||
|
||||
/*
|
||||
* A helper that preforms a pre- or post-order traversal on the input graph
|
||||
* and returns the nodes in the order they were visited. If the graph is
|
||||
* undirected then this algorithm will navigate using neighbors. If the graph
|
||||
* is directed then this algorithm will navigate using successors.
|
||||
*
|
||||
* Order must be one of "pre" or "post".
|
||||
*/
|
||||
function dfs(g, vs, order) {
|
||||
if (!_.isArray(vs)) {
|
||||
vs = [vs];
|
||||
}
|
||||
|
||||
var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g);
|
||||
|
||||
var acc = [];
|
||||
var visited = {};
|
||||
_.each(vs, function(v) {
|
||||
if (!g.hasNode(v)) {
|
||||
throw new Error("Graph does not have node: " + v);
|
||||
}
|
||||
|
||||
doDfs(g, v, order === "post", visited, navigation, acc);
|
||||
});
|
||||
return acc;
|
||||
}
|
||||
|
||||
function doDfs(g, v, postorder, visited, navigation, acc) {
|
||||
if (!_.has(visited, v)) {
|
||||
visited[v] = true;
|
||||
|
||||
if (!postorder) { acc.push(v); }
|
||||
_.each(navigation(v), function(w) {
|
||||
doDfs(g, w, postorder, visited, navigation, acc);
|
||||
});
|
||||
if (postorder) { acc.push(v); }
|
||||
}
|
||||
}
|
10
node_modules/graphlib/lib/alg/dijkstra-all.js
generated
vendored
Normal file
10
node_modules/graphlib/lib/alg/dijkstra-all.js
generated
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
var dijkstra = require("./dijkstra");
|
||||
var _ = require("../lodash");
|
||||
|
||||
module.exports = dijkstraAll;
|
||||
|
||||
function dijkstraAll(g, weightFunc, edgeFunc) {
|
||||
return _.transform(g.nodes(), function(acc, v) {
|
||||
acc[v] = dijkstra(g, v, weightFunc, edgeFunc);
|
||||
}, {});
|
||||
}
|
54
node_modules/graphlib/lib/alg/dijkstra.js
generated
vendored
Normal file
54
node_modules/graphlib/lib/alg/dijkstra.js
generated
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
var _ = require("../lodash");
|
||||
var PriorityQueue = require("../data/priority-queue");
|
||||
|
||||
module.exports = dijkstra;
|
||||
|
||||
var DEFAULT_WEIGHT_FUNC = _.constant(1);
|
||||
|
||||
function dijkstra(g, source, weightFn, edgeFn) {
|
||||
return runDijkstra(g, String(source),
|
||||
weightFn || DEFAULT_WEIGHT_FUNC,
|
||||
edgeFn || function(v) { return g.outEdges(v); });
|
||||
}
|
||||
|
||||
function runDijkstra(g, source, weightFn, edgeFn) {
|
||||
var results = {};
|
||||
var pq = new PriorityQueue();
|
||||
var v, vEntry;
|
||||
|
||||
var updateNeighbors = function(edge) {
|
||||
var w = edge.v !== v ? edge.v : edge.w;
|
||||
var wEntry = results[w];
|
||||
var weight = weightFn(edge);
|
||||
var distance = vEntry.distance + weight;
|
||||
|
||||
if (weight < 0) {
|
||||
throw new Error("dijkstra does not allow negative edge weights. " +
|
||||
"Bad edge: " + edge + " Weight: " + weight);
|
||||
}
|
||||
|
||||
if (distance < wEntry.distance) {
|
||||
wEntry.distance = distance;
|
||||
wEntry.predecessor = v;
|
||||
pq.decrease(w, distance);
|
||||
}
|
||||
};
|
||||
|
||||
g.nodes().forEach(function(v) {
|
||||
var distance = v === source ? 0 : Number.POSITIVE_INFINITY;
|
||||
results[v] = { distance: distance };
|
||||
pq.add(v, distance);
|
||||
});
|
||||
|
||||
while (pq.size() > 0) {
|
||||
v = pq.removeMin();
|
||||
vEntry = results[v];
|
||||
if (vEntry.distance === Number.POSITIVE_INFINITY) {
|
||||
break;
|
||||
}
|
||||
|
||||
edgeFn(v).forEach(updateNeighbors);
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
10
node_modules/graphlib/lib/alg/find-cycles.js
generated
vendored
Normal file
10
node_modules/graphlib/lib/alg/find-cycles.js
generated
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
var _ = require("../lodash");
|
||||
var tarjan = require("./tarjan");
|
||||
|
||||
module.exports = findCycles;
|
||||
|
||||
function findCycles(g) {
|
||||
return _.filter(tarjan(g), function(cmpt) {
|
||||
return cmpt.length > 1 || (cmpt.length === 1 && g.hasEdge(cmpt[0], cmpt[0]));
|
||||
});
|
||||
}
|
50
node_modules/graphlib/lib/alg/floyd-warshall.js
generated
vendored
Normal file
50
node_modules/graphlib/lib/alg/floyd-warshall.js
generated
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
var _ = require("../lodash");
|
||||
|
||||
module.exports = floydWarshall;
|
||||
|
||||
var DEFAULT_WEIGHT_FUNC = _.constant(1);
|
||||
|
||||
function floydWarshall(g, weightFn, edgeFn) {
|
||||
return runFloydWarshall(g,
|
||||
weightFn || DEFAULT_WEIGHT_FUNC,
|
||||
edgeFn || function(v) { return g.outEdges(v); });
|
||||
}
|
||||
|
||||
function runFloydWarshall(g, weightFn, edgeFn) {
|
||||
var results = {};
|
||||
var nodes = g.nodes();
|
||||
|
||||
nodes.forEach(function(v) {
|
||||
results[v] = {};
|
||||
results[v][v] = { distance: 0 };
|
||||
nodes.forEach(function(w) {
|
||||
if (v !== w) {
|
||||
results[v][w] = { distance: Number.POSITIVE_INFINITY };
|
||||
}
|
||||
});
|
||||
edgeFn(v).forEach(function(edge) {
|
||||
var w = edge.v === v ? edge.w : edge.v;
|
||||
var d = weightFn(edge);
|
||||
results[v][w] = { distance: d, predecessor: v };
|
||||
});
|
||||
});
|
||||
|
||||
nodes.forEach(function(k) {
|
||||
var rowK = results[k];
|
||||
nodes.forEach(function(i) {
|
||||
var rowI = results[i];
|
||||
nodes.forEach(function(j) {
|
||||
var ik = rowI[k];
|
||||
var kj = rowK[j];
|
||||
var ij = rowI[j];
|
||||
var altDistance = ik.distance + kj.distance;
|
||||
if (altDistance < ij.distance) {
|
||||
ij.distance = altDistance;
|
||||
ij.predecessor = kj.predecessor;
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
return results;
|
||||
}
|
13
node_modules/graphlib/lib/alg/index.js
generated
vendored
Normal file
13
node_modules/graphlib/lib/alg/index.js
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
module.exports = {
|
||||
components: require("./components"),
|
||||
dijkstra: require("./dijkstra"),
|
||||
dijkstraAll: require("./dijkstra-all"),
|
||||
findCycles: require("./find-cycles"),
|
||||
floydWarshall: require("./floyd-warshall"),
|
||||
isAcyclic: require("./is-acyclic"),
|
||||
postorder: require("./postorder"),
|
||||
preorder: require("./preorder"),
|
||||
prim: require("./prim"),
|
||||
tarjan: require("./tarjan"),
|
||||
topsort: require("./topsort")
|
||||
};
|
15
node_modules/graphlib/lib/alg/is-acyclic.js
generated
vendored
Normal file
15
node_modules/graphlib/lib/alg/is-acyclic.js
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
var topsort = require("./topsort");
|
||||
|
||||
module.exports = isAcyclic;
|
||||
|
||||
function isAcyclic(g) {
|
||||
try {
|
||||
topsort(g);
|
||||
} catch (e) {
|
||||
if (e instanceof topsort.CycleException) {
|
||||
return false;
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
return true;
|
||||
}
|
7
node_modules/graphlib/lib/alg/postorder.js
generated
vendored
Normal file
7
node_modules/graphlib/lib/alg/postorder.js
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
var dfs = require("./dfs");
|
||||
|
||||
module.exports = postorder;
|
||||
|
||||
function postorder(g, vs) {
|
||||
return dfs(g, vs, "post");
|
||||
}
|
7
node_modules/graphlib/lib/alg/preorder.js
generated
vendored
Normal file
7
node_modules/graphlib/lib/alg/preorder.js
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
var dfs = require("./dfs");
|
||||
|
||||
module.exports = preorder;
|
||||
|
||||
function preorder(g, vs) {
|
||||
return dfs(g, vs, "pre");
|
||||
}
|
52
node_modules/graphlib/lib/alg/prim.js
generated
vendored
Normal file
52
node_modules/graphlib/lib/alg/prim.js
generated
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
var _ = require("../lodash");
|
||||
var Graph = require("../graph");
|
||||
var PriorityQueue = require("../data/priority-queue");
|
||||
|
||||
module.exports = prim;
|
||||
|
||||
function prim(g, weightFunc) {
|
||||
var result = new Graph();
|
||||
var parents = {};
|
||||
var pq = new PriorityQueue();
|
||||
var v;
|
||||
|
||||
function updateNeighbors(edge) {
|
||||
var w = edge.v === v ? edge.w : edge.v;
|
||||
var pri = pq.priority(w);
|
||||
if (pri !== undefined) {
|
||||
var edgeWeight = weightFunc(edge);
|
||||
if (edgeWeight < pri) {
|
||||
parents[w] = v;
|
||||
pq.decrease(w, edgeWeight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (g.nodeCount() === 0) {
|
||||
return result;
|
||||
}
|
||||
|
||||
_.each(g.nodes(), function(v) {
|
||||
pq.add(v, Number.POSITIVE_INFINITY);
|
||||
result.setNode(v);
|
||||
});
|
||||
|
||||
// Start from an arbitrary node
|
||||
pq.decrease(g.nodes()[0], 0);
|
||||
|
||||
var init = false;
|
||||
while (pq.size() > 0) {
|
||||
v = pq.removeMin();
|
||||
if (_.has(parents, v)) {
|
||||
result.setEdge(v, parents[v]);
|
||||
} else if (init) {
|
||||
throw new Error("Input graph is not connected: " + g);
|
||||
} else {
|
||||
init = true;
|
||||
}
|
||||
|
||||
g.nodeEdges(v).forEach(updateNeighbors);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
47
node_modules/graphlib/lib/alg/tarjan.js
generated
vendored
Normal file
47
node_modules/graphlib/lib/alg/tarjan.js
generated
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
var _ = require("../lodash");
|
||||
|
||||
module.exports = tarjan;
|
||||
|
||||
function tarjan(g) {
|
||||
var index = 0;
|
||||
var stack = [];
|
||||
var visited = {}; // node id -> { onStack, lowlink, index }
|
||||
var results = [];
|
||||
|
||||
function dfs(v) {
|
||||
var entry = visited[v] = {
|
||||
onStack: true,
|
||||
lowlink: index,
|
||||
index: index++
|
||||
};
|
||||
stack.push(v);
|
||||
|
||||
g.successors(v).forEach(function(w) {
|
||||
if (!_.has(visited, w)) {
|
||||
dfs(w);
|
||||
entry.lowlink = Math.min(entry.lowlink, visited[w].lowlink);
|
||||
} else if (visited[w].onStack) {
|
||||
entry.lowlink = Math.min(entry.lowlink, visited[w].index);
|
||||
}
|
||||
});
|
||||
|
||||
if (entry.lowlink === entry.index) {
|
||||
var cmpt = [];
|
||||
var w;
|
||||
do {
|
||||
w = stack.pop();
|
||||
visited[w].onStack = false;
|
||||
cmpt.push(w);
|
||||
} while (v !== w);
|
||||
results.push(cmpt);
|
||||
}
|
||||
}
|
||||
|
||||
g.nodes().forEach(function(v) {
|
||||
if (!_.has(visited, v)) {
|
||||
dfs(v);
|
||||
}
|
||||
});
|
||||
|
||||
return results;
|
||||
}
|
35
node_modules/graphlib/lib/alg/topsort.js
generated
vendored
Normal file
35
node_modules/graphlib/lib/alg/topsort.js
generated
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
var _ = require("../lodash");
|
||||
|
||||
module.exports = topsort;
|
||||
topsort.CycleException = CycleException;
|
||||
|
||||
function topsort(g) {
|
||||
var visited = {};
|
||||
var stack = {};
|
||||
var results = [];
|
||||
|
||||
function visit(node) {
|
||||
if (_.has(stack, node)) {
|
||||
throw new CycleException();
|
||||
}
|
||||
|
||||
if (!_.has(visited, node)) {
|
||||
stack[node] = true;
|
||||
visited[node] = true;
|
||||
_.each(g.predecessors(node), visit);
|
||||
delete stack[node];
|
||||
results.push(node);
|
||||
}
|
||||
}
|
||||
|
||||
_.each(g.sinks(), visit);
|
||||
|
||||
if (_.size(visited) !== g.nodeCount()) {
|
||||
throw new CycleException();
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
function CycleException() {}
|
||||
CycleException.prototype = new Error(); // must be an instance of Error to pass testing
|
152
node_modules/graphlib/lib/data/priority-queue.js
generated
vendored
Normal file
152
node_modules/graphlib/lib/data/priority-queue.js
generated
vendored
Normal file
@@ -0,0 +1,152 @@
|
||||
var _ = require("../lodash");
|
||||
|
||||
module.exports = PriorityQueue;
|
||||
|
||||
/**
|
||||
* A min-priority queue data structure. This algorithm is derived from Cormen,
|
||||
* et al., "Introduction to Algorithms". The basic idea of a min-priority
|
||||
* queue is that you can efficiently (in O(1) time) get the smallest key in
|
||||
* the queue. Adding and removing elements takes O(log n) time. A key can
|
||||
* have its priority decreased in O(log n) time.
|
||||
*/
|
||||
function PriorityQueue() {
|
||||
this._arr = [];
|
||||
this._keyIndices = {};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of elements in the queue. Takes `O(1)` time.
|
||||
*/
|
||||
PriorityQueue.prototype.size = function() {
|
||||
return this._arr.length;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the keys that are in the queue. Takes `O(n)` time.
|
||||
*/
|
||||
PriorityQueue.prototype.keys = function() {
|
||||
return this._arr.map(function(x) { return x.key; });
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns `true` if **key** is in the queue and `false` if not.
|
||||
*/
|
||||
PriorityQueue.prototype.has = function(key) {
|
||||
return _.has(this._keyIndices, key);
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the priority for **key**. If **key** is not present in the queue
|
||||
* then this function returns `undefined`. Takes `O(1)` time.
|
||||
*
|
||||
* @param {Object} key
|
||||
*/
|
||||
PriorityQueue.prototype.priority = function(key) {
|
||||
var index = this._keyIndices[key];
|
||||
if (index !== undefined) {
|
||||
return this._arr[index].priority;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the key for the minimum element in this queue. If the queue is
|
||||
* empty this function throws an Error. Takes `O(1)` time.
|
||||
*/
|
||||
PriorityQueue.prototype.min = function() {
|
||||
if (this.size() === 0) {
|
||||
throw new Error("Queue underflow");
|
||||
}
|
||||
return this._arr[0].key;
|
||||
};
|
||||
|
||||
/**
|
||||
* Inserts a new key into the priority queue. If the key already exists in
|
||||
* the queue this function returns `false`; otherwise it will return `true`.
|
||||
* Takes `O(n)` time.
|
||||
*
|
||||
* @param {Object} key the key to add
|
||||
* @param {Number} priority the initial priority for the key
|
||||
*/
|
||||
PriorityQueue.prototype.add = function(key, priority) {
|
||||
var keyIndices = this._keyIndices;
|
||||
key = String(key);
|
||||
if (!_.has(keyIndices, key)) {
|
||||
var arr = this._arr;
|
||||
var index = arr.length;
|
||||
keyIndices[key] = index;
|
||||
arr.push({key: key, priority: priority});
|
||||
this._decrease(index);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Removes and returns the smallest key in the queue. Takes `O(log n)` time.
|
||||
*/
|
||||
PriorityQueue.prototype.removeMin = function() {
|
||||
this._swap(0, this._arr.length - 1);
|
||||
var min = this._arr.pop();
|
||||
delete this._keyIndices[min.key];
|
||||
this._heapify(0);
|
||||
return min.key;
|
||||
};
|
||||
|
||||
/**
|
||||
* Decreases the priority for **key** to **priority**. If the new priority is
|
||||
* greater than the previous priority, this function will throw an Error.
|
||||
*
|
||||
* @param {Object} key the key for which to raise priority
|
||||
* @param {Number} priority the new priority for the key
|
||||
*/
|
||||
PriorityQueue.prototype.decrease = function(key, priority) {
|
||||
var index = this._keyIndices[key];
|
||||
if (priority > this._arr[index].priority) {
|
||||
throw new Error("New priority is greater than current priority. " +
|
||||
"Key: " + key + " Old: " + this._arr[index].priority + " New: " + priority);
|
||||
}
|
||||
this._arr[index].priority = priority;
|
||||
this._decrease(index);
|
||||
};
|
||||
|
||||
PriorityQueue.prototype._heapify = function(i) {
|
||||
var arr = this._arr;
|
||||
var l = 2 * i;
|
||||
var r = l + 1;
|
||||
var largest = i;
|
||||
if (l < arr.length) {
|
||||
largest = arr[l].priority < arr[largest].priority ? l : largest;
|
||||
if (r < arr.length) {
|
||||
largest = arr[r].priority < arr[largest].priority ? r : largest;
|
||||
}
|
||||
if (largest !== i) {
|
||||
this._swap(i, largest);
|
||||
this._heapify(largest);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
PriorityQueue.prototype._decrease = function(index) {
|
||||
var arr = this._arr;
|
||||
var priority = arr[index].priority;
|
||||
var parent;
|
||||
while (index !== 0) {
|
||||
parent = index >> 1;
|
||||
if (arr[parent].priority < priority) {
|
||||
break;
|
||||
}
|
||||
this._swap(index, parent);
|
||||
index = parent;
|
||||
}
|
||||
};
|
||||
|
||||
PriorityQueue.prototype._swap = function(i, j) {
|
||||
var arr = this._arr;
|
||||
var keyIndices = this._keyIndices;
|
||||
var origArrI = arr[i];
|
||||
var origArrJ = arr[j];
|
||||
arr[i] = origArrJ;
|
||||
arr[j] = origArrI;
|
||||
keyIndices[origArrJ.key] = i;
|
||||
keyIndices[origArrI.key] = j;
|
||||
};
|
532
node_modules/graphlib/lib/graph.js
generated
vendored
Normal file
532
node_modules/graphlib/lib/graph.js
generated
vendored
Normal file
@@ -0,0 +1,532 @@
|
||||
"use strict";
|
||||
|
||||
var _ = require("./lodash");
|
||||
|
||||
module.exports = Graph;
|
||||
|
||||
var DEFAULT_EDGE_NAME = "\x00";
|
||||
var GRAPH_NODE = "\x00";
|
||||
var EDGE_KEY_DELIM = "\x01";
|
||||
|
||||
// Implementation notes:
|
||||
//
|
||||
// * Node id query functions should return string ids for the nodes
|
||||
// * Edge id query functions should return an "edgeObj", edge object, that is
|
||||
// composed of enough information to uniquely identify an edge: {v, w, name}.
|
||||
// * Internally we use an "edgeId", a stringified form of the edgeObj, to
|
||||
// reference edges. This is because we need a performant way to look these
|
||||
// edges up and, object properties, which have string keys, are the closest
|
||||
// we're going to get to a performant hashtable in JavaScript.
|
||||
|
||||
function Graph(opts) {
|
||||
this._isDirected = _.has(opts, "directed") ? opts.directed : true;
|
||||
this._isMultigraph = _.has(opts, "multigraph") ? opts.multigraph : false;
|
||||
this._isCompound = _.has(opts, "compound") ? opts.compound : false;
|
||||
|
||||
// Label for the graph itself
|
||||
this._label = undefined;
|
||||
|
||||
// Defaults to be set when creating a new node
|
||||
this._defaultNodeLabelFn = _.constant(undefined);
|
||||
|
||||
// Defaults to be set when creating a new edge
|
||||
this._defaultEdgeLabelFn = _.constant(undefined);
|
||||
|
||||
// v -> label
|
||||
this._nodes = {};
|
||||
|
||||
if (this._isCompound) {
|
||||
// v -> parent
|
||||
this._parent = {};
|
||||
|
||||
// v -> children
|
||||
this._children = {};
|
||||
this._children[GRAPH_NODE] = {};
|
||||
}
|
||||
|
||||
// v -> edgeObj
|
||||
this._in = {};
|
||||
|
||||
// u -> v -> Number
|
||||
this._preds = {};
|
||||
|
||||
// v -> edgeObj
|
||||
this._out = {};
|
||||
|
||||
// v -> w -> Number
|
||||
this._sucs = {};
|
||||
|
||||
// e -> edgeObj
|
||||
this._edgeObjs = {};
|
||||
|
||||
// e -> label
|
||||
this._edgeLabels = {};
|
||||
}
|
||||
|
||||
/* Number of nodes in the graph. Should only be changed by the implementation. */
|
||||
Graph.prototype._nodeCount = 0;
|
||||
|
||||
/* Number of edges in the graph. Should only be changed by the implementation. */
|
||||
Graph.prototype._edgeCount = 0;
|
||||
|
||||
|
||||
/* === Graph functions ========= */
|
||||
|
||||
Graph.prototype.isDirected = function() {
|
||||
return this._isDirected;
|
||||
};
|
||||
|
||||
Graph.prototype.isMultigraph = function() {
|
||||
return this._isMultigraph;
|
||||
};
|
||||
|
||||
Graph.prototype.isCompound = function() {
|
||||
return this._isCompound;
|
||||
};
|
||||
|
||||
Graph.prototype.setGraph = function(label) {
|
||||
this._label = label;
|
||||
return this;
|
||||
};
|
||||
|
||||
Graph.prototype.graph = function() {
|
||||
return this._label;
|
||||
};
|
||||
|
||||
|
||||
/* === Node functions ========== */
|
||||
|
||||
Graph.prototype.setDefaultNodeLabel = function(newDefault) {
|
||||
if (!_.isFunction(newDefault)) {
|
||||
newDefault = _.constant(newDefault);
|
||||
}
|
||||
this._defaultNodeLabelFn = newDefault;
|
||||
return this;
|
||||
};
|
||||
|
||||
Graph.prototype.nodeCount = function() {
|
||||
return this._nodeCount;
|
||||
};
|
||||
|
||||
Graph.prototype.nodes = function() {
|
||||
return _.keys(this._nodes);
|
||||
};
|
||||
|
||||
Graph.prototype.sources = function() {
|
||||
var self = this;
|
||||
return _.filter(this.nodes(), function(v) {
|
||||
return _.isEmpty(self._in[v]);
|
||||
});
|
||||
};
|
||||
|
||||
Graph.prototype.sinks = function() {
|
||||
var self = this;
|
||||
return _.filter(this.nodes(), function(v) {
|
||||
return _.isEmpty(self._out[v]);
|
||||
});
|
||||
};
|
||||
|
||||
Graph.prototype.setNodes = function(vs, value) {
|
||||
var args = arguments;
|
||||
var self = this;
|
||||
_.each(vs, function(v) {
|
||||
if (args.length > 1) {
|
||||
self.setNode(v, value);
|
||||
} else {
|
||||
self.setNode(v);
|
||||
}
|
||||
});
|
||||
return this;
|
||||
};
|
||||
|
||||
Graph.prototype.setNode = function(v, value) {
|
||||
if (_.has(this._nodes, v)) {
|
||||
if (arguments.length > 1) {
|
||||
this._nodes[v] = value;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);
|
||||
if (this._isCompound) {
|
||||
this._parent[v] = GRAPH_NODE;
|
||||
this._children[v] = {};
|
||||
this._children[GRAPH_NODE][v] = true;
|
||||
}
|
||||
this._in[v] = {};
|
||||
this._preds[v] = {};
|
||||
this._out[v] = {};
|
||||
this._sucs[v] = {};
|
||||
++this._nodeCount;
|
||||
return this;
|
||||
};
|
||||
|
||||
Graph.prototype.node = function(v) {
|
||||
return this._nodes[v];
|
||||
};
|
||||
|
||||
Graph.prototype.hasNode = function(v) {
|
||||
return _.has(this._nodes, v);
|
||||
};
|
||||
|
||||
Graph.prototype.removeNode = function(v) {
|
||||
var self = this;
|
||||
if (_.has(this._nodes, v)) {
|
||||
var removeEdge = function(e) { self.removeEdge(self._edgeObjs[e]); };
|
||||
delete this._nodes[v];
|
||||
if (this._isCompound) {
|
||||
this._removeFromParentsChildList(v);
|
||||
delete this._parent[v];
|
||||
_.each(this.children(v), function(child) {
|
||||
self.setParent(child);
|
||||
});
|
||||
delete this._children[v];
|
||||
}
|
||||
_.each(_.keys(this._in[v]), removeEdge);
|
||||
delete this._in[v];
|
||||
delete this._preds[v];
|
||||
_.each(_.keys(this._out[v]), removeEdge);
|
||||
delete this._out[v];
|
||||
delete this._sucs[v];
|
||||
--this._nodeCount;
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Graph.prototype.setParent = function(v, parent) {
|
||||
if (!this._isCompound) {
|
||||
throw new Error("Cannot set parent in a non-compound graph");
|
||||
}
|
||||
|
||||
if (_.isUndefined(parent)) {
|
||||
parent = GRAPH_NODE;
|
||||
} else {
|
||||
// Coerce parent to string
|
||||
parent += "";
|
||||
for (var ancestor = parent;
|
||||
!_.isUndefined(ancestor);
|
||||
ancestor = this.parent(ancestor)) {
|
||||
if (ancestor === v) {
|
||||
throw new Error("Setting " + parent+ " as parent of " + v +
|
||||
" would create a cycle");
|
||||
}
|
||||
}
|
||||
|
||||
this.setNode(parent);
|
||||
}
|
||||
|
||||
this.setNode(v);
|
||||
this._removeFromParentsChildList(v);
|
||||
this._parent[v] = parent;
|
||||
this._children[parent][v] = true;
|
||||
return this;
|
||||
};
|
||||
|
||||
Graph.prototype._removeFromParentsChildList = function(v) {
|
||||
delete this._children[this._parent[v]][v];
|
||||
};
|
||||
|
||||
Graph.prototype.parent = function(v) {
|
||||
if (this._isCompound) {
|
||||
var parent = this._parent[v];
|
||||
if (parent !== GRAPH_NODE) {
|
||||
return parent;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Graph.prototype.children = function(v) {
|
||||
if (_.isUndefined(v)) {
|
||||
v = GRAPH_NODE;
|
||||
}
|
||||
|
||||
if (this._isCompound) {
|
||||
var children = this._children[v];
|
||||
if (children) {
|
||||
return _.keys(children);
|
||||
}
|
||||
} else if (v === GRAPH_NODE) {
|
||||
return this.nodes();
|
||||
} else if (this.hasNode(v)) {
|
||||
return [];
|
||||
}
|
||||
};
|
||||
|
||||
Graph.prototype.predecessors = function(v) {
|
||||
var predsV = this._preds[v];
|
||||
if (predsV) {
|
||||
return _.keys(predsV);
|
||||
}
|
||||
};
|
||||
|
||||
Graph.prototype.successors = function(v) {
|
||||
var sucsV = this._sucs[v];
|
||||
if (sucsV) {
|
||||
return _.keys(sucsV);
|
||||
}
|
||||
};
|
||||
|
||||
Graph.prototype.neighbors = function(v) {
|
||||
var preds = this.predecessors(v);
|
||||
if (preds) {
|
||||
return _.union(preds, this.successors(v));
|
||||
}
|
||||
};
|
||||
|
||||
Graph.prototype.isLeaf = function (v) {
|
||||
var neighbors;
|
||||
if (this.isDirected()) {
|
||||
neighbors = this.successors(v);
|
||||
} else {
|
||||
neighbors = this.neighbors(v);
|
||||
}
|
||||
return neighbors.length === 0;
|
||||
};
|
||||
|
||||
Graph.prototype.filterNodes = function(filter) {
|
||||
var copy = new this.constructor({
|
||||
directed: this._isDirected,
|
||||
multigraph: this._isMultigraph,
|
||||
compound: this._isCompound
|
||||
});
|
||||
|
||||
copy.setGraph(this.graph());
|
||||
|
||||
var self = this;
|
||||
_.each(this._nodes, function(value, v) {
|
||||
if (filter(v)) {
|
||||
copy.setNode(v, value);
|
||||
}
|
||||
});
|
||||
|
||||
_.each(this._edgeObjs, function(e) {
|
||||
if (copy.hasNode(e.v) && copy.hasNode(e.w)) {
|
||||
copy.setEdge(e, self.edge(e));
|
||||
}
|
||||
});
|
||||
|
||||
var parents = {};
|
||||
function findParent(v) {
|
||||
var parent = self.parent(v);
|
||||
if (parent === undefined || copy.hasNode(parent)) {
|
||||
parents[v] = parent;
|
||||
return parent;
|
||||
} else if (parent in parents) {
|
||||
return parents[parent];
|
||||
} else {
|
||||
return findParent(parent);
|
||||
}
|
||||
}
|
||||
|
||||
if (this._isCompound) {
|
||||
_.each(copy.nodes(), function(v) {
|
||||
copy.setParent(v, findParent(v));
|
||||
});
|
||||
}
|
||||
|
||||
return copy;
|
||||
};
|
||||
|
||||
/* === Edge functions ========== */
|
||||
|
||||
Graph.prototype.setDefaultEdgeLabel = function(newDefault) {
|
||||
if (!_.isFunction(newDefault)) {
|
||||
newDefault = _.constant(newDefault);
|
||||
}
|
||||
this._defaultEdgeLabelFn = newDefault;
|
||||
return this;
|
||||
};
|
||||
|
||||
Graph.prototype.edgeCount = function() {
|
||||
return this._edgeCount;
|
||||
};
|
||||
|
||||
Graph.prototype.edges = function() {
|
||||
return _.values(this._edgeObjs);
|
||||
};
|
||||
|
||||
Graph.prototype.setPath = function(vs, value) {
|
||||
var self = this;
|
||||
var args = arguments;
|
||||
_.reduce(vs, function(v, w) {
|
||||
if (args.length > 1) {
|
||||
self.setEdge(v, w, value);
|
||||
} else {
|
||||
self.setEdge(v, w);
|
||||
}
|
||||
return w;
|
||||
});
|
||||
return this;
|
||||
};
|
||||
|
||||
/*
|
||||
* setEdge(v, w, [value, [name]])
|
||||
* setEdge({ v, w, [name] }, [value])
|
||||
*/
|
||||
Graph.prototype.setEdge = function() {
|
||||
var v, w, name, value;
|
||||
var valueSpecified = false;
|
||||
var arg0 = arguments[0];
|
||||
|
||||
if (typeof arg0 === "object" && arg0 !== null && "v" in arg0) {
|
||||
v = arg0.v;
|
||||
w = arg0.w;
|
||||
name = arg0.name;
|
||||
if (arguments.length === 2) {
|
||||
value = arguments[1];
|
||||
valueSpecified = true;
|
||||
}
|
||||
} else {
|
||||
v = arg0;
|
||||
w = arguments[1];
|
||||
name = arguments[3];
|
||||
if (arguments.length > 2) {
|
||||
value = arguments[2];
|
||||
valueSpecified = true;
|
||||
}
|
||||
}
|
||||
|
||||
v = "" + v;
|
||||
w = "" + w;
|
||||
if (!_.isUndefined(name)) {
|
||||
name = "" + name;
|
||||
}
|
||||
|
||||
var e = edgeArgsToId(this._isDirected, v, w, name);
|
||||
if (_.has(this._edgeLabels, e)) {
|
||||
if (valueSpecified) {
|
||||
this._edgeLabels[e] = value;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
if (!_.isUndefined(name) && !this._isMultigraph) {
|
||||
throw new Error("Cannot set a named edge when isMultigraph = false");
|
||||
}
|
||||
|
||||
// It didn't exist, so we need to create it.
|
||||
// First ensure the nodes exist.
|
||||
this.setNode(v);
|
||||
this.setNode(w);
|
||||
|
||||
this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);
|
||||
|
||||
var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);
|
||||
// Ensure we add undirected edges in a consistent way.
|
||||
v = edgeObj.v;
|
||||
w = edgeObj.w;
|
||||
|
||||
Object.freeze(edgeObj);
|
||||
this._edgeObjs[e] = edgeObj;
|
||||
incrementOrInitEntry(this._preds[w], v);
|
||||
incrementOrInitEntry(this._sucs[v], w);
|
||||
this._in[w][e] = edgeObj;
|
||||
this._out[v][e] = edgeObj;
|
||||
this._edgeCount++;
|
||||
return this;
|
||||
};
|
||||
|
||||
Graph.prototype.edge = function(v, w, name) {
|
||||
var e = (arguments.length === 1
|
||||
? edgeObjToId(this._isDirected, arguments[0])
|
||||
: edgeArgsToId(this._isDirected, v, w, name));
|
||||
return this._edgeLabels[e];
|
||||
};
|
||||
|
||||
Graph.prototype.hasEdge = function(v, w, name) {
|
||||
var e = (arguments.length === 1
|
||||
? edgeObjToId(this._isDirected, arguments[0])
|
||||
: edgeArgsToId(this._isDirected, v, w, name));
|
||||
return _.has(this._edgeLabels, e);
|
||||
};
|
||||
|
||||
Graph.prototype.removeEdge = function(v, w, name) {
|
||||
var e = (arguments.length === 1
|
||||
? edgeObjToId(this._isDirected, arguments[0])
|
||||
: edgeArgsToId(this._isDirected, v, w, name));
|
||||
var edge = this._edgeObjs[e];
|
||||
if (edge) {
|
||||
v = edge.v;
|
||||
w = edge.w;
|
||||
delete this._edgeLabels[e];
|
||||
delete this._edgeObjs[e];
|
||||
decrementOrRemoveEntry(this._preds[w], v);
|
||||
decrementOrRemoveEntry(this._sucs[v], w);
|
||||
delete this._in[w][e];
|
||||
delete this._out[v][e];
|
||||
this._edgeCount--;
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Graph.prototype.inEdges = function(v, u) {
|
||||
var inV = this._in[v];
|
||||
if (inV) {
|
||||
var edges = _.values(inV);
|
||||
if (!u) {
|
||||
return edges;
|
||||
}
|
||||
return _.filter(edges, function(edge) { return edge.v === u; });
|
||||
}
|
||||
};
|
||||
|
||||
Graph.prototype.outEdges = function(v, w) {
|
||||
var outV = this._out[v];
|
||||
if (outV) {
|
||||
var edges = _.values(outV);
|
||||
if (!w) {
|
||||
return edges;
|
||||
}
|
||||
return _.filter(edges, function(edge) { return edge.w === w; });
|
||||
}
|
||||
};
|
||||
|
||||
Graph.prototype.nodeEdges = function(v, w) {
|
||||
var inEdges = this.inEdges(v, w);
|
||||
if (inEdges) {
|
||||
return inEdges.concat(this.outEdges(v, w));
|
||||
}
|
||||
};
|
||||
|
||||
function incrementOrInitEntry(map, k) {
|
||||
if (map[k]) {
|
||||
map[k]++;
|
||||
} else {
|
||||
map[k] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
function decrementOrRemoveEntry(map, k) {
|
||||
if (!--map[k]) { delete map[k]; }
|
||||
}
|
||||
|
||||
function edgeArgsToId(isDirected, v_, w_, name) {
|
||||
var v = "" + v_;
|
||||
var w = "" + w_;
|
||||
if (!isDirected && v > w) {
|
||||
var tmp = v;
|
||||
v = w;
|
||||
w = tmp;
|
||||
}
|
||||
return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM +
|
||||
(_.isUndefined(name) ? DEFAULT_EDGE_NAME : name);
|
||||
}
|
||||
|
||||
function edgeArgsToObj(isDirected, v_, w_, name) {
|
||||
var v = "" + v_;
|
||||
var w = "" + w_;
|
||||
if (!isDirected && v > w) {
|
||||
var tmp = v;
|
||||
v = w;
|
||||
w = tmp;
|
||||
}
|
||||
var edgeObj = { v: v, w: w };
|
||||
if (name) {
|
||||
edgeObj.name = name;
|
||||
}
|
||||
return edgeObj;
|
||||
}
|
||||
|
||||
function edgeObjToId(isDirected, edgeObj) {
|
||||
return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);
|
||||
}
|
5
node_modules/graphlib/lib/index.js
generated
vendored
Normal file
5
node_modules/graphlib/lib/index.js
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
// Includes only the "core" of graphlib
|
||||
module.exports = {
|
||||
Graph: require("./graph"),
|
||||
version: require("./version")
|
||||
};
|
66
node_modules/graphlib/lib/json.js
generated
vendored
Normal file
66
node_modules/graphlib/lib/json.js
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
var _ = require("./lodash");
|
||||
var Graph = require("./graph");
|
||||
|
||||
module.exports = {
|
||||
write: write,
|
||||
read: read
|
||||
};
|
||||
|
||||
function write(g) {
|
||||
var json = {
|
||||
options: {
|
||||
directed: g.isDirected(),
|
||||
multigraph: g.isMultigraph(),
|
||||
compound: g.isCompound()
|
||||
},
|
||||
nodes: writeNodes(g),
|
||||
edges: writeEdges(g)
|
||||
};
|
||||
if (!_.isUndefined(g.graph())) {
|
||||
json.value = _.clone(g.graph());
|
||||
}
|
||||
return json;
|
||||
}
|
||||
|
||||
function writeNodes(g) {
|
||||
return _.map(g.nodes(), function(v) {
|
||||
var nodeValue = g.node(v);
|
||||
var parent = g.parent(v);
|
||||
var node = { v: v };
|
||||
if (!_.isUndefined(nodeValue)) {
|
||||
node.value = nodeValue;
|
||||
}
|
||||
if (!_.isUndefined(parent)) {
|
||||
node.parent = parent;
|
||||
}
|
||||
return node;
|
||||
});
|
||||
}
|
||||
|
||||
function writeEdges(g) {
|
||||
return _.map(g.edges(), function(e) {
|
||||
var edgeValue = g.edge(e);
|
||||
var edge = { v: e.v, w: e.w };
|
||||
if (!_.isUndefined(e.name)) {
|
||||
edge.name = e.name;
|
||||
}
|
||||
if (!_.isUndefined(edgeValue)) {
|
||||
edge.value = edgeValue;
|
||||
}
|
||||
return edge;
|
||||
});
|
||||
}
|
||||
|
||||
function read(json) {
|
||||
var g = new Graph(json.options).setGraph(json.value);
|
||||
_.each(json.nodes, function(entry) {
|
||||
g.setNode(entry.v, entry.value);
|
||||
if (entry.parent) {
|
||||
g.setParent(entry.v, entry.parent);
|
||||
}
|
||||
});
|
||||
_.each(json.edges, function(entry) {
|
||||
g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value);
|
||||
});
|
||||
return g;
|
||||
}
|
34
node_modules/graphlib/lib/lodash.js
generated
vendored
Normal file
34
node_modules/graphlib/lib/lodash.js
generated
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
/* global window */
|
||||
|
||||
var lodash;
|
||||
|
||||
if (typeof require === "function") {
|
||||
try {
|
||||
lodash = {
|
||||
clone: require("lodash/clone"),
|
||||
constant: require("lodash/constant"),
|
||||
each: require("lodash/each"),
|
||||
filter: require("lodash/filter"),
|
||||
has: require("lodash/has"),
|
||||
isArray: require("lodash/isArray"),
|
||||
isEmpty: require("lodash/isEmpty"),
|
||||
isFunction: require("lodash/isFunction"),
|
||||
isUndefined: require("lodash/isUndefined"),
|
||||
keys: require("lodash/keys"),
|
||||
map: require("lodash/map"),
|
||||
reduce: require("lodash/reduce"),
|
||||
size: require("lodash/size"),
|
||||
transform: require("lodash/transform"),
|
||||
union: require("lodash/union"),
|
||||
values: require("lodash/values")
|
||||
};
|
||||
} catch (e) {
|
||||
// continue regardless of error
|
||||
}
|
||||
}
|
||||
|
||||
if (!lodash) {
|
||||
lodash = window._;
|
||||
}
|
||||
|
||||
module.exports = lodash;
|
1
node_modules/graphlib/lib/version.js
generated
vendored
Normal file
1
node_modules/graphlib/lib/version.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
module.exports = '2.1.8';
|
47
node_modules/graphlib/node_modules/lodash/LICENSE
generated
vendored
Normal file
47
node_modules/graphlib/node_modules/lodash/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
|
||||
|
||||
Based on Underscore.js, copyright Jeremy Ashkenas,
|
||||
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
|
||||
|
||||
This software consists of voluntary contributions made by many
|
||||
individuals. For exact contribution history, see the revision history
|
||||
available at https://github.com/lodash/lodash
|
||||
|
||||
The following license applies to all parts of this software except as
|
||||
documented below:
|
||||
|
||||
====
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
====
|
||||
|
||||
Copyright and related rights for sample code are waived via CC0. Sample
|
||||
code is defined as all source code displayed within the prose of the
|
||||
documentation.
|
||||
|
||||
CC0: http://creativecommons.org/publicdomain/zero/1.0/
|
||||
|
||||
====
|
||||
|
||||
Files located in the node_modules and vendor directories are externally
|
||||
maintained libraries used by this software which have their own
|
||||
licenses; we recommend you read them, as their terms may differ from the
|
||||
terms above.
|
39
node_modules/graphlib/node_modules/lodash/README.md
generated
vendored
Normal file
39
node_modules/graphlib/node_modules/lodash/README.md
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
# lodash v4.17.21
|
||||
|
||||
The [Lodash](https://lodash.com/) library exported as [Node.js](https://nodejs.org/) modules.
|
||||
|
||||
## Installation
|
||||
|
||||
Using npm:
|
||||
```shell
|
||||
$ npm i -g npm
|
||||
$ npm i --save lodash
|
||||
```
|
||||
|
||||
In Node.js:
|
||||
```js
|
||||
// Load the full build.
|
||||
var _ = require('lodash');
|
||||
// Load the core build.
|
||||
var _ = require('lodash/core');
|
||||
// Load the FP build for immutable auto-curried iteratee-first data-last methods.
|
||||
var fp = require('lodash/fp');
|
||||
|
||||
// Load method categories.
|
||||
var array = require('lodash/array');
|
||||
var object = require('lodash/fp/object');
|
||||
|
||||
// Cherry-pick methods for smaller browserify/rollup/webpack bundles.
|
||||
var at = require('lodash/at');
|
||||
var curryN = require('lodash/fp/curryN');
|
||||
```
|
||||
|
||||
See the [package source](https://github.com/lodash/lodash/tree/4.17.21-npm) for more details.
|
||||
|
||||
**Note:**<br>
|
||||
Install [n_](https://www.npmjs.com/package/n_) for Lodash use in the Node.js < 6 REPL.
|
||||
|
||||
## Support
|
||||
|
||||
Tested in Chrome 74-75, Firefox 66-67, IE 11, Edge 18, Safari 11-12, & Node.js 8-12.<br>
|
||||
Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available.
|
7
node_modules/graphlib/node_modules/lodash/_DataView.js
generated
vendored
Normal file
7
node_modules/graphlib/node_modules/lodash/_DataView.js
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
var getNative = require('./_getNative'),
|
||||
root = require('./_root');
|
||||
|
||||
/* Built-in method references that are verified to be native. */
|
||||
var DataView = getNative(root, 'DataView');
|
||||
|
||||
module.exports = DataView;
|
32
node_modules/graphlib/node_modules/lodash/_Hash.js
generated
vendored
Normal file
32
node_modules/graphlib/node_modules/lodash/_Hash.js
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
var hashClear = require('./_hashClear'),
|
||||
hashDelete = require('./_hashDelete'),
|
||||
hashGet = require('./_hashGet'),
|
||||
hashHas = require('./_hashHas'),
|
||||
hashSet = require('./_hashSet');
|
||||
|
||||
/**
|
||||
* Creates a hash object.
|
||||
*
|
||||
* @private
|
||||
* @constructor
|
||||
* @param {Array} [entries] The key-value pairs to cache.
|
||||
*/
|
||||
function Hash(entries) {
|
||||
var index = -1,
|
||||
length = entries == null ? 0 : entries.length;
|
||||
|
||||
this.clear();
|
||||
while (++index < length) {
|
||||
var entry = entries[index];
|
||||
this.set(entry[0], entry[1]);
|
||||
}
|
||||
}
|
||||
|
||||
// Add methods to `Hash`.
|
||||
Hash.prototype.clear = hashClear;
|
||||
Hash.prototype['delete'] = hashDelete;
|
||||
Hash.prototype.get = hashGet;
|
||||
Hash.prototype.has = hashHas;
|
||||
Hash.prototype.set = hashSet;
|
||||
|
||||
module.exports = Hash;
|
28
node_modules/graphlib/node_modules/lodash/_LazyWrapper.js
generated
vendored
Normal file
28
node_modules/graphlib/node_modules/lodash/_LazyWrapper.js
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
var baseCreate = require('./_baseCreate'),
|
||||
baseLodash = require('./_baseLodash');
|
||||
|
||||
/** Used as references for the maximum length and index of an array. */
|
||||
var MAX_ARRAY_LENGTH = 4294967295;
|
||||
|
||||
/**
|
||||
* Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
|
||||
*
|
||||
* @private
|
||||
* @constructor
|
||||
* @param {*} value The value to wrap.
|
||||
*/
|
||||
function LazyWrapper(value) {
|
||||
this.__wrapped__ = value;
|
||||
this.__actions__ = [];
|
||||
this.__dir__ = 1;
|
||||
this.__filtered__ = false;
|
||||
this.__iteratees__ = [];
|
||||
this.__takeCount__ = MAX_ARRAY_LENGTH;
|
||||
this.__views__ = [];
|
||||
}
|
||||
|
||||
// Ensure `LazyWrapper` is an instance of `baseLodash`.
|
||||
LazyWrapper.prototype = baseCreate(baseLodash.prototype);
|
||||
LazyWrapper.prototype.constructor = LazyWrapper;
|
||||
|
||||
module.exports = LazyWrapper;
|
32
node_modules/graphlib/node_modules/lodash/_ListCache.js
generated
vendored
Normal file
32
node_modules/graphlib/node_modules/lodash/_ListCache.js
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
var listCacheClear = require('./_listCacheClear'),
|
||||
listCacheDelete = require('./_listCacheDelete'),
|
||||
listCacheGet = require('./_listCacheGet'),
|
||||
listCacheHas = require('./_listCacheHas'),
|
||||
listCacheSet = require('./_listCacheSet');
|
||||
|
||||
/**
|
||||
* Creates an list cache object.
|
||||
*
|
||||
* @private
|
||||
* @constructor
|
||||
* @param {Array} [entries] The key-value pairs to cache.
|
||||
*/
|
||||
function ListCache(entries) {
|
||||
var index = -1,
|
||||
length = entries == null ? 0 : entries.length;
|
||||
|
||||
this.clear();
|
||||
while (++index < length) {
|
||||
var entry = entries[index];
|
||||
this.set(entry[0], entry[1]);
|
||||
}
|
||||
}
|
||||
|
||||
// Add methods to `ListCache`.
|
||||
ListCache.prototype.clear = listCacheClear;
|
||||
ListCache.prototype['delete'] = listCacheDelete;
|
||||
ListCache.prototype.get = listCacheGet;
|
||||
ListCache.prototype.has = listCacheHas;
|
||||
ListCache.prototype.set = listCacheSet;
|
||||
|
||||
module.exports = ListCache;
|
22
node_modules/graphlib/node_modules/lodash/_LodashWrapper.js
generated
vendored
Normal file
22
node_modules/graphlib/node_modules/lodash/_LodashWrapper.js
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
var baseCreate = require('./_baseCreate'),
|
||||
baseLodash = require('./_baseLodash');
|
||||
|
||||
/**
|
||||
* The base constructor for creating `lodash` wrapper objects.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to wrap.
|
||||
* @param {boolean} [chainAll] Enable explicit method chain sequences.
|
||||
*/
|
||||
function LodashWrapper(value, chainAll) {
|
||||
this.__wrapped__ = value;
|
||||
this.__actions__ = [];
|
||||
this.__chain__ = !!chainAll;
|
||||
this.__index__ = 0;
|
||||
this.__values__ = undefined;
|
||||
}
|
||||
|
||||
LodashWrapper.prototype = baseCreate(baseLodash.prototype);
|
||||
LodashWrapper.prototype.constructor = LodashWrapper;
|
||||
|
||||
module.exports = LodashWrapper;
|
7
node_modules/graphlib/node_modules/lodash/_Map.js
generated
vendored
Normal file
7
node_modules/graphlib/node_modules/lodash/_Map.js
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
var getNative = require('./_getNative'),
|
||||
root = require('./_root');
|
||||
|
||||
/* Built-in method references that are verified to be native. */
|
||||
var Map = getNative(root, 'Map');
|
||||
|
||||
module.exports = Map;
|
32
node_modules/graphlib/node_modules/lodash/_MapCache.js
generated
vendored
Normal file
32
node_modules/graphlib/node_modules/lodash/_MapCache.js
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
var mapCacheClear = require('./_mapCacheClear'),
|
||||
mapCacheDelete = require('./_mapCacheDelete'),
|
||||
mapCacheGet = require('./_mapCacheGet'),
|
||||
mapCacheHas = require('./_mapCacheHas'),
|
||||
mapCacheSet = require('./_mapCacheSet');
|
||||
|
||||
/**
|
||||
* Creates a map cache object to store key-value pairs.
|
||||
*
|
||||
* @private
|
||||
* @constructor
|
||||
* @param {Array} [entries] The key-value pairs to cache.
|
||||
*/
|
||||
function MapCache(entries) {
|
||||
var index = -1,
|
||||
length = entries == null ? 0 : entries.length;
|
||||
|
||||
this.clear();
|
||||
while (++index < length) {
|
||||
var entry = entries[index];
|
||||
this.set(entry[0], entry[1]);
|
||||
}
|
||||
}
|
||||
|
||||
// Add methods to `MapCache`.
|
||||
MapCache.prototype.clear = mapCacheClear;
|
||||
MapCache.prototype['delete'] = mapCacheDelete;
|
||||
MapCache.prototype.get = mapCacheGet;
|
||||
MapCache.prototype.has = mapCacheHas;
|
||||
MapCache.prototype.set = mapCacheSet;
|
||||
|
||||
module.exports = MapCache;
|
7
node_modules/graphlib/node_modules/lodash/_Promise.js
generated
vendored
Normal file
7
node_modules/graphlib/node_modules/lodash/_Promise.js
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
var getNative = require('./_getNative'),
|
||||
root = require('./_root');
|
||||
|
||||
/* Built-in method references that are verified to be native. */
|
||||
var Promise = getNative(root, 'Promise');
|
||||
|
||||
module.exports = Promise;
|
7
node_modules/graphlib/node_modules/lodash/_Set.js
generated
vendored
Normal file
7
node_modules/graphlib/node_modules/lodash/_Set.js
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
var getNative = require('./_getNative'),
|
||||
root = require('./_root');
|
||||
|
||||
/* Built-in method references that are verified to be native. */
|
||||
var Set = getNative(root, 'Set');
|
||||
|
||||
module.exports = Set;
|
27
node_modules/graphlib/node_modules/lodash/_SetCache.js
generated
vendored
Normal file
27
node_modules/graphlib/node_modules/lodash/_SetCache.js
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
var MapCache = require('./_MapCache'),
|
||||
setCacheAdd = require('./_setCacheAdd'),
|
||||
setCacheHas = require('./_setCacheHas');
|
||||
|
||||
/**
|
||||
*
|
||||
* Creates an array cache object to store unique values.
|
||||
*
|
||||
* @private
|
||||
* @constructor
|
||||
* @param {Array} [values] The values to cache.
|
||||
*/
|
||||
function SetCache(values) {
|
||||
var index = -1,
|
||||
length = values == null ? 0 : values.length;
|
||||
|
||||
this.__data__ = new MapCache;
|
||||
while (++index < length) {
|
||||
this.add(values[index]);
|
||||
}
|
||||
}
|
||||
|
||||
// Add methods to `SetCache`.
|
||||
SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
|
||||
SetCache.prototype.has = setCacheHas;
|
||||
|
||||
module.exports = SetCache;
|
27
node_modules/graphlib/node_modules/lodash/_Stack.js
generated
vendored
Normal file
27
node_modules/graphlib/node_modules/lodash/_Stack.js
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
var ListCache = require('./_ListCache'),
|
||||
stackClear = require('./_stackClear'),
|
||||
stackDelete = require('./_stackDelete'),
|
||||
stackGet = require('./_stackGet'),
|
||||
stackHas = require('./_stackHas'),
|
||||
stackSet = require('./_stackSet');
|
||||
|
||||
/**
|
||||
* Creates a stack cache object to store key-value pairs.
|
||||
*
|
||||
* @private
|
||||
* @constructor
|
||||
* @param {Array} [entries] The key-value pairs to cache.
|
||||
*/
|
||||
function Stack(entries) {
|
||||
var data = this.__data__ = new ListCache(entries);
|
||||
this.size = data.size;
|
||||
}
|
||||
|
||||
// Add methods to `Stack`.
|
||||
Stack.prototype.clear = stackClear;
|
||||
Stack.prototype['delete'] = stackDelete;
|
||||
Stack.prototype.get = stackGet;
|
||||
Stack.prototype.has = stackHas;
|
||||
Stack.prototype.set = stackSet;
|
||||
|
||||
module.exports = Stack;
|
6
node_modules/graphlib/node_modules/lodash/_Symbol.js
generated
vendored
Normal file
6
node_modules/graphlib/node_modules/lodash/_Symbol.js
generated
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
var root = require('./_root');
|
||||
|
||||
/** Built-in value references. */
|
||||
var Symbol = root.Symbol;
|
||||
|
||||
module.exports = Symbol;
|
6
node_modules/graphlib/node_modules/lodash/_Uint8Array.js
generated
vendored
Normal file
6
node_modules/graphlib/node_modules/lodash/_Uint8Array.js
generated
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
var root = require('./_root');
|
||||
|
||||
/** Built-in value references. */
|
||||
var Uint8Array = root.Uint8Array;
|
||||
|
||||
module.exports = Uint8Array;
|
7
node_modules/graphlib/node_modules/lodash/_WeakMap.js
generated
vendored
Normal file
7
node_modules/graphlib/node_modules/lodash/_WeakMap.js
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
var getNative = require('./_getNative'),
|
||||
root = require('./_root');
|
||||
|
||||
/* Built-in method references that are verified to be native. */
|
||||
var WeakMap = getNative(root, 'WeakMap');
|
||||
|
||||
module.exports = WeakMap;
|
21
node_modules/graphlib/node_modules/lodash/_apply.js
generated
vendored
Normal file
21
node_modules/graphlib/node_modules/lodash/_apply.js
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
/**
|
||||
* A faster alternative to `Function#apply`, this function invokes `func`
|
||||
* with the `this` binding of `thisArg` and the arguments of `args`.
|
||||
*
|
||||
* @private
|
||||
* @param {Function} func The function to invoke.
|
||||
* @param {*} thisArg The `this` binding of `func`.
|
||||
* @param {Array} args The arguments to invoke `func` with.
|
||||
* @returns {*} Returns the result of `func`.
|
||||
*/
|
||||
function apply(func, thisArg, args) {
|
||||
switch (args.length) {
|
||||
case 0: return func.call(thisArg);
|
||||
case 1: return func.call(thisArg, args[0]);
|
||||
case 2: return func.call(thisArg, args[0], args[1]);
|
||||
case 3: return func.call(thisArg, args[0], args[1], args[2]);
|
||||
}
|
||||
return func.apply(thisArg, args);
|
||||
}
|
||||
|
||||
module.exports = apply;
|
22
node_modules/graphlib/node_modules/lodash/_arrayAggregator.js
generated
vendored
Normal file
22
node_modules/graphlib/node_modules/lodash/_arrayAggregator.js
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* A specialized version of `baseAggregator` for arrays.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} setter The function to set `accumulator` values.
|
||||
* @param {Function} iteratee The iteratee to transform keys.
|
||||
* @param {Object} accumulator The initial aggregated object.
|
||||
* @returns {Function} Returns `accumulator`.
|
||||
*/
|
||||
function arrayAggregator(array, setter, iteratee, accumulator) {
|
||||
var index = -1,
|
||||
length = array == null ? 0 : array.length;
|
||||
|
||||
while (++index < length) {
|
||||
var value = array[index];
|
||||
setter(accumulator, value, iteratee(value), array);
|
||||
}
|
||||
return accumulator;
|
||||
}
|
||||
|
||||
module.exports = arrayAggregator;
|
22
node_modules/graphlib/node_modules/lodash/_arrayEach.js
generated
vendored
Normal file
22
node_modules/graphlib/node_modules/lodash/_arrayEach.js
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* A specialized version of `_.forEach` for arrays without support for
|
||||
* iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @returns {Array} Returns `array`.
|
||||
*/
|
||||
function arrayEach(array, iteratee) {
|
||||
var index = -1,
|
||||
length = array == null ? 0 : array.length;
|
||||
|
||||
while (++index < length) {
|
||||
if (iteratee(array[index], index, array) === false) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
module.exports = arrayEach;
|
21
node_modules/graphlib/node_modules/lodash/_arrayEachRight.js
generated
vendored
Normal file
21
node_modules/graphlib/node_modules/lodash/_arrayEachRight.js
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
/**
|
||||
* A specialized version of `_.forEachRight` for arrays without support for
|
||||
* iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @returns {Array} Returns `array`.
|
||||
*/
|
||||
function arrayEachRight(array, iteratee) {
|
||||
var length = array == null ? 0 : array.length;
|
||||
|
||||
while (length--) {
|
||||
if (iteratee(array[length], length, array) === false) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
module.exports = arrayEachRight;
|
23
node_modules/graphlib/node_modules/lodash/_arrayEvery.js
generated
vendored
Normal file
23
node_modules/graphlib/node_modules/lodash/_arrayEvery.js
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* A specialized version of `_.every` for arrays without support for
|
||||
* iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} predicate The function invoked per iteration.
|
||||
* @returns {boolean} Returns `true` if all elements pass the predicate check,
|
||||
* else `false`.
|
||||
*/
|
||||
function arrayEvery(array, predicate) {
|
||||
var index = -1,
|
||||
length = array == null ? 0 : array.length;
|
||||
|
||||
while (++index < length) {
|
||||
if (!predicate(array[index], index, array)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
module.exports = arrayEvery;
|
25
node_modules/graphlib/node_modules/lodash/_arrayFilter.js
generated
vendored
Normal file
25
node_modules/graphlib/node_modules/lodash/_arrayFilter.js
generated
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
/**
|
||||
* A specialized version of `_.filter` for arrays without support for
|
||||
* iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} predicate The function invoked per iteration.
|
||||
* @returns {Array} Returns the new filtered array.
|
||||
*/
|
||||
function arrayFilter(array, predicate) {
|
||||
var index = -1,
|
||||
length = array == null ? 0 : array.length,
|
||||
resIndex = 0,
|
||||
result = [];
|
||||
|
||||
while (++index < length) {
|
||||
var value = array[index];
|
||||
if (predicate(value, index, array)) {
|
||||
result[resIndex++] = value;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = arrayFilter;
|
17
node_modules/graphlib/node_modules/lodash/_arrayIncludes.js
generated
vendored
Normal file
17
node_modules/graphlib/node_modules/lodash/_arrayIncludes.js
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
var baseIndexOf = require('./_baseIndexOf');
|
||||
|
||||
/**
|
||||
* A specialized version of `_.includes` for arrays without support for
|
||||
* specifying an index to search from.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} [array] The array to inspect.
|
||||
* @param {*} target The value to search for.
|
||||
* @returns {boolean} Returns `true` if `target` is found, else `false`.
|
||||
*/
|
||||
function arrayIncludes(array, value) {
|
||||
var length = array == null ? 0 : array.length;
|
||||
return !!length && baseIndexOf(array, value, 0) > -1;
|
||||
}
|
||||
|
||||
module.exports = arrayIncludes;
|
22
node_modules/graphlib/node_modules/lodash/_arrayIncludesWith.js
generated
vendored
Normal file
22
node_modules/graphlib/node_modules/lodash/_arrayIncludesWith.js
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* This function is like `arrayIncludes` except that it accepts a comparator.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} [array] The array to inspect.
|
||||
* @param {*} target The value to search for.
|
||||
* @param {Function} comparator The comparator invoked per element.
|
||||
* @returns {boolean} Returns `true` if `target` is found, else `false`.
|
||||
*/
|
||||
function arrayIncludesWith(array, value, comparator) {
|
||||
var index = -1,
|
||||
length = array == null ? 0 : array.length;
|
||||
|
||||
while (++index < length) {
|
||||
if (comparator(value, array[index])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
module.exports = arrayIncludesWith;
|
49
node_modules/graphlib/node_modules/lodash/_arrayLikeKeys.js
generated
vendored
Normal file
49
node_modules/graphlib/node_modules/lodash/_arrayLikeKeys.js
generated
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
var baseTimes = require('./_baseTimes'),
|
||||
isArguments = require('./isArguments'),
|
||||
isArray = require('./isArray'),
|
||||
isBuffer = require('./isBuffer'),
|
||||
isIndex = require('./_isIndex'),
|
||||
isTypedArray = require('./isTypedArray');
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* Creates an array of the enumerable property names of the array-like `value`.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to query.
|
||||
* @param {boolean} inherited Specify returning inherited property names.
|
||||
* @returns {Array} Returns the array of property names.
|
||||
*/
|
||||
function arrayLikeKeys(value, inherited) {
|
||||
var isArr = isArray(value),
|
||||
isArg = !isArr && isArguments(value),
|
||||
isBuff = !isArr && !isArg && isBuffer(value),
|
||||
isType = !isArr && !isArg && !isBuff && isTypedArray(value),
|
||||
skipIndexes = isArr || isArg || isBuff || isType,
|
||||
result = skipIndexes ? baseTimes(value.length, String) : [],
|
||||
length = result.length;
|
||||
|
||||
for (var key in value) {
|
||||
if ((inherited || hasOwnProperty.call(value, key)) &&
|
||||
!(skipIndexes && (
|
||||
// Safari 9 has enumerable `arguments.length` in strict mode.
|
||||
key == 'length' ||
|
||||
// Node.js 0.10 has enumerable non-index properties on buffers.
|
||||
(isBuff && (key == 'offset' || key == 'parent')) ||
|
||||
// PhantomJS 2 has enumerable non-index properties on typed arrays.
|
||||
(isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
|
||||
// Skip index properties.
|
||||
isIndex(key, length)
|
||||
))) {
|
||||
result.push(key);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = arrayLikeKeys;
|
21
node_modules/graphlib/node_modules/lodash/_arrayMap.js
generated
vendored
Normal file
21
node_modules/graphlib/node_modules/lodash/_arrayMap.js
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
/**
|
||||
* A specialized version of `_.map` for arrays without support for iteratee
|
||||
* shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @returns {Array} Returns the new mapped array.
|
||||
*/
|
||||
function arrayMap(array, iteratee) {
|
||||
var index = -1,
|
||||
length = array == null ? 0 : array.length,
|
||||
result = Array(length);
|
||||
|
||||
while (++index < length) {
|
||||
result[index] = iteratee(array[index], index, array);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = arrayMap;
|
20
node_modules/graphlib/node_modules/lodash/_arrayPush.js
generated
vendored
Normal file
20
node_modules/graphlib/node_modules/lodash/_arrayPush.js
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
* Appends the elements of `values` to `array`.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to modify.
|
||||
* @param {Array} values The values to append.
|
||||
* @returns {Array} Returns `array`.
|
||||
*/
|
||||
function arrayPush(array, values) {
|
||||
var index = -1,
|
||||
length = values.length,
|
||||
offset = array.length;
|
||||
|
||||
while (++index < length) {
|
||||
array[offset + index] = values[index];
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
module.exports = arrayPush;
|
26
node_modules/graphlib/node_modules/lodash/_arrayReduce.js
generated
vendored
Normal file
26
node_modules/graphlib/node_modules/lodash/_arrayReduce.js
generated
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
/**
|
||||
* A specialized version of `_.reduce` for arrays without support for
|
||||
* iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @param {*} [accumulator] The initial value.
|
||||
* @param {boolean} [initAccum] Specify using the first element of `array` as
|
||||
* the initial value.
|
||||
* @returns {*} Returns the accumulated value.
|
||||
*/
|
||||
function arrayReduce(array, iteratee, accumulator, initAccum) {
|
||||
var index = -1,
|
||||
length = array == null ? 0 : array.length;
|
||||
|
||||
if (initAccum && length) {
|
||||
accumulator = array[++index];
|
||||
}
|
||||
while (++index < length) {
|
||||
accumulator = iteratee(accumulator, array[index], index, array);
|
||||
}
|
||||
return accumulator;
|
||||
}
|
||||
|
||||
module.exports = arrayReduce;
|
24
node_modules/graphlib/node_modules/lodash/_arrayReduceRight.js
generated
vendored
Normal file
24
node_modules/graphlib/node_modules/lodash/_arrayReduceRight.js
generated
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
/**
|
||||
* A specialized version of `_.reduceRight` for arrays without support for
|
||||
* iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @param {*} [accumulator] The initial value.
|
||||
* @param {boolean} [initAccum] Specify using the last element of `array` as
|
||||
* the initial value.
|
||||
* @returns {*} Returns the accumulated value.
|
||||
*/
|
||||
function arrayReduceRight(array, iteratee, accumulator, initAccum) {
|
||||
var length = array == null ? 0 : array.length;
|
||||
if (initAccum && length) {
|
||||
accumulator = array[--length];
|
||||
}
|
||||
while (length--) {
|
||||
accumulator = iteratee(accumulator, array[length], length, array);
|
||||
}
|
||||
return accumulator;
|
||||
}
|
||||
|
||||
module.exports = arrayReduceRight;
|
15
node_modules/graphlib/node_modules/lodash/_arraySample.js
generated
vendored
Normal file
15
node_modules/graphlib/node_modules/lodash/_arraySample.js
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
var baseRandom = require('./_baseRandom');
|
||||
|
||||
/**
|
||||
* A specialized version of `_.sample` for arrays.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to sample.
|
||||
* @returns {*} Returns the random element.
|
||||
*/
|
||||
function arraySample(array) {
|
||||
var length = array.length;
|
||||
return length ? array[baseRandom(0, length - 1)] : undefined;
|
||||
}
|
||||
|
||||
module.exports = arraySample;
|
17
node_modules/graphlib/node_modules/lodash/_arraySampleSize.js
generated
vendored
Normal file
17
node_modules/graphlib/node_modules/lodash/_arraySampleSize.js
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
var baseClamp = require('./_baseClamp'),
|
||||
copyArray = require('./_copyArray'),
|
||||
shuffleSelf = require('./_shuffleSelf');
|
||||
|
||||
/**
|
||||
* A specialized version of `_.sampleSize` for arrays.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to sample.
|
||||
* @param {number} n The number of elements to sample.
|
||||
* @returns {Array} Returns the random elements.
|
||||
*/
|
||||
function arraySampleSize(array, n) {
|
||||
return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
|
||||
}
|
||||
|
||||
module.exports = arraySampleSize;
|
15
node_modules/graphlib/node_modules/lodash/_arrayShuffle.js
generated
vendored
Normal file
15
node_modules/graphlib/node_modules/lodash/_arrayShuffle.js
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
var copyArray = require('./_copyArray'),
|
||||
shuffleSelf = require('./_shuffleSelf');
|
||||
|
||||
/**
|
||||
* A specialized version of `_.shuffle` for arrays.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to shuffle.
|
||||
* @returns {Array} Returns the new shuffled array.
|
||||
*/
|
||||
function arrayShuffle(array) {
|
||||
return shuffleSelf(copyArray(array));
|
||||
}
|
||||
|
||||
module.exports = arrayShuffle;
|
23
node_modules/graphlib/node_modules/lodash/_arraySome.js
generated
vendored
Normal file
23
node_modules/graphlib/node_modules/lodash/_arraySome.js
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* A specialized version of `_.some` for arrays without support for iteratee
|
||||
* shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} predicate The function invoked per iteration.
|
||||
* @returns {boolean} Returns `true` if any element passes the predicate check,
|
||||
* else `false`.
|
||||
*/
|
||||
function arraySome(array, predicate) {
|
||||
var index = -1,
|
||||
length = array == null ? 0 : array.length;
|
||||
|
||||
while (++index < length) {
|
||||
if (predicate(array[index], index, array)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
module.exports = arraySome;
|
12
node_modules/graphlib/node_modules/lodash/_asciiSize.js
generated
vendored
Normal file
12
node_modules/graphlib/node_modules/lodash/_asciiSize.js
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
var baseProperty = require('./_baseProperty');
|
||||
|
||||
/**
|
||||
* Gets the size of an ASCII `string`.
|
||||
*
|
||||
* @private
|
||||
* @param {string} string The string inspect.
|
||||
* @returns {number} Returns the string size.
|
||||
*/
|
||||
var asciiSize = baseProperty('length');
|
||||
|
||||
module.exports = asciiSize;
|
12
node_modules/graphlib/node_modules/lodash/_asciiToArray.js
generated
vendored
Normal file
12
node_modules/graphlib/node_modules/lodash/_asciiToArray.js
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
/**
|
||||
* Converts an ASCII `string` to an array.
|
||||
*
|
||||
* @private
|
||||
* @param {string} string The string to convert.
|
||||
* @returns {Array} Returns the converted array.
|
||||
*/
|
||||
function asciiToArray(string) {
|
||||
return string.split('');
|
||||
}
|
||||
|
||||
module.exports = asciiToArray;
|
15
node_modules/graphlib/node_modules/lodash/_asciiWords.js
generated
vendored
Normal file
15
node_modules/graphlib/node_modules/lodash/_asciiWords.js
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
/** Used to match words composed of alphanumeric characters. */
|
||||
var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
|
||||
|
||||
/**
|
||||
* Splits an ASCII `string` into an array of its words.
|
||||
*
|
||||
* @private
|
||||
* @param {string} The string to inspect.
|
||||
* @returns {Array} Returns the words of `string`.
|
||||
*/
|
||||
function asciiWords(string) {
|
||||
return string.match(reAsciiWord) || [];
|
||||
}
|
||||
|
||||
module.exports = asciiWords;
|
20
node_modules/graphlib/node_modules/lodash/_assignMergeValue.js
generated
vendored
Normal file
20
node_modules/graphlib/node_modules/lodash/_assignMergeValue.js
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
var baseAssignValue = require('./_baseAssignValue'),
|
||||
eq = require('./eq');
|
||||
|
||||
/**
|
||||
* This function is like `assignValue` except that it doesn't assign
|
||||
* `undefined` values.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to modify.
|
||||
* @param {string} key The key of the property to assign.
|
||||
* @param {*} value The value to assign.
|
||||
*/
|
||||
function assignMergeValue(object, key, value) {
|
||||
if ((value !== undefined && !eq(object[key], value)) ||
|
||||
(value === undefined && !(key in object))) {
|
||||
baseAssignValue(object, key, value);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = assignMergeValue;
|
28
node_modules/graphlib/node_modules/lodash/_assignValue.js
generated
vendored
Normal file
28
node_modules/graphlib/node_modules/lodash/_assignValue.js
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
var baseAssignValue = require('./_baseAssignValue'),
|
||||
eq = require('./eq');
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* Assigns `value` to `key` of `object` if the existing value is not equivalent
|
||||
* using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
||||
* for equality comparisons.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to modify.
|
||||
* @param {string} key The key of the property to assign.
|
||||
* @param {*} value The value to assign.
|
||||
*/
|
||||
function assignValue(object, key, value) {
|
||||
var objValue = object[key];
|
||||
if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
|
||||
(value === undefined && !(key in object))) {
|
||||
baseAssignValue(object, key, value);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = assignValue;
|
21
node_modules/graphlib/node_modules/lodash/_assocIndexOf.js
generated
vendored
Normal file
21
node_modules/graphlib/node_modules/lodash/_assocIndexOf.js
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
var eq = require('./eq');
|
||||
|
||||
/**
|
||||
* Gets the index at which the `key` is found in `array` of key-value pairs.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to inspect.
|
||||
* @param {*} key The key to search for.
|
||||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||||
*/
|
||||
function assocIndexOf(array, key) {
|
||||
var length = array.length;
|
||||
while (length--) {
|
||||
if (eq(array[length][0], key)) {
|
||||
return length;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
module.exports = assocIndexOf;
|
21
node_modules/graphlib/node_modules/lodash/_baseAggregator.js
generated
vendored
Normal file
21
node_modules/graphlib/node_modules/lodash/_baseAggregator.js
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
var baseEach = require('./_baseEach');
|
||||
|
||||
/**
|
||||
* Aggregates elements of `collection` on `accumulator` with keys transformed
|
||||
* by `iteratee` and values set by `setter`.
|
||||
*
|
||||
* @private
|
||||
* @param {Array|Object} collection The collection to iterate over.
|
||||
* @param {Function} setter The function to set `accumulator` values.
|
||||
* @param {Function} iteratee The iteratee to transform keys.
|
||||
* @param {Object} accumulator The initial aggregated object.
|
||||
* @returns {Function} Returns `accumulator`.
|
||||
*/
|
||||
function baseAggregator(collection, setter, iteratee, accumulator) {
|
||||
baseEach(collection, function(value, key, collection) {
|
||||
setter(accumulator, value, iteratee(value), collection);
|
||||
});
|
||||
return accumulator;
|
||||
}
|
||||
|
||||
module.exports = baseAggregator;
|
17
node_modules/graphlib/node_modules/lodash/_baseAssign.js
generated
vendored
Normal file
17
node_modules/graphlib/node_modules/lodash/_baseAssign.js
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
var copyObject = require('./_copyObject'),
|
||||
keys = require('./keys');
|
||||
|
||||
/**
|
||||
* The base implementation of `_.assign` without support for multiple sources
|
||||
* or `customizer` functions.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The destination object.
|
||||
* @param {Object} source The source object.
|
||||
* @returns {Object} Returns `object`.
|
||||
*/
|
||||
function baseAssign(object, source) {
|
||||
return object && copyObject(source, keys(source), object);
|
||||
}
|
||||
|
||||
module.exports = baseAssign;
|
17
node_modules/graphlib/node_modules/lodash/_baseAssignIn.js
generated
vendored
Normal file
17
node_modules/graphlib/node_modules/lodash/_baseAssignIn.js
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
var copyObject = require('./_copyObject'),
|
||||
keysIn = require('./keysIn');
|
||||
|
||||
/**
|
||||
* The base implementation of `_.assignIn` without support for multiple sources
|
||||
* or `customizer` functions.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The destination object.
|
||||
* @param {Object} source The source object.
|
||||
* @returns {Object} Returns `object`.
|
||||
*/
|
||||
function baseAssignIn(object, source) {
|
||||
return object && copyObject(source, keysIn(source), object);
|
||||
}
|
||||
|
||||
module.exports = baseAssignIn;
|
25
node_modules/graphlib/node_modules/lodash/_baseAssignValue.js
generated
vendored
Normal file
25
node_modules/graphlib/node_modules/lodash/_baseAssignValue.js
generated
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
var defineProperty = require('./_defineProperty');
|
||||
|
||||
/**
|
||||
* The base implementation of `assignValue` and `assignMergeValue` without
|
||||
* value checks.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to modify.
|
||||
* @param {string} key The key of the property to assign.
|
||||
* @param {*} value The value to assign.
|
||||
*/
|
||||
function baseAssignValue(object, key, value) {
|
||||
if (key == '__proto__' && defineProperty) {
|
||||
defineProperty(object, key, {
|
||||
'configurable': true,
|
||||
'enumerable': true,
|
||||
'value': value,
|
||||
'writable': true
|
||||
});
|
||||
} else {
|
||||
object[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = baseAssignValue;
|
23
node_modules/graphlib/node_modules/lodash/_baseAt.js
generated
vendored
Normal file
23
node_modules/graphlib/node_modules/lodash/_baseAt.js
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
var get = require('./get');
|
||||
|
||||
/**
|
||||
* The base implementation of `_.at` without support for individual paths.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to iterate over.
|
||||
* @param {string[]} paths The property paths to pick.
|
||||
* @returns {Array} Returns the picked elements.
|
||||
*/
|
||||
function baseAt(object, paths) {
|
||||
var index = -1,
|
||||
length = paths.length,
|
||||
result = Array(length),
|
||||
skip = object == null;
|
||||
|
||||
while (++index < length) {
|
||||
result[index] = skip ? undefined : get(object, paths[index]);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = baseAt;
|
22
node_modules/graphlib/node_modules/lodash/_baseClamp.js
generated
vendored
Normal file
22
node_modules/graphlib/node_modules/lodash/_baseClamp.js
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* The base implementation of `_.clamp` which doesn't coerce arguments.
|
||||
*
|
||||
* @private
|
||||
* @param {number} number The number to clamp.
|
||||
* @param {number} [lower] The lower bound.
|
||||
* @param {number} upper The upper bound.
|
||||
* @returns {number} Returns the clamped number.
|
||||
*/
|
||||
function baseClamp(number, lower, upper) {
|
||||
if (number === number) {
|
||||
if (upper !== undefined) {
|
||||
number = number <= upper ? number : upper;
|
||||
}
|
||||
if (lower !== undefined) {
|
||||
number = number >= lower ? number : lower;
|
||||
}
|
||||
}
|
||||
return number;
|
||||
}
|
||||
|
||||
module.exports = baseClamp;
|
166
node_modules/graphlib/node_modules/lodash/_baseClone.js
generated
vendored
Normal file
166
node_modules/graphlib/node_modules/lodash/_baseClone.js
generated
vendored
Normal file
@@ -0,0 +1,166 @@
|
||||
var Stack = require('./_Stack'),
|
||||
arrayEach = require('./_arrayEach'),
|
||||
assignValue = require('./_assignValue'),
|
||||
baseAssign = require('./_baseAssign'),
|
||||
baseAssignIn = require('./_baseAssignIn'),
|
||||
cloneBuffer = require('./_cloneBuffer'),
|
||||
copyArray = require('./_copyArray'),
|
||||
copySymbols = require('./_copySymbols'),
|
||||
copySymbolsIn = require('./_copySymbolsIn'),
|
||||
getAllKeys = require('./_getAllKeys'),
|
||||
getAllKeysIn = require('./_getAllKeysIn'),
|
||||
getTag = require('./_getTag'),
|
||||
initCloneArray = require('./_initCloneArray'),
|
||||
initCloneByTag = require('./_initCloneByTag'),
|
||||
initCloneObject = require('./_initCloneObject'),
|
||||
isArray = require('./isArray'),
|
||||
isBuffer = require('./isBuffer'),
|
||||
isMap = require('./isMap'),
|
||||
isObject = require('./isObject'),
|
||||
isSet = require('./isSet'),
|
||||
keys = require('./keys'),
|
||||
keysIn = require('./keysIn');
|
||||
|
||||
/** Used to compose bitmasks for cloning. */
|
||||
var CLONE_DEEP_FLAG = 1,
|
||||
CLONE_FLAT_FLAG = 2,
|
||||
CLONE_SYMBOLS_FLAG = 4;
|
||||
|
||||
/** `Object#toString` result references. */
|
||||
var argsTag = '[object Arguments]',
|
||||
arrayTag = '[object Array]',
|
||||
boolTag = '[object Boolean]',
|
||||
dateTag = '[object Date]',
|
||||
errorTag = '[object Error]',
|
||||
funcTag = '[object Function]',
|
||||
genTag = '[object GeneratorFunction]',
|
||||
mapTag = '[object Map]',
|
||||
numberTag = '[object Number]',
|
||||
objectTag = '[object Object]',
|
||||
regexpTag = '[object RegExp]',
|
||||
setTag = '[object Set]',
|
||||
stringTag = '[object String]',
|
||||
symbolTag = '[object Symbol]',
|
||||
weakMapTag = '[object WeakMap]';
|
||||
|
||||
var arrayBufferTag = '[object ArrayBuffer]',
|
||||
dataViewTag = '[object DataView]',
|
||||
float32Tag = '[object Float32Array]',
|
||||
float64Tag = '[object Float64Array]',
|
||||
int8Tag = '[object Int8Array]',
|
||||
int16Tag = '[object Int16Array]',
|
||||
int32Tag = '[object Int32Array]',
|
||||
uint8Tag = '[object Uint8Array]',
|
||||
uint8ClampedTag = '[object Uint8ClampedArray]',
|
||||
uint16Tag = '[object Uint16Array]',
|
||||
uint32Tag = '[object Uint32Array]';
|
||||
|
||||
/** Used to identify `toStringTag` values supported by `_.clone`. */
|
||||
var cloneableTags = {};
|
||||
cloneableTags[argsTag] = cloneableTags[arrayTag] =
|
||||
cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
|
||||
cloneableTags[boolTag] = cloneableTags[dateTag] =
|
||||
cloneableTags[float32Tag] = cloneableTags[float64Tag] =
|
||||
cloneableTags[int8Tag] = cloneableTags[int16Tag] =
|
||||
cloneableTags[int32Tag] = cloneableTags[mapTag] =
|
||||
cloneableTags[numberTag] = cloneableTags[objectTag] =
|
||||
cloneableTags[regexpTag] = cloneableTags[setTag] =
|
||||
cloneableTags[stringTag] = cloneableTags[symbolTag] =
|
||||
cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
|
||||
cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
|
||||
cloneableTags[errorTag] = cloneableTags[funcTag] =
|
||||
cloneableTags[weakMapTag] = false;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.clone` and `_.cloneDeep` which tracks
|
||||
* traversed objects.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to clone.
|
||||
* @param {boolean} bitmask The bitmask flags.
|
||||
* 1 - Deep clone
|
||||
* 2 - Flatten inherited properties
|
||||
* 4 - Clone symbols
|
||||
* @param {Function} [customizer] The function to customize cloning.
|
||||
* @param {string} [key] The key of `value`.
|
||||
* @param {Object} [object] The parent object of `value`.
|
||||
* @param {Object} [stack] Tracks traversed objects and their clone counterparts.
|
||||
* @returns {*} Returns the cloned value.
|
||||
*/
|
||||
function baseClone(value, bitmask, customizer, key, object, stack) {
|
||||
var result,
|
||||
isDeep = bitmask & CLONE_DEEP_FLAG,
|
||||
isFlat = bitmask & CLONE_FLAT_FLAG,
|
||||
isFull = bitmask & CLONE_SYMBOLS_FLAG;
|
||||
|
||||
if (customizer) {
|
||||
result = object ? customizer(value, key, object, stack) : customizer(value);
|
||||
}
|
||||
if (result !== undefined) {
|
||||
return result;
|
||||
}
|
||||
if (!isObject(value)) {
|
||||
return value;
|
||||
}
|
||||
var isArr = isArray(value);
|
||||
if (isArr) {
|
||||
result = initCloneArray(value);
|
||||
if (!isDeep) {
|
||||
return copyArray(value, result);
|
||||
}
|
||||
} else {
|
||||
var tag = getTag(value),
|
||||
isFunc = tag == funcTag || tag == genTag;
|
||||
|
||||
if (isBuffer(value)) {
|
||||
return cloneBuffer(value, isDeep);
|
||||
}
|
||||
if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
|
||||
result = (isFlat || isFunc) ? {} : initCloneObject(value);
|
||||
if (!isDeep) {
|
||||
return isFlat
|
||||
? copySymbolsIn(value, baseAssignIn(result, value))
|
||||
: copySymbols(value, baseAssign(result, value));
|
||||
}
|
||||
} else {
|
||||
if (!cloneableTags[tag]) {
|
||||
return object ? value : {};
|
||||
}
|
||||
result = initCloneByTag(value, tag, isDeep);
|
||||
}
|
||||
}
|
||||
// Check for circular references and return its corresponding clone.
|
||||
stack || (stack = new Stack);
|
||||
var stacked = stack.get(value);
|
||||
if (stacked) {
|
||||
return stacked;
|
||||
}
|
||||
stack.set(value, result);
|
||||
|
||||
if (isSet(value)) {
|
||||
value.forEach(function(subValue) {
|
||||
result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
|
||||
});
|
||||
} else if (isMap(value)) {
|
||||
value.forEach(function(subValue, key) {
|
||||
result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
|
||||
});
|
||||
}
|
||||
|
||||
var keysFunc = isFull
|
||||
? (isFlat ? getAllKeysIn : getAllKeys)
|
||||
: (isFlat ? keysIn : keys);
|
||||
|
||||
var props = isArr ? undefined : keysFunc(value);
|
||||
arrayEach(props || value, function(subValue, key) {
|
||||
if (props) {
|
||||
key = subValue;
|
||||
subValue = value[key];
|
||||
}
|
||||
// Recursively populate clone (susceptible to call stack limits).
|
||||
assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = baseClone;
|
18
node_modules/graphlib/node_modules/lodash/_baseConforms.js
generated
vendored
Normal file
18
node_modules/graphlib/node_modules/lodash/_baseConforms.js
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
var baseConformsTo = require('./_baseConformsTo'),
|
||||
keys = require('./keys');
|
||||
|
||||
/**
|
||||
* The base implementation of `_.conforms` which doesn't clone `source`.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} source The object of property predicates to conform to.
|
||||
* @returns {Function} Returns the new spec function.
|
||||
*/
|
||||
function baseConforms(source) {
|
||||
var props = keys(source);
|
||||
return function(object) {
|
||||
return baseConformsTo(object, source, props);
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = baseConforms;
|
27
node_modules/graphlib/node_modules/lodash/_baseConformsTo.js
generated
vendored
Normal file
27
node_modules/graphlib/node_modules/lodash/_baseConformsTo.js
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
* The base implementation of `_.conformsTo` which accepts `props` to check.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to inspect.
|
||||
* @param {Object} source The object of property predicates to conform to.
|
||||
* @returns {boolean} Returns `true` if `object` conforms, else `false`.
|
||||
*/
|
||||
function baseConformsTo(object, source, props) {
|
||||
var length = props.length;
|
||||
if (object == null) {
|
||||
return !length;
|
||||
}
|
||||
object = Object(object);
|
||||
while (length--) {
|
||||
var key = props[length],
|
||||
predicate = source[key],
|
||||
value = object[key];
|
||||
|
||||
if ((value === undefined && !(key in object)) || !predicate(value)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
module.exports = baseConformsTo;
|
30
node_modules/graphlib/node_modules/lodash/_baseCreate.js
generated
vendored
Normal file
30
node_modules/graphlib/node_modules/lodash/_baseCreate.js
generated
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
var isObject = require('./isObject');
|
||||
|
||||
/** Built-in value references. */
|
||||
var objectCreate = Object.create;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.create` without support for assigning
|
||||
* properties to the created object.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} proto The object to inherit from.
|
||||
* @returns {Object} Returns the new object.
|
||||
*/
|
||||
var baseCreate = (function() {
|
||||
function object() {}
|
||||
return function(proto) {
|
||||
if (!isObject(proto)) {
|
||||
return {};
|
||||
}
|
||||
if (objectCreate) {
|
||||
return objectCreate(proto);
|
||||
}
|
||||
object.prototype = proto;
|
||||
var result = new object;
|
||||
object.prototype = undefined;
|
||||
return result;
|
||||
};
|
||||
}());
|
||||
|
||||
module.exports = baseCreate;
|
21
node_modules/graphlib/node_modules/lodash/_baseDelay.js
generated
vendored
Normal file
21
node_modules/graphlib/node_modules/lodash/_baseDelay.js
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
/** Error message constants. */
|
||||
var FUNC_ERROR_TEXT = 'Expected a function';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.delay` and `_.defer` which accepts `args`
|
||||
* to provide to `func`.
|
||||
*
|
||||
* @private
|
||||
* @param {Function} func The function to delay.
|
||||
* @param {number} wait The number of milliseconds to delay invocation.
|
||||
* @param {Array} args The arguments to provide to `func`.
|
||||
* @returns {number|Object} Returns the timer id or timeout object.
|
||||
*/
|
||||
function baseDelay(func, wait, args) {
|
||||
if (typeof func != 'function') {
|
||||
throw new TypeError(FUNC_ERROR_TEXT);
|
||||
}
|
||||
return setTimeout(function() { func.apply(undefined, args); }, wait);
|
||||
}
|
||||
|
||||
module.exports = baseDelay;
|
67
node_modules/graphlib/node_modules/lodash/_baseDifference.js
generated
vendored
Normal file
67
node_modules/graphlib/node_modules/lodash/_baseDifference.js
generated
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
var SetCache = require('./_SetCache'),
|
||||
arrayIncludes = require('./_arrayIncludes'),
|
||||
arrayIncludesWith = require('./_arrayIncludesWith'),
|
||||
arrayMap = require('./_arrayMap'),
|
||||
baseUnary = require('./_baseUnary'),
|
||||
cacheHas = require('./_cacheHas');
|
||||
|
||||
/** Used as the size to enable large array optimizations. */
|
||||
var LARGE_ARRAY_SIZE = 200;
|
||||
|
||||
/**
|
||||
* The base implementation of methods like `_.difference` without support
|
||||
* for excluding multiple arrays or iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to inspect.
|
||||
* @param {Array} values The values to exclude.
|
||||
* @param {Function} [iteratee] The iteratee invoked per element.
|
||||
* @param {Function} [comparator] The comparator invoked per element.
|
||||
* @returns {Array} Returns the new array of filtered values.
|
||||
*/
|
||||
function baseDifference(array, values, iteratee, comparator) {
|
||||
var index = -1,
|
||||
includes = arrayIncludes,
|
||||
isCommon = true,
|
||||
length = array.length,
|
||||
result = [],
|
||||
valuesLength = values.length;
|
||||
|
||||
if (!length) {
|
||||
return result;
|
||||
}
|
||||
if (iteratee) {
|
||||
values = arrayMap(values, baseUnary(iteratee));
|
||||
}
|
||||
if (comparator) {
|
||||
includes = arrayIncludesWith;
|
||||
isCommon = false;
|
||||
}
|
||||
else if (values.length >= LARGE_ARRAY_SIZE) {
|
||||
includes = cacheHas;
|
||||
isCommon = false;
|
||||
values = new SetCache(values);
|
||||
}
|
||||
outer:
|
||||
while (++index < length) {
|
||||
var value = array[index],
|
||||
computed = iteratee == null ? value : iteratee(value);
|
||||
|
||||
value = (comparator || value !== 0) ? value : 0;
|
||||
if (isCommon && computed === computed) {
|
||||
var valuesIndex = valuesLength;
|
||||
while (valuesIndex--) {
|
||||
if (values[valuesIndex] === computed) {
|
||||
continue outer;
|
||||
}
|
||||
}
|
||||
result.push(value);
|
||||
}
|
||||
else if (!includes(values, computed, comparator)) {
|
||||
result.push(value);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = baseDifference;
|
14
node_modules/graphlib/node_modules/lodash/_baseEach.js
generated
vendored
Normal file
14
node_modules/graphlib/node_modules/lodash/_baseEach.js
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
var baseForOwn = require('./_baseForOwn'),
|
||||
createBaseEach = require('./_createBaseEach');
|
||||
|
||||
/**
|
||||
* The base implementation of `_.forEach` without support for iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array|Object} collection The collection to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @returns {Array|Object} Returns `collection`.
|
||||
*/
|
||||
var baseEach = createBaseEach(baseForOwn);
|
||||
|
||||
module.exports = baseEach;
|
14
node_modules/graphlib/node_modules/lodash/_baseEachRight.js
generated
vendored
Normal file
14
node_modules/graphlib/node_modules/lodash/_baseEachRight.js
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
var baseForOwnRight = require('./_baseForOwnRight'),
|
||||
createBaseEach = require('./_createBaseEach');
|
||||
|
||||
/**
|
||||
* The base implementation of `_.forEachRight` without support for iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array|Object} collection The collection to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @returns {Array|Object} Returns `collection`.
|
||||
*/
|
||||
var baseEachRight = createBaseEach(baseForOwnRight, true);
|
||||
|
||||
module.exports = baseEachRight;
|
21
node_modules/graphlib/node_modules/lodash/_baseEvery.js
generated
vendored
Normal file
21
node_modules/graphlib/node_modules/lodash/_baseEvery.js
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
var baseEach = require('./_baseEach');
|
||||
|
||||
/**
|
||||
* The base implementation of `_.every` without support for iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array|Object} collection The collection to iterate over.
|
||||
* @param {Function} predicate The function invoked per iteration.
|
||||
* @returns {boolean} Returns `true` if all elements pass the predicate check,
|
||||
* else `false`
|
||||
*/
|
||||
function baseEvery(collection, predicate) {
|
||||
var result = true;
|
||||
baseEach(collection, function(value, index, collection) {
|
||||
result = !!predicate(value, index, collection);
|
||||
return result;
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = baseEvery;
|
32
node_modules/graphlib/node_modules/lodash/_baseExtremum.js
generated
vendored
Normal file
32
node_modules/graphlib/node_modules/lodash/_baseExtremum.js
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
var isSymbol = require('./isSymbol');
|
||||
|
||||
/**
|
||||
* The base implementation of methods like `_.max` and `_.min` which accepts a
|
||||
* `comparator` to determine the extremum value.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to iterate over.
|
||||
* @param {Function} iteratee The iteratee invoked per iteration.
|
||||
* @param {Function} comparator The comparator used to compare values.
|
||||
* @returns {*} Returns the extremum value.
|
||||
*/
|
||||
function baseExtremum(array, iteratee, comparator) {
|
||||
var index = -1,
|
||||
length = array.length;
|
||||
|
||||
while (++index < length) {
|
||||
var value = array[index],
|
||||
current = iteratee(value);
|
||||
|
||||
if (current != null && (computed === undefined
|
||||
? (current === current && !isSymbol(current))
|
||||
: comparator(current, computed)
|
||||
)) {
|
||||
var computed = current,
|
||||
result = value;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = baseExtremum;
|
32
node_modules/graphlib/node_modules/lodash/_baseFill.js
generated
vendored
Normal file
32
node_modules/graphlib/node_modules/lodash/_baseFill.js
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
var toInteger = require('./toInteger'),
|
||||
toLength = require('./toLength');
|
||||
|
||||
/**
|
||||
* The base implementation of `_.fill` without an iteratee call guard.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to fill.
|
||||
* @param {*} value The value to fill `array` with.
|
||||
* @param {number} [start=0] The start position.
|
||||
* @param {number} [end=array.length] The end position.
|
||||
* @returns {Array} Returns `array`.
|
||||
*/
|
||||
function baseFill(array, value, start, end) {
|
||||
var length = array.length;
|
||||
|
||||
start = toInteger(start);
|
||||
if (start < 0) {
|
||||
start = -start > length ? 0 : (length + start);
|
||||
}
|
||||
end = (end === undefined || end > length) ? length : toInteger(end);
|
||||
if (end < 0) {
|
||||
end += length;
|
||||
}
|
||||
end = start > end ? 0 : toLength(end);
|
||||
while (start < end) {
|
||||
array[start++] = value;
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
module.exports = baseFill;
|
21
node_modules/graphlib/node_modules/lodash/_baseFilter.js
generated
vendored
Normal file
21
node_modules/graphlib/node_modules/lodash/_baseFilter.js
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
var baseEach = require('./_baseEach');
|
||||
|
||||
/**
|
||||
* The base implementation of `_.filter` without support for iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array|Object} collection The collection to iterate over.
|
||||
* @param {Function} predicate The function invoked per iteration.
|
||||
* @returns {Array} Returns the new filtered array.
|
||||
*/
|
||||
function baseFilter(collection, predicate) {
|
||||
var result = [];
|
||||
baseEach(collection, function(value, index, collection) {
|
||||
if (predicate(value, index, collection)) {
|
||||
result.push(value);
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = baseFilter;
|
24
node_modules/graphlib/node_modules/lodash/_baseFindIndex.js
generated
vendored
Normal file
24
node_modules/graphlib/node_modules/lodash/_baseFindIndex.js
generated
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
/**
|
||||
* The base implementation of `_.findIndex` and `_.findLastIndex` without
|
||||
* support for iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to inspect.
|
||||
* @param {Function} predicate The function invoked per iteration.
|
||||
* @param {number} fromIndex The index to search from.
|
||||
* @param {boolean} [fromRight] Specify iterating from right to left.
|
||||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||||
*/
|
||||
function baseFindIndex(array, predicate, fromIndex, fromRight) {
|
||||
var length = array.length,
|
||||
index = fromIndex + (fromRight ? 1 : -1);
|
||||
|
||||
while ((fromRight ? index-- : ++index < length)) {
|
||||
if (predicate(array[index], index, array)) {
|
||||
return index;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
module.exports = baseFindIndex;
|
23
node_modules/graphlib/node_modules/lodash/_baseFindKey.js
generated
vendored
Normal file
23
node_modules/graphlib/node_modules/lodash/_baseFindKey.js
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* The base implementation of methods like `_.findKey` and `_.findLastKey`,
|
||||
* without support for iteratee shorthands, which iterates over `collection`
|
||||
* using `eachFunc`.
|
||||
*
|
||||
* @private
|
||||
* @param {Array|Object} collection The collection to inspect.
|
||||
* @param {Function} predicate The function invoked per iteration.
|
||||
* @param {Function} eachFunc The function to iterate over `collection`.
|
||||
* @returns {*} Returns the found element or its key, else `undefined`.
|
||||
*/
|
||||
function baseFindKey(collection, predicate, eachFunc) {
|
||||
var result;
|
||||
eachFunc(collection, function(value, key, collection) {
|
||||
if (predicate(value, key, collection)) {
|
||||
result = key;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = baseFindKey;
|
38
node_modules/graphlib/node_modules/lodash/_baseFlatten.js
generated
vendored
Normal file
38
node_modules/graphlib/node_modules/lodash/_baseFlatten.js
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
var arrayPush = require('./_arrayPush'),
|
||||
isFlattenable = require('./_isFlattenable');
|
||||
|
||||
/**
|
||||
* The base implementation of `_.flatten` with support for restricting flattening.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to flatten.
|
||||
* @param {number} depth The maximum recursion depth.
|
||||
* @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
|
||||
* @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
|
||||
* @param {Array} [result=[]] The initial result value.
|
||||
* @returns {Array} Returns the new flattened array.
|
||||
*/
|
||||
function baseFlatten(array, depth, predicate, isStrict, result) {
|
||||
var index = -1,
|
||||
length = array.length;
|
||||
|
||||
predicate || (predicate = isFlattenable);
|
||||
result || (result = []);
|
||||
|
||||
while (++index < length) {
|
||||
var value = array[index];
|
||||
if (depth > 0 && predicate(value)) {
|
||||
if (depth > 1) {
|
||||
// Recursively flatten arrays (susceptible to call stack limits).
|
||||
baseFlatten(value, depth - 1, predicate, isStrict, result);
|
||||
} else {
|
||||
arrayPush(result, value);
|
||||
}
|
||||
} else if (!isStrict) {
|
||||
result[result.length] = value;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = baseFlatten;
|
16
node_modules/graphlib/node_modules/lodash/_baseFor.js
generated
vendored
Normal file
16
node_modules/graphlib/node_modules/lodash/_baseFor.js
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
var createBaseFor = require('./_createBaseFor');
|
||||
|
||||
/**
|
||||
* The base implementation of `baseForOwn` which iterates over `object`
|
||||
* properties returned by `keysFunc` and invokes `iteratee` for each property.
|
||||
* Iteratee functions may exit iteration early by explicitly returning `false`.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @param {Function} keysFunc The function to get the keys of `object`.
|
||||
* @returns {Object} Returns `object`.
|
||||
*/
|
||||
var baseFor = createBaseFor();
|
||||
|
||||
module.exports = baseFor;
|
16
node_modules/graphlib/node_modules/lodash/_baseForOwn.js
generated
vendored
Normal file
16
node_modules/graphlib/node_modules/lodash/_baseForOwn.js
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
var baseFor = require('./_baseFor'),
|
||||
keys = require('./keys');
|
||||
|
||||
/**
|
||||
* The base implementation of `_.forOwn` without support for iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @returns {Object} Returns `object`.
|
||||
*/
|
||||
function baseForOwn(object, iteratee) {
|
||||
return object && baseFor(object, iteratee, keys);
|
||||
}
|
||||
|
||||
module.exports = baseForOwn;
|
16
node_modules/graphlib/node_modules/lodash/_baseForOwnRight.js
generated
vendored
Normal file
16
node_modules/graphlib/node_modules/lodash/_baseForOwnRight.js
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
var baseForRight = require('./_baseForRight'),
|
||||
keys = require('./keys');
|
||||
|
||||
/**
|
||||
* The base implementation of `_.forOwnRight` without support for iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @returns {Object} Returns `object`.
|
||||
*/
|
||||
function baseForOwnRight(object, iteratee) {
|
||||
return object && baseForRight(object, iteratee, keys);
|
||||
}
|
||||
|
||||
module.exports = baseForOwnRight;
|
15
node_modules/graphlib/node_modules/lodash/_baseForRight.js
generated
vendored
Normal file
15
node_modules/graphlib/node_modules/lodash/_baseForRight.js
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
var createBaseFor = require('./_createBaseFor');
|
||||
|
||||
/**
|
||||
* This function is like `baseFor` except that it iterates over properties
|
||||
* in the opposite order.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @param {Function} keysFunc The function to get the keys of `object`.
|
||||
* @returns {Object} Returns `object`.
|
||||
*/
|
||||
var baseForRight = createBaseFor(true);
|
||||
|
||||
module.exports = baseForRight;
|
19
node_modules/graphlib/node_modules/lodash/_baseFunctions.js
generated
vendored
Normal file
19
node_modules/graphlib/node_modules/lodash/_baseFunctions.js
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
var arrayFilter = require('./_arrayFilter'),
|
||||
isFunction = require('./isFunction');
|
||||
|
||||
/**
|
||||
* The base implementation of `_.functions` which creates an array of
|
||||
* `object` function property names filtered from `props`.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to inspect.
|
||||
* @param {Array} props The property names to filter.
|
||||
* @returns {Array} Returns the function names.
|
||||
*/
|
||||
function baseFunctions(object, props) {
|
||||
return arrayFilter(props, function(key) {
|
||||
return isFunction(object[key]);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = baseFunctions;
|
24
node_modules/graphlib/node_modules/lodash/_baseGet.js
generated
vendored
Normal file
24
node_modules/graphlib/node_modules/lodash/_baseGet.js
generated
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
var castPath = require('./_castPath'),
|
||||
toKey = require('./_toKey');
|
||||
|
||||
/**
|
||||
* The base implementation of `_.get` without support for default values.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to query.
|
||||
* @param {Array|string} path The path of the property to get.
|
||||
* @returns {*} Returns the resolved value.
|
||||
*/
|
||||
function baseGet(object, path) {
|
||||
path = castPath(path, object);
|
||||
|
||||
var index = 0,
|
||||
length = path.length;
|
||||
|
||||
while (object != null && index < length) {
|
||||
object = object[toKey(path[index++])];
|
||||
}
|
||||
return (index && index == length) ? object : undefined;
|
||||
}
|
||||
|
||||
module.exports = baseGet;
|
20
node_modules/graphlib/node_modules/lodash/_baseGetAllKeys.js
generated
vendored
Normal file
20
node_modules/graphlib/node_modules/lodash/_baseGetAllKeys.js
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
var arrayPush = require('./_arrayPush'),
|
||||
isArray = require('./isArray');
|
||||
|
||||
/**
|
||||
* The base implementation of `getAllKeys` and `getAllKeysIn` which uses
|
||||
* `keysFunc` and `symbolsFunc` to get the enumerable property names and
|
||||
* symbols of `object`.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to query.
|
||||
* @param {Function} keysFunc The function to get the keys of `object`.
|
||||
* @param {Function} symbolsFunc The function to get the symbols of `object`.
|
||||
* @returns {Array} Returns the array of property names and symbols.
|
||||
*/
|
||||
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
|
||||
var result = keysFunc(object);
|
||||
return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
|
||||
}
|
||||
|
||||
module.exports = baseGetAllKeys;
|
28
node_modules/graphlib/node_modules/lodash/_baseGetTag.js
generated
vendored
Normal file
28
node_modules/graphlib/node_modules/lodash/_baseGetTag.js
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
var Symbol = require('./_Symbol'),
|
||||
getRawTag = require('./_getRawTag'),
|
||||
objectToString = require('./_objectToString');
|
||||
|
||||
/** `Object#toString` result references. */
|
||||
var nullTag = '[object Null]',
|
||||
undefinedTag = '[object Undefined]';
|
||||
|
||||
/** Built-in value references. */
|
||||
var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
|
||||
|
||||
/**
|
||||
* The base implementation of `getTag` without fallbacks for buggy environments.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to query.
|
||||
* @returns {string} Returns the `toStringTag`.
|
||||
*/
|
||||
function baseGetTag(value) {
|
||||
if (value == null) {
|
||||
return value === undefined ? undefinedTag : nullTag;
|
||||
}
|
||||
return (symToStringTag && symToStringTag in Object(value))
|
||||
? getRawTag(value)
|
||||
: objectToString(value);
|
||||
}
|
||||
|
||||
module.exports = baseGetTag;
|
14
node_modules/graphlib/node_modules/lodash/_baseGt.js
generated
vendored
Normal file
14
node_modules/graphlib/node_modules/lodash/_baseGt.js
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
/**
|
||||
* The base implementation of `_.gt` which doesn't coerce arguments.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to compare.
|
||||
* @param {*} other The other value to compare.
|
||||
* @returns {boolean} Returns `true` if `value` is greater than `other`,
|
||||
* else `false`.
|
||||
*/
|
||||
function baseGt(value, other) {
|
||||
return value > other;
|
||||
}
|
||||
|
||||
module.exports = baseGt;
|
19
node_modules/graphlib/node_modules/lodash/_baseHas.js
generated
vendored
Normal file
19
node_modules/graphlib/node_modules/lodash/_baseHas.js
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.has` without support for deep paths.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} [object] The object to query.
|
||||
* @param {Array|string} key The key to check.
|
||||
* @returns {boolean} Returns `true` if `key` exists, else `false`.
|
||||
*/
|
||||
function baseHas(object, key) {
|
||||
return object != null && hasOwnProperty.call(object, key);
|
||||
}
|
||||
|
||||
module.exports = baseHas;
|
13
node_modules/graphlib/node_modules/lodash/_baseHasIn.js
generated
vendored
Normal file
13
node_modules/graphlib/node_modules/lodash/_baseHasIn.js
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
/**
|
||||
* The base implementation of `_.hasIn` without support for deep paths.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} [object] The object to query.
|
||||
* @param {Array|string} key The key to check.
|
||||
* @returns {boolean} Returns `true` if `key` exists, else `false`.
|
||||
*/
|
||||
function baseHasIn(object, key) {
|
||||
return object != null && key in Object(object);
|
||||
}
|
||||
|
||||
module.exports = baseHasIn;
|
18
node_modules/graphlib/node_modules/lodash/_baseInRange.js
generated
vendored
Normal file
18
node_modules/graphlib/node_modules/lodash/_baseInRange.js
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||||
var nativeMax = Math.max,
|
||||
nativeMin = Math.min;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.inRange` which doesn't coerce arguments.
|
||||
*
|
||||
* @private
|
||||
* @param {number} number The number to check.
|
||||
* @param {number} start The start of the range.
|
||||
* @param {number} end The end of the range.
|
||||
* @returns {boolean} Returns `true` if `number` is in the range, else `false`.
|
||||
*/
|
||||
function baseInRange(number, start, end) {
|
||||
return number >= nativeMin(start, end) && number < nativeMax(start, end);
|
||||
}
|
||||
|
||||
module.exports = baseInRange;
|
20
node_modules/graphlib/node_modules/lodash/_baseIndexOf.js
generated
vendored
Normal file
20
node_modules/graphlib/node_modules/lodash/_baseIndexOf.js
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
var baseFindIndex = require('./_baseFindIndex'),
|
||||
baseIsNaN = require('./_baseIsNaN'),
|
||||
strictIndexOf = require('./_strictIndexOf');
|
||||
|
||||
/**
|
||||
* The base implementation of `_.indexOf` without `fromIndex` bounds checks.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to inspect.
|
||||
* @param {*} value The value to search for.
|
||||
* @param {number} fromIndex The index to search from.
|
||||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||||
*/
|
||||
function baseIndexOf(array, value, fromIndex) {
|
||||
return value === value
|
||||
? strictIndexOf(array, value, fromIndex)
|
||||
: baseFindIndex(array, baseIsNaN, fromIndex);
|
||||
}
|
||||
|
||||
module.exports = baseIndexOf;
|
23
node_modules/graphlib/node_modules/lodash/_baseIndexOfWith.js
generated
vendored
Normal file
23
node_modules/graphlib/node_modules/lodash/_baseIndexOfWith.js
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* This function is like `baseIndexOf` except that it accepts a comparator.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to inspect.
|
||||
* @param {*} value The value to search for.
|
||||
* @param {number} fromIndex The index to search from.
|
||||
* @param {Function} comparator The comparator invoked per element.
|
||||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||||
*/
|
||||
function baseIndexOfWith(array, value, fromIndex, comparator) {
|
||||
var index = fromIndex - 1,
|
||||
length = array.length;
|
||||
|
||||
while (++index < length) {
|
||||
if (comparator(array[index], value)) {
|
||||
return index;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
module.exports = baseIndexOfWith;
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user