├── .gitignore ├── README.md ├── app.js ├── package-lock.json ├── package.json └── page.html /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dbout/ 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # N-API demo 2 | This project is a simple npm module http server which uses the N-API port of leveldown in order to test Node.js with N-API. 3 | 4 | **Cloning**
5 | Clone the napi_demo project to run the app: 6 | 7 | ``` 8 | git clone https://github.com/boingoing/napi_demo.git 9 | ``` 10 | 11 | **Installing**
12 | Install the app via standard npm method: 13 | 14 | ``` 15 | npm install 16 | ``` 17 | 18 | **Building**
19 | The leveldown module we are using here is N-API-enabled but this module does not have a published binary so we will need to build it to run this demo app. Our recommendation is to build leveldown with node-gyp which you can install globally: 20 | 21 | ``` 22 | npm install node-gyp -g 23 | ``` 24 | 25 | Building leveldown itself: 26 | 27 | ``` 28 | cd [path_to_napi_demo]/node_modules/leveldown 29 | node-gyp configure 30 | node-gyp build 31 | ``` 32 | 33 | **Running**
34 | If you are running a v8.x nightly build of Node.js with N-API as an experimental feature, you will need to add the `--napi-modules` command line argument in order to load the N-API version of leveldown. 35 | 36 | ``` 37 | node [--napi-modules] app.js [--port number] [--path leveldb_path] [--verbose] [--test] 38 | ``` 39 | 40 | **Using**
41 | This module starts an http server on the localhost by default listening on port 1338. 42 | 43 | ``` 44 | Options: 45 | --port Start an http server listening on this port [number] [default: 1338] 46 | --path Path in which we will create a leveldb database 47 | [string] [default: "./dbout"] 48 | --verbose Enable verbose logging [boolean] [default: false] 49 | --test Perform a simple test of the leveldown module (Does not start the 50 | http server) [boolean] [default: false] 51 | --help Show help [boolean] 52 | --version Show version number [boolean] 53 | ``` 54 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | var leveldown = require('leveldown'); 2 | var http = require('http'); 3 | var fs = require("fs"); 4 | var yargs = require("yargs"); 5 | require('es6-shim'); 6 | 7 | var argv = parseArgs(yargs); 8 | const useLogFile = argv.log != ''; 9 | const logFileStream = useLogFile ? fs.createWriteStream(argv.log, { flags: 'a' }) : undefined; 10 | 11 | trace('Detected Node: ' + getNodeVersion()); 12 | 13 | if (argv.test) { 14 | simpleTest(); 15 | } else { 16 | createServer(); 17 | } 18 | 19 | function createServer() { 20 | var server = http.createServer(createHomePage); 21 | server.listen(argv.port); 22 | trace(`Server running at http://127.0.0.1:${argv.port}`); 23 | } 24 | 25 | function createHomePage(request, response) { 26 | var rqUrl = request.url; 27 | 28 | trace('Request: ' + rqUrl); 29 | 30 | if(rqUrl === '/') { 31 | function databaseReadCallback(dbValues) { 32 | trace(`Found ${dbValues.length} entries.`); 33 | 34 | //build dynamic values for replacement in HTML Template 35 | var variableReplacementMap = new Map(); 36 | variableReplacementMap.set('%NODE_VERSION_STRING%', getNodeVersion()); 37 | variableReplacementMap.set('%DB_VALUES%', JSON.stringify(dbValues)); 38 | 39 | //render HTML 40 | response.writeHead(200, { "Content-Type": "text/html", 'Cache-control': 'no-cache' }); 41 | response.write(buildFinalHTML(variableReplacementMap)); 42 | response.end(); 43 | } 44 | 45 | trace('Fetching entries from leveldown database...'); 46 | readFromDatabase(databaseReadCallback); 47 | } 48 | if(rqUrl === "/OnButtonClicked") { 49 | function successCallback() { 50 | trace('Successfully added entry.'); 51 | 52 | response.setHeader('Cache-Control', 'no-cache'); 53 | response.end(); 54 | } 55 | 56 | var key = getTime(); 57 | var value = getNodeVersion(); 58 | trace(`Adding entry for "${key}" to leveldown database...`); 59 | addToDatabase(key, value, successCallback); 60 | } 61 | if(rqUrl === "/favicon.ico") { 62 | response.writeHead(404, { "Content-Type": "text/html", 'Cache-control': 'no-cache' }); 63 | response.end(); 64 | } 65 | } 66 | 67 | function buildFinalHTML(variableMap) { 68 | var htmlPageTemplate = fs.readFileSync(__dirname + "/page.html", 'utf8'); 69 | 70 | variableMap.forEach(function (value, key) { 71 | //Bad values that are likely an error. 72 | //We don't want to abort but we should report them for later triage. 73 | if (value === undefined || value === NaN || value === Infinity) { 74 | trace(`Potentially bad value encountered in templating -- ${value} @ timestamp ${Date.now()}.`); 75 | } 76 | 77 | var allregex = new RegExp(key, 'g') 78 | htmlPageTemplate = htmlPageTemplate.replace(allregex, value); 79 | }); 80 | return htmlPageTemplate; 81 | } 82 | 83 | function padUnder10(v) { 84 | return v < 10 ? '0' + v : v; 85 | } 86 | 87 | function getNodeVersion() { 88 | return process.versions.node + (process.jsEngine === "chakracore" ? ' (ChakraCore)' : ''); 89 | } 90 | 91 | function getTime() { 92 | var date = new Date(); 93 | var y = date.getFullYear(); 94 | var mon = padUnder10(date.getMonth() + 1); 95 | var d = padUnder10(date.getDate()); 96 | var h = padUnder10(date.getHours()); 97 | var min = padUnder10(date.getMinutes()); 98 | var s = padUnder10(date.getSeconds()); 99 | return `${y}/${mon}/${d} ${h}:${min}:${s}`; 100 | } 101 | 102 | function getDatabase() { 103 | return leveldown(argv.path); 104 | } 105 | 106 | function readFromDatabase(callback) { 107 | var db = getDatabase(); 108 | var dbValues = []; 109 | 110 | verboseTrace('leveldown#open...'); 111 | db.open(function(err) { 112 | if(!err) { 113 | verboseTrace('leveldown#open succeeded'); 114 | var count = 0; 115 | 116 | verboseTrace('leveldown#iterator...'); 117 | var iterator = db.iterator({ 118 | keyAsBuffer: false, 119 | valueAsBuffer: false, 120 | fillCache: true 121 | }); 122 | verboseTrace('leveldown#iterator succeeded'); 123 | 124 | function endCallback(err) { 125 | if (!err) { 126 | verboseTrace(`iterator#end succeeded: Found ${count} entries.`); 127 | } else { 128 | verboseTrace(`iterator#end failed: ${err}`); 129 | } 130 | verboseTrace('leveldown#close...'); 131 | db.close(function(err){ 132 | if (!err) { 133 | verboseTrace('leveldown#close succeeded'); 134 | callback(dbValues); 135 | } else { 136 | verboseTrace('leveldown#close failed: ' + err); 137 | } 138 | }); 139 | } 140 | 141 | function nextCallback(err, key, value) { 142 | if (!err) { 143 | verboseTrace(`iterator#next succeeded: key="${key}" value="${value}"`); 144 | 145 | if (err === undefined && key === undefined && value === undefined) { 146 | verboseTrace('iterator#end...'); 147 | iterator.end(endCallback); 148 | } else { 149 | dbValues.push([key, value]); 150 | count++; 151 | 152 | verboseTrace('iterator#next...') 153 | iterator.next(nextCallback); 154 | } 155 | } else { 156 | verboseTrace("iterator#next failed: " + err); 157 | } 158 | } 159 | 160 | verboseTrace("iterator#next..."); 161 | iterator.next(nextCallback); 162 | } else { 163 | verboseTrace('leveldown#open failed: ' + err); 164 | } 165 | }); 166 | } 167 | 168 | function addToDatabase(key, value, callback) { 169 | var db = getDatabase(); 170 | 171 | verboseTrace('leveldown#open...'); 172 | db.open(function(err) { 173 | if(!err) { 174 | verboseTrace('leveldown#open succeeded'); 175 | verboseTrace('leveldown#put("' + key + '", "' + value + '")...'); 176 | 177 | db.put(key, value, { sync: true }, function(err) { 178 | if(!err) { 179 | verboseTrace('leveldown#put succeeded'); 180 | } else { 181 | verboseTrace('leveldown#put failed: ' + err); 182 | } 183 | 184 | verboseTrace('leveldown#close...'); 185 | db.close(function(err) { 186 | if (!err) { 187 | verboseTrace('leveldown#close succeeded'); 188 | callback(); 189 | } else { 190 | verboseTrace('leveldown#close failed: ' + err); 191 | } 192 | }); 193 | }); 194 | } else { 195 | verboseTrace('leveldown#open failed: ' + err); 196 | } 197 | }); 198 | } 199 | 200 | function trace(msg) { 201 | console.log(msg); 202 | if (useLogFile) { 203 | logFileStream.write(`${msg}\n`); 204 | } 205 | } 206 | 207 | function verboseTrace(msg) { 208 | if (argv.verbose) { 209 | trace(msg); 210 | } 211 | } 212 | 213 | function parseArgs(yargs) { 214 | var _argv = yargs 215 | .option('port', { 216 | default: 1338, 217 | type: 'number', 218 | describe: 'Start an http server listening on this port' 219 | }) 220 | .option('path', { 221 | default: './dbout', 222 | type: 'string', 223 | describe: 'Path in which we will create a leveldb database' 224 | }) 225 | .option('verbose', { 226 | default: false, 227 | type: 'boolean', 228 | describe: 'Enable verbose logging' 229 | }) 230 | .option('test', { 231 | default: false, 232 | type: 'boolean', 233 | describe: 'Perform a simple test of the leveldown module (Does not start the http server)' 234 | }) 235 | .option('log', { 236 | default: '', 237 | type: 'string', 238 | describe: 'Filename of an optional log' 239 | }) 240 | .usage('Simple http server using leveldown to test Node.js with N-API.\nUsage: $0 --port [number] --path [database_path] --verbose --test --log [filename]') 241 | .help('help') 242 | .version() 243 | .argv; 244 | 245 | return _argv; 246 | } 247 | 248 | function simpleTest() { 249 | var time = getTime(); 250 | function testAddCallback() { 251 | function testReadCallback(values) { 252 | if (values.find(v => { return v[0] === time; })) { 253 | trace('Test passed!'); 254 | } else { 255 | trace('Test failed!'); 256 | } 257 | } 258 | readFromDatabase(testReadCallback); 259 | } 260 | addToDatabase(time, getNodeVersion(), testAddCallback); 261 | } 262 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "napi-demo", 3 | "version": "1.1.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "abbrev": { 8 | "version": "1.1.1", 9 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 10 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 11 | }, 12 | "abstract-leveldown": { 13 | "version": "2.4.1", 14 | "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.4.1.tgz", 15 | "integrity": "sha1-s7/tuITraToSd18MVenwpCDM7mQ=", 16 | "requires": { 17 | "xtend": "4.0.1" 18 | } 19 | }, 20 | "after": { 21 | "version": "0.8.2", 22 | "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", 23 | "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" 24 | }, 25 | "ajv": { 26 | "version": "5.2.3", 27 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz", 28 | "integrity": "sha1-wG9Zh3jETGsWGrr+NGa4GtGBTtI=", 29 | "requires": { 30 | "co": "4.6.0", 31 | "fast-deep-equal": "1.0.0", 32 | "json-schema-traverse": "0.3.1", 33 | "json-stable-stringify": "1.0.1" 34 | } 35 | }, 36 | "ansi": { 37 | "version": "0.3.1", 38 | "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", 39 | "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" 40 | }, 41 | "ansi-regex": { 42 | "version": "2.1.1", 43 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 44 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 45 | }, 46 | "are-we-there-yet": { 47 | "version": "1.1.4", 48 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", 49 | "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", 50 | "requires": { 51 | "delegates": "1.0.0", 52 | "readable-stream": "2.0.6" 53 | } 54 | }, 55 | "array-index": { 56 | "version": "1.0.0", 57 | "resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", 58 | "integrity": "sha1-7FanSe4QPk4Ix5C5w1PfFgVbl/k=", 59 | "requires": { 60 | "debug": "2.6.9", 61 | "es6-symbol": "3.1.1" 62 | } 63 | }, 64 | "asn1": { 65 | "version": "0.2.3", 66 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 67 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" 68 | }, 69 | "assert-plus": { 70 | "version": "1.0.0", 71 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 72 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 73 | }, 74 | "async": { 75 | "version": "1.5.2", 76 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 77 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" 78 | }, 79 | "asynckit": { 80 | "version": "0.4.0", 81 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 82 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 83 | }, 84 | "aws-sign2": { 85 | "version": "0.7.0", 86 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 87 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 88 | }, 89 | "aws4": { 90 | "version": "1.6.0", 91 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", 92 | "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" 93 | }, 94 | "balanced-match": { 95 | "version": "1.0.0", 96 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 97 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 98 | }, 99 | "bcrypt-pbkdf": { 100 | "version": "1.0.1", 101 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 102 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 103 | "optional": true, 104 | "requires": { 105 | "tweetnacl": "0.14.5" 106 | } 107 | }, 108 | "bindings": { 109 | "version": "1.2.1", 110 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", 111 | "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=" 112 | }, 113 | "bl": { 114 | "version": "1.0.3", 115 | "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", 116 | "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=", 117 | "requires": { 118 | "readable-stream": "2.0.6" 119 | } 120 | }, 121 | "block-stream": { 122 | "version": "0.0.9", 123 | "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", 124 | "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", 125 | "requires": { 126 | "inherits": "2.0.3" 127 | } 128 | }, 129 | "boom": { 130 | "version": "4.3.1", 131 | "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", 132 | "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", 133 | "requires": { 134 | "hoek": "4.2.0" 135 | } 136 | }, 137 | "brace-expansion": { 138 | "version": "1.1.8", 139 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 140 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 141 | "requires": { 142 | "balanced-match": "1.0.0", 143 | "concat-map": "0.0.1" 144 | } 145 | }, 146 | "builtin-modules": { 147 | "version": "1.1.1", 148 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 149 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" 150 | }, 151 | "camelcase": { 152 | "version": "4.1.0", 153 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", 154 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" 155 | }, 156 | "caseless": { 157 | "version": "0.12.0", 158 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 159 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 160 | }, 161 | "chownr": { 162 | "version": "1.0.1", 163 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", 164 | "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" 165 | }, 166 | "cliui": { 167 | "version": "3.2.0", 168 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", 169 | "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", 170 | "requires": { 171 | "string-width": "1.0.2", 172 | "strip-ansi": "3.0.1", 173 | "wrap-ansi": "2.1.0" 174 | }, 175 | "dependencies": { 176 | "string-width": { 177 | "version": "1.0.2", 178 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 179 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 180 | "requires": { 181 | "code-point-at": "1.1.0", 182 | "is-fullwidth-code-point": "1.0.0", 183 | "strip-ansi": "3.0.1" 184 | } 185 | } 186 | } 187 | }, 188 | "co": { 189 | "version": "4.6.0", 190 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 191 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 192 | }, 193 | "code-point-at": { 194 | "version": "1.1.0", 195 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 196 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 197 | }, 198 | "combined-stream": { 199 | "version": "1.0.5", 200 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 201 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 202 | "requires": { 203 | "delayed-stream": "1.0.0" 204 | } 205 | }, 206 | "concat-map": { 207 | "version": "0.0.1", 208 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 209 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 210 | }, 211 | "core-util-is": { 212 | "version": "1.0.2", 213 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 214 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 215 | }, 216 | "cross-spawn": { 217 | "version": "5.1.0", 218 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 219 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 220 | "requires": { 221 | "lru-cache": "4.1.1", 222 | "shebang-command": "1.2.0", 223 | "which": "1.3.0" 224 | } 225 | }, 226 | "cryptiles": { 227 | "version": "3.1.2", 228 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 229 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", 230 | "requires": { 231 | "boom": "5.2.0" 232 | }, 233 | "dependencies": { 234 | "boom": { 235 | "version": "5.2.0", 236 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 237 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 238 | "requires": { 239 | "hoek": "4.2.0" 240 | } 241 | } 242 | } 243 | }, 244 | "d": { 245 | "version": "1.0.0", 246 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", 247 | "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", 248 | "requires": { 249 | "es5-ext": "0.10.30" 250 | } 251 | }, 252 | "dashdash": { 253 | "version": "1.14.1", 254 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 255 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 256 | "requires": { 257 | "assert-plus": "1.0.0" 258 | } 259 | }, 260 | "debug": { 261 | "version": "2.6.9", 262 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 263 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 264 | "requires": { 265 | "ms": "2.0.0" 266 | } 267 | }, 268 | "decamelize": { 269 | "version": "1.2.0", 270 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 271 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 272 | }, 273 | "deep-extend": { 274 | "version": "0.4.2", 275 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", 276 | "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" 277 | }, 278 | "delayed-stream": { 279 | "version": "1.0.0", 280 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 281 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 282 | }, 283 | "delegates": { 284 | "version": "1.0.0", 285 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 286 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" 287 | }, 288 | "duplexer2": { 289 | "version": "0.0.2", 290 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", 291 | "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", 292 | "requires": { 293 | "readable-stream": "1.1.14" 294 | }, 295 | "dependencies": { 296 | "isarray": { 297 | "version": "0.0.1", 298 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 299 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 300 | }, 301 | "readable-stream": { 302 | "version": "1.1.14", 303 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 304 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 305 | "requires": { 306 | "core-util-is": "1.0.2", 307 | "inherits": "2.0.3", 308 | "isarray": "0.0.1", 309 | "string_decoder": "0.10.31" 310 | } 311 | } 312 | } 313 | }, 314 | "ecc-jsbn": { 315 | "version": "0.1.1", 316 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 317 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 318 | "optional": true, 319 | "requires": { 320 | "jsbn": "0.1.1" 321 | } 322 | }, 323 | "end-of-stream": { 324 | "version": "1.4.0", 325 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", 326 | "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", 327 | "requires": { 328 | "once": "1.4.0" 329 | } 330 | }, 331 | "errno": { 332 | "version": "0.1.4", 333 | "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", 334 | "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", 335 | "requires": { 336 | "prr": "0.0.0" 337 | } 338 | }, 339 | "error-ex": { 340 | "version": "1.3.1", 341 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", 342 | "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", 343 | "requires": { 344 | "is-arrayish": "0.2.1" 345 | } 346 | }, 347 | "es5-ext": { 348 | "version": "0.10.30", 349 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", 350 | "integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=", 351 | "requires": { 352 | "es6-iterator": "2.0.1", 353 | "es6-symbol": "3.1.1" 354 | } 355 | }, 356 | "es6-iterator": { 357 | "version": "2.0.1", 358 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", 359 | "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", 360 | "requires": { 361 | "d": "1.0.0", 362 | "es5-ext": "0.10.30", 363 | "es6-symbol": "3.1.1" 364 | } 365 | }, 366 | "es6-shim": { 367 | "version": "0.35.3", 368 | "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.3.tgz", 369 | "integrity": "sha1-m/tzY/7//4emzbbNk+QF7DxLbyY=" 370 | }, 371 | "es6-symbol": { 372 | "version": "3.1.1", 373 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", 374 | "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", 375 | "requires": { 376 | "d": "1.0.0", 377 | "es5-ext": "0.10.30" 378 | } 379 | }, 380 | "execa": { 381 | "version": "0.7.0", 382 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", 383 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", 384 | "requires": { 385 | "cross-spawn": "5.1.0", 386 | "get-stream": "3.0.0", 387 | "is-stream": "1.1.0", 388 | "npm-run-path": "2.0.2", 389 | "p-finally": "1.0.0", 390 | "signal-exit": "3.0.2", 391 | "strip-eof": "1.0.0" 392 | } 393 | }, 394 | "execspawn": { 395 | "version": "1.0.1", 396 | "resolved": "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz", 397 | "integrity": "sha1-gob53efOzeeQX73ATiTzaPI/jaY=", 398 | "requires": { 399 | "util-extend": "1.0.3" 400 | } 401 | }, 402 | "expand-template": { 403 | "version": "1.1.0", 404 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.0.tgz", 405 | "integrity": "sha512-kkjwkMqj0h4w/sb32ERCDxCQkREMCAgS39DscDnSwDsbxnwwM1BTZySdC3Bn1lhY7vL08n9GoO/fVTynjDgRyQ==" 406 | }, 407 | "extend": { 408 | "version": "3.0.1", 409 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 410 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" 411 | }, 412 | "extsprintf": { 413 | "version": "1.3.0", 414 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 415 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 416 | }, 417 | "fast-deep-equal": { 418 | "version": "1.0.0", 419 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", 420 | "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" 421 | }, 422 | "fast-future": { 423 | "version": "1.0.2", 424 | "resolved": "https://registry.npmjs.org/fast-future/-/fast-future-1.0.2.tgz", 425 | "integrity": "sha1-hDWpqqAteSSNF9cE52JZMB2ZKAo=" 426 | }, 427 | "find-up": { 428 | "version": "2.1.0", 429 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 430 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", 431 | "requires": { 432 | "locate-path": "2.0.0" 433 | } 434 | }, 435 | "forever-agent": { 436 | "version": "0.6.1", 437 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 438 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 439 | }, 440 | "form-data": { 441 | "version": "2.3.1", 442 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", 443 | "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", 444 | "requires": { 445 | "asynckit": "0.4.0", 446 | "combined-stream": "1.0.5", 447 | "mime-types": "2.1.17" 448 | } 449 | }, 450 | "fs.realpath": { 451 | "version": "1.0.0", 452 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 453 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 454 | }, 455 | "fstream": { 456 | "version": "1.0.11", 457 | "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", 458 | "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", 459 | "requires": { 460 | "graceful-fs": "4.1.11", 461 | "inherits": "2.0.3", 462 | "mkdirp": "0.5.1", 463 | "rimraf": "2.6.2" 464 | } 465 | }, 466 | "gauge": { 467 | "version": "1.2.7", 468 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", 469 | "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", 470 | "requires": { 471 | "ansi": "0.3.1", 472 | "has-unicode": "2.0.1", 473 | "lodash.pad": "4.5.1", 474 | "lodash.padend": "4.6.1", 475 | "lodash.padstart": "4.6.1" 476 | } 477 | }, 478 | "get-caller-file": { 479 | "version": "1.0.2", 480 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", 481 | "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" 482 | }, 483 | "get-stream": { 484 | "version": "3.0.0", 485 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 486 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" 487 | }, 488 | "getpass": { 489 | "version": "0.1.7", 490 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 491 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 492 | "requires": { 493 | "assert-plus": "1.0.0" 494 | } 495 | }, 496 | "ghreleases": { 497 | "version": "1.0.6", 498 | "resolved": "https://registry.npmjs.org/ghreleases/-/ghreleases-1.0.6.tgz", 499 | "integrity": "sha512-uySVPT5T9uP1xeWR7nl3WD8/JjJJXAph/0zdgUQJ7ovFpL3rxBT/HT0sO6w0GDWCj2gwXvzxBKrIeJAgBhs+fw==", 500 | "requires": { 501 | "after": "0.8.2", 502 | "ghrepos": "2.0.0", 503 | "ghutils": "3.2.1", 504 | "simple-mime": "0.1.0", 505 | "url-template": "2.0.8", 506 | "xtend": "4.0.1" 507 | } 508 | }, 509 | "ghrepos": { 510 | "version": "2.0.0", 511 | "resolved": "https://registry.npmjs.org/ghrepos/-/ghrepos-2.0.0.tgz", 512 | "integrity": "sha1-1m6unZijtTmORg1tt+EKdCaS6Bs=", 513 | "requires": { 514 | "ghutils": "3.2.1" 515 | } 516 | }, 517 | "ghutils": { 518 | "version": "3.2.1", 519 | "resolved": "https://registry.npmjs.org/ghutils/-/ghutils-3.2.1.tgz", 520 | "integrity": "sha1-T87f+sk1/KzgbhKhfGF04sKf/k8=", 521 | "requires": { 522 | "jsonist": "1.3.0", 523 | "xtend": "4.0.1" 524 | } 525 | }, 526 | "github-from-package": { 527 | "version": "0.0.0", 528 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", 529 | "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" 530 | }, 531 | "glob": { 532 | "version": "7.1.2", 533 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 534 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 535 | "requires": { 536 | "fs.realpath": "1.0.0", 537 | "inflight": "1.0.6", 538 | "inherits": "2.0.3", 539 | "minimatch": "3.0.4", 540 | "once": "1.4.0", 541 | "path-is-absolute": "1.0.1" 542 | } 543 | }, 544 | "graceful-fs": { 545 | "version": "4.1.11", 546 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 547 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" 548 | }, 549 | "har-schema": { 550 | "version": "2.0.0", 551 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 552 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 553 | }, 554 | "har-validator": { 555 | "version": "5.0.3", 556 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 557 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", 558 | "requires": { 559 | "ajv": "5.2.3", 560 | "har-schema": "2.0.0" 561 | } 562 | }, 563 | "has-unicode": { 564 | "version": "2.0.1", 565 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 566 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" 567 | }, 568 | "hawk": { 569 | "version": "6.0.2", 570 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", 571 | "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", 572 | "requires": { 573 | "boom": "4.3.1", 574 | "cryptiles": "3.1.2", 575 | "hoek": "4.2.0", 576 | "sntp": "2.0.2" 577 | } 578 | }, 579 | "hoek": { 580 | "version": "4.2.0", 581 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 582 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 583 | }, 584 | "hosted-git-info": { 585 | "version": "2.5.0", 586 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", 587 | "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" 588 | }, 589 | "http-signature": { 590 | "version": "1.2.0", 591 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 592 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 593 | "requires": { 594 | "assert-plus": "1.0.0", 595 | "jsprim": "1.4.1", 596 | "sshpk": "1.13.1" 597 | } 598 | }, 599 | "hyperquest": { 600 | "version": "1.2.0", 601 | "resolved": "https://registry.npmjs.org/hyperquest/-/hyperquest-1.2.0.tgz", 602 | "integrity": "sha1-OeH+9miI3Hzg3sbA3YFPb8iUStU=", 603 | "requires": { 604 | "duplexer2": "0.0.2", 605 | "through2": "0.6.5" 606 | } 607 | }, 608 | "inflight": { 609 | "version": "1.0.6", 610 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 611 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 612 | "requires": { 613 | "once": "1.4.0", 614 | "wrappy": "1.0.2" 615 | } 616 | }, 617 | "inherits": { 618 | "version": "2.0.3", 619 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 620 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 621 | }, 622 | "ini": { 623 | "version": "1.3.4", 624 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", 625 | "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=" 626 | }, 627 | "invert-kv": { 628 | "version": "1.0.0", 629 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", 630 | "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" 631 | }, 632 | "is-arrayish": { 633 | "version": "0.2.1", 634 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 635 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" 636 | }, 637 | "is-builtin-module": { 638 | "version": "1.0.0", 639 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", 640 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", 641 | "requires": { 642 | "builtin-modules": "1.1.1" 643 | } 644 | }, 645 | "is-fullwidth-code-point": { 646 | "version": "1.0.0", 647 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 648 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 649 | "requires": { 650 | "number-is-nan": "1.0.1" 651 | } 652 | }, 653 | "is-stream": { 654 | "version": "1.1.0", 655 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 656 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 657 | }, 658 | "is-typedarray": { 659 | "version": "1.0.0", 660 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 661 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 662 | }, 663 | "isarray": { 664 | "version": "1.0.0", 665 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 666 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 667 | }, 668 | "isexe": { 669 | "version": "2.0.0", 670 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 671 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 672 | }, 673 | "isstream": { 674 | "version": "0.1.2", 675 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 676 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 677 | }, 678 | "jsbn": { 679 | "version": "0.1.1", 680 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 681 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 682 | "optional": true 683 | }, 684 | "json-schema": { 685 | "version": "0.2.3", 686 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 687 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 688 | }, 689 | "json-schema-traverse": { 690 | "version": "0.3.1", 691 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 692 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 693 | }, 694 | "json-stable-stringify": { 695 | "version": "1.0.1", 696 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 697 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", 698 | "requires": { 699 | "jsonify": "0.0.0" 700 | } 701 | }, 702 | "json-stringify-safe": { 703 | "version": "5.0.1", 704 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 705 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 706 | }, 707 | "jsonify": { 708 | "version": "0.0.0", 709 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 710 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" 711 | }, 712 | "jsonist": { 713 | "version": "1.3.0", 714 | "resolved": "https://registry.npmjs.org/jsonist/-/jsonist-1.3.0.tgz", 715 | "integrity": "sha1-wMdLle8clSA4YZsp76UgscyYdVY=", 716 | "requires": { 717 | "bl": "1.0.3", 718 | "hyperquest": "1.2.0", 719 | "json-stringify-safe": "5.0.1", 720 | "xtend": "4.0.1" 721 | } 722 | }, 723 | "jsprim": { 724 | "version": "1.4.1", 725 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 726 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 727 | "requires": { 728 | "assert-plus": "1.0.0", 729 | "extsprintf": "1.3.0", 730 | "json-schema": "0.2.3", 731 | "verror": "1.10.0" 732 | } 733 | }, 734 | "lcid": { 735 | "version": "1.0.0", 736 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", 737 | "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", 738 | "requires": { 739 | "invert-kv": "1.0.0" 740 | } 741 | }, 742 | "level-errors": { 743 | "version": "1.1.1", 744 | "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.1.1.tgz", 745 | "integrity": "sha512-9MIIbizlJgWFQ6m45ehVuSrpzFxwJQmZYD6sfmiizhdmWMNUf41mBYpUJEeCslIa3sB4vdsIFCimPdDZkWznwA==", 746 | "requires": { 747 | "errno": "0.1.4" 748 | } 749 | }, 750 | "level-iterator-stream": { 751 | "version": "1.3.1", 752 | "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", 753 | "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=", 754 | "requires": { 755 | "inherits": "2.0.3", 756 | "level-errors": "1.1.1", 757 | "readable-stream": "1.1.14", 758 | "xtend": "4.0.1" 759 | }, 760 | "dependencies": { 761 | "isarray": { 762 | "version": "0.0.1", 763 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 764 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 765 | }, 766 | "readable-stream": { 767 | "version": "1.1.14", 768 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 769 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 770 | "requires": { 771 | "core-util-is": "1.0.2", 772 | "inherits": "2.0.3", 773 | "isarray": "0.0.1", 774 | "string_decoder": "0.10.31" 775 | } 776 | } 777 | } 778 | }, 779 | "leveldown": { 780 | "version": "git://github.com/sampsongao/leveldown.git#d37a2f7825aad53570a00785226f82e5c00c1a06", 781 | "requires": { 782 | "abstract-leveldown": "2.4.1", 783 | "bindings": "1.2.1", 784 | "fast-future": "1.0.2", 785 | "node-addon-api": "1.0.0", 786 | "prebuild": "4.5.0" 787 | } 788 | }, 789 | "load-json-file": { 790 | "version": "2.0.0", 791 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", 792 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", 793 | "requires": { 794 | "graceful-fs": "4.1.11", 795 | "parse-json": "2.2.0", 796 | "pify": "2.3.0", 797 | "strip-bom": "3.0.0" 798 | } 799 | }, 800 | "locate-path": { 801 | "version": "2.0.0", 802 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", 803 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", 804 | "requires": { 805 | "p-locate": "2.0.0", 806 | "path-exists": "3.0.0" 807 | } 808 | }, 809 | "lodash.pad": { 810 | "version": "4.5.1", 811 | "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", 812 | "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=" 813 | }, 814 | "lodash.padend": { 815 | "version": "4.6.1", 816 | "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", 817 | "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" 818 | }, 819 | "lodash.padstart": { 820 | "version": "4.6.1", 821 | "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", 822 | "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" 823 | }, 824 | "lru-cache": { 825 | "version": "4.1.1", 826 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", 827 | "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", 828 | "requires": { 829 | "pseudomap": "1.0.2", 830 | "yallist": "2.1.2" 831 | } 832 | }, 833 | "mem": { 834 | "version": "1.1.0", 835 | "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", 836 | "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", 837 | "requires": { 838 | "mimic-fn": "1.1.0" 839 | } 840 | }, 841 | "mime-db": { 842 | "version": "1.30.0", 843 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 844 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" 845 | }, 846 | "mime-types": { 847 | "version": "2.1.17", 848 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 849 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", 850 | "requires": { 851 | "mime-db": "1.30.0" 852 | } 853 | }, 854 | "mimic-fn": { 855 | "version": "1.1.0", 856 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", 857 | "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=" 858 | }, 859 | "minimatch": { 860 | "version": "3.0.4", 861 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 862 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 863 | "requires": { 864 | "brace-expansion": "1.1.8" 865 | } 866 | }, 867 | "minimist": { 868 | "version": "1.2.0", 869 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 870 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 871 | }, 872 | "mkdirp": { 873 | "version": "0.5.1", 874 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 875 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 876 | "requires": { 877 | "minimist": "0.0.8" 878 | }, 879 | "dependencies": { 880 | "minimist": { 881 | "version": "0.0.8", 882 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 883 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 884 | } 885 | } 886 | }, 887 | "ms": { 888 | "version": "2.0.0", 889 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 890 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 891 | }, 892 | "node-addon-api": { 893 | "version": "1.0.0", 894 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.0.0.tgz", 895 | "integrity": "sha1-zmK8aGX2D41lwEQfLRpb26XNpZA=" 896 | }, 897 | "node-gyp": { 898 | "version": "3.6.2", 899 | "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", 900 | "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", 901 | "requires": { 902 | "fstream": "1.0.11", 903 | "glob": "7.1.2", 904 | "graceful-fs": "4.1.11", 905 | "minimatch": "3.0.4", 906 | "mkdirp": "0.5.1", 907 | "nopt": "3.0.6", 908 | "npmlog": "2.0.4", 909 | "osenv": "0.1.4", 910 | "request": "2.83.0", 911 | "rimraf": "2.6.2", 912 | "semver": "5.3.0", 913 | "tar": "2.2.1", 914 | "which": "1.3.0" 915 | } 916 | }, 917 | "node-ninja": { 918 | "version": "1.0.2", 919 | "resolved": "https://registry.npmjs.org/node-ninja/-/node-ninja-1.0.2.tgz", 920 | "integrity": "sha1-IKCeV7kuLfWRmT1L8JisPnJwYrY=", 921 | "requires": { 922 | "fstream": "1.0.11", 923 | "glob": "7.1.2", 924 | "graceful-fs": "4.1.11", 925 | "minimatch": "3.0.4", 926 | "mkdirp": "0.5.1", 927 | "nopt": "3.0.6", 928 | "npmlog": "2.0.4", 929 | "osenv": "0.1.4", 930 | "path-array": "1.0.1", 931 | "request": "2.83.0", 932 | "rimraf": "2.6.2", 933 | "semver": "5.3.0", 934 | "tar": "2.2.1", 935 | "which": "1.3.0" 936 | } 937 | }, 938 | "noop-logger": { 939 | "version": "0.1.1", 940 | "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", 941 | "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" 942 | }, 943 | "nopt": { 944 | "version": "3.0.6", 945 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", 946 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", 947 | "requires": { 948 | "abbrev": "1.1.1" 949 | } 950 | }, 951 | "normalize-package-data": { 952 | "version": "2.4.0", 953 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 954 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", 955 | "requires": { 956 | "hosted-git-info": "2.5.0", 957 | "is-builtin-module": "1.0.0", 958 | "semver": "5.3.0", 959 | "validate-npm-package-license": "3.0.1" 960 | } 961 | }, 962 | "npm-run-path": { 963 | "version": "2.0.2", 964 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 965 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 966 | "requires": { 967 | "path-key": "2.0.1" 968 | } 969 | }, 970 | "npmlog": { 971 | "version": "2.0.4", 972 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", 973 | "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", 974 | "requires": { 975 | "ansi": "0.3.1", 976 | "are-we-there-yet": "1.1.4", 977 | "gauge": "1.2.7" 978 | } 979 | }, 980 | "number-is-nan": { 981 | "version": "1.0.1", 982 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 983 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 984 | }, 985 | "oauth-sign": { 986 | "version": "0.8.2", 987 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 988 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" 989 | }, 990 | "once": { 991 | "version": "1.4.0", 992 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 993 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 994 | "requires": { 995 | "wrappy": "1.0.2" 996 | } 997 | }, 998 | "os-homedir": { 999 | "version": "1.0.2", 1000 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 1001 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" 1002 | }, 1003 | "os-locale": { 1004 | "version": "2.1.0", 1005 | "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", 1006 | "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", 1007 | "requires": { 1008 | "execa": "0.7.0", 1009 | "lcid": "1.0.0", 1010 | "mem": "1.1.0" 1011 | } 1012 | }, 1013 | "os-tmpdir": { 1014 | "version": "1.0.2", 1015 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1016 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 1017 | }, 1018 | "osenv": { 1019 | "version": "0.1.4", 1020 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", 1021 | "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", 1022 | "requires": { 1023 | "os-homedir": "1.0.2", 1024 | "os-tmpdir": "1.0.2" 1025 | } 1026 | }, 1027 | "p-finally": { 1028 | "version": "1.0.0", 1029 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1030 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" 1031 | }, 1032 | "p-limit": { 1033 | "version": "1.1.0", 1034 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", 1035 | "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=" 1036 | }, 1037 | "p-locate": { 1038 | "version": "2.0.0", 1039 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", 1040 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", 1041 | "requires": { 1042 | "p-limit": "1.1.0" 1043 | } 1044 | }, 1045 | "parse-json": { 1046 | "version": "2.2.0", 1047 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 1048 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 1049 | "requires": { 1050 | "error-ex": "1.3.1" 1051 | } 1052 | }, 1053 | "path-array": { 1054 | "version": "1.0.1", 1055 | "resolved": "https://registry.npmjs.org/path-array/-/path-array-1.0.1.tgz", 1056 | "integrity": "sha1-fi8PNfB6IBUSK4aLfqwOssT+wnE=", 1057 | "requires": { 1058 | "array-index": "1.0.0" 1059 | } 1060 | }, 1061 | "path-exists": { 1062 | "version": "3.0.0", 1063 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1064 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" 1065 | }, 1066 | "path-is-absolute": { 1067 | "version": "1.0.1", 1068 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1069 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1070 | }, 1071 | "path-key": { 1072 | "version": "2.0.1", 1073 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1074 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" 1075 | }, 1076 | "path-type": { 1077 | "version": "2.0.0", 1078 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", 1079 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", 1080 | "requires": { 1081 | "pify": "2.3.0" 1082 | } 1083 | }, 1084 | "performance-now": { 1085 | "version": "2.1.0", 1086 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1087 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 1088 | }, 1089 | "pify": { 1090 | "version": "2.3.0", 1091 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1092 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" 1093 | }, 1094 | "prebuild": { 1095 | "version": "4.5.0", 1096 | "resolved": "https://registry.npmjs.org/prebuild/-/prebuild-4.5.0.tgz", 1097 | "integrity": "sha1-KqoN8gY7/4FKgDvU3JT/m2Tl3wA=", 1098 | "requires": { 1099 | "async": "1.5.2", 1100 | "execspawn": "1.0.1", 1101 | "expand-template": "1.1.0", 1102 | "ghreleases": "1.0.6", 1103 | "github-from-package": "0.0.0", 1104 | "minimist": "1.2.0", 1105 | "mkdirp": "0.5.1", 1106 | "node-gyp": "3.6.2", 1107 | "node-ninja": "1.0.2", 1108 | "noop-logger": "0.1.1", 1109 | "npmlog": "2.0.4", 1110 | "os-homedir": "1.0.2", 1111 | "pump": "1.0.2", 1112 | "rc": "1.2.1", 1113 | "simple-get": "1.4.3", 1114 | "tar-fs": "1.15.3", 1115 | "tar-stream": "1.5.4", 1116 | "xtend": "4.0.1" 1117 | } 1118 | }, 1119 | "process-nextick-args": { 1120 | "version": "1.0.7", 1121 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 1122 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" 1123 | }, 1124 | "prr": { 1125 | "version": "0.0.0", 1126 | "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", 1127 | "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=" 1128 | }, 1129 | "pseudomap": { 1130 | "version": "1.0.2", 1131 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1132 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" 1133 | }, 1134 | "pump": { 1135 | "version": "1.0.2", 1136 | "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz", 1137 | "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=", 1138 | "requires": { 1139 | "end-of-stream": "1.4.0", 1140 | "once": "1.4.0" 1141 | } 1142 | }, 1143 | "punycode": { 1144 | "version": "1.4.1", 1145 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1146 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 1147 | }, 1148 | "qs": { 1149 | "version": "6.5.1", 1150 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 1151 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" 1152 | }, 1153 | "rc": { 1154 | "version": "1.2.1", 1155 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", 1156 | "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", 1157 | "requires": { 1158 | "deep-extend": "0.4.2", 1159 | "ini": "1.3.4", 1160 | "minimist": "1.2.0", 1161 | "strip-json-comments": "2.0.1" 1162 | } 1163 | }, 1164 | "read-pkg": { 1165 | "version": "2.0.0", 1166 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", 1167 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", 1168 | "requires": { 1169 | "load-json-file": "2.0.0", 1170 | "normalize-package-data": "2.4.0", 1171 | "path-type": "2.0.0" 1172 | } 1173 | }, 1174 | "read-pkg-up": { 1175 | "version": "2.0.0", 1176 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", 1177 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", 1178 | "requires": { 1179 | "find-up": "2.1.0", 1180 | "read-pkg": "2.0.0" 1181 | } 1182 | }, 1183 | "readable-stream": { 1184 | "version": "2.0.6", 1185 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", 1186 | "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", 1187 | "requires": { 1188 | "core-util-is": "1.0.2", 1189 | "inherits": "2.0.3", 1190 | "isarray": "1.0.0", 1191 | "process-nextick-args": "1.0.7", 1192 | "string_decoder": "0.10.31", 1193 | "util-deprecate": "1.0.2" 1194 | } 1195 | }, 1196 | "request": { 1197 | "version": "2.83.0", 1198 | "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", 1199 | "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", 1200 | "requires": { 1201 | "aws-sign2": "0.7.0", 1202 | "aws4": "1.6.0", 1203 | "caseless": "0.12.0", 1204 | "combined-stream": "1.0.5", 1205 | "extend": "3.0.1", 1206 | "forever-agent": "0.6.1", 1207 | "form-data": "2.3.1", 1208 | "har-validator": "5.0.3", 1209 | "hawk": "6.0.2", 1210 | "http-signature": "1.2.0", 1211 | "is-typedarray": "1.0.0", 1212 | "isstream": "0.1.2", 1213 | "json-stringify-safe": "5.0.1", 1214 | "mime-types": "2.1.17", 1215 | "oauth-sign": "0.8.2", 1216 | "performance-now": "2.1.0", 1217 | "qs": "6.5.1", 1218 | "safe-buffer": "5.1.1", 1219 | "stringstream": "0.0.5", 1220 | "tough-cookie": "2.3.3", 1221 | "tunnel-agent": "0.6.0", 1222 | "uuid": "3.1.0" 1223 | } 1224 | }, 1225 | "require-directory": { 1226 | "version": "2.1.1", 1227 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1228 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 1229 | }, 1230 | "require-main-filename": { 1231 | "version": "1.0.1", 1232 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", 1233 | "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" 1234 | }, 1235 | "rimraf": { 1236 | "version": "2.6.2", 1237 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 1238 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 1239 | "requires": { 1240 | "glob": "7.1.2" 1241 | } 1242 | }, 1243 | "safe-buffer": { 1244 | "version": "5.1.1", 1245 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 1246 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 1247 | }, 1248 | "semver": { 1249 | "version": "5.3.0", 1250 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", 1251 | "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" 1252 | }, 1253 | "set-blocking": { 1254 | "version": "2.0.0", 1255 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1256 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 1257 | }, 1258 | "shebang-command": { 1259 | "version": "1.2.0", 1260 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1261 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1262 | "requires": { 1263 | "shebang-regex": "1.0.0" 1264 | } 1265 | }, 1266 | "shebang-regex": { 1267 | "version": "1.0.0", 1268 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1269 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" 1270 | }, 1271 | "signal-exit": { 1272 | "version": "3.0.2", 1273 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1274 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 1275 | }, 1276 | "simple-get": { 1277 | "version": "1.4.3", 1278 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-1.4.3.tgz", 1279 | "integrity": "sha1-6XVe2kB+ltpAxeUVjJ6jezO+y+s=", 1280 | "requires": { 1281 | "once": "1.4.0", 1282 | "unzip-response": "1.0.2", 1283 | "xtend": "4.0.1" 1284 | } 1285 | }, 1286 | "simple-mime": { 1287 | "version": "0.1.0", 1288 | "resolved": "https://registry.npmjs.org/simple-mime/-/simple-mime-0.1.0.tgz", 1289 | "integrity": "sha1-lfUXxPRm18/1YacfydqyWW6p7y4=" 1290 | }, 1291 | "sntp": { 1292 | "version": "2.0.2", 1293 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz", 1294 | "integrity": "sha1-UGQRDwr4X3z9t9a2ekACjOUrSys=", 1295 | "requires": { 1296 | "hoek": "4.2.0" 1297 | } 1298 | }, 1299 | "spdx-correct": { 1300 | "version": "1.0.2", 1301 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", 1302 | "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", 1303 | "requires": { 1304 | "spdx-license-ids": "1.2.2" 1305 | } 1306 | }, 1307 | "spdx-expression-parse": { 1308 | "version": "1.0.4", 1309 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", 1310 | "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" 1311 | }, 1312 | "spdx-license-ids": { 1313 | "version": "1.2.2", 1314 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", 1315 | "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" 1316 | }, 1317 | "sshpk": { 1318 | "version": "1.13.1", 1319 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", 1320 | "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", 1321 | "requires": { 1322 | "asn1": "0.2.3", 1323 | "assert-plus": "1.0.0", 1324 | "bcrypt-pbkdf": "1.0.1", 1325 | "dashdash": "1.14.1", 1326 | "ecc-jsbn": "0.1.1", 1327 | "getpass": "0.1.7", 1328 | "jsbn": "0.1.1", 1329 | "tweetnacl": "0.14.5" 1330 | } 1331 | }, 1332 | "string-width": { 1333 | "version": "2.1.1", 1334 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1335 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1336 | "requires": { 1337 | "is-fullwidth-code-point": "2.0.0", 1338 | "strip-ansi": "4.0.0" 1339 | }, 1340 | "dependencies": { 1341 | "ansi-regex": { 1342 | "version": "3.0.0", 1343 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1344 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" 1345 | }, 1346 | "is-fullwidth-code-point": { 1347 | "version": "2.0.0", 1348 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1349 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 1350 | }, 1351 | "strip-ansi": { 1352 | "version": "4.0.0", 1353 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1354 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1355 | "requires": { 1356 | "ansi-regex": "3.0.0" 1357 | } 1358 | } 1359 | } 1360 | }, 1361 | "string_decoder": { 1362 | "version": "0.10.31", 1363 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1364 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 1365 | }, 1366 | "stringstream": { 1367 | "version": "0.0.5", 1368 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 1369 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" 1370 | }, 1371 | "strip-ansi": { 1372 | "version": "3.0.1", 1373 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1374 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1375 | "requires": { 1376 | "ansi-regex": "2.1.1" 1377 | } 1378 | }, 1379 | "strip-bom": { 1380 | "version": "3.0.0", 1381 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 1382 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" 1383 | }, 1384 | "strip-eof": { 1385 | "version": "1.0.0", 1386 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 1387 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" 1388 | }, 1389 | "strip-json-comments": { 1390 | "version": "2.0.1", 1391 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1392 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 1393 | }, 1394 | "tar": { 1395 | "version": "2.2.1", 1396 | "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", 1397 | "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", 1398 | "requires": { 1399 | "block-stream": "0.0.9", 1400 | "fstream": "1.0.11", 1401 | "inherits": "2.0.3" 1402 | } 1403 | }, 1404 | "tar-fs": { 1405 | "version": "1.15.3", 1406 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.15.3.tgz", 1407 | "integrity": "sha1-7M+TXpQUk9gVECjmNuUc5MPKfyA=", 1408 | "requires": { 1409 | "chownr": "1.0.1", 1410 | "mkdirp": "0.5.1", 1411 | "pump": "1.0.2", 1412 | "tar-stream": "1.5.4" 1413 | } 1414 | }, 1415 | "tar-stream": { 1416 | "version": "1.5.4", 1417 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", 1418 | "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", 1419 | "requires": { 1420 | "bl": "1.0.3", 1421 | "end-of-stream": "1.4.0", 1422 | "readable-stream": "2.0.6", 1423 | "xtend": "4.0.1" 1424 | } 1425 | }, 1426 | "through2": { 1427 | "version": "0.6.5", 1428 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 1429 | "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 1430 | "requires": { 1431 | "readable-stream": "1.0.34", 1432 | "xtend": "4.0.1" 1433 | }, 1434 | "dependencies": { 1435 | "isarray": { 1436 | "version": "0.0.1", 1437 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1438 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 1439 | }, 1440 | "readable-stream": { 1441 | "version": "1.0.34", 1442 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 1443 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 1444 | "requires": { 1445 | "core-util-is": "1.0.2", 1446 | "inherits": "2.0.3", 1447 | "isarray": "0.0.1", 1448 | "string_decoder": "0.10.31" 1449 | } 1450 | } 1451 | } 1452 | }, 1453 | "tough-cookie": { 1454 | "version": "2.3.3", 1455 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", 1456 | "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", 1457 | "requires": { 1458 | "punycode": "1.4.1" 1459 | } 1460 | }, 1461 | "tunnel-agent": { 1462 | "version": "0.6.0", 1463 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1464 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1465 | "requires": { 1466 | "safe-buffer": "5.1.1" 1467 | } 1468 | }, 1469 | "tweetnacl": { 1470 | "version": "0.14.5", 1471 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1472 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 1473 | "optional": true 1474 | }, 1475 | "unzip-response": { 1476 | "version": "1.0.2", 1477 | "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", 1478 | "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" 1479 | }, 1480 | "url-template": { 1481 | "version": "2.0.8", 1482 | "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", 1483 | "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" 1484 | }, 1485 | "util-deprecate": { 1486 | "version": "1.0.2", 1487 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1488 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1489 | }, 1490 | "util-extend": { 1491 | "version": "1.0.3", 1492 | "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", 1493 | "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=" 1494 | }, 1495 | "uuid": { 1496 | "version": "3.1.0", 1497 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", 1498 | "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" 1499 | }, 1500 | "validate-npm-package-license": { 1501 | "version": "3.0.1", 1502 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", 1503 | "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", 1504 | "requires": { 1505 | "spdx-correct": "1.0.2", 1506 | "spdx-expression-parse": "1.0.4" 1507 | } 1508 | }, 1509 | "verror": { 1510 | "version": "1.10.0", 1511 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1512 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1513 | "requires": { 1514 | "assert-plus": "1.0.0", 1515 | "core-util-is": "1.0.2", 1516 | "extsprintf": "1.3.0" 1517 | } 1518 | }, 1519 | "which": { 1520 | "version": "1.3.0", 1521 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", 1522 | "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", 1523 | "requires": { 1524 | "isexe": "2.0.0" 1525 | } 1526 | }, 1527 | "which-module": { 1528 | "version": "2.0.0", 1529 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 1530 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" 1531 | }, 1532 | "wrap-ansi": { 1533 | "version": "2.1.0", 1534 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", 1535 | "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", 1536 | "requires": { 1537 | "string-width": "1.0.2", 1538 | "strip-ansi": "3.0.1" 1539 | }, 1540 | "dependencies": { 1541 | "string-width": { 1542 | "version": "1.0.2", 1543 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1544 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1545 | "requires": { 1546 | "code-point-at": "1.1.0", 1547 | "is-fullwidth-code-point": "1.0.0", 1548 | "strip-ansi": "3.0.1" 1549 | } 1550 | } 1551 | } 1552 | }, 1553 | "wrappy": { 1554 | "version": "1.0.2", 1555 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1556 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1557 | }, 1558 | "xtend": { 1559 | "version": "4.0.1", 1560 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 1561 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 1562 | }, 1563 | "y18n": { 1564 | "version": "3.2.1", 1565 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", 1566 | "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" 1567 | }, 1568 | "yallist": { 1569 | "version": "2.1.2", 1570 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 1571 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" 1572 | }, 1573 | "yargs": { 1574 | "version": "8.0.2", 1575 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", 1576 | "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", 1577 | "requires": { 1578 | "camelcase": "4.1.0", 1579 | "cliui": "3.2.0", 1580 | "decamelize": "1.2.0", 1581 | "get-caller-file": "1.0.2", 1582 | "os-locale": "2.1.0", 1583 | "read-pkg-up": "2.0.0", 1584 | "require-directory": "2.1.1", 1585 | "require-main-filename": "1.0.1", 1586 | "set-blocking": "2.0.0", 1587 | "string-width": "2.1.1", 1588 | "which-module": "2.0.0", 1589 | "y18n": "3.2.1", 1590 | "yargs-parser": "7.0.0" 1591 | } 1592 | }, 1593 | "yargs-parser": { 1594 | "version": "7.0.0", 1595 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", 1596 | "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", 1597 | "requires": { 1598 | "camelcase": "4.1.0" 1599 | } 1600 | } 1601 | } 1602 | } 1603 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "napi-demo", 3 | "description": "Simple http server using leveldown to test Node.js with N-API", 4 | "private": true, 5 | "version": "1.1.0", 6 | "dependencies": { 7 | "leveldown": "git://github.com/sampsongao/leveldown#napi", 8 | "level-iterator-stream": "~1.3.1", 9 | "es6-shim": "~0.35.1", 10 | "yargs": "~8.0.1" 11 | }, 12 | "main": "app.js" 13 | } 14 | -------------------------------------------------------------------------------- /page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NAPI Demo 5 | 6 | 54 | 162 | 163 | 164 | 165 | 166 |
167 | 168 | 169 | 170 |

171 |
172 | 173 |
174 |
175 | 176 | 177 | --------------------------------------------------------------------------------