{"version":3,"file":"graphology.umd.js","sources":["../src/utils.js","../../../node_modules/events/events.js","../../../node_modules/obliterator/iterator.js","../../../node_modules/obliterator/support.js","../../../node_modules/obliterator/iter.js","../../../node_modules/obliterator/take.js","../src/errors.js","../src/data.js","../src/attributes/nodes.js","../src/attributes/edges.js","../../../node_modules/obliterator/chain.js","../src/iteration/edges.js","../src/iteration/neighbors.js","../src/iteration/adjacency.js","../src/serialization.js","../src/graph.js","../src/classes.js","../src/endpoint.cjs.js"],"sourcesContent":["/**\n * Graphology Utilities\n * =====================\n *\n * Collection of helpful functions used by the implementation.\n */\n\n/**\n * Object.assign-like polyfill.\n *\n * @param {object} target - First object.\n * @param {object} [...objects] - Objects to merge.\n * @return {object}\n */\nfunction assignPolyfill() {\n const target = arguments[0];\n\n for (let i = 1, l = arguments.length; i < l; i++) {\n if (!arguments[i]) continue;\n\n for (const k in arguments[i]) target[k] = arguments[i][k];\n }\n\n return target;\n}\n\nlet assign = assignPolyfill;\n\nif (typeof Object.assign === 'function') assign = Object.assign;\n\nexport {assign};\n\n/**\n * Function returning the first matching edge for given path.\n * Note: this function does not check the existence of source & target. This\n * must be performed by the caller.\n *\n * @param {Graph} graph - Target graph.\n * @param {any} source - Source node.\n * @param {any} target - Target node.\n * @param {string} type - Type of the edge (mixed, directed or undirected).\n * @return {string|null}\n */\nexport function getMatchingEdge(graph, source, target, type) {\n const sourceData = graph._nodes.get(source);\n\n let edge = null;\n\n if (!sourceData) return edge;\n\n if (type === 'mixed') {\n edge =\n (sourceData.out && sourceData.out[target]) ||\n (sourceData.undirected && sourceData.undirected[target]);\n } else if (type === 'directed') {\n edge = sourceData.out && sourceData.out[target];\n } else {\n edge = sourceData.undirected && sourceData.undirected[target];\n }\n\n return edge;\n}\n\n/**\n * Checks whether the given value is a plain object.\n *\n * @param {mixed} value - Target value.\n * @return {boolean}\n */\nexport function isPlainObject(value) {\n // NOTE: as per https://github.com/graphology/graphology/issues/149\n // this function has been loosened not to reject object instances\n // coming from other JavaScript contexts. It has also been chosen\n // not to improve it to avoid obvious false positives and avoid\n // taking a performance hit. People should really use TypeScript\n // if they want to avoid feeding subtly irrelvant attribute objects.\n return typeof value === 'object' && value !== null;\n}\n\n/**\n * Checks whether the given object is empty.\n *\n * @param {object} o - Target Object.\n * @return {boolean}\n */\nexport function isEmpty(o) {\n let k;\n\n for (k in o) return false;\n\n return true;\n}\n\n/**\n * Creates a \"private\" property for the given member name by concealing it\n * using the `enumerable` option.\n *\n * @param {object} target - Target object.\n * @param {string} name - Member name.\n */\nexport function privateProperty(target, name, value) {\n Object.defineProperty(target, name, {\n enumerable: false,\n configurable: false,\n writable: true,\n value\n });\n}\n\n/**\n * Creates a read-only property for the given member name & the given getter.\n *\n * @param {object} target - Target object.\n * @param {string} name - Member name.\n * @param {mixed} value - The attached getter or fixed value.\n */\nexport function readOnlyProperty(target, name, value) {\n const descriptor = {\n enumerable: true,\n configurable: true\n };\n\n if (typeof value === 'function') {\n descriptor.get = value;\n } else {\n descriptor.value = value;\n descriptor.writable = false;\n }\n\n Object.defineProperty(target, name, descriptor);\n}\n\n/**\n * Returns whether the given object constitute valid hints.\n *\n * @param {object} hints - Target object.\n */\nexport function validateHints(hints) {\n if (!isPlainObject(hints)) return false;\n\n if (hints.attributes && !Array.isArray(hints.attributes)) return false;\n\n return true;\n}\n\n/**\n * Creates a function generating incremental ids for edges.\n *\n * @return {function}\n */\nexport function incrementalIdStartingFromRandomByte() {\n let i = Math.floor(Math.random() * 256) & 0xff;\n\n return () => {\n return i++;\n };\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","/**\n * Obliterator Iterator Class\n * ===========================\n *\n * Simple class representing the library's iterators.\n */\n\n/**\n * Iterator class.\n *\n * @constructor\n * @param {function} next - Next function.\n */\nfunction Iterator(next) {\n if (typeof next !== 'function')\n throw new Error('obliterator/iterator: expecting a function!');\n\n this.next = next;\n}\n\n/**\n * If symbols are supported, we add `next` to `Symbol.iterator`.\n */\nif (typeof Symbol !== 'undefined')\n Iterator.prototype[Symbol.iterator] = function () {\n return this;\n };\n\n/**\n * Returning an iterator of the given values.\n *\n * @param {any...} values - Values.\n * @return {Iterator}\n */\nIterator.of = function () {\n var args = arguments,\n l = args.length,\n i = 0;\n\n return new Iterator(function () {\n if (i >= l) return {done: true};\n\n return {done: false, value: args[i++]};\n });\n};\n\n/**\n * Returning an empty iterator.\n *\n * @return {Iterator}\n */\nIterator.empty = function () {\n var iterator = new Iterator(function () {\n return {done: true};\n });\n\n return iterator;\n};\n\n/**\n * Returning an iterator over the given indexed sequence.\n *\n * @param {string|Array} sequence - Target sequence.\n * @return {Iterator}\n */\nIterator.fromSequence = function (sequence) {\n var i = 0,\n l = sequence.length;\n\n return new Iterator(function () {\n if (i >= l) return {done: true};\n\n return {done: false, value: sequence[i++]};\n });\n};\n\n/**\n * Returning whether the given value is an iterator.\n *\n * @param {any} value - Value.\n * @return {boolean}\n */\nIterator.is = function (value) {\n if (value instanceof Iterator) return true;\n\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof value.next === 'function'\n );\n};\n\n/**\n * Exporting.\n */\nmodule.exports = Iterator;\n","exports.ARRAY_BUFFER_SUPPORT = typeof ArrayBuffer !== 'undefined';\nexports.SYMBOL_SUPPORT = typeof Symbol !== 'undefined';\n","/**\n * Obliterator Iter Function\n * ==========================\n *\n * Function coercing values to an iterator. It can be quite useful when needing\n * to handle iterables and iterators the same way.\n */\nvar Iterator = require('./iterator.js');\nvar support = require('./support.js');\n\nvar ARRAY_BUFFER_SUPPORT = support.ARRAY_BUFFER_SUPPORT;\nvar SYMBOL_SUPPORT = support.SYMBOL_SUPPORT;\n\nfunction iterOrNull(target) {\n // Indexed sequence\n if (\n typeof target === 'string' ||\n Array.isArray(target) ||\n (ARRAY_BUFFER_SUPPORT && ArrayBuffer.isView(target))\n )\n return Iterator.fromSequence(target);\n\n // Invalid value\n if (typeof target !== 'object' || target === null) return null;\n\n // Iterable\n if (SYMBOL_SUPPORT && typeof target[Symbol.iterator] === 'function')\n return target[Symbol.iterator]();\n\n // Iterator duck-typing\n if (typeof target.next === 'function') return target;\n\n // Invalid object\n return null;\n}\n\nmodule.exports = function iter(target) {\n var iterator = iterOrNull(target);\n\n if (!iterator)\n throw new Error(\n 'obliterator: target is not iterable nor a valid iterator.'\n );\n\n return iterator;\n};\n","/* eslint no-constant-condition: 0 */\n/**\n * Obliterator Take Function\n * ==========================\n *\n * Function taking n or every value of the given iterator and returns them\n * into an array.\n */\nvar iter = require('./iter.js');\n\n/**\n * Take.\n *\n * @param {Iterable} iterable - Target iterable.\n * @param {number} [n] - Optional number of items to take.\n * @return {array}\n */\nmodule.exports = function take(iterable, n) {\n var l = arguments.length > 1 ? n : Infinity,\n array = l !== Infinity ? new Array(l) : [],\n step,\n i = 0;\n\n var iterator = iter(iterable);\n\n while (true) {\n if (i === l) return array;\n\n step = iterator.next();\n\n if (step.done) {\n if (i !== n) array.length = i;\n\n return array;\n }\n\n array[i++] = step.value;\n }\n};\n","/**\n * Graphology Custom Errors\n * =========================\n *\n * Defining custom errors for ease of use & easy unit tests across\n * implementations (normalized typology rather than relying on error\n * messages to check whether the correct error was found).\n */\nexport class GraphError extends Error {\n constructor(message) {\n super();\n this.name = 'GraphError';\n this.message = message;\n }\n}\n\nexport class InvalidArgumentsGraphError extends GraphError {\n constructor(message) {\n super(message);\n this.name = 'InvalidArgumentsGraphError';\n\n // This is V8 specific to enhance stack readability\n if (typeof Error.captureStackTrace === 'function')\n Error.captureStackTrace(\n this,\n InvalidArgumentsGraphError.prototype.constructor\n );\n }\n}\n\nexport class NotFoundGraphError extends GraphError {\n constructor(message) {\n super(message);\n this.name = 'NotFoundGraphError';\n\n // This is V8 specific to enhance stack readability\n if (typeof Error.captureStackTrace === 'function')\n Error.captureStackTrace(this, NotFoundGraphError.prototype.constructor);\n }\n}\n\nexport class UsageGraphError extends GraphError {\n constructor(message) {\n super(message);\n this.name = 'UsageGraphError';\n\n // This is V8 specific to enhance stack readability\n if (typeof Error.captureStackTrace === 'function')\n Error.captureStackTrace(this, UsageGraphError.prototype.constructor);\n }\n}\n","/**\n * Graphology Internal Data Classes\n * =================================\n *\n * Internal classes hopefully reduced to structs by engines & storing\n * necessary information for nodes & edges.\n *\n * Note that those classes don't rely on the `class` keyword to avoid some\n * cruft introduced by most of ES2015 transpilers.\n */\n\n/**\n * MixedNodeData class.\n *\n * @constructor\n * @param {string} string - The node's key.\n * @param {object} attributes - Node's attributes.\n */\nexport function MixedNodeData(key, attributes) {\n // Attributes\n this.key = key;\n this.attributes = attributes;\n\n this.clear();\n}\n\nMixedNodeData.prototype.clear = function () {\n // Degrees\n this.inDegree = 0;\n this.outDegree = 0;\n this.undirectedDegree = 0;\n this.undirectedLoops = 0;\n this.directedLoops = 0;\n\n // Indices\n this.in = {};\n this.out = {};\n this.undirected = {};\n};\n\n/**\n * DirectedNodeData class.\n *\n * @constructor\n * @param {string} string - The node's key.\n * @param {object} attributes - Node's attributes.\n */\nexport function DirectedNodeData(key, attributes) {\n // Attributes\n this.key = key;\n this.attributes = attributes;\n\n this.clear();\n}\n\nDirectedNodeData.prototype.clear = function () {\n // Degrees\n this.inDegree = 0;\n this.outDegree = 0;\n this.directedLoops = 0;\n\n // Indices\n this.in = {};\n this.out = {};\n};\n\n/**\n * UndirectedNodeData class.\n *\n * @constructor\n * @param {string} string - The node's key.\n * @param {object} attributes - Node's attributes.\n */\nexport function UndirectedNodeData(key, attributes) {\n // Attributes\n this.key = key;\n this.attributes = attributes;\n\n this.clear();\n}\n\nUndirectedNodeData.prototype.clear = function () {\n // Degrees\n this.undirectedDegree = 0;\n this.undirectedLoops = 0;\n\n // Indices\n this.undirected = {};\n};\n\n/**\n * EdgeData class.\n *\n * @constructor\n * @param {boolean} undirected - Whether the edge is undirected.\n * @param {string} string - The edge's key.\n * @param {string} source - Source of the edge.\n * @param {string} target - Target of the edge.\n * @param {object} attributes - Edge's attributes.\n */\nexport function EdgeData(undirected, key, source, target, attributes) {\n // Attributes\n this.key = key;\n this.attributes = attributes;\n this.undirected = undirected;\n\n // Extremities\n this.source = source;\n this.target = target;\n}\n\nEdgeData.prototype.attach = function () {\n let outKey = 'out';\n let inKey = 'in';\n\n if (this.undirected) outKey = inKey = 'undirected';\n\n const source = this.source.key;\n const target = this.target.key;\n\n // Handling source\n this.source[outKey][target] = this;\n\n if (this.undirected && source === target) return;\n\n // Handling target\n this.target[inKey][source] = this;\n};\n\nEdgeData.prototype.attachMulti = function () {\n let outKey = 'out';\n let inKey = 'in';\n\n const source = this.source.key;\n const target = this.target.key;\n\n if (this.undirected) outKey = inKey = 'undirected';\n\n // Handling source\n const adj = this.source[outKey];\n const head = adj[target];\n\n if (typeof head === 'undefined') {\n adj[target] = this;\n\n // Self-loop optimization\n if (!(this.undirected && source === target)) {\n // Handling target\n this.target[inKey][source] = this;\n }\n\n return;\n }\n\n // Prepending to doubly-linked list\n head.previous = this;\n this.next = head;\n\n // Pointing to new head\n // NOTE: use mutating swap later to avoid lookup?\n adj[target] = this;\n this.target[inKey][source] = this;\n};\n\nEdgeData.prototype.detach = function () {\n const source = this.source.key;\n const target = this.target.key;\n\n let outKey = 'out';\n let inKey = 'in';\n\n if (this.undirected) outKey = inKey = 'undirected';\n\n delete this.source[outKey][target];\n\n // No-op delete in case of undirected self-loop\n delete this.target[inKey][source];\n};\n\nEdgeData.prototype.detachMulti = function () {\n const source = this.source.key;\n const target = this.target.key;\n\n let outKey = 'out';\n let inKey = 'in';\n\n if (this.undirected) outKey = inKey = 'undirected';\n\n // Deleting from doubly-linked list\n if (this.previous === undefined) {\n // We are dealing with the head\n\n // Should we delete the adjacency entry because it is now empty?\n if (this.next === undefined) {\n delete this.source[outKey][target];\n\n // No-op delete in case of undirected self-loop\n delete this.target[inKey][source];\n } else {\n // Detaching\n this.next.previous = undefined;\n\n // NOTE: could avoid the lookups by creating a #.become mutating method\n this.source[outKey][target] = this.next;\n\n // No-op delete in case of undirected self-loop\n this.target[inKey][source] = this.next;\n }\n } else {\n // We are dealing with another list node\n this.previous.next = this.next;\n\n // If not last\n if (this.next !== undefined) {\n this.next.previous = this.previous;\n }\n }\n};\n","/**\n * Graphology Node Attributes methods\n * ===================================\n */\nimport {assign, isPlainObject} from '../utils';\n\nimport {InvalidArgumentsGraphError, NotFoundGraphError} from '../errors';\n\nconst NODE = 0;\nconst SOURCE = 1;\nconst TARGET = 2;\nconst OPPOSITE = 3;\n\nfunction findRelevantNodeData(\n graph,\n method,\n mode,\n nodeOrEdge,\n nameOrEdge,\n add1,\n add2\n) {\n let nodeData, edgeData, arg1, arg2;\n\n nodeOrEdge = '' + nodeOrEdge;\n\n if (mode === NODE) {\n nodeData = graph._nodes.get(nodeOrEdge);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find the \"${nodeOrEdge}\" node in the graph.`\n );\n\n arg1 = nameOrEdge;\n arg2 = add1;\n } else if (mode === OPPOSITE) {\n nameOrEdge = '' + nameOrEdge;\n\n edgeData = graph._edges.get(nameOrEdge);\n\n if (!edgeData)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find the \"${nameOrEdge}\" edge in the graph.`\n );\n\n const source = edgeData.source.key;\n const target = edgeData.target.key;\n\n if (nodeOrEdge === source) {\n nodeData = edgeData.target;\n } else if (nodeOrEdge === target) {\n nodeData = edgeData.source;\n } else {\n throw new NotFoundGraphError(\n `Graph.${method}: the \"${nodeOrEdge}\" node is not attached to the \"${nameOrEdge}\" edge (${source}, ${target}).`\n );\n }\n\n arg1 = add1;\n arg2 = add2;\n } else {\n edgeData = graph._edges.get(nodeOrEdge);\n\n if (!edgeData)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find the \"${nodeOrEdge}\" edge in the graph.`\n );\n\n if (mode === SOURCE) {\n nodeData = edgeData.source;\n } else {\n nodeData = edgeData.target;\n }\n\n arg1 = nameOrEdge;\n arg2 = add1;\n }\n\n return [nodeData, arg1, arg2];\n}\n\nfunction attachNodeAttributeGetter(Class, method, mode) {\n Class.prototype[method] = function (nodeOrEdge, nameOrEdge, add1) {\n const [data, name] = findRelevantNodeData(\n this,\n method,\n mode,\n nodeOrEdge,\n nameOrEdge,\n add1\n );\n\n return data.attributes[name];\n };\n}\n\nfunction attachNodeAttributesGetter(Class, method, mode) {\n Class.prototype[method] = function (nodeOrEdge, nameOrEdge) {\n const [data] = findRelevantNodeData(\n this,\n method,\n mode,\n nodeOrEdge,\n nameOrEdge\n );\n\n return data.attributes;\n };\n}\n\nfunction attachNodeAttributeChecker(Class, method, mode) {\n Class.prototype[method] = function (nodeOrEdge, nameOrEdge, add1) {\n const [data, name] = findRelevantNodeData(\n this,\n method,\n mode,\n nodeOrEdge,\n nameOrEdge,\n add1\n );\n\n return data.attributes.hasOwnProperty(name);\n };\n}\n\nfunction attachNodeAttributeSetter(Class, method, mode) {\n Class.prototype[method] = function (nodeOrEdge, nameOrEdge, add1, add2) {\n const [data, name, value] = findRelevantNodeData(\n this,\n method,\n mode,\n nodeOrEdge,\n nameOrEdge,\n add1,\n add2\n );\n\n data.attributes[name] = value;\n\n // Emitting\n this.emit('nodeAttributesUpdated', {\n key: data.key,\n type: 'set',\n attributes: data.attributes,\n name\n });\n\n return this;\n };\n}\n\nfunction attachNodeAttributeUpdater(Class, method, mode) {\n Class.prototype[method] = function (nodeOrEdge, nameOrEdge, add1, add2) {\n const [data, name, updater] = findRelevantNodeData(\n this,\n method,\n mode,\n nodeOrEdge,\n nameOrEdge,\n add1,\n add2\n );\n\n if (typeof updater !== 'function')\n throw new InvalidArgumentsGraphError(\n `Graph.${method}: updater should be a function.`\n );\n\n const attributes = data.attributes;\n const value = updater(attributes[name]);\n\n attributes[name] = value;\n\n // Emitting\n this.emit('nodeAttributesUpdated', {\n key: data.key,\n type: 'set',\n attributes: data.attributes,\n name\n });\n\n return this;\n };\n}\n\nfunction attachNodeAttributeRemover(Class, method, mode) {\n Class.prototype[method] = function (nodeOrEdge, nameOrEdge, add1) {\n const [data, name] = findRelevantNodeData(\n this,\n method,\n mode,\n nodeOrEdge,\n nameOrEdge,\n add1\n );\n\n delete data.attributes[name];\n\n // Emitting\n this.emit('nodeAttributesUpdated', {\n key: data.key,\n type: 'remove',\n attributes: data.attributes,\n name\n });\n\n return this;\n };\n}\n\nfunction attachNodeAttributesReplacer(Class, method, mode) {\n Class.prototype[method] = function (nodeOrEdge, nameOrEdge, add1) {\n const [data, attributes] = findRelevantNodeData(\n this,\n method,\n mode,\n nodeOrEdge,\n nameOrEdge,\n add1\n );\n\n if (!isPlainObject(attributes))\n throw new InvalidArgumentsGraphError(\n `Graph.${method}: provided attributes are not a plain object.`\n );\n\n data.attributes = attributes;\n\n // Emitting\n this.emit('nodeAttributesUpdated', {\n key: data.key,\n type: 'replace',\n attributes: data.attributes\n });\n\n return this;\n };\n}\n\nfunction attachNodeAttributesMerger(Class, method, mode) {\n Class.prototype[method] = function (nodeOrEdge, nameOrEdge, add1) {\n const [data, attributes] = findRelevantNodeData(\n this,\n method,\n mode,\n nodeOrEdge,\n nameOrEdge,\n add1\n );\n\n if (!isPlainObject(attributes))\n throw new InvalidArgumentsGraphError(\n `Graph.${method}: provided attributes are not a plain object.`\n );\n\n assign(data.attributes, attributes);\n\n // Emitting\n this.emit('nodeAttributesUpdated', {\n key: data.key,\n type: 'merge',\n attributes: data.attributes,\n data: attributes\n });\n\n return this;\n };\n}\n\nfunction attachNodeAttributesUpdater(Class, method, mode) {\n Class.prototype[method] = function (nodeOrEdge, nameOrEdge, add1) {\n const [data, updater] = findRelevantNodeData(\n this,\n method,\n mode,\n nodeOrEdge,\n nameOrEdge,\n add1\n );\n\n if (typeof updater !== 'function')\n throw new InvalidArgumentsGraphError(\n `Graph.${method}: provided updater is not a function.`\n );\n\n data.attributes = updater(data.attributes);\n\n // Emitting\n this.emit('nodeAttributesUpdated', {\n key: data.key,\n type: 'update',\n attributes: data.attributes\n });\n\n return this;\n };\n}\n\n/**\n * List of methods to attach.\n */\nconst NODE_ATTRIBUTES_METHODS = [\n {\n name: element => `get${element}Attribute`,\n attacher: attachNodeAttributeGetter\n },\n {\n name: element => `get${element}Attributes`,\n attacher: attachNodeAttributesGetter\n },\n {\n name: element => `has${element}Attribute`,\n attacher: attachNodeAttributeChecker\n },\n {\n name: element => `set${element}Attribute`,\n attacher: attachNodeAttributeSetter\n },\n {\n name: element => `update${element}Attribute`,\n attacher: attachNodeAttributeUpdater\n },\n {\n name: element => `remove${element}Attribute`,\n attacher: attachNodeAttributeRemover\n },\n {\n name: element => `replace${element}Attributes`,\n attacher: attachNodeAttributesReplacer\n },\n {\n name: element => `merge${element}Attributes`,\n attacher: attachNodeAttributesMerger\n },\n {\n name: element => `update${element}Attributes`,\n attacher: attachNodeAttributesUpdater\n }\n];\n\n/**\n * Attach every attributes-related methods to a Graph class.\n *\n * @param {function} Graph - Target class.\n */\nexport default function attachNodeAttributesMethods(Graph) {\n NODE_ATTRIBUTES_METHODS.forEach(function ({name, attacher}) {\n // For nodes\n attacher(Graph, name('Node'), NODE);\n\n // For sources\n attacher(Graph, name('Source'), SOURCE);\n\n // For targets\n attacher(Graph, name('Target'), TARGET);\n\n // For opposites\n attacher(Graph, name('Opposite'), OPPOSITE);\n });\n}\n","/**\n * Graphology Edge Attributes methods\n * ===================================\n */\nimport {assign, isPlainObject, getMatchingEdge} from '../utils';\n\nimport {\n InvalidArgumentsGraphError,\n NotFoundGraphError,\n UsageGraphError\n} from '../errors';\n\n/**\n * Attach an attribute getter method onto the provided class.\n *\n * @param {function} Class - Target class.\n * @param {string} method - Method name.\n * @param {string} type - Type of the edge to find.\n */\nfunction attachEdgeAttributeGetter(Class, method, type) {\n /**\n * Get the desired attribute for the given element (node or edge).\n *\n * Arity 2:\n * @param {any} element - Target element.\n * @param {string} name - Attribute's name.\n *\n * Arity 3 (only for edges):\n * @param {any} source - Source element.\n * @param {any} target - Target element.\n * @param {string} name - Attribute's name.\n *\n * @return {mixed} - The attribute's value.\n *\n * @throws {Error} - Will throw if too many arguments are provided.\n * @throws {Error} - Will throw if any of the elements is not found.\n */\n Class.prototype[method] = function (element, name) {\n let data;\n\n if (this.type !== 'mixed' && type !== 'mixed' && type !== this.type)\n throw new UsageGraphError(\n `Graph.${method}: cannot find this type of edges in your ${this.type} graph.`\n );\n\n if (arguments.length > 2) {\n if (this.multi)\n throw new UsageGraphError(\n `Graph.${method}: 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.`\n );\n\n const source = '' + element;\n const target = '' + name;\n\n name = arguments[2];\n\n data = getMatchingEdge(this, source, target, type);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find an edge for the given path (\"${source}\" - \"${target}\").`\n );\n } else {\n if (type !== 'mixed')\n throw new UsageGraphError(\n `Graph.${method}: calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.`\n );\n\n element = '' + element;\n data = this._edges.get(element);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find the \"${element}\" edge in the graph.`\n );\n }\n\n return data.attributes[name];\n };\n}\n\n/**\n * Attach an attributes getter method onto the provided class.\n *\n * @param {function} Class - Target class.\n * @param {string} method - Method name.\n * @param {string} type - Type of the edge to find.\n */\nfunction attachEdgeAttributesGetter(Class, method, type) {\n /**\n * Retrieves all the target element's attributes.\n *\n * Arity 2:\n * @param {any} element - Target element.\n *\n * Arity 3 (only for edges):\n * @param {any} source - Source element.\n * @param {any} target - Target element.\n *\n * @return {object} - The element's attributes.\n *\n * @throws {Error} - Will throw if too many arguments are provided.\n * @throws {Error} - Will throw if any of the elements is not found.\n */\n Class.prototype[method] = function (element) {\n let data;\n\n if (this.type !== 'mixed' && type !== 'mixed' && type !== this.type)\n throw new UsageGraphError(\n `Graph.${method}: cannot find this type of edges in your ${this.type} graph.`\n );\n\n if (arguments.length > 1) {\n if (this.multi)\n throw new UsageGraphError(\n `Graph.${method}: 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.`\n );\n\n const source = '' + element,\n target = '' + arguments[1];\n\n data = getMatchingEdge(this, source, target, type);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find an edge for the given path (\"${source}\" - \"${target}\").`\n );\n } else {\n if (type !== 'mixed')\n throw new UsageGraphError(\n `Graph.${method}: calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.`\n );\n\n element = '' + element;\n data = this._edges.get(element);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find the \"${element}\" edge in the graph.`\n );\n }\n\n return data.attributes;\n };\n}\n\n/**\n * Attach an attribute checker method onto the provided class.\n *\n * @param {function} Class - Target class.\n * @param {string} method - Method name.\n * @param {string} type - Type of the edge to find.\n */\nfunction attachEdgeAttributeChecker(Class, method, type) {\n /**\n * Checks whether the desired attribute is set for the given element (node or edge).\n *\n * Arity 2:\n * @param {any} element - Target element.\n * @param {string} name - Attribute's name.\n *\n * Arity 3 (only for edges):\n * @param {any} source - Source element.\n * @param {any} target - Target element.\n * @param {string} name - Attribute's name.\n *\n * @return {boolean}\n *\n * @throws {Error} - Will throw if too many arguments are provided.\n * @throws {Error} - Will throw if any of the elements is not found.\n */\n Class.prototype[method] = function (element, name) {\n let data;\n\n if (this.type !== 'mixed' && type !== 'mixed' && type !== this.type)\n throw new UsageGraphError(\n `Graph.${method}: cannot find this type of edges in your ${this.type} graph.`\n );\n\n if (arguments.length > 2) {\n if (this.multi)\n throw new UsageGraphError(\n `Graph.${method}: 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.`\n );\n\n const source = '' + element;\n const target = '' + name;\n\n name = arguments[2];\n\n data = getMatchingEdge(this, source, target, type);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find an edge for the given path (\"${source}\" - \"${target}\").`\n );\n } else {\n if (type !== 'mixed')\n throw new UsageGraphError(\n `Graph.${method}: calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.`\n );\n\n element = '' + element;\n data = this._edges.get(element);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find the \"${element}\" edge in the graph.`\n );\n }\n\n return data.attributes.hasOwnProperty(name);\n };\n}\n\n/**\n * Attach an attribute setter method onto the provided class.\n *\n * @param {function} Class - Target class.\n * @param {string} method - Method name.\n * @param {string} type - Type of the edge to find.\n */\nfunction attachEdgeAttributeSetter(Class, method, type) {\n /**\n * Set the desired attribute for the given element (node or edge).\n *\n * Arity 2:\n * @param {any} element - Target element.\n * @param {string} name - Attribute's name.\n * @param {mixed} value - New attribute value.\n *\n * Arity 3 (only for edges):\n * @param {any} source - Source element.\n * @param {any} target - Target element.\n * @param {string} name - Attribute's name.\n * @param {mixed} value - New attribute value.\n *\n * @return {Graph} - Returns itself for chaining.\n *\n * @throws {Error} - Will throw if too many arguments are provided.\n * @throws {Error} - Will throw if any of the elements is not found.\n */\n Class.prototype[method] = function (element, name, value) {\n let data;\n\n if (this.type !== 'mixed' && type !== 'mixed' && type !== this.type)\n throw new UsageGraphError(\n `Graph.${method}: cannot find this type of edges in your ${this.type} graph.`\n );\n\n if (arguments.length > 3) {\n if (this.multi)\n throw new UsageGraphError(\n `Graph.${method}: 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.`\n );\n\n const source = '' + element;\n const target = '' + name;\n\n name = arguments[2];\n value = arguments[3];\n\n data = getMatchingEdge(this, source, target, type);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find an edge for the given path (\"${source}\" - \"${target}\").`\n );\n } else {\n if (type !== 'mixed')\n throw new UsageGraphError(\n `Graph.${method}: calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.`\n );\n\n element = '' + element;\n data = this._edges.get(element);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find the \"${element}\" edge in the graph.`\n );\n }\n\n data.attributes[name] = value;\n\n // Emitting\n this.emit('edgeAttributesUpdated', {\n key: data.key,\n type: 'set',\n attributes: data.attributes,\n name\n });\n\n return this;\n };\n}\n\n/**\n * Attach an attribute updater method onto the provided class.\n *\n * @param {function} Class - Target class.\n * @param {string} method - Method name.\n * @param {string} type - Type of the edge to find.\n */\nfunction attachEdgeAttributeUpdater(Class, method, type) {\n /**\n * Update the desired attribute for the given element (node or edge) using\n * the provided function.\n *\n * Arity 2:\n * @param {any} element - Target element.\n * @param {string} name - Attribute's name.\n * @param {function} updater - Updater function.\n *\n * Arity 3 (only for edges):\n * @param {any} source - Source element.\n * @param {any} target - Target element.\n * @param {string} name - Attribute's name.\n * @param {function} updater - Updater function.\n *\n * @return {Graph} - Returns itself for chaining.\n *\n * @throws {Error} - Will throw if too many arguments are provided.\n * @throws {Error} - Will throw if any of the elements is not found.\n */\n Class.prototype[method] = function (element, name, updater) {\n let data;\n\n if (this.type !== 'mixed' && type !== 'mixed' && type !== this.type)\n throw new UsageGraphError(\n `Graph.${method}: cannot find this type of edges in your ${this.type} graph.`\n );\n\n if (arguments.length > 3) {\n if (this.multi)\n throw new UsageGraphError(\n `Graph.${method}: 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.`\n );\n\n const source = '' + element;\n const target = '' + name;\n\n name = arguments[2];\n updater = arguments[3];\n\n data = getMatchingEdge(this, source, target, type);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find an edge for the given path (\"${source}\" - \"${target}\").`\n );\n } else {\n if (type !== 'mixed')\n throw new UsageGraphError(\n `Graph.${method}: calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.`\n );\n\n element = '' + element;\n data = this._edges.get(element);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find the \"${element}\" edge in the graph.`\n );\n }\n\n if (typeof updater !== 'function')\n throw new InvalidArgumentsGraphError(\n `Graph.${method}: updater should be a function.`\n );\n\n data.attributes[name] = updater(data.attributes[name]);\n\n // Emitting\n this.emit('edgeAttributesUpdated', {\n key: data.key,\n type: 'set',\n attributes: data.attributes,\n name\n });\n\n return this;\n };\n}\n\n/**\n * Attach an attribute remover method onto the provided class.\n *\n * @param {function} Class - Target class.\n * @param {string} method - Method name.\n * @param {string} type - Type of the edge to find.\n */\nfunction attachEdgeAttributeRemover(Class, method, type) {\n /**\n * Remove the desired attribute for the given element (node or edge).\n *\n * Arity 2:\n * @param {any} element - Target element.\n * @param {string} name - Attribute's name.\n *\n * Arity 3 (only for edges):\n * @param {any} source - Source element.\n * @param {any} target - Target element.\n * @param {string} name - Attribute's name.\n *\n * @return {Graph} - Returns itself for chaining.\n *\n * @throws {Error} - Will throw if too many arguments are provided.\n * @throws {Error} - Will throw if any of the elements is not found.\n */\n Class.prototype[method] = function (element, name) {\n let data;\n\n if (this.type !== 'mixed' && type !== 'mixed' && type !== this.type)\n throw new UsageGraphError(\n `Graph.${method}: cannot find this type of edges in your ${this.type} graph.`\n );\n\n if (arguments.length > 2) {\n if (this.multi)\n throw new UsageGraphError(\n `Graph.${method}: 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.`\n );\n\n const source = '' + element;\n const target = '' + name;\n\n name = arguments[2];\n\n data = getMatchingEdge(this, source, target, type);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find an edge for the given path (\"${source}\" - \"${target}\").`\n );\n } else {\n if (type !== 'mixed')\n throw new UsageGraphError(\n `Graph.${method}: calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.`\n );\n\n element = '' + element;\n data = this._edges.get(element);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find the \"${element}\" edge in the graph.`\n );\n }\n\n delete data.attributes[name];\n\n // Emitting\n this.emit('edgeAttributesUpdated', {\n key: data.key,\n type: 'remove',\n attributes: data.attributes,\n name\n });\n\n return this;\n };\n}\n\n/**\n * Attach an attribute replacer method onto the provided class.\n *\n * @param {function} Class - Target class.\n * @param {string} method - Method name.\n * @param {string} type - Type of the edge to find.\n */\nfunction attachEdgeAttributesReplacer(Class, method, type) {\n /**\n * Replace the attributes for the given element (node or edge).\n *\n * Arity 2:\n * @param {any} element - Target element.\n * @param {object} attributes - New attributes.\n *\n * Arity 3 (only for edges):\n * @param {any} source - Source element.\n * @param {any} target - Target element.\n * @param {object} attributes - New attributes.\n *\n * @return {Graph} - Returns itself for chaining.\n *\n * @throws {Error} - Will throw if too many arguments are provided.\n * @throws {Error} - Will throw if any of the elements is not found.\n */\n Class.prototype[method] = function (element, attributes) {\n let data;\n\n if (this.type !== 'mixed' && type !== 'mixed' && type !== this.type)\n throw new UsageGraphError(\n `Graph.${method}: cannot find this type of edges in your ${this.type} graph.`\n );\n\n if (arguments.length > 2) {\n if (this.multi)\n throw new UsageGraphError(\n `Graph.${method}: 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.`\n );\n\n const source = '' + element,\n target = '' + attributes;\n\n attributes = arguments[2];\n\n data = getMatchingEdge(this, source, target, type);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find an edge for the given path (\"${source}\" - \"${target}\").`\n );\n } else {\n if (type !== 'mixed')\n throw new UsageGraphError(\n `Graph.${method}: calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.`\n );\n\n element = '' + element;\n data = this._edges.get(element);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find the \"${element}\" edge in the graph.`\n );\n }\n\n if (!isPlainObject(attributes))\n throw new InvalidArgumentsGraphError(\n `Graph.${method}: provided attributes are not a plain object.`\n );\n\n data.attributes = attributes;\n\n // Emitting\n this.emit('edgeAttributesUpdated', {\n key: data.key,\n type: 'replace',\n attributes: data.attributes\n });\n\n return this;\n };\n}\n\n/**\n * Attach an attribute merger method onto the provided class.\n *\n * @param {function} Class - Target class.\n * @param {string} method - Method name.\n * @param {string} type - Type of the edge to find.\n */\nfunction attachEdgeAttributesMerger(Class, method, type) {\n /**\n * Merge the attributes for the given element (node or edge).\n *\n * Arity 2:\n * @param {any} element - Target element.\n * @param {object} attributes - Attributes to merge.\n *\n * Arity 3 (only for edges):\n * @param {any} source - Source element.\n * @param {any} target - Target element.\n * @param {object} attributes - Attributes to merge.\n *\n * @return {Graph} - Returns itself for chaining.\n *\n * @throws {Error} - Will throw if too many arguments are provided.\n * @throws {Error} - Will throw if any of the elements is not found.\n */\n Class.prototype[method] = function (element, attributes) {\n let data;\n\n if (this.type !== 'mixed' && type !== 'mixed' && type !== this.type)\n throw new UsageGraphError(\n `Graph.${method}: cannot find this type of edges in your ${this.type} graph.`\n );\n\n if (arguments.length > 2) {\n if (this.multi)\n throw new UsageGraphError(\n `Graph.${method}: 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.`\n );\n\n const source = '' + element,\n target = '' + attributes;\n\n attributes = arguments[2];\n\n data = getMatchingEdge(this, source, target, type);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find an edge for the given path (\"${source}\" - \"${target}\").`\n );\n } else {\n if (type !== 'mixed')\n throw new UsageGraphError(\n `Graph.${method}: calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.`\n );\n\n element = '' + element;\n data = this._edges.get(element);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find the \"${element}\" edge in the graph.`\n );\n }\n\n if (!isPlainObject(attributes))\n throw new InvalidArgumentsGraphError(\n `Graph.${method}: provided attributes are not a plain object.`\n );\n\n assign(data.attributes, attributes);\n\n // Emitting\n this.emit('edgeAttributesUpdated', {\n key: data.key,\n type: 'merge',\n attributes: data.attributes,\n data: attributes\n });\n\n return this;\n };\n}\n\n/**\n * Attach an attribute updater method onto the provided class.\n *\n * @param {function} Class - Target class.\n * @param {string} method - Method name.\n * @param {string} type - Type of the edge to find.\n */\nfunction attachEdgeAttributesUpdater(Class, method, type) {\n /**\n * Update the attributes of the given element (node or edge).\n *\n * Arity 2:\n * @param {any} element - Target element.\n * @param {function} updater - Updater function.\n *\n * Arity 3 (only for edges):\n * @param {any} source - Source element.\n * @param {any} target - Target element.\n * @param {function} updater - Updater function.\n *\n * @return {Graph} - Returns itself for chaining.\n *\n * @throws {Error} - Will throw if too many arguments are provided.\n * @throws {Error} - Will throw if any of the elements is not found.\n */\n Class.prototype[method] = function (element, updater) {\n let data;\n\n if (this.type !== 'mixed' && type !== 'mixed' && type !== this.type)\n throw new UsageGraphError(\n `Graph.${method}: cannot find this type of edges in your ${this.type} graph.`\n );\n\n if (arguments.length > 2) {\n if (this.multi)\n throw new UsageGraphError(\n `Graph.${method}: 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.`\n );\n\n const source = '' + element,\n target = '' + updater;\n\n updater = arguments[2];\n\n data = getMatchingEdge(this, source, target, type);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find an edge for the given path (\"${source}\" - \"${target}\").`\n );\n } else {\n if (type !== 'mixed')\n throw new UsageGraphError(\n `Graph.${method}: calling this method with only a key (vs. a source and target) does not make sense since an edge with this key could have the other type.`\n );\n\n element = '' + element;\n data = this._edges.get(element);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.${method}: could not find the \"${element}\" edge in the graph.`\n );\n }\n\n if (typeof updater !== 'function')\n throw new InvalidArgumentsGraphError(\n `Graph.${method}: provided updater is not a function.`\n );\n\n data.attributes = updater(data.attributes);\n\n // Emitting\n this.emit('edgeAttributesUpdated', {\n key: data.key,\n type: 'update',\n attributes: data.attributes\n });\n\n return this;\n };\n}\n\n/**\n * List of methods to attach.\n */\nconst EDGE_ATTRIBUTES_METHODS = [\n {\n name: element => `get${element}Attribute`,\n attacher: attachEdgeAttributeGetter\n },\n {\n name: element => `get${element}Attributes`,\n attacher: attachEdgeAttributesGetter\n },\n {\n name: element => `has${element}Attribute`,\n attacher: attachEdgeAttributeChecker\n },\n {\n name: element => `set${element}Attribute`,\n attacher: attachEdgeAttributeSetter\n },\n {\n name: element => `update${element}Attribute`,\n attacher: attachEdgeAttributeUpdater\n },\n {\n name: element => `remove${element}Attribute`,\n attacher: attachEdgeAttributeRemover\n },\n {\n name: element => `replace${element}Attributes`,\n attacher: attachEdgeAttributesReplacer\n },\n {\n name: element => `merge${element}Attributes`,\n attacher: attachEdgeAttributesMerger\n },\n {\n name: element => `update${element}Attributes`,\n attacher: attachEdgeAttributesUpdater\n }\n];\n\n/**\n * Attach every attributes-related methods to a Graph class.\n *\n * @param {function} Graph - Target class.\n */\nexport default function attachEdgeAttributesMethods(Graph) {\n EDGE_ATTRIBUTES_METHODS.forEach(function ({name, attacher}) {\n // For edges\n attacher(Graph, name('Edge'), 'mixed');\n\n // For directed edges\n attacher(Graph, name('DirectedEdge'), 'directed');\n\n // For undirected edges\n attacher(Graph, name('UndirectedEdge'), 'undirected');\n });\n}\n","/**\n * Obliterator Chain Function\n * ===========================\n *\n * Variadic function combining the given iterables.\n */\nvar Iterator = require('./iterator.js');\nvar iter = require('./iter.js');\n\n/**\n * Chain.\n *\n * @param {...Iterator} iterables - Target iterables.\n * @return {Iterator}\n */\nmodule.exports = function chain() {\n var iterables = arguments;\n var current = null;\n var i = -1;\n\n /* eslint-disable no-constant-condition */\n return new Iterator(function next() {\n var step = null;\n\n do {\n if (current === null) {\n i++;\n\n if (i >= iterables.length) return {done: true};\n\n current = iter(iterables[i]);\n }\n\n step = current.next();\n\n if (step.done === true) {\n current = null;\n continue;\n }\n\n break;\n } while (true);\n\n return step;\n });\n};\n","/**\n * Graphology Edge Iteration\n * ==========================\n *\n * Attaching some methods to the Graph class to be able to iterate over a\n * graph's edges.\n */\nimport Iterator from 'obliterator/iterator';\nimport chain from 'obliterator/chain';\nimport take from 'obliterator/take';\n\nimport {InvalidArgumentsGraphError, NotFoundGraphError} from '../errors';\n\n/**\n * Definitions.\n */\nconst EDGES_ITERATION = [\n {\n name: 'edges',\n type: 'mixed'\n },\n {\n name: 'inEdges',\n type: 'directed',\n direction: 'in'\n },\n {\n name: 'outEdges',\n type: 'directed',\n direction: 'out'\n },\n {\n name: 'inboundEdges',\n type: 'mixed',\n direction: 'in'\n },\n {\n name: 'outboundEdges',\n type: 'mixed',\n direction: 'out'\n },\n {\n name: 'directedEdges',\n type: 'directed'\n },\n {\n name: 'undirectedEdges',\n type: 'undirected'\n }\n];\n\n/**\n * Function iterating over edges from the given object to match one of them.\n *\n * @param {object} object - Target object.\n * @param {function} callback - Function to call.\n */\nfunction forEachSimple(breakable, object, callback, avoid) {\n let shouldBreak = false;\n\n for (const k in object) {\n if (k === avoid) continue;\n\n const edgeData = object[k];\n\n shouldBreak = callback(\n edgeData.key,\n edgeData.attributes,\n edgeData.source.key,\n edgeData.target.key,\n edgeData.source.attributes,\n edgeData.target.attributes,\n edgeData.undirected\n );\n\n if (breakable && shouldBreak) return edgeData.key;\n }\n\n return;\n}\n\nfunction forEachMulti(breakable, object, callback, avoid) {\n let edgeData, source, target;\n\n let shouldBreak = false;\n\n for (const k in object) {\n if (k === avoid) continue;\n\n edgeData = object[k];\n\n do {\n source = edgeData.source;\n target = edgeData.target;\n\n shouldBreak = callback(\n edgeData.key,\n edgeData.attributes,\n source.key,\n target.key,\n source.attributes,\n target.attributes,\n edgeData.undirected\n );\n\n if (breakable && shouldBreak) return edgeData.key;\n\n edgeData = edgeData.next;\n } while (edgeData !== undefined);\n }\n\n return;\n}\n\n/**\n * Function returning an iterator over edges from the given object.\n *\n * @param {object} object - Target object.\n * @return {Iterator}\n */\nfunction createIterator(object, avoid) {\n const keys = Object.keys(object);\n const l = keys.length;\n\n let edgeData;\n let i = 0;\n\n return new Iterator(function next() {\n do {\n if (!edgeData) {\n if (i >= l) return {done: true};\n\n const k = keys[i++];\n\n if (k === avoid) {\n edgeData = undefined;\n continue;\n }\n\n edgeData = object[k];\n } else {\n edgeData = edgeData.next;\n }\n } while (!edgeData);\n\n return {\n done: false,\n value: {\n edge: edgeData.key,\n attributes: edgeData.attributes,\n source: edgeData.source.key,\n target: edgeData.target.key,\n sourceAttributes: edgeData.source.attributes,\n targetAttributes: edgeData.target.attributes,\n undirected: edgeData.undirected\n }\n };\n });\n}\n\n/**\n * Function iterating over the egdes from the object at given key to match\n * one of them.\n *\n * @param {object} object - Target object.\n * @param {mixed} k - Neighbor key.\n * @param {function} callback - Callback to use.\n */\nfunction forEachForKeySimple(breakable, object, k, callback) {\n const edgeData = object[k];\n\n if (!edgeData) return;\n\n const sourceData = edgeData.source;\n const targetData = edgeData.target;\n\n if (\n callback(\n edgeData.key,\n edgeData.attributes,\n sourceData.key,\n targetData.key,\n sourceData.attributes,\n targetData.attributes,\n edgeData.undirected\n ) &&\n breakable\n )\n return edgeData.key;\n}\n\nfunction forEachForKeyMulti(breakable, object, k, callback) {\n let edgeData = object[k];\n\n if (!edgeData) return;\n\n let shouldBreak = false;\n\n do {\n shouldBreak = callback(\n edgeData.key,\n edgeData.attributes,\n edgeData.source.key,\n edgeData.target.key,\n edgeData.source.attributes,\n edgeData.target.attributes,\n edgeData.undirected\n );\n\n if (breakable && shouldBreak) return edgeData.key;\n\n edgeData = edgeData.next;\n } while (edgeData !== undefined);\n\n return;\n}\n\n/**\n * Function returning an iterator over the egdes from the object at given key.\n *\n * @param {object} object - Target object.\n * @param {mixed} k - Neighbor key.\n * @return {Iterator}\n */\nfunction createIteratorForKey(object, k) {\n let edgeData = object[k];\n\n if (edgeData.next !== undefined) {\n return new Iterator(function () {\n if (!edgeData) return {done: true};\n\n const value = {\n edge: edgeData.key,\n attributes: edgeData.attributes,\n source: edgeData.source.key,\n target: edgeData.target.key,\n sourceAttributes: edgeData.source.attributes,\n targetAttributes: edgeData.target.attributes,\n undirected: edgeData.undirected\n };\n\n edgeData = edgeData.next;\n\n return {\n done: false,\n value\n };\n });\n }\n\n return Iterator.of({\n edge: edgeData.key,\n attributes: edgeData.attributes,\n source: edgeData.source.key,\n target: edgeData.target.key,\n sourceAttributes: edgeData.source.attributes,\n targetAttributes: edgeData.target.attributes,\n undirected: edgeData.undirected\n });\n}\n\n/**\n * Function creating an array of edges for the given type.\n *\n * @param {Graph} graph - Target Graph instance.\n * @param {string} type - Type of edges to retrieve.\n * @return {array} - Array of edges.\n */\nfunction createEdgeArray(graph, type) {\n if (graph.size === 0) return [];\n\n if (type === 'mixed' || type === graph.type) {\n if (typeof Array.from === 'function')\n return Array.from(graph._edges.keys());\n\n return take(graph._edges.keys(), graph._edges.size);\n }\n\n const size =\n type === 'undirected' ? graph.undirectedSize : graph.directedSize;\n\n const list = new Array(size),\n mask = type === 'undirected';\n\n const iterator = graph._edges.values();\n\n let i = 0;\n let step, data;\n\n while (((step = iterator.next()), step.done !== true)) {\n data = step.value;\n\n if (data.undirected === mask) list[i++] = data.key;\n }\n\n return list;\n}\n\n/**\n * Function iterating over a graph's edges using a callback to match one of\n * them.\n *\n * @param {Graph} graph - Target Graph instance.\n * @param {string} type - Type of edges to retrieve.\n * @param {function} callback - Function to call.\n */\nfunction forEachEdge(breakable, graph, type, callback) {\n if (graph.size === 0) return;\n\n const shouldFilter = type !== 'mixed' && type !== graph.type;\n const mask = type === 'undirected';\n\n let step, data;\n let shouldBreak = false;\n const iterator = graph._edges.values();\n\n while (((step = iterator.next()), step.done !== true)) {\n data = step.value;\n\n if (shouldFilter && data.undirected !== mask) continue;\n\n const {key, attributes, source, target} = data;\n\n shouldBreak = callback(\n key,\n attributes,\n source.key,\n target.key,\n source.attributes,\n target.attributes,\n data.undirected\n );\n\n if (breakable && shouldBreak) return key;\n }\n\n return;\n}\n\n/**\n * Function creating an iterator of edges for the given type.\n *\n * @param {Graph} graph - Target Graph instance.\n * @param {string} type - Type of edges to retrieve.\n * @return {Iterator}\n */\nfunction createEdgeIterator(graph, type) {\n if (graph.size === 0) return Iterator.empty();\n\n const shouldFilter = type !== 'mixed' && type !== graph.type;\n const mask = type === 'undirected';\n\n const iterator = graph._edges.values();\n\n return new Iterator(function next() {\n let step, data;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n step = iterator.next();\n\n if (step.done) return step;\n\n data = step.value;\n\n if (shouldFilter && data.undirected !== mask) continue;\n\n break;\n }\n\n const value = {\n edge: data.key,\n attributes: data.attributes,\n source: data.source.key,\n target: data.target.key,\n sourceAttributes: data.source.attributes,\n targetAttributes: data.target.attributes,\n undirected: data.undirected\n };\n\n return {value, done: false};\n });\n}\n\n/**\n * Function iterating over a node's edges using a callback to match one of them.\n *\n * @param {boolean} multi - Whether the graph is multi or not.\n * @param {string} type - Type of edges to retrieve.\n * @param {string} direction - In or out?\n * @param {any} nodeData - Target node's data.\n * @param {function} callback - Function to call.\n */\nfunction forEachEdgeForNode(\n breakable,\n multi,\n type,\n direction,\n nodeData,\n callback\n) {\n const fn = multi ? forEachMulti : forEachSimple;\n\n let found;\n\n if (type !== 'undirected') {\n if (direction !== 'out') {\n found = fn(breakable, nodeData.in, callback);\n\n if (breakable && found) return found;\n }\n if (direction !== 'in') {\n found = fn(\n breakable,\n nodeData.out,\n callback,\n !direction ? nodeData.key : undefined\n );\n\n if (breakable && found) return found;\n }\n }\n\n if (type !== 'directed') {\n found = fn(breakable, nodeData.undirected, callback);\n\n if (breakable && found) return found;\n }\n\n return;\n}\n\n/**\n * Function creating an array of edges for the given type & the given node.\n *\n * @param {boolean} multi - Whether the graph is multi or not.\n * @param {string} type - Type of edges to retrieve.\n * @param {string} direction - In or out?\n * @param {any} nodeData - Target node's data.\n * @return {array} - Array of edges.\n */\nfunction createEdgeArrayForNode(multi, type, direction, nodeData) {\n const edges = []; // TODO: possibility to know size beforehand or factorize with map\n\n forEachEdgeForNode(false, multi, type, direction, nodeData, function (key) {\n edges.push(key);\n });\n\n return edges;\n}\n\n/**\n * Function iterating over a node's edges using a callback.\n *\n * @param {string} type - Type of edges to retrieve.\n * @param {string} direction - In or out?\n * @param {any} nodeData - Target node's data.\n * @return {Iterator}\n */\nfunction createEdgeIteratorForNode(type, direction, nodeData) {\n let iterator = Iterator.empty();\n\n if (type !== 'undirected') {\n if (direction !== 'out' && typeof nodeData.in !== 'undefined')\n iterator = chain(iterator, createIterator(nodeData.in));\n if (direction !== 'in' && typeof nodeData.out !== 'undefined')\n iterator = chain(\n iterator,\n createIterator(nodeData.out, !direction ? nodeData.key : undefined)\n );\n }\n\n if (type !== 'directed' && typeof nodeData.undirected !== 'undefined') {\n iterator = chain(iterator, createIterator(nodeData.undirected));\n }\n\n return iterator;\n}\n\n/**\n * Function iterating over edges for the given path using a callback to match\n * one of them.\n *\n * @param {string} type - Type of edges to retrieve.\n * @param {boolean} multi - Whether the graph is multi.\n * @param {string} direction - In or out?\n * @param {NodeData} sourceData - Source node's data.\n * @param {string} target - Target node.\n * @param {function} callback - Function to call.\n */\nfunction forEachEdgeForPath(\n breakable,\n type,\n multi,\n direction,\n sourceData,\n target,\n callback\n) {\n const fn = multi ? forEachForKeyMulti : forEachForKeySimple;\n\n let found;\n\n if (type !== 'undirected') {\n if (typeof sourceData.in !== 'undefined' && direction !== 'out') {\n found = fn(breakable, sourceData.in, target, callback);\n\n if (breakable && found) return found;\n }\n\n if (\n typeof sourceData.out !== 'undefined' &&\n direction !== 'in' &&\n (direction || sourceData.key !== target)\n ) {\n found = fn(breakable, sourceData.out, target, callback);\n\n if (breakable && found) return found;\n }\n }\n\n if (type !== 'directed') {\n if (typeof sourceData.undirected !== 'undefined') {\n found = fn(breakable, sourceData.undirected, target, callback);\n\n if (breakable && found) return found;\n }\n }\n\n return;\n}\n\n/**\n * Function creating an array of edges for the given path.\n *\n * @param {string} type - Type of edges to retrieve.\n * @param {boolean} multi - Whether the graph is multi.\n * @param {string} direction - In or out?\n * @param {NodeData} sourceData - Source node's data.\n * @param {any} target - Target node.\n * @return {array} - Array of edges.\n */\nfunction createEdgeArrayForPath(type, multi, direction, sourceData, target) {\n const edges = []; // TODO: possibility to know size beforehand or factorize with map\n\n forEachEdgeForPath(\n false,\n type,\n multi,\n direction,\n sourceData,\n target,\n function (key) {\n edges.push(key);\n }\n );\n\n return edges;\n}\n\n/**\n * Function returning an iterator over edges for the given path.\n *\n * @param {string} type - Type of edges to retrieve.\n * @param {string} direction - In or out?\n * @param {NodeData} sourceData - Source node's data.\n * @param {string} target - Target node.\n * @param {function} callback - Function to call.\n */\nfunction createEdgeIteratorForPath(type, direction, sourceData, target) {\n let iterator = Iterator.empty();\n\n if (type !== 'undirected') {\n if (\n typeof sourceData.in !== 'undefined' &&\n direction !== 'out' &&\n target in sourceData.in\n )\n iterator = chain(iterator, createIteratorForKey(sourceData.in, target));\n\n if (\n typeof sourceData.out !== 'undefined' &&\n direction !== 'in' &&\n target in sourceData.out &&\n (direction || sourceData.key !== target)\n )\n iterator = chain(iterator, createIteratorForKey(sourceData.out, target));\n }\n\n if (type !== 'directed') {\n if (\n typeof sourceData.undirected !== 'undefined' &&\n target in sourceData.undirected\n )\n iterator = chain(\n iterator,\n createIteratorForKey(sourceData.undirected, target)\n );\n }\n\n return iterator;\n}\n\n/**\n * Function attaching an edge array creator method to the Graph prototype.\n *\n * @param {function} Class - Target class.\n * @param {object} description - Method description.\n */\nfunction attachEdgeArrayCreator(Class, description) {\n const {name, type, direction} = description;\n\n /**\n * Function returning an array of certain edges.\n *\n * Arity 0: Return all the relevant edges.\n *\n * Arity 1: Return all of a node's relevant edges.\n * @param {any} node - Target node.\n *\n * Arity 2: Return the relevant edges across the given path.\n * @param {any} source - Source node.\n * @param {any} target - Target node.\n *\n * @return {array|number} - The edges or the number of edges.\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n Class.prototype[name] = function (source, target) {\n // Early termination\n if (type !== 'mixed' && this.type !== 'mixed' && type !== this.type)\n return [];\n\n if (!arguments.length) return createEdgeArray(this, type);\n\n if (arguments.length === 1) {\n source = '' + source;\n\n const nodeData = this._nodes.get(source);\n\n if (typeof nodeData === 'undefined')\n throw new NotFoundGraphError(\n `Graph.${name}: could not find the \"${source}\" node in the graph.`\n );\n\n // Iterating over a node's edges\n return createEdgeArrayForNode(\n this.multi,\n type === 'mixed' ? this.type : type,\n direction,\n nodeData\n );\n }\n\n if (arguments.length === 2) {\n source = '' + source;\n target = '' + target;\n\n const sourceData = this._nodes.get(source);\n\n if (!sourceData)\n throw new NotFoundGraphError(\n `Graph.${name}: could not find the \"${source}\" source node in the graph.`\n );\n\n if (!this._nodes.has(target))\n throw new NotFoundGraphError(\n `Graph.${name}: could not find the \"${target}\" target node in the graph.`\n );\n\n // Iterating over the edges between source & target\n return createEdgeArrayForPath(\n type,\n this.multi,\n direction,\n sourceData,\n target\n );\n }\n\n throw new InvalidArgumentsGraphError(\n `Graph.${name}: too many arguments (expecting 0, 1 or 2 and got ${arguments.length}).`\n );\n };\n}\n\n/**\n * Function attaching a edge callback iterator method to the Graph prototype.\n *\n * @param {function} Class - Target class.\n * @param {object} description - Method description.\n */\nfunction attachForEachEdge(Class, description) {\n const {name, type, direction} = description;\n\n const forEachName = 'forEach' + name[0].toUpperCase() + name.slice(1, -1);\n\n /**\n * Function iterating over the graph's relevant edges by applying the given\n * callback.\n *\n * Arity 1: Iterate over all the relevant edges.\n * @param {function} callback - Callback to use.\n *\n * Arity 2: Iterate over all of a node's relevant edges.\n * @param {any} node - Target node.\n * @param {function} callback - Callback to use.\n *\n * Arity 3: Iterate over the relevant edges across the given path.\n * @param {any} source - Source node.\n * @param {any} target - Target node.\n * @param {function} callback - Callback to use.\n *\n * @return {undefined}\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n Class.prototype[forEachName] = function (source, target, callback) {\n // Early termination\n if (type !== 'mixed' && this.type !== 'mixed' && type !== this.type) return;\n\n if (arguments.length === 1) {\n callback = source;\n return forEachEdge(false, this, type, callback);\n }\n\n if (arguments.length === 2) {\n source = '' + source;\n callback = target;\n\n const nodeData = this._nodes.get(source);\n\n if (typeof nodeData === 'undefined')\n throw new NotFoundGraphError(\n `Graph.${forEachName}: could not find the \"${source}\" node in the graph.`\n );\n\n // Iterating over a node's edges\n // TODO: maybe attach the sub method to the instance dynamically?\n return forEachEdgeForNode(\n false,\n this.multi,\n type === 'mixed' ? this.type : type,\n direction,\n nodeData,\n callback\n );\n }\n\n if (arguments.length === 3) {\n source = '' + source;\n target = '' + target;\n\n const sourceData = this._nodes.get(source);\n\n if (!sourceData)\n throw new NotFoundGraphError(\n `Graph.${forEachName}: could not find the \"${source}\" source node in the graph.`\n );\n\n if (!this._nodes.has(target))\n throw new NotFoundGraphError(\n `Graph.${forEachName}: could not find the \"${target}\" target node in the graph.`\n );\n\n // Iterating over the edges between source & target\n return forEachEdgeForPath(\n false,\n type,\n this.multi,\n direction,\n sourceData,\n target,\n callback\n );\n }\n\n throw new InvalidArgumentsGraphError(\n `Graph.${forEachName}: too many arguments (expecting 1, 2 or 3 and got ${arguments.length}).`\n );\n };\n\n /**\n * Function mapping the graph's relevant edges by applying the given\n * callback.\n *\n * Arity 1: Map all the relevant edges.\n * @param {function} callback - Callback to use.\n *\n * Arity 2: Map all of a node's relevant edges.\n * @param {any} node - Target node.\n * @param {function} callback - Callback to use.\n *\n * Arity 3: Map the relevant edges across the given path.\n * @param {any} source - Source node.\n * @param {any} target - Target node.\n * @param {function} callback - Callback to use.\n *\n * @return {undefined}\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n const mapName = 'map' + name[0].toUpperCase() + name.slice(1);\n\n Class.prototype[mapName] = function () {\n const args = Array.prototype.slice.call(arguments);\n const callback = args.pop();\n\n let result;\n\n // We know the result length beforehand\n if (args.length === 0) {\n let length = 0;\n\n if (type !== 'directed') length += this.undirectedSize;\n if (type !== 'undirected') length += this.directedSize;\n\n result = new Array(length);\n\n let i = 0;\n\n args.push((e, ea, s, t, sa, ta, u) => {\n result[i++] = callback(e, ea, s, t, sa, ta, u);\n });\n }\n\n // We don't know the result length beforehand\n // TODO: we can in some instances of simple graphs, knowing degree\n else {\n result = [];\n\n args.push((e, ea, s, t, sa, ta, u) => {\n result.push(callback(e, ea, s, t, sa, ta, u));\n });\n }\n\n this[forEachName].apply(this, args);\n\n return result;\n };\n\n /**\n * Function filtering the graph's relevant edges using the provided predicate\n * function.\n *\n * Arity 1: Filter all the relevant edges.\n * @param {function} predicate - Predicate to use.\n *\n * Arity 2: Filter all of a node's relevant edges.\n * @param {any} node - Target node.\n * @param {function} predicate - Predicate to use.\n *\n * Arity 3: Filter the relevant edges across the given path.\n * @param {any} source - Source node.\n * @param {any} target - Target node.\n * @param {function} predicate - Predicate to use.\n *\n * @return {undefined}\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n const filterName = 'filter' + name[0].toUpperCase() + name.slice(1);\n\n Class.prototype[filterName] = function () {\n const args = Array.prototype.slice.call(arguments);\n const callback = args.pop();\n\n const result = [];\n\n args.push((e, ea, s, t, sa, ta, u) => {\n if (callback(e, ea, s, t, sa, ta, u)) result.push(e);\n });\n\n this[forEachName].apply(this, args);\n\n return result;\n };\n\n /**\n * Function reducing the graph's relevant edges using the provided accumulator\n * function.\n *\n * Arity 1: Reduce all the relevant edges.\n * @param {function} accumulator - Accumulator to use.\n * @param {any} initialValue - Initial value.\n *\n * Arity 2: Reduce all of a node's relevant edges.\n * @param {any} node - Target node.\n * @param {function} accumulator - Accumulator to use.\n * @param {any} initialValue - Initial value.\n *\n * Arity 3: Reduce the relevant edges across the given path.\n * @param {any} source - Source node.\n * @param {any} target - Target node.\n * @param {function} accumulator - Accumulator to use.\n * @param {any} initialValue - Initial value.\n *\n * @return {undefined}\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n const reduceName = 'reduce' + name[0].toUpperCase() + name.slice(1);\n\n Class.prototype[reduceName] = function () {\n let args = Array.prototype.slice.call(arguments);\n\n if (args.length < 2 || args.length > 4) {\n throw new InvalidArgumentsGraphError(\n `Graph.${reduceName}: invalid number of arguments (expecting 2, 3 or 4 and got ${args.length}).`\n );\n }\n\n if (\n typeof args[args.length - 1] === 'function' &&\n typeof args[args.length - 2] !== 'function'\n ) {\n throw new InvalidArgumentsGraphError(\n `Graph.${reduceName}: missing initial value. You must provide it because the callback takes more than one argument and we cannot infer the initial value from the first iteration, as you could with a simple array.`\n );\n }\n\n let callback;\n let initialValue;\n\n if (args.length === 2) {\n callback = args[0];\n initialValue = args[1];\n args = [];\n } else if (args.length === 3) {\n callback = args[1];\n initialValue = args[2];\n args = [args[0]];\n } else if (args.length === 4) {\n callback = args[2];\n initialValue = args[3];\n args = [args[0], args[1]];\n }\n\n let accumulator = initialValue;\n\n args.push((e, ea, s, t, sa, ta, u) => {\n accumulator = callback(accumulator, e, ea, s, t, sa, ta, u);\n });\n\n this[forEachName].apply(this, args);\n\n return accumulator;\n };\n}\n\n/**\n * Function attaching a breakable edge callback iterator method to the Graph\n * prototype.\n *\n * @param {function} Class - Target class.\n * @param {object} description - Method description.\n */\nfunction attachFindEdge(Class, description) {\n const {name, type, direction} = description;\n\n const findEdgeName = 'find' + name[0].toUpperCase() + name.slice(1, -1);\n\n /**\n * Function iterating over the graph's relevant edges in order to match\n * one of them using the provided predicate function.\n *\n * Arity 1: Iterate over all the relevant edges.\n * @param {function} callback - Callback to use.\n *\n * Arity 2: Iterate over all of a node's relevant edges.\n * @param {any} node - Target node.\n * @param {function} callback - Callback to use.\n *\n * Arity 3: Iterate over the relevant edges across the given path.\n * @param {any} source - Source node.\n * @param {any} target - Target node.\n * @param {function} callback - Callback to use.\n *\n * @return {undefined}\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n Class.prototype[findEdgeName] = function (source, target, callback) {\n // Early termination\n if (type !== 'mixed' && this.type !== 'mixed' && type !== this.type)\n return false;\n\n if (arguments.length === 1) {\n callback = source;\n return forEachEdge(true, this, type, callback);\n }\n\n if (arguments.length === 2) {\n source = '' + source;\n callback = target;\n\n const nodeData = this._nodes.get(source);\n\n if (typeof nodeData === 'undefined')\n throw new NotFoundGraphError(\n `Graph.${findEdgeName}: could not find the \"${source}\" node in the graph.`\n );\n\n // Iterating over a node's edges\n // TODO: maybe attach the sub method to the instance dynamically?\n return forEachEdgeForNode(\n true,\n this.multi,\n type === 'mixed' ? this.type : type,\n direction,\n nodeData,\n callback\n );\n }\n\n if (arguments.length === 3) {\n source = '' + source;\n target = '' + target;\n\n const sourceData = this._nodes.get(source);\n\n if (!sourceData)\n throw new NotFoundGraphError(\n `Graph.${findEdgeName}: could not find the \"${source}\" source node in the graph.`\n );\n\n if (!this._nodes.has(target))\n throw new NotFoundGraphError(\n `Graph.${findEdgeName}: could not find the \"${target}\" target node in the graph.`\n );\n\n // Iterating over the edges between source & target\n return forEachEdgeForPath(\n true,\n type,\n this.multi,\n direction,\n sourceData,\n target,\n callback\n );\n }\n\n throw new InvalidArgumentsGraphError(\n `Graph.${findEdgeName}: too many arguments (expecting 1, 2 or 3 and got ${arguments.length}).`\n );\n };\n\n /**\n * Function iterating over the graph's relevant edges in order to assert\n * whether any one of them matches the provided predicate function.\n *\n * Arity 1: Iterate over all the relevant edges.\n * @param {function} callback - Callback to use.\n *\n * Arity 2: Iterate over all of a node's relevant edges.\n * @param {any} node - Target node.\n * @param {function} callback - Callback to use.\n *\n * Arity 3: Iterate over the relevant edges across the given path.\n * @param {any} source - Source node.\n * @param {any} target - Target node.\n * @param {function} callback - Callback to use.\n *\n * @return {undefined}\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n const someName = 'some' + name[0].toUpperCase() + name.slice(1, -1);\n\n Class.prototype[someName] = function () {\n const args = Array.prototype.slice.call(arguments);\n const callback = args.pop();\n\n args.push((e, ea, s, t, sa, ta, u) => {\n return callback(e, ea, s, t, sa, ta, u);\n });\n\n const found = this[findEdgeName].apply(this, args);\n\n if (found) return true;\n\n return false;\n };\n\n /**\n * Function iterating over the graph's relevant edges in order to assert\n * whether all of them matche the provided predicate function.\n *\n * Arity 1: Iterate over all the relevant edges.\n * @param {function} callback - Callback to use.\n *\n * Arity 2: Iterate over all of a node's relevant edges.\n * @param {any} node - Target node.\n * @param {function} callback - Callback to use.\n *\n * Arity 3: Iterate over the relevant edges across the given path.\n * @param {any} source - Source node.\n * @param {any} target - Target node.\n * @param {function} callback - Callback to use.\n *\n * @return {undefined}\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n const everyName = 'every' + name[0].toUpperCase() + name.slice(1, -1);\n\n Class.prototype[everyName] = function () {\n const args = Array.prototype.slice.call(arguments);\n const callback = args.pop();\n\n args.push((e, ea, s, t, sa, ta, u) => {\n return !callback(e, ea, s, t, sa, ta, u);\n });\n\n const found = this[findEdgeName].apply(this, args);\n\n if (found) return false;\n\n return true;\n };\n}\n\n/**\n * Function attaching an edge iterator method to the Graph prototype.\n *\n * @param {function} Class - Target class.\n * @param {object} description - Method description.\n */\nfunction attachEdgeIteratorCreator(Class, description) {\n const {name: originalName, type, direction} = description;\n\n const name = originalName.slice(0, -1) + 'Entries';\n\n /**\n * Function returning an iterator over the graph's edges.\n *\n * Arity 0: Iterate over all the relevant edges.\n *\n * Arity 1: Iterate over all of a node's relevant edges.\n * @param {any} node - Target node.\n *\n * Arity 2: Iterate over the relevant edges across the given path.\n * @param {any} source - Source node.\n * @param {any} target - Target node.\n *\n * @return {array|number} - The edges or the number of edges.\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n Class.prototype[name] = function (source, target) {\n // Early termination\n if (type !== 'mixed' && this.type !== 'mixed' && type !== this.type)\n return Iterator.empty();\n\n if (!arguments.length) return createEdgeIterator(this, type);\n\n if (arguments.length === 1) {\n source = '' + source;\n\n const sourceData = this._nodes.get(source);\n\n if (!sourceData)\n throw new NotFoundGraphError(\n `Graph.${name}: could not find the \"${source}\" node in the graph.`\n );\n\n // Iterating over a node's edges\n return createEdgeIteratorForNode(type, direction, sourceData);\n }\n\n if (arguments.length === 2) {\n source = '' + source;\n target = '' + target;\n\n const sourceData = this._nodes.get(source);\n\n if (!sourceData)\n throw new NotFoundGraphError(\n `Graph.${name}: could not find the \"${source}\" source node in the graph.`\n );\n\n if (!this._nodes.has(target))\n throw new NotFoundGraphError(\n `Graph.${name}: could not find the \"${target}\" target node in the graph.`\n );\n\n // Iterating over the edges between source & target\n return createEdgeIteratorForPath(type, direction, sourceData, target);\n }\n\n throw new InvalidArgumentsGraphError(\n `Graph.${name}: too many arguments (expecting 0, 1 or 2 and got ${arguments.length}).`\n );\n };\n}\n\n/**\n * Function attaching every edge iteration method to the Graph class.\n *\n * @param {function} Graph - Graph class.\n */\nexport default function attachEdgeIterationMethods(Graph) {\n EDGES_ITERATION.forEach(description => {\n attachEdgeArrayCreator(Graph, description);\n attachForEachEdge(Graph, description);\n attachFindEdge(Graph, description);\n attachEdgeIteratorCreator(Graph, description);\n });\n}\n","/**\n * Graphology Neighbor Iteration\n * ==============================\n *\n * Attaching some methods to the Graph class to be able to iterate over\n * neighbors.\n */\nimport Iterator from 'obliterator/iterator';\nimport chain from 'obliterator/chain';\n\nimport {NotFoundGraphError, InvalidArgumentsGraphError} from '../errors';\n\n/**\n * Definitions.\n */\nconst NEIGHBORS_ITERATION = [\n {\n name: 'neighbors',\n type: 'mixed'\n },\n {\n name: 'inNeighbors',\n type: 'directed',\n direction: 'in'\n },\n {\n name: 'outNeighbors',\n type: 'directed',\n direction: 'out'\n },\n {\n name: 'inboundNeighbors',\n type: 'mixed',\n direction: 'in'\n },\n {\n name: 'outboundNeighbors',\n type: 'mixed',\n direction: 'out'\n },\n {\n name: 'directedNeighbors',\n type: 'directed'\n },\n {\n name: 'undirectedNeighbors',\n type: 'undirected'\n }\n];\n\n/**\n * Helpers.\n */\nfunction CompositeSetWrapper() {\n this.A = null;\n this.B = null;\n}\n\nCompositeSetWrapper.prototype.wrap = function (set) {\n if (this.A === null) this.A = set;\n else if (this.B === null) this.B = set;\n};\n\nCompositeSetWrapper.prototype.has = function (key) {\n if (this.A !== null && key in this.A) return true;\n if (this.B !== null && key in this.B) return true;\n return false;\n};\n\n/**\n * Function iterating over the given node's relevant neighbors to match\n * one of them using a predicated function.\n *\n * @param {string} type - Type of neighbors.\n * @param {string} direction - Direction.\n * @param {any} nodeData - Target node's data.\n * @param {function} callback - Callback to use.\n */\nfunction forEachInObjectOnce(breakable, visited, nodeData, object, callback) {\n for (const k in object) {\n const edgeData = object[k];\n\n const sourceData = edgeData.source;\n const targetData = edgeData.target;\n\n const neighborData = sourceData === nodeData ? targetData : sourceData;\n\n if (visited && visited.has(neighborData.key)) continue;\n\n const shouldBreak = callback(neighborData.key, neighborData.attributes);\n\n if (breakable && shouldBreak) return neighborData.key;\n }\n\n return;\n}\n\nfunction forEachNeighbor(breakable, type, direction, nodeData, callback) {\n // If we want only undirected or in or out, we can roll some optimizations\n if (type !== 'mixed') {\n if (type === 'undirected')\n return forEachInObjectOnce(\n breakable,\n null,\n nodeData,\n nodeData.undirected,\n callback\n );\n\n if (typeof direction === 'string')\n return forEachInObjectOnce(\n breakable,\n null,\n nodeData,\n nodeData[direction],\n callback\n );\n }\n\n // Else we need to keep a set of neighbors not to return duplicates\n // We cheat by querying the other adjacencies\n const visited = new CompositeSetWrapper();\n\n let found;\n\n if (type !== 'undirected') {\n if (direction !== 'out') {\n found = forEachInObjectOnce(\n breakable,\n null,\n nodeData,\n nodeData.in,\n callback\n );\n\n if (breakable && found) return found;\n\n visited.wrap(nodeData.in);\n }\n if (direction !== 'in') {\n found = forEachInObjectOnce(\n breakable,\n visited,\n nodeData,\n nodeData.out,\n callback\n );\n\n if (breakable && found) return found;\n\n visited.wrap(nodeData.out);\n }\n }\n\n if (type !== 'directed') {\n found = forEachInObjectOnce(\n breakable,\n visited,\n nodeData,\n nodeData.undirected,\n callback\n );\n\n if (breakable && found) return found;\n }\n\n return;\n}\n\n/**\n * Function creating an array of relevant neighbors for the given node.\n *\n * @param {string} type - Type of neighbors.\n * @param {string} direction - Direction.\n * @param {any} nodeData - Target node's data.\n * @return {Array} - The list of neighbors.\n */\nfunction createNeighborArrayForNode(type, direction, nodeData) {\n // If we want only undirected or in or out, we can roll some optimizations\n if (type !== 'mixed') {\n if (type === 'undirected') return Object.keys(nodeData.undirected);\n\n if (typeof direction === 'string') return Object.keys(nodeData[direction]);\n }\n\n const neighbors = [];\n\n forEachNeighbor(false, type, direction, nodeData, function (key) {\n neighbors.push(key);\n });\n\n return neighbors;\n}\n\n/**\n * Function returning an iterator over the given node's relevant neighbors.\n *\n * @param {string} type - Type of neighbors.\n * @param {string} direction - Direction.\n * @param {any} nodeData - Target node's data.\n * @return {Iterator}\n */\nfunction createDedupedObjectIterator(visited, nodeData, object) {\n const keys = Object.keys(object);\n const l = keys.length;\n\n let i = 0;\n\n return new Iterator(function next() {\n let neighborData = null;\n\n do {\n if (i >= l) {\n if (visited) visited.wrap(object);\n return {done: true};\n }\n\n const edgeData = object[keys[i++]];\n\n const sourceData = edgeData.source;\n const targetData = edgeData.target;\n\n neighborData = sourceData === nodeData ? targetData : sourceData;\n\n if (visited && visited.has(neighborData.key)) {\n neighborData = null;\n continue;\n }\n } while (neighborData === null);\n\n return {\n done: false,\n value: {neighbor: neighborData.key, attributes: neighborData.attributes}\n };\n });\n}\n\nfunction createNeighborIterator(type, direction, nodeData) {\n // If we want only undirected or in or out, we can roll some optimizations\n if (type !== 'mixed') {\n if (type === 'undirected')\n return createDedupedObjectIterator(null, nodeData, nodeData.undirected);\n\n if (typeof direction === 'string')\n return createDedupedObjectIterator(null, nodeData, nodeData[direction]);\n }\n\n let iterator = Iterator.empty();\n\n // Else we need to keep a set of neighbors not to return duplicates\n // We cheat by querying the other adjacencies\n const visited = new CompositeSetWrapper();\n\n if (type !== 'undirected') {\n if (direction !== 'out') {\n iterator = chain(\n iterator,\n createDedupedObjectIterator(visited, nodeData, nodeData.in)\n );\n }\n if (direction !== 'in') {\n iterator = chain(\n iterator,\n createDedupedObjectIterator(visited, nodeData, nodeData.out)\n );\n }\n }\n\n if (type !== 'directed') {\n iterator = chain(\n iterator,\n createDedupedObjectIterator(visited, nodeData, nodeData.undirected)\n );\n }\n\n return iterator;\n}\n\n/**\n * Function attaching a neighbors array creator method to the Graph prototype.\n *\n * @param {function} Class - Target class.\n * @param {object} description - Method description.\n */\nfunction attachNeighborArrayCreator(Class, description) {\n const {name, type, direction} = description;\n\n /**\n * Function returning an array of certain neighbors.\n *\n * @param {any} node - Target node.\n * @return {array} - The neighbors of neighbors.\n *\n * @throws {Error} - Will throw if node is not found in the graph.\n */\n Class.prototype[name] = function (node) {\n // Early termination\n if (type !== 'mixed' && this.type !== 'mixed' && type !== this.type)\n return [];\n\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (typeof nodeData === 'undefined')\n throw new NotFoundGraphError(\n `Graph.${name}: could not find the \"${node}\" node in the graph.`\n );\n\n // Here, we want to iterate over a node's relevant neighbors\n return createNeighborArrayForNode(\n type === 'mixed' ? this.type : type,\n direction,\n nodeData\n );\n };\n}\n\n/**\n * Function attaching a neighbors callback iterator method to the Graph prototype.\n *\n * @param {function} Class - Target class.\n * @param {object} description - Method description.\n */\nfunction attachForEachNeighbor(Class, description) {\n const {name, type, direction} = description;\n\n const forEachName = 'forEach' + name[0].toUpperCase() + name.slice(1, -1);\n\n /**\n * Function iterating over all the relevant neighbors using a callback.\n *\n * @param {any} node - Target node.\n * @param {function} callback - Callback to use.\n * @return {undefined}\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n Class.prototype[forEachName] = function (node, callback) {\n // Early termination\n if (type !== 'mixed' && this.type !== 'mixed' && type !== this.type) return;\n\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (typeof nodeData === 'undefined')\n throw new NotFoundGraphError(\n `Graph.${forEachName}: could not find the \"${node}\" node in the graph.`\n );\n\n // Here, we want to iterate over a node's relevant neighbors\n forEachNeighbor(\n false,\n type === 'mixed' ? this.type : type,\n direction,\n nodeData,\n callback\n );\n };\n\n /**\n * Function mapping the relevant neighbors using a callback.\n *\n * @param {any} node - Target node.\n * @param {function} callback - Callback to use.\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n const mapName = 'map' + name[0].toUpperCase() + name.slice(1);\n\n Class.prototype[mapName] = function (node, callback) {\n // TODO: optimize when size is known beforehand\n const result = [];\n\n this[forEachName](node, (n, a) => {\n result.push(callback(n, a));\n });\n\n return result;\n };\n\n /**\n * Function filtering the relevant neighbors using a callback.\n *\n * @param {any} node - Target node.\n * @param {function} callback - Callback to use.\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n const filterName = 'filter' + name[0].toUpperCase() + name.slice(1);\n\n Class.prototype[filterName] = function (node, callback) {\n const result = [];\n\n this[forEachName](node, (n, a) => {\n if (callback(n, a)) result.push(n);\n });\n\n return result;\n };\n\n /**\n * Function reducing the relevant neighbors using a callback.\n *\n * @param {any} node - Target node.\n * @param {function} callback - Callback to use.\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n const reduceName = 'reduce' + name[0].toUpperCase() + name.slice(1);\n\n Class.prototype[reduceName] = function (node, callback, initialValue) {\n if (arguments.length < 3)\n throw new InvalidArgumentsGraphError(\n `Graph.${reduceName}: missing initial value. You must provide it because the callback takes more than one argument and we cannot infer the initial value from the first iteration, as you could with a simple array.`\n );\n\n let accumulator = initialValue;\n\n this[forEachName](node, (n, a) => {\n accumulator = callback(accumulator, n, a);\n });\n\n return accumulator;\n };\n}\n\n/**\n * Function attaching a breakable neighbors callback iterator method to the\n * Graph prototype.\n *\n * @param {function} Class - Target class.\n * @param {object} description - Method description.\n */\nfunction attachFindNeighbor(Class, description) {\n const {name, type, direction} = description;\n\n const capitalizedSingular = name[0].toUpperCase() + name.slice(1, -1);\n\n const findName = 'find' + capitalizedSingular;\n\n /**\n * Function iterating over all the relevant neighbors using a callback.\n *\n * @param {any} node - Target node.\n * @param {function} callback - Callback to use.\n * @return {undefined}\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n Class.prototype[findName] = function (node, callback) {\n // Early termination\n if (type !== 'mixed' && this.type !== 'mixed' && type !== this.type) return;\n\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (typeof nodeData === 'undefined')\n throw new NotFoundGraphError(\n `Graph.${findName}: could not find the \"${node}\" node in the graph.`\n );\n\n // Here, we want to iterate over a node's relevant neighbors\n return forEachNeighbor(\n true,\n type === 'mixed' ? this.type : type,\n direction,\n nodeData,\n callback\n );\n };\n\n /**\n * Function iterating over all the relevant neighbors to find if any of them\n * matches the given predicate.\n *\n * @param {any} node - Target node.\n * @param {function} callback - Callback to use.\n * @return {boolean}\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n const someName = 'some' + capitalizedSingular;\n\n Class.prototype[someName] = function (node, callback) {\n const found = this[findName](node, callback);\n\n if (found) return true;\n\n return false;\n };\n\n /**\n * Function iterating over all the relevant neighbors to find if all of them\n * matche the given predicate.\n *\n * @param {any} node - Target node.\n * @param {function} callback - Callback to use.\n * @return {boolean}\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n const everyName = 'every' + capitalizedSingular;\n\n Class.prototype[everyName] = function (node, callback) {\n const found = this[findName](node, (n, a) => {\n return !callback(n, a);\n });\n\n if (found) return false;\n\n return true;\n };\n}\n\n/**\n * Function attaching a neighbors callback iterator method to the Graph prototype.\n *\n * @param {function} Class - Target class.\n * @param {object} description - Method description.\n */\nfunction attachNeighborIteratorCreator(Class, description) {\n const {name, type, direction} = description;\n\n const iteratorName = name.slice(0, -1) + 'Entries';\n\n /**\n * Function returning an iterator over all the relevant neighbors.\n *\n * @param {any} node - Target node.\n * @return {Iterator}\n *\n * @throws {Error} - Will throw if there are too many arguments.\n */\n Class.prototype[iteratorName] = function (node) {\n // Early termination\n if (type !== 'mixed' && this.type !== 'mixed' && type !== this.type)\n return Iterator.empty();\n\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (typeof nodeData === 'undefined')\n throw new NotFoundGraphError(\n `Graph.${iteratorName}: could not find the \"${node}\" node in the graph.`\n );\n\n // Here, we want to iterate over a node's relevant neighbors\n return createNeighborIterator(\n type === 'mixed' ? this.type : type,\n direction,\n nodeData\n );\n };\n}\n\n/**\n * Function attaching every neighbor iteration method to the Graph class.\n *\n * @param {function} Graph - Graph class.\n */\nexport default function attachNeighborIterationMethods(Graph) {\n NEIGHBORS_ITERATION.forEach(description => {\n attachNeighborArrayCreator(Graph, description);\n attachForEachNeighbor(Graph, description);\n attachFindNeighbor(Graph, description);\n attachNeighborIteratorCreator(Graph, description);\n });\n}\n","/**\n * Graphology Adjacency Iteration\n * ===============================\n *\n * Attaching some methods to the Graph class to be able to iterate over a\n * graph's adjacency.\n */\n\n/**\n * Function iterating over a simple graph's adjacency using a callback.\n *\n * @param {boolean} breakable - Can we break?\n * @param {boolean} assymetric - Whether to emit undirected edges only once.\n * @param {boolean} disconnectedNodes - Whether to emit disconnected nodes.\n * @param {Graph} graph - Target Graph instance.\n * @param {callback} function - Iteration callback.\n */\nexport function forEachAdjacency(\n breakable,\n assymetric,\n disconnectedNodes,\n graph,\n callback\n) {\n const iterator = graph._nodes.values();\n\n const type = graph.type;\n\n let step, sourceData, neighbor, adj, edgeData, targetData, shouldBreak;\n\n while (((step = iterator.next()), step.done !== true)) {\n let hasEdges = false;\n\n sourceData = step.value;\n\n if (type !== 'undirected') {\n adj = sourceData.out;\n\n for (neighbor in adj) {\n edgeData = adj[neighbor];\n\n do {\n targetData = edgeData.target;\n\n hasEdges = true;\n shouldBreak = callback(\n sourceData.key,\n targetData.key,\n sourceData.attributes,\n targetData.attributes,\n edgeData.key,\n edgeData.attributes,\n edgeData.undirected\n );\n\n if (breakable && shouldBreak) return edgeData;\n\n edgeData = edgeData.next;\n } while (edgeData);\n }\n }\n\n if (type !== 'directed') {\n adj = sourceData.undirected;\n\n for (neighbor in adj) {\n if (assymetric && sourceData.key > neighbor) continue;\n\n edgeData = adj[neighbor];\n\n do {\n targetData = edgeData.target;\n\n if (targetData.key !== neighbor) targetData = edgeData.source;\n\n hasEdges = true;\n shouldBreak = callback(\n sourceData.key,\n targetData.key,\n sourceData.attributes,\n targetData.attributes,\n edgeData.key,\n edgeData.attributes,\n edgeData.undirected\n );\n\n if (breakable && shouldBreak) return edgeData;\n\n edgeData = edgeData.next;\n } while (edgeData);\n }\n }\n\n if (disconnectedNodes && !hasEdges) {\n shouldBreak = callback(\n sourceData.key,\n null,\n sourceData.attributes,\n null,\n null,\n null,\n null\n );\n\n if (breakable && shouldBreak) return null;\n }\n }\n\n return;\n}\n","/**\n * Graphology Serialization Utilities\n * ===================================\n *\n * Collection of functions used by the graph serialization schemes.\n */\nimport {InvalidArgumentsGraphError} from './errors';\nimport {assign, isPlainObject, isEmpty} from './utils';\n\n/**\n * Formats internal node data into a serialized node.\n *\n * @param {any} key - The node's key.\n * @param {object} data - Internal node's data.\n * @return {array} - The serialized node.\n */\nexport function serializeNode(key, data) {\n const serialized = {key};\n\n if (!isEmpty(data.attributes))\n serialized.attributes = assign({}, data.attributes);\n\n return serialized;\n}\n\n/**\n * Formats internal edge data into a serialized edge.\n *\n * @param {string} type - The graph's type.\n * @param {any} key - The edge's key.\n * @param {object} data - Internal edge's data.\n * @return {array} - The serialized edge.\n */\nexport function serializeEdge(type, key, data) {\n const serialized = {\n key,\n source: data.source.key,\n target: data.target.key\n };\n\n if (!isEmpty(data.attributes))\n serialized.attributes = assign({}, data.attributes);\n\n if (type === 'mixed' && data.undirected) serialized.undirected = true;\n\n return serialized;\n}\n\n/**\n * Checks whether the given value is a serialized node.\n *\n * @param {mixed} value - Target value.\n * @return {string|null}\n */\nexport function validateSerializedNode(value) {\n if (!isPlainObject(value))\n throw new InvalidArgumentsGraphError(\n 'Graph.import: invalid serialized node. A serialized node should be a plain object with at least a \"key\" property.'\n );\n\n if (!('key' in value))\n throw new InvalidArgumentsGraphError(\n 'Graph.import: serialized node is missing its key.'\n );\n\n if (\n 'attributes' in value &&\n (!isPlainObject(value.attributes) || value.attributes === null)\n )\n throw new InvalidArgumentsGraphError(\n 'Graph.import: invalid attributes. Attributes should be a plain object, null or omitted.'\n );\n}\n\n/**\n * Checks whether the given value is a serialized edge.\n *\n * @param {mixed} value - Target value.\n * @return {string|null}\n */\nexport function validateSerializedEdge(value) {\n if (!isPlainObject(value))\n throw new InvalidArgumentsGraphError(\n 'Graph.import: invalid serialized edge. A serialized edge should be a plain object with at least a \"source\" & \"target\" property.'\n );\n\n if (!('source' in value))\n throw new InvalidArgumentsGraphError(\n 'Graph.import: serialized edge is missing its source.'\n );\n\n if (!('target' in value))\n throw new InvalidArgumentsGraphError(\n 'Graph.import: serialized edge is missing its target.'\n );\n\n if (\n 'attributes' in value &&\n (!isPlainObject(value.attributes) || value.attributes === null)\n )\n throw new InvalidArgumentsGraphError(\n 'Graph.import: invalid attributes. Attributes should be a plain object, null or omitted.'\n );\n\n if ('undirected' in value && typeof value.undirected !== 'boolean')\n throw new InvalidArgumentsGraphError(\n 'Graph.import: invalid undirectedness information. Undirected should be boolean or omitted.'\n );\n}\n","/* eslint no-nested-ternary: 0 */\n/**\n * Graphology Reference Implementation\n * ====================================\n *\n * Reference implementation of the graphology specs.\n */\nimport {EventEmitter} from 'events';\nimport Iterator from 'obliterator/iterator';\nimport take from 'obliterator/take';\n\nimport {\n InvalidArgumentsGraphError,\n NotFoundGraphError,\n UsageGraphError\n} from './errors';\n\nimport {\n MixedNodeData,\n DirectedNodeData,\n UndirectedNodeData,\n EdgeData\n} from './data';\n\nimport attachNodeAttributesMethods from './attributes/nodes';\nimport attachEdgeAttributesMethods from './attributes/edges';\nimport attachEdgeIterationMethods from './iteration/edges';\nimport attachNeighborIterationMethods from './iteration/neighbors';\nimport {forEachAdjacency} from './iteration/adjacency';\n\nimport {\n serializeNode,\n serializeEdge,\n validateSerializedNode,\n validateSerializedEdge\n} from './serialization';\n\nimport {\n assign,\n getMatchingEdge,\n isPlainObject,\n privateProperty,\n readOnlyProperty,\n incrementalIdStartingFromRandomByte,\n validateHints\n} from './utils';\n\n/**\n * Constants.\n */\nconst INSTANCE_ID = incrementalIdStartingFromRandomByte();\n\n/**\n * Enums.\n */\nconst TYPES = new Set(['directed', 'undirected', 'mixed']);\n\nconst EMITTER_PROPS = new Set([\n 'domain',\n '_events',\n '_eventsCount',\n '_maxListeners'\n]);\n\nconst EDGE_ADD_METHODS = [\n {\n name: verb => `${verb}Edge`,\n generateKey: true\n },\n {\n name: verb => `${verb}DirectedEdge`,\n generateKey: true,\n type: 'directed'\n },\n {\n name: verb => `${verb}UndirectedEdge`,\n generateKey: true,\n type: 'undirected'\n },\n {\n name: verb => `${verb}EdgeWithKey`\n },\n {\n name: verb => `${verb}DirectedEdgeWithKey`,\n type: 'directed'\n },\n {\n name: verb => `${verb}UndirectedEdgeWithKey`,\n type: 'undirected'\n }\n];\n\n/**\n * Default options.\n */\nconst DEFAULTS = {\n allowSelfLoops: true,\n multi: false,\n type: 'mixed'\n};\n\n/**\n * Abstract functions used by the Graph class for various methods.\n */\n\n/**\n * Internal method used to add a node to the given graph\n *\n * @param {Graph} graph - Target graph.\n * @param {any} node - The node's key.\n * @param {object} [attributes] - Optional attributes.\n * @return {NodeData} - Created node data.\n */\nfunction addNode(graph, node, attributes) {\n if (attributes && !isPlainObject(attributes))\n throw new InvalidArgumentsGraphError(\n `Graph.addNode: invalid attributes. Expecting an object but got \"${attributes}\"`\n );\n\n // String coercion\n node = '' + node;\n attributes = attributes || {};\n\n if (graph._nodes.has(node))\n throw new UsageGraphError(\n `Graph.addNode: the \"${node}\" node already exist in the graph.`\n );\n\n const data = new graph.NodeDataClass(node, attributes);\n\n // Adding the node to internal register\n graph._nodes.set(node, data);\n\n // Emitting\n graph.emit('nodeAdded', {\n key: node,\n attributes\n });\n\n return data;\n}\n\n/**\n * Same as the above but without sanity checks because we call this in contexts\n * where necessary checks were already done.\n */\nfunction unsafeAddNode(graph, node, attributes) {\n const data = new graph.NodeDataClass(node, attributes);\n\n graph._nodes.set(node, data);\n\n graph.emit('nodeAdded', {\n key: node,\n attributes\n });\n\n return data;\n}\n\n/**\n * Internal method used to add an arbitrary edge to the given graph.\n *\n * @param {Graph} graph - Target graph.\n * @param {string} name - Name of the child method for errors.\n * @param {boolean} mustGenerateKey - Should the graph generate an id?\n * @param {boolean} undirected - Whether the edge is undirected.\n * @param {any} edge - The edge's key.\n * @param {any} source - The source node.\n * @param {any} target - The target node.\n * @param {object} [attributes] - Optional attributes.\n * @return {any} - The edge.\n *\n * @throws {Error} - Will throw if the graph is of the wrong type.\n * @throws {Error} - Will throw if the given attributes are not an object.\n * @throws {Error} - Will throw if source or target doesn't exist.\n * @throws {Error} - Will throw if the edge already exist.\n */\nfunction addEdge(\n graph,\n name,\n mustGenerateKey,\n undirected,\n edge,\n source,\n target,\n attributes\n) {\n // Checking validity of operation\n if (!undirected && graph.type === 'undirected')\n throw new UsageGraphError(\n `Graph.${name}: you cannot add a directed edge to an undirected graph. Use the #.addEdge or #.addUndirectedEdge instead.`\n );\n\n if (undirected && graph.type === 'directed')\n throw new UsageGraphError(\n `Graph.${name}: you cannot add an undirected edge to a directed graph. Use the #.addEdge or #.addDirectedEdge instead.`\n );\n\n if (attributes && !isPlainObject(attributes))\n throw new InvalidArgumentsGraphError(\n `Graph.${name}: invalid attributes. Expecting an object but got \"${attributes}\"`\n );\n\n // Coercion of source & target:\n source = '' + source;\n target = '' + target;\n attributes = attributes || {};\n\n if (!graph.allowSelfLoops && source === target)\n throw new UsageGraphError(\n `Graph.${name}: source & target are the same (\"${source}\"), thus creating a loop explicitly forbidden by this graph 'allowSelfLoops' option set to false.`\n );\n\n const sourceData = graph._nodes.get(source),\n targetData = graph._nodes.get(target);\n\n if (!sourceData)\n throw new NotFoundGraphError(\n `Graph.${name}: source node \"${source}\" not found.`\n );\n\n if (!targetData)\n throw new NotFoundGraphError(\n `Graph.${name}: target node \"${target}\" not found.`\n );\n\n // Must the graph generate an id for this edge?\n const eventData = {\n key: null,\n undirected,\n source,\n target,\n attributes\n };\n\n if (mustGenerateKey) {\n // NOTE: in this case we can guarantee that the key does not already\n // exist and is already correctly casted as a string\n edge = graph._edgeKeyGenerator();\n } else {\n // Coercion of edge key\n edge = '' + edge;\n\n // Here, we have a key collision\n if (graph._edges.has(edge))\n throw new UsageGraphError(\n `Graph.${name}: the \"${edge}\" edge already exists in the graph.`\n );\n }\n\n // Here, we might have a source / target collision\n if (\n !graph.multi &&\n (undirected\n ? typeof sourceData.undirected[target] !== 'undefined'\n : typeof sourceData.out[target] !== 'undefined')\n ) {\n throw new UsageGraphError(\n `Graph.${name}: an edge linking \"${source}\" to \"${target}\" already exists. If you really want to add multiple edges linking those nodes, you should create a multi graph by using the 'multi' option.`\n );\n }\n\n // Storing some data\n const edgeData = new EdgeData(\n undirected,\n edge,\n sourceData,\n targetData,\n attributes\n );\n\n // Adding the edge to the internal register\n graph._edges.set(edge, edgeData);\n\n // Incrementing node degree counters\n const isSelfLoop = source === target;\n\n if (undirected) {\n sourceData.undirectedDegree++;\n targetData.undirectedDegree++;\n\n if (isSelfLoop) {\n sourceData.undirectedLoops++;\n graph._undirectedSelfLoopCount++;\n }\n } else {\n sourceData.outDegree++;\n targetData.inDegree++;\n\n if (isSelfLoop) {\n sourceData.directedLoops++;\n graph._directedSelfLoopCount++;\n }\n }\n\n // Updating relevant index\n if (graph.multi) edgeData.attachMulti();\n else edgeData.attach();\n\n if (undirected) graph._undirectedSize++;\n else graph._directedSize++;\n\n // Emitting\n eventData.key = edge;\n\n graph.emit('edgeAdded', eventData);\n\n return edge;\n}\n\n/**\n * Internal method used to add an arbitrary edge to the given graph.\n *\n * @param {Graph} graph - Target graph.\n * @param {string} name - Name of the child method for errors.\n * @param {boolean} mustGenerateKey - Should the graph generate an id?\n * @param {boolean} undirected - Whether the edge is undirected.\n * @param {any} edge - The edge's key.\n * @param {any} source - The source node.\n * @param {any} target - The target node.\n * @param {object} [attributes] - Optional attributes.\n * @param {boolean} [asUpdater] - Are we updating or merging?\n * @return {any} - The edge.\n *\n * @throws {Error} - Will throw if the graph is of the wrong type.\n * @throws {Error} - Will throw if the given attributes are not an object.\n * @throws {Error} - Will throw if source or target doesn't exist.\n * @throws {Error} - Will throw if the edge already exist.\n */\nfunction mergeEdge(\n graph,\n name,\n mustGenerateKey,\n undirected,\n edge,\n source,\n target,\n attributes,\n asUpdater\n) {\n // Checking validity of operation\n if (!undirected && graph.type === 'undirected')\n throw new UsageGraphError(\n `Graph.${name}: you cannot merge/update a directed edge to an undirected graph. Use the #.mergeEdge/#.updateEdge or #.addUndirectedEdge instead.`\n );\n\n if (undirected && graph.type === 'directed')\n throw new UsageGraphError(\n `Graph.${name}: you cannot merge/update an undirected edge to a directed graph. Use the #.mergeEdge/#.updateEdge or #.addDirectedEdge instead.`\n );\n\n if (attributes) {\n if (asUpdater) {\n if (typeof attributes !== 'function')\n throw new InvalidArgumentsGraphError(\n `Graph.${name}: invalid updater function. Expecting a function but got \"${attributes}\"`\n );\n } else {\n if (!isPlainObject(attributes))\n throw new InvalidArgumentsGraphError(\n `Graph.${name}: invalid attributes. Expecting an object but got \"${attributes}\"`\n );\n }\n }\n\n // Coercion of source & target:\n source = '' + source;\n target = '' + target;\n\n let updater;\n\n if (asUpdater) {\n updater = attributes;\n attributes = undefined;\n }\n\n if (!graph.allowSelfLoops && source === target)\n throw new UsageGraphError(\n `Graph.${name}: source & target are the same (\"${source}\"), thus creating a loop explicitly forbidden by this graph 'allowSelfLoops' option set to false.`\n );\n\n let sourceData = graph._nodes.get(source);\n let targetData = graph._nodes.get(target);\n let edgeData;\n\n // Do we need to handle duplicate?\n let alreadyExistingEdgeData;\n\n if (!mustGenerateKey) {\n edgeData = graph._edges.get(edge);\n\n if (edgeData) {\n // Here, we need to ensure, if the user gave a key, that source & target\n // are consistent\n if (edgeData.source.key !== source || edgeData.target.key !== target) {\n // If source or target inconsistent\n if (\n !undirected ||\n edgeData.source.key !== target ||\n edgeData.target.key !== source\n ) {\n // If directed, or source/target aren't flipped\n throw new UsageGraphError(\n `Graph.${name}: inconsistency detected when attempting to merge the \"${edge}\" edge with \"${source}\" source & \"${target}\" target vs. (\"${edgeData.source.key}\", \"${edgeData.target.key}\").`\n );\n }\n }\n\n alreadyExistingEdgeData = edgeData;\n }\n }\n\n // Here, we might have a source / target collision\n if (!alreadyExistingEdgeData && !graph.multi && sourceData) {\n alreadyExistingEdgeData = undirected\n ? sourceData.undirected[target]\n : sourceData.out[target];\n }\n\n // Handling duplicates\n if (alreadyExistingEdgeData) {\n const info = [alreadyExistingEdgeData.key, false, false, false];\n\n // We can skip the attribute merging part if the user did not provide them\n if (asUpdater ? !updater : !attributes) return info;\n\n // Updating the attributes\n if (asUpdater) {\n const oldAttributes = alreadyExistingEdgeData.attributes;\n alreadyExistingEdgeData.attributes = updater(oldAttributes);\n\n graph.emit('edgeAttributesUpdated', {\n type: 'replace',\n key: alreadyExistingEdgeData.key,\n attributes: alreadyExistingEdgeData.attributes\n });\n }\n\n // Merging the attributes\n else {\n assign(alreadyExistingEdgeData.attributes, attributes);\n\n graph.emit('edgeAttributesUpdated', {\n type: 'merge',\n key: alreadyExistingEdgeData.key,\n attributes: alreadyExistingEdgeData.attributes,\n data: attributes\n });\n }\n\n return info;\n }\n\n attributes = attributes || {};\n\n if (asUpdater && updater) attributes = updater(attributes);\n\n // Must the graph generate an id for this edge?\n const eventData = {\n key: null,\n undirected,\n source,\n target,\n attributes\n };\n\n if (mustGenerateKey) {\n // NOTE: in this case we can guarantee that the key does not already\n // exist and is already correctly casted as a string\n edge = graph._edgeKeyGenerator();\n } else {\n // Coercion of edge key\n edge = '' + edge;\n\n // Here, we have a key collision\n if (graph._edges.has(edge))\n throw new UsageGraphError(\n `Graph.${name}: the \"${edge}\" edge already exists in the graph.`\n );\n }\n\n let sourceWasAdded = false;\n let targetWasAdded = false;\n\n if (!sourceData) {\n sourceData = unsafeAddNode(graph, source, {});\n sourceWasAdded = true;\n\n if (source === target) {\n targetData = sourceData;\n targetWasAdded = true;\n }\n }\n if (!targetData) {\n targetData = unsafeAddNode(graph, target, {});\n targetWasAdded = true;\n }\n\n // Storing some data\n edgeData = new EdgeData(undirected, edge, sourceData, targetData, attributes);\n\n // Adding the edge to the internal register\n graph._edges.set(edge, edgeData);\n\n // Incrementing node degree counters\n const isSelfLoop = source === target;\n\n if (undirected) {\n sourceData.undirectedDegree++;\n targetData.undirectedDegree++;\n\n if (isSelfLoop) {\n sourceData.undirectedLoops++;\n graph._undirectedSelfLoopCount++;\n }\n } else {\n sourceData.outDegree++;\n targetData.inDegree++;\n\n if (isSelfLoop) {\n sourceData.directedLoops++;\n graph._directedSelfLoopCount++;\n }\n }\n\n // Updating relevant index\n if (graph.multi) edgeData.attachMulti();\n else edgeData.attach();\n\n if (undirected) graph._undirectedSize++;\n else graph._directedSize++;\n\n // Emitting\n eventData.key = edge;\n\n graph.emit('edgeAdded', eventData);\n\n return [edge, true, sourceWasAdded, targetWasAdded];\n}\n\n/**\n * Internal method used to drop an edge.\n *\n * @param {Graph} graph - Target graph.\n * @param {EdgeData} edgeData - Data of the edge to drop.\n */\nfunction dropEdgeFromData(graph, edgeData) {\n // Dropping the edge from the register\n graph._edges.delete(edgeData.key);\n\n // Updating related degrees\n const {source: sourceData, target: targetData, attributes} = edgeData;\n\n const undirected = edgeData.undirected;\n\n const isSelfLoop = sourceData === targetData;\n\n if (undirected) {\n sourceData.undirectedDegree--;\n targetData.undirectedDegree--;\n\n if (isSelfLoop) {\n sourceData.undirectedLoops--;\n graph._undirectedSelfLoopCount--;\n }\n } else {\n sourceData.outDegree--;\n targetData.inDegree--;\n\n if (isSelfLoop) {\n sourceData.directedLoops--;\n graph._directedSelfLoopCount--;\n }\n }\n\n // Clearing index\n if (graph.multi) edgeData.detachMulti();\n else edgeData.detach();\n\n if (undirected) graph._undirectedSize--;\n else graph._directedSize--;\n\n // Emitting\n graph.emit('edgeDropped', {\n key: edgeData.key,\n attributes,\n source: sourceData.key,\n target: targetData.key,\n undirected\n });\n}\n\n/**\n * Graph class\n *\n * @constructor\n * @param {object} [options] - Options:\n * @param {boolean} [allowSelfLoops] - Allow self loops?\n * @param {string} [type] - Type of the graph.\n * @param {boolean} [map] - Allow references as keys?\n * @param {boolean} [multi] - Allow parallel edges?\n *\n * @throws {Error} - Will throw if the arguments are not valid.\n */\nexport default class Graph extends EventEmitter {\n constructor(options) {\n super();\n\n //-- Solving options\n options = assign({}, DEFAULTS, options);\n\n // Enforcing options validity\n if (typeof options.multi !== 'boolean')\n throw new InvalidArgumentsGraphError(\n `Graph.constructor: invalid 'multi' option. Expecting a boolean but got \"${options.multi}\".`\n );\n\n if (!TYPES.has(options.type))\n throw new InvalidArgumentsGraphError(\n `Graph.constructor: invalid 'type' option. Should be one of \"mixed\", \"directed\" or \"undirected\" but got \"${options.type}\".`\n );\n\n if (typeof options.allowSelfLoops !== 'boolean')\n throw new InvalidArgumentsGraphError(\n `Graph.constructor: invalid 'allowSelfLoops' option. Expecting a boolean but got \"${options.allowSelfLoops}\".`\n );\n\n //-- Private properties\n\n // Utilities\n const NodeDataClass =\n options.type === 'mixed'\n ? MixedNodeData\n : options.type === 'directed'\n ? DirectedNodeData\n : UndirectedNodeData;\n\n privateProperty(this, 'NodeDataClass', NodeDataClass);\n\n // Internal edge key generator\n\n // NOTE: this internal generator produce keys that are strings\n // composed of a weird prefix, an incremental instance id starting from\n // a random byte and finally an internal instance incremental id.\n // All this to avoid intra-frame and cross-frame adversarial inputs\n // that can force a single #.addEdge call to degenerate into a O(n)\n // available key search loop.\n\n // It also ensures that automatically generated edge keys are unlikely\n // to produce collisions with arbitrary keys given by users.\n const instancePrefix = 'geid_' + INSTANCE_ID() + '_';\n let edgeId = 0;\n\n const edgeKeyGenerator = () => {\n let availableEdgeKey;\n\n do {\n availableEdgeKey = instancePrefix + edgeId++;\n } while (this._edges.has(availableEdgeKey));\n\n return availableEdgeKey;\n };\n\n // Indexes\n privateProperty(this, '_attributes', {});\n privateProperty(this, '_nodes', new Map());\n privateProperty(this, '_edges', new Map());\n privateProperty(this, '_directedSize', 0);\n privateProperty(this, '_undirectedSize', 0);\n privateProperty(this, '_directedSelfLoopCount', 0);\n privateProperty(this, '_undirectedSelfLoopCount', 0);\n privateProperty(this, '_edgeKeyGenerator', edgeKeyGenerator);\n\n // Options\n privateProperty(this, '_options', options);\n\n // Emitter properties\n EMITTER_PROPS.forEach(prop => privateProperty(this, prop, this[prop]));\n\n //-- Properties readers\n readOnlyProperty(this, 'order', () => this._nodes.size);\n readOnlyProperty(this, 'size', () => this._edges.size);\n readOnlyProperty(this, 'directedSize', () => this._directedSize);\n readOnlyProperty(this, 'undirectedSize', () => this._undirectedSize);\n readOnlyProperty(\n this,\n 'selfLoopCount',\n () => this._directedSelfLoopCount + this._undirectedSelfLoopCount\n );\n readOnlyProperty(\n this,\n 'directedSelfLoopCount',\n () => this._directedSelfLoopCount\n );\n readOnlyProperty(\n this,\n 'undirectedSelfLoopCount',\n () => this._undirectedSelfLoopCount\n );\n readOnlyProperty(this, 'multi', this._options.multi);\n readOnlyProperty(this, 'type', this._options.type);\n readOnlyProperty(this, 'allowSelfLoops', this._options.allowSelfLoops);\n readOnlyProperty(this, 'implementation', () => 'graphology');\n }\n\n _resetInstanceCounters() {\n this._directedSize = 0;\n this._undirectedSize = 0;\n this._directedSelfLoopCount = 0;\n this._undirectedSelfLoopCount = 0;\n }\n\n /**---------------------------------------------------------------------------\n * Read\n **---------------------------------------------------------------------------\n */\n\n /**\n * Method returning whether the given node is found in the graph.\n *\n * @param {any} node - The node.\n * @return {boolean}\n */\n hasNode(node) {\n return this._nodes.has('' + node);\n }\n\n /**\n * Method returning whether the given directed edge is found in the graph.\n *\n * Arity 1:\n * @param {any} edge - The edge's key.\n *\n * Arity 2:\n * @param {any} source - The edge's source.\n * @param {any} target - The edge's target.\n *\n * @return {boolean}\n *\n * @throws {Error} - Will throw if the arguments are invalid.\n */\n hasDirectedEdge(source, target) {\n // Early termination\n if (this.type === 'undirected') return false;\n\n if (arguments.length === 1) {\n const edge = '' + source;\n\n const edgeData = this._edges.get(edge);\n\n return !!edgeData && !edgeData.undirected;\n } else if (arguments.length === 2) {\n source = '' + source;\n target = '' + target;\n\n // If the node source or the target is not in the graph we break\n const nodeData = this._nodes.get(source);\n\n if (!nodeData) return false;\n\n // Is there a directed edge pointing toward target?\n return nodeData.out.hasOwnProperty(target);\n }\n\n throw new InvalidArgumentsGraphError(\n `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.`\n );\n }\n\n /**\n * Method returning whether the given undirected edge is found in the graph.\n *\n * Arity 1:\n * @param {any} edge - The edge's key.\n *\n * Arity 2:\n * @param {any} source - The edge's source.\n * @param {any} target - The edge's target.\n *\n * @return {boolean}\n *\n * @throws {Error} - Will throw if the arguments are invalid.\n */\n hasUndirectedEdge(source, target) {\n // Early termination\n if (this.type === 'directed') return false;\n\n if (arguments.length === 1) {\n const edge = '' + source;\n\n const edgeData = this._edges.get(edge);\n\n return !!edgeData && edgeData.undirected;\n } else if (arguments.length === 2) {\n source = '' + source;\n target = '' + target;\n\n // If the node source or the target is not in the graph we break\n const nodeData = this._nodes.get(source);\n\n if (!nodeData) return false;\n\n // Is there a directed edge pointing toward target?\n return nodeData.undirected.hasOwnProperty(target);\n }\n\n throw new InvalidArgumentsGraphError(\n `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.`\n );\n }\n\n /**\n * Method returning whether the given edge is found in the graph.\n *\n * Arity 1:\n * @param {any} edge - The edge's key.\n *\n * Arity 2:\n * @param {any} source - The edge's source.\n * @param {any} target - The edge's target.\n *\n * @return {boolean}\n *\n * @throws {Error} - Will throw if the arguments are invalid.\n */\n hasEdge(source, target) {\n if (arguments.length === 1) {\n const edge = '' + source;\n\n return this._edges.has(edge);\n } else if (arguments.length === 2) {\n source = '' + source;\n target = '' + target;\n\n // If the node source or the target is not in the graph we break\n const nodeData = this._nodes.get(source);\n\n if (!nodeData) return false;\n\n // Is there a directed edge pointing toward target?\n return (\n (typeof nodeData.out !== 'undefined' &&\n nodeData.out.hasOwnProperty(target)) ||\n (typeof nodeData.undirected !== 'undefined' &&\n nodeData.undirected.hasOwnProperty(target))\n );\n }\n\n throw new InvalidArgumentsGraphError(\n `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.`\n );\n }\n\n /**\n * Method returning the edge matching source & target in a directed fashion.\n *\n * @param {any} source - The edge's source.\n * @param {any} target - The edge's target.\n *\n * @return {any|undefined}\n *\n * @throws {Error} - Will throw if the graph is multi.\n * @throws {Error} - Will throw if source or target doesn't exist.\n */\n directedEdge(source, target) {\n if (this.type === 'undirected') return;\n\n source = '' + source;\n target = '' + target;\n\n if (this.multi)\n throw new UsageGraphError(\n 'Graph.directedEdge: this method is irrelevant with multigraphs since there might be multiple edges between source & target. See #.directedEdges instead.'\n );\n\n const sourceData = this._nodes.get(source);\n\n if (!sourceData)\n throw new NotFoundGraphError(\n `Graph.directedEdge: could not find the \"${source}\" source node in the graph.`\n );\n\n if (!this._nodes.has(target))\n throw new NotFoundGraphError(\n `Graph.directedEdge: could not find the \"${target}\" target node in the graph.`\n );\n\n const edgeData = (sourceData.out && sourceData.out[target]) || undefined;\n\n if (edgeData) return edgeData.key;\n }\n\n /**\n * Method returning the edge matching source & target in a undirected fashion.\n *\n * @param {any} source - The edge's source.\n * @param {any} target - The edge's target.\n *\n * @return {any|undefined}\n *\n * @throws {Error} - Will throw if the graph is multi.\n * @throws {Error} - Will throw if source or target doesn't exist.\n */\n undirectedEdge(source, target) {\n if (this.type === 'directed') return;\n\n source = '' + source;\n target = '' + target;\n\n if (this.multi)\n throw new UsageGraphError(\n 'Graph.undirectedEdge: this method is irrelevant with multigraphs since there might be multiple edges between source & target. See #.undirectedEdges instead.'\n );\n\n const sourceData = this._nodes.get(source);\n\n if (!sourceData)\n throw new NotFoundGraphError(\n `Graph.undirectedEdge: could not find the \"${source}\" source node in the graph.`\n );\n\n if (!this._nodes.has(target))\n throw new NotFoundGraphError(\n `Graph.undirectedEdge: could not find the \"${target}\" target node in the graph.`\n );\n\n const edgeData =\n (sourceData.undirected && sourceData.undirected[target]) || undefined;\n\n if (edgeData) return edgeData.key;\n }\n\n /**\n * Method returning the edge matching source & target in a mixed fashion.\n *\n * @param {any} source - The edge's source.\n * @param {any} target - The edge's target.\n *\n * @return {any|undefined}\n *\n * @throws {Error} - Will throw if the graph is multi.\n * @throws {Error} - Will throw if source or target doesn't exist.\n */\n edge(source, target) {\n if (this.multi)\n throw new UsageGraphError(\n 'Graph.edge: this method is irrelevant with multigraphs since there might be multiple edges between source & target. See #.edges instead.'\n );\n\n source = '' + source;\n target = '' + target;\n\n const sourceData = this._nodes.get(source);\n\n if (!sourceData)\n throw new NotFoundGraphError(\n `Graph.edge: could not find the \"${source}\" source node in the graph.`\n );\n\n if (!this._nodes.has(target))\n throw new NotFoundGraphError(\n `Graph.edge: could not find the \"${target}\" target node in the graph.`\n );\n\n const edgeData =\n (sourceData.out && sourceData.out[target]) ||\n (sourceData.undirected && sourceData.undirected[target]) ||\n undefined;\n\n if (edgeData) return edgeData.key;\n }\n\n /**\n * Method returning whether two nodes are directed neighbors.\n *\n * @param {any} node - The node's key.\n * @param {any} neighbor - The neighbor's key.\n * @return {boolean}\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n areDirectedNeighbors(node, neighbor) {\n node = '' + node;\n neighbor = '' + neighbor;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.areDirectedNeighbors: could not find the \"${node}\" node in the graph.`\n );\n\n if (this.type === 'undirected') return false;\n\n return neighbor in nodeData.in || neighbor in nodeData.out;\n }\n\n /**\n * Method returning whether two nodes are out neighbors.\n *\n * @param {any} node - The node's key.\n * @param {any} neighbor - The neighbor's key.\n * @return {boolean}\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n areOutNeighbors(node, neighbor) {\n node = '' + node;\n neighbor = '' + neighbor;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.areOutNeighbors: could not find the \"${node}\" node in the graph.`\n );\n\n if (this.type === 'undirected') return false;\n\n return neighbor in nodeData.out;\n }\n\n /**\n * Method returning whether two nodes are in neighbors.\n *\n * @param {any} node - The node's key.\n * @param {any} neighbor - The neighbor's key.\n * @return {boolean}\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n areInNeighbors(node, neighbor) {\n node = '' + node;\n neighbor = '' + neighbor;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.areInNeighbors: could not find the \"${node}\" node in the graph.`\n );\n\n if (this.type === 'undirected') return false;\n\n return neighbor in nodeData.in;\n }\n\n /**\n * Method returning whether two nodes are undirected neighbors.\n *\n * @param {any} node - The node's key.\n * @param {any} neighbor - The neighbor's key.\n * @return {boolean}\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n areUndirectedNeighbors(node, neighbor) {\n node = '' + node;\n neighbor = '' + neighbor;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.areUndirectedNeighbors: could not find the \"${node}\" node in the graph.`\n );\n\n if (this.type === 'directed') return false;\n\n return neighbor in nodeData.undirected;\n }\n\n /**\n * Method returning whether two nodes are neighbors.\n *\n * @param {any} node - The node's key.\n * @param {any} neighbor - The neighbor's key.\n * @return {boolean}\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n areNeighbors(node, neighbor) {\n node = '' + node;\n neighbor = '' + neighbor;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.areNeighbors: could not find the \"${node}\" node in the graph.`\n );\n\n if (this.type !== 'undirected') {\n if (neighbor in nodeData.in || neighbor in nodeData.out) return true;\n }\n\n if (this.type !== 'directed') {\n if (neighbor in nodeData.undirected) return true;\n }\n\n return false;\n }\n\n /**\n * Method returning whether two nodes are inbound neighbors.\n *\n * @param {any} node - The node's key.\n * @param {any} neighbor - The neighbor's key.\n * @return {boolean}\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n areInboundNeighbors(node, neighbor) {\n node = '' + node;\n neighbor = '' + neighbor;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.areInboundNeighbors: could not find the \"${node}\" node in the graph.`\n );\n\n if (this.type !== 'undirected') {\n if (neighbor in nodeData.in) return true;\n }\n\n if (this.type !== 'directed') {\n if (neighbor in nodeData.undirected) return true;\n }\n\n return false;\n }\n\n /**\n * Method returning whether two nodes are outbound neighbors.\n *\n * @param {any} node - The node's key.\n * @param {any} neighbor - The neighbor's key.\n * @return {boolean}\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n areOutboundNeighbors(node, neighbor) {\n node = '' + node;\n neighbor = '' + neighbor;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.areOutboundNeighbors: could not find the \"${node}\" node in the graph.`\n );\n\n if (this.type !== 'undirected') {\n if (neighbor in nodeData.out) return true;\n }\n\n if (this.type !== 'directed') {\n if (neighbor in nodeData.undirected) return true;\n }\n\n return false;\n }\n\n /**\n * Method returning the given node's in degree.\n *\n * @param {any} node - The node's key.\n * @return {number} - The node's in degree.\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n inDegree(node) {\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.inDegree: could not find the \"${node}\" node in the graph.`\n );\n\n if (this.type === 'undirected') return 0;\n\n return nodeData.inDegree;\n }\n\n /**\n * Method returning the given node's out degree.\n *\n * @param {any} node - The node's key.\n * @return {number} - The node's in degree.\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n outDegree(node) {\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.outDegree: could not find the \"${node}\" node in the graph.`\n );\n\n if (this.type === 'undirected') return 0;\n\n return nodeData.outDegree;\n }\n\n /**\n * Method returning the given node's directed degree.\n *\n * @param {any} node - The node's key.\n * @return {number} - The node's in degree.\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n directedDegree(node) {\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.directedDegree: could not find the \"${node}\" node in the graph.`\n );\n\n if (this.type === 'undirected') return 0;\n\n return nodeData.inDegree + nodeData.outDegree;\n }\n\n /**\n * Method returning the given node's undirected degree.\n *\n * @param {any} node - The node's key.\n * @return {number} - The node's in degree.\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n undirectedDegree(node) {\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.undirectedDegree: could not find the \"${node}\" node in the graph.`\n );\n\n if (this.type === 'directed') return 0;\n\n return nodeData.undirectedDegree;\n }\n\n /**\n * Method returning the given node's inbound degree.\n *\n * @param {any} node - The node's key.\n * @return {number} - The node's inbound degree.\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n inboundDegree(node) {\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.inboundDegree: could not find the \"${node}\" node in the graph.`\n );\n\n let degree = 0;\n\n if (this.type !== 'directed') {\n degree += nodeData.undirectedDegree;\n }\n\n if (this.type !== 'undirected') {\n degree += nodeData.inDegree;\n }\n\n return degree;\n }\n\n /**\n * Method returning the given node's outbound degree.\n *\n * @param {any} node - The node's key.\n * @return {number} - The node's outbound degree.\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n outboundDegree(node) {\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.outboundDegree: could not find the \"${node}\" node in the graph.`\n );\n\n let degree = 0;\n\n if (this.type !== 'directed') {\n degree += nodeData.undirectedDegree;\n }\n\n if (this.type !== 'undirected') {\n degree += nodeData.outDegree;\n }\n\n return degree;\n }\n\n /**\n * Method returning the given node's directed degree.\n *\n * @param {any} node - The node's key.\n * @return {number} - The node's degree.\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n degree(node) {\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.degree: could not find the \"${node}\" node in the graph.`\n );\n\n let degree = 0;\n\n if (this.type !== 'directed') {\n degree += nodeData.undirectedDegree;\n }\n\n if (this.type !== 'undirected') {\n degree += nodeData.inDegree + nodeData.outDegree;\n }\n\n return degree;\n }\n\n /**\n * Method returning the given node's in degree without considering self loops.\n *\n * @param {any} node - The node's key.\n * @return {number} - The node's in degree.\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n inDegreeWithoutSelfLoops(node) {\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.inDegreeWithoutSelfLoops: could not find the \"${node}\" node in the graph.`\n );\n\n if (this.type === 'undirected') return 0;\n\n return nodeData.inDegree - nodeData.directedLoops;\n }\n\n /**\n * Method returning the given node's out degree without considering self loops.\n *\n * @param {any} node - The node's key.\n * @return {number} - The node's in degree.\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n outDegreeWithoutSelfLoops(node) {\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.outDegreeWithoutSelfLoops: could not find the \"${node}\" node in the graph.`\n );\n\n if (this.type === 'undirected') return 0;\n\n return nodeData.outDegree - nodeData.directedLoops;\n }\n\n /**\n * Method returning the given node's directed degree without considering self loops.\n *\n * @param {any} node - The node's key.\n * @return {number} - The node's in degree.\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n directedDegreeWithoutSelfLoops(node) {\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.directedDegreeWithoutSelfLoops: could not find the \"${node}\" node in the graph.`\n );\n\n if (this.type === 'undirected') return 0;\n\n return nodeData.inDegree + nodeData.outDegree - nodeData.directedLoops * 2;\n }\n\n /**\n * Method returning the given node's undirected degree without considering self loops.\n *\n * @param {any} node - The node's key.\n * @return {number} - The node's in degree.\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n undirectedDegreeWithoutSelfLoops(node) {\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.undirectedDegreeWithoutSelfLoops: could not find the \"${node}\" node in the graph.`\n );\n\n if (this.type === 'directed') return 0;\n\n return nodeData.undirectedDegree - nodeData.undirectedLoops * 2;\n }\n\n /**\n * Method returning the given node's inbound degree without considering self loops.\n *\n * @param {any} node - The node's key.\n * @return {number} - The node's inbound degree.\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n inboundDegreeWithoutSelfLoops(node) {\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.inboundDegreeWithoutSelfLoops: could not find the \"${node}\" node in the graph.`\n );\n\n let degree = 0;\n let loops = 0;\n\n if (this.type !== 'directed') {\n degree += nodeData.undirectedDegree;\n loops += nodeData.undirectedLoops * 2;\n }\n\n if (this.type !== 'undirected') {\n degree += nodeData.inDegree;\n loops += nodeData.directedLoops;\n }\n\n return degree - loops;\n }\n\n /**\n * Method returning the given node's outbound degree without considering self loops.\n *\n * @param {any} node - The node's key.\n * @return {number} - The node's outbound degree.\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n outboundDegreeWithoutSelfLoops(node) {\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.outboundDegreeWithoutSelfLoops: could not find the \"${node}\" node in the graph.`\n );\n\n let degree = 0;\n let loops = 0;\n\n if (this.type !== 'directed') {\n degree += nodeData.undirectedDegree;\n loops += nodeData.undirectedLoops * 2;\n }\n\n if (this.type !== 'undirected') {\n degree += nodeData.outDegree;\n loops += nodeData.directedLoops;\n }\n\n return degree - loops;\n }\n\n /**\n * Method returning the given node's directed degree without considering self loops.\n *\n * @param {any} node - The node's key.\n * @return {number} - The node's degree.\n *\n * @throws {Error} - Will throw if the node isn't in the graph.\n */\n degreeWithoutSelfLoops(node) {\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.degreeWithoutSelfLoops: could not find the \"${node}\" node in the graph.`\n );\n\n let degree = 0;\n let loops = 0;\n\n if (this.type !== 'directed') {\n degree += nodeData.undirectedDegree;\n loops += nodeData.undirectedLoops * 2;\n }\n\n if (this.type !== 'undirected') {\n degree += nodeData.inDegree + nodeData.outDegree;\n loops += nodeData.directedLoops * 2;\n }\n\n return degree - loops;\n }\n\n /**\n * Method returning the given edge's source.\n *\n * @param {any} edge - The edge's key.\n * @return {any} - The edge's source.\n *\n * @throws {Error} - Will throw if the edge isn't in the graph.\n */\n source(edge) {\n edge = '' + edge;\n\n const data = this._edges.get(edge);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.source: could not find the \"${edge}\" edge in the graph.`\n );\n\n return data.source.key;\n }\n\n /**\n * Method returning the given edge's target.\n *\n * @param {any} edge - The edge's key.\n * @return {any} - The edge's target.\n *\n * @throws {Error} - Will throw if the edge isn't in the graph.\n */\n target(edge) {\n edge = '' + edge;\n\n const data = this._edges.get(edge);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.target: could not find the \"${edge}\" edge in the graph.`\n );\n\n return data.target.key;\n }\n\n /**\n * Method returning the given edge's extremities.\n *\n * @param {any} edge - The edge's key.\n * @return {array} - The edge's extremities.\n *\n * @throws {Error} - Will throw if the edge isn't in the graph.\n */\n extremities(edge) {\n edge = '' + edge;\n\n const edgeData = this._edges.get(edge);\n\n if (!edgeData)\n throw new NotFoundGraphError(\n `Graph.extremities: could not find the \"${edge}\" edge in the graph.`\n );\n\n return [edgeData.source.key, edgeData.target.key];\n }\n\n /**\n * Given a node & an edge, returns the other extremity of the edge.\n *\n * @param {any} node - The node's key.\n * @param {any} edge - The edge's key.\n * @return {any} - The related node.\n *\n * @throws {Error} - Will throw if the edge isn't in the graph or if the\n * edge & node are not related.\n */\n opposite(node, edge) {\n node = '' + node;\n edge = '' + edge;\n\n const data = this._edges.get(edge);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.opposite: could not find the \"${edge}\" edge in the graph.`\n );\n\n const source = data.source.key;\n const target = data.target.key;\n\n if (node === source) return target;\n if (node === target) return source;\n\n throw new NotFoundGraphError(\n `Graph.opposite: the \"${node}\" node is not attached to the \"${edge}\" edge (${source}, ${target}).`\n );\n }\n\n /**\n * Returns whether the given edge has the given node as extremity.\n *\n * @param {any} edge - The edge's key.\n * @param {any} node - The node's key.\n * @return {boolean} - The related node.\n *\n * @throws {Error} - Will throw if either the node or the edge isn't in the graph.\n */\n hasExtremity(edge, node) {\n edge = '' + edge;\n node = '' + node;\n\n const data = this._edges.get(edge);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.hasExtremity: could not find the \"${edge}\" edge in the graph.`\n );\n\n return data.source.key === node || data.target.key === node;\n }\n\n /**\n * Method returning whether the given edge is undirected.\n *\n * @param {any} edge - The edge's key.\n * @return {boolean}\n *\n * @throws {Error} - Will throw if the edge isn't in the graph.\n */\n isUndirected(edge) {\n edge = '' + edge;\n\n const data = this._edges.get(edge);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.isUndirected: could not find the \"${edge}\" edge in the graph.`\n );\n\n return data.undirected;\n }\n\n /**\n * Method returning whether the given edge is directed.\n *\n * @param {any} edge - The edge's key.\n * @return {boolean}\n *\n * @throws {Error} - Will throw if the edge isn't in the graph.\n */\n isDirected(edge) {\n edge = '' + edge;\n\n const data = this._edges.get(edge);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.isDirected: could not find the \"${edge}\" edge in the graph.`\n );\n\n return !data.undirected;\n }\n\n /**\n * Method returning whether the given edge is a self loop.\n *\n * @param {any} edge - The edge's key.\n * @return {boolean}\n *\n * @throws {Error} - Will throw if the edge isn't in the graph.\n */\n isSelfLoop(edge) {\n edge = '' + edge;\n\n const data = this._edges.get(edge);\n\n if (!data)\n throw new NotFoundGraphError(\n `Graph.isSelfLoop: could not find the \"${edge}\" edge in the graph.`\n );\n\n return data.source === data.target;\n }\n\n /**---------------------------------------------------------------------------\n * Mutation\n **---------------------------------------------------------------------------\n */\n\n /**\n * Method used to add a node to the graph.\n *\n * @param {any} node - The node.\n * @param {object} [attributes] - Optional attributes.\n * @return {any} - The node.\n *\n * @throws {Error} - Will throw if the given node already exist.\n * @throws {Error} - Will throw if the given attributes are not an object.\n */\n addNode(node, attributes) {\n const nodeData = addNode(this, node, attributes);\n\n return nodeData.key;\n }\n\n /**\n * Method used to merge a node into the graph.\n *\n * @param {any} node - The node.\n * @param {object} [attributes] - Optional attributes.\n * @return {any} - The node.\n */\n mergeNode(node, attributes) {\n if (attributes && !isPlainObject(attributes))\n throw new InvalidArgumentsGraphError(\n `Graph.mergeNode: invalid attributes. Expecting an object but got \"${attributes}\"`\n );\n\n // String coercion\n node = '' + node;\n attributes = attributes || {};\n\n // If the node already exists, we merge the attributes\n let data = this._nodes.get(node);\n\n if (data) {\n if (attributes) {\n assign(data.attributes, attributes);\n\n this.emit('nodeAttributesUpdated', {\n type: 'merge',\n key: node,\n attributes: data.attributes,\n data: attributes\n });\n }\n return [node, false];\n }\n\n data = new this.NodeDataClass(node, attributes);\n\n // Adding the node to internal register\n this._nodes.set(node, data);\n\n // Emitting\n this.emit('nodeAdded', {\n key: node,\n attributes\n });\n\n return [node, true];\n }\n\n /**\n * Method used to add a node if it does not exist in the graph or else to\n * update its attributes using a function.\n *\n * @param {any} node - The node.\n * @param {function} [updater] - Optional updater function.\n * @return {any} - The node.\n */\n updateNode(node, updater) {\n if (updater && typeof updater !== 'function')\n throw new InvalidArgumentsGraphError(\n `Graph.updateNode: invalid updater function. Expecting a function but got \"${updater}\"`\n );\n\n // String coercion\n node = '' + node;\n\n // If the node already exists, we update the attributes\n let data = this._nodes.get(node);\n\n if (data) {\n if (updater) {\n const oldAttributes = data.attributes;\n data.attributes = updater(oldAttributes);\n\n this.emit('nodeAttributesUpdated', {\n type: 'replace',\n key: node,\n attributes: data.attributes\n });\n }\n return [node, false];\n }\n\n const attributes = updater ? updater({}) : {};\n\n data = new this.NodeDataClass(node, attributes);\n\n // Adding the node to internal register\n this._nodes.set(node, data);\n\n // Emitting\n this.emit('nodeAdded', {\n key: node,\n attributes\n });\n\n return [node, true];\n }\n\n /**\n * Method used to drop a single node & all its attached edges from the graph.\n *\n * @param {any} node - The node.\n * @return {Graph}\n *\n * @throws {Error} - Will throw if the node doesn't exist.\n */\n dropNode(node) {\n node = '' + node;\n\n const nodeData = this._nodes.get(node);\n\n if (!nodeData)\n throw new NotFoundGraphError(\n `Graph.dropNode: could not find the \"${node}\" node in the graph.`\n );\n\n let edgeData;\n\n // Removing attached edges\n // NOTE: we could be faster here, but this is such a pain to maintain\n if (this.type !== 'undirected') {\n for (const neighbor in nodeData.out) {\n edgeData = nodeData.out[neighbor];\n\n do {\n dropEdgeFromData(this, edgeData);\n edgeData = edgeData.next;\n } while (edgeData);\n }\n\n for (const neighbor in nodeData.in) {\n edgeData = nodeData.in[neighbor];\n\n do {\n dropEdgeFromData(this, edgeData);\n edgeData = edgeData.next;\n } while (edgeData);\n }\n }\n\n if (this.type !== 'directed') {\n for (const neighbor in nodeData.undirected) {\n edgeData = nodeData.undirected[neighbor];\n\n do {\n dropEdgeFromData(this, edgeData);\n edgeData = edgeData.next;\n } while (edgeData);\n }\n }\n\n // Dropping the node from the register\n this._nodes.delete(node);\n\n // Emitting\n this.emit('nodeDropped', {\n key: node,\n attributes: nodeData.attributes\n });\n }\n\n /**\n * Method used to drop a single edge from the graph.\n *\n * Arity 1:\n * @param {any} edge - The edge.\n *\n * Arity 2:\n * @param {any} source - Source node.\n * @param {any} target - Target node.\n *\n * @return {Graph}\n *\n * @throws {Error} - Will throw if the edge doesn't exist.\n */\n dropEdge(edge) {\n let edgeData;\n\n if (arguments.length > 1) {\n const source = '' + arguments[0];\n const target = '' + arguments[1];\n\n edgeData = getMatchingEdge(this, source, target, this.type);\n\n if (!edgeData)\n throw new NotFoundGraphError(\n `Graph.dropEdge: could not find the \"${source}\" -> \"${target}\" edge in the graph.`\n );\n } else {\n edge = '' + edge;\n\n edgeData = this._edges.get(edge);\n\n if (!edgeData)\n throw new NotFoundGraphError(\n `Graph.dropEdge: could not find the \"${edge}\" edge in the graph.`\n );\n }\n\n dropEdgeFromData(this, edgeData);\n\n return this;\n }\n\n /**\n * Method used to drop a single directed edge from the graph.\n *\n * @param {any} source - Source node.\n * @param {any} target - Target node.\n *\n * @return {Graph}\n *\n * @throws {Error} - Will throw if the edge doesn't exist.\n */\n dropDirectedEdge(source, target) {\n if (arguments.length < 2)\n throw new UsageGraphError(\n 'Graph.dropDirectedEdge: it does not make sense to try and drop a directed edge by key. What if the edge with this key is undirected? Use #.dropEdge for this purpose instead.'\n );\n\n if (this.multi)\n throw new UsageGraphError(\n 'Graph.dropDirectedEdge: cannot use a {source,target} combo when dropping an edge in a MultiGraph since we cannot infer the one you want to delete as there could be multiple ones.'\n );\n\n source = '' + source;\n target = '' + target;\n\n const edgeData = getMatchingEdge(this, source, target, 'directed');\n\n if (!edgeData)\n throw new NotFoundGraphError(\n `Graph.dropDirectedEdge: could not find a \"${source}\" -> \"${target}\" edge in the graph.`\n );\n\n dropEdgeFromData(this, edgeData);\n\n return this;\n }\n\n /**\n * Method used to drop a single undirected edge from the graph.\n *\n * @param {any} source - Source node.\n * @param {any} target - Target node.\n *\n * @return {Graph}\n *\n * @throws {Error} - Will throw if the edge doesn't exist.\n */\n dropUndirectedEdge(source, target) {\n if (arguments.length < 2)\n throw new UsageGraphError(\n 'Graph.dropUndirectedEdge: it does not make sense to drop a directed edge by key. What if the edge with this key is undirected? Use #.dropEdge for this purpose instead.'\n );\n\n if (this.multi)\n throw new UsageGraphError(\n 'Graph.dropUndirectedEdge: cannot use a {source,target} combo when dropping an edge in a MultiGraph since we cannot infer the one you want to delete as there could be multiple ones.'\n );\n\n const edgeData = getMatchingEdge(this, source, target, 'undirected');\n\n if (!edgeData)\n throw new NotFoundGraphError(\n `Graph.dropUndirectedEdge: could not find a \"${source}\" -> \"${target}\" edge in the graph.`\n );\n\n dropEdgeFromData(this, edgeData);\n\n return this;\n }\n\n /**\n * Method used to remove every edge & every node from the graph.\n *\n * @return {Graph}\n */\n clear() {\n // Clearing edges\n this._edges.clear();\n\n // Clearing nodes\n this._nodes.clear();\n\n // Reset counters\n this._resetInstanceCounters();\n\n // Emitting\n this.emit('cleared');\n }\n\n /**\n * Method used to remove every edge from the graph.\n *\n * @return {Graph}\n */\n clearEdges() {\n // Clearing structure index\n const iterator = this._nodes.values();\n\n let step;\n\n while (((step = iterator.next()), step.done !== true)) {\n step.value.clear();\n }\n\n // Clearing edges\n this._edges.clear();\n\n // Reset counters\n this._resetInstanceCounters();\n\n // Emitting\n this.emit('edgesCleared');\n }\n\n /**---------------------------------------------------------------------------\n * Attributes-related methods\n **---------------------------------------------------------------------------\n */\n\n /**\n * Method returning the desired graph's attribute.\n *\n * @param {string} name - Name of the attribute.\n * @return {any}\n */\n getAttribute(name) {\n return this._attributes[name];\n }\n\n /**\n * Method returning the graph's attributes.\n *\n * @return {object}\n */\n getAttributes() {\n return this._attributes;\n }\n\n /**\n * Method returning whether the graph has the desired attribute.\n *\n * @param {string} name - Name of the attribute.\n * @return {boolean}\n */\n hasAttribute(name) {\n return this._attributes.hasOwnProperty(name);\n }\n\n /**\n * Method setting a value for the desired graph's attribute.\n *\n * @param {string} name - Name of the attribute.\n * @param {any} value - Value for the attribute.\n * @return {Graph}\n */\n setAttribute(name, value) {\n this._attributes[name] = value;\n\n // Emitting\n this.emit('attributesUpdated', {\n type: 'set',\n attributes: this._attributes,\n name\n });\n\n return this;\n }\n\n /**\n * Method using a function to update the desired graph's attribute's value.\n *\n * @param {string} name - Name of the attribute.\n * @param {function} updater - Function use to update the attribute's value.\n * @return {Graph}\n */\n updateAttribute(name, updater) {\n if (typeof updater !== 'function')\n throw new InvalidArgumentsGraphError(\n 'Graph.updateAttribute: updater should be a function.'\n );\n\n const value = this._attributes[name];\n\n this._attributes[name] = updater(value);\n\n // Emitting\n this.emit('attributesUpdated', {\n type: 'set',\n attributes: this._attributes,\n name\n });\n\n return this;\n }\n\n /**\n * Method removing the desired graph's attribute.\n *\n * @param {string} name - Name of the attribute.\n * @return {Graph}\n */\n removeAttribute(name) {\n delete this._attributes[name];\n\n // Emitting\n this.emit('attributesUpdated', {\n type: 'remove',\n attributes: this._attributes,\n name\n });\n\n return this;\n }\n\n /**\n * Method replacing the graph's attributes.\n *\n * @param {object} attributes - New attributes.\n * @return {Graph}\n *\n * @throws {Error} - Will throw if given attributes are not a plain object.\n */\n replaceAttributes(attributes) {\n if (!isPlainObject(attributes))\n throw new InvalidArgumentsGraphError(\n 'Graph.replaceAttributes: provided attributes are not a plain object.'\n );\n\n this._attributes = attributes;\n\n // Emitting\n this.emit('attributesUpdated', {\n type: 'replace',\n attributes: this._attributes\n });\n\n return this;\n }\n\n /**\n * Method merging the graph's attributes.\n *\n * @param {object} attributes - Attributes to merge.\n * @return {Graph}\n *\n * @throws {Error} - Will throw if given attributes are not a plain object.\n */\n mergeAttributes(attributes) {\n if (!isPlainObject(attributes))\n throw new InvalidArgumentsGraphError(\n 'Graph.mergeAttributes: provided attributes are not a plain object.'\n );\n\n assign(this._attributes, attributes);\n\n // Emitting\n this.emit('attributesUpdated', {\n type: 'merge',\n attributes: this._attributes,\n data: attributes\n });\n\n return this;\n }\n\n /**\n * Method updating the graph's attributes.\n *\n * @param {function} updater - Function used to update the attributes.\n * @return {Graph}\n *\n * @throws {Error} - Will throw if given updater is not a function.\n */\n updateAttributes(updater) {\n if (typeof updater !== 'function')\n throw new InvalidArgumentsGraphError(\n 'Graph.updateAttributes: provided updater is not a function.'\n );\n\n this._attributes = updater(this._attributes);\n\n // Emitting\n this.emit('attributesUpdated', {\n type: 'update',\n attributes: this._attributes\n });\n\n return this;\n }\n\n /**\n * Method used to update each node's attributes using the given function.\n *\n * @param {function} updater - Updater function to use.\n * @param {object} [hints] - Optional hints.\n */\n updateEachNodeAttributes(updater, hints) {\n if (typeof updater !== 'function')\n throw new InvalidArgumentsGraphError(\n 'Graph.updateEachNodeAttributes: expecting an updater function.'\n );\n\n if (hints && !validateHints(hints))\n throw new InvalidArgumentsGraphError(\n 'Graph.updateEachNodeAttributes: invalid hints. Expecting an object having the following shape: {attributes?: [string]}'\n );\n\n const iterator = this._nodes.values();\n\n let step, nodeData;\n\n while (((step = iterator.next()), step.done !== true)) {\n nodeData = step.value;\n nodeData.attributes = updater(nodeData.key, nodeData.attributes);\n }\n\n this.emit('eachNodeAttributesUpdated', {\n hints: hints ? hints : null\n });\n }\n\n /**\n * Method used to update each edge's attributes using the given function.\n *\n * @param {function} updater - Updater function to use.\n * @param {object} [hints] - Optional hints.\n */\n updateEachEdgeAttributes(updater, hints) {\n if (typeof updater !== 'function')\n throw new InvalidArgumentsGraphError(\n 'Graph.updateEachEdgeAttributes: expecting an updater function.'\n );\n\n if (hints && !validateHints(hints))\n throw new InvalidArgumentsGraphError(\n 'Graph.updateEachEdgeAttributes: invalid hints. Expecting an object having the following shape: {attributes?: [string]}'\n );\n\n const iterator = this._edges.values();\n\n let step, edgeData, sourceData, targetData;\n\n while (((step = iterator.next()), step.done !== true)) {\n edgeData = step.value;\n sourceData = edgeData.source;\n targetData = edgeData.target;\n\n edgeData.attributes = updater(\n edgeData.key,\n edgeData.attributes,\n sourceData.key,\n targetData.key,\n sourceData.attributes,\n targetData.attributes,\n edgeData.undirected\n );\n }\n\n this.emit('eachEdgeAttributesUpdated', {\n hints: hints ? hints : null\n });\n }\n\n /**---------------------------------------------------------------------------\n * Iteration-related methods\n **---------------------------------------------------------------------------\n */\n\n /**\n * Method iterating over the graph's adjacency using the given callback.\n *\n * @param {function} callback - Callback to use.\n */\n forEachAdjacencyEntry(callback) {\n if (typeof callback !== 'function')\n throw new InvalidArgumentsGraphError(\n 'Graph.forEachAdjacencyEntry: expecting a callback.'\n );\n\n forEachAdjacency(false, false, false, this, callback);\n }\n forEachAdjacencyEntryWithOrphans(callback) {\n if (typeof callback !== 'function')\n throw new InvalidArgumentsGraphError(\n 'Graph.forEachAdjacencyEntryWithOrphans: expecting a callback.'\n );\n\n forEachAdjacency(false, false, true, this, callback);\n }\n\n /**\n * Method iterating over the graph's assymetric adjacency using the given callback.\n *\n * @param {function} callback - Callback to use.\n */\n forEachAssymetricAdjacencyEntry(callback) {\n if (typeof callback !== 'function')\n throw new InvalidArgumentsGraphError(\n 'Graph.forEachAssymetricAdjacencyEntry: expecting a callback.'\n );\n\n forEachAdjacency(false, true, false, this, callback);\n }\n forEachAssymetricAdjacencyEntryWithOrphans(callback) {\n if (typeof callback !== 'function')\n throw new InvalidArgumentsGraphError(\n 'Graph.forEachAssymetricAdjacencyEntryWithOrphans: expecting a callback.'\n );\n\n forEachAdjacency(false, true, true, this, callback);\n }\n\n /**\n * Method returning the list of the graph's nodes.\n *\n * @return {array} - The nodes.\n */\n nodes() {\n if (typeof Array.from === 'function') return Array.from(this._nodes.keys());\n\n return take(this._nodes.keys(), this._nodes.size);\n }\n\n /**\n * Method iterating over the graph's nodes using the given callback.\n *\n * @param {function} callback - Callback (key, attributes, index).\n */\n forEachNode(callback) {\n if (typeof callback !== 'function')\n throw new InvalidArgumentsGraphError(\n 'Graph.forEachNode: expecting a callback.'\n );\n\n const iterator = this._nodes.values();\n\n let step, nodeData;\n\n while (((step = iterator.next()), step.done !== true)) {\n nodeData = step.value;\n callback(nodeData.key, nodeData.attributes);\n }\n }\n\n /**\n * Method iterating attempting to find a node matching the given predicate\n * function.\n *\n * @param {function} callback - Callback (key, attributes).\n */\n findNode(callback) {\n if (typeof callback !== 'function')\n throw new InvalidArgumentsGraphError(\n 'Graph.findNode: expecting a callback.'\n );\n\n const iterator = this._nodes.values();\n\n let step, nodeData;\n\n while (((step = iterator.next()), step.done !== true)) {\n nodeData = step.value;\n\n if (callback(nodeData.key, nodeData.attributes)) return nodeData.key;\n }\n\n return;\n }\n\n /**\n * Method mapping nodes.\n *\n * @param {function} callback - Callback (key, attributes).\n */\n mapNodes(callback) {\n if (typeof callback !== 'function')\n throw new InvalidArgumentsGraphError(\n 'Graph.mapNode: expecting a callback.'\n );\n\n const iterator = this._nodes.values();\n\n let step, nodeData;\n\n const result = new Array(this.order);\n let i = 0;\n\n while (((step = iterator.next()), step.done !== true)) {\n nodeData = step.value;\n result[i++] = callback(nodeData.key, nodeData.attributes);\n }\n\n return result;\n }\n\n /**\n * Method returning whether some node verify the given predicate.\n *\n * @param {function} callback - Callback (key, attributes).\n */\n someNode(callback) {\n if (typeof callback !== 'function')\n throw new InvalidArgumentsGraphError(\n 'Graph.someNode: expecting a callback.'\n );\n\n const iterator = this._nodes.values();\n\n let step, nodeData;\n\n while (((step = iterator.next()), step.done !== true)) {\n nodeData = step.value;\n\n if (callback(nodeData.key, nodeData.attributes)) return true;\n }\n\n return false;\n }\n\n /**\n * Method returning whether all node verify the given predicate.\n *\n * @param {function} callback - Callback (key, attributes).\n */\n everyNode(callback) {\n if (typeof callback !== 'function')\n throw new InvalidArgumentsGraphError(\n 'Graph.everyNode: expecting a callback.'\n );\n\n const iterator = this._nodes.values();\n\n let step, nodeData;\n\n while (((step = iterator.next()), step.done !== true)) {\n nodeData = step.value;\n\n if (!callback(nodeData.key, nodeData.attributes)) return false;\n }\n\n return true;\n }\n\n /**\n * Method filtering nodes.\n *\n * @param {function} callback - Callback (key, attributes).\n */\n filterNodes(callback) {\n if (typeof callback !== 'function')\n throw new InvalidArgumentsGraphError(\n 'Graph.filterNodes: expecting a callback.'\n );\n\n const iterator = this._nodes.values();\n\n let step, nodeData;\n\n const result = [];\n\n while (((step = iterator.next()), step.done !== true)) {\n nodeData = step.value;\n\n if (callback(nodeData.key, nodeData.attributes))\n result.push(nodeData.key);\n }\n\n return result;\n }\n\n /**\n * Method reducing nodes.\n *\n * @param {function} callback - Callback (accumulator, key, attributes).\n */\n reduceNodes(callback, initialValue) {\n if (typeof callback !== 'function')\n throw new InvalidArgumentsGraphError(\n 'Graph.reduceNodes: expecting a callback.'\n );\n\n if (arguments.length < 2)\n throw new InvalidArgumentsGraphError(\n 'Graph.reduceNodes: missing initial value. You must provide it because the callback takes more than one argument and we cannot infer the initial value from the first iteration, as you could with a simple array.'\n );\n\n let accumulator = initialValue;\n\n const iterator = this._nodes.values();\n\n let step, nodeData;\n\n while (((step = iterator.next()), step.done !== true)) {\n nodeData = step.value;\n accumulator = callback(accumulator, nodeData.key, nodeData.attributes);\n }\n\n return accumulator;\n }\n\n /**\n * Method returning an iterator over the graph's node entries.\n *\n * @return {Iterator}\n */\n nodeEntries() {\n const iterator = this._nodes.values();\n\n return new Iterator(() => {\n const step = iterator.next();\n\n if (step.done) return step;\n\n const data = step.value;\n\n return {\n value: {node: data.key, attributes: data.attributes},\n done: false\n };\n });\n }\n\n /**---------------------------------------------------------------------------\n * Serialization\n **---------------------------------------------------------------------------\n */\n\n /**\n * Method used to export the whole graph.\n *\n * @return {object} - The serialized graph.\n */\n export() {\n const nodes = new Array(this._nodes.size);\n\n let i = 0;\n\n this._nodes.forEach((data, key) => {\n nodes[i++] = serializeNode(key, data);\n });\n\n const edges = new Array(this._edges.size);\n\n i = 0;\n\n this._edges.forEach((data, key) => {\n edges[i++] = serializeEdge(this.type, key, data);\n });\n\n return {\n options: {\n type: this.type,\n multi: this.multi,\n allowSelfLoops: this.allowSelfLoops\n },\n attributes: this.getAttributes(),\n nodes,\n edges\n };\n }\n\n /**\n * Method used to import a serialized graph.\n *\n * @param {object|Graph} data - The serialized graph.\n * @param {boolean} merge - Whether to merge data.\n * @return {Graph} - Returns itself for chaining.\n */\n import(data, merge = false) {\n // Importing a Graph instance directly\n if (data instanceof Graph) {\n // Nodes\n data.forEachNode((n, a) => {\n if (merge) this.mergeNode(n, a);\n else this.addNode(n, a);\n });\n\n // Edges\n data.forEachEdge((e, a, s, t, _sa, _ta, u) => {\n if (merge) {\n if (u) this.mergeUndirectedEdgeWithKey(e, s, t, a);\n else this.mergeDirectedEdgeWithKey(e, s, t, a);\n } else {\n if (u) this.addUndirectedEdgeWithKey(e, s, t, a);\n else this.addDirectedEdgeWithKey(e, s, t, a);\n }\n });\n\n return this;\n }\n\n // Importing a serialized graph\n if (!isPlainObject(data))\n throw new InvalidArgumentsGraphError(\n 'Graph.import: invalid argument. Expecting a serialized graph or, alternatively, a Graph instance.'\n );\n\n if (data.attributes) {\n if (!isPlainObject(data.attributes))\n throw new InvalidArgumentsGraphError(\n 'Graph.import: invalid attributes. Expecting a plain object.'\n );\n\n if (merge) this.mergeAttributes(data.attributes);\n else this.replaceAttributes(data.attributes);\n }\n\n let i, l, list, node, edge;\n\n if (data.nodes) {\n list = data.nodes;\n\n if (!Array.isArray(list))\n throw new InvalidArgumentsGraphError(\n 'Graph.import: invalid nodes. Expecting an array.'\n );\n\n for (i = 0, l = list.length; i < l; i++) {\n node = list[i];\n\n // Validating\n validateSerializedNode(node);\n\n // Adding the node\n const {key, attributes} = node;\n\n if (merge) this.mergeNode(key, attributes);\n else this.addNode(key, attributes);\n }\n }\n\n if (data.edges) {\n let undirectedByDefault = false;\n\n if (this.type === 'undirected') {\n undirectedByDefault = true;\n }\n\n list = data.edges;\n\n if (!Array.isArray(list))\n throw new InvalidArgumentsGraphError(\n 'Graph.import: invalid edges. Expecting an array.'\n );\n\n for (i = 0, l = list.length; i < l; i++) {\n edge = list[i];\n\n // Validating\n validateSerializedEdge(edge);\n\n // Adding the edge\n const {\n source,\n target,\n attributes,\n undirected = undirectedByDefault\n } = edge;\n\n let method;\n\n if ('key' in edge) {\n method = merge\n ? undirected\n ? this.mergeUndirectedEdgeWithKey\n : this.mergeDirectedEdgeWithKey\n : undirected\n ? this.addUndirectedEdgeWithKey\n : this.addDirectedEdgeWithKey;\n\n method.call(this, edge.key, source, target, attributes);\n } else {\n method = merge\n ? undirected\n ? this.mergeUndirectedEdge\n : this.mergeDirectedEdge\n : undirected\n ? this.addUndirectedEdge\n : this.addDirectedEdge;\n\n method.call(this, source, target, attributes);\n }\n }\n }\n\n return this;\n }\n\n /**---------------------------------------------------------------------------\n * Utils\n **---------------------------------------------------------------------------\n */\n\n /**\n * Method returning a null copy of the graph, i.e. a graph without nodes\n * & edges but with the exact same options.\n *\n * @param {object} options - Options to merge with the current ones.\n * @return {Graph} - The null copy.\n */\n nullCopy(options) {\n const graph = new Graph(assign({}, this._options, options));\n graph.replaceAttributes(assign({}, this.getAttributes()));\n return graph;\n }\n\n /**\n * Method returning an empty copy of the graph, i.e. a graph without edges but\n * with the exact same options.\n *\n * @param {object} options - Options to merge with the current ones.\n * @return {Graph} - The empty copy.\n */\n emptyCopy(options) {\n const graph = this.nullCopy(options);\n\n this._nodes.forEach((nodeData, key) => {\n const attributes = assign({}, nodeData.attributes);\n\n // NOTE: no need to emit events since user cannot access the instance yet\n nodeData = new graph.NodeDataClass(key, attributes);\n graph._nodes.set(key, nodeData);\n });\n\n return graph;\n }\n\n /**\n * Method returning an exact copy of the graph.\n *\n * @param {object} options - Upgrade options.\n * @return {Graph} - The copy.\n */\n copy(options) {\n options = options || {};\n\n if (\n typeof options.type === 'string' &&\n options.type !== this.type &&\n options.type !== 'mixed'\n )\n throw new UsageGraphError(\n `Graph.copy: cannot create an incompatible copy from \"${this.type}\" type to \"${options.type}\" because this would mean losing information about the current graph.`\n );\n\n if (\n typeof options.multi === 'boolean' &&\n options.multi !== this.multi &&\n options.multi !== true\n )\n throw new UsageGraphError(\n 'Graph.copy: cannot create an incompatible copy by downgrading a multi graph to a simple one because this would mean losing information about the current graph.'\n );\n\n if (\n typeof options.allowSelfLoops === 'boolean' &&\n options.allowSelfLoops !== this.allowSelfLoops &&\n options.allowSelfLoops !== true\n )\n throw new UsageGraphError(\n 'Graph.copy: cannot create an incompatible copy from a graph allowing self loops to one that does not because this would mean losing information about the current graph.'\n );\n\n const graph = this.emptyCopy(options);\n\n const iterator = this._edges.values();\n\n let step, edgeData;\n\n while (((step = iterator.next()), step.done !== true)) {\n edgeData = step.value;\n\n // NOTE: no need to emit events since user cannot access the instance yet\n addEdge(\n graph,\n 'copy',\n false,\n edgeData.undirected,\n edgeData.key,\n edgeData.source.key,\n edgeData.target.key,\n assign({}, edgeData.attributes)\n );\n }\n\n return graph;\n }\n\n /**---------------------------------------------------------------------------\n * Known methods\n **---------------------------------------------------------------------------\n */\n\n /**\n * Method used by JavaScript to perform JSON serialization.\n *\n * @return {object} - The serialized graph.\n */\n toJSON() {\n return this.export();\n }\n\n /**\n * Method returning [object Graph].\n */\n toString() {\n return '[object Graph]';\n }\n\n /**\n * Method used internally by node's console to display a custom object.\n *\n * @return {object} - Formatted object representation of the graph.\n */\n inspect() {\n const nodes = {};\n this._nodes.forEach((data, key) => {\n nodes[key] = data.attributes;\n });\n\n const edges = {},\n multiIndex = {};\n\n this._edges.forEach((data, key) => {\n const direction = data.undirected ? '--' : '->';\n\n let label = '';\n\n let source = data.source.key;\n let target = data.target.key;\n let tmp;\n\n if (data.undirected && source > target) {\n tmp = source;\n source = target;\n target = tmp;\n }\n\n const desc = `(${source})${direction}(${target})`;\n\n if (!key.startsWith('geid_')) {\n label += `[${key}]: `;\n } else if (this.multi) {\n if (typeof multiIndex[desc] === 'undefined') {\n multiIndex[desc] = 0;\n } else {\n multiIndex[desc]++;\n }\n\n label += `${multiIndex[desc]}. `;\n }\n\n label += desc;\n\n edges[label] = data.attributes;\n });\n\n const dummy = {};\n\n for (const k in this) {\n if (\n this.hasOwnProperty(k) &&\n !EMITTER_PROPS.has(k) &&\n typeof this[k] !== 'function' &&\n typeof k !== 'symbol'\n )\n dummy[k] = this[k];\n }\n\n dummy.attributes = this._attributes;\n dummy.nodes = nodes;\n dummy.edges = edges;\n\n privateProperty(dummy, 'constructor', this.constructor);\n\n return dummy;\n }\n}\n\n/**\n * Attaching methods to the prototype.\n *\n * Here, we are attaching a wide variety of methods to the Graph class'\n * prototype when those are very numerous and when their creation is\n * abstracted.\n */\n\n/**\n * Attaching custom inspect method for node >= 10.\n */\nif (typeof Symbol !== 'undefined')\n Graph.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n Graph.prototype.inspect;\n\n/**\n * Related to edge addition.\n */\nEDGE_ADD_METHODS.forEach(method => {\n ['add', 'merge', 'update'].forEach(verb => {\n const name = method.name(verb);\n const fn = verb === 'add' ? addEdge : mergeEdge;\n\n if (method.generateKey) {\n Graph.prototype[name] = function (source, target, attributes) {\n return fn(\n this,\n name,\n true,\n (method.type || this.type) === 'undirected',\n null,\n source,\n target,\n attributes,\n verb === 'update'\n );\n };\n } else {\n Graph.prototype[name] = function (edge, source, target, attributes) {\n return fn(\n this,\n name,\n false,\n (method.type || this.type) === 'undirected',\n edge,\n source,\n target,\n attributes,\n verb === 'update'\n );\n };\n }\n });\n});\n\n/**\n * Attributes-related.\n */\nattachNodeAttributesMethods(Graph);\nattachEdgeAttributesMethods(Graph);\n\n/**\n * Edge iteration-related.\n */\nattachEdgeIterationMethods(Graph);\n\n/**\n * Neighbor iteration-related.\n */\nattachNeighborIterationMethods(Graph);\n","/**\n * Graphology Helper Classes\n * ==========================\n *\n * Building some higher-order classes instantiating the graph with\n * predefinite options.\n */\nimport {assign} from './utils';\nimport Graph from './graph';\n\nimport {\n InvalidArgumentsGraphError,\n NotFoundGraphError,\n UsageGraphError\n} from './errors';\n\n/**\n * Alternative constructors.\n */\nclass DirectedGraph extends Graph {\n constructor(options) {\n const finalOptions = assign({type: 'directed'}, options);\n\n if ('multi' in finalOptions && finalOptions.multi !== false)\n throw new InvalidArgumentsGraphError(\n 'DirectedGraph.from: inconsistent indication that the graph should be multi in given options!'\n );\n\n if (finalOptions.type !== 'directed')\n throw new InvalidArgumentsGraphError(\n 'DirectedGraph.from: inconsistent \"' +\n finalOptions.type +\n '\" type in given options!'\n );\n\n super(finalOptions);\n }\n}\nclass UndirectedGraph extends Graph {\n constructor(options) {\n const finalOptions = assign({type: 'undirected'}, options);\n\n if ('multi' in finalOptions && finalOptions.multi !== false)\n throw new InvalidArgumentsGraphError(\n 'UndirectedGraph.from: inconsistent indication that the graph should be multi in given options!'\n );\n\n if (finalOptions.type !== 'undirected')\n throw new InvalidArgumentsGraphError(\n 'UndirectedGraph.from: inconsistent \"' +\n finalOptions.type +\n '\" type in given options!'\n );\n\n super(finalOptions);\n }\n}\nclass MultiGraph extends Graph {\n constructor(options) {\n const finalOptions = assign({multi: true}, options);\n\n if ('multi' in finalOptions && finalOptions.multi !== true)\n throw new InvalidArgumentsGraphError(\n 'MultiGraph.from: inconsistent indication that the graph should be simple in given options!'\n );\n\n super(finalOptions);\n }\n}\nclass MultiDirectedGraph extends Graph {\n constructor(options) {\n const finalOptions = assign({type: 'directed', multi: true}, options);\n\n if ('multi' in finalOptions && finalOptions.multi !== true)\n throw new InvalidArgumentsGraphError(\n 'MultiDirectedGraph.from: inconsistent indication that the graph should be simple in given options!'\n );\n\n if (finalOptions.type !== 'directed')\n throw new InvalidArgumentsGraphError(\n 'MultiDirectedGraph.from: inconsistent \"' +\n finalOptions.type +\n '\" type in given options!'\n );\n\n super(finalOptions);\n }\n}\nclass MultiUndirectedGraph extends Graph {\n constructor(options) {\n const finalOptions = assign({type: 'undirected', multi: true}, options);\n\n if ('multi' in finalOptions && finalOptions.multi !== true)\n throw new InvalidArgumentsGraphError(\n 'MultiUndirectedGraph.from: inconsistent indication that the graph should be simple in given options!'\n );\n\n if (finalOptions.type !== 'undirected')\n throw new InvalidArgumentsGraphError(\n 'MultiUndirectedGraph.from: inconsistent \"' +\n finalOptions.type +\n '\" type in given options!'\n );\n\n super(finalOptions);\n }\n}\n\n/**\n * Attaching static #.from method to each of the constructors.\n */\nfunction attachStaticFromMethod(Class) {\n /**\n * Builds a graph from serialized data or another graph's data.\n *\n * @param {Graph|SerializedGraph} data - Hydratation data.\n * @param {object} [options] - Options.\n * @return {Class}\n */\n Class.from = function (data, options) {\n // Merging given options with serialized ones\n const finalOptions = assign({}, data.options, options);\n\n const instance = new Class(finalOptions);\n instance.import(data);\n\n return instance;\n };\n}\n\nattachStaticFromMethod(Graph);\nattachStaticFromMethod(DirectedGraph);\nattachStaticFromMethod(UndirectedGraph);\nattachStaticFromMethod(MultiGraph);\nattachStaticFromMethod(MultiDirectedGraph);\nattachStaticFromMethod(MultiUndirectedGraph);\n\nGraph.Graph = Graph;\nGraph.DirectedGraph = DirectedGraph;\nGraph.UndirectedGraph = UndirectedGraph;\nGraph.MultiGraph = MultiGraph;\nGraph.MultiDirectedGraph = MultiDirectedGraph;\nGraph.MultiUndirectedGraph = MultiUndirectedGraph;\n\nGraph.InvalidArgumentsGraphError = InvalidArgumentsGraphError;\nGraph.NotFoundGraphError = NotFoundGraphError;\nGraph.UsageGraphError = UsageGraphError;\n\nexport {\n Graph,\n DirectedGraph,\n UndirectedGraph,\n MultiGraph,\n MultiDirectedGraph,\n MultiUndirectedGraph\n};\n","/**\n * Graphology CommonJS Endoint\n * ============================\n *\n * Endpoint for CommonJS modules consumers.\n */\nimport {Graph} from './classes';\n\nexport default Graph;\n"],"names":["assignPolyfill","target","arguments","i","l","length","k","assign","Object","getMatchingEdge","graph","source","type","sourceData","_nodes","get","edge","out","undirected","isPlainObject","value","isEmpty","o","privateProperty","name","defineProperty","enumerable","configurable","writable","readOnlyProperty","descriptor","validateHints","hints","attributes","Array","isArray","incrementalIdStartingFromRandomByte","Math","floor","random","R","Reflect","ReflectApply","apply","receiver","args","Function","prototype","call","ReflectOwnKeys","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","ProcessEmitWarning","warning","console","warn","NumberIsNaN","Number","isNaN","EventEmitter","init","eventsModule","exports","events","once","_events","undefined","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","set","arg","RangeError","getPrototypeOf","create","setMaxListeners","n","_getMaxListeners","that","getMaxListeners","emit","push","doError","error","er","Error","err","message","context","handler","len","listeners","arrayClone","_addListener","prepend","m","existing","newListener","unshift","warned","w","String","emitter","count","addListener","on","prependListener","onceWrapper","fired","removeListener","wrapFn","_onceWrap","state","wrapped","bind","prependOnceListener","list","position","originalListener","shift","spliceOne","off","removeAllListeners","keys","key","_listeners","unwrap","evlistener","unwrapListeners","rawListeners","listenerCount","eventNames","arr","copy","index","pop","ret","Promise","resolve","reject","errorListener","resolver","slice","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","flags","addEventListener","wrapListener","removeEventListener","Iterator","next","Symbol","iterator","of","done","empty","fromSequence","sequence","is","support","ARRAY_BUFFER_SUPPORT","ArrayBuffer","SYMBOL_SUPPORT","require$$0","require$$1","iterOrNull","isView","iter","take","iterable","Infinity","array","step","GraphError","InvalidArgumentsGraphError","captureStackTrace","constructor","NotFoundGraphError","UsageGraphError","MixedNodeData","clear","inDegree","outDegree","undirectedDegree","undirectedLoops","directedLoops","DirectedNodeData","UndirectedNodeData","EdgeData","attach","outKey","inKey","attachMulti","adj","head","previous","detach","detachMulti","NODE","SOURCE","TARGET","OPPOSITE","findRelevantNodeData","method","mode","nodeOrEdge","nameOrEdge","add1","add2","nodeData","edgeData","arg1","arg2","_edges","attachNodeAttributeGetter","Class","data","attachNodeAttributesGetter","attachNodeAttributeChecker","hasOwnProperty","attachNodeAttributeSetter","attachNodeAttributeUpdater","updater","attachNodeAttributeRemover","attachNodeAttributesReplacer","attachNodeAttributesMerger","attachNodeAttributesUpdater","NODE_ATTRIBUTES_METHODS","element","attacher","attachNodeAttributesMethods","Graph","forEach","attachEdgeAttributeGetter","multi","attachEdgeAttributesGetter","attachEdgeAttributeChecker","attachEdgeAttributeSetter","attachEdgeAttributeUpdater","attachEdgeAttributeRemover","attachEdgeAttributesReplacer","attachEdgeAttributesMerger","attachEdgeAttributesUpdater","EDGE_ATTRIBUTES_METHODS","attachEdgeAttributesMethods","chain","iterables","current","EDGES_ITERATION","direction","forEachSimple","breakable","object","callback","avoid","shouldBreak","forEachMulti","createIterator","sourceAttributes","targetAttributes","forEachForKeySimple","targetData","forEachForKeyMulti","createIteratorForKey","createEdgeArray","size","from","undirectedSize","directedSize","mask","values","forEachEdge","shouldFilter","createEdgeIterator","forEachEdgeForNode","fn","found","createEdgeArrayForNode","edges","createEdgeIteratorForNode","forEachEdgeForPath","createEdgeArrayForPath","createEdgeIteratorForPath","attachEdgeArrayCreator","description","has","attachForEachEdge","forEachName","toUpperCase","mapName","result","e","ea","s","t","sa","ta","u","filterName","reduceName","initialValue","accumulator","attachFindEdge","findEdgeName","someName","everyName","attachEdgeIteratorCreator","originalName","attachEdgeIterationMethods","NEIGHBORS_ITERATION","CompositeSetWrapper","A","B","wrap","forEachInObjectOnce","visited","neighborData","forEachNeighbor","createNeighborArrayForNode","neighbors","createDedupedObjectIterator","neighbor","createNeighborIterator","attachNeighborArrayCreator","node","attachForEachNeighbor","a","attachFindNeighbor","capitalizedSingular","findName","attachNeighborIteratorCreator","iteratorName","attachNeighborIterationMethods","forEachAdjacency","assymetric","disconnectedNodes","hasEdges","serializeNode","serialized","serializeEdge","validateSerializedNode","validateSerializedEdge","INSTANCE_ID","TYPES","Set","EMITTER_PROPS","EDGE_ADD_METHODS","verb","generateKey","DEFAULTS","allowSelfLoops","addNode","NodeDataClass","unsafeAddNode","addEdge","mustGenerateKey","eventData","_edgeKeyGenerator","isSelfLoop","_undirectedSelfLoopCount","_directedSelfLoopCount","_undirectedSize","_directedSize","mergeEdge","asUpdater","alreadyExistingEdgeData","info","oldAttributes","sourceWasAdded","targetWasAdded","dropEdgeFromData","options","instancePrefix","edgeId","edgeKeyGenerator","availableEdgeKey","Map","prop","_options","_resetInstanceCounters","hasNode","hasDirectedEdge","hasUndirectedEdge","hasEdge","directedEdge","undirectedEdge","areDirectedNeighbors","areOutNeighbors","areInNeighbors","areUndirectedNeighbors","areNeighbors","areInboundNeighbors","areOutboundNeighbors","directedDegree","inboundDegree","degree","outboundDegree","inDegreeWithoutSelfLoops","outDegreeWithoutSelfLoops","directedDegreeWithoutSelfLoops","undirectedDegreeWithoutSelfLoops","inboundDegreeWithoutSelfLoops","loops","outboundDegreeWithoutSelfLoops","degreeWithoutSelfLoops","extremities","opposite","hasExtremity","isUndirected","isDirected","mergeNode","updateNode","dropNode","dropEdge","dropDirectedEdge","dropUndirectedEdge","clearEdges","getAttribute","_attributes","getAttributes","hasAttribute","setAttribute","updateAttribute","removeAttribute","replaceAttributes","mergeAttributes","updateAttributes","updateEachNodeAttributes","updateEachEdgeAttributes","forEachAdjacencyEntry","forEachAdjacencyEntryWithOrphans","forEachAssymetricAdjacencyEntry","forEachAssymetricAdjacencyEntryWithOrphans","nodes","forEachNode","findNode","mapNodes","order","someNode","everyNode","filterNodes","reduceNodes","nodeEntries","merge","_sa","_ta","mergeUndirectedEdgeWithKey","mergeDirectedEdgeWithKey","addUndirectedEdgeWithKey","addDirectedEdgeWithKey","undirectedByDefault","mergeUndirectedEdge","mergeDirectedEdge","addUndirectedEdge","addDirectedEdge","nullCopy","emptyCopy","toJSON","toString","inspect","multiIndex","label","tmp","desc","startsWith","dummy","DirectedGraph","finalOptions","UndirectedGraph","MultiGraph","MultiDirectedGraph","MultiUndirectedGraph","attachStaticFromMethod","instance"],"mappings":"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"}