├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── lib └── HttpError.js ├── package-lock.json ├── package.json └── test └── HttpError.js /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | sudo: false 3 | node_js: 4 | - "6" 5 | - "8" 6 | - "10" 7 | script: 8 | - npm test 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011, One.com 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are 6 | met: 7 | 8 | * Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | * Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in 12 | the documentation and/or other materials provided with the 13 | distribution. 14 | * Neither the name of the author nor the names of contributors may 15 | be used to endorse or promote products derived from this 16 | software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 19 | IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20 | TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 21 | PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 | HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | node-httperrors 2 | =============== 3 | 4 | Exposes HTTP 4xx and 5xx status codes as JavaScript Error objects. The error classes are created using the createError module. 5 | 6 | The original use case for `httpErrors` is to use a custom express error handler that uses the `statusCode` property of the error instance as the status code for the response, and optionally logs further info from the error. 7 | 8 | 9 | Installation 10 | ------------ 11 | 12 | Make sure you have node.js and npm installed, then run: 13 | 14 | npm install httperrors 15 | 16 | Usage 17 | ----- 18 | 19 | var httpErrors = require('httperrors'); 20 | 21 | // Instatiate by status code: 22 | var myError = httpErrors(412); 23 | 24 | // Instantiate by name (UpperCamelCase): 25 | var err = new httpErrors.NotFound('The thing you were looking for was not found'); 26 | 27 | console.warn(err.toString()); // NotFound [404]: The thing you were looking for was not found 28 | 29 | if (identityCrisis) { 30 | throw new httpErrors.ImATeapot('Dude...'); 31 | } 32 | 33 | The CamelCased error name is exposed as a true property on the 34 | instances, so your error handling code becomes quite readable (and you 35 | can avoid using instanceof): 36 | 37 | if (err.NotFound) { 38 | // ... 39 | } else if (err.BadGateway) { 40 | // ... 41 | } 42 | 43 | You can also create an error by status code (useful when proxying): 44 | 45 | function fetchSomething(cb) { 46 | var request = require('request'); 47 | request('http://example.com/thething', function (err, response) { 48 | if (err) { 49 | return cb(new (httpErrors[response.statusCode] || httpErrors.BadGateway)()); 50 | } 51 | // ... 52 | }); 53 | } 54 | 55 | License 56 | ------- 57 | 58 | 3-clause BSD license -- see the `LICENSE` file for details. 59 | -------------------------------------------------------------------------------- /lib/HttpError.js: -------------------------------------------------------------------------------- 1 | var createError = require('createerror'); 2 | 3 | // Copied from /lib/_http_server.js (node.js@7c9a691): 4 | var httpErrorNameByStatusCode = { 5 | 400: 'Bad Request', 6 | 401: 'Unauthorized', 7 | 402: 'Payment Required', 8 | 403: 'Forbidden', 9 | 404: 'Not Found', 10 | 405: 'Method Not Allowed', 11 | 406: 'Not Acceptable', 12 | 407: 'Proxy Authentication Required', 13 | 408: 'Request Time-out', 14 | 409: 'Conflict', 15 | 410: 'Gone', 16 | 411: 'Length Required', 17 | 412: 'Precondition Failed', 18 | 413: 'Payload Too Large', 19 | 414: 'URI Too Long', 20 | 415: 'Unsupported Media Type', 21 | 416: 'Range Not Satisfiable', 22 | 417: 'Expectation Failed', 23 | 418: 'I\'m a teapot', // RFC 2324 24 | 421: 'Misdirected Request', 25 | 422: 'Unprocessable Entity', // RFC 4918 26 | 423: 'Locked', // RFC 4918 27 | 424: 'Failed Dependency', // RFC 4918 28 | 425: 'Unordered Collection', // RFC 4918 29 | 426: 'Upgrade Required', // RFC 2817 30 | 428: 'Precondition Required', // RFC 6585 31 | 429: 'Too Many Requests', // RFC 6585 32 | 431: 'Request Header Fields Too Large', // RFC 6585 33 | 451: 'Unavailable For Legal Reasons', 34 | 500: 'Internal Server Error', 35 | 501: 'Not Implemented', 36 | 502: 'Bad Gateway', 37 | 503: 'Service Unavailable', 38 | 504: 'Gateway Timeout', 39 | 505: 'HTTP Version Not Supported', 40 | 506: 'Variant Also Negotiates', // RFC 2295 41 | 507: 'Insufficient Storage', // RFC 4918 42 | 508: 'Loop Detected', 43 | 509: 'Bandwidth Limit Exceeded', 44 | 510: 'Not Extended', // RFC 2774 45 | 511: 'Network Authentication Required' // RFC 6585 46 | }; 47 | 48 | var HttpError = module.exports = createError({ 49 | name: 'HttpError', 50 | preprocess: function (err) { 51 | if (!(err instanceof HttpError)) { 52 | if (typeof err === 'number' && !HttpError.hasOwnProperty(err)) { 53 | return { statusCode: err }; 54 | } else if ((typeof err === 'string' || typeof err === 'number') && HttpError.hasOwnProperty(err)) { 55 | return new HttpError[err](err); 56 | } else if (err && err.code && HttpError.hasOwnProperty(err.code)) { 57 | return new HttpError[err.code](err); 58 | } 59 | // else return generic HttpError 60 | } 61 | } 62 | }); 63 | 64 | HttpError.supports = function (errorOrErrorCode) { 65 | if (typeof errorOrErrorCode === 'string') { 66 | return HttpError.hasOwnProperty(errorOrErrorCode); 67 | } else if (errorOrErrorCode && errorOrErrorCode.code) { 68 | return HttpError.hasOwnProperty(errorOrErrorCode.code); 69 | } else { 70 | return false; 71 | } 72 | }; 73 | 74 | // For backwards compatibility: 75 | HttpError.HttpError = HttpError; 76 | 77 | /// Map the error codes/names, as defined in Node's [http 78 | /// module](http://nodejs.org/docs/latest/api/http.html). 79 | Object.keys(httpErrorNameByStatusCode).forEach(function (statusCode) { 80 | addError(+statusCode, httpErrorNameByStatusCode[statusCode]); 81 | }); 82 | 83 | function addError(statusCode, httpErrorName, Superclass) { 84 | statusCode = +statusCode; // turn into a number 85 | 86 | // Only include 4xx and 5xx 87 | if (statusCode < 400) { 88 | return; 89 | } 90 | 91 | // Invent a type by camel casing the usual message and removing 92 | // non-alphabetical chars 93 | var name = httpErrorName.replace(/ ([a-z])/gi, function ($0, $1) { 94 | return $1.toUpperCase(); 95 | }).replace(/[^a-z]/gi, ''); 96 | 97 | // Add the error to the exported object and alias it as `statusCode` 98 | // allows for new HttpError[res.statusCode] in a http proxying setting 99 | var Subclass = createError({ 100 | statusCode: statusCode, 101 | status: statusCode, 102 | name: name, 103 | http: true, 104 | message: 'HTTP ' + statusCode + ' ' + httpErrorName 105 | }, Superclass || HttpError.HttpError); 106 | 107 | HttpError[name] = Subclass; 108 | if (!HttpError[statusCode]) { 109 | HttpError[statusCode] = Subclass; 110 | } 111 | return Subclass; 112 | } 113 | 114 | addError(413, 'RequestEntityTooLarge', HttpError.PayloadTooLarge); 115 | addError(414, 'RequestURITooLarge', HttpError.URITooLong); 116 | addError(416, 'RequestedRangeNotSatisfiable', HttpError.RangeNotSatisfiable); 117 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "httperrors", 3 | "version": "2.3.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "JSONStream": { 8 | "version": "1.3.1", 9 | "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", 10 | "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", 11 | "dev": true, 12 | "requires": { 13 | "jsonparse": "1.3.1", 14 | "through": "2.3.8" 15 | } 16 | }, 17 | "acorn": { 18 | "version": "4.0.13", 19 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", 20 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", 21 | "dev": true 22 | }, 23 | "align-text": { 24 | "version": "0.1.4", 25 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", 26 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", 27 | "dev": true, 28 | "requires": { 29 | "kind-of": "3.2.2", 30 | "longest": "1.0.1", 31 | "repeat-string": "1.6.1" 32 | } 33 | }, 34 | "ansi-styles": { 35 | "version": "2.0.0", 36 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.0.0.tgz", 37 | "integrity": "sha1-QysmFi/qG2PIeIlqvIzFVI8lBj4=", 38 | "dev": true 39 | }, 40 | "array-changes": { 41 | "version": "1.2.1", 42 | "resolved": "https://registry.npmjs.org/array-changes/-/array-changes-1.2.1.tgz", 43 | "integrity": "sha1-/GEGtuWqECP+NNmWQq5KaZpnH7Y=", 44 | "dev": true, 45 | "requires": { 46 | "arraydiff-papandreou": "0.1.1-patch1" 47 | } 48 | }, 49 | "array-changes-async": { 50 | "version": "2.0.2", 51 | "resolved": "https://registry.npmjs.org/array-changes-async/-/array-changes-async-2.0.2.tgz", 52 | "integrity": "sha1-TETTUn2bw0freQKxsYUgLN7UTQs=", 53 | "dev": true, 54 | "requires": { 55 | "arraydiff-async": "0.2.0" 56 | } 57 | }, 58 | "array-filter": { 59 | "version": "0.0.1", 60 | "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", 61 | "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", 62 | "dev": true 63 | }, 64 | "array-map": { 65 | "version": "0.0.0", 66 | "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", 67 | "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", 68 | "dev": true 69 | }, 70 | "array-reduce": { 71 | "version": "0.0.0", 72 | "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", 73 | "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", 74 | "dev": true 75 | }, 76 | "arraydiff-async": { 77 | "version": "0.2.0", 78 | "resolved": "https://registry.npmjs.org/arraydiff-async/-/arraydiff-async-0.2.0.tgz", 79 | "integrity": "sha1-uwUouY6BS3AvAfSWvHO+w+V/QIY=", 80 | "dev": true 81 | }, 82 | "arraydiff-papandreou": { 83 | "version": "0.1.1-patch1", 84 | "resolved": "https://registry.npmjs.org/arraydiff-papandreou/-/arraydiff-papandreou-0.1.1-patch1.tgz", 85 | "integrity": "sha1-ApAnC/27Sy762LdIJjitWnIQkhA=", 86 | "dev": true 87 | }, 88 | "asn1.js": { 89 | "version": "4.9.1", 90 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", 91 | "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", 92 | "dev": true, 93 | "requires": { 94 | "bn.js": "4.11.8", 95 | "inherits": "2.0.3", 96 | "minimalistic-assert": "1.0.0" 97 | } 98 | }, 99 | "assert": { 100 | "version": "1.3.0", 101 | "resolved": "https://registry.npmjs.org/assert/-/assert-1.3.0.tgz", 102 | "integrity": "sha1-A5OaYiWCqBLMICMgoLmlbJuBWEk=", 103 | "dev": true, 104 | "requires": { 105 | "util": "0.10.3" 106 | } 107 | }, 108 | "astw": { 109 | "version": "2.2.0", 110 | "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", 111 | "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", 112 | "dev": true, 113 | "requires": { 114 | "acorn": "4.0.13" 115 | } 116 | }, 117 | "async": { 118 | "version": "0.2.10", 119 | "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", 120 | "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", 121 | "dev": true 122 | }, 123 | "balanced-match": { 124 | "version": "1.0.0", 125 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 126 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 127 | "dev": true 128 | }, 129 | "base64-js": { 130 | "version": "1.2.1", 131 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", 132 | "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", 133 | "dev": true 134 | }, 135 | "bluebird": { 136 | "version": "2.9.34", 137 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz", 138 | "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=", 139 | "dev": true 140 | }, 141 | "bn.js": { 142 | "version": "4.11.8", 143 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", 144 | "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", 145 | "dev": true 146 | }, 147 | "brace-expansion": { 148 | "version": "1.1.8", 149 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 150 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 151 | "dev": true, 152 | "requires": { 153 | "balanced-match": "1.0.0", 154 | "concat-map": "0.0.1" 155 | } 156 | }, 157 | "brorand": { 158 | "version": "1.1.0", 159 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 160 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", 161 | "dev": true 162 | }, 163 | "browser-pack": { 164 | "version": "6.0.2", 165 | "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz", 166 | "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", 167 | "dev": true, 168 | "requires": { 169 | "JSONStream": "1.3.1", 170 | "combine-source-map": "0.7.2", 171 | "defined": "1.0.0", 172 | "through2": "2.0.3", 173 | "umd": "3.0.1" 174 | } 175 | }, 176 | "browser-resolve": { 177 | "version": "1.11.2", 178 | "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", 179 | "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", 180 | "dev": true, 181 | "requires": { 182 | "resolve": "1.1.7" 183 | }, 184 | "dependencies": { 185 | "resolve": { 186 | "version": "1.1.7", 187 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", 188 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", 189 | "dev": true 190 | } 191 | } 192 | }, 193 | "browser-stdout": { 194 | "version": "1.3.1", 195 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 196 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 197 | "dev": true 198 | }, 199 | "browserify": { 200 | "version": "13.0.0", 201 | "resolved": "https://registry.npmjs.org/browserify/-/browserify-13.0.0.tgz", 202 | "integrity": "sha1-jyI7sk/07kM15r6pZx3ilOQ7pqM=", 203 | "dev": true, 204 | "requires": { 205 | "JSONStream": "1.3.1", 206 | "assert": "1.3.0", 207 | "browser-pack": "6.0.2", 208 | "browser-resolve": "1.11.2", 209 | "browserify-zlib": "0.1.4", 210 | "buffer": "4.9.1", 211 | "concat-stream": "1.5.2", 212 | "console-browserify": "1.1.0", 213 | "constants-browserify": "1.0.0", 214 | "crypto-browserify": "3.11.1", 215 | "defined": "1.0.0", 216 | "deps-sort": "2.0.0", 217 | "domain-browser": "1.1.7", 218 | "duplexer2": "0.1.4", 219 | "events": "1.1.1", 220 | "glob": "5.0.15", 221 | "has": "1.0.1", 222 | "htmlescape": "1.1.1", 223 | "https-browserify": "0.0.1", 224 | "inherits": "2.0.3", 225 | "insert-module-globals": "7.0.1", 226 | "isarray": "0.0.1", 227 | "labeled-stream-splicer": "2.0.0", 228 | "module-deps": "4.1.1", 229 | "os-browserify": "0.1.2", 230 | "parents": "1.0.1", 231 | "path-browserify": "0.0.0", 232 | "process": "0.11.10", 233 | "punycode": "1.4.1", 234 | "querystring-es3": "0.2.1", 235 | "read-only-stream": "2.0.0", 236 | "readable-stream": "2.3.3", 237 | "resolve": "1.4.0", 238 | "shasum": "1.0.2", 239 | "shell-quote": "1.6.1", 240 | "stream-browserify": "2.0.1", 241 | "stream-http": "2.7.2", 242 | "string_decoder": "0.10.31", 243 | "subarg": "1.0.0", 244 | "syntax-error": "1.3.0", 245 | "through2": "2.0.3", 246 | "timers-browserify": "1.4.2", 247 | "tty-browserify": "0.0.0", 248 | "url": "0.11.0", 249 | "util": "0.10.3", 250 | "vm-browserify": "0.0.4", 251 | "xtend": "4.0.1" 252 | } 253 | }, 254 | "browserify-aes": { 255 | "version": "1.0.6", 256 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", 257 | "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", 258 | "dev": true, 259 | "requires": { 260 | "buffer-xor": "1.0.3", 261 | "cipher-base": "1.0.4", 262 | "create-hash": "1.1.3", 263 | "evp_bytestokey": "1.0.2", 264 | "inherits": "2.0.3" 265 | } 266 | }, 267 | "browserify-cipher": { 268 | "version": "1.0.0", 269 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", 270 | "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", 271 | "dev": true, 272 | "requires": { 273 | "browserify-aes": "1.0.6", 274 | "browserify-des": "1.0.0", 275 | "evp_bytestokey": "1.0.2" 276 | } 277 | }, 278 | "browserify-des": { 279 | "version": "1.0.0", 280 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", 281 | "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", 282 | "dev": true, 283 | "requires": { 284 | "cipher-base": "1.0.4", 285 | "des.js": "1.0.0", 286 | "inherits": "2.0.3" 287 | } 288 | }, 289 | "browserify-rsa": { 290 | "version": "4.0.1", 291 | "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", 292 | "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", 293 | "dev": true, 294 | "requires": { 295 | "bn.js": "4.11.8", 296 | "randombytes": "2.0.5" 297 | } 298 | }, 299 | "browserify-sign": { 300 | "version": "4.0.4", 301 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", 302 | "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", 303 | "dev": true, 304 | "requires": { 305 | "bn.js": "4.11.8", 306 | "browserify-rsa": "4.0.1", 307 | "create-hash": "1.1.3", 308 | "create-hmac": "1.1.6", 309 | "elliptic": "6.4.0", 310 | "inherits": "2.0.3", 311 | "parse-asn1": "5.1.0" 312 | } 313 | }, 314 | "browserify-zlib": { 315 | "version": "0.1.4", 316 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", 317 | "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", 318 | "dev": true, 319 | "requires": { 320 | "pako": "0.2.9" 321 | } 322 | }, 323 | "buffer": { 324 | "version": "4.9.1", 325 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", 326 | "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", 327 | "dev": true, 328 | "requires": { 329 | "base64-js": "1.2.1", 330 | "ieee754": "1.1.8", 331 | "isarray": "1.0.0" 332 | }, 333 | "dependencies": { 334 | "isarray": { 335 | "version": "1.0.0", 336 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 337 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 338 | "dev": true 339 | } 340 | } 341 | }, 342 | "buffer-xor": { 343 | "version": "1.0.3", 344 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 345 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", 346 | "dev": true 347 | }, 348 | "builtin-status-codes": { 349 | "version": "3.0.0", 350 | "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", 351 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", 352 | "dev": true 353 | }, 354 | "cached-path-relative": { 355 | "version": "1.0.1", 356 | "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", 357 | "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", 358 | "dev": true 359 | }, 360 | "camelcase": { 361 | "version": "1.2.1", 362 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 363 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", 364 | "dev": true 365 | }, 366 | "center-align": { 367 | "version": "0.1.3", 368 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", 369 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", 370 | "dev": true, 371 | "requires": { 372 | "align-text": "0.1.4", 373 | "lazy-cache": "1.0.4" 374 | } 375 | }, 376 | "cipher-base": { 377 | "version": "1.0.4", 378 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 379 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 380 | "dev": true, 381 | "requires": { 382 | "inherits": "2.0.3", 383 | "safe-buffer": "5.1.1" 384 | } 385 | }, 386 | "cliui": { 387 | "version": "2.1.0", 388 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", 389 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", 390 | "dev": true, 391 | "requires": { 392 | "center-align": "0.1.3", 393 | "right-align": "0.1.3", 394 | "wordwrap": "0.0.2" 395 | } 396 | }, 397 | "color-diff": { 398 | "version": "0.1.7", 399 | "resolved": "https://registry.npmjs.org/color-diff/-/color-diff-0.1.7.tgz", 400 | "integrity": "sha1-bbeM2UgqjkWdQIIer0tQMoPcuOI=", 401 | "dev": true 402 | }, 403 | "combine-source-map": { 404 | "version": "0.7.2", 405 | "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", 406 | "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", 407 | "dev": true, 408 | "requires": { 409 | "convert-source-map": "1.1.3", 410 | "inline-source-map": "0.6.2", 411 | "lodash.memoize": "3.0.4", 412 | "source-map": "0.5.7" 413 | } 414 | }, 415 | "commander": { 416 | "version": "2.15.1", 417 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", 418 | "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", 419 | "dev": true 420 | }, 421 | "concat-map": { 422 | "version": "0.0.1", 423 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 424 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 425 | "dev": true 426 | }, 427 | "concat-stream": { 428 | "version": "1.5.2", 429 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", 430 | "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", 431 | "dev": true, 432 | "requires": { 433 | "inherits": "2.0.3", 434 | "readable-stream": "2.0.6", 435 | "typedarray": "0.0.6" 436 | }, 437 | "dependencies": { 438 | "isarray": { 439 | "version": "1.0.0", 440 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 441 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 442 | "dev": true 443 | }, 444 | "readable-stream": { 445 | "version": "2.0.6", 446 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", 447 | "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", 448 | "dev": true, 449 | "requires": { 450 | "core-util-is": "1.0.2", 451 | "inherits": "2.0.3", 452 | "isarray": "1.0.0", 453 | "process-nextick-args": "1.0.7", 454 | "string_decoder": "0.10.31", 455 | "util-deprecate": "1.0.2" 456 | } 457 | } 458 | } 459 | }, 460 | "console-browserify": { 461 | "version": "1.1.0", 462 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", 463 | "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", 464 | "dev": true, 465 | "requires": { 466 | "date-now": "0.1.4" 467 | } 468 | }, 469 | "constants-browserify": { 470 | "version": "1.0.0", 471 | "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", 472 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", 473 | "dev": true 474 | }, 475 | "convert-source-map": { 476 | "version": "1.1.3", 477 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", 478 | "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", 479 | "dev": true 480 | }, 481 | "core-util-is": { 482 | "version": "1.0.2", 483 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 484 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 485 | "dev": true 486 | }, 487 | "create-ecdh": { 488 | "version": "4.0.0", 489 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", 490 | "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", 491 | "dev": true, 492 | "requires": { 493 | "bn.js": "4.11.8", 494 | "elliptic": "6.4.0" 495 | } 496 | }, 497 | "create-hash": { 498 | "version": "1.1.3", 499 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", 500 | "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", 501 | "dev": true, 502 | "requires": { 503 | "cipher-base": "1.0.4", 504 | "inherits": "2.0.3", 505 | "ripemd160": "2.0.1", 506 | "sha.js": "2.4.8" 507 | } 508 | }, 509 | "create-hmac": { 510 | "version": "1.1.6", 511 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", 512 | "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", 513 | "dev": true, 514 | "requires": { 515 | "cipher-base": "1.0.4", 516 | "create-hash": "1.1.3", 517 | "inherits": "2.0.3", 518 | "ripemd160": "2.0.1", 519 | "safe-buffer": "5.1.1", 520 | "sha.js": "2.4.8" 521 | } 522 | }, 523 | "createerror": { 524 | "version": "1.3.0", 525 | "resolved": "https://registry.npmjs.org/createerror/-/createerror-1.3.0.tgz", 526 | "integrity": "sha512-w9UZUtkaGd8MfS7eMG7Sa0lV5vCJghqQfiOnwNVrPhbZScUp5h0jwYoAF933MKlotlG1JAJOCCT3xU6r+SDKNw==" 527 | }, 528 | "crypto-browserify": { 529 | "version": "3.11.1", 530 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", 531 | "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", 532 | "dev": true, 533 | "requires": { 534 | "browserify-cipher": "1.0.0", 535 | "browserify-sign": "4.0.4", 536 | "create-ecdh": "4.0.0", 537 | "create-hash": "1.1.3", 538 | "create-hmac": "1.1.6", 539 | "diffie-hellman": "5.0.2", 540 | "inherits": "2.0.3", 541 | "pbkdf2": "3.0.13", 542 | "public-encrypt": "4.0.0", 543 | "randombytes": "2.0.5" 544 | } 545 | }, 546 | "date-now": { 547 | "version": "0.1.4", 548 | "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", 549 | "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", 550 | "dev": true 551 | }, 552 | "debug": { 553 | "version": "3.1.0", 554 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 555 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 556 | "dev": true, 557 | "requires": { 558 | "ms": "2.0.0" 559 | } 560 | }, 561 | "decamelize": { 562 | "version": "1.2.0", 563 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 564 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 565 | "dev": true 566 | }, 567 | "defined": { 568 | "version": "1.0.0", 569 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 570 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 571 | "dev": true 572 | }, 573 | "deps-sort": { 574 | "version": "2.0.0", 575 | "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", 576 | "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", 577 | "dev": true, 578 | "requires": { 579 | "JSONStream": "1.3.1", 580 | "shasum": "1.0.2", 581 | "subarg": "1.0.0", 582 | "through2": "2.0.3" 583 | } 584 | }, 585 | "des.js": { 586 | "version": "1.0.0", 587 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", 588 | "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", 589 | "dev": true, 590 | "requires": { 591 | "inherits": "2.0.3", 592 | "minimalistic-assert": "1.0.0" 593 | } 594 | }, 595 | "detect-indent": { 596 | "version": "3.0.1", 597 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz", 598 | "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", 599 | "dev": true, 600 | "requires": { 601 | "get-stdin": "4.0.1", 602 | "minimist": "1.2.0", 603 | "repeating": "1.1.3" 604 | } 605 | }, 606 | "detective": { 607 | "version": "4.5.0", 608 | "resolved": "https://registry.npmjs.org/detective/-/detective-4.5.0.tgz", 609 | "integrity": "sha1-blqMaybmx6JUsca210kNmOyR7dE=", 610 | "dev": true, 611 | "requires": { 612 | "acorn": "4.0.13", 613 | "defined": "1.0.0" 614 | } 615 | }, 616 | "diff": { 617 | "version": "3.5.0", 618 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 619 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 620 | "dev": true 621 | }, 622 | "diffie-hellman": { 623 | "version": "5.0.2", 624 | "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", 625 | "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", 626 | "dev": true, 627 | "requires": { 628 | "bn.js": "4.11.8", 629 | "miller-rabin": "4.0.0", 630 | "randombytes": "2.0.5" 631 | } 632 | }, 633 | "domain-browser": { 634 | "version": "1.1.7", 635 | "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", 636 | "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", 637 | "dev": true 638 | }, 639 | "duplexer2": { 640 | "version": "0.1.4", 641 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", 642 | "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", 643 | "dev": true, 644 | "requires": { 645 | "readable-stream": "2.3.3" 646 | } 647 | }, 648 | "elliptic": { 649 | "version": "6.4.0", 650 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", 651 | "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", 652 | "dev": true, 653 | "requires": { 654 | "bn.js": "4.11.8", 655 | "brorand": "1.1.0", 656 | "hash.js": "1.1.3", 657 | "hmac-drbg": "1.0.1", 658 | "inherits": "2.0.3", 659 | "minimalistic-assert": "1.0.0", 660 | "minimalistic-crypto-utils": "1.0.1" 661 | } 662 | }, 663 | "escape-string-regexp": { 664 | "version": "1.0.5", 665 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 666 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 667 | "dev": true 668 | }, 669 | "events": { 670 | "version": "1.1.1", 671 | "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", 672 | "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", 673 | "dev": true 674 | }, 675 | "evp_bytestokey": { 676 | "version": "1.0.2", 677 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.2.tgz", 678 | "integrity": "sha512-ni0r0lrm7AOzsh2qC5mi9sj8S0gmj5fLNjfFpxN05FB4tAVZEKotbkjOtLPqTCX/CXT7NsUr6juZb4IFJeNNdA==", 679 | "dev": true, 680 | "requires": { 681 | "md5.js": "1.3.4", 682 | "safe-buffer": "5.1.1" 683 | } 684 | }, 685 | "fs.realpath": { 686 | "version": "1.0.0", 687 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 688 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 689 | "dev": true 690 | }, 691 | "function-bind": { 692 | "version": "1.1.0", 693 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", 694 | "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", 695 | "dev": true 696 | }, 697 | "get-stdin": { 698 | "version": "4.0.1", 699 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", 700 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", 701 | "dev": true 702 | }, 703 | "glob": { 704 | "version": "5.0.15", 705 | "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", 706 | "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", 707 | "dev": true, 708 | "requires": { 709 | "inflight": "1.0.6", 710 | "inherits": "2.0.3", 711 | "minimatch": "3.0.4", 712 | "once": "1.4.0", 713 | "path-is-absolute": "1.0.1" 714 | } 715 | }, 716 | "growl": { 717 | "version": "1.10.5", 718 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 719 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 720 | "dev": true 721 | }, 722 | "has": { 723 | "version": "1.0.1", 724 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", 725 | "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", 726 | "dev": true, 727 | "requires": { 728 | "function-bind": "1.1.0" 729 | } 730 | }, 731 | "has-flag": { 732 | "version": "3.0.0", 733 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 734 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 735 | "dev": true 736 | }, 737 | "hash-base": { 738 | "version": "2.0.2", 739 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", 740 | "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", 741 | "dev": true, 742 | "requires": { 743 | "inherits": "2.0.3" 744 | } 745 | }, 746 | "hash.js": { 747 | "version": "1.1.3", 748 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", 749 | "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", 750 | "dev": true, 751 | "requires": { 752 | "inherits": "2.0.3", 753 | "minimalistic-assert": "1.0.0" 754 | } 755 | }, 756 | "he": { 757 | "version": "1.1.1", 758 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", 759 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", 760 | "dev": true 761 | }, 762 | "hmac-drbg": { 763 | "version": "1.0.1", 764 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 765 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 766 | "dev": true, 767 | "requires": { 768 | "hash.js": "1.1.3", 769 | "minimalistic-assert": "1.0.0", 770 | "minimalistic-crypto-utils": "1.0.1" 771 | } 772 | }, 773 | "htmlescape": { 774 | "version": "1.1.1", 775 | "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", 776 | "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", 777 | "dev": true 778 | }, 779 | "https-browserify": { 780 | "version": "0.0.1", 781 | "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", 782 | "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", 783 | "dev": true 784 | }, 785 | "ieee754": { 786 | "version": "1.1.8", 787 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", 788 | "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", 789 | "dev": true 790 | }, 791 | "indexof": { 792 | "version": "0.0.1", 793 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 794 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", 795 | "dev": true 796 | }, 797 | "inflight": { 798 | "version": "1.0.6", 799 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 800 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 801 | "dev": true, 802 | "requires": { 803 | "once": "1.4.0", 804 | "wrappy": "1.0.2" 805 | } 806 | }, 807 | "inherits": { 808 | "version": "2.0.3", 809 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 810 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 811 | "dev": true 812 | }, 813 | "inline-source-map": { 814 | "version": "0.6.2", 815 | "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", 816 | "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", 817 | "dev": true, 818 | "requires": { 819 | "source-map": "0.5.7" 820 | } 821 | }, 822 | "insert-module-globals": { 823 | "version": "7.0.1", 824 | "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", 825 | "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", 826 | "dev": true, 827 | "requires": { 828 | "JSONStream": "1.3.1", 829 | "combine-source-map": "0.7.2", 830 | "concat-stream": "1.5.2", 831 | "is-buffer": "1.1.5", 832 | "lexical-scope": "1.2.0", 833 | "process": "0.11.10", 834 | "through2": "2.0.3", 835 | "xtend": "4.0.1" 836 | } 837 | }, 838 | "is-buffer": { 839 | "version": "1.1.5", 840 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", 841 | "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", 842 | "dev": true 843 | }, 844 | "is-finite": { 845 | "version": "1.0.2", 846 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 847 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 848 | "dev": true, 849 | "requires": { 850 | "number-is-nan": "1.0.1" 851 | } 852 | }, 853 | "isarray": { 854 | "version": "0.0.1", 855 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 856 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 857 | "dev": true 858 | }, 859 | "json-stable-stringify": { 860 | "version": "0.0.1", 861 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", 862 | "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", 863 | "dev": true, 864 | "requires": { 865 | "jsonify": "0.0.0" 866 | } 867 | }, 868 | "jsonify": { 869 | "version": "0.0.0", 870 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 871 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 872 | "dev": true 873 | }, 874 | "jsonparse": { 875 | "version": "1.3.1", 876 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", 877 | "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", 878 | "dev": true 879 | }, 880 | "kind-of": { 881 | "version": "3.2.2", 882 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 883 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 884 | "dev": true, 885 | "requires": { 886 | "is-buffer": "1.1.5" 887 | } 888 | }, 889 | "labeled-stream-splicer": { 890 | "version": "2.0.0", 891 | "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", 892 | "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", 893 | "dev": true, 894 | "requires": { 895 | "inherits": "2.0.3", 896 | "isarray": "0.0.1", 897 | "stream-splicer": "2.0.0" 898 | } 899 | }, 900 | "lazy-cache": { 901 | "version": "1.0.4", 902 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", 903 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", 904 | "dev": true 905 | }, 906 | "leven": { 907 | "version": "1.0.0", 908 | "resolved": "https://registry.npmjs.org/leven/-/leven-1.0.0.tgz", 909 | "integrity": "sha1-q1XidlxkNEheE9FgO/vktDRBKQg=", 910 | "dev": true 911 | }, 912 | "lexical-scope": { 913 | "version": "1.2.0", 914 | "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", 915 | "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", 916 | "dev": true, 917 | "requires": { 918 | "astw": "2.2.0" 919 | } 920 | }, 921 | "lodash.memoize": { 922 | "version": "3.0.4", 923 | "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", 924 | "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", 925 | "dev": true 926 | }, 927 | "longest": { 928 | "version": "1.0.1", 929 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", 930 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", 931 | "dev": true 932 | }, 933 | "magicpen": { 934 | "version": "5.5.0", 935 | "resolved": "https://registry.npmjs.org/magicpen/-/magicpen-5.5.0.tgz", 936 | "integrity": "sha1-wmSFVCDVfW3VzhufgQSp177uDEk=", 937 | "dev": true, 938 | "requires": { 939 | "ansi-styles": "2.0.0", 940 | "color-diff": "0.1.7", 941 | "supports-color": "1.2.0" 942 | } 943 | }, 944 | "md5.js": { 945 | "version": "1.3.4", 946 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", 947 | "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", 948 | "dev": true, 949 | "requires": { 950 | "hash-base": "3.0.4", 951 | "inherits": "2.0.3" 952 | }, 953 | "dependencies": { 954 | "hash-base": { 955 | "version": "3.0.4", 956 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", 957 | "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", 958 | "dev": true, 959 | "requires": { 960 | "inherits": "2.0.3", 961 | "safe-buffer": "5.1.1" 962 | } 963 | } 964 | } 965 | }, 966 | "miller-rabin": { 967 | "version": "4.0.0", 968 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", 969 | "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", 970 | "dev": true, 971 | "requires": { 972 | "bn.js": "4.11.8", 973 | "brorand": "1.1.0" 974 | } 975 | }, 976 | "minimalistic-assert": { 977 | "version": "1.0.0", 978 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", 979 | "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", 980 | "dev": true 981 | }, 982 | "minimalistic-crypto-utils": { 983 | "version": "1.0.1", 984 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 985 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", 986 | "dev": true 987 | }, 988 | "minimatch": { 989 | "version": "3.0.4", 990 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 991 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 992 | "dev": true, 993 | "requires": { 994 | "brace-expansion": "1.1.8" 995 | } 996 | }, 997 | "minimist": { 998 | "version": "1.2.0", 999 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1000 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 1001 | "dev": true 1002 | }, 1003 | "mkdirp": { 1004 | "version": "0.5.1", 1005 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1006 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1007 | "dev": true, 1008 | "requires": { 1009 | "minimist": "0.0.8" 1010 | }, 1011 | "dependencies": { 1012 | "minimist": { 1013 | "version": "0.0.8", 1014 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1015 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1016 | "dev": true 1017 | } 1018 | } 1019 | }, 1020 | "mocha": { 1021 | "version": "5.2.0", 1022 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", 1023 | "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", 1024 | "dev": true, 1025 | "requires": { 1026 | "browser-stdout": "1.3.1", 1027 | "commander": "2.15.1", 1028 | "debug": "3.1.0", 1029 | "diff": "3.5.0", 1030 | "escape-string-regexp": "1.0.5", 1031 | "glob": "7.1.2", 1032 | "growl": "1.10.5", 1033 | "he": "1.1.1", 1034 | "minimatch": "3.0.4", 1035 | "mkdirp": "0.5.1", 1036 | "supports-color": "5.4.0" 1037 | }, 1038 | "dependencies": { 1039 | "glob": { 1040 | "version": "7.1.2", 1041 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 1042 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 1043 | "dev": true, 1044 | "requires": { 1045 | "fs.realpath": "1.0.0", 1046 | "inflight": "1.0.6", 1047 | "inherits": "2.0.3", 1048 | "minimatch": "3.0.4", 1049 | "once": "1.4.0", 1050 | "path-is-absolute": "1.0.1" 1051 | } 1052 | }, 1053 | "supports-color": { 1054 | "version": "5.4.0", 1055 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", 1056 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", 1057 | "dev": true, 1058 | "requires": { 1059 | "has-flag": "3.0.0" 1060 | } 1061 | } 1062 | } 1063 | }, 1064 | "module-deps": { 1065 | "version": "4.1.1", 1066 | "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", 1067 | "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", 1068 | "dev": true, 1069 | "requires": { 1070 | "JSONStream": "1.3.1", 1071 | "browser-resolve": "1.11.2", 1072 | "cached-path-relative": "1.0.1", 1073 | "concat-stream": "1.5.2", 1074 | "defined": "1.0.0", 1075 | "detective": "4.5.0", 1076 | "duplexer2": "0.1.4", 1077 | "inherits": "2.0.3", 1078 | "parents": "1.0.1", 1079 | "readable-stream": "2.3.3", 1080 | "resolve": "1.4.0", 1081 | "stream-combiner2": "1.1.1", 1082 | "subarg": "1.0.0", 1083 | "through2": "2.0.3", 1084 | "xtend": "4.0.1" 1085 | } 1086 | }, 1087 | "ms": { 1088 | "version": "2.0.0", 1089 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1090 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1091 | "dev": true 1092 | }, 1093 | "number-is-nan": { 1094 | "version": "1.0.1", 1095 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1096 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 1097 | "dev": true 1098 | }, 1099 | "once": { 1100 | "version": "1.4.0", 1101 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1102 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1103 | "dev": true, 1104 | "requires": { 1105 | "wrappy": "1.0.2" 1106 | } 1107 | }, 1108 | "os-browserify": { 1109 | "version": "0.1.2", 1110 | "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", 1111 | "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", 1112 | "dev": true 1113 | }, 1114 | "pako": { 1115 | "version": "0.2.9", 1116 | "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", 1117 | "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", 1118 | "dev": true 1119 | }, 1120 | "parents": { 1121 | "version": "1.0.1", 1122 | "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", 1123 | "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", 1124 | "dev": true, 1125 | "requires": { 1126 | "path-platform": "0.11.15" 1127 | } 1128 | }, 1129 | "parse-asn1": { 1130 | "version": "5.1.0", 1131 | "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", 1132 | "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", 1133 | "dev": true, 1134 | "requires": { 1135 | "asn1.js": "4.9.1", 1136 | "browserify-aes": "1.0.6", 1137 | "create-hash": "1.1.3", 1138 | "evp_bytestokey": "1.0.2", 1139 | "pbkdf2": "3.0.13" 1140 | } 1141 | }, 1142 | "path-browserify": { 1143 | "version": "0.0.0", 1144 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", 1145 | "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", 1146 | "dev": true 1147 | }, 1148 | "path-is-absolute": { 1149 | "version": "1.0.1", 1150 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1151 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1152 | "dev": true 1153 | }, 1154 | "path-parse": { 1155 | "version": "1.0.5", 1156 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", 1157 | "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", 1158 | "dev": true 1159 | }, 1160 | "path-platform": { 1161 | "version": "0.11.15", 1162 | "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", 1163 | "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", 1164 | "dev": true 1165 | }, 1166 | "pbkdf2": { 1167 | "version": "3.0.13", 1168 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.13.tgz", 1169 | "integrity": "sha512-+dCHxDH+djNtjgWmvVC/my3SYBAKpKNqKSjLkp+GtWWYe4XPE+e/PSD2aCanlEZZnqPk2uekTKNC/ccbwd2X2Q==", 1170 | "dev": true, 1171 | "requires": { 1172 | "create-hash": "1.1.3", 1173 | "create-hmac": "1.1.6", 1174 | "ripemd160": "2.0.1", 1175 | "safe-buffer": "5.1.1", 1176 | "sha.js": "2.4.8" 1177 | } 1178 | }, 1179 | "process": { 1180 | "version": "0.11.10", 1181 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 1182 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", 1183 | "dev": true 1184 | }, 1185 | "process-nextick-args": { 1186 | "version": "1.0.7", 1187 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 1188 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", 1189 | "dev": true 1190 | }, 1191 | "public-encrypt": { 1192 | "version": "4.0.0", 1193 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", 1194 | "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", 1195 | "dev": true, 1196 | "requires": { 1197 | "bn.js": "4.11.8", 1198 | "browserify-rsa": "4.0.1", 1199 | "create-hash": "1.1.3", 1200 | "parse-asn1": "5.1.0", 1201 | "randombytes": "2.0.5" 1202 | } 1203 | }, 1204 | "punycode": { 1205 | "version": "1.4.1", 1206 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1207 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 1208 | "dev": true 1209 | }, 1210 | "querystring": { 1211 | "version": "0.2.0", 1212 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 1213 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", 1214 | "dev": true 1215 | }, 1216 | "querystring-es3": { 1217 | "version": "0.2.1", 1218 | "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", 1219 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", 1220 | "dev": true 1221 | }, 1222 | "randombytes": { 1223 | "version": "2.0.5", 1224 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", 1225 | "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", 1226 | "dev": true, 1227 | "requires": { 1228 | "safe-buffer": "5.1.1" 1229 | } 1230 | }, 1231 | "read-only-stream": { 1232 | "version": "2.0.0", 1233 | "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", 1234 | "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", 1235 | "dev": true, 1236 | "requires": { 1237 | "readable-stream": "2.3.3" 1238 | } 1239 | }, 1240 | "readable-stream": { 1241 | "version": "2.3.3", 1242 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 1243 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 1244 | "dev": true, 1245 | "requires": { 1246 | "core-util-is": "1.0.2", 1247 | "inherits": "2.0.3", 1248 | "isarray": "1.0.0", 1249 | "process-nextick-args": "1.0.7", 1250 | "safe-buffer": "5.1.1", 1251 | "string_decoder": "1.0.3", 1252 | "util-deprecate": "1.0.2" 1253 | }, 1254 | "dependencies": { 1255 | "isarray": { 1256 | "version": "1.0.0", 1257 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1258 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1259 | "dev": true 1260 | }, 1261 | "string_decoder": { 1262 | "version": "1.0.3", 1263 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 1264 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 1265 | "dev": true, 1266 | "requires": { 1267 | "safe-buffer": "5.1.1" 1268 | } 1269 | } 1270 | } 1271 | }, 1272 | "repeat-string": { 1273 | "version": "1.6.1", 1274 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 1275 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 1276 | "dev": true 1277 | }, 1278 | "repeating": { 1279 | "version": "1.1.3", 1280 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", 1281 | "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", 1282 | "dev": true, 1283 | "requires": { 1284 | "is-finite": "1.0.2" 1285 | } 1286 | }, 1287 | "resolve": { 1288 | "version": "1.4.0", 1289 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", 1290 | "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", 1291 | "dev": true, 1292 | "requires": { 1293 | "path-parse": "1.0.5" 1294 | } 1295 | }, 1296 | "right-align": { 1297 | "version": "0.1.3", 1298 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 1299 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", 1300 | "dev": true, 1301 | "requires": { 1302 | "align-text": "0.1.4" 1303 | } 1304 | }, 1305 | "ripemd160": { 1306 | "version": "2.0.1", 1307 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", 1308 | "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", 1309 | "dev": true, 1310 | "requires": { 1311 | "hash-base": "2.0.2", 1312 | "inherits": "2.0.3" 1313 | } 1314 | }, 1315 | "safe-buffer": { 1316 | "version": "5.1.1", 1317 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 1318 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", 1319 | "dev": true 1320 | }, 1321 | "sha.js": { 1322 | "version": "2.4.8", 1323 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", 1324 | "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", 1325 | "dev": true, 1326 | "requires": { 1327 | "inherits": "2.0.3" 1328 | } 1329 | }, 1330 | "shasum": { 1331 | "version": "1.0.2", 1332 | "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", 1333 | "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", 1334 | "dev": true, 1335 | "requires": { 1336 | "json-stable-stringify": "0.0.1", 1337 | "sha.js": "2.4.8" 1338 | } 1339 | }, 1340 | "shell-quote": { 1341 | "version": "1.6.1", 1342 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", 1343 | "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", 1344 | "dev": true, 1345 | "requires": { 1346 | "array-filter": "0.0.1", 1347 | "array-map": "0.0.0", 1348 | "array-reduce": "0.0.0", 1349 | "jsonify": "0.0.0" 1350 | } 1351 | }, 1352 | "source-map": { 1353 | "version": "0.5.7", 1354 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1355 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 1356 | "dev": true 1357 | }, 1358 | "stream-browserify": { 1359 | "version": "2.0.1", 1360 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", 1361 | "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", 1362 | "dev": true, 1363 | "requires": { 1364 | "inherits": "2.0.3", 1365 | "readable-stream": "2.3.3" 1366 | } 1367 | }, 1368 | "stream-combiner2": { 1369 | "version": "1.1.1", 1370 | "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", 1371 | "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", 1372 | "dev": true, 1373 | "requires": { 1374 | "duplexer2": "0.1.4", 1375 | "readable-stream": "2.3.3" 1376 | } 1377 | }, 1378 | "stream-http": { 1379 | "version": "2.7.2", 1380 | "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", 1381 | "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", 1382 | "dev": true, 1383 | "requires": { 1384 | "builtin-status-codes": "3.0.0", 1385 | "inherits": "2.0.3", 1386 | "readable-stream": "2.3.3", 1387 | "to-arraybuffer": "1.0.1", 1388 | "xtend": "4.0.1" 1389 | } 1390 | }, 1391 | "stream-splicer": { 1392 | "version": "2.0.0", 1393 | "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", 1394 | "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", 1395 | "dev": true, 1396 | "requires": { 1397 | "inherits": "2.0.3", 1398 | "readable-stream": "2.3.3" 1399 | } 1400 | }, 1401 | "string_decoder": { 1402 | "version": "0.10.31", 1403 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1404 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 1405 | "dev": true 1406 | }, 1407 | "subarg": { 1408 | "version": "1.0.0", 1409 | "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", 1410 | "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", 1411 | "dev": true, 1412 | "requires": { 1413 | "minimist": "1.2.0" 1414 | } 1415 | }, 1416 | "supports-color": { 1417 | "version": "1.2.0", 1418 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", 1419 | "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", 1420 | "dev": true 1421 | }, 1422 | "syntax-error": { 1423 | "version": "1.3.0", 1424 | "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", 1425 | "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", 1426 | "dev": true, 1427 | "requires": { 1428 | "acorn": "4.0.13" 1429 | } 1430 | }, 1431 | "through": { 1432 | "version": "2.3.8", 1433 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1434 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 1435 | "dev": true 1436 | }, 1437 | "through2": { 1438 | "version": "2.0.3", 1439 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", 1440 | "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", 1441 | "dev": true, 1442 | "requires": { 1443 | "readable-stream": "2.3.3", 1444 | "xtend": "4.0.1" 1445 | } 1446 | }, 1447 | "timers-browserify": { 1448 | "version": "1.4.2", 1449 | "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", 1450 | "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", 1451 | "dev": true, 1452 | "requires": { 1453 | "process": "0.11.10" 1454 | } 1455 | }, 1456 | "to-arraybuffer": { 1457 | "version": "1.0.1", 1458 | "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", 1459 | "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", 1460 | "dev": true 1461 | }, 1462 | "tty-browserify": { 1463 | "version": "0.0.0", 1464 | "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", 1465 | "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", 1466 | "dev": true 1467 | }, 1468 | "typedarray": { 1469 | "version": "0.0.6", 1470 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1471 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 1472 | "dev": true 1473 | }, 1474 | "uglify-js": { 1475 | "version": "2.6.1", 1476 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.1.tgz", 1477 | "integrity": "sha1-7bvhiIujUl3tOnv4NrMLNAXTFhs=", 1478 | "dev": true, 1479 | "requires": { 1480 | "async": "0.2.10", 1481 | "source-map": "0.5.7", 1482 | "uglify-to-browserify": "1.0.2", 1483 | "yargs": "3.10.0" 1484 | } 1485 | }, 1486 | "uglify-to-browserify": { 1487 | "version": "1.0.2", 1488 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", 1489 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", 1490 | "dev": true 1491 | }, 1492 | "umd": { 1493 | "version": "3.0.1", 1494 | "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", 1495 | "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", 1496 | "dev": true 1497 | }, 1498 | "unexpected": { 1499 | "version": "10.8.2", 1500 | "resolved": "https://registry.npmjs.org/unexpected/-/unexpected-10.8.2.tgz", 1501 | "integrity": "sha1-2RLfw4571569uLvwZS7ai/CRmL8=", 1502 | "dev": true, 1503 | "requires": { 1504 | "array-changes": "1.2.1", 1505 | "array-changes-async": "2.0.2", 1506 | "bluebird": "2.9.34", 1507 | "detect-indent": "3.0.1", 1508 | "diff": "1.1.0", 1509 | "leven": "1.0.0", 1510 | "magicpen": "5.5.0" 1511 | }, 1512 | "dependencies": { 1513 | "diff": { 1514 | "version": "1.1.0", 1515 | "resolved": "https://registry.npmjs.org/diff/-/diff-1.1.0.tgz", 1516 | "integrity": "sha1-eYpJOBqkZBUem08Ob/Kwmooa0j8=", 1517 | "dev": true 1518 | } 1519 | } 1520 | }, 1521 | "url": { 1522 | "version": "0.11.0", 1523 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 1524 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 1525 | "dev": true, 1526 | "requires": { 1527 | "punycode": "1.3.2", 1528 | "querystring": "0.2.0" 1529 | }, 1530 | "dependencies": { 1531 | "punycode": { 1532 | "version": "1.3.2", 1533 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 1534 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", 1535 | "dev": true 1536 | } 1537 | } 1538 | }, 1539 | "util": { 1540 | "version": "0.10.3", 1541 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", 1542 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", 1543 | "dev": true, 1544 | "requires": { 1545 | "inherits": "2.0.1" 1546 | }, 1547 | "dependencies": { 1548 | "inherits": { 1549 | "version": "2.0.1", 1550 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 1551 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", 1552 | "dev": true 1553 | } 1554 | } 1555 | }, 1556 | "util-deprecate": { 1557 | "version": "1.0.2", 1558 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1559 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1560 | "dev": true 1561 | }, 1562 | "vm-browserify": { 1563 | "version": "0.0.4", 1564 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", 1565 | "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", 1566 | "dev": true, 1567 | "requires": { 1568 | "indexof": "0.0.1" 1569 | } 1570 | }, 1571 | "window-size": { 1572 | "version": "0.1.0", 1573 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", 1574 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", 1575 | "dev": true 1576 | }, 1577 | "wordwrap": { 1578 | "version": "0.0.2", 1579 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", 1580 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", 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.1", 1591 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 1592 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", 1593 | "dev": true 1594 | }, 1595 | "yargs": { 1596 | "version": "3.10.0", 1597 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", 1598 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", 1599 | "dev": true, 1600 | "requires": { 1601 | "camelcase": "1.2.1", 1602 | "cliui": "2.1.0", 1603 | "decamelize": "1.2.0", 1604 | "window-size": "0.1.0" 1605 | } 1606 | } 1607 | } 1608 | } 1609 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "Andreas Lind Petersen ", 3 | "name": "httperrors", 4 | "description": "Handy JavaScript Error classes representing the standard HTTP errors. Easily extensible and subclassable.", 5 | "keywords": [ 6 | "http", 7 | "errors", 8 | "error", 9 | "request", 10 | "proxy", 11 | "client", 12 | "class", 13 | "errorclass" 14 | ], 15 | "version": "2.3.0", 16 | "repository": { 17 | "type": "git", 18 | "url": "git://github.com/One-com/node-httperrors.git" 19 | }, 20 | "main": "lib/HttpError.js", 21 | "engines": { 22 | "node": ">= 0.2.0" 23 | }, 24 | "dependencies": { 25 | "createerror": "1.3.0" 26 | }, 27 | "devDependencies": { 28 | "browserify": "13.0.0", 29 | "mocha": "^5.2.0", 30 | "uglify-js": "2.6.1", 31 | "unexpected": "10.8.2" 32 | }, 33 | "scripts": { 34 | "dist": "mkdir -p dist && browserify ./lib/HttpError.js -s HttpError | ./node_modules/.bin/uglifyjs -mc > ./dist/httpErrors.js && cp dist/httpErrors.js dist/HttpError.js", 35 | "prepublish": "npm run test && npm run dist", 36 | "test": "mocha --recursive" 37 | }, 38 | "files": [ 39 | "lib", 40 | "dist" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /test/HttpError.js: -------------------------------------------------------------------------------- 1 | var expect = require('unexpected'); 2 | var HttpError = require('../lib/HttpError'); 3 | 4 | describe('HttpError', function () { 5 | it('should produce instances that have an http property with a value of true', function () { 6 | expect(new HttpError.NotFound(), 'to have property', 'http', true); 7 | }); 8 | 9 | it('should produce instances of HttpError.HttpError', function () { 10 | expect(new HttpError.NotFound(), 'to be a', HttpError.HttpError); 11 | }); 12 | 13 | it('#.NotFound should produce NotFound instances', function() { 14 | var err = new HttpError.NotFound('sadface'); 15 | 16 | expect(err.statusCode, 'to equal', 404); 17 | expect(err.status, 'to equal', 404); 18 | expect(err.message, 'to equal', 'sadface'); 19 | expect(err.name, 'to equal', 'NotFound'); 20 | }); 21 | 22 | it('BadGateway', function() { 23 | var err = new HttpError.BadGateway(); 24 | 25 | expect(err.statusCode, 'to equal', 502); 26 | expect(err.name, 'to equal', 'BadGateway'); 27 | }); 28 | 29 | it('constructor with object', function() { 30 | var err = new HttpError.NotFound({ 31 | message: 'foo', 32 | url: 'bar' 33 | }); 34 | 35 | expect(err, 'to be an', HttpError.NotFound); 36 | expect(err, 'to be an', Error); 37 | expect(err.message, 'to equal', 'foo'); 38 | expect(err.url, 'to equal', 'bar'); 39 | }); 40 | 41 | it('constructor invoked without the "new" operator', function() { 42 | var err = HttpError.NotFound({ 43 | message: 'foo', 44 | url: 'bar' 45 | }); 46 | 47 | expect(err, 'to be an', HttpError.NotFound); 48 | expect(err, 'to be an', Error); 49 | expect(err.message, 'to equal', 'foo'); 50 | expect(err.url, 'to equal', 'bar'); 51 | }); 52 | 53 | describe('when invoked as a function', function () { 54 | it('should create an instance of HttpError if called with no arguments', function () { 55 | expect(HttpError().name, 'to equal', 'HttpError'); 56 | }); 57 | 58 | describe('and passed a number', function () { 59 | it('should create an instance of the proper error for a known status code', function () { 60 | expect(HttpError(412).name, 'to equal', 'PreconditionFailed'); 61 | }); 62 | 63 | it('should create an instance of HttpError if given a status code that is not directly supported', function () { 64 | var instance = HttpError(595); 65 | expect(instance.name, 'to equal', 'HttpError'); 66 | expect(instance.statusCode, 'to equal', 595); 67 | }); 68 | }); 69 | 70 | describe('and passed an options object', function () { 71 | it('should create an instance of HttpError if the status code is not directly supported', function () { 72 | expect(HttpError({statusCode: 595}).name, 'to equal', 'HttpError'); 73 | }); 74 | 75 | it('should create an instance of HttpError if no status code is provided', function () { 76 | expect(HttpError({foo: 'bar'}).name, 'to equal', 'HttpError'); 77 | }); 78 | }); 79 | }); 80 | 81 | it('has the HttpError superclass constructor as the main export', function () { 82 | expect(new HttpError.NotFound(), 'to be a', HttpError); 83 | }); 84 | 85 | describe('#supports', function () { 86 | it('should return true for a mapped DNS error code', function () { 87 | expect(HttpError.supports('NotFound'), 'to be true'); 88 | }); 89 | 90 | it('should return false for an unmapped DNS error code', function () { 91 | expect(HttpError.supports('FOOBAR'), 'to be false'); 92 | }); 93 | 94 | it('should return true for a unmapped DNS error instance', function () { 95 | var fakeHttpError = new Error('NotFound'); 96 | fakeHttpError.code = 'NotFound'; 97 | expect(HttpError.supports(fakeHttpError), 'to be true'); 98 | }); 99 | 100 | it('should return false for a unmapped DNS error instance', function () { 101 | var fakeHttpError = new Error('FOOBAR'); 102 | fakeHttpError.code = 'FOOBAR'; 103 | expect(HttpError.supports(fakeHttpError), 'to be false'); 104 | }); 105 | }); 106 | 107 | it('should provide RequestEntityTooLarge as a legacy alias for PayloadTooLarge', function () { 108 | expect(new HttpError.RequestEntityTooLarge(), 'to satisfy', { statusCode: 413, RequestEntityTooLarge: true, PayloadTooLarge: true }); 109 | }); 110 | 111 | it('should provide RequestURITooLarge as a legacy alias for URITooLong', function () { 112 | expect(new HttpError.RequestURITooLarge(), 'to satisfy', { statusCode: 414, RequestURITooLarge: true, URITooLong: true }); 113 | }); 114 | 115 | it('should provide RequestedRangeNotSatisfiable as a legacy alias for URITooLong', function () { 116 | expect(new HttpError.RequestedRangeNotSatisfiable(), 'to satisfy', { statusCode: 416, RequestedRangeNotSatisfiable: true, RangeNotSatisfiable: true }); 117 | }); 118 | }); 119 | --------------------------------------------------------------------------------