Comparing version 4.0.0 to 4.1.0
@@ -9,3 +9,2 @@ /// <reference types="node" /> | ||
private db; | ||
private ipv4StartBit; | ||
private ipv4StartNodeNumber; | ||
@@ -16,2 +15,3 @@ private walker; | ||
get(ipAddress: string): T | null; | ||
getWithPrefixLength(ipAddress: string): [T | null, number]; | ||
private findAddressInTree; | ||
@@ -18,0 +18,0 @@ private resolveDataPointer; |
@@ -18,3 +18,3 @@ "use strict"; | ||
this.walker = walker_1.default(this.db, this.metadata.recordSize); | ||
[this.ipv4StartBit, this.ipv4StartNodeNumber] = this.ipv4Start(); | ||
this.ipv4StartNodeNumber = this.ipv4Start(); | ||
} | ||
@@ -26,21 +26,26 @@ load(db, opts) { | ||
this.walker = walker_1.default(this.db, this.metadata.recordSize); | ||
[this.ipv4StartBit, this.ipv4StartNodeNumber] = this.ipv4Start(); | ||
this.ipv4StartNodeNumber = this.ipv4Start(); | ||
} | ||
get(ipAddress) { | ||
const pointer = this.findAddressInTree(ipAddress); | ||
return pointer ? this.resolveDataPointer(pointer) : null; | ||
const [data] = this.getWithPrefixLength(ipAddress); | ||
return data; | ||
} | ||
getWithPrefixLength(ipAddress) { | ||
const [pointer, prefixLength] = this.findAddressInTree(ipAddress); | ||
const data = pointer ? this.resolveDataPointer(pointer) : null; | ||
return [data, prefixLength]; | ||
} | ||
findAddressInTree(ipAddress) { | ||
const rawAddress = ip_1.default.parse(ipAddress); | ||
const nodeCount = this.metadata.nodeCount; | ||
const bitLength = rawAddress.length * 8; | ||
let bit; | ||
let nodeNumber = 0; | ||
let offset; | ||
let ipStartBit = 0; | ||
let depth = 0; | ||
if (rawAddress.length === 4) { | ||
ipStartBit = this.ipv4StartBit; | ||
nodeNumber = this.ipv4StartNodeNumber; | ||
} | ||
for (let i = ipStartBit; i < this.metadata.treeDepth && nodeNumber < nodeCount; i++) { | ||
bit = ip_1.default.bitAt(rawAddress, i - ipStartBit); | ||
for (; depth < bitLength && nodeNumber < nodeCount; depth++) { | ||
bit = ip_1.default.bitAt(rawAddress, depth); | ||
offset = nodeNumber * this.metadata.nodeByteSize; | ||
@@ -50,5 +55,5 @@ nodeNumber = bit ? this.walker.right(offset) : this.walker.left(offset); | ||
if (nodeNumber > nodeCount) { | ||
return nodeNumber; | ||
return [nodeNumber, depth]; | ||
} | ||
return null; | ||
return [null, depth]; | ||
} | ||
@@ -61,3 +66,3 @@ resolveDataPointer(pointer) { | ||
if (this.metadata.ipVersion === 4) { | ||
return [0, 0]; | ||
return 0; | ||
} | ||
@@ -71,3 +76,3 @@ const nodeCount = this.metadata.nodeCount; | ||
} | ||
return [i, pointer]; | ||
return pointer; | ||
} | ||
@@ -74,0 +79,0 @@ } |
{ | ||
"name": "maxmind", | ||
"version": "4.0.0", | ||
"version": "4.1.0", | ||
"homepage": "https://github.com/runk/node-maxmind", | ||
@@ -23,19 +23,20 @@ "description": "IP lookup using Maxmind databases", | ||
"Afzaal Ameer @afzaalace", | ||
"Andrew N Golovkov @AndorCS" | ||
"Andrew N Golovkov @AndorCS", | ||
"Gregory Oschwald @oschwald" | ||
], | ||
"dependencies": { | ||
"tiny-lru": "6.0.1" | ||
"tiny-lru": "7.0.2" | ||
}, | ||
"devDependencies": { | ||
"@types/ip-address": "5.8.2", | ||
"@types/jest": "24.0.18", | ||
"@types/node": "10.14.17", | ||
"@types/sinon": "7.0.13", | ||
"ip-address": "6.1.0", | ||
"@types/jest": "24.0.22", | ||
"@types/node": "10.17.5", | ||
"@types/sinon": "7.5.0", | ||
"ip-address": "6.2.0", | ||
"jest": "24.9.0", | ||
"sinon": "7.4.1", | ||
"sinon": "8.0.2", | ||
"ts-jest": "24.0.2", | ||
"tslint": "5.19.0", | ||
"typescript": "3.6.2", | ||
"semantic-release": "15.13.28" | ||
"tslint": "5.20.1", | ||
"typescript": "3.7.4", | ||
"semantic-release": "15.13.30" | ||
}, | ||
@@ -42,0 +43,0 @@ "repository": { |
@@ -25,2 +25,4 @@ # node-maxmind [![Build Status](https://api.travis-ci.org/runk/node-maxmind.svg?branch=master)](https://travis-ci.org/runk/node-maxmind) | ||
console.log(lookup.get('66.6.44.4')); | ||
console.log(lookup.getWithPrefixLength('66.6.44.4')); | ||
}); | ||
@@ -30,2 +32,4 @@ | ||
console.log(lookup.get('66.6.44.4')); | ||
console.log(lookup.getWithPrefixLength('66.6.44.4')); | ||
}); | ||
@@ -41,2 +45,4 @@ ``` | ||
console.log(lookup.get('66.6.44.4')); // inferred type maxmind.CityResponse | ||
console.log(lookup.getWithPrefixLength('66.6.44.4')); // tuple with inferred type [maxmind.CityResponse|null, number] | ||
``` | ||
@@ -53,2 +59,4 @@ | ||
const city = lookup.get('8.8.8.8'); | ||
const [city2, prefixLength] = lookup.getWithPrefixLength('66.6.44.4'); | ||
``` | ||
@@ -55,0 +63,0 @@ |
Sorry, the diff of this file is not supported yet
55210
739
122
+ Addedtiny-lru@7.0.2(transitive)
- Removedtiny-lru@6.0.1(transitive)
Updatedtiny-lru@7.0.2