{"version":3,"sources":["jsdelivr-header.js","/npm/heimdalljs@0.2.6/dist/heimdalljs.cjs.js"],"names":[],"mappings":"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","file":"/npm/heimdalljs@0.2.6/dist/heimdalljs.cjs.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/heimdalljs@0.2.6/dist/heimdalljs.cjs.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var rsvp = require('rsvp');\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar Cookie = function () {\n  function Cookie(node, heimdall) {\n    classCallCheck(this, Cookie);\n\n    this._node = node;\n    this._restoreNode = node.parent;\n    this._heimdall = heimdall;\n    this._stopped = false;\n  }\n\n  createClass(Cookie, [{\n    key: \"stop\",\n    value: function stop() {\n      var monitor = void 0;\n\n      if (this._heimdall.current !== this._node) {\n        return;\n      } else if (this.stopped === true) {\n        return;\n      }\n\n      this._stopped = true;\n      this._heimdall._recordTime();\n      this._heimdall._session.current = this._restoreNode;\n    }\n  }, {\n    key: \"resume\",\n    value: function resume() {\n      if (this._stopped === false) {\n        return;\n      }\n\n      this._stopped = false;\n      this._restoreNode = this._heimdall.current;\n      this._heimdall._session.current = this._node;\n    }\n  }, {\n    key: \"stats\",\n    get: function get() {\n      return this._node.stats.own;\n    }\n  }]);\n  return Cookie;\n}();\n\nvar HeimdallNode = function () {\n  function HeimdallNode(heimdall, id, data) {\n    classCallCheck(this, HeimdallNode);\n\n    this._heimdall = heimdall;\n\n    this._id = heimdall.generateNextId();\n    this.id = id;\n\n    if (!(_typeof(this.id) === 'object' && this.id !== null && typeof this.id.name === 'string')) {\n      throw new TypeError('HeimdallNode#id.name must be a string');\n    }\n\n    this.stats = {\n      own: data,\n      time: { self: 0 }\n    };\n\n    this._children = [];\n\n    this.parent = null;\n  }\n\n  createClass(HeimdallNode, [{\n    key: 'visitPreOrder',\n    value: function visitPreOrder(cb) {\n      cb(this);\n\n      for (var i = 0; i < this._children.length; i++) {\n        this._children[i].visitPreOrder(cb);\n      }\n    }\n  }, {\n    key: 'visitPostOrder',\n    value: function visitPostOrder(cb) {\n      for (var i = 0; i < this._children.length; i++) {\n        this._children[i].visitPostOrder(cb);\n      }\n\n      cb(this);\n    }\n  }, {\n    key: 'forEachChild',\n    value: function forEachChild(cb) {\n      for (var i = 0; i < this._children.length; ++i) {\n        cb(this._children[i]);\n      }\n    }\n  }, {\n    key: 'remove',\n    value: function remove() {\n      if (!this.parent) {\n        throw new Error('Cannot remove the root heimdalljs node.');\n      }\n      if (this._heimdall.current === this) {\n        throw new Error('Cannot remove an active heimdalljs node.');\n      }\n\n      return this.parent.removeChild(this);\n    }\n  }, {\n    key: 'toJSON',\n    value: function toJSON() {\n      return {\n        _id: this._id,\n        id: this.id,\n        stats: this.stats,\n        children: this._children.map(function (child) {\n          return child._id;\n        })\n      };\n    }\n  }, {\n    key: 'toJSONSubgraph',\n    value: function toJSONSubgraph() {\n      var nodes = [];\n\n      this.visitPreOrder(function (node) {\n        return nodes.push(node.toJSON());\n      });\n\n      return nodes;\n    }\n  }, {\n    key: 'addChild',\n    value: function addChild(node) {\n      if (node.parent) {\n        throw new TypeError('Node ' + node._id + ' already has a parent.  Cannot add to ' + this._id);\n      }\n\n      this._children.push(node);\n\n      node.parent = this;\n    }\n  }, {\n    key: 'removeChild',\n    value: function removeChild(child) {\n      var index = this._children.indexOf(child);\n\n      if (index < 0) {\n        throw new Error('Child(' + child._id + ') not found in Parent(' + this._id + ').  Something is very wrong.');\n      }\n      this._children.splice(index, 1);\n\n      child.parent = null;\n\n      return child;\n    }\n  }, {\n    key: 'isRoot',\n    get: function get() {\n      return this.parent === null;\n    }\n  }]);\n  return HeimdallNode;\n}();\n\n// provides easily interceptable indirection.\nvar Dict = function () {\n  function Dict() {\n    classCallCheck(this, Dict);\n\n    this._storage = {};\n  }\n\n  createClass(Dict, [{\n    key: 'has',\n    value: function has(key) {\n      return key in this._storage;\n    }\n  }, {\n    key: 'get',\n    value: function get(key) {\n      return this._storage[key];\n    }\n  }, {\n    key: 'set',\n    value: function set(key, value) {\n      return this._storage[key] = value;\n    }\n  }, {\n    key: 'delete',\n    value: function _delete(key) {\n      delete this._storage[key];\n    }\n  }]);\n  return Dict;\n}();\n\nvar HeimdallSession = function () {\n  function HeimdallSession() {\n    classCallCheck(this, HeimdallSession);\n\n    this.reset();\n  }\n\n  createClass(HeimdallSession, [{\n    key: 'reset',\n    value: function reset() {\n      this._nextId = 0;\n      this.current = undefined;\n      this.root = null;\n      this.previousTimeNS = 0;\n      this.monitorSchemas = new Dict();\n      this.configs = new Dict();\n    }\n  }, {\n    key: 'generateNextId',\n    value: function generateNextId() {\n      return this._nextId++;\n    }\n  }]);\n  return HeimdallSession;\n}();\n\nvar timeNS = void 0;\n\n// adapted from\n// https://gist.github.com/paulirish/5438650\nvar now = void 0;\nif ((typeof performance === 'undefined' ? 'undefined' : _typeof(performance)) === 'object' && typeof performance.now === 'function') {\n  now = function now() {\n    return performance.now.call(performance);\n  };\n} else {\n  now = Date.now || function () {\n    return new Date().getTime();\n  };\n}\n\nvar dateOffset = now();\n\nfunction timeFromDate() {\n  var timeMS = now() - dateOffset;\n\n  return Math.floor(timeMS * 1e6);\n}\n\nfunction timeFromHRTime() {\n  var hrtime = process.hrtime();\n  return hrtime[0] * 1e9 + hrtime[1];\n}\n\nif ((typeof process === 'undefined' ? 'undefined' : _typeof(process)) === 'object' && typeof process.hrtime === 'function') {\n  timeNS = timeFromHRTime;\n} else {\n  timeNS = timeFromDate;\n}\n\nvar timeNS$1 = timeNS;\n\nvar Heimdall = function () {\n  function Heimdall(session) {\n    classCallCheck(this, Heimdall);\n\n    if (arguments.length < 1) {\n      session = new HeimdallSession();\n    }\n\n    this._session = session;\n    this._reset(false);\n  }\n\n  createClass(Heimdall, [{\n    key: '_reset',\n    value: function _reset(resetSession) {\n      if (resetSession !== false) {\n        this._session.reset();\n      }\n\n      if (!this.root) {\n        // The first heimdall to start will create the session and root.  Subsequent\n        // heimdall instances continue to use the existing graph\n        this.start('heimdall');\n        this._session.root = this._session.current;\n      }\n    }\n  }, {\n    key: 'start',\n    value: function start(name, Schema) {\n      var id = void 0;\n      var data = void 0;\n\n      if (typeof name === 'string') {\n        id = { name: name };\n      } else {\n        id = name;\n      }\n\n      if (typeof Schema === 'function') {\n        data = new Schema();\n      } else {\n        data = {};\n      }\n\n      this._recordTime();\n\n      var node = new HeimdallNode(this, id, data);\n      if (this.current) {\n        this.current.addChild(node);\n      }\n\n      this._session.current = node;\n\n      return new Cookie(node, this);\n    }\n  }, {\n    key: '_recordTime',\n    value: function _recordTime() {\n      var time = timeNS$1();\n\n      // always true except for root\n      if (this.current) {\n        var delta = time - this._session.previousTimeNS;\n        this.current.stats.time.self += delta;\n      }\n      this._session.previousTimeNS = time;\n    }\n  }, {\n    key: 'node',\n    value: function node(name, Schema, callback, context) {\n      if (arguments.length < 3) {\n        callback = Schema;\n        Schema = undefined;\n      }\n\n      var cookie = this.start(name, Schema);\n\n      // NOTE: only works in very specific scenarios, specifically promises must\n      // not escape their parents lifetime. In theory, promises could be augmented\n      // to support those more advanced scenarios.\n      return new rsvp.Promise(function (resolve) {\n        return resolve(callback.call(context, cookie._node.stats.own));\n      }).finally(function () {\n        return cookie.stop();\n      });\n    }\n  }, {\n    key: 'hasMonitor',\n    value: function hasMonitor(name) {\n      return this._session.monitorSchemas.has(name);\n    }\n  }, {\n    key: 'registerMonitor',\n    value: function registerMonitor(name, Schema) {\n      if (name === 'own' || name === 'time') {\n        throw new Error('Cannot register monitor at namespace \"' + name + '\".  \"own\" and \"time\" are reserved');\n      }\n      if (this.hasMonitor(name)) {\n        throw new Error('A monitor for \"' + name + '\" is already registered\"');\n      }\n\n      this._session.monitorSchemas.set(name, Schema);\n    }\n  }, {\n    key: 'statsFor',\n    value: function statsFor(name) {\n      var stats = this.current.stats;\n      var Schema = void 0;\n\n      if (!stats[name]) {\n        Schema = this._session.monitorSchemas.get(name);\n        if (!Schema) {\n          throw new Error('No monitor registered for \"' + name + '\"');\n        }\n        stats[name] = new Schema();\n      }\n\n      return stats[name];\n    }\n  }, {\n    key: 'configFor',\n    value: function configFor(name) {\n      var config = this._session.configs.get(name);\n\n      if (!config) {\n        config = this._session.configs.set(name, {});\n      }\n\n      return config;\n    }\n  }, {\n    key: 'toJSON',\n    value: function toJSON() {\n      return { nodes: this.root.toJSONSubgraph() };\n    }\n  }, {\n    key: 'visitPreOrder',\n    value: function visitPreOrder(cb) {\n      return this.root.visitPreOrder(cb);\n    }\n  }, {\n    key: 'visitPostOrder',\n    value: function visitPostOrder(cb) {\n      return this.root.visitPostOrder(cb);\n    }\n  }, {\n    key: 'generateNextId',\n    value: function generateNextId() {\n      return this._session.generateNextId();\n    }\n  }, {\n    key: 'current',\n    get: function get() {\n      return this._session.current;\n    }\n  }, {\n    key: 'root',\n    get: function get() {\n      return this._session.root;\n    }\n  }, {\n    key: 'stack',\n    get: function get() {\n      var stack = [];\n      var top = this.current;\n\n      while (top !== undefined && top !== this.root) {\n        stack.unshift(top);\n        top = top.parent;\n      }\n\n      return stack.map(function (node) {\n        return node.id.name;\n      });\n    }\n  }]);\n  return Heimdall;\n}();\n\nfunction setupSession(global) {\n\n  // The name of the property encodes the session/node compatibilty version\n  if (!global._heimdall_session_2) {\n    global._heimdall_session_2 = new HeimdallSession();\n  }\n}\n\nsetupSession(process);\n\nvar index = new Heimdall(process._heimdall_session_2);\n\nmodule.exports = index;\n"]}