├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── interval-tree.js ├── package-lock.json ├── package.json └── test └── test.js /.gitignore: -------------------------------------------------------------------------------- 1 | lib-cov 2 | *.seed 3 | *.log 4 | *.csv 5 | *.dat 6 | *.out 7 | *.pid 8 | *.gz 9 | 10 | pids 11 | logs 12 | results 13 | 14 | npm-debug.log 15 | node_modules/* 16 | *.DS_Store -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.8" 4 | - "0.10" 5 | before_install: 6 | - npm install -g npm@~1.4.6 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | The MIT License (MIT) 3 | 4 | Copyright (c) 2013 Mikola Lysenko 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | interval-tree-1d 2 | ================ 3 | A simple 1D interval tree. Supports O(log(n)) amortized updates and O(log(n)) queries. 4 | 5 | [![build status](https://secure.travis-ci.org/mikolalysenko/interval-tree-1d.png)](http://travis-ci.org/mikolalysenko/interval-tree-1d) 6 | 7 | # Example 8 | 9 | ```javascript 10 | var createIntervalTree = require("interval-tree-1d") 11 | 12 | //Create some random list of intervals 13 | var intervals = [ [1, 2], [-1, 0], [0.5, 1], [-10, 10] ] 14 | 15 | //Build tree 16 | var tree = createIntervalTree(intervals) 17 | 18 | //Find all intervals containing query point 0.7 19 | console.log("querying point:", 0.7) 20 | tree.queryPoint(0.7, function(interval) { 21 | console.log(interval) 22 | }) 23 | ``` 24 | 25 | # API 26 | 27 | ```javascript 28 | var createIntervalTree = require("interval-tree-1d") 29 | ``` 30 | 31 | ## Constructor 32 | 33 | ### `var tree = createIntervalTree(intervals)` 34 | Constructs an interval tree given a list of intervals 35 | 36 | ## Properties 37 | 38 | ### `tree.count` 39 | Returns the number of items in the tree 40 | 41 | ### `tree.intervals` 42 | Returns a list of all the intervals in the tree 43 | 44 | ### `tree.insert(interval)` 45 | Adds an interval to the tree 46 | 47 | ### `tree.remove(interval)` 48 | Removes an interval from the tree 49 | 50 | ### `tree.queryPoint(p, visit(interval))` 51 | Visits all intervals containing the point p 52 | 53 | ### `tree.queryInterval(lo, hi, visit(interval))` 54 | Returns all intervals which intersect the interval `[lo, hi]` 55 | 56 | # Credits 57 | (c) 2013-2015 Mikola Lysenko. MIT License -------------------------------------------------------------------------------- /interval-tree.js: -------------------------------------------------------------------------------- 1 | "use strict" 2 | 3 | var bounds = require("binary-search-bounds") 4 | 5 | var NOT_FOUND = 0 6 | var SUCCESS = 1 7 | var EMPTY = 2 8 | 9 | module.exports = createWrapper 10 | 11 | function IntervalTreeNode(mid, left, right, leftPoints, rightPoints) { 12 | this.mid = mid 13 | this.left = left 14 | this.right = right 15 | this.leftPoints = leftPoints 16 | this.rightPoints = rightPoints 17 | this.count = (left ? left.count : 0) + (right ? right.count : 0) + leftPoints.length 18 | } 19 | 20 | var proto = IntervalTreeNode.prototype 21 | 22 | function copy(a, b) { 23 | a.mid = b.mid 24 | a.left = b.left 25 | a.right = b.right 26 | a.leftPoints = b.leftPoints 27 | a.rightPoints = b.rightPoints 28 | a.count = b.count 29 | } 30 | 31 | function rebuild(node, intervals) { 32 | var ntree = createIntervalTree(intervals) 33 | node.mid = ntree.mid 34 | node.left = ntree.left 35 | node.right = ntree.right 36 | node.leftPoints = ntree.leftPoints 37 | node.rightPoints = ntree.rightPoints 38 | node.count = ntree.count 39 | } 40 | 41 | function rebuildWithInterval(node, interval) { 42 | var intervals = node.intervals([]) 43 | intervals.push(interval) 44 | rebuild(node, intervals) 45 | } 46 | 47 | function rebuildWithoutInterval(node, interval) { 48 | var intervals = node.intervals([]) 49 | var idx = intervals.indexOf(interval) 50 | if(idx < 0) { 51 | return NOT_FOUND 52 | } 53 | intervals.splice(idx, 1) 54 | rebuild(node, intervals) 55 | return SUCCESS 56 | } 57 | 58 | proto.intervals = function(result) { 59 | result.push.apply(result, this.leftPoints) 60 | if(this.left) { 61 | this.left.intervals(result) 62 | } 63 | if(this.right) { 64 | this.right.intervals(result) 65 | } 66 | return result 67 | } 68 | 69 | proto.insert = function(interval) { 70 | var weight = this.count - this.leftPoints.length 71 | this.count += 1 72 | if(interval[1] < this.mid) { 73 | if(this.left) { 74 | if(4*(this.left.count+1) > 3*(weight+1)) { 75 | rebuildWithInterval(this, interval) 76 | } else { 77 | this.left.insert(interval) 78 | } 79 | } else { 80 | this.left = createIntervalTree([interval]) 81 | } 82 | } else if(interval[0] > this.mid) { 83 | if(this.right) { 84 | if(4*(this.right.count+1) > 3*(weight+1)) { 85 | rebuildWithInterval(this, interval) 86 | } else { 87 | this.right.insert(interval) 88 | } 89 | } else { 90 | this.right = createIntervalTree([interval]) 91 | } 92 | } else { 93 | var l = bounds.ge(this.leftPoints, interval, compareBegin) 94 | var r = bounds.ge(this.rightPoints, interval, compareEnd) 95 | this.leftPoints.splice(l, 0, interval) 96 | this.rightPoints.splice(r, 0, interval) 97 | } 98 | } 99 | 100 | proto.remove = function(interval) { 101 | var weight = this.count - this.leftPoints 102 | if(interval[1] < this.mid) { 103 | if(!this.left) { 104 | return NOT_FOUND 105 | } 106 | var rw = this.right ? this.right.count : 0 107 | if(4 * rw > 3 * (weight-1)) { 108 | return rebuildWithoutInterval(this, interval) 109 | } 110 | var r = this.left.remove(interval) 111 | if(r === EMPTY) { 112 | this.left = null 113 | this.count -= 1 114 | return SUCCESS 115 | } else if(r === SUCCESS) { 116 | this.count -= 1 117 | } 118 | return r 119 | } else if(interval[0] > this.mid) { 120 | if(!this.right) { 121 | return NOT_FOUND 122 | } 123 | var lw = this.left ? this.left.count : 0 124 | if(4 * lw > 3 * (weight-1)) { 125 | return rebuildWithoutInterval(this, interval) 126 | } 127 | var r = this.right.remove(interval) 128 | if(r === EMPTY) { 129 | this.right = null 130 | this.count -= 1 131 | return SUCCESS 132 | } else if(r === SUCCESS) { 133 | this.count -= 1 134 | } 135 | return r 136 | } else { 137 | if(this.count === 1) { 138 | if(this.leftPoints[0] === interval) { 139 | return EMPTY 140 | } else { 141 | return NOT_FOUND 142 | } 143 | } 144 | if(this.leftPoints.length === 1 && this.leftPoints[0] === interval) { 145 | if(this.left && this.right) { 146 | var p = this 147 | var n = this.left 148 | while(n.right) { 149 | p = n 150 | n = n.right 151 | } 152 | if(p === this) { 153 | n.right = this.right 154 | } else { 155 | var l = this.left 156 | var r = this.right 157 | p.count -= n.count 158 | p.right = n.left 159 | n.left = l 160 | n.right = r 161 | } 162 | copy(this, n) 163 | this.count = (this.left?this.left.count:0) + (this.right?this.right.count:0) + this.leftPoints.length 164 | } else if(this.left) { 165 | copy(this, this.left) 166 | } else { 167 | copy(this, this.right) 168 | } 169 | return SUCCESS 170 | } 171 | for(var l = bounds.ge(this.leftPoints, interval, compareBegin); l=0 && arr[i][1] >= lo; --i) { 201 | var r = cb(arr[i]) 202 | if(r) { return r } 203 | } 204 | } 205 | 206 | function reportRange(arr, cb) { 207 | for(var i=0; i this.mid) { 221 | if(this.right) { 222 | var r = this.right.queryPoint(x, cb) 223 | if(r) { return r } 224 | } 225 | return reportRightRange(this.rightPoints, x, cb) 226 | } else { 227 | return reportRange(this.leftPoints, cb) 228 | } 229 | } 230 | 231 | proto.queryInterval = function(lo, hi, cb) { 232 | if(lo < this.mid && this.left) { 233 | var r = this.left.queryInterval(lo, hi, cb) 234 | if(r) { return r } 235 | } 236 | if(hi > this.mid && this.right) { 237 | var r = this.right.queryInterval(lo, hi, cb) 238 | if(r) { return r } 239 | } 240 | if(hi < this.mid) { 241 | return reportLeftRange(this.leftPoints, hi, cb) 242 | } else if(lo > this.mid) { 243 | return reportRightRange(this.rightPoints, lo, cb) 244 | } else { 245 | return reportRange(this.leftPoints, cb) 246 | } 247 | } 248 | 249 | function compareNumbers(a, b) { 250 | return a - b 251 | } 252 | 253 | function compareBegin(a, b) { 254 | var d = a[0] - b[0] 255 | if(d) { return d } 256 | return a[1] - b[1] 257 | } 258 | 259 | function compareEnd(a, b) { 260 | var d = a[1] - b[1] 261 | if(d) { return d } 262 | return a[0] - b[0] 263 | } 264 | 265 | function createIntervalTree(intervals) { 266 | if(intervals.length === 0) { 267 | return null 268 | } 269 | var pts = [] 270 | for(var i=0; i>1] 276 | 277 | var leftIntervals = [] 278 | var rightIntervals = [] 279 | var centerIntervals = [] 280 | for(var i=0; i=2.2.7 <3" 15 | } 16 | }, 17 | "acorn": { 18 | "version": "7.4.1", 19 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 20 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 21 | "dev": true 22 | }, 23 | "acorn-node": { 24 | "version": "1.8.2", 25 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 26 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 27 | "dev": true, 28 | "requires": { 29 | "acorn": "^7.0.0", 30 | "acorn-walk": "^7.0.0", 31 | "xtend": "^4.0.2" 32 | } 33 | }, 34 | "acorn-walk": { 35 | "version": "7.2.0", 36 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", 37 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", 38 | "dev": true 39 | }, 40 | "amdefine": { 41 | "version": "1.0.1", 42 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 43 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", 44 | "dev": true 45 | }, 46 | "asn1.js": { 47 | "version": "5.4.1", 48 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", 49 | "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", 50 | "dev": true, 51 | "requires": { 52 | "bn.js": "^4.0.0", 53 | "inherits": "^2.0.1", 54 | "minimalistic-assert": "^1.0.0", 55 | "safer-buffer": "^2.1.0" 56 | }, 57 | "dependencies": { 58 | "bn.js": { 59 | "version": "4.12.0", 60 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 61 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 62 | "dev": true 63 | } 64 | } 65 | }, 66 | "assert": { 67 | "version": "1.5.0", 68 | "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", 69 | "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", 70 | "dev": true, 71 | "requires": { 72 | "object-assign": "^4.1.1", 73 | "util": "0.10.3" 74 | }, 75 | "dependencies": { 76 | "inherits": { 77 | "version": "2.0.1", 78 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 79 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", 80 | "dev": true 81 | }, 82 | "util": { 83 | "version": "0.10.3", 84 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", 85 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", 86 | "dev": true, 87 | "requires": { 88 | "inherits": "2.0.1" 89 | } 90 | } 91 | } 92 | }, 93 | "balanced-match": { 94 | "version": "1.0.2", 95 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 96 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 97 | "dev": true 98 | }, 99 | "base64-js": { 100 | "version": "1.5.1", 101 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 102 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 103 | "dev": true 104 | }, 105 | "binary-search-bounds": { 106 | "version": "2.0.5", 107 | "resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.5.tgz", 108 | "integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==" 109 | }, 110 | "bn.js": { 111 | "version": "5.2.0", 112 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", 113 | "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", 114 | "dev": true 115 | }, 116 | "brace-expansion": { 117 | "version": "1.1.11", 118 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 119 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 120 | "dev": true, 121 | "requires": { 122 | "balanced-match": "^1.0.0", 123 | "concat-map": "0.0.1" 124 | } 125 | }, 126 | "brorand": { 127 | "version": "1.1.0", 128 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 129 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", 130 | "dev": true 131 | }, 132 | "browser-pack": { 133 | "version": "6.1.0", 134 | "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", 135 | "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", 136 | "dev": true, 137 | "requires": { 138 | "JSONStream": "^1.0.3", 139 | "combine-source-map": "~0.8.0", 140 | "defined": "^1.0.0", 141 | "safe-buffer": "^5.1.1", 142 | "through2": "^2.0.0", 143 | "umd": "^3.0.0" 144 | } 145 | }, 146 | "browser-resolve": { 147 | "version": "2.0.0", 148 | "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", 149 | "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", 150 | "dev": true, 151 | "requires": { 152 | "resolve": "^1.17.0" 153 | } 154 | }, 155 | "browserify": { 156 | "version": "16.5.2", 157 | "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.2.tgz", 158 | "integrity": "sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g==", 159 | "dev": true, 160 | "requires": { 161 | "JSONStream": "^1.0.3", 162 | "assert": "^1.4.0", 163 | "browser-pack": "^6.0.1", 164 | "browser-resolve": "^2.0.0", 165 | "browserify-zlib": "~0.2.0", 166 | "buffer": "~5.2.1", 167 | "cached-path-relative": "^1.0.0", 168 | "concat-stream": "^1.6.0", 169 | "console-browserify": "^1.1.0", 170 | "constants-browserify": "~1.0.0", 171 | "crypto-browserify": "^3.0.0", 172 | "defined": "^1.0.0", 173 | "deps-sort": "^2.0.0", 174 | "domain-browser": "^1.2.0", 175 | "duplexer2": "~0.1.2", 176 | "events": "^2.0.0", 177 | "glob": "^7.1.0", 178 | "has": "^1.0.0", 179 | "htmlescape": "^1.1.0", 180 | "https-browserify": "^1.0.0", 181 | "inherits": "~2.0.1", 182 | "insert-module-globals": "^7.0.0", 183 | "labeled-stream-splicer": "^2.0.0", 184 | "mkdirp-classic": "^0.5.2", 185 | "module-deps": "^6.2.3", 186 | "os-browserify": "~0.3.0", 187 | "parents": "^1.0.1", 188 | "path-browserify": "~0.0.0", 189 | "process": "~0.11.0", 190 | "punycode": "^1.3.2", 191 | "querystring-es3": "~0.2.0", 192 | "read-only-stream": "^2.0.0", 193 | "readable-stream": "^2.0.2", 194 | "resolve": "^1.1.4", 195 | "shasum": "^1.0.0", 196 | "shell-quote": "^1.6.1", 197 | "stream-browserify": "^2.0.0", 198 | "stream-http": "^3.0.0", 199 | "string_decoder": "^1.1.1", 200 | "subarg": "^1.0.0", 201 | "syntax-error": "^1.1.1", 202 | "through2": "^2.0.0", 203 | "timers-browserify": "^1.0.1", 204 | "tty-browserify": "0.0.1", 205 | "url": "~0.11.0", 206 | "util": "~0.10.1", 207 | "vm-browserify": "^1.0.0", 208 | "xtend": "^4.0.0" 209 | } 210 | }, 211 | "browserify-aes": { 212 | "version": "1.2.0", 213 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 214 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", 215 | "dev": true, 216 | "requires": { 217 | "buffer-xor": "^1.0.3", 218 | "cipher-base": "^1.0.0", 219 | "create-hash": "^1.1.0", 220 | "evp_bytestokey": "^1.0.3", 221 | "inherits": "^2.0.1", 222 | "safe-buffer": "^5.0.1" 223 | } 224 | }, 225 | "browserify-cipher": { 226 | "version": "1.0.1", 227 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", 228 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", 229 | "dev": true, 230 | "requires": { 231 | "browserify-aes": "^1.0.4", 232 | "browserify-des": "^1.0.0", 233 | "evp_bytestokey": "^1.0.0" 234 | } 235 | }, 236 | "browserify-des": { 237 | "version": "1.0.2", 238 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", 239 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", 240 | "dev": true, 241 | "requires": { 242 | "cipher-base": "^1.0.1", 243 | "des.js": "^1.0.0", 244 | "inherits": "^2.0.1", 245 | "safe-buffer": "^5.1.2" 246 | } 247 | }, 248 | "browserify-rsa": { 249 | "version": "4.1.0", 250 | "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", 251 | "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", 252 | "dev": true, 253 | "requires": { 254 | "bn.js": "^5.0.0", 255 | "randombytes": "^2.0.1" 256 | } 257 | }, 258 | "browserify-sign": { 259 | "version": "4.2.1", 260 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", 261 | "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", 262 | "dev": true, 263 | "requires": { 264 | "bn.js": "^5.1.1", 265 | "browserify-rsa": "^4.0.1", 266 | "create-hash": "^1.2.0", 267 | "create-hmac": "^1.1.7", 268 | "elliptic": "^6.5.3", 269 | "inherits": "^2.0.4", 270 | "parse-asn1": "^5.1.5", 271 | "readable-stream": "^3.6.0", 272 | "safe-buffer": "^5.2.0" 273 | }, 274 | "dependencies": { 275 | "readable-stream": { 276 | "version": "3.6.0", 277 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 278 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 279 | "dev": true, 280 | "requires": { 281 | "inherits": "^2.0.3", 282 | "string_decoder": "^1.1.1", 283 | "util-deprecate": "^1.0.1" 284 | } 285 | } 286 | } 287 | }, 288 | "browserify-zlib": { 289 | "version": "0.2.0", 290 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", 291 | "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", 292 | "dev": true, 293 | "requires": { 294 | "pako": "~1.0.5" 295 | } 296 | }, 297 | "buffer": { 298 | "version": "5.2.1", 299 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", 300 | "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", 301 | "dev": true, 302 | "requires": { 303 | "base64-js": "^1.0.2", 304 | "ieee754": "^1.1.4" 305 | } 306 | }, 307 | "buffer-from": { 308 | "version": "1.1.1", 309 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 310 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 311 | "dev": true 312 | }, 313 | "buffer-xor": { 314 | "version": "1.0.3", 315 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 316 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", 317 | "dev": true 318 | }, 319 | "builtin-status-codes": { 320 | "version": "3.0.0", 321 | "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", 322 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", 323 | "dev": true 324 | }, 325 | "cached-path-relative": { 326 | "version": "1.0.2", 327 | "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", 328 | "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", 329 | "dev": true 330 | }, 331 | "cipher-base": { 332 | "version": "1.0.4", 333 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 334 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 335 | "dev": true, 336 | "requires": { 337 | "inherits": "^2.0.1", 338 | "safe-buffer": "^5.0.1" 339 | } 340 | }, 341 | "combine-source-map": { 342 | "version": "0.8.0", 343 | "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", 344 | "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", 345 | "dev": true, 346 | "requires": { 347 | "convert-source-map": "~1.1.0", 348 | "inline-source-map": "~0.6.0", 349 | "lodash.memoize": "~3.0.3", 350 | "source-map": "~0.5.3" 351 | } 352 | }, 353 | "concat-map": { 354 | "version": "0.0.1", 355 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 356 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 357 | "dev": true 358 | }, 359 | "concat-stream": { 360 | "version": "1.6.2", 361 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 362 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 363 | "dev": true, 364 | "requires": { 365 | "buffer-from": "^1.0.0", 366 | "inherits": "^2.0.3", 367 | "readable-stream": "^2.2.2", 368 | "typedarray": "^0.0.6" 369 | } 370 | }, 371 | "console-browserify": { 372 | "version": "1.2.0", 373 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", 374 | "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", 375 | "dev": true 376 | }, 377 | "constants-browserify": { 378 | "version": "1.0.0", 379 | "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", 380 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", 381 | "dev": true 382 | }, 383 | "convert-source-map": { 384 | "version": "1.1.3", 385 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", 386 | "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", 387 | "dev": true 388 | }, 389 | "core-util-is": { 390 | "version": "1.0.2", 391 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 392 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 393 | "dev": true 394 | }, 395 | "coverify": { 396 | "version": "1.5.1", 397 | "resolved": "https://registry.npmjs.org/coverify/-/coverify-1.5.1.tgz", 398 | "integrity": "sha512-QnGzWN8VADoub5nUQGFWBX0tvRCedyaXVmEraIjJt7T7v1sk73VdWgSFE7R/P+wHe5sNj0JJVKMzuKZOAhOTLQ==", 399 | "dev": true, 400 | "requires": { 401 | "convert-source-map": "^1.6.0", 402 | "falafel": "^2.1.0", 403 | "minimist": "^1.2.0", 404 | "slash": "^1.0.0", 405 | "source-map": "~0.4.4", 406 | "split2": "^0.2.1", 407 | "stream-combiner2": "^1.1.1", 408 | "through2": "~0.6.5" 409 | }, 410 | "dependencies": { 411 | "convert-source-map": { 412 | "version": "1.7.0", 413 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", 414 | "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", 415 | "dev": true, 416 | "requires": { 417 | "safe-buffer": "~5.1.1" 418 | } 419 | }, 420 | "isarray": { 421 | "version": "0.0.1", 422 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 423 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 424 | "dev": true 425 | }, 426 | "readable-stream": { 427 | "version": "1.0.34", 428 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 429 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 430 | "dev": true, 431 | "requires": { 432 | "core-util-is": "~1.0.0", 433 | "inherits": "~2.0.1", 434 | "isarray": "0.0.1", 435 | "string_decoder": "~0.10.x" 436 | } 437 | }, 438 | "safe-buffer": { 439 | "version": "5.1.2", 440 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 441 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 442 | "dev": true 443 | }, 444 | "source-map": { 445 | "version": "0.4.4", 446 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", 447 | "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", 448 | "dev": true, 449 | "requires": { 450 | "amdefine": ">=0.0.4" 451 | } 452 | }, 453 | "string_decoder": { 454 | "version": "0.10.31", 455 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 456 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 457 | "dev": true 458 | }, 459 | "through2": { 460 | "version": "0.6.5", 461 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 462 | "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 463 | "dev": true, 464 | "requires": { 465 | "readable-stream": ">=1.0.33-1 <1.1.0-0", 466 | "xtend": ">=4.0.0 <4.1.0-0" 467 | } 468 | } 469 | } 470 | }, 471 | "covert": { 472 | "version": "1.1.1", 473 | "resolved": "https://registry.npmjs.org/covert/-/covert-1.1.1.tgz", 474 | "integrity": "sha512-JaOa8MRqoMum+skNyVLf0H0BfAVAXMaSyy409Uk4/pLdFT2/2h49OJBDmwvylDNP1UZZ20tcjYS85eaQuQ1WeA==", 475 | "dev": true, 476 | "requires": { 477 | "browserify": "^16.2.3", 478 | "coverify": "^1.5.1", 479 | "minimist": "^1.2.0", 480 | "parents": "^1.0.1", 481 | "resolve": "^1.9.0" 482 | } 483 | }, 484 | "create-ecdh": { 485 | "version": "4.0.4", 486 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", 487 | "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", 488 | "dev": true, 489 | "requires": { 490 | "bn.js": "^4.1.0", 491 | "elliptic": "^6.5.3" 492 | }, 493 | "dependencies": { 494 | "bn.js": { 495 | "version": "4.12.0", 496 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 497 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 498 | "dev": true 499 | } 500 | } 501 | }, 502 | "create-hash": { 503 | "version": "1.2.0", 504 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 505 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 506 | "dev": true, 507 | "requires": { 508 | "cipher-base": "^1.0.1", 509 | "inherits": "^2.0.1", 510 | "md5.js": "^1.3.4", 511 | "ripemd160": "^2.0.1", 512 | "sha.js": "^2.4.0" 513 | } 514 | }, 515 | "create-hmac": { 516 | "version": "1.1.7", 517 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 518 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 519 | "dev": true, 520 | "requires": { 521 | "cipher-base": "^1.0.3", 522 | "create-hash": "^1.1.0", 523 | "inherits": "^2.0.1", 524 | "ripemd160": "^2.0.0", 525 | "safe-buffer": "^5.0.1", 526 | "sha.js": "^2.4.8" 527 | } 528 | }, 529 | "crypto-browserify": { 530 | "version": "3.12.0", 531 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", 532 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", 533 | "dev": true, 534 | "requires": { 535 | "browserify-cipher": "^1.0.0", 536 | "browserify-sign": "^4.0.0", 537 | "create-ecdh": "^4.0.0", 538 | "create-hash": "^1.1.0", 539 | "create-hmac": "^1.1.0", 540 | "diffie-hellman": "^5.0.0", 541 | "inherits": "^2.0.1", 542 | "pbkdf2": "^3.0.3", 543 | "public-encrypt": "^4.0.0", 544 | "randombytes": "^2.0.0", 545 | "randomfill": "^1.0.3" 546 | } 547 | }, 548 | "dash-ast": { 549 | "version": "1.0.0", 550 | "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", 551 | "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", 552 | "dev": true 553 | }, 554 | "deep-equal": { 555 | "version": "0.2.2", 556 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz", 557 | "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=", 558 | "dev": true 559 | }, 560 | "defined": { 561 | "version": "1.0.0", 562 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 563 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 564 | "dev": true 565 | }, 566 | "deps-sort": { 567 | "version": "2.0.1", 568 | "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", 569 | "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", 570 | "dev": true, 571 | "requires": { 572 | "JSONStream": "^1.0.3", 573 | "shasum-object": "^1.0.0", 574 | "subarg": "^1.0.0", 575 | "through2": "^2.0.0" 576 | } 577 | }, 578 | "des.js": { 579 | "version": "1.0.1", 580 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", 581 | "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", 582 | "dev": true, 583 | "requires": { 584 | "inherits": "^2.0.1", 585 | "minimalistic-assert": "^1.0.0" 586 | } 587 | }, 588 | "detective": { 589 | "version": "5.2.0", 590 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", 591 | "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", 592 | "dev": true, 593 | "requires": { 594 | "acorn-node": "^1.6.1", 595 | "defined": "^1.0.0", 596 | "minimist": "^1.1.1" 597 | } 598 | }, 599 | "diffie-hellman": { 600 | "version": "5.0.3", 601 | "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 602 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", 603 | "dev": true, 604 | "requires": { 605 | "bn.js": "^4.1.0", 606 | "miller-rabin": "^4.0.0", 607 | "randombytes": "^2.0.0" 608 | }, 609 | "dependencies": { 610 | "bn.js": { 611 | "version": "4.12.0", 612 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 613 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 614 | "dev": true 615 | } 616 | } 617 | }, 618 | "domain-browser": { 619 | "version": "1.2.0", 620 | "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", 621 | "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", 622 | "dev": true 623 | }, 624 | "duplexer2": { 625 | "version": "0.1.4", 626 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", 627 | "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", 628 | "dev": true, 629 | "requires": { 630 | "readable-stream": "^2.0.2" 631 | } 632 | }, 633 | "elliptic": { 634 | "version": "6.5.4", 635 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", 636 | "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", 637 | "dev": true, 638 | "requires": { 639 | "bn.js": "^4.11.9", 640 | "brorand": "^1.1.0", 641 | "hash.js": "^1.0.0", 642 | "hmac-drbg": "^1.0.1", 643 | "inherits": "^2.0.4", 644 | "minimalistic-assert": "^1.0.1", 645 | "minimalistic-crypto-utils": "^1.0.1" 646 | }, 647 | "dependencies": { 648 | "bn.js": { 649 | "version": "4.12.0", 650 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 651 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 652 | "dev": true 653 | } 654 | } 655 | }, 656 | "events": { 657 | "version": "2.1.0", 658 | "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", 659 | "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", 660 | "dev": true 661 | }, 662 | "evp_bytestokey": { 663 | "version": "1.0.3", 664 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", 665 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", 666 | "dev": true, 667 | "requires": { 668 | "md5.js": "^1.3.4", 669 | "safe-buffer": "^5.1.1" 670 | } 671 | }, 672 | "falafel": { 673 | "version": "2.2.4", 674 | "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz", 675 | "integrity": "sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ==", 676 | "dev": true, 677 | "requires": { 678 | "acorn": "^7.1.1", 679 | "foreach": "^2.0.5", 680 | "isarray": "^2.0.1", 681 | "object-keys": "^1.0.6" 682 | }, 683 | "dependencies": { 684 | "isarray": { 685 | "version": "2.0.5", 686 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 687 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", 688 | "dev": true 689 | } 690 | } 691 | }, 692 | "fast-safe-stringify": { 693 | "version": "2.0.7", 694 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", 695 | "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", 696 | "dev": true 697 | }, 698 | "foreach": { 699 | "version": "2.0.5", 700 | "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", 701 | "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", 702 | "dev": true 703 | }, 704 | "fs.realpath": { 705 | "version": "1.0.0", 706 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 707 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 708 | "dev": true 709 | }, 710 | "function-bind": { 711 | "version": "1.1.1", 712 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 713 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 714 | "dev": true 715 | }, 716 | "get-assigned-identifiers": { 717 | "version": "1.2.0", 718 | "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", 719 | "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", 720 | "dev": true 721 | }, 722 | "glob": { 723 | "version": "7.1.7", 724 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 725 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 726 | "dev": true, 727 | "requires": { 728 | "fs.realpath": "^1.0.0", 729 | "inflight": "^1.0.4", 730 | "inherits": "2", 731 | "minimatch": "^3.0.4", 732 | "once": "^1.3.0", 733 | "path-is-absolute": "^1.0.0" 734 | } 735 | }, 736 | "has": { 737 | "version": "1.0.3", 738 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 739 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 740 | "dev": true, 741 | "requires": { 742 | "function-bind": "^1.1.1" 743 | } 744 | }, 745 | "hash-base": { 746 | "version": "3.1.0", 747 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", 748 | "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", 749 | "dev": true, 750 | "requires": { 751 | "inherits": "^2.0.4", 752 | "readable-stream": "^3.6.0", 753 | "safe-buffer": "^5.2.0" 754 | }, 755 | "dependencies": { 756 | "readable-stream": { 757 | "version": "3.6.0", 758 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 759 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 760 | "dev": true, 761 | "requires": { 762 | "inherits": "^2.0.3", 763 | "string_decoder": "^1.1.1", 764 | "util-deprecate": "^1.0.1" 765 | } 766 | } 767 | } 768 | }, 769 | "hash.js": { 770 | "version": "1.1.7", 771 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 772 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 773 | "dev": true, 774 | "requires": { 775 | "inherits": "^2.0.3", 776 | "minimalistic-assert": "^1.0.1" 777 | } 778 | }, 779 | "hmac-drbg": { 780 | "version": "1.0.1", 781 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 782 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 783 | "dev": true, 784 | "requires": { 785 | "hash.js": "^1.0.3", 786 | "minimalistic-assert": "^1.0.0", 787 | "minimalistic-crypto-utils": "^1.0.1" 788 | } 789 | }, 790 | "htmlescape": { 791 | "version": "1.1.1", 792 | "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", 793 | "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", 794 | "dev": true 795 | }, 796 | "https-browserify": { 797 | "version": "1.0.0", 798 | "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", 799 | "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", 800 | "dev": true 801 | }, 802 | "ieee754": { 803 | "version": "1.2.1", 804 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 805 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 806 | "dev": true 807 | }, 808 | "inflight": { 809 | "version": "1.0.6", 810 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 811 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 812 | "dev": true, 813 | "requires": { 814 | "once": "^1.3.0", 815 | "wrappy": "1" 816 | } 817 | }, 818 | "inherits": { 819 | "version": "2.0.4", 820 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 821 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 822 | "dev": true 823 | }, 824 | "inline-source-map": { 825 | "version": "0.6.2", 826 | "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", 827 | "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", 828 | "dev": true, 829 | "requires": { 830 | "source-map": "~0.5.3" 831 | } 832 | }, 833 | "insert-module-globals": { 834 | "version": "7.2.1", 835 | "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", 836 | "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", 837 | "dev": true, 838 | "requires": { 839 | "JSONStream": "^1.0.3", 840 | "acorn-node": "^1.5.2", 841 | "combine-source-map": "^0.8.0", 842 | "concat-stream": "^1.6.1", 843 | "is-buffer": "^1.1.0", 844 | "path-is-absolute": "^1.0.1", 845 | "process": "~0.11.0", 846 | "through2": "^2.0.0", 847 | "undeclared-identifiers": "^1.1.2", 848 | "xtend": "^4.0.0" 849 | } 850 | }, 851 | "is-buffer": { 852 | "version": "1.1.6", 853 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 854 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 855 | "dev": true 856 | }, 857 | "is-core-module": { 858 | "version": "2.4.0", 859 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", 860 | "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", 861 | "dev": true, 862 | "requires": { 863 | "has": "^1.0.3" 864 | } 865 | }, 866 | "isarray": { 867 | "version": "1.0.0", 868 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 869 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 870 | "dev": true 871 | }, 872 | "json-stable-stringify": { 873 | "version": "0.0.1", 874 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", 875 | "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", 876 | "dev": true, 877 | "requires": { 878 | "jsonify": "~0.0.0" 879 | } 880 | }, 881 | "jsonify": { 882 | "version": "0.0.0", 883 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 884 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 885 | "dev": true 886 | }, 887 | "jsonparse": { 888 | "version": "1.3.1", 889 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", 890 | "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", 891 | "dev": true 892 | }, 893 | "labeled-stream-splicer": { 894 | "version": "2.0.2", 895 | "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", 896 | "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", 897 | "dev": true, 898 | "requires": { 899 | "inherits": "^2.0.1", 900 | "stream-splicer": "^2.0.0" 901 | } 902 | }, 903 | "lodash.memoize": { 904 | "version": "3.0.4", 905 | "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", 906 | "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", 907 | "dev": true 908 | }, 909 | "lru-cache": { 910 | "version": "2.7.3", 911 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", 912 | "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", 913 | "dev": true 914 | }, 915 | "md5.js": { 916 | "version": "1.3.5", 917 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 918 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 919 | "dev": true, 920 | "requires": { 921 | "hash-base": "^3.0.0", 922 | "inherits": "^2.0.1", 923 | "safe-buffer": "^5.1.2" 924 | } 925 | }, 926 | "miller-rabin": { 927 | "version": "4.0.1", 928 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", 929 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", 930 | "dev": true, 931 | "requires": { 932 | "bn.js": "^4.0.0", 933 | "brorand": "^1.0.1" 934 | }, 935 | "dependencies": { 936 | "bn.js": { 937 | "version": "4.12.0", 938 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 939 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 940 | "dev": true 941 | } 942 | } 943 | }, 944 | "minimalistic-assert": { 945 | "version": "1.0.1", 946 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 947 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", 948 | "dev": true 949 | }, 950 | "minimalistic-crypto-utils": { 951 | "version": "1.0.1", 952 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 953 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", 954 | "dev": true 955 | }, 956 | "minimatch": { 957 | "version": "3.0.4", 958 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 959 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 960 | "dev": true, 961 | "requires": { 962 | "brace-expansion": "^1.1.7" 963 | } 964 | }, 965 | "minimist": { 966 | "version": "1.2.5", 967 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 968 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 969 | "dev": true 970 | }, 971 | "mkdirp-classic": { 972 | "version": "0.5.3", 973 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", 974 | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", 975 | "dev": true 976 | }, 977 | "module-deps": { 978 | "version": "6.2.3", 979 | "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", 980 | "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", 981 | "dev": true, 982 | "requires": { 983 | "JSONStream": "^1.0.3", 984 | "browser-resolve": "^2.0.0", 985 | "cached-path-relative": "^1.0.2", 986 | "concat-stream": "~1.6.0", 987 | "defined": "^1.0.0", 988 | "detective": "^5.2.0", 989 | "duplexer2": "^0.1.2", 990 | "inherits": "^2.0.1", 991 | "parents": "^1.0.0", 992 | "readable-stream": "^2.0.2", 993 | "resolve": "^1.4.0", 994 | "stream-combiner2": "^1.1.1", 995 | "subarg": "^1.0.0", 996 | "through2": "^2.0.0", 997 | "xtend": "^4.0.0" 998 | } 999 | }, 1000 | "object-assign": { 1001 | "version": "4.1.1", 1002 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1003 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 1004 | "dev": true 1005 | }, 1006 | "object-inspect": { 1007 | "version": "0.4.0", 1008 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-0.4.0.tgz", 1009 | "integrity": "sha1-9RV8EWwUVbJDsG7pdwM5LFrYn+w=", 1010 | "dev": true 1011 | }, 1012 | "object-keys": { 1013 | "version": "1.1.1", 1014 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1015 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1016 | "dev": true 1017 | }, 1018 | "once": { 1019 | "version": "1.4.0", 1020 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1021 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1022 | "dev": true, 1023 | "requires": { 1024 | "wrappy": "1" 1025 | } 1026 | }, 1027 | "os-browserify": { 1028 | "version": "0.3.0", 1029 | "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", 1030 | "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", 1031 | "dev": true 1032 | }, 1033 | "pako": { 1034 | "version": "1.0.11", 1035 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", 1036 | "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", 1037 | "dev": true 1038 | }, 1039 | "parents": { 1040 | "version": "1.0.1", 1041 | "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", 1042 | "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", 1043 | "dev": true, 1044 | "requires": { 1045 | "path-platform": "~0.11.15" 1046 | } 1047 | }, 1048 | "parse-asn1": { 1049 | "version": "5.1.6", 1050 | "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", 1051 | "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", 1052 | "dev": true, 1053 | "requires": { 1054 | "asn1.js": "^5.2.0", 1055 | "browserify-aes": "^1.0.0", 1056 | "evp_bytestokey": "^1.0.0", 1057 | "pbkdf2": "^3.0.3", 1058 | "safe-buffer": "^5.1.1" 1059 | } 1060 | }, 1061 | "path-browserify": { 1062 | "version": "0.0.1", 1063 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", 1064 | "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", 1065 | "dev": true 1066 | }, 1067 | "path-is-absolute": { 1068 | "version": "1.0.1", 1069 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1070 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1071 | "dev": true 1072 | }, 1073 | "path-parse": { 1074 | "version": "1.0.7", 1075 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1076 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1077 | "dev": true 1078 | }, 1079 | "path-platform": { 1080 | "version": "0.11.15", 1081 | "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", 1082 | "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", 1083 | "dev": true 1084 | }, 1085 | "pbkdf2": { 1086 | "version": "3.1.2", 1087 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", 1088 | "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", 1089 | "dev": true, 1090 | "requires": { 1091 | "create-hash": "^1.1.2", 1092 | "create-hmac": "^1.1.4", 1093 | "ripemd160": "^2.0.1", 1094 | "safe-buffer": "^5.0.1", 1095 | "sha.js": "^2.4.8" 1096 | } 1097 | }, 1098 | "process": { 1099 | "version": "0.11.10", 1100 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 1101 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", 1102 | "dev": true 1103 | }, 1104 | "process-nextick-args": { 1105 | "version": "2.0.1", 1106 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1107 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 1108 | "dev": true 1109 | }, 1110 | "public-encrypt": { 1111 | "version": "4.0.3", 1112 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", 1113 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", 1114 | "dev": true, 1115 | "requires": { 1116 | "bn.js": "^4.1.0", 1117 | "browserify-rsa": "^4.0.0", 1118 | "create-hash": "^1.1.0", 1119 | "parse-asn1": "^5.0.0", 1120 | "randombytes": "^2.0.1", 1121 | "safe-buffer": "^5.1.2" 1122 | }, 1123 | "dependencies": { 1124 | "bn.js": { 1125 | "version": "4.12.0", 1126 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 1127 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 1128 | "dev": true 1129 | } 1130 | } 1131 | }, 1132 | "punycode": { 1133 | "version": "1.4.1", 1134 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1135 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 1136 | "dev": true 1137 | }, 1138 | "querystring": { 1139 | "version": "0.2.0", 1140 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 1141 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", 1142 | "dev": true 1143 | }, 1144 | "querystring-es3": { 1145 | "version": "0.2.1", 1146 | "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", 1147 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", 1148 | "dev": true 1149 | }, 1150 | "randombytes": { 1151 | "version": "2.1.0", 1152 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1153 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1154 | "dev": true, 1155 | "requires": { 1156 | "safe-buffer": "^5.1.0" 1157 | } 1158 | }, 1159 | "randomfill": { 1160 | "version": "1.0.4", 1161 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", 1162 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", 1163 | "dev": true, 1164 | "requires": { 1165 | "randombytes": "^2.0.5", 1166 | "safe-buffer": "^5.1.0" 1167 | } 1168 | }, 1169 | "read-only-stream": { 1170 | "version": "2.0.0", 1171 | "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", 1172 | "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", 1173 | "dev": true, 1174 | "requires": { 1175 | "readable-stream": "^2.0.2" 1176 | } 1177 | }, 1178 | "readable-stream": { 1179 | "version": "2.3.7", 1180 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 1181 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 1182 | "dev": true, 1183 | "requires": { 1184 | "core-util-is": "~1.0.0", 1185 | "inherits": "~2.0.3", 1186 | "isarray": "~1.0.0", 1187 | "process-nextick-args": "~2.0.0", 1188 | "safe-buffer": "~5.1.1", 1189 | "string_decoder": "~1.1.1", 1190 | "util-deprecate": "~1.0.1" 1191 | }, 1192 | "dependencies": { 1193 | "safe-buffer": { 1194 | "version": "5.1.2", 1195 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1196 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1197 | "dev": true 1198 | }, 1199 | "string_decoder": { 1200 | "version": "1.1.1", 1201 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1202 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1203 | "dev": true, 1204 | "requires": { 1205 | "safe-buffer": "~5.1.0" 1206 | } 1207 | } 1208 | } 1209 | }, 1210 | "resolve": { 1211 | "version": "1.20.0", 1212 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 1213 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 1214 | "dev": true, 1215 | "requires": { 1216 | "is-core-module": "^2.2.0", 1217 | "path-parse": "^1.0.6" 1218 | } 1219 | }, 1220 | "resumer": { 1221 | "version": "0.0.0", 1222 | "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", 1223 | "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", 1224 | "dev": true, 1225 | "requires": { 1226 | "through": "~2.3.4" 1227 | } 1228 | }, 1229 | "ripemd160": { 1230 | "version": "2.0.2", 1231 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 1232 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 1233 | "dev": true, 1234 | "requires": { 1235 | "hash-base": "^3.0.0", 1236 | "inherits": "^2.0.1" 1237 | } 1238 | }, 1239 | "safe-buffer": { 1240 | "version": "5.2.1", 1241 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1242 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1243 | "dev": true 1244 | }, 1245 | "safer-buffer": { 1246 | "version": "2.1.2", 1247 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1248 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1249 | "dev": true 1250 | }, 1251 | "sha.js": { 1252 | "version": "2.4.11", 1253 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 1254 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 1255 | "dev": true, 1256 | "requires": { 1257 | "inherits": "^2.0.1", 1258 | "safe-buffer": "^5.0.1" 1259 | } 1260 | }, 1261 | "shasum": { 1262 | "version": "1.0.2", 1263 | "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", 1264 | "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", 1265 | "dev": true, 1266 | "requires": { 1267 | "json-stable-stringify": "~0.0.0", 1268 | "sha.js": "~2.4.4" 1269 | } 1270 | }, 1271 | "shasum-object": { 1272 | "version": "1.0.0", 1273 | "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", 1274 | "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", 1275 | "dev": true, 1276 | "requires": { 1277 | "fast-safe-stringify": "^2.0.7" 1278 | } 1279 | }, 1280 | "shell-quote": { 1281 | "version": "1.7.2", 1282 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", 1283 | "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", 1284 | "dev": true 1285 | }, 1286 | "sigmund": { 1287 | "version": "1.0.1", 1288 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 1289 | "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", 1290 | "dev": true 1291 | }, 1292 | "simple-concat": { 1293 | "version": "1.0.1", 1294 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 1295 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", 1296 | "dev": true 1297 | }, 1298 | "slash": { 1299 | "version": "1.0.0", 1300 | "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", 1301 | "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", 1302 | "dev": true 1303 | }, 1304 | "source-map": { 1305 | "version": "0.5.7", 1306 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1307 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 1308 | "dev": true 1309 | }, 1310 | "split2": { 1311 | "version": "0.2.1", 1312 | "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz", 1313 | "integrity": "sha1-At2smtwD7Au3jBKC7Aecpuha6QA=", 1314 | "dev": true, 1315 | "requires": { 1316 | "through2": "~0.6.1" 1317 | }, 1318 | "dependencies": { 1319 | "isarray": { 1320 | "version": "0.0.1", 1321 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1322 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 1323 | "dev": true 1324 | }, 1325 | "readable-stream": { 1326 | "version": "1.0.34", 1327 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 1328 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 1329 | "dev": true, 1330 | "requires": { 1331 | "core-util-is": "~1.0.0", 1332 | "inherits": "~2.0.1", 1333 | "isarray": "0.0.1", 1334 | "string_decoder": "~0.10.x" 1335 | } 1336 | }, 1337 | "string_decoder": { 1338 | "version": "0.10.31", 1339 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1340 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 1341 | "dev": true 1342 | }, 1343 | "through2": { 1344 | "version": "0.6.5", 1345 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 1346 | "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 1347 | "dev": true, 1348 | "requires": { 1349 | "readable-stream": ">=1.0.33-1 <1.1.0-0", 1350 | "xtend": ">=4.0.0 <4.1.0-0" 1351 | } 1352 | } 1353 | } 1354 | }, 1355 | "stream-browserify": { 1356 | "version": "2.0.2", 1357 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", 1358 | "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", 1359 | "dev": true, 1360 | "requires": { 1361 | "inherits": "~2.0.1", 1362 | "readable-stream": "^2.0.2" 1363 | } 1364 | }, 1365 | "stream-combiner2": { 1366 | "version": "1.1.1", 1367 | "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", 1368 | "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", 1369 | "dev": true, 1370 | "requires": { 1371 | "duplexer2": "~0.1.0", 1372 | "readable-stream": "^2.0.2" 1373 | } 1374 | }, 1375 | "stream-http": { 1376 | "version": "3.2.0", 1377 | "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", 1378 | "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", 1379 | "dev": true, 1380 | "requires": { 1381 | "builtin-status-codes": "^3.0.0", 1382 | "inherits": "^2.0.4", 1383 | "readable-stream": "^3.6.0", 1384 | "xtend": "^4.0.2" 1385 | }, 1386 | "dependencies": { 1387 | "readable-stream": { 1388 | "version": "3.6.0", 1389 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1390 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1391 | "dev": true, 1392 | "requires": { 1393 | "inherits": "^2.0.3", 1394 | "string_decoder": "^1.1.1", 1395 | "util-deprecate": "^1.0.1" 1396 | } 1397 | } 1398 | } 1399 | }, 1400 | "stream-splicer": { 1401 | "version": "2.0.1", 1402 | "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", 1403 | "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", 1404 | "dev": true, 1405 | "requires": { 1406 | "inherits": "^2.0.1", 1407 | "readable-stream": "^2.0.2" 1408 | } 1409 | }, 1410 | "string_decoder": { 1411 | "version": "1.3.0", 1412 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1413 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1414 | "dev": true, 1415 | "requires": { 1416 | "safe-buffer": "~5.2.0" 1417 | } 1418 | }, 1419 | "subarg": { 1420 | "version": "1.0.0", 1421 | "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", 1422 | "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", 1423 | "dev": true, 1424 | "requires": { 1425 | "minimist": "^1.1.0" 1426 | } 1427 | }, 1428 | "syntax-error": { 1429 | "version": "1.4.0", 1430 | "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", 1431 | "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", 1432 | "dev": true, 1433 | "requires": { 1434 | "acorn-node": "^1.2.0" 1435 | } 1436 | }, 1437 | "tape": { 1438 | "version": "3.6.1", 1439 | "resolved": "https://registry.npmjs.org/tape/-/tape-3.6.1.tgz", 1440 | "integrity": "sha1-SJPdU+KApfWMDOswwsDrs7zVHh8=", 1441 | "dev": true, 1442 | "requires": { 1443 | "deep-equal": "~0.2.0", 1444 | "defined": "~0.0.0", 1445 | "glob": "~3.2.9", 1446 | "inherits": "~2.0.1", 1447 | "object-inspect": "~0.4.0", 1448 | "resumer": "~0.0.0", 1449 | "through": "~2.3.4" 1450 | }, 1451 | "dependencies": { 1452 | "defined": { 1453 | "version": "0.0.0", 1454 | "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz", 1455 | "integrity": "sha1-817qfXBekzuvE7LwOz+D2SFAOz4=", 1456 | "dev": true 1457 | }, 1458 | "glob": { 1459 | "version": "3.2.11", 1460 | "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", 1461 | "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", 1462 | "dev": true, 1463 | "requires": { 1464 | "inherits": "2", 1465 | "minimatch": "0.3" 1466 | } 1467 | }, 1468 | "minimatch": { 1469 | "version": "0.3.0", 1470 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", 1471 | "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", 1472 | "dev": true, 1473 | "requires": { 1474 | "lru-cache": "2", 1475 | "sigmund": "~1.0.0" 1476 | } 1477 | } 1478 | } 1479 | }, 1480 | "through": { 1481 | "version": "2.3.8", 1482 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1483 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 1484 | "dev": true 1485 | }, 1486 | "through2": { 1487 | "version": "2.0.5", 1488 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1489 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1490 | "dev": true, 1491 | "requires": { 1492 | "readable-stream": "~2.3.6", 1493 | "xtend": "~4.0.1" 1494 | } 1495 | }, 1496 | "timers-browserify": { 1497 | "version": "1.4.2", 1498 | "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", 1499 | "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", 1500 | "dev": true, 1501 | "requires": { 1502 | "process": "~0.11.0" 1503 | } 1504 | }, 1505 | "tty-browserify": { 1506 | "version": "0.0.1", 1507 | "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", 1508 | "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", 1509 | "dev": true 1510 | }, 1511 | "typedarray": { 1512 | "version": "0.0.6", 1513 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1514 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 1515 | "dev": true 1516 | }, 1517 | "umd": { 1518 | "version": "3.0.3", 1519 | "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", 1520 | "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", 1521 | "dev": true 1522 | }, 1523 | "undeclared-identifiers": { 1524 | "version": "1.1.3", 1525 | "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", 1526 | "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", 1527 | "dev": true, 1528 | "requires": { 1529 | "acorn-node": "^1.3.0", 1530 | "dash-ast": "^1.0.0", 1531 | "get-assigned-identifiers": "^1.2.0", 1532 | "simple-concat": "^1.0.0", 1533 | "xtend": "^4.0.1" 1534 | } 1535 | }, 1536 | "url": { 1537 | "version": "0.11.0", 1538 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 1539 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 1540 | "dev": true, 1541 | "requires": { 1542 | "punycode": "1.3.2", 1543 | "querystring": "0.2.0" 1544 | }, 1545 | "dependencies": { 1546 | "punycode": { 1547 | "version": "1.3.2", 1548 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 1549 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", 1550 | "dev": true 1551 | } 1552 | } 1553 | }, 1554 | "util": { 1555 | "version": "0.10.4", 1556 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", 1557 | "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", 1558 | "dev": true, 1559 | "requires": { 1560 | "inherits": "2.0.3" 1561 | }, 1562 | "dependencies": { 1563 | "inherits": { 1564 | "version": "2.0.3", 1565 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1566 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 1567 | "dev": true 1568 | } 1569 | } 1570 | }, 1571 | "util-deprecate": { 1572 | "version": "1.0.2", 1573 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1574 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1575 | "dev": true 1576 | }, 1577 | "vm-browserify": { 1578 | "version": "1.1.2", 1579 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", 1580 | "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", 1581 | "dev": true 1582 | }, 1583 | "wrappy": { 1584 | "version": "1.0.2", 1585 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1586 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1587 | "dev": true 1588 | }, 1589 | "xtend": { 1590 | "version": "4.0.2", 1591 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1592 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1593 | "dev": true 1594 | } 1595 | } 1596 | } 1597 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "interval-tree-1d", 3 | "version": "1.0.4", 4 | "description": "1D interval tree data structure", 5 | "main": "interval-tree.js", 6 | "directories": { 7 | "test": "test" 8 | }, 9 | "dependencies": { 10 | "binary-search-bounds": "^2.0.0" 11 | }, 12 | "devDependencies": { 13 | "covert": "^1.0.1", 14 | "tape": "^3.5.0" 15 | }, 16 | "scripts": { 17 | "test": "tape test/test.js", 18 | "coverage": "covert test/test.js" 19 | }, 20 | "repository": { 21 | "type": "git", 22 | "url": "git://github.com/mikolalysenko/interval-tree-1d.git" 23 | }, 24 | "keywords": [ 25 | "point", 26 | "location", 27 | "interval", 28 | "range", 29 | "query", 30 | "search", 31 | "overlap" 32 | ], 33 | "author": "Mikola Lysenko", 34 | "license": "MIT", 35 | "bugs": { 36 | "url": "https://github.com/mikolalysenko/interval-tree-1d/issues" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | var util = require('util') 2 | var tape = require('tape') 3 | 4 | var createIntervalTree = require('../interval-tree.js') 5 | 6 | function cmpInterval(a, b) { 7 | var d = a[0] - b[0] 8 | if(d) { return d } 9 | return a[1] - b[1] 10 | } 11 | 12 | tape('fuzz test', function(t) { 13 | function verifyTree(tree, intervals) { 14 | function testInterval(x) { 15 | var expected = [] 16 | if(x[0] <= x[1]) 17 | for(var j=0; j= y[0] && y[1] >= x[0]) { 20 | expected.push(y) 21 | } 22 | } 23 | expected.sort(cmpInterval) 24 | 25 | var actual = [] 26 | tree.queryInterval(x[0], x[1], function(j) { 27 | actual.push(j) 28 | }) 29 | actual.sort(cmpInterval) 30 | 31 | t.same(actual, expected, 'query interval: ' + x) 32 | } 33 | for(var i=0; i 0) { 95 | t.ok(leftP[i][0] >= leftP[i-1][0], 'order ok') 96 | } 97 | var y = leftP[i] 98 | t.ok(y[0] <= midp && midp <= y[1], 'interval ok') 99 | } 100 | 101 | //Verify right end points in ascending order 102 | var rightP = node.rightPoints.slice() 103 | for(var i=0; i 0) { 105 | t.ok(rightP[i][1] >= rightP[i-1][1], 'order ok') 106 | } 107 | var y = rightP[i] 108 | t.ok(y[0] <= midp && midp <= y[1], 'interval ok') 109 | } 110 | 111 | leftP.sort(cmpInterval) 112 | rightP.sort(cmpInterval) 113 | t.same(leftP, rightP, 'intervals are consistent') 114 | 115 | var leftCount = verifyNode(node.left, left, node.mid) 116 | var rightCount = verifyNode(node.right, node.mid, right) 117 | var actualCount = leftCount + rightCount + leftP.length 118 | t.equals(node.count, actualCount, 'node count consistent') 119 | 120 | return actualCount 121 | } 122 | verifyNode(tree.root, -Infinity, Infinity) 123 | } 124 | 125 | //Check empty tree 126 | verifyTree(createIntervalTree(), []) 127 | 128 | //Try trees with uniformly distributed end points 129 | for(var count=0; count<10; ++count) { 130 | //Create empty tree and insert 100 intervals 131 | var intervals = [] 132 | var tree = createIntervalTree() 133 | for(var i=0; i<100; ++i) { 134 | var a = Math.random() 135 | var b = a + Math.random() 136 | var x = [a,b] 137 | intervals.push(x) 138 | tree.insert(x) 139 | } 140 | verifyTree(tree, intervals) 141 | 142 | //Remove half the intervals 143 | for(var i=99; i>=50; --i) { 144 | tree.remove(intervals.pop()) 145 | } 146 | verifyTree(tree, intervals) 147 | } 148 | 149 | //Trees with quantized end points 150 | for(var count=0; count<10; ++count) { 151 | //Create empty tree and insert 100 intervals 152 | var intervals = [] 153 | var tree = createIntervalTree() 154 | for(var i=0; i<100; ++i) { 155 | var a = Math.floor(8.0*Math.random())/8.0 156 | var b = Math.max(a + Math.floor(8.0*Math.random())/8.0, 1.0) 157 | var x = [a,b] 158 | intervals.push(x) 159 | tree.insert(x) 160 | } 161 | verifyTree(tree, intervals) 162 | 163 | //Remove half the intervals 164 | for(var i=99; i>=50; --i) { 165 | tree.remove(intervals.pop()) 166 | } 167 | verifyTree(tree, intervals) 168 | } 169 | 170 | var stackIntervals = [] 171 | for(var i=0; i<100; ++i) { 172 | stackIntervals.push([i/200, 1.0-(i/200)]) 173 | } 174 | var tree = createIntervalTree(stackIntervals) 175 | verifyTree(tree, stackIntervals) 176 | 177 | t.end() 178 | }) 179 | 180 | tape('containment', function(t) { 181 | var tree = createIntervalTree([[0, 100]]) 182 | var count = 0 183 | function incr() { count++ } 184 | 185 | tree.queryInterval(10, 20, incr) 186 | t.equals(count, 1) 187 | 188 | count = 0; 189 | tree.queryInterval(100, 100, incr) 190 | t.equals(count, 1) 191 | 192 | count = 0; 193 | tree.queryInterval(110, 111, incr) 194 | t.equals(count, 0) 195 | 196 | var tree = createIntervalTree([[0, 20], [30, 50]]) 197 | count = 0 198 | tree.queryInterval(10, 15, incr) 199 | t.equals(count, 1) 200 | 201 | count = 0 202 | tree.queryInterval(25, 26, incr) 203 | t.equals(count, 0) 204 | 205 | count = 0 206 | tree.queryInterval(35, 40, incr) 207 | t.equals(count, 1) 208 | 209 | t.end() 210 | }) --------------------------------------------------------------------------------