{"version":3,"sources":["jsdelivr-header.js","/npm/geoip-lite-country@1.1.3/lib/geoip.js"],"names":[],"mappings":"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","file":"/npm/geoip-lite-country@1.1.3/lib/geoip.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/geoip-lite-country@1.1.3/lib/geoip.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 fs = require('fs');\nvar net = require('net');\nvar path = require('path');\n\nfs.existsSync = fs.existsSync || path.existsSync;\n\nvar utils = require('./utils');\nvar fsWatcher = require('./fsWatcher');\nvar async = require('async');\n\nvar watcherName = 'dataWatcher';\n\n\nvar geodatadir;\n\nif (typeof global.geodatadir === 'undefined'){\n    geodatadir = path.join(__dirname, '/../data/');\n} else {\n    geodatadir = global.geodatadir;\n}\n\nvar dataFiles = {\n    country: path.join(geodatadir, 'geoip-country.dat'),\n};\n\nvar privateRange4 = [\n[utils.aton4('10.0.0.0'), utils.aton4('10.255.255.255')],\n    [utils.aton4('172.16.0.0'), utils.aton4('172.31.255.255')],\n    [utils.aton4('192.168.0.0'), utils.aton4('192.168.255.255')]\n    ]\n\n    var cache4 = {\n        firstIP: null,\n        lastIP: null,\n        lastLine: 0,\n        locationBuffer: null,\n        locationRecordSize: 32,\n        mainBuffer: null,\n        recordSize: 12\n    };\n\nvar RECORD_SIZE = 10;\n\nfunction lookup4(ip) {\n    var fline = 0;\n    var floor = cache4.lastIP;\n    var cline = cache4.lastLine;\n    var ceil = cache4.firstIP;\n    var line;\n    var locId;\n\n    var buffer = cache4.mainBuffer;\n    var locBuffer = cache4.locationBuffer;\n    var privateRange = privateRange4;\n    var recordSize = cache4.recordSize;\n    var locRecordSize = cache4.locationRecordSize;\n\n    var i;\n\n    var geodata = {\n        range: '',\n        country: '',\n        region: '',\n    };\n\n    // outside IPv4 range\n    if (ip > cache4.lastIP || ip < cache4.firstIP) {\n        return null;\n    }\n\n    // private IP\n    for (i = 0; i < privateRange.length; i++) {\n        if (ip >= privateRange[i][0] && ip <= privateRange[i][1]) {\n            return null;\n        }\n    }\n\n    do {\n        line = Math.round((cline - fline) / 2) + fline;\n        floor = buffer.readUInt32BE(line * recordSize);\n        ceil  = buffer.readUInt32BE((line * recordSize) + 4);\n\n        if (floor <= ip && ceil >= ip) {\n            geodata.range = [floor, ceil];\n\n            if (recordSize === RECORD_SIZE) {\n                geodata.country = buffer.toString('utf8', (line * recordSize) + 8, (line * recordSize) + 10);\n            } else {\n                locId = buffer.readUInt32BE((line * recordSize) + 8) - 1;\n\n                geodata.country = locBuffer.toString('utf8', (locId * locRecordSize) + 0, (locId * locRecordSize) + 2).replace(/\\u0000.*/, '');\n                geodata.region = locBuffer.toString('utf8', (locId * locRecordSize) + 2, (locId * locRecordSize) + 4).replace(/\\u0000.*/, '');\n            }\n\n            return geodata;\n        } else if (fline === cline) {\n            return null;\n        } else if (fline === (cline - 1)) {\n            if (line === fline) {\n                fline = cline;\n            } else {\n                cline = fline;\n            }\n        } else if (floor > ip) {\n            cline = line;\n        } else if (ceil < ip) {\n            fline = line;\n        }\n    } while(1);\n}\n\n\nfunction preload(callback) {\n    var datFile;\n    var datSize;\n    var asyncCache = {\n        firstIP: null,\n        lastIP: null,\n        lastLine: 0,\n        locationBuffer: null,\n        locationRecordSize: 32,\n        mainBuffer: null,\n        recordSize: 12\n    };\n\n    //when the preload function receives a callback, do the task asynchronously\n    if (typeof arguments[0] === 'function') {\n        async.series([\n                function (cb) {\n                    fs.open(dataFiles.country, 'r', function (err, file) {\n                        if (err) {\n                            cb(err);\n                        } else {\n                            datFile = file;\n                            fs.fstat(datFile, function (err, stats) {\n                                datSize = stats.size;\n                                asyncCache.recordSize = RECORD_SIZE;\n\n                                cb();\n                            });\n                        }\n                    });\n                },\n                function () {\n                    asyncCache.mainBuffer = new Buffer(datSize);\n\n                    async.series([\n                        function (cb2) {\n                            fs.read(datFile, asyncCache.mainBuffer, 0, datSize, 0, cb2);\n                        },\n                        function (cb2) {\n                            fs.close(datFile, cb2);\n                        }\n                        ], function (err) {\n                            if (err) {\n                                //keep old cache\n                            } else {\n                                asyncCache.lastLine = (datSize / asyncCache.recordSize) - 1;\n                                asyncCache.lastIP = asyncCache.mainBuffer.readUInt32BE((asyncCache.lastLine * asyncCache.recordSize) + 4);\n                                cache4 = asyncCache;\n                            }\n                            callback(err);\n                        });\n                }\n        ]);\n    } else {\n\n        datFile = fs.openSync(dataFiles.country, 'r');\n        datSize = fs.fstatSync(datFile).size;\n        cache4.recordSize = RECORD_SIZE;\n\n        cache4.mainBuffer = new Buffer(datSize);\n        fs.readSync(datFile, cache4.mainBuffer, 0, datSize, 0);\n\n        fs.closeSync(datFile);\n\n        cache4.lastLine = (datSize / cache4.recordSize) - 1;\n        cache4.lastIP = cache4.mainBuffer.readUInt32BE((cache4.lastLine * cache4.recordSize) + 4);\n        cache4.firstIP = cache4.mainBuffer.readUInt32BE(0);\n    }\n}\n\n\nmodule.exports = {\n    cmp: utils.cmp,\n\n    lookup: function(ip) {\n        if (!ip) {\n            return null;\n        } else if (typeof ip === 'number') {\n            return lookup4(ip);\n        } else if (net.isIP(ip) === 4) {\n            return lookup4(utils.aton4(ip));\n        }\n\n        return null;\n    },\n\n    pretty: function(n) {\n        if (typeof n === 'string') {\n            return n;\n        } else if (typeof n === 'number') {\n            return utils.ntoa4(n);\n        }\n\n        return n;\n    },\n\n};\n\npreload();\n\n//lookup4 = gen_lookup('geoip-country.dat', 4);\n"]}