{"version":3,"sources":["jsdelivr-header.js","/npm/ipip-coffee@1.0.9/lib/ipip.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,CCCA,WACE,IAAI,EAAmB,EAAM,EAAK,EAAI,EAEtC,EAAO,SAAS,GACd,IAAI,EAAQ,EASZ,GARmB,iBAAR,GACT,KAAK,UAAY,EACjB,KAAK,SAAW,EAAI,MAAM,KAAK,QAE/B,EAAM,GAAO,CAAC,EACd,KAAK,UAAY,EAAI,MAAQ,EAC7B,KAAK,SAAW,EAAI,SAAW,KAAK,UAAU,MAAM,KAAK,QAEtD,KAAK,SAAS,MAAM,YACvB,MAAM,IAAI,MAAM,4BAElB,EAAS,QAAQ,KAAO,KAAK,UAC7B,EAAS,EAAG,aAAa,KAAK,WAC9B,KAAK,QAAU,IAAI,EAAO,EAC5B,EAIA,EAAK,QAAQ,MAEb,EAAM,QAAQ,OAEd,EAAM,QAAQ,OAEd,EAAoB,QAAQ,QAAQ,KAAK,UAAW,KAAM,iBAQ1D,EAAK,UAAU,KAAO,WACpB,MAAiC,mBAAtB,KAAK,QAAQ,KACf,KAAK,QAAQ,OAEf,CAAC,CACV,EASA,EAAK,UAAU,GAAK,SAAS,EAAI,GAC/B,IAAI,EAAO,EAWX,GAVA,EAAQ,EACU,iBAAP,EACT,EAAQ,EACC,EAAI,OAAO,KACpB,EAAQ,EAAG,MAAM,KAAK,UAAU,KAAI,SAAS,EAAG,GAC9C,OAAO,GAAK,EAAI,CAClB,IAAG,QAAO,SAAS,EAAG,GACpB,OAAO,EAAI,CACb,MAAO,GAEL,MAAM,IAAU,GAAS,GAAK,EAAQ,WACxC,MAAM,IAAI,MAAM,uBAAyB,GAG3C,OADA,EAAS,KAAK,QAAQ,OAAO,GACtB,KAAK,MAAM,EAAQ,EAC5B,EAWA,EAAK,UAAU,OAAS,SAAS,EAAQ,EAAQ,GAC/C,IAAI,EAAS,EAYb,GAXA,EAAU,KACV,EAAQ,SAAS,EAAS,GACxB,EAAI,SAAS,GAAQ,SAAS,EAAK,GACjC,IAAI,EACJ,GAAI,EACF,OAAO,EAAO,GAEhB,EAAK,EAAU,QACf,EAAQ,EAAQ,GAAG,EAAI,GACzB,GACF,EACyB,IAArB,UAAU,OACZ,OAAO,IAAI,QAAQ,GACd,GAAyB,IAArB,UAAU,OAAc,CACjC,GAAsB,mBAAX,EAGJ,IAAsB,iBAAX,EAChB,OAAO,IAAI,QAAQ,GAEnB,MAAM,IAAI,MAAM,wBAClB,CANE,EAAW,EACX,EAAS,MAMb,MAAO,GAAI,UAAU,OAAS,EAC5B,MAAM,IAAI,MAAM,yBAElB,GAAM,SAAU,GACd,EAAS,KAAM,EAChB,IAAG,SAAS,GACX,EAAS,EACX,GACF,EAUA,EAAK,UAAU,MAAQ,SAAS,EAAO,GACrC,IAAI,EAKJ,GAJA,EAAS,GAAU,OACL,OAAV,IACF,EAAQ,KAAK,QAAQ,QAAQ,IAAI,OAAO,UAAU,QAAS,QAE9C,UAAX,EACF,OAAO,EACF,GAAe,SAAX,EAKT,OAJA,EAAO,CAAC,EACR,KAAK,QAAQ,QAAQ,SAAQ,SAAS,EAAK,GACzC,EAAK,GAAO,EAAM,IAAM,EAC1B,IACO,EAEP,MAAM,IAAI,MAAM,gBAEpB,EAEA,QAAQ,KAAO,CAEhB,GAAE,KAAK","file":"/npm/ipip-coffee@1.0.9/lib/ipip.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/ipip-coffee@1.0.9/lib/ipip.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// Generated by CoffeeScript 1.9.3\n\n/**\n * IPIP database reader\n * @param {Object|String} opt initialize options\n */\n\n(function() {\n  var DEFAULT_DATA_PATH, IPIP, dns, fs, net;\n\n  IPIP = function(opt) {\n    var Driver, buffer;\n    if (typeof opt === 'string') {\n      this._database = opt;\n      this._version = opt.split('.').pop();\n    } else {\n      opt = opt || {};\n      this._database = opt.data || DEFAULT_DATA_PATH;\n      this._version = opt.version || this._database.split('.').pop();\n    }\n    if (!this._version.match(/^datx?$/i)) {\n      throw new Error('Invalid database version');\n    }\n    Driver = require('./' + this._version);\n    buffer = fs.readFileSync(this._database);\n    this._driver = new Driver(buffer);\n  };\n\n  'use strict';\n\n  fs = require('fs');\n\n  dns = require('dns');\n\n  net = require('net');\n\n  DEFAULT_DATA_PATH = require('path').join(__dirname, '..', '17monipdb.dat');\n\n\n  /**\n   * get version of database\n   * @return {Object}    version\n   */\n\n  IPIP.prototype.info = function() {\n    if (typeof this._driver.info === 'function') {\n      return this._driver.info();\n    }\n    return {};\n  };\n\n\n  /**\n   * query information by ip address\n   * @param  {String} ip IPv4 address\n   * @return {Object|Array}    query result\n   */\n\n  IPIP.prototype.ip = function(ip, format) {\n    var ipInt, result;\n    ipInt = 0;\n    if (typeof ip === 'number') {\n      ipInt = ip;\n    } else if (net.isIPv4(ip)) {\n      ipInt = ip.split('.').reverse().map(function(v, i) {\n        return v << 8 * i;\n      }).reduce(function(a, b) {\n        return a + b;\n      }) >>> 0;\n    }\n    if (isNaN(ipInt) || ipInt <= 0 || ipInt > 0xFFFFFFFF) {\n      throw new Error('Invalid ip address: ' + ip);\n    }\n    result = this._driver.lookup(ipInt);\n    return this._wrap(result, format);\n  };\n\n\n  /**\n   * query information by domain\n   * @param  {String}   domain   website domain\n   * @param  {String}   format   format of the result, should be dict or\n   * @param  {Function} callback callback to receive result\n   * @return {Null}            [description]\n   */\n\n  IPIP.prototype.domain = function(domain, format, callback) {\n    var context, query;\n    context = this;\n    query = function(resolve, reject) {\n      dns.resolve4(domain, function(err, addresses) {\n        var ip;\n        if (err) {\n          return reject(err);\n        }\n        ip = addresses.shift();\n        resolve(context.ip(ip, format));\n      });\n    };\n    if (arguments.length === 1) {\n      return new Promise(query);\n    } else if (arguments.length === 2) {\n      if (typeof format === 'function') {\n        callback = format;\n        format = 'dict';\n      } else if (typeof format === 'string') {\n        return new Promise(query);\n      } else {\n        throw new Error('Invalid function call');\n      }\n    } else if (arguments.length > 3) {\n      throw new Error('Invalid function call');\n    }\n    query((function(result) {\n      callback(null, result);\n    }), function(err) {\n      callback(err);\n    });\n  };\n\n\n  /**\n   * wrap result in given format\n   * @param  {Object} result\n   * @param  {String} format\n   * @return {Object|Array}\n   */\n\n  IPIP.prototype._wrap = function(array, format) {\n    var dict;\n    format = format || 'dict';\n    if (array === null) {\n      array = this._driver.columns.map(String.prototype.valueOf, 'N/A');\n    }\n    if (format === 'array') {\n      return array;\n    } else if (format === 'dict') {\n      dict = {};\n      this._driver.columns.forEach(function(key, i) {\n        dict[key] = array[i] || '';\n      });\n      return dict;\n    } else {\n      throw new Error('Invalid param');\n    }\n  };\n\n  exports.IPIP = IPIP;\n\n}).call(this);\n"]}