{"version":3,"sources":["jsdelivr-header.js","/npm/harbor@0.3.0/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACIA,IAAI,aAAe,QAAQ,UAAU,aACjC,SAAW,QAAQ,QAAQ,SAC3B,IAAM,QAAQ,OA2BlB,SAAS,OAAQ,EAAK,GACpB,KAAM,gBAAgB,QAAS,OAAO,IAAI,OAAO,EAAK,GACtD,aAAa,KAAK,MAClB,KAAK,MAAQ,CAAC,EACd,KAAK,IAAM,GAAO,IAClB,KAAK,IAAM,GAAO,GACpB;;;GA8CA,SAAS,OAAO,EAAM,GACpB,IAAI,EAAO,KAEX,GAAI,KAAK,MAAM,GACb,OAAO,EAAG,KAAM,KAAK,MAAM,IAG7B,UAAU,KAAK,KAAM,KAAK,KAAK,SAAU,EAAK,GAC5C,GAAI,EAAK,OAAO,EAAG,GACnB,EAAK,MAAM,GAAQ,EACnB,EAAK,KAAK,QAAS,EAAM,GACzB,EAAG,KAAM,EACX,GACF,CAyEA,SAAS,UAAW,EAAK,EAAK,GAC5B,IAAI,EAAO,KAQX,GANI,mBAAsB,IACxB,EAAK,EACL,EAAM,KAAK,MAIR,KAAK,QAAQ,QAAQ,GACxB,OAAO,QAAQ,UAAS,WACtB,UAAU,KAAK,IAAQ,EAAK,EAC9B,IAGF,IAAI,EAAS,IAAI,IAAI,OAGrB,EAAO,GAAG,SAAS,SAAU,GAC3B,GAAI,GAAO,EAET,OADA,EAAK,KAAK,QACH,EAAG,IAAI,MAAM,iCAGtB,UAAU,KAAK,IAAQ,EAAK,EAC9B,IAGA,EAAO,OAAO,GAAK,WACjB,EAAO,GAAG,SAAS,WACjB,EAAG,KAAM,EACX,IACA,EAAO,OACT,GACF;;;;AAjMA,OAAO,QAAU,OAiCjB,SAAS,OAAQ,cAYjB,OAAO,eAAe,OAAO,UAAW,UAAW,CACjD,IAAK,WACH,IAAI,EAAU,GACV,EAAO,OAAO,KAAK,KAAK,OACxB,EAAQ,KAAK,MAMjB,OAJA,EAAK,SAAQ,SAAU,GACrB,EAAQ,KAAK,EAAM,GACrB,IAEO,CACT,IA+CF,OAAO,UAAU,MAAQ,SAAU,EAAM,EAAM,GAC7C,IAAI,EAAO,KAEX,GAAI,mBAAsB,EACxB,OAAO,OAAO,KAAK,KAAM,EAAM,GAGjC,IAAI,EAAQ,SAAS,EAAM,IAC3B,OAAK,MAAM,IAAU,EAAQ,EACvB,KAAK,MAAM,GACN,EAAG,KAAM,KAAK,MAAM,SAG7B,UAAU,KAAK,KAAM,EAAO,GAAO,SAAU,EAAK,GAChD,GAAI,EAAK,OAAO,EAAG,GACnB,EAAK,MAAM,GAAQ,EACnB,EAAK,KAAK,QAAS,EAAM,GACzB,EAAG,KAAM,EACX,IAEO,EAAG,IAAI,MAAM,kBAExB,EAcA,OAAO,UAAU,QAAU,SAAU,GACnC,IAAI,EAAO,KAAK,MAAM,GAElB,WACK,KAAK,MAAM,GAClB,KAAK,KAAK,UAAW,EAAM,GAE/B","file":"/npm/harbor@0.3.0/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/harbor@0.3.0/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*!\n * Harbor\n * Copyright (c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * External module dependencies\n */\n\nvar EventEmitter = require('events').EventEmitter;\nvar inherits = require('util').inherits;\nvar net = require('net');\n\n/*!\n * Primary export - factory\n */\n\nmodule.exports = Harbor;\n\n/**\n * ## Harbor (min, max)\n *\n * Construct a port finding interface that\n * will retain a list of claimed ports within\n * a given `min` / `max` set.\n *\n * Events\n *\n * - `claim (name, port)` upon the claim of a port\n * - `release (name, port)` upon the release of a port\n * - `full ()` upon all in bounds being claimed\n *\n * @param {Number} lower bound inclusive\n * @param {Number} upper bound inclusive\n * @name Harbor (constructor)\n * @api public\n */\n\nfunction Harbor (min, max) {\n  if (!(this instanceof Harbor)) return new Harbor(min, max);\n  EventEmitter.call(this);\n  this.ports = {};\n  this.min = min || 2000;\n  this.max = max || 20000;\n}\n\n/*!\n * Inherits from EventEmitter\n */\n\ninherits(Harbor, EventEmitter);\n\n/**\n * ### .claimed\n *\n * Get an array of all claimed ports by this interface.\n *\n * @returns {Array} ports claimed\n * @name claimed\n * @api public\n */\n\nObject.defineProperty(Harbor.prototype, 'claimed', {\n  get: function () {\n    var claimed = [];\n    var keys = Object.keys(this.ports);\n    var ports = this.ports;\n\n    keys.forEach(function (name) {\n      claimed.push(ports[name]);\n    });\n\n    return claimed;\n  }\n});\n\n/**\n * ### _claim (name, cb)\n *\n * Find an available port from the pool of open\n * ports and claim it for a given name.\n *\n * @param {String} name\n * @param {Function} callback\n * @cb {Error|null}\n * @cb {Number} claimed port\n * @name _claim\n * @api private\n */\n\nfunction _claim(name, cb) {\n  var self = this;\n\n  if (this.ports[name]) {\n    return cb(null, this.ports[name]);\n  }\n\n  checkPort.call(this, this.min, function (err, port) {\n    if (err) return cb(err);\n    self.ports[name] = port;\n    self.emit('claim', name, port);\n    cb(null, port);\n  });\n};\n\n/**\n * ### .claim (name, cb)\n *\n * Find an available port from the pool of open\n * ports (or use a provided port) and claim it for a given name.\n *\n * @param {String} name\n * @param {Number} [port]\n * @param {Function} callback\n * @cb {Error|null}\n * @cb {Number} claimed port\n * @name claim\n * @api public\n */\n\nHarbor.prototype.claim = function (name, port, cb) {\n  var self = this;\n\n  if ('function' === typeof port) {\n    return _claim.call(this, name, port);\n  }\n\n  var _port = parseInt(port, 10);\n  if (!isNaN(_port) && _port > 0) {\n    if (this.ports[name]) {\n      return cb(null, this.ports[name]);\n    }\n\n    checkPort.call(this, _port, _port, function (err, port) {\n      if (err) return cb(err);\n      self.ports[name] = port;\n      self.emit('claim', name, port);\n      cb(null, port);\n    });\n  } else {\n    return cb(new Error('No valid port.'));\n  }\n};\n\n/**\n * ### .release (name)\n *\n * Indicate that the claimed port for `name`\n * is no longer is use and can be returned to\n * the available pool.\n *\n * @param {String} name\n * @name release\n * @api public\n */\n\nHarbor.prototype.release = function (name) {\n  var port = this.ports[name];\n\n  if (port) {\n    delete this.ports[name];\n    this.emit('release', name, port);\n  }\n};\n\n/**\n * # checkPort\n *\n * Will attempt to connect to a given port. If success,\n * will disconnect and pass that number to a callback.\n *\n * @param {Number} num Port to check\n * @param {Number} max Max port to check\n * @param {Function} callback\n */\n\nfunction checkPort (num, max, cb) {\n  var self = this;\n\n  if ('function' === typeof max) {\n    cb = max;\n    max = this.max;\n  }\n\n  // if already claimed, skip\n  if (~this.claimed.indexOf(num)) {\n    return process.nextTick(function () {\n      checkPort.call(self, ++num, cb);\n    });\n  }\n\n  var server = new net.Server();\n\n  // if error, we don't want this server\n  server.on('error', function (err) {\n    if (num == max) {\n      self.emit('full');\n      return cb(new Error('No ports available in range.'));\n    }\n\n    checkPort.call(self, ++num, cb);\n  });\n\n  // if listening, we want to disconnect and pass back port\n  server.listen(num, function () {\n    server.on('close', function () {\n      cb(null, num);\n    });\n    server.close();\n  });\n}\n"]}