Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

graphology

Package Overview
Dependencies
Maintainers
1
Versions
65
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

graphology - npm Package Compare versions

Comparing version 0.5.4 to 0.6.0

4

build/graphology.min.js

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.graphology=t():e.graphology=t()}(this,function(){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.i=function(e){return e},t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=9)}([function(e,t,r){"use strict";function n(e){e=e||{};for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];for(var o=0,i=r.length;o<i;o++)if(r[o])for(var a in r[o])e[a]=r[o][a];return e}function o(){var e=new Map;return e.set=function(e,t){return e=""+e,Map.prototype.set.call(this,e,t)},e.get=function(e){return e=""+e,Map.prototype.get.call(this,e)},e.has=function(e){return e=""+e,Map.prototype.has.call(this,e)},e}function i(e,t){for(var r=new Array(e),n=0,o=void 0;o=t.next(),!o.done;)r[n++]=o.value;return r}function a(e,t,r,n){if("mixed"===n)return a(e,t,r,"directed")||a(e,t,r,"undirected");var o=e._nodes.get(t),i="directed"===n?o.out:o.undirectedOut;return i&&(i[r]||"undirected"!==n)||(i=o.undirectedIn),i&&i[r]?i[r]:null}function u(e){return!!e&&"object"===("undefined"==typeof e?"undefined":y(e))&&(Array.isArray(e)||"function"==typeof Map&&e instanceof Map||"function"==typeof Set&&e instanceof Set||!(e instanceof Date)&&!(e instanceof RegExp))}function d(e){return!!e&&"object"===("undefined"==typeof e?"undefined":y(e))&&"function"==typeof e.addUndirectedEdgeWithKey&&"function"==typeof e.dropNode}function s(e){return!(!e||"object"!==("undefined"==typeof e?"undefined":y(e))||Array.isArray(e)||e instanceof Date||e instanceof RegExp||"function"==typeof Map&&e instanceof Map||"function"==typeof Set&&e instanceof Set)}function h(e,t){if(Array.isArray(e))for(var r=0,n=e.length;r<n;r++){var o=t(e[r],null)===!1;if(o)break}else if("function"==typeof e.forEach)for(var i=e.entries(),a=!1,u=void 0;u=i.next();){var d=u,s=d.value,h=d.done;if(h)break;var c=s[0],p=s[1];if(a=p===c?t(p,null)===!1:t(c,p)===!1)break}else for(var f in e){var g=e[f],l=t(f,g);if(l)break}}function c(e){for(var t=""+e,r="",n=0,o=t.length;n<o;n++){var i=o-n-1;r=t[i]+r,(n-2)%3||n===o-1||(r=","+r)}return r}function p(e,t,r){Object.defineProperty(e,t,{enumerable:!1,configurable:!1,writable:!0,value:r})}function f(e,t,r){var n={enumerable:!0,configurable:!1};"function"==typeof r?n.get=r:(n.value=r,n.writable=!1),Object.defineProperty(e,t,n)}function g(){for(var e,t=0;t<16;t++)0===(3&t)&&(e=4294967296*Math.random()),m[t]=e>>>((3&t)<<3)&255;return m}function l(){var e=g();return e[6]=15&e[6]|64,e[8]=63&e[8]|128,e}function v(e){for(var t=[0],r=0,n=e.length;r<n;r++){for(var o=e[r],i=0,a=t.length;i<a;i++)o+=t[i]<<8,t[i]=o%62,o=o/62|0;for(;o>0;)t.push(o%62),o=o/62|0}for(var u="",d=0,s=e.length;0===e[d]&&d<s-1;d++)u+=w[0];for(var h=t.length-1;h>=0;h--)u+=w[t[h]];for(;u.length<22;)u+="0";return u}function b(){var e=l();return v(e)}Object.defineProperty(t,"__esModule",{value:!0});var y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.assign=n,t.createInternalMap=o,t.consumeIterator=i,t.getMatchingEdge=a,t.isBunch=u,t.isGraph=d,t.isPlainObject=s,t.overBunch=h,t.prettyPrint=c,t.privateProperty=p,t.readOnlyProperty=f,t.uuid=b;var m=new Uint8Array(16),w="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=t.GraphError=function(e){function t(r,i){n(this,t);var a=o(this,e.call(this));return a.name="GraphError",a.message=r||"",a.data=i||{},a}return i(t,e),t}(Error);t.InvalidArgumentsGraphError=function(e){function t(r,i){n(this,t);var a=o(this,e.call(this,r,i));return a.name="InvalidArgumentsGraphError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(a,t.prototype.constructor),a}return i(t,e),t}(a),t.NotFoundGraphError=function(e){function t(r,i){n(this,t);var a=o(this,e.call(this,r,i));return a.name="NotFoundGraphError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(a,t.prototype.constructor),a}return i(t,e),t}(a),t.UsageGraphError=function(e){function t(r,i){n(this,t);var a=o(this,e.call(this,r,i));return a.name="UsageGraphError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(a,t.prototype.constructor),a}return i(t,e),t}(a)},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){if("structure"===t){var r=e._indices.structure;if(!r.computed)return e;for(var n=arguments.length,o=Array(n>2?n-2:0),i=2;i<n;i++)o[i-2]=arguments[i];var a=o[0],u=o[1];(0,p.updateStructureIndex)(e,a,u)}return e}function u(e,t,r,n){if("structure"===t){var o=e._indices.structure;if(!o.computed)return e;(0,p.clearEdgeFromStructureIndex)(e,r,n)}return e}function d(e,t,r,n,o,i,u,d,s){if(!o&&"undirected"===e.type)throw new c.UsageGraphError("Graph."+t+": you cannot add a directed edge to an undirected graph. Use the #.addEdge or #.addUndirectedEdge instead.");if(o&&"directed"===e.type)throw new c.UsageGraphError("Graph."+t+": you cannot add an undirected edge to a directed graph. Use the #.addEdge or #.addDirectedEdge instead.");if(s&&!(0,b.isPlainObject)(s))throw new c.InvalidArgumentsGraphError("Graph."+t+': invalid attributes. Expecting an object but got "'+s+'"');u=""+u,d=""+d;var h=!1,p=!1;if(!e.hasNode(u)){if(!r)throw new c.NotFoundGraphError("Graph."+t+': source node "'+u+'" not found.');h=!0}if(!e.hasNode(d)){if(!r)throw new c.NotFoundGraphError("Graph."+t+': target node "'+d+'" not found.');p=!0}if(!e.allowSelfLoops&&u===d)throw new c.UsageGraphError("Graph."+t+': source & target are the same ("'+u+"\"), thus creating a loop explicitly forbidden by this graph 'allowSelfLoops' option set to false.");n&&(i=e._options.edgeKeyGenerator({undirected:o,source:u,target:d,attributes:s||{}}));var f=null;if(e.hasEdge(i)){if(!r)throw new c.UsageGraphError("Graph."+t+': the "'+i+'" edge already exists in the graph.');f=i}if(!e.multi&&(o?e.hasUndirectedEdge(u,d):e.hasDirectedEdge(u,d))){if(!r)throw new c.UsageGraphError("Graph."+t+': an edge linking "'+u+'" to "'+d+"\" already exists. If you really want to add multiple edges linking those nodes, you should create a multi graph by using the 'multi' option.");f=(0,b.getMatchingEdge)(e,u,d,o?"undirected":"directed")}if(s=(0,b.assign)({},e._options.defaultEdgeAttributes,s),f){if(e.source(f)!==u||e.target(f)!==d)throw new c.UsageGraphError("Graph."+t+': inconsitency detected when attempting to merge the "'+i+'" edge with "'+u+'" source & "'+d+'" target vs. ('+e.source(f)+", "+e.target(f)+").");return e.mergeEdgeAttributes(f,s),f}h&&e.addNode(u),p&&e.addNode(d);var g={attributes:s,source:u,target:d};o&&(g.undirected=!0),n&&(g.generatedId=!0),e._edges.set(i,g);var l=e._nodes.get(u),v=e._nodes.get(d);return u===d?o?l.undirectedSelfLoops++:l.directedSelfLoops++:o?(l.undirectedDegree++,v.undirectedDegree++):(l.outDegree++,v.inDegree++),a(e,"structure",i,g),e.emit("edgeAdded",{key:i,source:u,target:d,attributes:s,undirected:o}),i}function s(e,t,r,n){var o=[];if(n){if(!(0,b.isBunch)(n))throw new c.InvalidArgumentsGraphError("Graph."+t+": invalid bunch.");(0,b.overBunch)(n,function(n){if(!e.hasEdge(n))throw new c.NotFoundGraphError("Graph."+t+': could not find the "'+n+'" edge from the bunch in the graph.');r&&!r(n)||o.push(n)})}else o="exportEdges"===t?e.edges():"exportDirectedEdges"===t?e.directedEdges():e.undirectedEdges();for(var i=new Array(o.length),a=0,u=o.length;a<u;a++)i[a]=e.exportEdge(o[a]);return i}Object.defineProperty(t,"__esModule",{value:!0});var h=r(8),c=r(1),p=r(4),f=r(3),g=r(5),l=r(6),v=r(7),b=r(0),y=new Set(["directed","undirected","mixed"]),m=new Set(["domain","_events","_eventsCount","_maxListeners"]),w=[{name:function(e){return e+"Edge"},generateKey:!0},{name:function(e){return e+"DirectedEdge"},generateKey:!0,type:"directed"},{name:function(e){return e+"UndirectedEdge"},generateKey:!0,type:"undirected"},{name:function(e){return e+"EdgeWithKey"}},{name:function(e){return e+"DirectedEdgeWithKey"},type:"directed"},{name:function(e){return e+"UndirectedEdgeWithKey"},type:"undirected"}],E={allowSelfLoops:!0,defaultEdgeAttributes:{},defaultNodeAttributes:{},edgeKeyGenerator:b.uuid,multi:!1,type:"mixed"},G=function(e){function t(r){n(this,t);var i=o(this,e.call(this));if(r=(0,b.assign)({},E,r),Object.freeze(r),"function"!=typeof r.edgeKeyGenerator)throw new c.InvalidArgumentsGraphError("Graph.constructor: invalid 'edgeKeyGenerator' option. Expecting a function but got \""+r.edgeKeyGenerator+'".');if("boolean"!=typeof r.multi)throw new c.InvalidArgumentsGraphError("Graph.constructor: invalid 'multi' option. Expecting a boolean but got \""+r.multi+'".');if(!y.has(r.type))throw new c.InvalidArgumentsGraphError('Graph.constructor: invalid \'type\' option. Should be one of "mixed", "directed" or "undirected" but got "'+r.type+'".');if("boolean"!=typeof r.allowSelfLoops)throw new c.InvalidArgumentsGraphError("Graph.constructor: invalid 'allowSelfLoops' option. Expecting a boolean but got \""+r.allowSelfLoops+'".');if(!(0,b.isPlainObject)(r.defaultEdgeAttributes))throw new c.InvalidArgumentsGraphError("Graph.constructor: invalid 'defaultEdgeAttributes' option. Expecting a plain object but got \""+r.defaultEdgeAttributes+'".');if(!(0,b.isPlainObject)(r.defaultNodeAttributes))throw new c.InvalidArgumentsGraphError("Graph.constructor: invalid 'defaultNodeAttributes' option. Expecting a plain object but got \""+r.defaultNodeAttributes+'".');(0,b.privateProperty)(i,"_attributes",{}),(0,b.privateProperty)(i,"_nodes",(0,b.createInternalMap)()),(0,b.privateProperty)(i,"_edges",(0,b.createInternalMap)()),(0,b.privateProperty)(i,"_indices",{structure:{lazy:r.indices&&r.indices.structure&&r.indices.structure.lazy||!1,computed:!1}}),(0,b.privateProperty)(i,"_options",r),m.forEach(function(e){return(0,b.privateProperty)(i,e,i[e])}),(0,b.readOnlyProperty)(i,"order",function(){return i._nodes.size}),(0,b.readOnlyProperty)(i,"size",function(){return i._edges.size}),(0,b.readOnlyProperty)(i,"multi",i._options.multi),(0,b.readOnlyProperty)(i,"type",i._options.type),(0,b.readOnlyProperty)(i,"allowSelfLoops",i._options.allowSelfLoops);for(var a in i._indices){var u=i._indices[a];u.lazy||(u.computed=!0)}return i}return i(t,e),t.prototype.hasNode=function(e){return this._nodes.has(e)},t.prototype.hasDirectedEdge=function(e,t){if(1===arguments.length){var r=e;return this._edges.has(r)&&this.directed(r)}if(2===arguments.length){if(this.computeIndex("structure"),!this.hasNode(e)||!this.hasNode(t))return!1;var n=this._nodes.get(e),o=n.out;if(!o)return!1;var i=o[t];return!!i&&(this.multi?!!i.size:!!i)}throw new c.InvalidArgumentsGraphError("Graph.hasDirectedEdge: invalid arity ("+arguments.length+", instead of 1 or 2). You can either ask for an edge id or for the existence of an edge between a source & a target.")},t.prototype.hasUndirectedEdge=function(e,t){if(1===arguments.length){var r=e;return this._edges.has(r)&&this.undirected(r)}if(2===arguments.length){if(this.computeIndex("structure"),!this.hasNode(e)||!this.hasNode(t))return!1;var n=this._nodes.get(e),o=n.undirectedOut,i=void 0;return o&&(i=o[t]),o=n.undirectedIn,!i&&o&&(i=o[t]),!!i&&(this.multi?!!i.size:!!i)}throw new c.InvalidArgumentsGraphError("Graph.hasDirectedEdge: invalid arity ("+arguments.length+", instead of 1 or 2). You can either ask for an edge id or for the existence of an edge between a source & a target.")},t.prototype.hasEdge=function(e,t){if(1===arguments.length){var r=e;return this._edges.has(r)}if(2===arguments.length)return this.hasDirectedEdge(e,t)||this.hasUndirectedEdge(e,t);throw new c.InvalidArgumentsGraphError("Graph.hasEdge: invalid arity ("+arguments.length+", instead of 1 or 2). You can either ask for an edge id or for the existence of an edge between a source & a target.")},t.prototype.inDegree=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("boolean"!=typeof t)throw new c.InvalidArgumentsGraphError('Graph.inDegree: Expecting a boolean but got "'+t+'" for the second parameter (allowing self-loops to be counted).');if(!this.hasNode(e))throw new c.NotFoundGraphError('Graph.inDegree: could not find the "'+e+'" node in the graph.');if("undirected"===this.type)return 0;var r=this._nodes.get(e),n=t?r.directedSelfLoops:0;return r.inDegree+n},t.prototype.outDegree=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("boolean"!=typeof t)throw new c.InvalidArgumentsGraphError('Graph.outDegree: Expecting a boolean but got "'+t+'" for the second parameter (allowing self-loops to be counted).');if(!this.hasNode(e))throw new c.NotFoundGraphError('Graph.outDegree: could not find the "'+e+'" node in the graph.');if("undirected"===this.type)return 0;var r=this._nodes.get(e),n=t?r.directedSelfLoops:0;return r.outDegree+n},t.prototype.directedDegree=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("boolean"!=typeof t)throw new c.InvalidArgumentsGraphError('Graph.directedDegree: Expecting a boolean but got "'+t+'" for the second parameter (allowing self-loops to be counted).');if(!this.hasNode(e))throw new c.NotFoundGraphError('Graph.directedDegree: could not find the "'+e+'" node in the graph.');return"undirected"===this.type?0:this.inDegree(e,t)+this.outDegree(e,t)},t.prototype.undirectedDegree=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("boolean"!=typeof t)throw new c.InvalidArgumentsGraphError('Graph.undirectedDegree: Expecting a boolean but got "'+t+'" for the second parameter (allowing self-loops to be counted).');if(!this.hasNode(e))throw new c.NotFoundGraphError('Graph.undirectedDegree: could not find the "'+e+'" node in the graph.');if("directed"===this.type)return 0;var r=this._nodes.get(e),n=t?2*r.undirectedSelfLoops:0;return r.undirectedDegree+n},t.prototype.degree=function e(t){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("boolean"!=typeof r)throw new c.InvalidArgumentsGraphError('Graph.degree: Expecting a boolean but got "'+r+'" for the second parameter (allowing self-loops to be counted).');if(!this.hasNode(t))throw new c.NotFoundGraphError('Graph.degree: could not find the "'+t+'" node in the graph.');var e=0;return"undirected"!==this.type&&(e+=this.directedDegree(t,r)),"directed"!==this.type&&(e+=this.undirectedDegree(t,r)),e},t.prototype.source=function(e){if(!this.hasEdge(e))throw new c.NotFoundGraphError('Graph.source: could not find the "'+e+'" edge in the graph.');return this._edges.get(e).source},t.prototype.target=function(e){if(!this.hasEdge(e))throw new c.NotFoundGraphError('Graph.target: could not find the "'+e+'" edge in the graph.');return this._edges.get(e).target},t.prototype.extremities=function(e){if(!this.hasEdge(e))throw new c.NotFoundGraphError('Graph.extremities: could not find the "'+e+'" edge in the graph.');return[this._edges.get(e).source,this._edges.get(e).target]},t.prototype.opposite=function(e,t){if(!this.hasNode(e))throw new c.NotFoundGraphError('Graph.opposite: could not find the "'+e+'" node in the graph.');if(!this.hasEdge(t))throw new c.NotFoundGraphError('Graph.opposite: could not find the "'+t+'" edge in the graph.');var r=this.extremities(t),n=r[0],o=r[1];if(e!==n&&e!==o)throw new c.NotFoundGraphError('Graph.opposite: the "'+e+'" node is not attached to the "'+t+'" edge ('+n+", "+o+").");return e===n?o:n},t.prototype.undirected=function(e){if(!this.hasEdge(e))throw new c.NotFoundGraphError('Graph.undirected: could not find the "'+e+'" edge in the graph.');return!!this._edges.get(e).undirected},t.prototype.directed=function(e){if(!this.hasEdge(e))throw new c.NotFoundGraphError('Graph.directed: could not find the "'+e+'" edge in the graph.');return!this._edges.get(e).undirected},t.prototype.selfLoop=function(e){if(!this.hasEdge(e))throw new c.NotFoundGraphError('Graph.selfLoop: could not find the "'+e+'" edge in the graph.');var t=this._edges.get(e);return t.source===t.target},t.prototype.addNode=function(e,t){if(t&&!(0,b.isPlainObject)(t))throw new c.InvalidArgumentsGraphError('Graph.addNode: invalid attributes. Expecting an object but got "'+t+'"');if(t=(0,b.assign)({},this._options.defaultNodeAttributes,t),this.hasNode(e))throw new c.UsageGraphError('Graph.addNode: the "'+e+'" node already exist in the graph.');var r={attributes:t};return this.allowSelfLoops&&("undirected"!==this.type&&(r.directedSelfLoops=0),"directed"!==this.type&&(r.undirectedSelfLoops=0)),"undirected"!==this.type&&(r.inDegree=0,r.outDegree=0),"directed"!==this.type&&(r.undirectedDegree=0),this._nodes.set(e,r),this.emit("nodeAdded",{key:e,attributes:t}),e},t.prototype.mergeNode=function(e,t){return this.hasNode(e)?(t&&this.mergeNodeAttributes(e,t),e):this.addNode(e,t)},t.prototype.addNodesFrom=function(e){var t=this;if(!(0,b.isBunch)(e))throw new c.InvalidArgumentsGraphError('Graph.addNodesFrom: invalid bunch provided ("'+e+'").');return(0,b.overBunch)(e,function(e,r){t.addNode(e,r)}),this},t.prototype.dropNode=function(e){if(!this.hasNode(e))throw new c.NotFoundGraphError('Graph.dropNode: could not find the "'+e+'" node in the graph.');for(var t=this.edges(e),r=0,n=t.length;r<n;r++)this.dropEdge(t[r]);var o=this._nodes.get(e);this._nodes.delete(e),this.emit("nodeDropped",{key:e,attributes:o.attributes})},t.prototype.dropEdge=function(e){if(arguments.length>1){var t=arguments[0],r=arguments[1];if(!this.hasNode(t))throw new c.NotFoundGraphError('Graph.dropEdge: could not find the "'+t+'" source node in the graph.');if(!this.hasNode(r))throw new c.NotFoundGraphError('Graph.dropEdge: could not find the "'+r+'" target node in the graph.');if(!this.hasEdge(t,r))throw new c.NotFoundGraphError('Graph.dropEdge: could not find the "'+t+'" -> "'+r+'" edge in the graph.');e=(0,b.getMatchingEdge)(this,t,r,this.type)}else if(!this.hasEdge(e))throw new c.NotFoundGraphError('Graph.dropEdge: could not find the "'+e+'" edge in the graph.');var n=this._edges.get(e);this._edges.delete(e);var o=n.source,i=n.target,a=n.attributes,d=n.undirected,s=void 0!==d&&d,h=this._nodes.get(o),p=this._nodes.get(i);return o===i?h.selfLoops--:s?(h.undirectedDegree--,p.undirectedDegree--):(h.outDegree--,p.inDegree--),u(this,"structure",e,n),this.emit("edgeDropped",{key:e,attributes:a,source:o,target:i,undirected:s}),this},t.prototype.dropNodes=function(e){var t=this;if(!arguments.length)return this.clear();if(!(0,b.isBunch)(e))throw new c.InvalidArgumentsGraphError("Graph.dropNodes: invalid bunch.");return(0,b.overBunch)(e,function(e){t.dropNode(e)}),this},t.prototype.dropEdges=function(e){var t=this;if(!arguments.length){this._edges=(0,b.createInternalMap)(),this.clearIndex("structure");var r=this._indices.structure;return r.lazy||(r.computed=!0),this}if(2===arguments.length){var n=arguments[0],o=arguments[1];e=this.edges(n,o)}if(!(0,b.isBunch)(e))throw new c.InvalidArgumentsGraphError("Graph.dropEdges: invalid bunch.");return(0,b.overBunch)(e,function(e){t.dropEdge(e)}),this},t.prototype.clear=function(){this._edges=(0,b.createInternalMap)(),this._nodes=(0,b.createInternalMap)();for(var e in this._indices){var t=this._indices[e];t.lazy&&(t.computed=!1)}this.emit("cleared")},t.prototype.getAttribute=function(e){return this._attributes[e]},t.prototype.getAttributes=function(){return this._attributes},t.prototype.hasAttribute=function(e){return this._attributes.hasOwnProperty(e)},t.prototype.setAttribute=function(e,t){return this._attributes[e]=t,this.emit("attributesUpdated",{type:"set",meta:{name:e,value:t}}),this},t.prototype.updateAttribute=function(e,t){if("function"!=typeof t)throw new c.InvalidArgumentsGraphError("Graph.updateAttribute: updater should be a function.");return this._attributes[e]=t(this._attributes[e]),this.emit("attributesUpdated",{type:"set",meta:{name:e,value:this._attributes[e]}}),this},t.prototype.removeAttribute=function(e){return delete this._attributes[e],this.emit("attributesUpdated",{type:"remove",meta:{name:e}}),this},t.prototype.replaceAttributes=function(e){if(!(0,b.isPlainObject)(e))throw new c.InvalidArgumentsGraphError("Graph.replaceAttributes: provided attributes are not a plain object.");var t=this._attributes;return this._attributes=e,this.emit("attributesUpdated",{type:"replace",meta:{before:t,after:e}}),this},t.prototype.mergeAttributes=function(e){if(!(0,b.isPlainObject)(e))throw new c.InvalidArgumentsGraphError("Graph.mergeAttributes: provided attributes are not a plain object.");return this._attributes=(0,b.assign)(this._attributes,e),this.emit("attributesUpdated",{type:"merge",meta:{data:this._attributes}}),this},t.prototype.getNodeAttribute=function(e,t){if(!this.hasNode(e))throw new c.NotFoundGraphError('Graph.getNodeAttribute: could not find the "'+e+'" node in the graph.');return this._nodes.get(e).attributes[t]},t.prototype.getNodeAttributes=function(e){if(!this.hasNode(e))throw new c.NotFoundGraphError('Graph.getNodeAttributes: could not find the "'+e+'" node in the graph.');return this._nodes.get(e).attributes},t.prototype.hasNodeAttribute=function(e,t){if(!this.hasNode(e))throw new c.NotFoundGraphError('Graph.hasNodeAttribute: could not find the "'+e+'" node in the graph.');return this._nodes.get(e).attributes.hasOwnProperty(t)},t.prototype.setNodeAttribute=function(e,t,r){if(!this.hasNode(e))throw new c.NotFoundGraphError('Graph.setNodeAttribute: could not find the "'+e+'" node in the graph.');if(arguments.length<3)throw new c.InvalidArgumentsGraphError("Graph.setNodeAttribute: not enough arguments. Either you forgot to pass the attribute's name or value, or you meant to use #.replaceNodeAttributes / #.mergeNodeAttributes instead.");return this._nodes.get(e).attributes[t]=r,this.emit("nodeAttributesUpdated",{key:e,type:"set",meta:{name:t,value:r}}),this},t.prototype.updateNodeAttribute=function(e,t,r){if(!this.hasNode(e))throw new c.NotFoundGraphError('Graph.updateNodeAttribute: could not find the "'+e+'" node in the graph.');if(arguments.length<3)throw new c.InvalidArgumentsGraphError("Graph.updateNodeAttribute: not enough arguments. Either you forgot to pass the attribute's name or updater, or you meant to use #.replaceNodeAttributes / #.mergeNodeAttributes instead.");if("function"!=typeof r)throw new c.InvalidArgumentsGraphError("Graph.updateAttribute: updater should be a function.");var n=this._nodes.get(e).attributes;return n[t]=r(n[t]),this.emit("nodeAttributesUpdated",{key:e,type:"set",meta:{name:t,value:n[t]}}),this},t.prototype.removeNodeAttribute=function(e,t){if(!this.hasNode(e))throw new c.NotFoundGraphError('Graph.hasNodeAttribute: could not find the "'+e+'" node in the graph.');return delete this._nodes.get(e).attributes[t],this.emit("nodeAttributesUpdated",{key:e,type:"remove",meta:{name:t}}),this},t.prototype.replaceNodeAttributes=function(e,t){if(!this.hasNode(e))throw new c.NotFoundGraphError('Graph.replaceNodeAttributes: could not find the "'+e+'" node in the graph.');if(!(0,b.isPlainObject)(t))throw new c.InvalidArgumentsGraphError("Graph.replaceNodeAttributes: provided attributes are not a plain object.");var r=this._nodes.get(e),n=r.attributes;return r.attributes=t,this.emit("nodeAttributesUpdated",{key:e,type:"replace",meta:{before:n,after:t}}),this},t.prototype.mergeNodeAttributes=function(e,t){if(!this.hasNode(e))throw new c.NotFoundGraphError('Graph.mergeNodeAttributes: could not find the "'+e+'" node in the graph.');if(!(0,b.isPlainObject)(t))throw new c.InvalidArgumentsGraphError("Graph.mergeNodeAttributes: provided attributes are not a plain object.");var r=this._nodes.get(e);return(0,b.assign)(r.attributes,t),this.emit("nodeAttributesUpdated",{key:e,type:"merge",meta:{data:t}}),this},t.prototype.nodes=function(){return(0,b.consumeIterator)(this._nodes.size,this._nodes.keys())},t.prototype.exportNode=function(e){if(!this.hasNode(e))throw new c.NotFoundGraphError('Graph.exportNode: could not find the "'+e+'" node in the graph.');var t=this._nodes.get(e);return(0,v.serializeNode)(e,t)},t.prototype.exportEdge=function(e){if(!this.hasEdge(e))throw new c.NotFoundGraphError('Graph.exportEdge: could not find the "'+e+'" edge in the graph.');var t=this._edges.get(e);return(0,v.serializeEdge)(e,t)},t.prototype.exportNodes=function(e){var t=this,r=[];if(arguments.length){if(!(0,b.isBunch)(e))throw new c.InvalidArgumentsGraphError("Graph.exportNodes: invalid bunch.");(0,b.overBunch)(e,function(e){if(!t.hasNode(e))throw new c.NotFoundGraphError('Graph.exportNodes: could not find the "'+e+'" node from the bunch in the graph.');r.push(e)})}else r=this.nodes();for(var n=new Array(r.length),o=0,i=r.length;o<i;o++)n[o]=this.exportNode(r[o]);return n},t.prototype.exportEdges=function(e){return s(this,"exportEdges",null,e)},t.prototype.exportDirectedEdges=function(e){var t=this;return s(this,"exportDirectedEdges",function(e){return t.directed(e)},e)},t.prototype.exportUndirectedEdges=function(e){var t=this;return s(this,"exportUndirectedEdges",function(e){return t.undirected(e)},e)},t.prototype.export=function(){return{attributes:this.getAttributes(),nodes:this.exportNodes(),edges:this.exportEdges()}},t.prototype.importNode=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=(0,v.validateSerializedNode)(e);if(r){if("not-object"===r)throw new c.InvalidArgumentsGraphError('Graph.importNode: invalid serialized node. A serialized node should be a plain object with at least a "key" property.');if("no-key"===r)throw new c.InvalidArgumentsGraphError("Graph.importNode: no key provided.");if("invalid-attributes"===r)throw new c.InvalidArgumentsGraphError("Graph.importNode: invalid attributes. Attributes should be a plain object, null or omitted.")}var n=e.key,o=e.attributes,i=void 0===o?{}:o;return t?this.mergeNode(n,i):this.addNode(n,i),this},t.prototype.importEdge=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=(0,v.validateSerializedEdge)(e);if(r){if("not-object"===r)throw new c.InvalidArgumentsGraphError('Graph.importEdge: invalid serialized edge. A serialized edge should be a plain object with at least a "source" & "target" property.');if("no-source"===r)throw new c.InvalidArgumentsGraphError("Graph.importEdge: missing souce.");if("no-target"===r)throw new c.InvalidArgumentsGraphError("Graph.importEdge: missing target");if("invalid-attributes"===r)throw new c.InvalidArgumentsGraphError("Graph.importEdge: invalid attributes. Attributes should be a plain object, null or omitted.");if("invalid-undirected"===r)throw new c.InvalidArgumentsGraphError("Graph.importEdge: invalid undirected. Undirected should be boolean or omitted.")}var n=e.source,o=e.target,i=e.attributes,a=void 0===i?{}:i,u=e.undirected,d=void 0!==u&&u,s=void 0;return"key"in e?(s=t?d?this.mergeUndirectedEdgeWithKey:this.mergeDirectedEdgeWithKey:d?this.addUndirectedEdgeWithKey:this.addDirectedEdgeWithKey,s.call(this,e.key,n,o,a)):(s=t?d?this.mergeUndirectedEdge:this.mergeDirectedEdge:d?this.addUndirectedEdge:this.addDirectedEdge,s.call(this,n,o,a)),this},t.prototype.importNodes=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!Array.isArray(e))throw new c.InvalidArgumentsGraphError("Graph.importNodes: invalid argument. Expecting an array.");for(var r=0,n=e.length;r<n;r++)this.importNode(e[r],t);return this},t.prototype.importEdges=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!Array.isArray(e))throw new c.InvalidArgumentsGraphError("Graph.importEdges: invalid argument. Expecting an array.");for(var r=0,n=e.length;r<n;r++)this.importEdge(e[r],t);return this},t.prototype.import=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if((0,b.isGraph)(e))return this.import(e.export(),t),this;if(!(0,b.isPlainObject)(e))throw new c.InvalidArgumentsGraphError("Graph.import: invalid argument. Expecting a serialized graph or, alternatively, a Graph instance.");if(e.attributes){if(!(0,b.isPlainObject)(e.attributes))throw new c.InvalidArgumentsGraphError("Graph.import: invalid attributes. Expecting a plain object.");t?this.mergeAttributes(e.attributes):this.replaceAttributes(e.attributes)}return e.nodes&&this.importNodes(e.nodes,t),e.edges&&this.importEdges(e.edges,t),this},t.prototype.emptyCopy=function(){return new t(this._options)},t.prototype.copy=function(){var e=new t(this._options);return e.import(this),e},t.prototype.computeIndex=function(e){var t=this;if(!p.INDICES.has(e))throw new c.InvalidArgumentsGraphError('Graph.computeIndex: unknown "'+e+'" index.');if("structure"===e){var r=this._indices.structure;if(r.computed)return this;r.computed=!0,this._edges.forEach(function(r,n){return a(t,e,n,r)})}return this},t.prototype.clearIndex=function(e){if(!p.INDICES.has(e))throw new c.InvalidArgumentsGraphError('Graph.clearIndex: unknown "'+e+'" index.');if("structure"===e){var t=this._indices.structure;if(!t.computed)return this;(0,p.clearStructureIndex)(this),t.computed=!1}return this},t.prototype.toJSON=function(){return this.export()},t.prototype.toString=function(){var e=this.order>1||0===this.order,t=this.size>1||0===this.size;return"Graph<"+(0,b.prettyPrint)(this.order)+" node"+(e?"s":"")+", "+(0,b.prettyPrint)(this.size)+" edge"+(t?"s":"")+">"},t.prototype.inspect=function(){var e={};this._nodes.forEach(function(t,r){e[r]=t.attributes});var t={};this._edges.forEach(function(e,r){var n=e.undirected?"<->":"->",o="";e.generatedId||(o+="["+r+"]: "),o+="("+e.source+")"+n+"("+e.target+")",t[o]=e.attributes});var r={};for(var n in this)this.hasOwnProperty(n)&&!m.has(n)&&"function"!=typeof this[n]&&(r[n]=this[n]);return r.attributes=this._attributes,r.nodes=e,r.edges=t,(0,b.privateProperty)(r,"constructor",this.constructor),r},t}(h.EventEmitter);t.default=G,w.forEach(function(e){["add","merge"].forEach(function(t){var r=e.name(t);e.generateKey?G.prototype[r]=function(n,o,i){return d(this,r,"merge"===t,e.generateKey,"undirected"===(e.type||this.type),null,n,o,i)}:G.prototype[r]=function(n,o,i,a){return d(this,r,"merge"===t,e.generateKey,"undirected"===(e.type||this.type),n,o,i,a)}})}),(0,f.attachAttributesMethods)(G),(0,g.attachEdgeIterationMethods)(G),(0,l.attachNeighborIterationMethods)(G)},function(e,t,r){"use strict";function n(e,t,r,n){e.prototype[t]=function(e,o){if(arguments.length>2){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");
var i=e,a=o;if(o=arguments[2],!this[r](i,a))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+i+'" - "'+a+'").');e=(0,p.getMatchingEdge)(this,i,a,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');var u=this._edges.get(e);return u.attributes[o]}}function o(e,t,r,n){e.prototype[t]=function(e){if(arguments.length>1){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");var o=e,i=arguments[1];if(!this[r](o,i))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+o+'" - "'+i+'").');e=(0,p.getMatchingEdge)(this,o,i,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');var a=this._edges.get(e);return a.attributes}}function i(e,t,r,n){e.prototype[t]=function(e,o){if(arguments.length>2){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");var i=e,a=o;if(o=arguments[2],!this[r](i,a))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+i+'" - "'+a+'").');e=(0,p.getMatchingEdge)(this,i,a,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');var u=this._edges.get(e);return u.attributes.hasOwnProperty(o)}}function a(e,t,r,n){e.prototype[t]=function(e,o,i){if(arguments.length>3){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");var a=e,u=o;if(o=arguments[2],i=arguments[3],!this[r](a,u))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+a+'" - "'+u+'").');e=(0,p.getMatchingEdge)(this,a,u,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');var d=this._edges.get(e);return d.attributes[o]=i,this.emit("edgeAttributesUpdated",{key:e,type:"set",meta:{name:o,value:i}}),this}}function u(e,t,r,n){e.prototype[t]=function(e,o,i){if(arguments.length>3){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");var a=e,u=o;if(o=arguments[2],i=arguments[3],!this[r](a,u))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+a+'" - "'+u+'").');e=(0,p.getMatchingEdge)(this,a,u,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');if("function"!=typeof i)throw new f.InvalidArgumentsGraphError("Graph."+t+": updater should be a function.");var d=this._edges.get(e);return d.attributes[o]=i(d.attributes[o]),this.emit("edgeAttributesUpdated",{key:e,type:"set",meta:{name:o,value:d.attributes[o]}}),this}}function d(e,t,r,n){e.prototype[t]=function(e,o){if(arguments.length>2){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");var i=e,a=o;if(o=arguments[2],!this[r](i,a))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+i+'" - "'+a+'").');e=(0,p.getMatchingEdge)(this,i,a,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');var u=this._edges.get(e);return delete u.attributes[o],this.emit("edgeAttributesUpdated",{key:e,type:"remove",meta:{name:o}}),this}}function s(e,t,r,n){e.prototype[t]=function(e,o){if(arguments.length>2){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");var i=e,a=o;if(o=arguments[2],!this[r](i,a))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+i+'" - "'+a+'").');e=(0,p.getMatchingEdge)(this,i,a,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');if(!(0,p.isPlainObject)(o))throw new f.InvalidArgumentsGraphError("Graph."+t+": provided attributes are not a plain object.");var u=this._edges.get(e),d=u.attributes;return u.attributes=o,this.emit("edgeAttributesUpdated",{key:e,type:"replace",meta:{before:d,after:o}}),this}}function h(e,t,r,n){e.prototype[t]=function(e,o){if(arguments.length>2){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");var i=e,a=o;if(o=arguments[2],!this[r](i,a))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+i+'" - "'+a+'").');e=(0,p.getMatchingEdge)(this,i,a,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');if(!(0,p.isPlainObject)(o))throw new f.InvalidArgumentsGraphError("Graph."+t+": provided attributes are not a plain object.");var u=this._edges.get(e);return(0,p.assign)(u.attributes,o),this.emit("edgeAttributesUpdated",{key:e,type:"merge",meta:{data:o}}),this}}function c(e){g.forEach(function(t){var r=t.name,n=t.attacher;n(e,r("Edge"),"hasEdge","mixed"),n(e,r("DirectedEdge"),"hasDirectedEdge","directed"),n(e,r("UndirectedEdge"),"hasUndirectedEdge","undirected")})}Object.defineProperty(t,"__esModule",{value:!0}),t.attachAttributesMethods=c;var p=r(0),f=r(1),g=[{name:function(e){return"get"+e+"Attribute"},attacher:n},{name:function(e){return"get"+e+"Attributes"},attacher:o},{name:function(e){return"has"+e+"Attribute"},attacher:i},{name:function(e){return"set"+e+"Attribute"},attacher:a},{name:function(e){return"update"+e+"Attribute"},attacher:u},{name:function(e){return"remove"+e+"Attribute"},attacher:d},{name:function(e){return"replace"+e+"Attributes"},attacher:s},{name:function(e){return"merge"+e+"Attributes"},attacher:h}]},function(e,t,r){"use strict";function n(e,t,r){var n=e.multi,o=r.undirected,i=r.source,a=r.target,u=e._nodes.get(i),d=e._nodes.get(a),s=o?"undirectedOut":"out";if(u[s]=u[s]||Object.create(null),a in u[s]||(u[s][a]=n?new Set:t),n&&u[s][a].add(t),i!==a){var h=o?"undirectedIn":"in";d[h]=d[h]||Object.create(null),i in d[h]||(d[h][i]=u[s][a])}}function o(e,t,r){var n=e.multi,o=r.source,i=r.target,a=r.undirected,u=e._nodes.get(o),d=a?"undirectedOut":"out",s=u[d];if(i in s&&(n?s[i].delete(t):delete s[i]),!n){var h=e._nodes.get(i),c=a?"undirectedIn":"in",p=h[c];delete p[o]}}function i(e){e._nodes.forEach(function(e){delete e.in,delete e.out,delete e.undirectedIn,delete e.undirectedOut})}Object.defineProperty(t,"__esModule",{value:!0}),t.updateStructureIndex=n,t.clearEdgeFromStructureIndex=o,t.clearStructureIndex=i;t.INDICES=new Set(["structure"])},function(e,t,r){"use strict";function n(e,t,r){var n=arguments.length>2;if(t&&(!n||r in t)){if(n)return void(t[r]instanceof Set?e.push.apply(e,(0,v.consumeIterator)(t[r].size,t[r].values())):e.push(t[r]));for(var o in t)t[o]instanceof Set?e.push.apply(e,(0,v.consumeIterator)(t[o].size,t[o].values())):e.push(t[o])}}function o(e,t){var r=0,n=arguments.length>1;if(!e||n&&!(t in e))return r;if(n)return e[t]instanceof Set?e[t].size:+!!e[t];for(var o in e)r+=e[o]instanceof Set?e[o].size:+!!e[o];return r}function i(e,t,r){if(t)if(r){var n=t[r];n&&(n instanceof Set?n.forEach(function(t){return e.add(t)}):e.add(n))}else for(var o in t)t[o]instanceof Set?t[o].forEach(function(t){return e.add(t)}):e.add(t[o])}function a(e,t){if("mixed"===t)return e.size;var r=0;return e._edges.forEach(function(e){!!e.undirected==("undirected"===t)&&r++}),r}function u(e,t){if("mixed"===t)return(0,v.consumeIterator)(e._edges.size,e._edges.keys());var r=[];return e._edges.forEach(function(e,n){!!e.undirected==("undirected"===t)&&r.push(n)}),r}function d(e,t,r,n){e.computeIndex("structure");var i=0,a=e._nodes.get(n);return"undirected"!==t&&("out"!==r&&(i+=o(a.in)),"in"!==r&&(i+=o(a.out))),"directed"!==t&&("out"!==r&&(i+=o(a.undirectedIn)),"in"!==r&&(i+=o(a.undirectedOut))),i}function s(e,t,r,o){e.computeIndex("structure");var i=[],a=e._nodes.get(o);return"undirected"!==t&&("out"!==r&&n(i,a.in),"in"!==r&&n(i,a.out)),"directed"!==t&&("out"!==r&&n(i,a.undirectedIn),"in"!==r&&n(i,a.undirectedOut)),i}function h(e,t,r,n,o){t.computeIndex("structure");var a=new Set;return(0,v.overBunch)(o,function(o){if(!t.hasNode(o))throw new l.NotFoundGraphError("Graph."+e+': could not find the "'+o+'" node in the graph in the given bunch.');var u=t._nodes.get(o);"undirected"!==r&&("out"!==n&&i(a,u.in),"in"!==n&&i(a,u.out)),"directed"!==r&&("out"!==n&&i(a,u.undirectedIn),"in"!==n&&i(a,u.undirectedOut))}),(0,v.consumeIterator)(a.size,a.values())}function c(e,t,r,n){e.computeIndex("structure");var i=0,a=e._nodes.get(r);return"undirected"!==t&&(i+=o(a.in,n),i+=o(a.out,n)),"directed"!==t&&(i+=o(a.undirectedIn,n),i+=o(a.undirectedOut,n)),i}function p(e,t,r,o){e.computeIndex("structure");var i=[],a=e._nodes.get(r);return"undirected"!==t&&(n(i,a.in,o),n(i,a.out,o)),"directed"!==t&&(n(i,a.undirectedIn,o),n(i,a.undirectedOut,o)),i}function f(e,t,r){var n=r.type,o=r.direction,i=t?r.counter:r.name;e.prototype[i]=function(){for(var e=arguments.length,r=Array(e),f=0;f<e;f++)r[f]=arguments[f];if(!r.length)return t?a(this,n):u(this,n);if(1===r.length){var g=r[0];if(this.hasNode(g))return t?d(this,n,o,g):s(this,n,o,g);if((0,v.isBunch)(g)){var b=h(i,this,n,o,g);return t?b.length:b}throw new l.NotFoundGraphError("Graph."+i+': could not find the "'+g+'" node in the graph.')}if(2===r.length){var y=r[0],m=r[1];if(!this.hasNode(y))throw new l.NotFoundGraphError("Graph."+i+': could not find the "'+y+'" source node in the graph.');if(!this.hasNode(m))throw new l.NotFoundGraphError("Graph."+i+': could not find the "'+m+'" target node in the graph.');var w=void 0;return w="undirected"!==n?this.hasDirectedEdge(y,m):this.hasUndirectedEdge(y,m),w?t?c(this,n,y,m):p(this,n,y,m):t?0:[]}throw new l.InvalidArgumentsGraphError("Graph."+i+": too many arguments (expecting 0, 1 or 2 and got "+r.length+").")}}function g(e){b.forEach(function(t){f(e,!1,t),f(e,!0,t)})}Object.defineProperty(t,"__esModule",{value:!0}),t.attachEdgeIterationMethods=g;var l=r(1),v=r(0),b=[{name:"edges",counter:"countEdges",type:"mixed"},{name:"inEdges",counter:"countInEdges",type:"directed",direction:"in"},{name:"outEdges",counter:"countOutEdges",type:"directed",direction:"out"},{name:"inboundEdges",counter:"countInboundEdges",type:"mixed",direction:"in"},{name:"outboundEdges",counter:"countOutboundEdges",type:"mixed",direction:"out"},{name:"directedEdges",counter:"countDirectedEdges",type:"directed"},{name:"undirectedEdges",counter:"countUndirectedEdges",type:"undirected"}]},function(e,t,r){"use strict";function n(e,t){if(t)for(var r in t)e.add(r)}function o(e,t,r,o){e.computeIndex("structure");var i=new Set,a=e._nodes.get(o);return"undirected"!==t&&("out"!==r&&n(i,a.in),"in"!==r&&n(i,a.out)),"directed"!==t&&("out"!==r&&n(i,a.undirectedIn),"in"!==r&&n(i,a.undirectedOut)),i}function i(e,t,r,o,i){t.computeIndex("structure");var a=new Set;return(0,s.overBunch)(i,function(i){if(!t.hasNode(i))throw new d.NotFoundGraphError("Graph."+e+': could not find the "'+i+'" node in the graph in the given bunch.');var u=t._nodes.get(i);"undirected"!==r&&("out"!==o&&n(a,u.in),"in"!==o&&n(a,u.out)),"directed"!==r&&("out"!==o&&n(a,u.undirectedIn),"in"!==o&&n(a,u.undirectedOut))}),a}function a(e,t,r){var n=r.type,a=r.direction,u=t?r.counter:r.name;e.prototype[u]=function(e){if(2===arguments.length){var r=arguments[0],h=arguments[1];if(t)throw new d.InvalidArgumentsGraphError("Graph."+u+": invalid arguments.");if(!this.hasNode(r))throw new d.NotFoundGraphError("Graph."+u+': could not find the "'+r+'" node in the graph.');if(!this.hasNode(h))throw new d.NotFoundGraphError("Graph."+u+': could not find the "'+h+'" node in the graph.');var c=o(this,n,a,r);return c.has(h)}if(1===arguments.length){if(this.hasNode(e)){var p=o(this,n,a,e);return t?p.size:(0,s.consumeIterator)(p.size,p.values())}if((0,s.isBunch)(e)){var f=i(u,this,n,a,e);return t?f.size:(0,s.consumeIterator)(f.size,f.values())}throw new d.NotFoundGraphError("Graph."+u+': could not find the "'+e+'" node in the graph.')}throw new d.InvalidArgumentsGraphError("Graph."+u+": invalid number of arguments (expecting 1 or 2 and got "+arguments.length+").")}}function u(e){h.forEach(function(t){a(e,!1,t),a(e,!0,t)})}Object.defineProperty(t,"__esModule",{value:!0}),t.attachNeighborIterationMethods=u;var d=r(1),s=r(0),h=[{name:"neighbors",counter:"countNeighbors",type:"mixed"},{name:"inNeighbors",counter:"countInNeighbors",type:"directed",direction:"in"},{name:"outNeighbors",counter:"countOutNeighbors",type:"directed",direction:"out"},{name:"inboundNeighbors",counter:"countInboundNeighbors",type:"mixed",direction:"in"},{name:"outboundNeighbors",counter:"countOutboundNeighbors",type:"mixed",direction:"out"},{name:"directedNeighbors",counter:"countDirectedNeighbors",type:"directed"},{name:"undirectedNeighbors",counter:"countUndirectedNeighbors",type:"undirected"}]},function(e,t,r){"use strict";function n(e,t){var r={key:e};return Object.keys(t.attributes).length&&(r.attributes=t.attributes),r}function o(e,t){var r={key:e,source:t.source,target:t.target};return Object.keys(t.attributes).length&&(r.attributes=t.attributes),t.undirected&&(r.undirected=!0),r}function i(e){return(0,u.isPlainObject)(e)?"key"in e?"attributes"in e&&(!(0,u.isPlainObject)(e.attributes)||null===e.attributes)?"invalid-attributes":null:"no-key":"not-object"}function a(e){return(0,u.isPlainObject)(e)?"source"in e?"target"in e?"attributes"in e&&(!(0,u.isPlainObject)(e.attributes)||null===e.attributes)?"invalid-attributes":"undirected"in e&&"boolean"!=typeof e.undirected?"invalid-undirected":null:"no-target":"no-source":"not-object"}Object.defineProperty(t,"__esModule",{value:!0}),t.serializeNode=n,t.serializeEdge=o,t.validateSerializedNode=i,t.validateSerializedEdge=a;var u=r(0)},function(e,t){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function n(e){return"function"==typeof e}function o(e){return"number"==typeof e}function i(e){return"object"==typeof e&&null!==e}function a(e){return void 0===e}e.exports=r,r.EventEmitter=r,r.prototype._events=void 0,r.prototype._maxListeners=void 0,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if(!o(e)||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,r,o,u,d,s;if(this._events||(this._events={}),"error"===e&&(!this._events.error||i(this._events.error)&&!this._events.error.length)){if(t=arguments[1],t instanceof Error)throw t;var h=new Error('Uncaught, unspecified "error" event. ('+t+")");throw h.context=t,h}if(r=this._events[e],a(r))return!1;if(n(r))switch(arguments.length){case 1:r.call(this);break;case 2:r.call(this,arguments[1]);break;case 3:r.call(this,arguments[1],arguments[2]);break;default:u=Array.prototype.slice.call(arguments,1),r.apply(this,u)}else if(i(r))for(u=Array.prototype.slice.call(arguments,1),s=r.slice(),o=s.length,d=0;d<o;d++)s[d].apply(this,u);return!0},r.prototype.addListener=function(e,t){var o;if(!n(t))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,n(t.listener)?t.listener:t),this._events[e]?i(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t,i(this._events[e])&&!this._events[e].warned&&(o=a(this._maxListeners)?r.defaultMaxListeners:this._maxListeners,o&&o>0&&this._events[e].length>o&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace())),this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){function r(){this.removeListener(e,r),o||(o=!0,t.apply(this,arguments))}if(!n(t))throw TypeError("listener must be a function");var o=!1;return r.listener=t,this.on(e,r),this},r.prototype.removeListener=function(e,t){var r,o,a,u;if(!n(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(r=this._events[e],a=r.length,o=-1,r===t||n(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(i(r)){for(u=a;u-- >0;)if(r[u]===t||r[u].listener&&r[u].listener===t){o=u;break}if(o<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(o,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[e],n(r))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){var t;return t=this._events&&this._events[e]?n(this._events[e])?[this._events[e]]:this._events[e].slice():[]},r.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(n(t))return 1;if(t)return t.length}return 0},r.listenerCount=function(e,t){return e.listenerCount(t)}},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function u(e){e.from=function(t,r){var n=new e(r);return n.import(t),n}}var d=r(0),s=r(2),h=n(s),c=r(1),p=function(e){function t(r){return o(this,t),i(this,e.call(this,(0,d.assign)({type:"directed"},r)))}return a(t,e),t}(h.default),f=function(e){function t(r){return o(this,t),i(this,e.call(this,(0,d.assign)({type:"undirected"},r)))}return a(t,e),t}(h.default),g=function(e){function t(r){return o(this,t),i(this,e.call(this,(0,d.assign)({multi:!0,type:"directed"},r)))}return a(t,e),t}(h.default),l=function(e){function t(r){return o(this,t),i(this,e.call(this,(0,d.assign)({multi:!0,type:"undirected"},r)))}return a(t,e),t}(h.default);u(h.default),u(p),u(f),u(g),u(l),h.default.Graph=h.default,h.default.DirectedGraph=p,h.default.UndirectedGraph=f,h.default.MultiDirectedGraph=g,h.default.MultiUndirectedGraph=l,h.default.InvalidArgumentsGraphError=c.InvalidArgumentsGraphError,h.default.NotFoundGraphError=c.NotFoundGraphError,h.default.UsageGraphError=c.UsageGraphError,e.exports=h.default}])});
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.graphology=t():e.graphology=t()}(this,function(){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.i=function(e){return e},t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=9)}([function(e,t,r){"use strict";function n(e){e=e||{};for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];for(var o=0,i=r.length;o<i;o++)if(r[o])for(var a in r[o])e[a]=r[o][a];return e}function o(){var e=new Map;return e.set=function(e,t){return e=""+e,Map.prototype.set.call(this,e,t)},e.get=function(e){return e=""+e,Map.prototype.get.call(this,e)},e.has=function(e){return e=""+e,Map.prototype.has.call(this,e)},e}function i(e,t){for(var r=new Array(e),n=0,o=void 0;o=t.next(),!o.done;)r[n++]=o.value;return r}function a(e,t,r,n){var o=e._nodes.get(t),i=null;return i="mixed"===n?o.out[r]||o.undirected[r]:"directed"===n?o.out[r]:o.undirected[r]}function s(e){return!!e&&"object"===("undefined"==typeof e?"undefined":b(e))&&(Array.isArray(e)||"function"==typeof Map&&e instanceof Map||"function"==typeof Set&&e instanceof Set||!(e instanceof Date)&&!(e instanceof RegExp))}function d(e){return!!e&&"object"===("undefined"==typeof e?"undefined":b(e))&&"function"==typeof e.addUndirectedEdgeWithKey&&"function"==typeof e.dropNode}function u(e){return!(!e||"object"!==("undefined"==typeof e?"undefined":b(e))||Array.isArray(e)||e instanceof Date||e instanceof RegExp||"function"==typeof Map&&e instanceof Map||"function"==typeof Set&&e instanceof Set)}function h(e,t){if(Array.isArray(e))for(var r=0,n=e.length;r<n;r++){var o=t(e[r],null)===!1;if(o)break}else if("function"==typeof e.forEach)for(var i=e.entries(),a=!1,s=void 0;s=i.next();){var d=s,u=d.value,h=d.done;if(h)break;var p=u[0],c=u[1];if(a=c===p?t(c,null)===!1:t(p,c)===!1)break}else for(var f in e){var g=e[f],l=t(f,g);if(l)break}}function p(e){for(var t=""+e,r="",n=0,o=t.length;n<o;n++){var i=o-n-1;r=t[i]+r,(n-2)%3||n===o-1||(r=","+r)}return r}function c(e,t,r){Object.defineProperty(e,t,{enumerable:!1,configurable:!1,writable:!0,value:r})}function f(e,t,r){var n={enumerable:!0,configurable:!1};"function"==typeof r?n.get=r:(n.value=r,n.writable=!1),Object.defineProperty(e,t,n)}function g(){for(var e,t=0;t<16;t++)0===(3&t)&&(e=4294967296*Math.random()),m[t]=e>>>((3&t)<<3)&255;return m}function l(){var e=g();return e[6]=15&e[6]|64,e[8]=63&e[8]|128,e}function v(e){for(var t=[0],r=0,n=e.length;r<n;r++){for(var o=e[r],i=0,a=t.length;i<a;i++)o+=t[i]<<8,t[i]=o%62,o=o/62|0;for(;o>0;)t.push(o%62),o=o/62|0}for(var s="",d=0,u=e.length;0===e[d]&&d<u-1;d++)s+=w[0];for(var h=t.length-1;h>=0;h--)s+=w[t[h]];for(;s.length<22;)s+="0";return s}function y(){var e=l();return v(e)}Object.defineProperty(t,"__esModule",{value:!0});var b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.assign=n,t.createInternalMap=o,t.consumeIterator=i,t.getMatchingEdge=a,t.isBunch=s,t.isGraph=d,t.isPlainObject=u,t.overBunch=h,t.prettyPrint=p,t.privateProperty=c,t.readOnlyProperty=f,t.uuid=y;var m=new Uint8Array(16),w="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=t.GraphError=function(e){function t(r,i){n(this,t);var a=o(this,e.call(this));return a.name="GraphError",a.message=r||"",a.data=i||{},a}return i(t,e),t}(Error);t.InvalidArgumentsGraphError=function(e){function t(r,i){n(this,t);var a=o(this,e.call(this,r,i));return a.name="InvalidArgumentsGraphError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(a,t.prototype.constructor),a}return i(t,e),t}(a),t.NotFoundGraphError=function(e){function t(r,i){n(this,t);var a=o(this,e.call(this,r,i));return a.name="NotFoundGraphError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(a,t.prototype.constructor),a}return i(t,e),t}(a),t.UsageGraphError=function(e){function t(r,i){n(this,t);var a=o(this,e.call(this,r,i));return a.name="UsageGraphError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(a,t.prototype.constructor),a}return i(t,e),t}(a)},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){if("structure"===t){var r=e._indices.structure;if(!r.computed)return e;for(var n=arguments.length,o=Array(n>2?n-2:0),i=2;i<n;i++)o[i-2]=arguments[i];var a=o[0],s=o[1];(0,c.updateStructureIndex)(e,a,s)}return e}function s(e,t,r,n){if("structure"===t){var o=e._indices.structure;if(!o.computed)return e;(0,c.clearEdgeFromStructureIndex)(e,r,n)}return e}function d(e,t,r,n,o,i,s,d,u){if(!o&&"undirected"===e.type)throw new p.UsageGraphError("Graph."+t+": you cannot add a directed edge to an undirected graph. Use the #.addEdge or #.addUndirectedEdge instead.");if(o&&"directed"===e.type)throw new p.UsageGraphError("Graph."+t+": you cannot add an undirected edge to a directed graph. Use the #.addEdge or #.addDirectedEdge instead.");if(u&&!(0,y.isPlainObject)(u))throw new p.InvalidArgumentsGraphError("Graph."+t+': invalid attributes. Expecting an object but got "'+u+'"');s=""+s,d=""+d;var h=!1,c=!1;if(!e.hasNode(s)){if(!r)throw new p.NotFoundGraphError("Graph."+t+': source node "'+s+'" not found.');h=!0}if(!e.hasNode(d)){if(!r)throw new p.NotFoundGraphError("Graph."+t+': target node "'+d+'" not found.');c=!0}if(!e.allowSelfLoops&&s===d)throw new p.UsageGraphError("Graph."+t+': source & target are the same ("'+s+"\"), thus creating a loop explicitly forbidden by this graph 'allowSelfLoops' option set to false.");n&&(i=e._options.edgeKeyGenerator({undirected:o,source:s,target:d,attributes:u||{}}));var f=null;if(e.hasEdge(i)){if(!r)throw new p.UsageGraphError("Graph."+t+': the "'+i+'" edge already exists in the graph.');f=i}if(!e.multi&&(o?e.hasUndirectedEdge(s,d):e.hasDirectedEdge(s,d))){if(!r)throw new p.UsageGraphError("Graph."+t+': an edge linking "'+s+'" to "'+d+"\" already exists. If you really want to add multiple edges linking those nodes, you should create a multi graph by using the 'multi' option.");f=(0,y.getMatchingEdge)(e,s,d,o?"undirected":"directed")}if(u=(0,y.assign)({},e._options.defaultEdgeAttributes,u),f){if(e.source(f)!==s||e.target(f)!==d)throw new p.UsageGraphError("Graph."+t+': inconsitency detected when attempting to merge the "'+i+'" edge with "'+s+'" source & "'+d+'" target vs. ('+e.source(f)+", "+e.target(f)+").");return e.mergeEdgeAttributes(f,u),f}h&&e.addNode(s),c&&e.addNode(d);var g={attributes:u,source:s,target:d};o&&(g.undirected=!0),n&&(g.generatedId=!0),e._edges.set(i,g);var l=e._nodes.get(s),v=e._nodes.get(d);return s===d?o?l.undirectedSelfLoops++:l.directedSelfLoops++:o?(l.undirectedDegree++,v.undirectedDegree++):(l.outDegree++,v.inDegree++),a(e,"structure",i,g),e.emit("edgeAdded",{key:i,source:s,target:d,attributes:u,undirected:o}),i}function u(e,t,r,n){var o=[];if(n){if(!(0,y.isBunch)(n))throw new p.InvalidArgumentsGraphError("Graph."+t+": invalid bunch.");(0,y.overBunch)(n,function(n){if(!e.hasEdge(n))throw new p.NotFoundGraphError("Graph."+t+': could not find the "'+n+'" edge from the bunch in the graph.');r&&!r(n)||o.push(n)})}else o="exportEdges"===t?e.edges():"exportDirectedEdges"===t?e.directedEdges():e.undirectedEdges();for(var i=new Array(o.length),a=0,s=o.length;a<s;a++)i[a]=e.exportEdge(o[a]);return i}Object.defineProperty(t,"__esModule",{value:!0});var h=r(8),p=r(1),c=r(4),f=r(3),g=r(5),l=r(6),v=r(7),y=r(0),b=new Set(["directed","undirected","mixed"]),m=new Set(["domain","_events","_eventsCount","_maxListeners"]),w=[{name:function(e){return e+"Edge"},generateKey:!0},{name:function(e){return e+"DirectedEdge"},generateKey:!0,type:"directed"},{name:function(e){return e+"UndirectedEdge"},generateKey:!0,type:"undirected"},{name:function(e){return e+"EdgeWithKey"}},{name:function(e){return e+"DirectedEdgeWithKey"},type:"directed"},{name:function(e){return e+"UndirectedEdgeWithKey"},type:"undirected"}],E={allowSelfLoops:!0,defaultEdgeAttributes:{},defaultNodeAttributes:{},edgeKeyGenerator:y.uuid,multi:!1,type:"mixed"},G=function(e){function t(r){n(this,t);var i=o(this,e.call(this));if(r=(0,y.assign)({},E,r),Object.freeze(r),"function"!=typeof r.edgeKeyGenerator)throw new p.InvalidArgumentsGraphError("Graph.constructor: invalid 'edgeKeyGenerator' option. Expecting a function but got \""+r.edgeKeyGenerator+'".');if("boolean"!=typeof r.multi)throw new p.InvalidArgumentsGraphError("Graph.constructor: invalid 'multi' option. Expecting a boolean but got \""+r.multi+'".');if(!b.has(r.type))throw new p.InvalidArgumentsGraphError('Graph.constructor: invalid \'type\' option. Should be one of "mixed", "directed" or "undirected" but got "'+r.type+'".');if("boolean"!=typeof r.allowSelfLoops)throw new p.InvalidArgumentsGraphError("Graph.constructor: invalid 'allowSelfLoops' option. Expecting a boolean but got \""+r.allowSelfLoops+'".');if(!(0,y.isPlainObject)(r.defaultEdgeAttributes))throw new p.InvalidArgumentsGraphError("Graph.constructor: invalid 'defaultEdgeAttributes' option. Expecting a plain object but got \""+r.defaultEdgeAttributes+'".');if(!(0,y.isPlainObject)(r.defaultNodeAttributes))throw new p.InvalidArgumentsGraphError("Graph.constructor: invalid 'defaultNodeAttributes' option. Expecting a plain object but got \""+r.defaultNodeAttributes+'".');(0,y.privateProperty)(i,"_attributes",{}),(0,y.privateProperty)(i,"_nodes",(0,y.createInternalMap)()),(0,y.privateProperty)(i,"_edges",(0,y.createInternalMap)()),(0,y.privateProperty)(i,"_indices",{structure:{lazy:r.indices&&r.indices.structure&&r.indices.structure.lazy||!1,computed:!1}}),(0,y.privateProperty)(i,"_options",r),m.forEach(function(e){return(0,y.privateProperty)(i,e,i[e])}),(0,y.readOnlyProperty)(i,"order",function(){return i._nodes.size}),(0,y.readOnlyProperty)(i,"size",function(){return i._edges.size}),(0,y.readOnlyProperty)(i,"multi",i._options.multi),(0,y.readOnlyProperty)(i,"type",i._options.type),(0,y.readOnlyProperty)(i,"allowSelfLoops",i._options.allowSelfLoops);for(var a in i._indices){var s=i._indices[a];s.lazy||(s.computed=!0)}return i}return i(t,e),t.prototype.hasNode=function(e){return this._nodes.has(e)},t.prototype.hasDirectedEdge=function(e,t){if("undirected"===this.type)return!1;if(1===arguments.length){var r=e;return this._edges.has(r)&&this.directed(r)}if(2===arguments.length){if(this.computeIndex("structure"),!this.hasNode(e)||!this.hasNode(t))return!1;var n=this._nodes.get(e),o=n.out;if(!o)return!1;var i=o[t];return!!i&&(this.multi?!!i.size:!!i)}throw new p.InvalidArgumentsGraphError("Graph.hasDirectedEdge: invalid arity ("+arguments.length+", instead of 1 or 2). You can either ask for an edge id or for the existence of an edge between a source & a target.")},t.prototype.hasUndirectedEdge=function(e,t){if("directed"===this.type)return!1;if(1===arguments.length){var r=e;return this._edges.has(r)&&this.undirected(r)}if(2===arguments.length){if(this.computeIndex("structure"),!this.hasNode(e)||!this.hasNode(t))return!1;var n=this._nodes.get(e),o=n.undirected,i=void 0;return o&&(i=o[t]),!!i&&(this.multi?!!i.size:!!i)}throw new p.InvalidArgumentsGraphError("Graph.hasDirectedEdge: invalid arity ("+arguments.length+", instead of 1 or 2). You can either ask for an edge id or for the existence of an edge between a source & a target.")},t.prototype.hasEdge=function(e,t){if(1===arguments.length){var r=e;return this._edges.has(r)}if(2===arguments.length)return this.hasDirectedEdge(e,t)||this.hasUndirectedEdge(e,t);throw new p.InvalidArgumentsGraphError("Graph.hasEdge: invalid arity ("+arguments.length+", instead of 1 or 2). You can either ask for an edge id or for the existence of an edge between a source & a target.")},t.prototype.inDegree=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("boolean"!=typeof t)throw new p.InvalidArgumentsGraphError('Graph.inDegree: Expecting a boolean but got "'+t+'" for the second parameter (allowing self-loops to be counted).');if(!this.hasNode(e))throw new p.NotFoundGraphError('Graph.inDegree: could not find the "'+e+'" node in the graph.');if("undirected"===this.type)return 0;var r=this._nodes.get(e),n=t?r.directedSelfLoops:0;return r.inDegree+n},t.prototype.outDegree=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("boolean"!=typeof t)throw new p.InvalidArgumentsGraphError('Graph.outDegree: Expecting a boolean but got "'+t+'" for the second parameter (allowing self-loops to be counted).');if(!this.hasNode(e))throw new p.NotFoundGraphError('Graph.outDegree: could not find the "'+e+'" node in the graph.');if("undirected"===this.type)return 0;var r=this._nodes.get(e),n=t?r.directedSelfLoops:0;return r.outDegree+n},t.prototype.directedDegree=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("boolean"!=typeof t)throw new p.InvalidArgumentsGraphError('Graph.directedDegree: Expecting a boolean but got "'+t+'" for the second parameter (allowing self-loops to be counted).');if(!this.hasNode(e))throw new p.NotFoundGraphError('Graph.directedDegree: could not find the "'+e+'" node in the graph.');return"undirected"===this.type?0:this.inDegree(e,t)+this.outDegree(e,t)},t.prototype.undirectedDegree=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("boolean"!=typeof t)throw new p.InvalidArgumentsGraphError('Graph.undirectedDegree: Expecting a boolean but got "'+t+'" for the second parameter (allowing self-loops to be counted).');if(!this.hasNode(e))throw new p.NotFoundGraphError('Graph.undirectedDegree: could not find the "'+e+'" node in the graph.');if("directed"===this.type)return 0;var r=this._nodes.get(e),n=t?2*r.undirectedSelfLoops:0;return r.undirectedDegree+n},t.prototype.degree=function e(t){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("boolean"!=typeof r)throw new p.InvalidArgumentsGraphError('Graph.degree: Expecting a boolean but got "'+r+'" for the second parameter (allowing self-loops to be counted).');if(!this.hasNode(t))throw new p.NotFoundGraphError('Graph.degree: could not find the "'+t+'" node in the graph.');var e=0;return"undirected"!==this.type&&(e+=this.directedDegree(t,r)),"directed"!==this.type&&(e+=this.undirectedDegree(t,r)),e},t.prototype.source=function(e){if(!this.hasEdge(e))throw new p.NotFoundGraphError('Graph.source: could not find the "'+e+'" edge in the graph.');return this._edges.get(e).source},t.prototype.target=function(e){if(!this.hasEdge(e))throw new p.NotFoundGraphError('Graph.target: could not find the "'+e+'" edge in the graph.');return this._edges.get(e).target},t.prototype.extremities=function(e){var t=this._edges.get(e);if(!t)throw new p.NotFoundGraphError('Graph.extremities: could not find the "'+e+'" edge in the graph.');return[t.source,t.target]},t.prototype.opposite=function(e,t){if(!this.hasNode(e))throw new p.NotFoundGraphError('Graph.opposite: could not find the "'+e+'" node in the graph.');if(!this.hasEdge(t))throw new p.NotFoundGraphError('Graph.opposite: could not find the "'+t+'" edge in the graph.');var r=this.extremities(t),n=r[0],o=r[1];if(e!==n&&e!==o)throw new p.NotFoundGraphError('Graph.opposite: the "'+e+'" node is not attached to the "'+t+'" edge ('+n+", "+o+").");return e===n?o:n},t.prototype.undirected=function(e){if(!this.hasEdge(e))throw new p.NotFoundGraphError('Graph.undirected: could not find the "'+e+'" edge in the graph.');return!!this._edges.get(e).undirected},t.prototype.directed=function(e){if(!this.hasEdge(e))throw new p.NotFoundGraphError('Graph.directed: could not find the "'+e+'" edge in the graph.');return!this._edges.get(e).undirected},t.prototype.selfLoop=function(e){if(!this.hasEdge(e))throw new p.NotFoundGraphError('Graph.selfLoop: could not find the "'+e+'" edge in the graph.');var t=this._edges.get(e);return t.source===t.target},t.prototype.addNode=function(e,t){if(t&&!(0,y.isPlainObject)(t))throw new p.InvalidArgumentsGraphError('Graph.addNode: invalid attributes. Expecting an object but got "'+t+'"');if(t=(0,y.assign)({},this._options.defaultNodeAttributes,t),this.hasNode(e))throw new p.UsageGraphError('Graph.addNode: the "'+e+'" node already exist in the graph.');var r={attributes:t};return this.allowSelfLoops&&("undirected"!==this.type&&(r.directedSelfLoops=0),"directed"!==this.type&&(r.undirectedSelfLoops=0)),"undirected"!==this.type&&(r.inDegree=0,r.outDegree=0),"directed"!==this.type&&(r.undirectedDegree=0),this._nodes.set(e,r),this.emit("nodeAdded",{key:e,attributes:t}),e},t.prototype.mergeNode=function(e,t){return this.hasNode(e)?(t&&this.mergeNodeAttributes(e,t),e):this.addNode(e,t)},t.prototype.addNodesFrom=function(e){var t=this;if(!(0,y.isBunch)(e))throw new p.InvalidArgumentsGraphError('Graph.addNodesFrom: invalid bunch provided ("'+e+'").');return(0,y.overBunch)(e,function(e,r){t.addNode(e,r)}),this},t.prototype.dropNode=function(e){if(!this.hasNode(e))throw new p.NotFoundGraphError('Graph.dropNode: could not find the "'+e+'" node in the graph.');for(var t=this.edges(e),r=0,n=t.length;r<n;r++)this.dropEdge(t[r]);var o=this._nodes.get(e);this._nodes.delete(e),this.emit("nodeDropped",{key:e,attributes:o.attributes})},t.prototype.dropEdge=function(e){if(arguments.length>1){var t=arguments[0],r=arguments[1];if(!this.hasNode(t))throw new p.NotFoundGraphError('Graph.dropEdge: could not find the "'+t+'" source node in the graph.');if(!this.hasNode(r))throw new p.NotFoundGraphError('Graph.dropEdge: could not find the "'+r+'" target node in the graph.');if(!this.hasEdge(t,r))throw new p.NotFoundGraphError('Graph.dropEdge: could not find the "'+t+'" -> "'+r+'" edge in the graph.');e=(0,y.getMatchingEdge)(this,t,r,this.type)}else if(!this.hasEdge(e))throw new p.NotFoundGraphError('Graph.dropEdge: could not find the "'+e+'" edge in the graph.');var n=this._edges.get(e);this._edges.delete(e);var o=n.source,i=n.target,a=n.attributes,d=n.undirected,u=void 0!==d&&d,h=this._nodes.get(o),c=this._nodes.get(i);return o===i?h.selfLoops--:u?(h.undirectedDegree--,c.undirectedDegree--):(h.outDegree--,c.inDegree--),s(this,"structure",e,n),this.emit("edgeDropped",{key:e,attributes:a,source:o,target:i,undirected:u}),this},t.prototype.dropNodes=function(e){var t=this;if(!arguments.length)return this.clear();if(!(0,y.isBunch)(e))throw new p.InvalidArgumentsGraphError("Graph.dropNodes: invalid bunch.");return(0,y.overBunch)(e,function(e){t.dropNode(e)}),this},t.prototype.dropEdges=function(e){var t=this;if(!arguments.length){this._edges=(0,y.createInternalMap)(),this.clearIndex("structure");var r=this._indices.structure;return r.lazy||(r.computed=!0),this}if(2===arguments.length){var n=arguments[0],o=arguments[1];e=this.edges(n,o)}if(!(0,y.isBunch)(e))throw new p.InvalidArgumentsGraphError("Graph.dropEdges: invalid bunch.");return(0,y.overBunch)(e,function(e){t.dropEdge(e)}),this},t.prototype.clear=function(){this._edges=(0,y.createInternalMap)(),this._nodes=(0,y.createInternalMap)();for(var e in this._indices){var t=this._indices[e];t.lazy&&(t.computed=!1)}this.emit("cleared")},t.prototype.getAttribute=function(e){return this._attributes[e]},t.prototype.getAttributes=function(){return this._attributes},t.prototype.hasAttribute=function(e){return this._attributes.hasOwnProperty(e)},t.prototype.setAttribute=function(e,t){return this._attributes[e]=t,this.emit("attributesUpdated",{type:"set",meta:{name:e,value:t}}),this},t.prototype.updateAttribute=function(e,t){if("function"!=typeof t)throw new p.InvalidArgumentsGraphError("Graph.updateAttribute: updater should be a function.");return this._attributes[e]=t(this._attributes[e]),this.emit("attributesUpdated",{type:"set",meta:{name:e,value:this._attributes[e]}}),this},t.prototype.removeAttribute=function(e){return delete this._attributes[e],this.emit("attributesUpdated",{type:"remove",meta:{name:e}}),this},t.prototype.replaceAttributes=function(e){if(!(0,y.isPlainObject)(e))throw new p.InvalidArgumentsGraphError("Graph.replaceAttributes: provided attributes are not a plain object.");var t=this._attributes;return this._attributes=e,this.emit("attributesUpdated",{type:"replace",meta:{before:t,after:e}}),this},t.prototype.mergeAttributes=function(e){if(!(0,y.isPlainObject)(e))throw new p.InvalidArgumentsGraphError("Graph.mergeAttributes: provided attributes are not a plain object.");return this._attributes=(0,y.assign)(this._attributes,e),this.emit("attributesUpdated",{type:"merge",meta:{data:this._attributes}}),this},t.prototype.getNodeAttribute=function(e,t){if(!this.hasNode(e))throw new p.NotFoundGraphError('Graph.getNodeAttribute: could not find the "'+e+'" node in the graph.');return this._nodes.get(e).attributes[t]},t.prototype.getNodeAttributes=function(e){if(!this.hasNode(e))throw new p.NotFoundGraphError('Graph.getNodeAttributes: could not find the "'+e+'" node in the graph.');return this._nodes.get(e).attributes},t.prototype.hasNodeAttribute=function(e,t){if(!this.hasNode(e))throw new p.NotFoundGraphError('Graph.hasNodeAttribute: could not find the "'+e+'" node in the graph.');return this._nodes.get(e).attributes.hasOwnProperty(t)},t.prototype.setNodeAttribute=function(e,t,r){if(!this.hasNode(e))throw new p.NotFoundGraphError('Graph.setNodeAttribute: could not find the "'+e+'" node in the graph.');if(arguments.length<3)throw new p.InvalidArgumentsGraphError("Graph.setNodeAttribute: not enough arguments. Either you forgot to pass the attribute's name or value, or you meant to use #.replaceNodeAttributes / #.mergeNodeAttributes instead.");return this._nodes.get(e).attributes[t]=r,this.emit("nodeAttributesUpdated",{key:e,type:"set",meta:{name:t,value:r}}),this},t.prototype.updateNodeAttribute=function(e,t,r){if(!this.hasNode(e))throw new p.NotFoundGraphError('Graph.updateNodeAttribute: could not find the "'+e+'" node in the graph.');if(arguments.length<3)throw new p.InvalidArgumentsGraphError("Graph.updateNodeAttribute: not enough arguments. Either you forgot to pass the attribute's name or updater, or you meant to use #.replaceNodeAttributes / #.mergeNodeAttributes instead.");if("function"!=typeof r)throw new p.InvalidArgumentsGraphError("Graph.updateAttribute: updater should be a function.");var n=this._nodes.get(e).attributes;return n[t]=r(n[t]),this.emit("nodeAttributesUpdated",{key:e,type:"set",meta:{name:t,value:n[t]}}),this},t.prototype.removeNodeAttribute=function(e,t){if(!this.hasNode(e))throw new p.NotFoundGraphError('Graph.hasNodeAttribute: could not find the "'+e+'" node in the graph.');return delete this._nodes.get(e).attributes[t],this.emit("nodeAttributesUpdated",{key:e,type:"remove",meta:{name:t}}),this},t.prototype.replaceNodeAttributes=function(e,t){if(!this.hasNode(e))throw new p.NotFoundGraphError('Graph.replaceNodeAttributes: could not find the "'+e+'" node in the graph.');if(!(0,y.isPlainObject)(t))throw new p.InvalidArgumentsGraphError("Graph.replaceNodeAttributes: provided attributes are not a plain object.");var r=this._nodes.get(e),n=r.attributes;return r.attributes=t,this.emit("nodeAttributesUpdated",{key:e,type:"replace",meta:{before:n,after:t}}),this},t.prototype.mergeNodeAttributes=function(e,t){if(!this.hasNode(e))throw new p.NotFoundGraphError('Graph.mergeNodeAttributes: could not find the "'+e+'" node in the graph.');if(!(0,y.isPlainObject)(t))throw new p.InvalidArgumentsGraphError("Graph.mergeNodeAttributes: provided attributes are not a plain object.");var r=this._nodes.get(e);return(0,y.assign)(r.attributes,t),this.emit("nodeAttributesUpdated",{key:e,type:"merge",meta:{data:t}}),this},t.prototype.nodes=function(){return(0,y.consumeIterator)(this._nodes.size,this._nodes.keys())},t.prototype.exportNode=function(e){if(!this.hasNode(e))throw new p.NotFoundGraphError('Graph.exportNode: could not find the "'+e+'" node in the graph.');var t=this._nodes.get(e);return(0,v.serializeNode)(e,t)},t.prototype.exportEdge=function(e){if(!this.hasEdge(e))throw new p.NotFoundGraphError('Graph.exportEdge: could not find the "'+e+'" edge in the graph.');var t=this._edges.get(e);return(0,v.serializeEdge)(e,t)},t.prototype.exportNodes=function(e){var t=this,r=[];if(arguments.length){if(!(0,y.isBunch)(e))throw new p.InvalidArgumentsGraphError("Graph.exportNodes: invalid bunch.");(0,y.overBunch)(e,function(e){if(!t.hasNode(e))throw new p.NotFoundGraphError('Graph.exportNodes: could not find the "'+e+'" node from the bunch in the graph.');r.push(e)})}else r=this.nodes();for(var n=new Array(r.length),o=0,i=r.length;o<i;o++)n[o]=this.exportNode(r[o]);return n},t.prototype.exportEdges=function(e){return u(this,"exportEdges",null,e)},t.prototype.exportDirectedEdges=function(e){var t=this;return u(this,"exportDirectedEdges",function(e){return t.directed(e)},e)},t.prototype.exportUndirectedEdges=function(e){var t=this;return u(this,"exportUndirectedEdges",function(e){return t.undirected(e)},e)},t.prototype.export=function(){return{attributes:this.getAttributes(),nodes:this.exportNodes(),edges:this.exportEdges()}},t.prototype.importNode=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=(0,v.validateSerializedNode)(e);if(r){if("not-object"===r)throw new p.InvalidArgumentsGraphError('Graph.importNode: invalid serialized node. A serialized node should be a plain object with at least a "key" property.');if("no-key"===r)throw new p.InvalidArgumentsGraphError("Graph.importNode: no key provided.");if("invalid-attributes"===r)throw new p.InvalidArgumentsGraphError("Graph.importNode: invalid attributes. Attributes should be a plain object, null or omitted.")}var n=e.key,o=e.attributes,i=void 0===o?{}:o;return t?this.mergeNode(n,i):this.addNode(n,i),this},t.prototype.importEdge=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=(0,v.validateSerializedEdge)(e);if(r){if("not-object"===r)throw new p.InvalidArgumentsGraphError('Graph.importEdge: invalid serialized edge. A serialized edge should be a plain object with at least a "source" & "target" property.');if("no-source"===r)throw new p.InvalidArgumentsGraphError("Graph.importEdge: missing souce.");if("no-target"===r)throw new p.InvalidArgumentsGraphError("Graph.importEdge: missing target");if("invalid-attributes"===r)throw new p.InvalidArgumentsGraphError("Graph.importEdge: invalid attributes. Attributes should be a plain object, null or omitted.");if("invalid-undirected"===r)throw new p.InvalidArgumentsGraphError("Graph.importEdge: invalid undirected. Undirected should be boolean or omitted.")}var n=e.source,o=e.target,i=e.attributes,a=void 0===i?{}:i,s=e.undirected,d=void 0!==s&&s,u=void 0;return"key"in e?(u=t?d?this.mergeUndirectedEdgeWithKey:this.mergeDirectedEdgeWithKey:d?this.addUndirectedEdgeWithKey:this.addDirectedEdgeWithKey,u.call(this,e.key,n,o,a)):(u=t?d?this.mergeUndirectedEdge:this.mergeDirectedEdge:d?this.addUndirectedEdge:this.addDirectedEdge,u.call(this,n,o,a)),this},t.prototype.importNodes=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!Array.isArray(e))throw new p.InvalidArgumentsGraphError("Graph.importNodes: invalid argument. Expecting an array.");for(var r=0,n=e.length;r<n;r++)this.importNode(e[r],t);return this},t.prototype.importEdges=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!Array.isArray(e))throw new p.InvalidArgumentsGraphError("Graph.importEdges: invalid argument. Expecting an array.");for(var r=0,n=e.length;r<n;r++)this.importEdge(e[r],t);return this},t.prototype.import=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if((0,y.isGraph)(e))return this.import(e.export(),t),this;if(!(0,y.isPlainObject)(e))throw new p.InvalidArgumentsGraphError("Graph.import: invalid argument. Expecting a serialized graph or, alternatively, a Graph instance.");if(e.attributes){if(!(0,y.isPlainObject)(e.attributes))throw new p.InvalidArgumentsGraphError("Graph.import: invalid attributes. Expecting a plain object.");t?this.mergeAttributes(e.attributes):this.replaceAttributes(e.attributes)}return e.nodes&&this.importNodes(e.nodes,t),e.edges&&this.importEdges(e.edges,t),this},t.prototype.emptyCopy=function(){return new t(this._options)},t.prototype.copy=function(){var e=new t(this._options);return e.import(this),e},t.prototype.computeIndex=function(e){var t=this;if(!c.INDICES.has(e))throw new p.InvalidArgumentsGraphError('Graph.computeIndex: unknown "'+e+'" index.');if("structure"===e){var r=this._indices.structure;if(r.computed)return this;r.computed=!0,this._edges.forEach(function(r,n){return a(t,e,n,r)})}return this},t.prototype.clearIndex=function(e){if(!c.INDICES.has(e))throw new p.InvalidArgumentsGraphError('Graph.clearIndex: unknown "'+e+'" index.');if("structure"===e){var t=this._indices.structure;if(!t.computed)return this;(0,c.clearStructureIndex)(this),t.computed=!1}return this},t.prototype.toJSON=function(){return this.export()},t.prototype.toString=function(){var e=this.order>1||0===this.order,t=this.size>1||0===this.size;return"Graph<"+(0,y.prettyPrint)(this.order)+" node"+(e?"s":"")+", "+(0,y.prettyPrint)(this.size)+" edge"+(t?"s":"")+">"},t.prototype.inspect=function(){var e={};this._nodes.forEach(function(t,r){e[r]=t.attributes});var t={};this._edges.forEach(function(e,r){var n=e.undirected?"<->":"->",o="";e.generatedId||(o+="["+r+"]: "),o+="("+e.source+")"+n+"("+e.target+")",t[o]=e.attributes});var r={};for(var n in this)this.hasOwnProperty(n)&&!m.has(n)&&"function"!=typeof this[n]&&(r[n]=this[n]);return r.attributes=this._attributes,r.nodes=e,r.edges=t,(0,y.privateProperty)(r,"constructor",this.constructor),r},t}(h.EventEmitter);t.default=G,w.forEach(function(e){["add","merge"].forEach(function(t){var r=e.name(t);e.generateKey?G.prototype[r]=function(n,o,i){return d(this,r,"merge"===t,e.generateKey,"undirected"===(e.type||this.type),null,n,o,i)}:G.prototype[r]=function(n,o,i,a){return d(this,r,"merge"===t,e.generateKey,"undirected"===(e.type||this.type),n,o,i,a)}})}),(0,f.attachAttributesMethods)(G),(0,g.attachEdgeIterationMethods)(G),(0,l.attachNeighborIterationMethods)(G)},function(e,t,r){"use strict";function n(e,t,r,n){e.prototype[t]=function(e,o){if(arguments.length>2){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");var i=e,a=o;if(o=arguments[2],!this[r](i,a))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+i+'" - "'+a+'").');
e=(0,c.getMatchingEdge)(this,i,a,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');var s=this._edges.get(e);return s.attributes[o]}}function o(e,t,r,n){e.prototype[t]=function(e){if(arguments.length>1){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");var o=e,i=arguments[1];if(!this[r](o,i))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+o+'" - "'+i+'").');e=(0,c.getMatchingEdge)(this,o,i,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');var a=this._edges.get(e);return a.attributes}}function i(e,t,r,n){e.prototype[t]=function(e,o){if(arguments.length>2){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");var i=e,a=o;if(o=arguments[2],!this[r](i,a))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+i+'" - "'+a+'").');e=(0,c.getMatchingEdge)(this,i,a,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');var s=this._edges.get(e);return s.attributes.hasOwnProperty(o)}}function a(e,t,r,n){e.prototype[t]=function(e,o,i){if(arguments.length>3){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");var a=e,s=o;if(o=arguments[2],i=arguments[3],!this[r](a,s))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+a+'" - "'+s+'").');e=(0,c.getMatchingEdge)(this,a,s,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');var d=this._edges.get(e);return d.attributes[o]=i,this.emit("edgeAttributesUpdated",{key:e,type:"set",meta:{name:o,value:i}}),this}}function s(e,t,r,n){e.prototype[t]=function(e,o,i){if(arguments.length>3){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");var a=e,s=o;if(o=arguments[2],i=arguments[3],!this[r](a,s))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+a+'" - "'+s+'").');e=(0,c.getMatchingEdge)(this,a,s,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');if("function"!=typeof i)throw new f.InvalidArgumentsGraphError("Graph."+t+": updater should be a function.");var d=this._edges.get(e);return d.attributes[o]=i(d.attributes[o]),this.emit("edgeAttributesUpdated",{key:e,type:"set",meta:{name:o,value:d.attributes[o]}}),this}}function d(e,t,r,n){e.prototype[t]=function(e,o){if(arguments.length>2){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");var i=e,a=o;if(o=arguments[2],!this[r](i,a))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+i+'" - "'+a+'").');e=(0,c.getMatchingEdge)(this,i,a,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');var s=this._edges.get(e);return delete s.attributes[o],this.emit("edgeAttributesUpdated",{key:e,type:"remove",meta:{name:o}}),this}}function u(e,t,r,n){e.prototype[t]=function(e,o){if(arguments.length>2){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");var i=e,a=o;if(o=arguments[2],!this[r](i,a))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+i+'" - "'+a+'").');e=(0,c.getMatchingEdge)(this,i,a,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');if(!(0,c.isPlainObject)(o))throw new f.InvalidArgumentsGraphError("Graph."+t+": provided attributes are not a plain object.");var s=this._edges.get(e),d=s.attributes;return s.attributes=o,this.emit("edgeAttributesUpdated",{key:e,type:"replace",meta:{before:d,after:o}}),this}}function h(e,t,r,n){e.prototype[t]=function(e,o){if(arguments.length>2){if(this.multi)throw new f.UsageGraphError("Graph."+t+": cannot use a {source,target} combo when asking about an edge's attributes in a MultiGraph since we cannot infer the one you want information about.");var i=e,a=o;if(o=arguments[2],!this[r](i,a))throw new f.NotFoundGraphError("Graph."+t+': could not find an edge for the given path ("'+i+'" - "'+a+'").');e=(0,c.getMatchingEdge)(this,i,a,n)}if(!this[r](e))throw new f.NotFoundGraphError("Graph."+t+': could not find the "'+e+'" edge in the graph.');if(!(0,c.isPlainObject)(o))throw new f.InvalidArgumentsGraphError("Graph."+t+": provided attributes are not a plain object.");var s=this._edges.get(e);return(0,c.assign)(s.attributes,o),this.emit("edgeAttributesUpdated",{key:e,type:"merge",meta:{data:o}}),this}}function p(e){g.forEach(function(t){var r=t.name,n=t.attacher;n(e,r("Edge"),"hasEdge","mixed"),n(e,r("DirectedEdge"),"hasDirectedEdge","directed"),n(e,r("UndirectedEdge"),"hasUndirectedEdge","undirected")})}Object.defineProperty(t,"__esModule",{value:!0}),t.attachAttributesMethods=p;var c=r(0),f=r(1),g=[{name:function(e){return"get"+e+"Attribute"},attacher:n},{name:function(e){return"get"+e+"Attributes"},attacher:o},{name:function(e){return"has"+e+"Attribute"},attacher:i},{name:function(e){return"set"+e+"Attribute"},attacher:a},{name:function(e){return"update"+e+"Attribute"},attacher:s},{name:function(e){return"remove"+e+"Attribute"},attacher:d},{name:function(e){return"replace"+e+"Attributes"},attacher:u},{name:function(e){return"merge"+e+"Attributes"},attacher:h}]},function(e,t,r){"use strict";function n(e,t,r){var n=e.multi,o=r.undirected,i=r.source,a=r.target,s=e._nodes.get(i),d=e._nodes.get(a),u=o?"undirected":"out";if(s[u]=s[u]||Object.create(null),a in s[u]||(s[u][a]=n?new Set:t),n&&s[u][a].add(t),i!==a){var h=o?"undirected":"in";d[h]=d[h]||Object.create(null),i in d[h]||(d[h][i]=s[u][a])}}function o(e,t,r){var n=e.multi,o=r.source,i=r.target,a=r.undirected,s=e._nodes.get(o),d=a?"undirected":"out",u=s[d];if(i in u&&(n?u[i].delete(t):delete u[i]),!n){var h=e._nodes.get(i),p=a?"undirected":"in",c=h[p];delete c[o]}}function i(e){e._nodes.forEach(function(e){delete e.in,delete e.out,delete e.undirected})}Object.defineProperty(t,"__esModule",{value:!0}),t.updateStructureIndex=n,t.clearEdgeFromStructureIndex=o,t.clearStructureIndex=i;t.INDICES=new Set(["structure"])},function(e,t,r){"use strict";function n(e,t,r){var n=arguments.length>2;if(t&&(!n||r in t)){if(n)return void(t[r]instanceof Set?e.push.apply(e,(0,h.consumeIterator)(t[r].size,t[r].values())):e.push(t[r]));for(var o in t)t[o]instanceof Set?e.push.apply(e,(0,h.consumeIterator)(t[o].size,t[o].values())):e.push(t[o])}}function o(e,t){if("mixed"===t)return(0,h.consumeIterator)(e._edges.size,e._edges.keys());var r=[];return e._edges.forEach(function(e,n){!!e.undirected==("undirected"===t)&&r.push(n)}),r}function i(e,t,r,o){e.computeIndex("structure");var i=[],a=e._nodes.get(o);return"undirected"!==t&&("out"!==r&&n(i,a.in),"in"!==r&&n(i,a.out)),"directed"!==t&&n(i,a.undirected),i}function a(e,t,r,o){e.computeIndex("structure");var i=[],a=e._nodes.get(r);return"undirected"!==t&&(n(i,a.in,o),n(i,a.out,o)),"directed"!==t&&n(i,a.undirected,o),i}function s(e,t){var r=t.name,n=t.type,s=t.direction;e.prototype[r]=function(e,t){if("mixed"!==n&&"mixed"!==this.type&&n!==this.type)return[];if(!arguments.length)return o(this,n);if(1===arguments.length){if(!this.hasNode(e))throw new u.NotFoundGraphError("Graph."+r+': could not find the "'+e+'" node in the graph.');return i(this,n,s,e)}if(2===arguments.length){if(!this.hasNode(e))throw new u.NotFoundGraphError("Graph."+r+': could not find the "'+e+'" source node in the graph.');if(!this.hasNode(t))throw new u.NotFoundGraphError("Graph."+r+': could not find the "'+t+'" target node in the graph.');var d=void 0;return d="undirected"!==n?this.hasDirectedEdge(e,t):this.hasUndirectedEdge(e,t),d?a(this,n,e,t):[]}throw new u.InvalidArgumentsGraphError("Graph."+r+": too many arguments (expecting 0, 1 or 2 and got "+arguments.length+").")}}function d(e){p.forEach(function(t){s(e,t)})}Object.defineProperty(t,"__esModule",{value:!0}),t.attachEdgeIterationMethods=d;var u=r(1),h=r(0),p=[{name:"edges",type:"mixed"},{name:"inEdges",type:"directed",direction:"in"},{name:"outEdges",type:"directed",direction:"out"},{name:"directedEdges",type:"directed"},{name:"undirectedEdges",type:"undirected"}]},function(e,t,r){"use strict";function n(e,t){if(t)for(var r in t)e.add(r)}function o(e,t,r,o){e.computeIndex("structure");var i=new Set,a=e._nodes.get(o);return"undirected"!==t&&("out"!==r&&n(i,a.in),"in"!==r&&n(i,a.out)),"directed"!==t&&n(i,a.undirected),i}function i(e,t){var r=t.name,n=t.type,i=t.direction;e.prototype[r]=function(e){if("mixed"!==n&&"mixed"!==this.type&&n!==this.type)return[];if(2===arguments.length){var t=arguments[0],a=arguments[1];if(!this.hasNode(t))throw new s.NotFoundGraphError("Graph."+r+': could not find the "'+t+'" node in the graph.');if(!this.hasNode(a))throw new s.NotFoundGraphError("Graph."+r+': could not find the "'+a+'" node in the graph.');var u=o(this,n,i,t);return u.has(a)}if(1===arguments.length){if(!this.hasNode(e))throw new s.NotFoundGraphError("Graph."+r+': could not find the "'+e+'" node in the graph.');var h=o(this,n,i,e);return(0,d.consumeIterator)(h.size,h.values())}throw new s.InvalidArgumentsGraphError("Graph."+r+": invalid number of arguments (expecting 1 or 2 and got "+arguments.length+").")}}function a(e){u.forEach(function(t){i(e,t)})}Object.defineProperty(t,"__esModule",{value:!0}),t.attachNeighborIterationMethods=a;var s=r(1),d=r(0),u=[{name:"neighbors",type:"mixed"},{name:"inNeighbors",type:"directed",direction:"in"},{name:"outNeighbors",type:"directed",direction:"out"},{name:"directedNeighbors",type:"directed"},{name:"undirectedNeighbors",type:"undirected"}]},function(e,t,r){"use strict";function n(e,t){var r={key:e};return Object.keys(t.attributes).length&&(r.attributes=t.attributes),r}function o(e,t){var r={key:e,source:t.source,target:t.target};return Object.keys(t.attributes).length&&(r.attributes=t.attributes),t.undirected&&(r.undirected=!0),r}function i(e){return(0,s.isPlainObject)(e)?"key"in e?"attributes"in e&&(!(0,s.isPlainObject)(e.attributes)||null===e.attributes)?"invalid-attributes":null:"no-key":"not-object"}function a(e){return(0,s.isPlainObject)(e)?"source"in e?"target"in e?"attributes"in e&&(!(0,s.isPlainObject)(e.attributes)||null===e.attributes)?"invalid-attributes":"undirected"in e&&"boolean"!=typeof e.undirected?"invalid-undirected":null:"no-target":"no-source":"not-object"}Object.defineProperty(t,"__esModule",{value:!0}),t.serializeNode=n,t.serializeEdge=o,t.validateSerializedNode=i,t.validateSerializedEdge=a;var s=r(0)},function(e,t){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function n(e){return"function"==typeof e}function o(e){return"number"==typeof e}function i(e){return"object"==typeof e&&null!==e}function a(e){return void 0===e}e.exports=r,r.EventEmitter=r,r.prototype._events=void 0,r.prototype._maxListeners=void 0,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if(!o(e)||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,r,o,s,d,u;if(this._events||(this._events={}),"error"===e&&(!this._events.error||i(this._events.error)&&!this._events.error.length)){if(t=arguments[1],t instanceof Error)throw t;var h=new Error('Uncaught, unspecified "error" event. ('+t+")");throw h.context=t,h}if(r=this._events[e],a(r))return!1;if(n(r))switch(arguments.length){case 1:r.call(this);break;case 2:r.call(this,arguments[1]);break;case 3:r.call(this,arguments[1],arguments[2]);break;default:s=Array.prototype.slice.call(arguments,1),r.apply(this,s)}else if(i(r))for(s=Array.prototype.slice.call(arguments,1),u=r.slice(),o=u.length,d=0;d<o;d++)u[d].apply(this,s);return!0},r.prototype.addListener=function(e,t){var o;if(!n(t))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,n(t.listener)?t.listener:t),this._events[e]?i(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t,i(this._events[e])&&!this._events[e].warned&&(o=a(this._maxListeners)?r.defaultMaxListeners:this._maxListeners,o&&o>0&&this._events[e].length>o&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace())),this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){function r(){this.removeListener(e,r),o||(o=!0,t.apply(this,arguments))}if(!n(t))throw TypeError("listener must be a function");var o=!1;return r.listener=t,this.on(e,r),this},r.prototype.removeListener=function(e,t){var r,o,a,s;if(!n(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(r=this._events[e],a=r.length,o=-1,r===t||n(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(i(r)){for(s=a;s-- >0;)if(r[s]===t||r[s].listener&&r[s].listener===t){o=s;break}if(o<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(o,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[e],n(r))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){var t;return t=this._events&&this._events[e]?n(this._events[e])?[this._events[e]]:this._events[e].slice():[]},r.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(n(t))return 1;if(t)return t.length}return 0},r.listenerCount=function(e,t){return e.listenerCount(t)}},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e){e.from=function(t,r){var n=new e(r);return n.import(t),n}}var d=r(0),u=r(2),h=n(u),p=r(1),c=function(e){function t(r){return o(this,t),i(this,e.call(this,(0,d.assign)({type:"directed"},r)))}return a(t,e),t}(h.default),f=function(e){function t(r){return o(this,t),i(this,e.call(this,(0,d.assign)({type:"undirected"},r)))}return a(t,e),t}(h.default),g=function(e){function t(r){return o(this,t),i(this,e.call(this,(0,d.assign)({multi:!0,type:"directed"},r)))}return a(t,e),t}(h.default),l=function(e){function t(r){return o(this,t),i(this,e.call(this,(0,d.assign)({multi:!0,type:"undirected"},r)))}return a(t,e),t}(h.default);s(h.default),s(c),s(f),s(g),s(l),h.default.Graph=h.default,h.default.DirectedGraph=c,h.default.UndirectedGraph=f,h.default.MultiDirectedGraph=g,h.default.MultiUndirectedGraph=l,h.default.InvalidArgumentsGraphError=p.InvalidArgumentsGraphError,h.default.NotFoundGraphError=p.NotFoundGraphError,h.default.UsageGraphError=p.UsageGraphError,e.exports=h.default}])});
# Changelog
## 0.6.0
* Dropping `inbound` & `outbound` iteration methods.
* Dropping useless counting iteration methods.
* Dropping bunch consuming polymorphisms from iteration methods.
* Refactoring internal indices for undirected graphs.
* Improving performance.
## 0.5.4

@@ -4,0 +12,0 @@

@@ -437,2 +437,6 @@ 'use strict';

Graph.prototype.hasDirectedEdge = function hasDirectedEdge(source, target) {
// Early termination
if (this.type === 'undirected') return false;
if (arguments.length === 1) {

@@ -483,2 +487,6 @@ var edge = source;

Graph.prototype.hasUndirectedEdge = function hasUndirectedEdge(source, target) {
// Early termination
if (this.type === 'directed') return false;
if (arguments.length === 1) {

@@ -499,11 +507,8 @@ var edge = source;

var register = nodeData.undirectedOut,
edges = void 0;
var register = nodeData.undirected;
var edges = void 0;
if (register) edges = register[target];
register = nodeData.undirectedIn;
if (!edges && register) edges = register[target];
if (!edges) return false;

@@ -722,5 +727,7 @@

Graph.prototype.extremities = function extremities(edge) {
if (!this.hasEdge(edge)) throw new _errors.NotFoundGraphError('Graph.extremities: could not find the "' + edge + '" edge in the graph.');
var edgeData = this._edges.get(edge);
return [this._edges.get(edge).source, this._edges.get(edge).target];
if (!edgeData) throw new _errors.NotFoundGraphError('Graph.extremities: could not find the "' + edge + '" edge in the graph.');
return [edgeData.source, edgeData.target];
};

@@ -727,0 +734,0 @@

@@ -43,3 +43,3 @@ 'use strict';

var outKey = undirected ? 'undirectedOut' : 'out';
var outKey = undirected ? 'undirected' : 'out';

@@ -58,3 +58,3 @@ // Handling source

// care of with source above)
var inKey = undirected ? 'undirectedIn' : 'in';
var inKey = undirected ? 'undirected' : 'in';

@@ -84,3 +84,3 @@ targetData[inKey] = targetData[inKey] || Object.create(null);

var sourceData = graph._nodes.get(source),
outKey = undirected ? 'undirectedOut' : 'out',
outKey = undirected ? 'undirected' : 'out',
sourceIndex = sourceData[outKey];

@@ -97,3 +97,3 @@

var targetData = graph._nodes.get(target),
inKey = undirected ? 'undirectedIn' : 'in',
inKey = undirected ? 'undirected' : 'in',
targetIndex = targetData[inKey];

@@ -115,5 +115,4 @@

delete data.out;
delete data.undirectedIn;
delete data.undirectedOut;
delete data.undirected;
});
}

@@ -24,7 +24,5 @@ 'use strict';

name: 'edges',
counter: 'countEdges',
type: 'mixed'
}, {
name: 'inEdges',
counter: 'countInEdges',
type: 'directed',

@@ -34,22 +32,9 @@ direction: 'in'

name: 'outEdges',
counter: 'countOutEdges',
type: 'directed',
direction: 'out'
}, {
name: 'inboundEdges',
counter: 'countInboundEdges',
type: 'mixed',
direction: 'in'
}, {
name: 'outboundEdges',
counter: 'countOutboundEdges',
type: 'mixed',
direction: 'out'
}, {
name: 'directedEdges',
counter: 'countDirectedEdges',
type: 'directed'
}, {
name: 'undirectedEdges',
counter: 'countUndirectedEdges',
type: 'undirected'

@@ -85,69 +70,2 @@ }];

/**
* Function counting edges from the given object.
*
* @param {object|undefined} object - Target object.
* @param {mixed} [key] - Optional key.
* @return {number} - The number of found edges.
*/
function count(object, key) {
var nb = 0;
var hasKey = arguments.length > 1;
if (!object || hasKey && !(key in object)) return nb;
if (hasKey) return object[key] instanceof Set ? object[key].size : +!!object[key];
for (var k in object) {
nb += object[k] instanceof Set ? object[k].size : +!!object[k];
}return nb;
}
/**
* Function merging edges found in an object into the given set.
*
* @param {Set} edges - Current set of edges.
* @param {object|undefined} map - Target object.
* @param {string} key - Sub key.
*/
function merge(edges, object, key) {
if (!object) return;
if (key) {
var target = object[key];
if (target) {
if (target instanceof Set) target.forEach(function (value) {
return edges.add(value);
});else edges.add(target);
}
} else {
for (var k in object) {
if (object[k] instanceof Set) object[k].forEach(function (value) {
return edges.add(value);
});else edges.add(object[k]);
}
}
}
/**
* Function used to count the edges of the given type.
*
* @param {Graph} graph - Target Graph instance.
* @param {string} type - Type of edges to retrieve.
* @return {number}
*/
function countEdges(graph, type) {
if (type === 'mixed') return graph.size;
var nb = 0;
graph._edges.forEach(function (data) {
if (!!data.undirected === (type === 'undirected')) nb++;
});
return nb;
}
/**
* Function creating an array of edge for the given type.

@@ -173,35 +91,2 @@ *

/**
* Function counting the number of edges for the given type & the given node.
*
* @param {Graph} graph - Target Graph instance.
* @param {string} type - Type of edges to retrieve.
* @param {string} direction - In or out?
* @param {any} node - Target node.
* @return {number}
*/
function countEdgesForNode(graph, type, direction, node) {
// For this, we need to compute the "structure" index
graph.computeIndex('structure');
var nb = 0;
var nodeData = graph._nodes.get(node);
if (type !== 'undirected') {
if (direction !== 'out') nb += count(nodeData.in);
if (direction !== 'in') nb += count(nodeData.out);
}
if (type !== 'directed') {
if (direction !== 'out') nb += count(nodeData.undirectedIn);
if (direction !== 'in') nb += count(nodeData.undirectedOut);
}
return nb;
}
/**
* Function creating an array of edge for the given type & the given node.

@@ -231,5 +116,3 @@ *

if (type !== 'directed') {
if (direction !== 'out') collect(edges, nodeData.undirectedIn);
if (direction !== 'in') collect(edges, nodeData.undirectedOut);
collect(edges, nodeData.undirected);
}

@@ -241,71 +124,2 @@

/**
* Function creating an array of edge for the given bunch of nodes.
*
* @param {Graph} graph - Target Graph instance.
* @param {string} type - Type of edges to retrieve.
* @param {string} direction - In or out?
* @param {bunch} bunch - Target bunch.
* @return {array} - Array of edges.
*/
function createEdgeArrayForBunch(name, graph, type, direction, bunch) {
// For this, we need to compute the "structure" index
graph.computeIndex('structure');
var edges = new Set();
// Iterating over the bunch
(0, _utils.overBunch)(bunch, function (node) {
if (!graph.hasNode(node)) throw new _errors.NotFoundGraphError('Graph.' + name + ': could not find the "' + node + '" node in the graph in the given bunch.');
var nodeData = graph._nodes.get(node);
if (type !== 'undirected') {
if (direction !== 'out') merge(edges, nodeData.in);
if (direction !== 'in') merge(edges, nodeData.out);
}
if (type !== 'directed') {
if (direction !== 'out') merge(edges, nodeData.undirectedIn);
if (direction !== 'in') merge(edges, nodeData.undirectedOut);
}
});
return (0, _utils.consumeIterator)(edges.size, edges.values());
}
/**
* Function counting the number of edges for the given path.
*
* @param {Graph} graph - Target Graph instance.
* @param {string} type - Type of edges to retrieve.
* @param {any} source - Source node.
* @param {any} target - Target node.
* @return {array} - Array of edges.
*/
function countEdgesForPath(graph, type, source, target) {
// For this, we need to compute the "structure" index
graph.computeIndex('structure');
var nb = 0;
var sourceData = graph._nodes.get(source);
if (type !== 'undirected') {
nb += count(sourceData.in, target);
nb += count(sourceData.out, target);
}
if (type !== 'directed') {
nb += count(sourceData.undirectedIn, target);
nb += count(sourceData.undirectedOut, target);
}
return nb;
}
/**
* Function creating an array of edge for the given path.

@@ -334,4 +148,3 @@ *

if (type !== 'directed') {
collect(edges, sourceData.undirectedIn, target);
collect(edges, sourceData.undirectedOut, target);
collect(edges, sourceData.undirected, target);
}

@@ -346,12 +159,9 @@

* @param {function} Class - Target class.
* @param {boolean} counter - Should we count or collect?
* @param {object} description - Method description.
*/
function attachEdgeArrayCreator(Class, counter, description) {
var type = description.type,
function attachEdgeArrayCreator(Class, description) {
var name = description.name,
type = description.type,
direction = description.direction;
var name = counter ? description.counter : description.name;
/**

@@ -376,36 +186,19 @@ * Function returning an array or the count of certain edges.

*/
Class.prototype[name] = function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
if (!args.length) return counter ? countEdges(this, type) : createEdgeArray(this, type);
Class.prototype[name] = function (source, target) {
if (args.length === 1) {
var nodeOrBunch = args[0];
// Early termination
if (type !== 'mixed' && this.type !== 'mixed' && type !== this.type) return [];
if (this.hasNode(nodeOrBunch)) {
if (!arguments.length) return createEdgeArray(this, type);
// Iterating over a node's edges
return counter ? countEdgesForNode(this, type, direction, nodeOrBunch) : createEdgeArrayForNode(this, type, direction, nodeOrBunch);
} else if ((0, _utils.isBunch)(nodeOrBunch)) {
if (arguments.length === 1) {
// Iterating over the union of a node's edges
if (!this.hasNode(source)) throw new _errors.NotFoundGraphError('Graph.' + name + ': could not find the "' + source + '" node in the graph.');
// Note: since we need to keep track of the traversed values
// to perform union, we can't optimize further and we have to
// create this intermediary array and return its length when counting.
var edges = createEdgeArrayForBunch(name, this, type, direction, nodeOrBunch);
return counter ? edges.length : edges;
} else {
throw new _errors.NotFoundGraphError('Graph.' + name + ': could not find the "' + nodeOrBunch + '" node in the graph.');
}
// Iterating over a node's edges
return createEdgeArrayForNode(this, type, direction, source);
}
if (args.length === 2) {
var source = args[0],
target = args[1];
if (arguments.length === 2) {
if (!this.hasNode(source)) throw new _errors.NotFoundGraphError('Graph.' + name + ': could not find the "' + source + '" source node in the graph.');

@@ -421,8 +214,8 @@

// If no such edge exist, we'll stop right there.
if (!hasEdge) return counter ? 0 : [];
if (!hasEdge) return [];
return counter ? countEdgesForPath(this, type, source, target) : createEdgeArrayForPath(this, type, source, target);
return createEdgeArrayForPath(this, type, source, target);
}
throw new _errors.InvalidArgumentsGraphError('Graph.' + name + ': too many arguments (expecting 0, 1 or 2 and got ' + args.length + ').');
throw new _errors.InvalidArgumentsGraphError('Graph.' + name + ': too many arguments (expecting 0, 1 or 2 and got ' + arguments.length + ').');
};

@@ -438,5 +231,4 @@ }

EDGES_ITERATION.forEach(function (description) {
attachEdgeArrayCreator(Graph, false, description);
attachEdgeArrayCreator(Graph, true, description);
attachEdgeArrayCreator(Graph, description);
});
}

@@ -24,7 +24,5 @@ 'use strict';

name: 'neighbors',
counter: 'countNeighbors',
type: 'mixed'
}, {
name: 'inNeighbors',
counter: 'countInNeighbors',
type: 'directed',

@@ -34,22 +32,9 @@ direction: 'in'

name: 'outNeighbors',
counter: 'countOutNeighbors',
type: 'directed',
direction: 'out'
}, {
name: 'inboundNeighbors',
counter: 'countInboundNeighbors',
type: 'mixed',
direction: 'in'
}, {
name: 'outboundNeighbors',
counter: 'countOutboundNeighbors',
type: 'mixed',
direction: 'out'
}, {
name: 'directedNeighbors',
counter: 'countDirectedNeighbors',
type: 'directed'
}, {
name: 'undirectedNeighbors',
counter: 'countUndirectedNeighbors',
type: 'undirected'

@@ -101,9 +86,3 @@ }];

if (type !== 'directed') {
if (direction !== 'out') {
merge(neighbors, nodeData.undirectedIn);
}
if (direction !== 'in') {
merge(neighbors, nodeData.undirectedOut);
}
merge(neighbors, nodeData.undirected);
}

@@ -115,61 +94,12 @@

/**
* Function creating a set of relevant neighbors for the given bunch of nodes.
*
* @param {string} name - Name of the calling method.
* @param {Graph} graph - Target graph.
* @param {string} type - Type of neighbors.
* @param {string} direction - Direction.
* @param {bunch} bunch - Target bunch.
* @return {Set|BasicSet} - The neighbors set.
*/
function createNeighborSetForBunch(name, graph, type, direction, bunch) {
// For this, we need to compute the "structure" index
graph.computeIndex('structure');
var neighbors = new Set();
(0, _utils.overBunch)(bunch, function (node) {
if (!graph.hasNode(node)) throw new _errors.NotFoundGraphError('Graph.' + name + ': could not find the "' + node + '" node in the graph in the given bunch.');
var nodeData = graph._nodes.get(node);
if (type !== 'undirected') {
if (direction !== 'out') {
merge(neighbors, nodeData.in);
}
if (direction !== 'in') {
merge(neighbors, nodeData.out);
}
}
if (type !== 'directed') {
if (direction !== 'out') {
merge(neighbors, nodeData.undirectedIn);
}
if (direction !== 'in') {
merge(neighbors, nodeData.undirectedOut);
}
}
});
return neighbors;
}
/**
* Function attaching a neighbors array creator method to the Graph prototype.
*
* @param {function} Class - Target class.
* @param {boolean} counter - Should we count or collect?
* @param {object} description - Method description.
*/
function attachNeighborArrayCreator(Class, counter, description) {
var type = description.type,
function attachNeighborArrayCreator(Class, description) {
var name = description.name,
type = description.type,
direction = description.direction;
var name = counter ? description.counter : description.name;
/**

@@ -192,4 +122,8 @@ * Function returning an array or the count of certain neighbors.

*/
Class.prototype[name] = function (nodeOrBunch) {
Class.prototype[name] = function (node) {
// Early termination
if (type !== 'mixed' && this.type !== 'mixed' && type !== this.type) return [];
if (arguments.length === 2) {

@@ -199,4 +133,2 @@ var node1 = arguments[0],

if (counter) throw new _errors.InvalidArgumentsGraphError('Graph.' + name + ': invalid arguments.');
if (!this.hasNode(node1)) throw new _errors.NotFoundGraphError('Graph.' + name + ': could not find the "' + node1 + '" node in the graph.');

@@ -207,3 +139,2 @@

// Here, we want to assess whether the two given nodes are neighbors
// NOTE: we could improve performance here
var neighbors = createNeighborSetForNode(this, type, direction, node1);

@@ -214,26 +145,8 @@

if (this.hasNode(nodeOrBunch)) {
if (!this.hasNode(node)) throw new _errors.NotFoundGraphError('Graph.' + name + ': could not find the "' + node + '" node in the graph.');
// Here, we want to iterate over a node's relevant neighbors
var _neighbors = createNeighborSetForNode(this, type, direction, nodeOrBunch);
// Here, we want to iterate over a node's relevant neighbors
var _neighbors = createNeighborSetForNode(this, type, direction, node);
if (counter) return _neighbors.size;
return (0, _utils.consumeIterator)(_neighbors.size, _neighbors.values());
} else if ((0, _utils.isBunch)(nodeOrBunch)) {
// Here, we want to iterate over the union of a bunch of nodes'
// relevant neighbors
// Note: since we need to keep track of the traversed values
// to perform union, we can't optimize further and we have to
// create this intermediary array and return its length when counting.
var _neighbors2 = createNeighborSetForBunch(name, this, type, direction, nodeOrBunch);
if (counter) return _neighbors2.size;
return (0, _utils.consumeIterator)(_neighbors2.size, _neighbors2.values());
} else {
throw new _errors.NotFoundGraphError('Graph.' + name + ': could not find the "' + nodeOrBunch + '" node in the graph.');
}
return (0, _utils.consumeIterator)(_neighbors.size, _neighbors.values());
}

@@ -252,5 +165,4 @@

NEIGHBORS_ITERATION.forEach(function (description) {
attachNeighborArrayCreator(Graph, false, description);
attachNeighborArrayCreator(Graph, true, description);
attachNeighborArrayCreator(Graph, description);
});
}

@@ -109,13 +109,15 @@ 'use strict';

function getMatchingEdge(graph, source, target, type) {
if (type === 'mixed') return getMatchingEdge(graph, source, target, 'directed') || getMatchingEdge(graph, source, target, 'undirected');
var sourceData = graph._nodes.get(source);
var register = type === 'directed' ? sourceData.out : sourceData.undirectedOut;
var edge = null;
if (!register || !register[target] && type === 'undirected') register = sourceData.undirectedIn;
if (type === 'mixed') {
edge = sourceData.out[target] || sourceData.undirected[target];
} else if (type === 'directed') {
edge = sourceData.out[target];
} else {
edge = sourceData.undirected[target];
}
if (!register || !register[target]) return null;
return register[target];
return edge;
}

@@ -122,0 +124,0 @@

{
"name": "graphology",
"version": "0.5.4",
"version": "0.6.0",
"description": "A robust and multipurpose Graph object for JavaScript.",

@@ -5,0 +5,0 @@ "main": "dist/index.js",

@@ -24,3 +24,3 @@ 'use strict';

var METHODS = ['edges', 'inEdges', 'outEdges', 'inboundEdges', 'outboundEdges', 'directedEdges', 'undirectedEdges'];
var METHODS = ['edges', 'inEdges', 'outEdges', 'directedEdges', 'undirectedEdges'];

@@ -74,6 +74,2 @@ function edgesIteration(Graph, checkers) {

},
bunch: {
keys: ['Thomas', 'John'],
edges: ['J->T', 'C->J']
},
path: {

@@ -91,6 +87,2 @@ source: 'John',

},
bunch: {
keys: ['John', 'Catherine'],
edges: ['J->T', 'J->M', 'C->J']
},
path: {

@@ -102,34 +94,2 @@ source: 'John',

},
inboundEdges: {
all: ALL_EDGES,
node: {
key: 'John',
edges: ['C->J', 'M<->J']
},
bunch: {
keys: ['Thomas', 'John'],
edges: ['J->T', 'C->J', 'M<->J']
},
path: {
source: 'John',
target: 'Martha',
edges: ['J->M', 'M<->J']
}
},
outboundEdges: {
all: ALL_EDGES,
node: {
key: 'John',
edges: ['J->T', 'J->M', 'J<->R']
},
bunch: {
keys: ['John', 'Martha'],
edges: ['J->T', 'J->M', 'J<->R', 'M<->R', 'M<->J']
},
path: {
source: 'John',
target: 'Martha',
edges: ['J->M', 'M<->J']
}
},
directedEdges: {

@@ -141,6 +101,2 @@ all: ALL_DIRECTED_EDGES,

},
bunch: {
keys: ['John', 'Catherine'],
edges: ['C->J', 'J->T', 'J->M']
},
path: {

@@ -158,6 +114,2 @@ source: 'John',

},
bunch: {
keys: ['John', 'Martha'],
edges: ['M<->R', 'M<->J', 'J<->R', 'T<->M']
},
path: {

@@ -171,28 +123,2 @@ source: 'John',

// const graphWithSelfLoops = new Graph({multi: true});
// graphWithSelfLoops.addNodesFrom(['John', 'Tabitha', 'Marcia', 'Alone']);
// graphWithSelfLoops.addEdgeWithKey('J->T', 'John', 'Tabitha');
// graphWithSelfLoops.addEdgeWithKey('J1', 'John', 'John');
// graphWithSelfLoops.addEdgeWithKey('J2', 'John', 'John');
// graphWithSelfLoops.addEdgeWithKey('T1', 'Tabitha', 'Tabitha');
// graphWithSelfLoops.addEdgeWithKey('M1', 'Marcia', 'Marcia');
// const SELF_LOOPS_TEST_DATA = {
// selfLoops: {
// all: ['J1', 'J2', 'T1', 'M1'],
// node: {
// key: 'John',
// loops: ['J1', 'J2']
// },
// bunch: {
// keys: ['John', 'Tabitha'],
// edges: [
// 'J1',
// 'J2',
// 'T1'
// ]
// }
// }
// };
function commonTests(name) {

@@ -212,8 +138,2 @@ return _defineProperty({}, '#.' + name, {

'it should throw if any of the provided bunch node is not found.': function itShouldThrowIfAnyOfTheProvidedBunchNodeIsNotFound() {
_assert2.default.throws(function () {
graph[name](['Test']);
}, notFound());
},
'it should throw if either source or target is not found.': function itShouldThrowIfEitherSourceOrTargetIsNotFound() {

@@ -232,7 +152,3 @@ _assert2.default.throws(function () {

function specificTests(name, data) {
var _ref2;
var counterName = 'count' + (0, _helpers.capitalize)(name);
return _ref2 = {}, _defineProperty(_ref2, '#.' + name, {
return _defineProperty({}, '#.' + name, {
'it should return all the relevant edges.': function itShouldReturnAllTheRelevantEdges() {

@@ -251,11 +167,2 @@ var edges = graph[name]();

'it should return a bunch of nodes\' relevant edges.': function itShouldReturnABunchOfNodesRelevantEdges() {
(0, _helpers.testBunches)(data.bunch.keys, function (bunch) {
var edges = graph[name](bunch);
(0, _assert2.default)((0, _helpers.sameMembers)(edges, data.bunch.edges));
_assert2.default.deepEqual(graph[name](['Forever', 'Alone']), []);
});
},
'it should return all the relevant edges between source & target.': function itShouldReturnAllTheRelevantEdgesBetweenSourceTarget() {

@@ -267,35 +174,7 @@ var edges = graph[name](data.path.source, data.path.target);

}
}), _defineProperty(_ref2, '#.' + counterName, {
'it should count all the relevant edges.': function itShouldCountAllTheRelevantEdges() {
var nb = graph[counterName]();
_assert2.default.strictEqual(nb, data.all.length);
},
'it should count all the relevant edges of a node.': function itShouldCountAllTheRelevantEdgesOfANode() {
var nb = graph[counterName](data.node.key);
_assert2.default.strictEqual(nb, data.node.edges.length);
_assert2.default.deepEqual(graph[counterName]('Alone'), 0);
},
'it should count a bunch of nodes\' relevant edges.': function itShouldCountABunchOfNodesRelevantEdges() {
(0, _helpers.testBunches)(data.bunch.keys, function (bunch) {
_assert2.default.strictEqual(graph[counterName](bunch), data.bunch.edges.length);
_assert2.default.deepEqual(graph[counterName](['Forever', 'Alone']), 0);
});
},
'it should count all the relevant edges between source & target.': function itShouldCountAllTheRelevantEdgesBetweenSourceTarget() {
var nb = graph[counterName](data.path.source, data.path.target);
_assert2.default.strictEqual(nb, data.path.edges.length);
_assert2.default.deepEqual(graph[counterName]('Forever', 'Alone'), 0);
}
}), _ref2;
});
}
var tests = {
'Various cases': {
'Miscellaneous': {
'simple graph indices should work.': function simpleGraphIndicesShouldWork() {

@@ -317,5 +196,2 @@ var simpleGraph = new Graph();

});
METHODS.forEach(function (name) {
return (0, _helpers.deepMerge)(tests, commonTests('count' + (0, _helpers.capitalize)(name)));
});

@@ -322,0 +198,0 @@ // Specific tests

@@ -24,3 +24,3 @@ 'use strict';

var METHODS = ['neighbors', 'inNeighbors', 'outNeighbors', 'inboundNeighbors', 'outboundNeighbors', 'directedNeighbors', 'undirectedNeighbors'];
var METHODS = ['neighbors', 'inNeighbors', 'outNeighbors', 'directedNeighbors', 'undirectedNeighbors'];

@@ -67,16 +67,2 @@ function neighborsIteration(Graph, checkers) {

},
inboundNeighbors: {
are: [['John', 'Martha', true], ['John', 'Roger', false], ['Martha', 'Catherine', false]],
node: {
key: 'John',
neighbors: ['Catherine', 'Martha']
}
},
outboundNeighbors: {
are: [['John', 'Martha', true], ['John', 'Roger', true], ['Martha', 'Catherine', false]],
node: {
key: 'John',
neighbors: ['Thomas', 'Martha', 'Roger']
}
},
directedNeighbors: {

@@ -126,8 +112,2 @@ are: [['John', 'Martha', true], ['John', 'Roger', false], ['Martha', 'Catherine', false]],

}, notFound());
},
'it should throw if any of the provided bunch node is not found.': function itShouldThrowIfAnyOfTheProvidedBunchNodeIsNotFound() {
_assert2.default.throws(function () {
graph[name](['Test']);
}, notFound());
}

@@ -138,7 +118,3 @@ });

function specificTests(name, data) {
var _ref3;
var counterName = 'count' + (0, _helpers.capitalize)(name);
return _ref3 = {}, _defineProperty(_ref3, '#.' + name, {
return _defineProperty({}, '#.' + name, {
'it should correctly return whether two nodes are neighbors.': function itShouldCorrectlyReturnWhetherTwoNodesAreNeighbors() {

@@ -160,29 +136,4 @@ data.are.forEach(function (_ref2) {

_assert2.default.deepEqual(graph[name]('Alone'), []);
},
'it should return the correct neighbors array from the provided bunch.': function itShouldReturnTheCorrectNeighborsArrayFromTheProvidedBunch() {
(0, _helpers.testBunches)([data.node.key], function (bunch) {
var neighbors = graph[name](bunch);
_assert2.default.deepEqual(neighbors, data.node.neighbors);
});
(0, _helpers.testBunches)(['Forever', 'Alone'], function (bunch) {
_assert2.default.deepEqual(graph[name](bunch), []);
});
}
}), _defineProperty(_ref3, '#.' + counterName, {
'it should return the correct neighbors count.': function itShouldReturnTheCorrectNeighborsCount() {
var neighbors = graph[counterName](data.node.key);
_assert2.default.strictEqual(neighbors, data.node.neighbors.length);
_assert2.default.strictEqual(graph[counterName]('Alone'), 0);
},
'it should return the correct number of neighbors from the provided bunch.': function itShouldReturnTheCorrectNumberOfNeighborsFromTheProvidedBunch() {
(0, _helpers.testBunches)([data.node.key], function (bunch) {
_assert2.default.strictEqual(graph[counterName](bunch), data.node.neighbors.length);
});
}
}), _ref3;
});
}

@@ -196,5 +147,2 @@

});
METHODS.forEach(function (name) {
return (0, _helpers.deepMerge)(tests, commonTests('count' + (0, _helpers.capitalize)(name)));
});

@@ -201,0 +149,0 @@ // Specific tests

@@ -502,3 +502,3 @@ 'use strict';

_assert2.default.strictEqual(graph.size, 2);
_assert2.default.strictEqual(graph.countEdges('Lindsay', 'Martha'), 2);
_assert2.default.strictEqual(graph.edges('Lindsay', 'Martha').length, 2);

@@ -509,3 +509,3 @@ graph.dropEdges('Lindsay', 'Martha');

_assert2.default.strictEqual(graph.size, 0);
_assert2.default.strictEqual(graph.countEdges('Lindsay', 'Martha'), 0);
_assert2.default.strictEqual(graph.edges('Lindsay', 'Martha').length, 0);
}

@@ -512,0 +512,0 @@ },

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc